	function loadStates(countryCode, state){			
		var txtField = $("txtState");
		var oStates = document.form_registration.state;
		
		if (!txtField)
		{
			txtField = document.createElement("input");
			txtField.id = "txtState";
			txtField.className = "input_txt";
		}
		
		if(countryCode != 'USA' && countryCode != 'CAN')
		{
			if (!txtField.combo)
			{
				txtField.name = oStates.name;
				txtField.combo = oStates;
				txtField.combo.name = "combo_"+txtField.name;
				txtField.combo.parentNode.appendChild(txtField);
				txtField.combo.parentNode.removeChild(txtField.combo);				
			}
			if(state)
				txtField.value = state;
			return;
		}
		else if (txtField.combo)
		{
			oStates = txtField.combo;
			txtField.combo.name = txtField.name;
			txtField.parentNode.appendChild(txtField.combo);
			txtField.parentNode.removeChild(txtField);
			txtField.combo = null;
		}
		
		deleteListItems(oStates);
		dojo.xhrGet( {
			// The following URL must match that used to test the server.
	        url: "./ajax/LoadStates.do?CountryID="+countryCode, 
	        handleAs: "json",		
	        timeout: 5000, // Time in milliseconds
	
	        // The LOAD function will be called on a successful response.
	        load: function(responseObject, ioArgs) { 
				//alert(responseObject.length); 				
				//console.dir("response: " + responseObject[0].name);
				addOption(oStates, "Select one", "");
				for(i = 0; i < responseObject.length; i++){
					addOption(oStates, responseObject[i].name, responseObject[i].value);
				} 	
				if(state)
					oStates.value = state;
				else 
					oStates.selectedIndex=0;
	          	return true; 
	        },
	
	        // The ERROR function will be called in an error case.
	        error: function(response, ioArgs) { 
	          console.error("HTTP status code: ", ioArgs.xhr.status);
	          return false; 
	          }
	     });
	}
	function CheckAvailability(_memberName,_email,_firstName,_lastName) { 
		resetOverlay();
		document.getElementById("pop_availability").className="pop_content";
		document.getElementById("searching_availability").className="";
		placeInCenter(document.getElementById("pop_availability"),true, 250);
		//GGALVIS ADD
		var requiredFields=new Array();
		var memberName=_memberName.value;
		var email=_email.value;
		requiredFields.push({fieldname:'E-Mail',obj:_email});
		requiredFields.push({fieldname:'Membername',obj:_memberName});
		for(var i=0;i<requiredFields.length;i++)
		{	var val=removeSpaces(requiredFields[i]['obj'].value);
			if(val.length==0)
			{	document.getElementById("searching_availability").className="hidden";
				setAvailabilityMsgs('Please fill the '+requiredFields[i].fieldname+' before check availability',requiredFields[i].obj);
				return false;
			}			
		}
		if (!validateMemberName(_memberName))
		{
			document.getElementById("searching_availability").className="hidden";
			return false;
		}
		dojo.xhrGet( { 
			
        // The following URL must match that used to test the server.
        url: "./ajax/CheckAvailability.do?memberName="+memberName+"&email="+email, 
        handleAs: "text",		
        timeout: 5000, // Time in milliseconds

   		 // The LOAD function will be called on a successful response.
			load: function(response, ioArgs) { 
			
				if(response.indexOf("suggestedMemberName")!=-1){
					
					text = "The member name you have selected is unavailable. Please try again! Member Names must not exceed 20 characters nor contain any spaces.";
				
					document.getElementById("acceptedMemberName2").innerHTML=text;
					document.getElementById("searching_availability").className="hidden";
					document.getElementById("suggestions_availability").className="";
					document.getElementById("suggestion_list").className="";
					document.getElementById("suggestion_list").innerHTML = response;
					placeInCenter(document.getElementById("pop_availability"),true, 250);
				}
				
				else{
					document.getElementById("suggestion_list").className="hidden";
					document.getElementById("searching_availability").className="hidden";
					document.getElementById("available_availability").className="";
					placeInCenter(document.getElementById("pop_availability"),true, 250);
				}
			  	return true; 
			},
	
			// The ERROR function will be called in an error case.
			error: function(response, ioArgs) { 
				console.error("HTTP status code: ", ioArgs.xhr.status); 
				return false; 
			}
    
    
        });
      }     
      
 function resetOverlay(){
 
 	if(document.getElementById("available_availability")!=null)
 		document.getElementById("available_availability").className="hidden";
 	
 	if(document.getElementById("suggestions_availability")!=null)	
 		document.getElementById("suggestions_availability").className="hidden";
 	
 	if(document.getElementById("messages")!=null)
		document.getElementById("messages").className="hidden";				
 }
 
 
function setAvailabilityMsgs(msg,obj){	
	document.getElementById("pop_availability").className="pop_content";
	document.getElementById("messages").className="";
	document.getElementById("message").innerHTML=msg;
	placeInColumnCenter(document.getElementById("pop_availability"),true);		
}

function placeInColumnCenter(element, viewport)
{
	var leftOffset;
	var CONTENT_WIDTH = 983;
	var COLUMN_WIDTH = 670;
	
	placeInCenter(element, viewport);
	
	leftOffset = viewportWidth(); 
	if(leftOffset < CONTENT_WIDTH)
		return;

	leftOffset -= CONTENT_WIDTH;
	leftOffset = leftOffset / 2;

	left = ((COLUMN_WIDTH/2)-(element.clientWidth/2));
	element.style.left = (left+leftOffset)+"px";
}

      
 function setSuggestedMemberName(chosen){
 	document.getElementById("memberName").value = chosen;
 	document.getElementById("pop_availability").className="pop_content hidden";
 }
 
 function closeCheckAvailabilityOverlay(){
 	document.getElementById("pop_availability").className="pop_content hidden";
 }

	

function removeSpaces(string) {
	var tstring = "";
	string = '' + string;
	splitstring = string.split(" ");
	//alert("splitstring.length: "+splitstring.length);
	for(i = 0; i < splitstring.length; i++)
	tstring += splitstring[i];
	return tstring;
}	  
/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

function validateEmail(str) {

		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		if (str.indexOf(at)==-1){
		   return false;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false;
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false;
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false;
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false;
		 }

 		 return true;
	}
	
function validateMemberName(memberName)
{
	if(!memberName.value.replace(/^\s+|\s+$/g, '').match(/^[\w]{3,20}$/))
	{
		setAvailabilityMsgs('Member Name must have between 3 and 20 characters and should not contain any spaces or special characters.',memberName);		
			return false;
	}
	return true;	
}


	function validate(oForm, action){
	
		resetOverlay();
		if(!oForm.agree.checked){
			
			setAvailabilityMsgs('In order to complete your registration, you must agree to the Membership Conditions.',oForm.agree);		
			return false;
		}
		if(oForm.email.value == ""){
			
			setAvailabilityMsgs('Email: This field is required.',oForm.email);		
			return false;
		}
		if(!validateEmail(oForm.email.value)){		
			
			setAvailabilityMsgs('You have entered in an invalid e-mail address or password. Please go back and try again. If you continue to have problems contact us at aeinsiderfeedback@aetn.com',oForm.email);		
			return false;
		}

		if(oForm.email2.value == ""){	
			
			setAvailabilityMsgs('Re-type Email: This field is required.',oForm.email2);		
			return false;			
			
		}
		if(!validateEmail(oForm.email2.value) || oForm.email.value!=oForm.email2.value  && action=='register'){
			
			setAvailabilityMsgs('E-mail addresses are either invalid or do not match. Please try again.',oForm.email);		
			return false;
		}
		
		if(oForm.pswd.value == ""){
			
			setAvailabilityMsgs('For security reasons your password is required in order to update your profile.',oForm.password);		
			return false;			
		}
		if(oForm.pswd.value.length < 6 || oForm.pswd.value.indexOf(' ')!=-1){
			
			setAvailabilityMsgs('You have entered an invalid password. Your password is case-sensitive, must be at least 6 characters long, and cannot contain any spaces.',oForm.password);		
			return false;			
			
		}
		
		if(oForm.password2.value == ""){
			
			setAvailabilityMsgs('Re-type password: This field is required.',oForm.password2);		
			return false;			
		}
		if(oForm.pswd.value != oForm.password2.value){
			
			setAvailabilityMsgs('Passwords do not match. Please try again.',oForm.password);		
			return false;			
		}
		if(oForm.memberName.value == ""){
			
			setAvailabilityMsgs('memberName: This field is required.',oForm.memberName);		
			return false;			
			
		}
		if (!validateMemberName(oForm.memberName))
		{
			return false;
		}
		if(oForm.firstName.value == ""){

			setAvailabilityMsgs('First Name: This field is required.',oForm.firstName);		
			return false;			
		}
		if(oForm.lastName.value == ""){
	
			setAvailabilityMsgs('Last Name: This field is required.',oForm.lastName);		
			return false;			
		}
		if(validateRadioButton(oForm.gender)==false){		
			
			setAvailabilityMsgs('Gender: This field is required.');		
			return false;			
		}
		if(!(oForm.dd.value && oForm.mm.value && oForm.yyyy.value)){		
			
			setAvailabilityMsgs('Birthdate: This field is required.');		
			return false;			
		}		
		if(!isOver18(oForm)){
			
			setAvailabilityMsgs('You must be 18 or older to register.');		
			return false;			
			
		}
		if(oForm.addressOne.value == ""){
			
			setAvailabilityMsgs('Address 1: This field is required.',oForm.addressOne);		
			return false;
			
		}
		if(oForm.city.value == ""){
			
			setAvailabilityMsgs('City: This field is required.',oForm.city);		
			return false;
			
		}
		if(!(($("state") && $("state").value) || $("txtState"))){			
			setAvailabilityMsgs('State/Province: This field is required.',oForm.state);		
			return false;
		}
		
		if(!validateZIP(oForm)){
					
			setAvailabilityMsgs('Invalid Zip code.',oForm.zipCode);		
			return false;			
		}
		if(validateRadioButton(oForm.phone)==false){		
			
			setAvailabilityMsgs('Phone: This field is required.');		
			return false;
			
		}
		if(oForm.phoneNumber1.value == "" || oForm.phoneNumber2.value == "" || oForm.phoneNumber3.value == ""){
			
			setAvailabilityMsgs('Phone Number is required');		
			return false;			
		}
		if(!isNumeric(oForm.phoneNumber1.value) || !isNumeric(oForm.phoneNumber2.value) || !isNumeric(oForm.phoneNumber3.value)){
			
			setAvailabilityMsgs('Phone Number must have numbers only');		
			return false;			
			
		}
		if(oForm.cableProvider.value == ""){
			
			setAvailabilityMsgs('Cable Provider: This field is required.');		
			return false;
			
		}
		if(oForm.frecuencyViewership.value == ""){
			
			setAvailabilityMsgs('How often do you watch A&E? : This field is required.',oForm.city);		
			return false;
			
		}

		oForm.password.value = hex_md5(oForm.pswd.value);		
		oForm.formAction.value = action;
   		return true;
	}
	
	function validateZIP(oForm){
		if(oForm.zipCode.value == ""){
			
			return false;
		}
		if(oForm.country.options[oForm.country.selectedIndex].value=="USA" && !validateZipUSA(oForm.zipCode.value)){
			
			return false;
		}
		if(oForm.country.options[oForm.country.selectedIndex].value=="CAN" && !validateZipCAN(oForm.zipCode.value)){
			
			return false;
		}
		return true;
	}
	function isOver18(oForm){
		var today = new Date();
		var birthDay = new Date();
		oForm.birthDate.value = oForm.dd.value + "/" + oForm.mm.value + "/" + oForm.yyyy.value;
		birthDay.setDate(oForm.dd.value);
		birthDay.setMonth(oForm.mm.value);
		birthDay.setYear(oForm.yyyy.value); 
		return ((today.getTime() - birthDay.getTime())/31536000000)>18;	
	}
	function validateRadioButton(oRadio){
		var checked = 0;
		for(i = 0; i < oRadio.length; i++){
			if(oRadio[i].checked){
				checked++;
			}
		}
		return (checked > 0);
	}
	
	function validateZipUSA(field) {
		var valid = "0123456789-";
		var hyphencount = 0;
		
		if (field.length!=5 && field.length!=10) {
			//alert("Please enter your 5 digit or 5 digit+4 zip code.");
			return false;
		}
		for (var i=0; i < field.length; i++) {
			temp = "" + field.substring(i, i+1);
			if (temp == "-") hyphencount++;
			if (valid.indexOf(temp) == "-1") {
			return false;
		}
		if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
			return false;
		   }
		}
		return true;
	}
	
	//function to validate postal code of canada
	function validateZipCAN(entry){
		entry = removeSpaces(entry); 
		strlen = entry.length;
		if (strlen != 6) {
			return false;
		}				
		entry=entry.toUpperCase();        
		// in case of lowercase characters
		// Check for legal characters in string - note index starts at zero
		if ('ABCEHJKLMNPRSTVXY'.indexOf(entry.charAt(0)) < 0) {
			return false;
		}
		if ('0123456789'.indexOf(entry.charAt(1)) < 0) {
			return false;
		}
		if ('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(entry.charAt(2)) < 0) {
			return false;
		}
		if ('0123456789'.indexOf(entry.charAt(3)) < 0) {
			return false;
		}
		if ('ABCDEFGHJKLMNPQRSTUVWXYZ'.indexOf(entry.charAt(4)) < 0) {
			return false;
		}
		if ('0123456789'.indexOf(entry.charAt(5)) < 0) {
			return false;
		}
		return true;
	}
	
	
	function removeSpaces(string) {
		var tstring = "";
		string = '' + string;
		//splitstring = string.split(" ");
		for(i = 0; i < string.length; i++){
			if(string.charAt(i)!= " "){
				tstring += string.charAt(i);
			}
		}
		return tstring;
	}
	
	function isNumeric(value){
		var valid = "0123456789";
		for (var i=0; i < value.length; i++) {
			temp = "" + value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1") {
				return false;
			}
		}
		return true;
	}
	function activateField(fieldId, status){
		oField = document.getElementById(fieldId);		
		oField.disabled = !status;
		//document.form_registration.mobileCarrier.disabled = !document.form_registration.mobileCarrier.disabled;
	}
	
	
	function check(checkbox){
	
		var noneString = '16';//16 corresponds to the value of the 'None of the above' checkbox
		var checkboxes = document.form_registration.genres;
	
		if(checkbox!=noneString){
			//Uncheck 'None of the above' 
			for(var i=0; i<checkboxes.length;i++){
				if(checkboxes[i].value==noneString)
					checkboxes[i].checked=false;
			}
		}
		
		else{
			//Uncheck all checkboxes except 'None of the above'	
			for(var i=0; i<checkboxes.length;i++){
				if(checkboxes[i].value!=noneString && checkboxes[i].checked==true){
					checkboxes[i].checked=false;		
				}
			}
		}
			
	}
	