/* 
	Original Clean Form Validation was written from scratch by Marc Grabanski
// http://marcgrabanski.com/code/clean-form-validation
// updated and customized for JOHN HANCOCK by Sandy Baguskas
/* Under the Creative Commons Licence http://creativecommons.org/licenses/by/3.0/
	Share or Remix it but please Attribute the authors. */
	
var Validator = {
	init: function (settings) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");
		
		// change color of inputs on focus
		for(i=0;i<formInputs.length;i++)
		{
			if(formInputs[i].getAttribute("type") != "submit") {
				input = formInputs[i];
				input.style.background = settings["inputColors"][0];
				input.onblur = function () {
					this.style.background = settings["inputColors"][0];
				}
				input.onfocus = function () {
					this.style.background = settings["inputColors"][1];
				}
			}
		};
		this.form.onsubmit = function () {
			error = Validator.validate();
			if(error.length < 1) {
				return true;
			} else {
				Validator.printError(error);
				return false;
			}
		};
	},
	validate: function () {
		error = '';
		validationTypes = new Array("isRequired", "isEmail", "isNumeric", "isPhone", "isSelected", "isValidZipCode", "isValidZipPostalCode", "isEmailTheSame");
		for(n=0; n<validationTypes.length; n++) {
			var x = this.settings[validationTypes[n]];
			if(x != null) {				
					for(i=0; i<x.length; i++) 
					{
						inputField = document.getElementById(x[i]);
						switch (validationTypes[n]) {
							case "isRequired" :
							valid = !isRequired(inputField.value);
							errorMsg = "is a required field.";
							break;
							case "isEmail" :
							valid = isEmail(inputField.value);
							errorMsg = "address is invalid.";
							break;
							case "isNumeric" :
							valid = isNumeric(inputField.value);
							errorMsg = "can only be a number.";
							break;		
							case "isPhone" :
							valid = isPhone(inputField.value);
							errorMsg = "number is invalid.";
							break;		
							case "isSelected" :
							valid = isSelected(inputField.selectedIndex);
							errorMsg = "must be selected.";
							break;	
							case "isValidZipCode" :
							valid = isValidZipCode(inputField.value);
							errorMsg = "Code is invalid";
							break;
							case "isValidZipPostalCode" :
							valid = isValidZipPostalCode(inputField.value);
							errorMsg = "or Postal Code is invalid";
							break;
							case "isEmailTheSame" :
								if (i == 0) {								
									var inputField2 = document.getElementById(x[1]);
								    valid = isEmailTheSame(inputField.value, inputField2.value);
									errorMsg = "addresses must be the same.";								
								}
								else {
									valid = true;
								}								
								break;
						}
						if(!valid) {
							error += x[i]+" "+errorMsg+"\n";
							inputField.style.background = this.settings["errorColors"][0];
							inputField.style.border = "1px solid #244362" //+this.settings["errorColors"][1];
						} else {
							inputField.style.background = this.settings["inputColors"][0];
							inputField.style.border = '1px solid';
						}
					} //Inner for									
			} //if checking null
		}//outer for
		return error;
	},
	printError: function (error) {
		alert(error);
	}
};

// returns true if the string is not empty
function isRequired(str){
	return (str == null) || (str.length == 0);
}
// returns true if the string is a valid email
function isEmail(str){
    //alert ("entering isemail check");
	if(isRequired(str)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(str);
}

function isEmailTheSame(str1,str2)
{
	//if (str1 == str2) return true;
	//return false;	
	return (str1 == str2);
}

// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str){
	if(isRequired(str)) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}

function isPhone(str) {
    //alert ("entering isphone check");
	if (isRequired(str)) return false;
	var re = /^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
	//return re.test(str);
	if (re.test(str)) return true;
	return false;
}

function isSelected(str) {
	if (str > 0) return true;
	return false;
}

function isValidZipCode(str) {
   var re = /^\d{5}([\-]\d{4})?$/;
   return (re.test(str));
}

function isValidZipPostalCode(str) {
   //alert ("entering postal zip check");
   //var re = /^\d{5}([\-]\d{4})?$/; //US code - works   
   //var re = /^[A-Z]{1}[\d]{1}[A-Z]{1}[ ]?[\d]{1}[A-Z]{1}[\d]{1}$/;  //Canadian code - works   
	var re = /^\d{5}([\-]\d{4})?$|^[A-Z]{1}[\d]{1}[A-Z]{1}[ ]?[\d]{1}[A-Z]{1}[\d]{1}/;

   return (re.test(str));
}