/*
Validation script for chelsea's vip/index.asp page. 
*/
/*--Declare my variables--*/
var err;
var checked;
var notchecked;
var errmsg;
var radiobtn_checked;
var arrayBannedDomains = new Array();
var arrayBannedStrings = new Array();
/*-----------------------*/

/*--Validation starts here and ends here. All other functions are called from this function.--*/
function validate(formobj){
	init();	//initialize variables.
	
	//loop through all fields in the form
	for(var i = 0; i < formobj.length; i++){
		var e = formobj.elements[i];
		if(e.type == "text"){
			v_text(e);
		}
		if(e.type == "select-one"){
			v_sel(e);
		}
		if(e.type == "radio"){
			v_radio(e);
		}
		if(e.type == "checkbox"){
			v_checkbox(e);
		}
		if(e.type == "password"){
			v_password(e);
		}
	}
	
	//check to see if the combination of country and state selected is valid 
	if(document.vipform.sel_state.selectedIndex != 0 && document.vipform.sel_country.selectedIndex != 0){
		if(validStateCountry()){
			toggle_visibility("invalidStateCountry","hidden");
		}else{
		    toggle_visibility("invalidStateCountry","visible");
		
		}
	}
	
	//check to see if the gender radio buttons were checked
	if(radiobtn_checked != 1){
		err++;
		errmsg += "\tGender\r";
		toggle_visibility("rad_gender_div","visible");
		
	}else{
		toggle_visibility("rad_gender_div","hidden");
	}
	
	//check to see how many centers were selected
	if(checked <= 0){
		err++;
		errmsg += "\tSelect a center\r";
		toggle_visibility("idcenters","visible");
	}else{
		toggle_visibility("idcenters","hidden");
	}	
	
	if(err > 0){
	
		if(is.ie && on.mac){
			errmsg +="\r\r";
			alert(errmsg);
		}else{
			//show div layer with error message
			toggle_visibility("errorDiv","visible");
			toggle_display("errorDiv","block");
			
			toggle_visibility("errorDiv2","visible");
		}
		eval("window.scrollTo(0,0)"); //reposition the page???
		return false;
	}else{
		toggle_visibility("errorDiv","hidden");
		toggle_display("errorDiv","none");
		
		toggle_visibility("errorDiv2","hidden");
		return true;
		//return false;
	}
}

/*-- functions that do the actual validation of the form elements --*/

function validStateCountry(){

	if((document.vipform.sel_state.selectedIndex > 1 && document.vipform.sel_country.selectedIndex == 1) || ((document.vipform.sel_state.selectedIndex == 1) && (document.vipform.sel_country.selectedIndex ==2 || document.vipform.sel_country.selectedIndex > 3))){
		return true;
	}else{
		err++;
		return false;
	}
}


function v_text(obj){
	var _name = obj.name;
	var _val = obj.value;
	switch(_name){
		case "txt_fname":
			if(_val==""){errmsg+="\tFirst Name\r";toggle_visibility(_name+"_div","visible");err++;}
			else{toggle_visibility(_name+"_div","hidden")};break;
		case "txt_lname":
			if(_val==""){errmsg+="\tLast Name\r";toggle_visibility(_name+"_div","visible");err++;}
			else{toggle_visibility(_name+"_div","hidden")};break;
		case "txt_zip":
			if(_val==""){errmsg+="\tZip Code\r";toggle_visibility(_name+"_div","visible");err++;}
			else{toggle_visibility(_name+"_div","hidden")};break;
		case "txt_email":
			if(_val==""){errmsg+="\tEmail Address\r";toggle_visibility(_name+"_div","visible");toggle_visibility(_name+"confirm_div","hidden");err++;}
			else{confirm_email(_name,trim(_val))};break;
	}
}

function v_sel(obj){
	var ind = obj.selectedIndex;
	var n = obj.name;
	//alert(n);
	if(n == "sel_state"){
		if(ind==0){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tState\r";
		}else{
			toggle_visibility(n+"_div","hidden");
		}
	}else if(n == "sel_country"){
		if(ind==0){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tCountry\r";
		}else if(ind==3){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tCountry\r";
		}else{
			toggle_visibility(n+"_div","hidden");
		}
	}else if(n == "sel_age"){
		if(ind=="0"){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tAge\r";
		}else{
			toggle_visibility(n+"_div","hidden");
		}
	}else if(n == "sel_income"){
		if(ind=="0"){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tHousehold Income\r";
		}else{
			toggle_visibility(n+"_div","hidden");
		}
	}else if(n == "sel_hearabout"){
		if(ind=="0"){
			toggle_visibility(n+"_div","visible");
			err++;
			errmsg += "\tHow did you hear about us?\r";
		}else{
			toggle_visibility(n+"_div","hidden");
		}
	}
}

function v_radio(obj){
	if(!obj.checked){
		radiobtn_checked++;
	}
}

function v_checkbox(obj){
	var n = obj.name;
	if(n == "all_centers" || n == "outlets"){
		if(obj.checked){
			checked++;
		}else{
			notchecked++;
		}
	}else if(n == "chk_age_verification"){
		if(!obj.checked){
			err++;
			errmsg += "\tAge: You must be over 13 to register for the VIP Shopper Club\r";
			toggle_visibility("ageDiv","visible");
		}else{
			toggle_visibility("ageDiv","hidden");
		}
	}
}

//checks the email entry and validates the email format
function confirm_email(e_name, e_val){
	confirm_entry = e_name + "confirm";
	//do email type check here. if it is not a real email format then alert user. 
	//if it is a valid email format then do check below to see if the confirm and the original match.
	e_val = trim(e_val);
	if ((e_val.substr(0, 4)).toLowerCase() == "www."){
		var boolValidEmail = false;
	}else{
		var boolValidEmail = emailFormat(e_val); //original
	}
		
	if(boolValidEmail){
		
		if(e_val == trim(eval("document.forms[0]."+confirm_entry+".value"))){
			toggle_visibility(e_name + "_div","hidden");
			toggle_visibility(confirm_entry + "_div","hidden");
			//toggle_visibility(confirm_entry+"2_div","hidden");
			toggle_visibility("divBadEmailMsg","hidden");
		}else{
			toggle_visibility(confirm_entry + "_div","visible");
			//toggle_visibility(confirm_entry+"2_div","visible");
			toggle_visibility("divBadEmailMsg","hidden");
			toggle_visibility(e_name + "_div","hidden");//t
			err++;
			errmsg += "\tConfirm Email\r";
		}
	}else{
		toggle_visibility(e_name + "_div","visible"); //email entered is not in the valid format.
		toggle_visibility(confirm_entry + "_div","hidden");
		toggle_visibility("divBadEmailMsg","visible");
		err++;
		errmsg += "\tInvalid Email\r";
	}
}

//checks the password entry and validates it.
function v_password(obj){
	var name = obj.name;
	var val = obj.value;
	if(name == "txt_password"){
		var passwrd_length = val.length;
		var passwordok = passwordcheck(val);
		if(val == ""){
			document.getElementById("divpassmsg").innerHTML = "Invalid password. Please enter a password between 5-10 characters in length.";
			toggle_visibility(name+"_div","visible");
			toggle_visibility("divpassmsg","hidden");
			toggle_visibility(name+"confirm_div","hidden");
			err++;
			errmsg += "\tPassword\r";
		}else if(passwordok){
			//match it against the confirm field
			var confirmfield = name + "confirm";
			if(val == eval("document.forms[0]."+confirmfield+".value")){
				//password is ok. 
				toggle_visibility("divpassmsg","hidden");
				toggle_visibility(name+"_div","hidden");
				toggle_visibility(name+"confirm_div","hidden");
				//toggle_visibility(name+"confirm2_div","hidden");
			}else{
				//password and confirm field did not match up.
				document.getElementById("divpassmsg").innerHTML = "Please enter your password in the 'Confirm Password' field";
				toggle_visibility("divpassmsg","hidden");
				//toggle_visibility(name+"_div","visible");
				toggle_visibility(name+"confirm_div","visible");
				//toggle_visibility(name+"confirm2_div","visible");
				err++;
				errmsg += "\tConfirm password\r";
			}
		}else{
			if(val.toLowerCase() == "shopper"){
				document.getElementById("divpassmsg").innerHTML = "Invalid password. Note, 'shopper' is a default password for initial log-in and will not be recognized by our system as a valid password.";
			}else{
				document.getElementById("divpassmsg").innerHTML = "Invalid password. Your password must be between 5-10 characters in length and cannot contain spaces nor special characters (eg. #,$,%).";
			}
			//alert user to bad password
			toggle_visibility("divpassmsg","visible");
			toggle_visibility(name+"_div","visible");
			err++;
			errmsg += "\tInvalid password\r";
		}
	}
}

function passwordcheck(v){
	//alert(v.length);
	var returnvalue = true;
	for(var i = 0; i < v.length; i++){
	//	alert(v[i]);
		for(var q = 0; q < arrayBannedStrings.length; q++){
			if(v.charAt(i) == arrayBannedStrings[q]){
				returnvalue = false;
			}
		}
	}
	if(returnvalue){
		if(v.length > 10 || v.length < 5){ //password has to be a minimum of 5 and a max of 10 characters.
			returnvalue = false;
		}
	}
	if(returnvalue){
		if(v.toLowerCase() == "shopper"){
			returnvalue = false;
		}
	}
	return returnvalue;
}

//validates the email format. Checks to make sure email is in the form name@domain.xxx.
//also matches email against unwanted domains.
function emailFormat(emailvalue){
	var result;
	if(is.ie && on.mac){
		//var filter;
		//stronger regex check, but causes errors on a macintosh in IE.
		//var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
		var checkspace=new Boolean();
		var checkat=new Boolean();
		var checkdot=new Boolean();
		
		for (i=0;i<emailvalue.length;i++){
			switch(emailvalue.charAt(i)){
				case ' ': checkspace=true;continue;
				case '@': checkat=true;continue;
				case '.':checkdot=true;continue;
			}
		}
		emailvalarray = emailvalue.split("@");
		if (checkspace==false && checkat==true && checkdot==true){
			if(emailvalarray.length > 2){
				result = false;
			}else{
				result = true;
			}
		}else{
			result = false;
		}
		checkspace=new Boolean();
		checkat=new Boolean();
		checkdot=new Boolean();
	}else{
		//simpler regex that works as well as the more comprehensive one above.
		//var filter = /^[a-zA-Z0-9_][\w\.\+\-]*[a-zA-Z0-9_]@[a-zA-Z0-9_][\w\.-]*[a-zA-Z0-9_]\.(([a-zA-Z]\.{1})*)?[a-zA-Z]{2,4}$/i;
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; //less strict regex than above, allows for '-' and 3+ domain name extension
			//note: using the regexp constructor causes problems in both NN7 on Win2k+ and on IE5.0 on Mac.

		if (filter.test(emailvalue)){
			result = true;
		}else{
			result = false;
		}
	}
	return result;
}

/*-- initializes all the global variables --*/	
function init(){
	err = 0;
	errmsg = "";	//used in an alert function for macs. 
	checked = 0;
	notchecked = 0;
	radiobtn_checked = 0;
	errmsg += "Please properly complete the following fields.";
	errmsg += "\r_____________________________________\r";
	
	//arrayBannedDomains[0] = "@mccoy.com";
	arrayBannedStrings[0] = "\\";
	arrayBannedStrings[1] = "/";
	arrayBannedStrings[2] = " ";
	arrayBannedStrings[3] = "!";
	arrayBannedStrings[4] = "@";
	arrayBannedStrings[5] = "%";
	arrayBannedStrings[6] = "#";
	arrayBannedStrings[7] = "$";
	arrayBannedStrings[8] = "^";
	arrayBannedStrings[9] = "&";
	arrayBannedStrings[10] = "*";
	arrayBannedStrings[11] = "(";
	arrayBannedStrings[12] = ")";
	arrayBannedStrings[13] = "=";
	arrayBannedStrings[14] = "+";
	arrayBannedStrings[15] = "}";
	arrayBannedStrings[16] = "{";
	arrayBannedStrings[17] = "]";
	arrayBannedStrings[18] = "[";
	arrayBannedStrings[19] = "|";
	arrayBannedStrings[20] = "?";
	arrayBannedStrings[21] = ">";
	arrayBannedStrings[22] = "<";
	arrayBannedStrings[23] = ".";
	arrayBannedStrings[24] = ",";
}