function validateAllElements(formName) {
	// function is a keeper decided: 4/24/2003. - George Butiri
	
	var error = new Boolean;
	error = false;
	
	for (var i = 0; i < formName.elements.length; i++) {
		formName.elements[i].style.background = "#FFFFFF";
	}

	for (var i = 0; i < formName.elements.length; i++) {
		if (formName.elements[i].datatype == "text") {
			if (!checkReq(formName.elements[i])) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "e-mail") {
			if (!validateEmail(formName.elements[i])) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "radiob") {
			if(!checkRadio(formName.elements[formName.elements[i].name])) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "radioY") {
			if(!checkRadioY(formName.elements[formName.elements[i].name])) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "date>=18") {
			if(!validateDate(formName.elements[i], ">=", 18)) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "date<18") {
			if (!validateDate(formName.elements[i], "<", 18)) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "chkBox") {
			if (!checkBox(formName.elements[i])) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "nr") {
			if (!charCheck(formName.elements[i], "1234567890")) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "AZ09-") {
			if (!charCheck(formName.elements[i], "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890-")) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "unpw") {
			if (!charCheck(formName.elements[i], "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890")) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "nr<100>0") {
			if (!validateCriteria(formName.elements[i], ">", 0)) {
				error = true;
				break;
			}
			if (!validateCriteria(formName.elements[i], "<", 100)) {
				error = true;
				break;
			}
		}
		else if (formName.elements[i].datatype == "nr<100>0NR") {
			if (!validateCriteriaNR(formName.elements[i], ">", 0)) {
				error = true;
				break;
			}
			if (!validateCriteriaNR(formName.elements[i], "<", 100)) {
				error = true;
				break;
			}
		}
	}
	if (error == true){
		return false;
	}
	else {
		return true;
	}
}

function checkBox(objectIn) {
	if (!objectIn.checked) {
		objectIn.style.background = "#CCCCCC";
		objectIn.focus();
		alert ("Check here to continue.");
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF";
		return true;
	}
}

function validateEmail(objectIn) {
	if (!checkReq(objectIn))
		return;
	if (!charCheckNR(objectIn, "1234567890qwertyuiopasdfghjklzxcvbnmQWETRYUIOPASDFGHJKLZXCVBNM.@_-"))
		return;
	if (!validateEmailNR(objectIn))
		return;
	return true;
}

function validateEmailNR(objectIn) {
	if (!checkReq(objectIn))
		return;
	if (!charCheckNR(objectIn, "1234567890qwertyuiopasdfghjklzxcvbnmQWETRYUIOPASDFGHJKLZXCVBNM.@_-"))
		return;
	var atFound = new Boolean;
	var dotFound = new Boolean;
	atFound = false;
	dotFound = false;
	
	var i;
	var strEmail = new String(objectIn.value);
	
	for (i = 0; i < strEmail.length; i++) { // look for the @
		if(strEmail.charAt(i) == '@') {
			atFound = true;
			break;
		}
	}
	for (var j = i; j < strEmail.length; j++) { // look for the .
		if(strEmail.charAt(j) == '.') {
			dotFound = true;
			break;
		}
	}
	if (!atFound || !dotFound){
		objectIn.style.background = "#CCCCCC";
		error = true;
		objectIn.focus();
		objectIn.select();
		alert("Must enter proper e-mail address:\n\nexample@eample.com");
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF";
		return true;
	}
}

function checkRadioY(objectIn) {
	if (!objectIn[0].checked) {
		objectIn[0].style.background = "#CCCCCC";
		objectIn[0].focus();
		alert("Must agree to continue!");
		return false;		
	}
	else {
		objectIn[0].style.background = "#FFFFFF";
		return true;
	}
}

function checkRadio(objectIn) {
	// function written by George Butiri on paril 21, 2003 //
	var error = new Boolean;
	error = true;
	for (var i = 0; i < objectIn.length; i++) {
		if (objectIn[i].checked) {
			error = false;
			break;
		}
	}
	
	if (error == true) {
		for (var i = 0; i < objectIn.length; i++) {
			objectIn[i].style.background = "#CCCCCC";
		}
		objectIn[0].focus();
		alert("Must make at least one selection!");
		return false;
	}
	else {
		for (var i = 0; i < objectIn.length; i++) {
			objectIn[i].style.background = "#FFFFFF";
		}
		return true;
	}
}

function checkReq(objectIn) {
	// function written by George Butiri on April 21, 2003 //
	if (objectIn.value == "") {
		objectIn.style.background = "#CCCCCC";
		objectIn.focus();
		objectIn.select();
		alert("Please fill in the required field.");
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF";
		return true;
	}
}

function validateDate(objectIn, criteria, years) {
	if (!checkReq(objectIn))
		return;
	if (!validateDateNR(objectIn, criteria, years))
		return;
	return true;
}

function validateDateNR(objectIn, criteria, years) {
	var strMsg = new String;
	var error = new Boolean;
	strMsg = "Your errors are as follows:\n\n";
	error = false;
	
	var bDate = new Date(objectIn.value);
	if (isNaN(bDate)) {
		strMsg += "Please make sure your date is a numeric value\n\tof format mm/dd/yyyy or mm/dd/yy\n";
		error = true;
	}
	var tDate = new Date();
	
	var bm = bDate.getMonth() + 1; var bd = bDate.getDate(); var by = bDate.getYear();
	if (navigator.appName == "Netscape") {
		by = bDate.getYear() + 1900;
	}
	
	if (navigator.appName == "Microsoft Internet Explorer") {
		if (by < 2000) {
			by += 1900;
		}
	}
		
	var tm = tDate.getMonth()+1; var td = tDate.getDate(); var ty = tDate.getYear();
	if(navigator.appName == "Netscape") {
		ty = tDate.getYear() + 1900;
	}
		
	// date validation begins.
	var yearDiff = ty - by; var monthDiff = tm - bm; var dayDiff = td - bd;
	var compYears = ty - years;
	
	if (yearDiff == years) {
		if (criteria == ">=") {
			if (monthDiff < 0 || dayDiff < 0) {
				error = true;
				strMsg += "Date must be before or equal to " + tm + "/" + td + "/" + compYears + "\n";
			}
		}
		else if (criteria == "<") {
			if (monthDiff >= 0 && dayDiff >= 0) {
				error = true;
				strMsg += "Date must be after " + tm + "/" + td + "/" + compYears + "\n";
			}
		}
	}
	else if (yearDiff < years) {
		if (criteria == ">=") {
			error = true;
			strMsg += "Date must be before or equal to " + tm + "/" + td + "/" + compYears + "\n";
		}
	}
	else if (yearDiff > years) {
		if (criteria == "<") {
			error = true;
			strMsg += "Date must be after " + tm + "/" + td + "/" + compYears + "\n";
		}
	}

	if (by > ty) {
		error = true;
		strMsg += "Date cannot be in the future!\n\nPlease use today's date,\nor a date before today.\n\nToday's date is:\n";
		strMsg += "\t" + tm + "/" + td + "/" + ty;
	}
	else if (by == ty) {
		if (bm > tm) {
			error = true;
			strMsg += "Date cannot be in the future!\n\nPlease use today's date,\nor a date before today.\n\nToday's date is:\n";
			strMsg += "\t" + tm + "/" + td + "/" + ty;
		}
		else if (bm == tm) {
			if (bd > td) {
				error = true;
				strMsg += "Date cannot be in the future!\n\nPlease use today's date,\nor a date before today.\n\nToday's date is:\n";
				strMsg += "\t" + tm + "/" + td + "/" + ty;
			}
		}
	}

	// date validation ends.
	
	if(error) {
		objectIn.style.background = "#CCCCCC"
		objectIn.focus();
		objectIn.select();
		alert (strMsg);
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF"
		return true;
	}
}

function charCheck(objectIn, validChars) {
	if (!checkReq(objectIn))
		return;
	if (!charCheckNR(objectIn, validChars))
		return;
	return true;
}

function charCheckNR(objectIn, validChars) {
// Written by George Butiri on May 15th 2003 //
	var strAccept = validChars;
	var strTxtBox = objectIn.value;
	var blnChrOK = false;
	var i, j;
	var charError = new Boolean;
	charError = false;

	// run through the text box charcters...
	for(i=0; i < strTxtBox.length; i++) {
		var chrToTest = strTxtBox.charAt(i);
		// run through the valid characters...
		for(j=0; j < strAccept.length; j++) {
			// compare the valid characters with the text box characters...
			if(chrToTest == strAccept.charAt(j)) {
				// if characters match...
				blnChrOK = true;
				break;
			}
			else {
				// if characters don't match...
				blnChrOK = false;
			}
		}
		// check the flag...
		if(!blnChrOK) {
			// if the character just checked is an invalid character...
			// kicks out at the sight of an invalid character. does not continue. saves time //
			objectIn.focus();
			objectIn.select();
			charError = true;
			alert("You need to enter valid characters: '" + validChars + "'");
			break;
		}
	}
	if (charError){
		objectIn.style.background = "#CCCCCC"
		objectIn.select();
		return false;
	}
	else{
		objectIn.style.background = "#FFFFFF"
		return true;
	}

}

function validateIfNumeric(objectIn) {
	if (!checkReq(objectIn))
		return;
	if(isNaN(objectIn.value)) {
		objectIn.style.background = "#CCCCCC"
		objectIn.focus();
		objectIn.select();
		alert("Field must be numeric.");
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF"
		return true;
	}
}

function validateCriteria(objectIn, criteria, valueIn) {
	if (!checkReq(objectIn))
		return;
	if (!validateCriteriaNR(objectIn, criteria, valueIn))
		return;
	return true;
}

function validateCriteriaNR(objectIn, criteria, valueIn) {
	var strMsg = new String;
	strMsg = "";
	var error = new Boolean;
	error = false;
	if(isNaN(objectIn.value)) {
		strMsg += "Field must be numeric\n";
		error = true;
	}
	else{
		if (criteria == "==") {
			if(objectIn.value != valueIn){
				strMsg += "Field does not equal " + valueIn + "\n";
				error = true;
			}
		}
		else if (criteria == "<") {
			if(objectIn.value >= valueIn) {
				strMsg += "Field must be less than " + valueIn + "\n";
				error = true;
			}
		}
		else if (criteria == "<=") {
			if(objectIn.value > valueIn) {
				strMsg += "Field must be less than or equal to" + valueIn + "\n";
				error = true;
			}
		}
		else if (criteria == ">") {
			if (objectIn.value <= valueIn) {
				strMsg += "Field must be greater than " + valueIn + "\n";
				error = true;
			}
		}
		else if (criteria == ">=") {
			if (objectIn.value < valueIn) {
				strMsg += "Field must be greater than or equal to " + valueIn + "\n";
				error = true;
			}
		}
		else if (criteria == "!=") {
			if (objectIn.value == valueIn) {
				strMsg += "Field must not be equal to " + valueIn + "\n";
				error = true;
			}
		}
		else {
			strMsg += "Criteria must be specified as < <= > >= == or !=";
		}
	}
	if (error) {
		objectIn.style.background = "#CCCCCC"
		objectIn.focus();
		objectIn.select();
		alert("The following error(s) occured:\n\n" + strMsg + "\nPlease correct!");
		return false;
	}
	else {
		objectIn.style.background = "#FFFFFF"
		return true;
	}
}