// Start Form Validation
function validateAlpha(strValue) {
	var objRegExp  = /(^[a-zA-Z',.\-\ ]+$)/;
	return objRegExp.test(strValue);
}

function validateEmail(strValue) {
	var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;
	return objRegExp.test(strValue);
}

function validateAlphaNum(strValue) {
	var objRegExp = /(^[a-zA-Z0-9'\-\.,# ]+$)/;
	return objRegExp.test(strValue);
}

function validateAlphaNumNone(strValue) {
	var objRegExp = /(^[a-zA-Z0-9'\-\., ]+$)|(^\s*$)/;
	return objRegExp.test(strValue);
}

function validateZip( strValue ) {
	var objRegExp  = (/(^\d{5,9}$)|(^\d{5}-\d{4}$)/);
	return objRegExp.test(strValue);
}

function updateField(_thisID, _parentClass, _msgID, _msgDisplay) {
	document.getElementById(_thisID).parentNode.className = _parentClass;
	document.getElementById(_msgID).className = _msgDisplay;
}

function toggleDisplay(_id,_display) {
	var displayClassName;
	displayClassName = _display;
	
	if (_display == "tableRow") {
		if (navigator.appVersion.indexOf('MSIE')!=-1){
			displayClassName = "inlineBlock";
		}
	}
	
	document.getElementById(_id).className = displayClassName;
}

window.onload = function() {
	
	//First Name and Last Name
	if (document.getElementById("FirstName") && document.getElementById("LastName")) {
		//If value is entered onload, display as valid
		if (validateAlpha(document.getElementById("FirstName").value)) {
			updateField("FirstName", "valid", "FirstName_msg", "required displayNone");
		}
		if (validateAlpha(document.getElementById("LastName").value)) {
			updateField("LastName", "valid", "LastName_msg", "required displayNone");
		}
		
		//document.getElementById("FirstName").focus();
		document.getElementById("FirstName").onkeyup = document.getElementById("LastName").onkeyup = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("FirstName").onblur = document.getElementById("LastName").onblur = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
			
			if (document.getElementById("FullName_")) {
				if (document.getElementById("FirstName").parentNode.className == 'valid' && document.getElementById("LastName").parentNode.className == 'valid') {
					document.getElementById("FullName_").value = document.getElementById("FirstName").value + " " + document.getElementById("LastName").value;
				}
			}
		};
	}
	
	//Mailing Address
	if (document.getElementById("Address")) {
		//If value is entered onload, display as valid
		if (validateAlphaNum(document.getElementById("Address").value)) {
			updateField("Address", "valid", "Address_msg", "required displayNone");
		}
		
		document.getElementById("Address").onkeyup = function() {
			if (validateAlphaNum(this.value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("Address").onblur = function() {
			if (validateAlphaNum(this.value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//City
	if (document.getElementById("City")) {
		//If value is entered onload, display as valid
		if (validateAlpha(document.getElementById("City").value)) {
			updateField("City", "valid", "City_msg", "required displayNone");
		}
		
		document.getElementById("City").onkeyup = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("City").onblur = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//State
	if (document.getElementById("State")) {
		//If value is selected onload, display as valid
		if (document.getElementById("State").selectedIndex != 0) {
			if (document.getElementById("State_msg")) {
				updateField("State", "valid", "State_msg", "required displayNone");
			}
		}
		
		document.getElementById("State").onchange = function() {
			if (document.getElementById("State").selectedIndex != 0) {
				updateField(this.id, "valid", "State_msg", "required displayNone");
			} else {
				updateField(this.id, "", "State_msg", "required displayNone");
			}
		}
		document.getElementById("State").onblur = function() {
			if (document.getElementById("State").selectedIndex == 0) {
				updateField(this.id, "invalid", "State_msg", "required");
			} else {
				updateField(this.id, "valid", "State_msg", "required displayNone");
			}
		}
	}
	
	//Zip Code
	if (document.getElementById("Zip")) {
		//If value is entered onload, display as valid
		if (validateZip(document.getElementById("Zip").value)) {
			updateField("Zip", "valid", "Zip_msg", "required displayNone");
		}
		
		document.getElementById("Zip").onkeyup = function(ev) {
			var ev = ev || window.event; // gets the event in ie or ns
			var kCode = ev.keyCode || ev.which;
			
			if (kCode != 9 && kCode != 16) { //tab key, shift key
				if (this.value.length == 5) {
					document.getElementById("PhoneArea").focus();
				}
			}

		};
		document.getElementById("Zip").onblur = function() {
			if (validateZip(this.value)) { //tab key, shift key
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}

		};
	}
	
	//Phone Number
	if (document.getElementById("PhoneArea") && document.getElementById("PhonePrefix") && document.getElementById("PhoneNum") && document.getElementById("Phone")) {
		//If value is entered onload, display as valid
		if (!isNaN(document.getElementById("PhoneArea").value) && document.getElementById("PhoneArea").value.length == 3 &&
			!isNaN(document.getElementById("PhonePrefix").value) && document.getElementById("PhonePrefix").value.length == 3 &&
			!isNaN(document.getElementById("PhoneNum").value) && document.getElementById("PhoneNum").value.length == 4) {
			
			updateField("PhoneArea", "valid", "Phone_msg", "required displayNone");
			document.getElementById("Phone").value = document.getElementById("PhoneArea").value.toString() + "-" + document.getElementById("PhonePrefix").value.toString() + "-" + document.getElementById("PhoneNum").value.toString();
		}
		
		document.getElementById("PhoneArea").onkeyup = 
		document.getElementById("PhonePrefix").onkeyup = 
		document.getElementById("PhoneNum").onkeyup = function(ev) {
			var ev = ev || window.event; // gets the event in ie or ns
			var kCode = ev.keyCode || ev.which;
			
			if (kCode != 9 && kCode != 16) { //tab key, shift key
				switch (this.id) {
					case "PhoneArea":
						if (this.value.length == 3) {
							document.getElementById("PhonePrefix").focus();
						}
						break;
					case "PhonePrefix":
						if (this.value.length == 3) {
							document.getElementById("PhoneNum").focus();
						}
						break;
					case "PhoneNum":
						if (this.value.length == 4) {
							document.getElementById("email").focus();
						}
						break;
				}
			}

		};
		
		document.getElementById("PhoneArea").onblur = 
		document.getElementById("PhonePrefix").onblur = 
		document.getElementById("PhoneNum").onblur = function() {
			if (this.id == "PhoneArea" || this.id == "PhonePrefix") {
				if (!isNaN(document.getElementById("PhoneArea").value) && document.getElementById("PhoneArea").value.length == 3 &&
					!isNaN(document.getElementById("PhonePrefix").value) && document.getElementById("PhonePrefix").value.length == 3 &&
					!isNaN(document.getElementById("PhoneNum").value) && document.getElementById("PhoneNum").value.length == 4) {
					
					updateField(this.id, "valid", "Phone_msg", "required displayNone");
					document.getElementById("Phone").value = document.getElementById("PhoneArea").value.toString() + "-" + document.getElementById("PhonePrefix").value.toString() + "-" + document.getElementById("PhoneNum").value.toString();
					//alert(document.getElementById("Phone").value);
				}/* else {
					updateField(this.id, "", "Phone_msg", "required displayNone");
				}*/
			} else { //this.id == "PhoneNum"
				if (!isNaN(document.getElementById("PhoneArea").value) && document.getElementById("PhoneArea").value.length == 3 &&
					!isNaN(document.getElementById("PhonePrefix").value) && document.getElementById("PhonePrefix").value.length == 3 &&
					!isNaN(document.getElementById("PhoneNum").value) && document.getElementById("PhoneNum").value.length == 4) {
					
					updateField(this.id, "valid", "Phone_msg", "required displayNone");
					document.getElementById("Phone").value = document.getElementById("PhoneArea").value.toString() + "-" + document.getElementById("PhonePrefix").value.toString() + "-" + document.getElementById("PhoneNum").value.toString();
					//alert(document.getElementById("Phone").value);
				} else {
					updateField(this.id, "invalid", "Phone_msg", "required");
				}
			}
		};
	}
	
	//E-mail
	if (document.getElementById("email")) {
		if (validateEmail(document.getElementById("email").value)) {
			updateField("email", "valid", "email_msg", "required displayNone");
		}
		
		document.getElementById("email").onkeyup = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("email").onblur = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//Contact Type
	if (document.getElementById("Contact_Type0") && document.getElementById("Contact_Type1")) {
		if (document.getElementById("Contact_Type0").checked || document.getElementById("Contact_Type1").checked) {
			updateField("Contact_Type0", "valid", "Contact_Type_msg", "required displayNone");
		}
		
		document.getElementById("Contact_Type0").onclick = function() {
			toggleDisplay("contactType", "displayTableRow");
			updateField("Contact_Type0", "valid", "Contact_Type_msg", "required displayNone");
		};
		
		document.getElementById("Contact_Type1").onclick = function() {
			toggleDisplay("contactType", "displayNone");
			updateField("Contact_Type0", "valid", "Contact_Type_msg", "required displayNone");
		};
		
	}
	
	//Your Name
	if (document.getElementById("YourName")) {
		//If value is entered onload, display as valid
		if (validateAlpha(document.getElementById("YourName").value)) {
			updateField("YourName", "valid", "YourName_msg", "required displayNone");
		}
		
		//document.getElementById("YourName").focus();
		document.getElementById("YourName").onkeyup = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("YourName").onblur = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//Your E-mail
	if (document.getElementById("YourEmail")) {
		if (validateEmail(document.getElementById("YourEmail").value)) {
			updateField("YourEmail", "valid", "YourEmail_msg", "required displayNone");
		}
		
		document.getElementById("YourEmail").onkeyup = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("YourEmail").onblur = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//Friends Name
	if (document.getElementById("FriendsName")) {
		//If value is entered onload, display as valid
		if (validateAlpha(document.getElementById("FriendsName").value)) {
			updateField("FriendsName", "valid", "FriendsName_msg", "required displayNone");
		}
		
		document.getElementById("FriendsName").onkeyup = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("FriendsName").onblur = function() {
			if (validateAlpha(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//Your E-mail
	if (document.getElementById("FriendsEmail")) {
		if (validateEmail(document.getElementById("FriendsEmail").value)) {
			updateField("FriendsEmail", "valid", "FriendsEmail_msg", "required displayNone");
		}
		
		document.getElementById("FriendsEmail").onkeyup = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			}
		};
		document.getElementById("FriendsEmail").onblur = function() {
			if (validateEmail(document.getElementById(this.id).value)) {
				updateField(this.id, "valid", this.id + "_msg", "required displayNone");
			} else {
				updateField(this.id, "invalid", this.id + "_msg", "required");
			}
		};
	}
	
	//Submit button
	if (document.getElementById("btn_continue") || document.getElementById("btn_submit")) {
		var btn;
		if (document.getElementById("btn_continue")) {
			btn = "btn_continue";
		} else {
			btn = "btn_submit";
		}
		
		document.getElementById(btn).onclick = function() {
			//alert(location.href);
			var okToContinue = true;
			var firstFieldRef = -1;
			
			if (document.getElementById("optional_fields")) {
				var optionalFields = document.getElementById("optional_fields").value.split(";");
				
				for (var i=0; i<optionalFields.length; i++) {
					if (document.getElementById(optionalFields[i]).parentNode.className.toLowerCase() == "invalid") {
						okToContinue = false;
					}
				}
			}
			
			if (document.getElementById("required_fields")) {
				//alert(document.getElementById("required_fields").value);
				if (document.getElementById("required_fields").value != "") {
					if (document.getElementById("required_fields").value.charAt(0) == ";") {
						document.getElementById("required_fields").value = document.getElementById("required_fields").value.substring(1,document.getElementById("required_fields").value.length);
						//alert(document.getElementById("required_fields").value);
					}
					if (document.getElementById("required_fields").value.charAt(document.getElementById("required_fields").value.length-1) == ";") {
						document.getElementById("required_fields").value = document.getElementById("required_fields").value.substring(0,document.getElementById("required_fields").value.length-1);
						//alert(document.getElementById("required_fields").value);
					}
					var reqFields = document.getElementById("required_fields").value.split(";");
					
					//remove any empty elements caused by two (or more) semicolons together ;;
					for (var r=0; r<reqFields.length; r++) {
						if (reqFields[r] == "") {
							//if element is empty, remove it
							reqFields.splice(r,1);
						}
					}
					//fix required_fields value
					document.getElementById("required_fields").value = reqFields.join(";");
					
					//alert(reqFields);
					for (var i=0; i<reqFields.length; i++) {
						if (document.getElementById(reqFields[i]).parentNode.className.toLowerCase() != "valid") {
							okToContinue = false;
							if (firstFieldRef == -1) { firstFieldRef = i; }
							document.getElementById(reqFields[i]).parentNode.className = "invalid";
							if (reqFields[i].charAt(reqFields[i].length-1) == "0") {
								document.getElementById(reqFields[i].substring(0,reqFields[i].length-1) + "_msg").className = "required";
							} else if (reqFields[i] == "q1a" || reqFields[i] == "q2a" || reqFields[i] == "q3a") {
								document.getElementById(reqFields[i].substring(0,reqFields[i].length-1) + "_msg").className = "required";
							} else if (reqFields[i].charAt(reqFields[i].length-1) == "1") {
								if (reqFields[i].indexOf("address1") == -1) {
									var displayClassName;
									if (navigator.appVersion.indexOf('MSIE')!=-1){
										displayClassName = "inlineBlock";
									} else {
										displayClassName = "tableRow";
									}
									document.getElementById(reqFields[i].substring(0,reqFields[i].length-1) + "_msg").className = displayClassName;
								} else {
									document.getElementById(reqFields[i] + "_msg").className = "required";
								}
							} else if (reqFields[i].indexOf("Area") != -1) {
								document.getElementById(reqFields[i].substring(0,reqFields[i].length-4) + "_msg").className = "required";
							} else {
								document.getElementById(reqFields[i] + "_msg").className = "required";
							}
							//i=reqFields.length;
						}
					}
					if (okToContinue) { return true; } else {
						document.getElementById(reqFields[firstFieldRef]).focus();
						return false;
					}
				}
				
			}
		};
	}
	
};