<!--
// Define whitespace characters
var whitespace = " \t\n\r";

// Check for empty string
function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
}

// Check for whitespace characters
function isWhitespace (s)
{
	var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1)
		{
			return false;
	    }
	}
    return true;
}

// Force non-whitespace entry
function forceEntry(objForm, aFields)
{
	var aErrors = new Array();
	if (!aFields || aFields.length == 0)
	{
		return true;
	}
	else
	{
		var e = 0;
		for (var i=0; i<aFields.length; i++)
		{
			var strField = new String(objForm.elements[aFields[i].substring(0, aFields[i].indexOf(","))].value);
			if (isWhitespace(strField))
			{
				aErrors[e] = new Array();
				aErrors[e]['field'] = aFields[i].substring(0, aFields[i].indexOf(","));
				aErrors[e]['name'] = aFields[i].substring((aFields[i].indexOf(",")+1), aFields[i].length);
				e++;
			}
		}
	}
	if (aErrors.length == 0)
	{
		return true;
	}
	else
	{
		if (aErrors.length == 1)
		{
			var message = "An entry is required in the '" + aErrors[0]['name'] + "' field.";
		}
		else
		{
			var message = "An entry is required in the following " + aErrors.length.toString() + " fields:\n\n";
			for (var i=0; i<aErrors.length; i++)
			{
				var message = message + (i+1) + ". " + aErrors[i]['name'] + "\n";
			}
		}
		alert(message);
		if (objForm.elements[aErrors[0]['field']].type.toString() != 'hidden')
		{
			objForm.elements[aErrors[0]['field']].focus();
		}
		return false;
	}
}

// Validate integer
function isInteger(objField, isReq, minVal, maxVal)
{
	var strField = new String(objField.value);
	if (isWhitespace(strField))
	{
		if (isReq)
		{
			alert("Please specify a valid numeric (no decimals) entry!");
			objField.focus();
			return false;		
		}
		else
		{
			return true;
		}
	}
	
	if(isNaN(parseInt(strField)) || strField.indexOf(".") > 0)
	{
		alert("Please specify a valid numeric (no decimals) entry!");
		objField.focus();
		return false;
	}
	
	if (minVal && parseInt(strField) < parseInt(minVal))
	{
		alert("Minimum value is " + minVal.toString() + "!");
		objField.focus();
		return false;
	}
	
	if (maxVal && parseInt(strField) > parseInt(maxVal))
	{
		alert("Maximum value is " + maxVal.toString() + "!");
		objField.focus();
		return false;
	}
	
	// Return formatted value
	objField.value = parseInt(strField);
	return true;
}

// Validate biometrics
function isBiometrics(objField, isReq, minVal, maxVal)
{
	var strField = new String(objField.value);
	if (isWhitespace(strField))
	{
		if (isReq)
		{
			alert("Please specify a valid numeric (no decimals) entry!");
			objField.focus();
			return false;		
		}
		else
		{
			return true;
		}
	}
	
	if(isNaN(parseInt(strField)) || strField.indexOf(".") > 0)
	{
		alert("Please specify a valid numeric (no decimals) entry!");
		objField.focus();
		return false;
	}
	
	if (minVal != parseInt(strField) && maxVal != parseInt(strField))
	{
		alert("Biometrics value must be 0 or 10!");
		objField.value = 10;
		objField.focus();
		return true;
	}
	
	// Return formatted value
	objField.value = parseInt(strField);
	return true;
}
// Validate float
function isFloat(objField, isReq, minVal, maxVal)
{
	var strField = new String(objField.value);
	if (isWhitespace(strField))
	{
		if (isReq)
		{
			alert("Please specify a valid numeric entry!");
			objField.focus();
			return false;		
		}
		else
		{
			return true;
		}
	}
	
	if(isNaN(parseFloat(strField)))
	{
		alert("Please specify a valid numeric entry!");
		objField.focus();
		return false;
	}
	
	if (minVal && parseFloat(strField) < parseFloat(minVal))
	{
		alert("Minimum value is " + minVal.toString() + "!");
		objField.focus();
		return false;
	}
	
	if (maxVal && parseFloat(strField) > parseFloat(maxVal))
	{
		alert("Maximum value is " + maxVal.toString() + "!");
		objField.focus();
		return false;
	}
	
	// Return formatted value
	objField.value = parseFloat(strField);
	return true;
}

// Validate date (MM/DD/YYYY) 
function isDate(objField, isReq)
{
	var strField = new String(objField.value);
	if (!isReq && isWhitespace(strField))
	{
		return true;
	}

	// Regex - MM/DD/YY date format
	var regex = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{2,4})$/;
	var matchArray = strField.match(regex);
	if (matchArray == null) 
	{
		alert("Date format must be MM/DD/YYYY");
		objField.focus();
		return false;
	}
	
	// Date elements
	var month = matchArray[1];
	var day = matchArray[3];
	var year = matchArray[5];
	
	// Format year
	if (year.length == 2)
	{
		if (year > 20)
		{
			var year = "19" + year;
		}
		else
		{
			var year = "20" + year;
		}
	}

	// Validate month
	if (month < 1  || month > 12) 
	{
		alert("Month must be between 1 and 12.");
		objField.focus();
		return false;		
	}
	
	// Validate day	
	if (day < 1  || day > 31) 
	{
		alert("Day must be between 1 and 31.");
		objField.focus();
		return false;
	}
	
	// Validate year
	if (year < 1970  || year > 2038) 
	{
		alert("Year must be between 1970 and 2038.");
		objField.focus();
		return false;
	}
	
	// Declare month names
	var strMonths = new Array();
	strMonths[1]  = "January";
	strMonths[2]  = "February";
	strMonths[3]  = "March";
	strMonths[4]  = "April";
	strMonths[5]  = "May";
	strMonths[6]  = "June";
	strMonths[7]  = "July";
	strMonths[8]  = "August";
	strMonths[9]  = "September";
	strMonths[10]  = "October";
	strMonths[11] = "November";
	strMonths[12] = "December";
	if (day > 30 && (month == 9 || month == 4 || month == 6 || month == 11 || month == 11))
	{
		var x = parseInt(month);
		alert(strMonths[x] + " has 30 days.");
		objField.focus();
		return false;
	}
	if ((month == 2 && (year == 2000 || year == 2004 || year == 2008 || year == 2012 || year == 2016 || year == 2020 || year == 2024 || year == 2028)) && day > 29)
	{
		alert("February has 29 days in " + year +".");
		objField.focus();
		return false;
	}
	if ((month == 2 && (year != 2000 && year != 2004 && year != 2008 && year != 2012 && year != 2016 && year != 2020 && year != 2024 && year != 2028)) && day > 28)
	{
		alert("February has 28 days in " + year +".");
		objField.focus();
		return false;
	}
	
	// Zero-pad date values
	if (month.length == 1)
	{
		var month = '0' + month;
	}
	if (day.length == 1)
	{
		var day = '0' + day;
	}	

	// Return formatted value
	objField.value = month + "/" + day + "/" + year;
	return true;
}

// Validate time (HH:MM AM)
function isTime(objField, isReq)
{
	var strField = new String(objField.value);
	if (!isReq && isWhitespace(strField))
	{
		return true;
	}
	
	// Regex #1 - abbreviated time entry
	var regex1 = /^(\d{1,2})?(\s?(AM|am|PM|pm|aM|Am|pM|Pm|a|p|A|P))?$/;
	var matchArray = strField.match(regex1);
	if (matchArray != null) 
	{
		if (matchArray[3].toUpperCase() == 'A')
		{
			matchArray[3] = 'AM';
		}
		if (matchArray[3].toUpperCase() == 'P')
		{
			matchArray[3] = 'PM';
		}
		if (matchArray[3] == '' || matchArray[3] == ' ')
		{
			if (parseFloat(matchArray[0]) > 11)
			{
				matchArray[3] = 'PM';
			}
			else
			{
				matchArray[3] = 'AM';
			}
		}				
		var strField = matchArray[1] + ":00 " + matchArray[3]
	}
	
	// Check for missing colon character, allow for military time
	if (strField.length == 4 && !isNaN(strField.substr(0, 4)))
	{
		var strField = strField.substr(0,2) + ':' + strField.substring(2,strField.length)
	}
	else if (strField.length == 3 && !isNaN(strField.substr(0, 3)))
	{
		var strField = '0' + strField.substr(0,1) + ':' + strField.substring(1,strField.length)
	}
	if (strField.match(/^\d{2}[:]\d{2}$/) != null)
	{
		if (strField == "24:00")
		{
			var strField = "12:00 AM";
		}
		else if (parseFloat(strField.substr(0,2)) == 0)
		{
			var strField = "12" + strField.substring(2,strField.length) + " AM";
		}
		else if (parseFloat(strField.substr(0,2)) > 11)
		{
			if (strField.substr(0,2) > 12)
			{
				var strField = (parseFloat(strField.substr(0,2))-12) + strField.substring(2,strField.length)
			}
			var strField = strField + " PM";
		}
		else
		{
			var strField = strField + " AM";
		}
	}
	
	// Regex #2 - HH:MM AM/PM
	var regex2 = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm|aM|Am|pM|Pm|a|p|A|P))?$/;
	var matchArray = strField.match(regex2);
	if (matchArray == null) 
	{
		alert("Time format must be HH:MM AM");
		objField.focus();
		return false;
	}
	
	// Date elements
	var hour = matchArray[1];
	var minute = matchArray[2];
	var second = matchArray[4];
	var ampm = matchArray[6];
	if (second=="") { second = null; }
	if (ampm=="") { ampm = null }
	if (ampm != null && ampm != 'undefined' && ampm != "")
	{
		if (ampm.toUpperCase() == 'A' || ampm.toUpperCase() == 'A ')
		{
			ampm = 'AM';
		}
		if (ampm.toUpperCase() == 'P' || ampm.toUpperCase() == 'P ')
		{
			ampm = 'PM';
		}
	}
	
	if (hour == 0 || hour == 00 || hour < 1 || hour > 12) 
	{
		alert("Hour must be between 1 and 12.");
		objField.focus();
		return false;
	}
	
	if (ampm == null) 
	{
		alert("You must specify AM or PM.");
		objField.focus();
		return false;
	}
	
	if (minute < 0 || minute > 59) 
	{
		alert ("Minute must be between 0 and 59.");
		objField.focus();
		return false;
	}

	// Return formatted value
	objField.value = parseInt(hour, 10) + ":" + minute + " " + ampm.toUpperCase();
	return true;
}

function isDateTime(objField, isReq)
{
	var strField = new String(objField.value);
	if (!isReq && isWhitespace(strField))
	{
		return true;
	}

	// Regex #1 - abbreviated time entry
	var regex1 = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{2,4})\W+(\d{1,2})?(\s?(AM|am|PM|pm|aM|Am|pM|Pm|a|p|A|P))?$/;
	var matchArray = strField.match(regex1);
	if (matchArray != null) 
	{
		if (matchArray[8].toUpperCase() == 'A')
		{
			matchArray[8] = 'AM';
		}
		if (matchArray[8].toUpperCase() == 'P')
		{
			matchArray[8] = 'PM';
		}
		if (matchArray[8] == '' || matchArray[3] == ' ')
		{
			matchArray[8] = 'AM';
		}				
		var strField = matchArray[1] + matchArray[2] + matchArray[3] + matchArray[4] + matchArray[5] + " " + matchArray[6] + ":00 " + matchArray[8]
	}

	// Regex #2 - MM/DD/YY HH:MM AM/PM
	var regex2 = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{2,4})\W+(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm|aM|Am|pM|Pm|a|p|A|P))?$/;
	var matchArray = strField.match(regex2);
	if (matchArray == null) 
	{
		alert("Date/time format must be MM/DD/YYYY HH:MM AM");
		objField.focus();
		return false;
	}
	
	// Date elements
	var month = matchArray[1];
	var day = matchArray[3];
	var year = matchArray[5];
	var hour = matchArray[6];
	var minute = matchArray[7];
	var second = matchArray[9];
	var ampm = matchArray[11];
	
	// Format year
	if (year.length == 2)
	{
		if (year > 20)
		{
			var year = "19" + year;
		}
		else
		{
			var year = "20" + year;
		}
	}

	// Validate month
	if (month < 1  || month > 12) 
	{
		alert("Month must be between 1 and 12.");
		objField.focus();
		return false;		
	}
	
	// Validate day	
	if (day < 1  || day > 31) 
	{
		alert("Day must be between 1 and 31.");
		objField.focus();
		return false;
	}
	
	// Validate year
	if (year < 1970  || year > 2038) 
	{
		alert("Year must be between 1970 and 2038.");
		objField.focus();
		return false;
	}
	
	// Declare month names
	var strMonths = new Array();
	strMonths[1]  = "January";
	strMonths[2]  = "February";
	strMonths[3]  = "March";
	strMonths[4]  = "April";
	strMonths[5]  = "May";
	strMonths[6]  = "June";
	strMonths[7]  = "July";
	strMonths[8]  = "August";
	strMonths[9]  = "September";
	strMonths[10]  = "October";
	strMonths[11] = "November";
	strMonths[12] = "December";
	if (day > 30 && (month == 9 || month == 4 || month == 6 || month == 11 || month == 11))
	{
		var x = parseInt(month);
		alert(strMonths[x] + " has 30 days.");
		objField.focus();
		return false;
	}
	if ((month == 2 && (year == 2000 || year == 2004 || year == 2008 || year == 2012)) && day > 29)
	{
		alert("February has 29 days in " + year +".");
		objField.focus();
		return false;
	}
	if ((month == 2 && (year != 2000 && year != 2004 && year != 2008 && year != 2012)) && day > 28)
	{
		alert("February has 28 days in " + year +".");
		objField.focus();
		return false;
	}
	
	// Zero-pad date values
	if (month.length == 1)
	{
		var month = '0' + month;
	}
	if (day.length == 1)
	{
		var day = '0' + day;
	}
	
	// Format seconds, AM/PM
	if (second == "") { second = null; }
	if (ampm == "") { ampm = null }

	if (ampm != null && ampm != 'undefined' && ampm != "")
	{
		if (ampm.toUpperCase() == 'A' || ampm.toUpperCase() == 'A ')
		{
			ampm = 'AM';
		}
		if (ampm.toUpperCase() == 'P' || ampm.toUpperCase() == 'P ')
		{
			ampm = 'PM';
		}
	}
	
	if (hour == 0 || hour == 00 || hour < 1 || hour > 12) 
	{
		alert("Hour must be between 1 and 12.");
		objField.focus();
		return false;
	}
	
	if (ampm == null) 
	{
		alert("You must specify AM or PM.");
		objField.focus();
		return false;
	}
	
	if (minute < 0 || minute > 59) 
	{
		alert ("Minute must be between 0 and 59.");
		objField.focus();
		return false;
	}
	
	// Return formatted value
	objField.value = month + "/" + day + "/" + year + " " + hour + ":" + minute + " " + ampm;
	return true;
}

// Validate email
function isEmail (objField, isReq)
{
	var strField = new String(objField.value);
	if (!isReq && isWhitespace(strField))
	{
		return true;
	}
	
	// Regex - valid.email@domain.com
	var regex = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
	if (strField.match(regex) == null)
	{
		alert("Please specify a valid email address!");
		objField.focus();
		return false;
	}
	else
	{
		return true;
	}
}

// Validate phone
function isPhone (objField, isReq)
{
	var strField = new String(objField.value);
	if (!isReq && isWhitespace(strField))
	{
		return true;
	}
	
	// Regex - Valid U.S. phone number 555-555-5555
	var regex = /^[0-9]{3,3}[-.\w]{1,1}[0-9]{3,3}[-.\w]{1,1}[0-9]{4,4}$/;
	if (strField.match(regex) == null)
	{
		alert("Please specify a valid telephone number, including area code!");
		objField.focus();
		return false;
	}
	else
	{
		// Return formatted value
		objField.value = strField.substr(0,3) + "-" + strField.substr(4,3) + "-" + strField.substr(8,4);
		return true;		
	}
}


//-->