function getCheckboxValue(from, to) {
	if(from.checked)
		to.value = false;
	else	
		to.value = true;
}

function setCheckBox(obj, value) {
	if (value)
		obj.checked = false;
	else
		obj.checked = true;
}

function setSelectValue(obj, value) {
	for(var i=0; i< obj.options.length;i++) {
		if (obj.options[i].value == value) {
			obj.selectedIndex = i;
			obj.options[i].selected = true;
			return;	
		}	
	}
}

function CheckEmail(email, error) {
	if (!CheckRequired(email, error))
		return false;
	if (!isValidEmail(email.value)){
		alert(error+ " address entered is invalid. The email address must start and end with a letter or number and can contain letters, numbers, periods (.), hyphens (-) and underscores (_).");
		email.focus();
		return false;
	}
	return true;
}

function CheckRequired(obj, error) {
	var value = trim(obj.value);
	if (value.length == 0){
		alert(error +" is required.");
		obj.focus();
		return false;
	}
	return true;
}

function CheckPassword(form) {
	if (!CheckRequired(form.password, "Password"))
		return false;
	if (!CheckDigits(form.password, "Password"))
		return false;
		
	return true;
}

function CheckDigits(obj, error) {
	if (!isOnlyDigits(obj.value)){
		alert(error+ ' must contain only digits.');
		obj.focus();
		return false;
	}
	return true;
}

function CheckRequiredOption(obj, error) {
	if (obj.options[obj.selectedIndex].value == "-1" || obj.options[obj.selectedIndex].value == "" ){
		alert(error +" is required.");
		obj.focus();
		return false;
	}
	return true;
}

function CheckAgreeTermCondition(form) {
	if (!form.agree.checked){
		alert('You must agree to the terms and conditions to continue.');
		form.agree.focus();
		return false;
	 }
	 return true;
}

function validUserInformationForm(form, ispay) { 
	if (!CheckRequired(form.fname, "First Name"))
		return false;
	if (!CheckRequired(form.lname, "Last Name"))
		return false;
	if (!CheckEmail(form.email, "Email"))
		return false;
    if (!CheckRequiredOption(form.voicetype, "VoiceBox Type"))
        return false;
    if (form.voicetype.options[form.voicetype.selectedIndex].value == 2) {
       if (!CheckDialoutNumber(form.dialoutnumber, "Target phone number"))
  	     return false;
    }

	if (ispay.toLowerCase() == "true") {
		if (!CheckPhoneNumber(form.phonenumber, "Phone Number"))
			return false;
		if (!CheckRequired(form.contactaddress, "Street Address"))
			return false;
		if (!CheckRequired(form.contactcity, "City"))
			return false;
		if (!CheckRequiredOption(form.contactstate, "State"))
			return false;
		if (!CheckRequired(form.contactzip, "Zip"))
			return false;
		if (!CheckRequiredOption(form.cardtype,"Card Type"))
			return false;
		if (!CheckCardValidationEdit(form.cardtype.value, form.cardnumber, "cardnumberlabel", "Card Number"))
			return false;
		if (!CheckRequired(form.cid, "CID"))
			return false;			
		if (!CheckRequiredOption(form.cardexpiration_month, "Card Expiration Month"))
			return false;
		if (!CheckRequiredOption(form.cardexpiration_year, "Card Expiration Year"))
			return false;
		if (!CheckRequired(form.cardholder, "Card Holder's Name"))
			return false;
		if (!form.billingsamecontact.checked) {		
			if (!CheckRequired(form.billingaddress, "Billing Address"))
				return false;
			if (!CheckRequired(form.billingcity, "Billing City"))
				return false;
			if (!CheckRequiredOption(form.billingstate, "Billing State"))
				return false;
			if (!CheckRequired(form.billingzip, "Billing Zip"))
				return false;
		}
	}
	if(!CheckPassword(form))
		return false;
	if (!checkTimezone(form))
  		return false;
	return true;
} 

function CheckCardValidationEdit(type, obj, label, error) {
	if (document.getElementById(label)){
		if (document.getElementById(label).style.display != "none" && document.getElementById(label).innerHTML.length>0)
			return true;
		if (document.getElementById(label).style.display == "none")
			return isValidCreditCard(type, obj, error);
	}	else {
		return isValidCreditCard(type, obj, error);
	}
	return true;
}

function validRegistrationForm(form, ispay) { 
	if (!validUserInformationForm(form, ispay))
		return false;
	if(!CheckAgreeTermCondition(form))
		return false;
	return true;
} 

function validAccountForm(form, ispay) {
	if(!validUserInformationForm(form, ispay))
		return false;
	return true;
}

function validTroubleTicketForm(form) {
	if (!CheckRequired(form.name, "Name"))
		return false;
	if (!CheckEmail(form.email, "Email"))
		return false;		
	if (!CheckRequired(form.accesscode, "Extension"))
		return false;
	if (!CheckRequired(form.phonenumber, "Phone Number"))
		return false;
	return true;
}

function validReferFriendForm(form) {
	if (!CheckRequired(form.friendname, "Friend's Name"))
		return false;
	if (!CheckEmail(form.friendemail, "Friend's Email"))
		return false;			
	if (!CheckRequired(form.name, "Your Name"))
		return false;
	if (!CheckEmail(form.email, "Your Email"))
		return false;		
	return true;
}

function setCheckBoxValue(obj) {
	if(obj.checked)
		obj.value = "0";
	else
		obj.value = "1";
}

function checkTimezone(form) {
	if (form.short_timezoneid.style.display == "block"){
		if (!CheckRequiredOption(form.short_timezoneid,"Time Zone"))
			return false;
	}
	else{
		if (form.full_timezoneid.style.display == "block"){
			if (!CheckRequiredOption(form.full_timezoneid,"Time Zone"))
			return false;
		}
	}
	return true;
}

function setTimezoneid() {
	var form = document.forms[0];
	//if short list is displayed
	if (document.getElementById("short_timezoneid").style.display == "block")
		form.timezoneid.value = form.short_timezoneid.options[form.short_timezoneid.selectedIndex].value;
	else{
		// if full list is displayed
		if (document.getElementById("full_timezoneid").style.display == "block")
			form.timezoneid.value = form.full_timezoneid.options[form.full_timezoneid.selectedIndex].value;
		else
			form.timezoneid.value = -1;
	}
}

function findUserTimezoneInList(list_elem, timezoneid) {
	for(var i=0; i<list_elem.options.length; i++) {
		if (timezoneid == list_elem.options[i].value) {
			list_elem.selectedIndex = i;
			return true;
		}
	}
	return false;
}

function showUserTimeZone() {
	var form = document.forms[0];
	short_list = form.short_timezoneid;
	full_list = form.full_timezoneid;
	usertimezoneid = form.timezoneid.value;
	
	if (findUserTimezoneInList(short_list, usertimezoneid))
		showShortList(); // user has selected timezone from short list
	else{
		if (findUserTimezoneInList(full_list, usertimezoneid))
			showFullList(); // user has selected timezone from full list and timezone does not exist in short timezone
		else
			showShortList(); // user has not selected timezone, by default show for user short list
	}
}

function showFullList() {
	document.getElementById("short_timezoneid").style.display = "none";
	document.getElementById("short_timezoneid_button").style.display = "block";	
	document.getElementById("full_timezoneid").style.display = "block";
	document.getElementById("full_timezoneid_button").style.display = "none";
}

function showShortList() {
	document.getElementById("short_timezoneid").style.display = "block";
	document.getElementById("short_timezoneid_button").style.display = "none";	
	document.getElementById("full_timezoneid").style.display = "none";
	document.getElementById("full_timezoneid_button").style.display = "block";
}

function CheckPhoneNumber(phonenumber, fieldname) {
	if (!CheckRequired(phonenumber, fieldname))
		return false;
	pn = phonenumber.value;
  pn = pn.replace(/[\(\s\)\-\+]/g,"");
  isphonenumber = (!isNaN(pn) && (pn.length == 10 || pn.length == 11))
  if (!isphonenumber){
		alert(fieldname+" is invalid. The phone number field must contain 10 or 11 digit phone number.");
		phonenumber.focus();
		return false;
	}
	return true;
}

function CheckDialoutNumber(phonenumber, fieldname) {
  if (!CheckRequired(phonenumber, fieldname))
	return false;
  pn = phonenumber.value;
  pn = pn.replace(/[\(\s\)\-\+]/g,"");
  isphonenumber = (!isNaN(pn) && pn.length == 10)
  if (!isphonenumber){
	alert(fieldname+" is invalid, it must contain 10 digits.");
	phonenumber.focus();
	return false;
  }
  if (pn.indexOf("1") == 0) {
  	alert(fieldname+" is invalid, the first digit should not be equal to 1.");
	phonenumber.focus();
	return false;
  }
  return true;
}

function onKeyPress(e) {
	var enter = 13;
	if (!e) var e = window.event;  //for IE
	if(e.srcElement)
		elem_name = e.srcElement.tagName;
	else
		elem_name = e.target.tagName;
		
	var code;
	code = e.keyCode || e.which || 0; // keyCode for IE, In Moz, if keyCode==0 then use which. But sometimes both keyCode and which will be >0.
	if (code == enter && elem_name.toLowerCase() !='a')
		onSubmit();
}

function setFocusOnField(obj) {
	obj.focus();
}

function validUploadFile(form) {
	if (form.file_name.value.length ==0 ) {
		alert("Please select a file to upload first.");
		form.file_name.focus();
		return false;
	}
	if (!validFileGreeting(form.file_name, "Uploading file"))
		return false;
	return true;
}
function CheckMaxlength(obj, maxlength, name) {
	if (obj.value.length > maxlength){
		alert(name +" can't contain more then "+maxlength+ " characters.");
		obj.focus();
		return false;
	}
	return true;
}

function trim(s) {
	return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}