	<!--
	
	function ltrim(str) {
	  return str.replace(/^\s+/, '');
	}
	
	function rtrim(str) {
	  return str.replace(/\s+$/, '');
	}
	
	function trim(str) {
		return ltrim(rtrim(str));
	}
	
	function validElement(frm, element, field, valid, message, param) {
		var strName = frm.elements['fvl_' + element];
		
		if(!field(frm.elements[element], valid, param)) {
			if(strName)
				strName = strName.value;
			else
				strName = '';

			if(trim(message).length > 0)
				alert(strName + message);
			frm.elements[element].focus();
			return false;
		}
		return true;
	}
	
	function validateElement(frm, element, field, valid, message, param) {
		var i = 0;
		var aryItems = frm.elements[element];

		// Loop thru all elements and check for validity using valid function
		if(aryItems) {
			if(aryItems.length) {
				for(i = 0; i < aryItems.length; i++) {
					if(!validElement(frm, aryItems[i].value, field, valid, message, param))
						return false;
				}
			} else if(!validElement(frm, aryItems.value, field, valid, message, param))
						return false;
		}
		
		return true;
	}
	
	function validate(frm) {
		if(!validateElement(frm, 'fv_ISEMAILREQ', frmValue, isValidEmail, 'The Email address you provided appears to be invalid.'))
			return false;

		if(!validateElement(frm, 'fv_ISDATE', frmValue, isValidDate, ' appears to be an invalid date.'))
			return false;
		
		if(!validateElement(frm, 'fv_ISTIME', frmValue, isValidTime, ' appears to be an invalid time.'))
			return false;

		if(!validateElement(frm, 'fv_ISTIMEOPT', frmValue, isValidTimeOptional, ' appears to be an invalid time.'))
			return false;

		if(!validateElement(frm, 'fv_REQUIRED', frmValue, isRequired, ' is a required form field.'))
			return false;

		if(!validateElement(frm, 'fv_ISNUMERIC', frmValue, isNumeric, ' must be a numeric value.'))
			return false;

		if(!validateElement(frm, 'fvlb_REQUIRED', frmSelect, isRequired, ' is a required form field.'))
			return false;

		if(!validateElement(frm, 'fv_ISEMAIL', frmValue, isValidEmailOptional, 'The Email address you provided appears to be invalid.'))
			return false;

		return true;
	}

	//
	function isNumeric(strValue) {
		if(isNaN(parseInt(strValue))) return false;
		else return true;
	}
	
	//runs the valid function against a text field
	function frmValue(element, valid, param) {
		return valid(element.value, param);
	}

	//runs the valid functino against the selected option of a select box (false if nothing selected)
	function frmSelect(element, valid, param) {
		if(element.selectedIndex == -1)
			return false;
		if(valid)
			return valid(element.options[element.selectedIndex].value, param);
		return true;
	}

	//validates that a strings length is greator than param
	function isRequired(value, param) {
		if(!param)
			param = 0;

		if(trim(value).length > param)
			return true;
		return false;
	}
	
	// Regular expression code to validate email address
	function isValidEmail(email) {
		var emailexp = /^[a-z0-9][a-z_0-9\.]+@[a-z_0-9\.-]+\.[a-z]{2,3}$/i;
		return emailexp.test(email);
	}

	// Regular expression code to validate email address
	// if one was required
	function isValidEmailOptional(email) {
		if(trim(email).length > 0) {
			return isValidEmail(email);
		}
		else return true;		
	}
	
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	function isValidTime(timeStr) {
		var timePat = /(^\s*(((0?[1-9])|(1[0-2]))(\:[0-5]\d){1,2}\s*(am|pm))\s*$)|(^\s*(((0?\d)|(1\d)|(2[0-3]))(\:[0-5]\d){1,2})\s*$)/i;
		if(!timePat.test(timeStr))
			return false;

		var matchArray = timeStr.match(timePat);
		if (matchArray == null) {
			return false;
		}
		hour = matchArray[1];
		minute = matchArray[2];
		second = matchArray[4];
		ampm = matchArray[6];

		if (second=="") { second = null; }
		if (ampm=="") { ampm = null }

		if (hour < 0  || hour > 23) {
			return false;
		}
		if  (hour > 12 && ampm != null) {
			return false;
		}
		if (minute < 0 || minute > 59) {
			return false;
		}
		if (second != null && (second < 0 || second > 59)) {
			return false;
		}

	return true;
	}

	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	// Is valid if blank
	function isValidTimeOptional(timeStr) {
		if(trim(timeStr).length > 0) {
			return isValidTime(timeStr);
		}
		else return true;		
	}

	function isValidDate(dateStr) {
		var dt = new Date(dateStr);
		
		if(isNaN(dt))
			return false;
			
		return true;
	}
	//-->
