
// Declare Global Variables

	var formAlertMessage='There were Errors!';
	var formSubmit=1;

/*
	throwError gets called each time there is an error in the
	validation routines.
*/
function throwError (theField,theMessage) {
	formAlertMessage=formAlertMessage + "\n - " + theMessage;
	formSubmit=0;
	switchStyle(theField);
}
function switchStyle (theField) {
	theSwitch=new Function("this.style.backgroundColor='FFFFFF';this.style.color='000000';if(this.type=='text') this.select();")
	theField.style.backgroundColor='FF0000';
	theField.style.color='White';
	theField.onfocus=theSwitch;
}

/*
	formAlert displays the alert message and clears necessary variables to start
	the validation over.
*/

function formAlert() {
	alert(formAlertMessage);
	formAlertMessage='There were Errors!';
	formSubmit=1;
}


/*
	formRequired makes sure a field has been completed by the user.   In order
	for this function to work with select boxes the empty value must be set to 0
	in the form.
*/

function formRequired(theField,theMessage) {
	theField.value = theField.value.replace(/\s+$|^\s*/gi, "");
	if(theField.value == '' || theField.value == '-1' || theField.value == '0') {
		throwError(theField,theMessage);
	}
}

// form field must be composed only of numbers and letters.
function formIsNumeric(theField,theMessage) {
	theField.value = theField.value.replace(/\s+$|^\s*/gi, "");
	isNum = new RegExp ("[^0-9 \(\)\-\.\/]");
	if (isNum.test(theField.value)) {
		throwError(theField,theMessage);
	}
}

// form field must be composed only of numbers and letters.
function formIsAlphaNumeric(theField,theMessage) {
	theField.value = theField.value.replace(/\s+$|^\s*/gi, "");
	isAlphaNum = new RegExp ("[^0-9a-zA-Z \(\)\-\.\/]");
	if (isAlphaNum.test(theField.value)) {
		throwError(theField,theMessage);
	}
}

// form field must be composed only of numbers and letters, and few extras.
function formIsAlphaNumExtra(theField,theMessage) {
	theField.value = theField.value.replace(/\s+$|^\s*/gi, "");
	isAlphaNum = new RegExp ("[^0-9a-zA-Z'_ \(\)\-\.\/]");
	if (isAlphaNum.test(theField.value)) {
		throwError(theField,theMessage);
	}
}

// form field must be composed of only letters.
function formIsAlpha(theField,theMessage) {
	theField.value = theField.value.replace(/\s+$|^\s*/gi, "");
	isAlpha = new RegExp ("[^a-zA-Z \(\)\-\.\/]");
	if (isAlpha.test(theField.value)) {
		throwError(theField,theMessage);
	}
}

// form field must be composed only of numbers and letters.
function formIsSame(field1,field2,theMessage) {

	if(field1.value != field2.value) {
		throwError(field2,theMessage);
		switchStyle(field1);
	}
}

function formIsEmail (theField,theMessage) {
	var email = /^[a-zA-Z0-9'._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
 	if(!email.test(theField.value)) {
		throwError(theField,theMessage);
	}
}

function formIsDate(theField,theMessage){
	var strMask = "mm/dd/yyyy";
	var iMaskMonth = strMask.lastIndexOf("m") - strMask.indexOf("m") + 1;
	var iMaskDay = strMask.lastIndexOf("d") - strMask.indexOf("d") + 1;
	var iMaskYear = strMask.lastIndexOf("y") - strMask.indexOf("y") + 1;

	var strDate = theField.value;

	// find the delimiter
	var delim = "", lstMask = "mdy";
	for( var i=0; i < strMask.length; i++ ){
		if (lstMask.indexOf(strMask.substring(i, i+1)) == -1){
			delim = strMask.substring(i, i+1);
			break;
		}
  }
	aMask = strMask.split(delim);
	if( aMask.length == 3 ){
		dt = theField.value.split(delim);
		if( dt.length != 3 ) return throwError(theField,theMessage);
		for( i=0; i < aMask.length; i++ ){
			if( aMask[i].indexOf("m") > -1 ) var sMonth = dt[i];
			else if( aMask[i].indexOf("d") > -1 ) var sDay = dt[i];
			else if( aMask[i].indexOf("y") > -1 ) var sYear = dt[i];
		}
	} else if( mask.length == 1 ){
		var sMonth = theField.value.substring(strMask.indexOf("m")-1, strMask.lastIndexOf("m"));
		var sDay = theField.value.substring(strMask.indexOf("d")-1, strMask.lastIndexOf("d"));
		var sYear = theField.value.substring(strMask.indexOf("y")-1, strMask.lastIndexOf("y"));
	} else {
		return throwError(theField,theMessage);
	}

	var iMonth = parseInt(sMonth, 10);
	var iDay = parseInt(sDay, 10);
	var iYear = parseInt(sYear, 10);

	if( isNaN(iMonth) || sMonth.length > iMaskMonth ) iMonth = 0;
	if( isNaN(iDay) || sDay.length > iMaskDay ) iDay = 0;
	if( isNaN(sYear) || sYear.length != iMaskYear ) sYear = null;

	lst30dayMonths = ",4,6,9,11,";

	if( sYear == null ){
		return throwError(theField,theMessage);
	} else if(  (iMonth < 1) || (iMonth > 12 ) ){
		return throwError(theField,theMessage);
	} else {
		if( iYear < 100 ) var iYear = iYear + ((iYear > 20) ? 1900 : 2000);
		var iYear = (sYear.length == 4) ? parseInt(sYear, 10) : parseInt("20" + sYear, 10);
		if( lst30dayMonths.indexOf("," + iMonth + ",") > -1 ){
			if( (iDay < 1) || (iDay > 30 ) ) return throwError(theField,theMessage);
		} else if( iMonth == 2 ){
			if( (iDay < 1) || (iDay > 28 && !( (iDay == 29) && (iYear%4 == 0 ) ) ) ) return throwError(theField,theMessage);
		} else {
			if( (iDay < 1) || (iDay > 31 ) ) return throwError(theField,theMessage);
		}
	}
}

function formIsLenLT(theField,theLength,theMessage) {
	if (theField.value.length > theLength) {
		throwError(theField,theMessage);
	}
}


function formIsURL (theField,theMessage) {
	var email = /^http(s?)\:\/\/[a-zA-Z0-9\-\._]+(\.[a-zA-Z0-9\-\._]+){2,}(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$/;
 	if(!email.test(theField.value)) {
		throwError(theField,theMessage);
	}
}
 
function formIsUSZIP (theField,theMessage) {
	var USZIP = /^\d{5}((-|\s)?\d{4})?$/;
 	if(!USZIP.test(theField.value)) {
		throwError(theField,theMessage);
	}
}
 
function formIsCanadianZIP (theField,theMessage) {
	var CanZIP = /^[a-zA-Z]\d[a-zA-Z](-|\s)?\d[a-zA-Z]\d$/;
 	if(!CanZIP.test(theField.value)) {
		throwError(theField,theMessage);
	}
}
 
function formIsUSorCanadianZIP (theField,theMessage) {
	var USZIP = /^\d{5}((-|\s)?\d{4})?$/;
	var CanZIP = /^[a-zA-Z]\d[a-zA-Z](-|\s)?\d[a-zA-Z]\d$/;
 	if(!(USZIP.test(theField.value) || CanZIP.test(theField.value))) {
		throwError(theField,theMessage);
	}
}
 
