<!-- Hide JavaScript from non-JS browsers 

////////////////////////////////////////////////////////////////////////////
// chkNotNull - CHECK FOR NULLS
// PURPOSE  :  VALIDATE WHETHER A FORM'S TEXT ITEM IS NULL.  ON FAILURE, RAISE ALERT AND
//             SET FOCUS TO TEXT ITEM.
// ARGUMENTS:  FRMITEM    TEXT ITEM NAME (I.E. FORM.TEXTITEM)
//             STRTYPE    TYPE OF FORM INPUT IT IS (I.E. TEXT BOX, FILE INPUT)
//             STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN NULL.
// RETURNS  :  BOOLEAN    TRUE IF NOT NULL; FALSE IF NULL  
////////////////////////////////////////////////////////////////////////////
  
	function chkNotNull (frmItem, strType, strText) {
		if (strType.toUpperCase() == "TEXT") {
			if ((frmItem.value == null) || (frmItem.value == "")) {
				alert(strText);
				frmItem.focus();
				frmItem.select();
				return false;
			}
		} else if (strType.toUpperCase() == "FILE") {
			if ((frmItem.value == null) || (frmItem.value == "")) {
				alert(strText);
				return false;
			}
		} else if (strType.toUpperCase() == "SELECT") {
			if (frmItem.options[0].selected) {
				alert(strText);
				frmItem.focus();
			return false;
			}
		} else if (strType.toUpperCase() == "MULTI-SELECT") {
			for (x=0; x < frmItem.options.length ; x++) {
				if (frmItem.options[x].selected) {
					return true;
				}
			}
			alert(strText);
			frmItem.focus();
			return false;
		} else if (strType.toUpperCase() == "RADIO") {
			for (x=0; x < frmItem.length ; x++) {
				if (frmItem[x].checked) {
					return true;
				}
			}
			alert(strText);
			return false;
		}	// END RADIO ELSE IF
   return true;
  }	// END CHKNOTNULL FUNCTION
    
////////////////////////////////////////////////////////////////////////////
// chkLength - TEXT ITEM LENGTH CHECKER
// PURPOSE:		DETERMINES THE LENGTH OF A FORM'S TEXT FIELD
// ARGUMENTS:	FRMITEM    FORM ELEMENT NAME (I.E. FORM.TEXTITEM)
//				FRMLENGTH  DESIRED LENGTH OF THE FIELD (CHECKED AGAINST)
//				STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN NULL
// RETURNS:		BOOLEAN    TRUE IF VALID; FALSE IF NULL
////////////////////////////////////////////////////////////////////////////

	function chkLength (frmItem, frmLength, strText) {
		if (frmItem.value.length != frmLength && frmItem.value.length != 0) {
			alert(strText);
			frmItem.focus();
			frmItem.select();
		return false;
		}
	return true;
	}

////////////////////////////////////////////////////////////////////////////
// chkNumber 
// PURPOSE:		DETERMINE IF NUMERIC VALUE
// ARGUMENTS:	FRMITEM    FORM ELEMENT NAME (I.E. FORM.TEXTITEM)
//				STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    TRUE IF NUMERIC; FALSE IF NOT
////////////////////////////////////////////////////////////////////////////

	function chkNumber (frmItem, strText) {
		var num_period = 0;
		for (var i=0; i < (frmItem.value).length; i++) {
			var ch = (frmItem.value).substring(i, i+1);
			if (ch == ".")  num_period++;
			if (!( (ch >= "0" && ch <= "9") || (ch == "." && num_period <= 1) )) {
				alert(strText);
				frmItem.focus ();
			return false;
			}  // END IF
		}  // END FOR LOOP
	return true;
	}  // END CHKNUMBER FUNC.

////////////////////////////////////////////////////////////////////////////
// chkEmail 
// PURPOSE:		VALIDATES AN EMAIL ADDRESS
// ARGUMENTS:	FRMITEM    FORM ELEMENT NAME (I.E. FORM.TEXTITEM)
//				STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    TRUE IF VALID ADDRESS; FALSE IF NOT
//////////////////////////////////////////////////////////////////////////// 
    
	function chkEmail(frmItem, strText) {
		var strReq = /\S+@\S+\.\S+/;
		//var strReq = /^[\w]+[\.\w]*@[\w]+\.[a-z]{2,4}[\.]?[a-z]{0,2}$/i;
		if (frmItem.value.search(strReq) > -1) {
			return true;
		} else {
			alert(strText);
			frmItem.focus();
			frmItem.select();
			return false;
		}
	}

////////////////////////////////////////////////////////////////////////////
// chkMaxLength 
// PURPOSE:		ENSURES VALUE OF TEXT INPUT IS NOT 0 AND < THAN DESIRED LENGTH
// ARGUMENTS:	FRMITEM    FORM ELEMENT NAME (I.E. FORM.TEXTITEM)
//				FRMLENGTH  DESIRED LENGTH OF THE FIELD (CHECKED AGAINST)
//				STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    TRUE IF VALID; FALSE IF NOT
////////////////////////////////////////////////////////////////////////////

	function chkMaxLength (frmItem, frmLength, strText) {
		if (frmItem.value.length > frmLength && frmItem.value.length != 0) {
			alert(strText);
			frmItem.focus();
			frmItem.select();
		return false;
		}
	return true;
	}
	
////////////////////////////////////////////////////////////////////////////
// chkLengthBetween 
// PURPOSE:		ENSURES LENGTH OF A TEXT INPUT IS BETWEEN 2 DESIRED NUMBERS
// ARGUMENTS:	FRMITEM    			FORM ELEMENT NAME (I.E. FORM.TEXTITEM)
//				FRMLENGTHLOWER  	MIN FIELD SIZE
//				FRMLENGTHHIGHER  	MAX FIELD SIZE
//				STRTEXT    			ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    			TRUE IF VALID; FALSE IF NOT
////////////////////////////////////////////////////////////////////////////

	function chkLengthBetween (frmItem, frmLengthLower, frmLengthHigher, strText) {
		if ((frmItem.value.length < frmLengthLower ||  frmItem.value.length > frmLengthHigher) && frmItem.value.length != 0) {
			alert(strText);
			frmItem.focus();
			frmItem.select();
		return false;
		}
	return true;
	}

////////////////////////////////////////////////////////////////////////////
// chkPassword 
// PURPOSE:		COMPARES FIELDS WHEN USER IS REQUIRED TO ENTER PASSWORD
//				FIELD TWICE TO ENSURE THEY ARE =
// ARGUMENTS:	FRMITEM1   FIRST PASSWORD FIELD
//				FRMTIEM2   SECOND PASSWORD FIELD
//				ERRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    TRUE IF FIELDS ARE =; FALSE IF NOT
////////////////////////////////////////////////////////////////////////////

	function chkPassword(frmItem1,frmItem2,errText) {
		if (frmItem1.value == frmItem2.value) {
			return true;
		} else {
			alert(errText);
			return false;
		}
	}  // END PASSWORD CHECKER FUNCTION

////////////////////////////////////////////////////////////////////////////
// chkMinLength 
// PURPOSE:		CHECKS TO SEE IF FORM ELEMENT IS AT LEAST A CERTAIN LENGTH
// ARGUMENTS:	FRMITEM    FORM ELEMENT
//				FRMLENGTH  MINIMUM REQUIRED LENGTH
//				STRTEXT    ERROR TEXT FOR DIALOG BOX RAISED WHEN FALSE
// RETURNS:		BOOLEAN    TRUE IF OVER MINIMUM; FALSE IF NOT
////////////////////////////////////////////////////////////////////////////

	function chkMinLength (frmItem, frmLength, strText) {
		if (frmItem.value.length < frmLength && frmItem.value.length != 0) {
			alert(strText);
			frmItem.focus();
			frmItem.select();
		return false;
		}
	return true;
	}	// END CHECKMINLENGTH FUNC.
	
////////////////////////////////////////////////////////////////////////////
// isChecked - CHECKBOX CHECKER
// PURPOSE:		DETERMINES WHETHER A FORMS CHECKBOX IS CHECKED OR NOT
// ARGUMENTS:	FRMITEM    CHECKBOX NAME (I.E. FORM.CHECKBOX)
// RETURNS:		BOOLEAN    TRUE IF CHECKED; FALSE IF NOT CHECKED
////////////////////////////////////////////////////////////////////////////
  
	function isChecked(frmItem) {  
		if (frmItem.checked) {
			return true;
		}
	return false;
	}
	
/*
/////////////////////////////////////////////////////////////////////////
 FUNCTION:		chkDate
 DESCRIPTION:	FUNCTION CHECKS THAT DATE ENTERED IS A VALID DATE IN
 				THE FOLLOWING FORMAT : MM/DD/YYYY
 EXPECTS:		iName ~ FORM FIELD INPUT NAME, bReq ~ REQUIRED?
 RETURNS:		TRUE IF VALID, FALSE IF DATE IS BAD
 
/////////////////////////////////////////////////////////////////////////
*/
function chkDate(iName, bReq) {
	var str;
	var strName;

	//strName = eval("document." + frmName + "." + iName);
	strName = iName;
	str = iName.value;
	str = trimString (str);
	
	var daysPerMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];	
	var strarray = new Array();
    var slash = "/";
	var mn,mm;
    var da,dd;
	var yr,yy;
	var hr,hh,min,time;
	strarray = str.split(slash);		
	var strarraylength = strarray.length;

	// ENSURE ARRAY HAS 3 VALUES AND DASHES ARE IN PROPER AREAS
	if ( strarraylength==3 && str.lastIndexOf("/")!=str.length-1 && str.length>=8) {
		mm = trimString(strarray[0]);
		dd = trimString(strarray[1]);
		yy = trimString(strarray[2]);

		// CHECK THE MONTH AND MODIFY IT IF NECCESSARY.
		// ENSURE MONTH HAS A LENGTH OF LESS THAN 2 AND IS IN BETWEEN 1 AND 12
		if ( mm>12 || mm.length>2 || mm<1 ) {
			alert("Please enter a valid month.\n\nUse the following format: MM/DD/YYYY");
			//alert(strName.name);
			strName.select();
			strName.focus();
			return false;
		}
		// MONTH IS A SINGLE DIGIT W/ NO LEADING ZERO
		// TAKE SINGLE DIGIT AND ADD A LEADING 0 TO IT
		else if ( mm.length==1 && mm>=1 && mm<=9 ) {
			mn = mm;
			mm = "0" + mm;
		}
		// MONTH IS OKAY, TRIM 0's STORE AS mn FOR LEAP YEAR CHECKER
		else if ( mm.length==2 && mm>0 && mm<=12 ) {
			if ( mm.charAt(0)==0 )
				mn = mm.charAt(1);
			else				
				mn = mm;
			mm = mm;
		}
		// MONTH IS GARBAGE, RETRY
		else {
			alert("Please enter a valid month.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}	// END "IF ( MM>12 || MM.LENGTH>2 || MM<1 ) {"
		// END MONTH CHECKER
		
		
		//////////// DAY CHECKER /////////////
		// CHECK THE DAY AND MODIFY IT IF NECCESSARY.
		//alert ('dd=' + dd);
		if ( dd>31 || dd.length>2 || dd<1 ) {
			alert("Please enter a valid day.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}
		// DAY IS GOOD BUT ONLY 1 CHAR - ADD LEADING ZERO
		else if ( dd.length==1 && dd>=1 && dd<=9 ) {
			da = dd;
			dd = "0" + dd;
		}
		// DAY IS OKAY, TRIM 0's, STORE AS da FOR LEAP YEAR CHECKER
		else if ( dd.length==2 && dd>=1 && dd<=31 ) {
			if ( dd.charAt(0)==0 )
				da = dd.charAt(1);
			else
				da = dd;
			
			dd = dd;				
		}
		// DAY IS GARBAGE, TRY AGAIN!
		else {
			alert("Please enter a valid day.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}	// END "IF ( DD>31 || DD.LENGTH>2 || DD<1 ) {"
		// END DAY CHECKER
		
		//////////// YEAR CHECKER /////////////
		// ENSURE THE YEAR IS 4 DIGITS
		if ( yy.length!=4 ) {
			alert("Please enter a four-digit year.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}
		else {
			// ENSURE ALL VALUES ARE NUMERIC
			var flag;			
			var valChars = new Array(0,1,2,3,4,5,6,7,8,9);	// BUILD VALID DIGIT ARRAY
			
			// SCROLL THROUGH EACH DIGIT IN THE YEAR
		    for (j=0; j<4; j++) {
		    	// SCROLL THROUGH EACH VALID DIGIT IN valChars ARRAY
				for (var c=0; c<10; c++) {
					// IF ALL CHARS ARE VALID, SET FLAG
					if (yy.charAt(j) != valChars[c])
						flag = false;
					else {
						flag = true;
						break;
					}
				}
				// IF flag = FALSE, AN ILLEGAL CHAR WAS FOUND - ERROR, SEND MESSAGE AND FOCUS
				if (flag == false) {
					alert ("Please enter a valid year, it must be numeric.\n\nUse the following format: MM/DD/YYYY");
					strName.select();
					strName.focus();
					return false;
				}
	        }
	    }
		// END YEAR CHECKER		
		
		
		// CHECK FOR RELEVENT # OF DAYS TO CORRESPONDING MONTH
		if ( da > daysPerMonth[mn] && mn != 2) {
			alert( "Error: " + monthName(mn) + " does not contain " + da + " days.\n\nPlease update your entry.\n\nUse the following format: MM/DD/YYYY");
			strName.focus();
			return false;
		 }	
		
		// SET yr = yy FOR LEAP YEAR CHECKER
		yr = yy;

		// LEAP YEAR CHECKER
		if ( mn==2 && da==29 && (yr%400==0 || (yr%4==0 && yr%100 != 0)) ) {
			//alert( "It is a leap year. hence ok " );
		}
		// IF DAY IS > 29 IN LEAP YEAR - ERROR OUT
		else if ( mn==2 && da>29 && (yr%400==0 || (yr%4==0 && yr%100 != 0)) ) {
			//alert( "This Month " + "only contains 29 days");
			alert( "Error: " + monthName(mn) + " only contains 29 days in "
			+ yy + ".\n\nPlease update your entry.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}
		// IF DAY IS => 29 IS NON-LEAP YEAR, ERROR OUT
		else if ( mn==2 && da>=29 && !(yr%400==0 || (yr%4==0 && yr%100 !=0)) ) {
			alert( "Error: " + monthName(mn) + " only contains " + daysPerMonth[mn] + " days in "
			+ yy + ".\n\nPlease update your entry..\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}

		answer = mm + "/" + dd + "/" + yy;

		if (answer.length == 10) {
			//alert (str);
			strName.value = answer;
		}
		else {
			alert("Please enter a valid date.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}
		
	}
	// VALUE IS AN ILLEGAL LENGTH, ERROR OUT
	else {
		if (bReq == true) {
			alert("Please enter a valid date.\n\nUse the following format: MM/DD/YYYY");
			strName.select();
			strName.focus();
			return false;
		}
	}	// END IF

return true;
	
}	// END CHKDATE FUNCTION	

/*
/////////////////////////////////////////////////////////////////////////
 FUNCTION:		trimString
 DESCRIPTION:	FUNCTION TRIMS LEADING AND TRAILING SPACES
 EXPECTS:		str - STRING TO BE TRUNCATED
 RETURNS:		TRUNCATED STRING WITHOUT SPACES
 
/////////////////////////////////////////////////////////////////////////
*/
function trimString (str) {
	str = this != window? this : str;
	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}


/*
/////////////////////////////////////////////////////////////////////////
 FUNCTION:		chkAnyRadioSelected 
 DESCRIPTION:	FUNCTION CHECKS TO SEE IF ANY RADIO BUTTON IN A GROUP
 				IS SELECTED
 EXPECTS:		objFormElement ~ FORM FIELD INPUT NAME, strError - ERROR MESSAGE
 RETURNS:		TRUE IF ONE IS SELECTED, FALSE IF NOT
 
/////////////////////////////////////////////////////////////////////////
*/
function chkAnyRadioSelected (objFormElement, strError) {

	var goodFlag = false;

	for (var b = 0; b < objFormElement.length; b++) {
		if (objFormElement[b].checked == true) {
			goodFlag = true;
			break;
		}
	}
	
	if (goodFlag == false) {
		alert (strError);
		//objFormElement[0].focus();
		return false;
	}
	else return true;
	
}

/*
/////////////////////////////////////////////////////////////////////////
 FUNCTION:		chkRadioAndText 
 DESCRIPTION:	FUNCTION CHECKS TO SEE IF SPECIFIC RADIO BUTTON IN A GROUP
 				IS SELECTED WHETHER THERE'S A TEXT FIELD VALUE AS WELL
 EXPECTS:		radioName - NAME OF RADIO BUTTON
 				elementValue - ELEMENT ID OF THE GROUND (EG: 5TH RADIO IN A GROUP, PASS 5)
 				txtBox - NAME OF TEXT BOX YOU WANT TO ENSURE HAS DATA
 				strError - ERROR MESSAGE TO PASS TO USER
 RETURNS:		TRUE IF VALID, FALSE IF DATE IS BAD
 
/////////////////////////////////////////////////////////////////////////
*/
function chkRadioAndText (radioName, elementValue, txtBox, strError) {

	var actualElement = parseFloat(elementValue) - 1;
	var radioElement = eval(radioName[actualElement]);

	// IF PO WAS SELECTED, MAKE SURE THEY ENTER THE ACTUAL NUMBER
	if (radioElement.checked && txtBox.value == '') {
		alert (strError);
		txtBox.focus();
		return false;
	}
	else return true;
	
}
