// JavaScript Document
function validateForm() {
	var errMsgs = new Array();
	var MSG_REQUIRED_FIELD = "One or more fields are required.";
	var MSG_INVALID_ZIP = "Please enter a valid zipcode.";
	var MSG_INVALID_EMAIL = "Please enter a valid email address.";
	var MSG_INVALID_PHONE = "Please enter a valid phone number.";
	var MSG_INVALID_MONTH = "Please enter a valid month.";
	var MSG_INVALID_DAY = "Please enter a valid day.";
	var MSG_INVALID_YEAR = "Please enter a valid year.";
	var MSG_INVALID_DATE = "Please enter a valid date.";
	var MSG_NON_MATCHING_EMAIL = "Please confirm your email address.";
	var MSG_NO_CHOICE_MADE = "Please select yes or no."
	
	for (var eachItem in formElements) {
		if (formElements[eachItem] == "optoutreason" || formElements[eachItem] == "lname") {
			if (!validReason(document.getElementById(eachItem).value)) {
				errMsgs.push(MSG_REQUIRED_FIELD);
				document.getElementById(eachItem+'_error').style.display='inline';
			} else {
				document.getElementById(eachItem+'_error').style.display='none';
			}
		} else if (formElements[eachItem] == "zip") {
			if (!validZip(document.getElementById(eachItem).value)) {
				errMsgs.push(MSG_INVALID_ZIP);
				document.getElementById(eachItem+'_error').style.display='inline';
			}else{
				document.getElementById(eachItem+'_error').style.display='none';
			}
		} else if (formElements[eachItem] == "email") {
			if (!validEmail(document.getElementById(eachItem).value)) {
				errMsgs.push(MSG_INVALID_EMAIL);
				document.getElementById(eachItem+'_error').style.display='inline';
			}else{
				document.getElementById(eachItem+'_error').style.display='none';	
			}
		} else if (formElements[eachItem] == "phone") {
			if (!validPhone(document.getElementById(eachItem).value)) {
				if(document.getElementById('_customerstatus_').value=="Customer"){
					errMsgs.push(MSG_INVALID_PHONE);
					//document.getElementById(eachItem+'_error').style.display='none';
					document.getElementById(eachItem+'_error').style.display='inline';
				}else{
					document.getElementById(eachItem+'_error').style.display='none';	
				}
			}else{
				document.getElementById(eachItem+'_error').style.display='none';
			}
		} else if (formElements[eachItem] == "confirmEmail") {
			for (var eachTempItem in formElements) {
				if (formElements[eachTempItem] == "email") {
					if (document.getElementById(eachItem).value != document.getElementById(eachTempItem).value) {
						errMsgs.push(MSG_NON_MATCHING_EMAIL);
						document.getElementById(eachItem+'_error').style.display='inline';
					}else{
						document.getElementById(eachItem+'_error').style.display='none';
					}
					break;
				}
			}
		} else if (formElements[eachItem] == "yesno") {
			if(document.getElementById(eachItem+'_yes').checked || document.getElementById(eachItem+'_no').checked) {
				document.getElementById(eachItem+'_error').style.display='none';
			} else {
				errMsgs.push(MSG_NO_CHOICE_MADE);
				document.getElementById(eachItem+'_error').style.display='inline';
			}
		} else if (formElements[eachItem] == "altemail") {
			if (document.getElementById(eachItem).value && !validEmail(document.getElementById(eachItem).value)) {
				errMsgs.push(MSG_INVALID_EMAIL);
				document.getElementById(eachItem+'_error').style.display='inline';
			}else{
				document.getElementById(eachItem+'_error').style.display='none';	
			}
		} else if (formElements[eachItem] == "altconfirm") {
			for (var eachTempItem in formElements) {
				if (formElements[eachTempItem] == "altemail") {
					if (document.getElementById(eachTempItem).value && document.getElementById(eachItem).value != document.getElementById(eachTempItem).value) {
						errMsgs.push(MSG_NON_MATCHING_EMAIL);
						document.getElementById(eachItem+'_error').style.display='inline';
					}else{
						document.getElementById(eachItem+'_error').style.display='none';
					}
					break;
				}
			}
		}
	}
	if (errMsgs.length > 0) {
		var errString = "";
		for (var i=0; i<errMsgs.length; i++) {
			errString += errMsgs[i] + "\n";	
		}
		return false;
	} else {
		return true;
	}
}

/*

	Function: validReqField
		Tests field as valid required field.
		
	Parameters:
		str - string to validate.
		
	Returns:
		Boolean.
		
*/
function validReqField(str) {
	if (!str.length) {
		return false;
	}
	return true;
}
/*

	Function: validEmail
		Tests field as valid email address.
		
	Parameters:
		str - string to validate.
		
	Returns:
		Boolean.
		
*/
function validEmail(str) {
	var emailFilter=/^.+@.+\..{2,5}$/;
	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	if ((!(emailFilter.test(str))) || (str.match(illegalChars))) {
		return false;
	}
	return true;
}
/*

	Function: validZip
		Tests field as valid 5 digit zipcode.
		
	Parameters:
		str - string to validate.
		
	Returns:
		Boolean.
		
*/
function validZip(str) {
	var zipFormat = /\d\d\d\d\d/; //Entered All Numbers?
	var temp = str + "";
	var test = temp.search(zipFormat)
	if (test == -1) {
		return false;
	}
	return true;
}
/*
	Function: validPhone
		Tests field as valid 10 digit phone number.
		
	Parameters:
		str - string to validate.
		
	Returns:
		Boolean.
*/
function validPhone(str) {
	var temp = str.replace(/[\(\)\.\-\ ]/g, '');
	if (isNaN(parseInt(temp)) || (temp.length != 10)) {
		return false;
	}
	return true;
}
/*
	Function: validDate
		Gather values and then validate a date.
		
	Parameters:
		None.
		
	Returns:
		Boolean.
		
*/
function validDate() {
	var month = new String;
	var day = new String;
	var year = new String;
	for (var eachItem in formElements) {
		if (formElements[eachItem] == "month") {
			month = document.getElementById(eachItem).value
		} else if (formElements[eachItem] == "day") {
			day = document.getElementById(eachItem).value
		} else if (formElements[eachItem] == "year") {
			year = document.getElementById(eachItem).value
		}
	}
	return (testDate(month,day,year));
}

function validReason(){
	if($("_optoutreason").value==""){
		return false;
	}else{
		return true;
	}
}


