<!--
//'********************************************************************************
//'* Author: 	Karena Kauffman
//'* Date: 	06/05/01
//'* Purpose: 	Validate that specified fields have content 
//'*		Also validates if value is numeric for specified fields
//'* Updated: 10/11/01 - Tom Brown
//'* Notes: All form elements should be given descriptive id's to facilitate
//'* 	    more user-friendly error messages
//'* Parameters: Include this js file in the page
//'*		Setup and call the form as follows with the following hidden fields:
//'*		<form name="frmTest" onSubmit="return finalValidate(this)" method=POST>
//'*		<input type=hidden name="_required" value="mytext, mycheckbox, myradio, myselect, mynumber">
//'*		<input type=hidden name="_requiredNum" value="mynumber, mynumber2">
//'* Returns:	True for valid entries
//'*		False for invalid entries
//'********************************************************************************
	function finalValidate(frm) {
	//'********************************************************************************
	//'* Author: 	Karena Kauffman
	//'* Date: 	06/05/01
	//'* Purpose: 	Call from onSubmit to validate data both required and numeric
	//'* Parameters: Name of the form to validate
	//'* Returns:	True for valid entries
	//'*		False for invalid entries
	//'********************************************************************************
		if(validateNumericFields(frm)) {	//confirms that if data is in these fields it is Numeric
			if(validateForm(frm))		//if it is then confirm that all required fields are entered.
				return true;
		}
		return false;
	}

	function validateNumericFields(frm) {
	//'********************************************************************************
	//'* Author: 	Karena Kauffman
	//'* Date:	06/05/01
	//'* Purpose: 	Verifies data in fields listed in _requiredNum hidden field is 
	//'*			a number; does NOT require data in these fields, only validates
	//'*			data as numeric
	//'* Parameters: Name of the form to validate
	//'* Returns:	Alert box for entries that are not numeric
	//'*		True for valid entries
	//'*		False for invalid entries
	//'********************************************************************************
		var sErrMsg = "";
		var aReqFields = new Array;		
		var sField;
		var sType;
		var sLen;
		var bFound;
		aReqFields = frm._requiredNum.value.split(", ");
		
		var isIEMac = ((navigator.userAgent.indexOf("MSIE") != -1) && (navigator.userAgent.indexOf("Mac") != -1) && (navigator.userAgent.indexOf("Opera") == -1)); 		
		
		for (var i=0; i<aReqFields.length; i++) {		//loop through required fields
			eval ("sType = frm." + aReqFields[i] + ".type;");
			if (sType == "text" || sType == "textarea" || sType == "password") {	//text types
				eval ("sField = frm." + aReqFields[i] + ".value;");
				if (frm.elements[aReqFields[i]].name == "txtZip") {
				    if (frm.elements[aReqFields[i]].value.length != 5) {
					     sErrMsg = sErrMsg + " " + "Please enter a valid zip code.\n";
					 }
				}
				if (!isFinite(sField)) {		//checks if it is a number
				    if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)					
					   	sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].id + "\n";
				   else
 				   		sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].name.slice(3, frm.elements[aReqFields[i]].name.length) + "\n";						
					// sErrMsg = sErrMsg + "  " + aReqFields[i] + "\n";
				}
			}
		}
		if (sErrMsg != "" ) {
			alert("The following fields are numeric only:\n" + sErrMsg);
			return false;
		}
		return true;
	}
	
	function validateForm(frm) {
	//'********************************************************************************
	//'* Author: 	Karena Kauffman
	//'* Date: 	06/05/01
	//'* Purpose: 	Verifies data exists in fields listed in _required hidden field;
	//'*			Detects type of input and validates appropriately
	//'* Parameters: Name of the form to validate
	//'* Returns:	Alert box for entries not valid
	//'*		True for valid entries
	//'*		False for invalid entries
	//'********************************************************************************
		var sErrMsg = "";
		var aReqFields = new Array;		
		var sField;
		var sType;
		var sLen;
		var bFound;
		var sValue;
		
		var isIEMac = ((navigator.userAgent.indexOf("MSIE") != -1) && (navigator.userAgent.indexOf("Mac") != -1) && (navigator.userAgent.indexOf("Opera") == -1)); 	

		aReqFields = frm._required.value.split(", ");
		
		for (var i=0; i<aReqFields.length; i++) {		//loop through required fields
			eval ("sType = frm." + aReqFields[i] + ".type;");
			if (frm.elements[aReqFields[i]].name == "txtEmail") {
			    // need to validate the email
				if(!IsEmailValid(frm, frm.elements[aReqFields[i]].name)) {
				   //return false;
				   if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)
					   sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].id + " is not a valid address\n";
				   else
				       sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].name.slice(3, frm.elements[aReqFields[i]].name.length) + " is not a valid address\n";
				  }
				   
			   }
			else if (sType == "text" || sType == "textarea" || sType == "password" || sType == "hidden") {	//text types
				eval ("sField = frm." + aReqFields[i] + ".value;");
				if (sField == "") {			//checks if value is blank
				    // eval ('sErrMsg = "\n" + sErrMsg + "  " + frm.' + aReqFields[i] + '.id;');
				    if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)					
					   	sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].id + "\n";
				   else
 				   		sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].name.slice(3, frm.elements[aReqFields[i]].name.length) + "\n";						
				}
			}
			else if (sType == "select-one" || sType == "select-multiple") {		//select boxes
				eval ("sField = frm." + aReqFields[i] + ".selectedIndex;");		//pulls the index of selected
				eval ("sValue = frm." + aReqFields[i] + "[sField].value");		//pulls the value of selected
				if (sValue == "" ) {				//checks if value is blank
				    if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)					
					   	sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].id + "\n";
				    else
 				   		sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].name.slice(3, frm.elements[aReqFields[i]].name.length) + "\n";		
				}
			}
			else if (sType == "checkbox") {			//checkboxes
				eval ("sField = frm." + aReqFields[i] + ".checked;");
				if (!sField) {						//checks if checked or not
				    if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)					
					   	sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].id + "\n";
				    else
 				   		sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]].name.slice(3, frm.elements[aReqFields[i]].name.length) + "\n";	
				}
			}
			else {
				eval ("sType = frm." + aReqFields[i] + "[0].type;");
				if (sType == "radio") {			//radio buttons
					eval ("sLen = frm." + aReqFields[i] + ".length;");
					bFound = false;
					for (var j = 0; j < sLen; j++) {		//loops looking for selection
						eval ("sField = frm." + aReqFields[i] + "[j].checked;");
						if (sField) {
							bFound = true;
						}
					}
					if (!bFound) {				//checks if selection found
					    if(!isIEMac && frm.elements[aReqFields[i]].id != undefined)					
						   	sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]][0].id + "\n";
					    else
 					   		sErrMsg = sErrMsg + "  " + frm.elements[aReqFields[i]][0].name.slice(3, frm.elements[aReqFields[i]][0].name.length) + "\n";	
					}
				}
			}
		}
		
		if (sErrMsg != "" ) {		//displays error if exists
			alert("The following fields are required:\n" + sErrMsg);
			return false;
		}
		else return true;
	}
	// -----------------------------------------------------------------
	// Function    : IsEmailValid
	// Language    : JavaScript
	// Description : Checks if given email address is of valid syntax
	// Copyright   : (c) 1998 Shawn Dorman
	// http://www.goodnet.com/~sdorman/web/IsEmailValid.html
	// -----------------------------------------------------------------
	// Ver    Date    Description of modification
	// --- ---------- --------------------------------------------------
	// 1.0 09/04/1996 Original write
	// 1.1 09/30/1998 CHG: Use standard header format
	// -----------------------------------------------------------------
	// Source: Webmonkey Code Library
	// (http://www.hotwired.com/webmonkey/javascript/code_library/)
	// -----------------------------------------------------------------
	
	function IsEmailValid(frm,ElemName)
	{
	var EmailOk  = true
	var Temp     = frm.elements[ElemName]
	var AtSym    = Temp.value.indexOf('@')
	var Period   = Temp.value.lastIndexOf('.')
	var Space    = Temp.value.indexOf(' ')
	var Length   = Temp.value.length - 1   // Array is from 0 to length-1
	
	if ((AtSym < 1) ||                     // '@' cannot be in first position
	    (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
	    (Period == Length ) ||             // Must be atleast one valid char after '.'
	    (Space  != -1))                    // No empty spaces permitted
	   {  
	      EmailOk = false;
	      Temp.focus();
	   }
	return EmailOk
	}
//-->