/* Alert function  */

function validationAlert(strAlert, hField) {
	// Displays an alert, focuses a form field, and returns false.
	alert(strAlert);
	try { hField.focus(); } catch(ex) {}
	return false;
}

/* String validation */

function isValidFirstName(strName) {
	if (/[^A-Za-z -]/.test(strName)) { return false; }
	return true;
}

function isValidLastName(strName) {
	if (/[^A-Za-z -]/.test(strName)) { return false; }
	return true;
}

function isValidStreetAddress(strAddress) {
	if (strAddress.length < 3) { return false; }
	if (strAddress.replace(/[^0-9]/g, "").length < 1) { return false; }
	if (strAddress.replace(/[^A-Za-z]/g, "").length < 1) { return false; }
	return true;
}

function isValidCity(strCity) {
	if (strCity.length < 2) { return false; }
	if (/[^A-Za-z -]/.test(strCity)) { return false; }
	return true;
}

function isValidPhone(strPhone) {
	var bparsedStr = trimString(strPhone);
	var parsedStr = getParsedPhoneStr(bparsedStr);
	if (parsedStr.length < 10) { return false; }
	if (parsedStr.length > 15) { return false; }
	if (!validateNumbersOnly(parsedStr)) { return false; }
	return true;
}

function isValidEntry(strSample) {
	if (/[<>]/.test(strSample)) { return false; }
	return true;
}


/* Generic validation */

function validateInput(hInput, minLength, inputDescription) {
	if (hInput.value.length == 0) {
		return validationAlert("Please enter " + inputDescription + ".", hInput);
	} else if (hInput.value.length < minLength) {
		return validationAlert("Please re-enter " + inputDescription + ".\n(The information you entered is incomplete.)", hInput);
	}
	return true;
}

function validateSelectbox(hSelectbox, strAlert) {
	if (hSelectbox.value.length == 0) {
		return validationAlert(strAlert, hSelectbox);
	}
	return true;
}

function validateCheckbox(hCheckbox, strAlert) {
	if (!hCheckbox.checked) { return validationAlert(strAlert, hCheckbox); }
	return true;
}

function validateNumbersOnly(strInput) {
	if (/[^0-9]/.test(strInput)) { return false; }
	return true;
}

function trimString(strIn) {
	if (/^\s/.test(strIn)) { strIn = strIn.replace(/^\s{1,}/, ""); }
	if (/\s$/.test(strIn)) { strIn = strIn.replace(/\s{1,}$/, ""); }
	return strIn;
}

function getParsedPhoneStr(strIn) {
	strIn = strIn.replace(/\.|-| |\(|\)/g,"");
	return strIn;
}

function isValidEmail(strEmail) {
	var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

	if (strEmail.length < 5) { return false; }

	if (!strEmail.match(re)) { return false; }
	
	return true;
}

// clear "

/* Error messages */

var ErrorMsg = new Object();
	ErrorMsg.VAR1 = "%VAR1%";
	ErrorMsg.EMPTY_FIRSTNAME = "Please enter your First Name.";
	ErrorMsg.INVALID_FIRSTNAME = "Your First Name may only contain letters, hyphens, or spaces. Please update your entry.";
	ErrorMsg.EMPTY_LASTNAME = "Please enter your Last Name.";
	ErrorMsg.INVALID_LASTNAME = "Your Last Name may only contain letters, hyphens, or spaces. Please update your entry.";
	ErrorMsg.EMPTY_PHONE = "Please enter your Phone Number";
	ErrorMsg.INVALID_PHONE = "Please enter your valid Phone Number";
	ErrorMsg.INVALID_PHONE2 = "Please enter a valid Cell Phone Number";
	ErrorMsg.EMPTY_EMAIL = "Please enter your Email Address.";
	ErrorMsg.INVALID_EMAIL = "You must enter a valid Email Address. Please update your entry.";
	ErrorMsg.EMPTY_EMAIL2 = "Please confirm your Email Address.";
	ErrorMsg.INVALID_EMAIL2 = "Your email address does not match. Please make sure you entered the correct address.";
	ErrorMsg.EMPTY_ADDRESS = "Please enter your Address.";
	ErrorMsg.INVALID_ADDRESS = "Your Address must contain letters and numbers. Please update your entry.";
	ErrorMsg.EMPTY_CITY = "Please enter your City.";
	ErrorMsg.INVALID_CITY = "Your City may only contain letters, hyphens, or spaces. Please update your entry.";
	ErrorMsg.UNSELECTED_STATE = "Please select your State.";
	ErrorMsg.EMPTY_STATE2 = "Please enter your State, Province, or Region.";
	ErrorMsg.INVALID_STATE2 = "Your State, Province, or Region may only contain letters, hyphens, or spaces. Please update your entry.";
	ErrorMsg.EMPTY_ZIPCODE = "Please enter your Zip or Postal Code.";
	ErrorMsg.INVALID_ZIPCODE = "Your Zip Code must contain five numbers. Please update your entry.";
	ErrorMsg.INVALID2_ZIPCODE = "Your Zip Code may only contain numbers. Please update your entry.";
	ErrorMsg.INVALID_ENTRY = "Your entry may not contain HTML markup. Please remove the characters < and > from your entry.";
	ErrorMsg.INVALID_TITLE = "The title you entered is invalid. Please remove any special characters from your title.";
	ErrorMsg.EMPTY_TITLE = "Please enter the title of your entry.";
	ErrorMsg.INVALID_COMPANY = "The company name you entered is invalid. Please remove any special characters from your title.";
	ErrorMsg.EMPTY_COMPANY = "Please enter the name of your company.";
    

/* form field validation functions */

function validateFirstNameInput(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_FIRSTNAME, hInput); }
	if (!isValidFirstName(hInput.value)) { return validationAlert(ErrorMsg.INVALID_FIRSTNAME, hInput); }
	return true;
}
function validateLastNameInput(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_LASTNAME, hInput); }
	if (!isValidLastName(hInput.value)) { return validationAlert(ErrorMsg.INVALID_LASTNAME, hInput); }
	return true;
}
function validateStreetAddressInput(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_ADDRESS, hInput); }
	if (!isValidStreetAddress(hInput.value)) { return validationAlert(ErrorMsg.INVALID_ADDRESS, hInput); }
	return true;
}
function validateCityInput(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_CITY, hInput); }
	if (!isValidCity(hInput.value)) { return validationAlert(ErrorMsg.INVALID_CITY, hInput); }
	return true;
}
function validateState2Input(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_STATE2, hInput); }
	if (!isValidCity(hInput.value)) { return validationAlert(ErrorMsg.INVALID_STATE2, hInput); }
	return true;
}
function validateZipCodeInput(hInput,cInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_ZIPCODE, hInput); }
	if (cInput.value == "US" && hInput.value.length != 5) { return validationAlert(ErrorMsg.INVALID_ZIPCODE, hInput); }
	if (/[^0-9 -]/.test(hInput.value)) { return validationAlert(ErrorMsg.INVALID2_ZIPCODE, hInput); }
	return true;
}
function validateEmailInput(hInput) {
	hInput.value = trimString(hInput.value);
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_EMAIL, hInput); }
	if (!isValidEmail(hInput.value)) { return validationAlert(ErrorMsg.INVALID_EMAIL, hInput); }
	return true;
}
function validateEmail2Input(hInput,emailInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_EMAIL2, hInput); }
	if (hInput.value !=	emailInput.value) { return validationAlert(ErrorMsg.INVALID_EMAIL2, hInput); }
	return true;
}
function validatePhoneInput(hInput) {
	if (hInput.value.length == 0) { return validationAlert(ErrorMsg.EMPTY_PHONE, hInput); }
	if (!isValidPhone(hInput.value)) { return validationAlert(ErrorMsg.INVALID_PHONE, hInput); }
	return true;
}
function validatePhone2Input(hInput) {
	if (hInput.value.length != 0){
		if (!isValidPhone(hInput.value)) { return validationAlert(ErrorMsg.INVALID_PHONE2, hInput); }
	}
	return true;
}
function validateTitleInput(hInput) {
	// if (hInput.value.length == 0)  { return validationAlert(ErrorMsg.EMPTY_TITLE, hInput); }
	if (!isValidEntry(hInput.value)) { return validationAlert(ErrorMsg.INVALID_TITLE, hInput); } 
	return true;
}
function validateCompanyInput(hInput) {
	// if (hInput.value.length == 0)  { return validationAlert(ErrorMsg.EMPTY_COMPANY, hInput); }
	if (!isValidEntry(hInput.value)) { return validationAlert(ErrorMsg.INVALID_COMPANY, hInput); } 
	return true;
}


/*  validate form function  */

function validateForm(form) {		
	
	var fieldName;
	/* validate only the fields defined in the form */
	for (var i=0; i < form.elements.length; i++) {
		
		fieldName = form.elements[i].name;

		if (fieldName == "fname") {
			if (form.elements[i].type != "hidden") {
				if (!validateFirstNameInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "lname") {
			if (form.elements[i].type != "hidden") {
				if (!validateLastNameInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "phone") {
			if (form.elements[i].type != "hidden") {
				if (!validatePhoneInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "phone2") {
			if (form.elements[i].type != "hidden") {
				if (!validatePhone2Input(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "email") {
			if (form.elements[i].type != "hidden") {
				if (!validateEmailInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "email2") {
			if (form.elements[i].type != "hidden") {
				if (!validateEmail2Input(form.elements[i],form.email)) {
					return false;
				}
			}
		} else if (fieldName == "address") {
			if (form.elements[i].type != "hidden") {
				if (!validateStreetAddressInput(form.elements[i])) {
					return false;
				}
			}	
		} else if (fieldName == "city") {
			if (form.elements[i].type != "hidden") {
				if (!validateCityInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "state") {
			if (form.elements[i].type != "hidden") {
				if (form.country.value == "US"){
					if (!validateSelectbox(form.elements[i], "Please select the State.")) {
						return false;
					}
				}
			}
		} else if (fieldName == "state2") {
			if (form.elements[i].type != "hidden") {
				if (form.country.value != "US"){
					if (!validateState2Input(form.elements[i])) {
						return false;
					}
				}
			}
		} else if (fieldName == "zip") {
			if (form.elements[i].type != "hidden") {
				if (!validateZipCodeInput(form.elements[i],form.country)) {
					return false;
				}
			}
		} else if (fieldName == "title") {
			if (form.elements[i].type != "hidden") {
				if (!validateTitleInput(form.elements[i])) {
					return false;
				}
			}
		} else if (fieldName == "company") {
			if (form.elements[i].type != "hidden") {
				if (!validateCompanyInput(form.elements[i])) {
					return false;
				}
			}
		}	
		
	}
	
	return true;
}

