
		function fieldsAreEqual (element1, element2, errorMessage) {
			var valid = true;
			if (element1.value != element2.value) {
				element2.select();
			    element1.select();
			    element1.focus();
				alert ("Error! " + errorMessage);
				valid = false; 
			} 
//alert ("fieldsAreEqual(" + errorMessage + ") = " + valid);
	  		return valid;				
		}
		
		function fieldsAreNotEqual (element1, element2, errorMessage) {
			var valid = true;
			if (element1.value == element2.value) {
				element2.select();
			    element1.select();
			    element1.focus();
				alert ("Error! " + errorMessage);
				valid = false; 
			} 
//alert ("fieldsAreEqual(" + errorMessage + ") = " + valid);
	  		return valid;				
		}

		function requiredFieldSet (element, fieldName) {
			try {
				var valid = true;
				// Check to see if element is a select object
				if (element.options  && element.options[element.selectedIndex].value == "none") {
    			    element.focus();
    				alert ("Error! " + fieldName + " is required");
					valid = false;
				} else if (element.value == null || element.value == "") {
				    element.select();
    			    element.focus();
    			    alert("Error! " + fieldName + " is required");
    				valid = false; 
    			}
//alert ("requiredFieldSet(" + fieldName + ") = " + valid);				
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		function listBoxSet (listBox, inputElement, fieldName) {
			try {
				var valid = true;
//				alert ("list box length = " + listBox.length);
				if (listBox.length == 0) {  // At least one option must have been added.
				    inputElement.focus();
					alert("Error! " + fieldName + " is required.  Please add an entry to the list box."); 
					valid = false;
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		// Checks if dateElement1 is before date2
		function dateBefore(dateElement1, date2, fieldName, dateFormat, required) {
//alert ("compare if " + dateElement1.value + " is less than " + formatDate(date2,dateFormat));		
			try {
				var valid = true;
				if (dateElement1.value == null || dateElement1.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    dateElement1.select();
        			    dateElement1.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so compare dates
//alert("compareDates=" + compareDates(dateElement1.value, dateFormat, formatDate(date2, dateFormat), dateFormat));				
				    if (compareDates(dateElement1.value, dateFormat, formatDate(date2, dateFormat), dateFormat) != 0) {
					    dateElement1.select();
						dateElement1.focus();
						alert("Error! " + fieldName + " should not be after " + formatDate(date2, dateFormat))
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}
		
		// Checks if dateElement1 is after date2
		function dateAfter(dateElement1, date2, fieldName, dateFormat, required) {
//alert ("compare if " + dateElement1.value + " is after " + formatDate(date2,dateFormat));		
			try {
				var valid = true;
				if (dateElement1.value == null || dateElement1.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    dateElement1.select();
        			    dateElement1.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so compare dates
//alert("compareDates=" + compareDates(dateElement1.value, dateFormat, formatDate(date2, dateFormat), dateFormat));				
				    if (compareDates(dateElement1.value, dateFormat, formatDate(date2, dateFormat), dateFormat) != 1) {
					    dateElement1.select();
						dateElement1.focus();
						alert("Error! " + fieldName + " should not be before " + formatDate(date2, dateFormat))
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		function validDate (element, fieldName, dateFormat, required) {
			try {
				var valid = true;
				if (element.value == null || element.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    element.select();
        			    element.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so make sure date is valid
				    if (!isDate(element.value, dateFormat)) {
					    element.select();
						element.focus();
						alert("Error! " + fieldName + " must be a valid date in the format: " + dateFormat)
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		function validLength (element, fieldName, min, max, formatType, required) {
			try {
				var valid = true;
				if (element.value == null || element.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    element.select();
        			    element.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so make sure it is a valid length

				    if (element.value.length < min || element.value.length > max) {
					    element.select();
						element.focus();
						if (min == max) {
						    alert("Error! " + fieldName + " must have " + max + " " + formatType);
						} else {
						  	alert("Error! " + fieldName + " must have between " + min + " and " + max + " " + formatType);
						}
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		function lessThan (element, value, fieldName, required) {
			try {
				var valid = true;
				if (element.value == null || element.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    element.select();
        			    element.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so make sure date is valid
				    if (Number(element.value) >= Number(value)) {
					    element.select();
						element.focus();
						alert("Error! " + fieldName + " must be less than " + value)
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}

		function greaterThan (element, value, fieldName, required) {
			try {
				var valid = true;
				if (element.value == null || element.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    element.select();
        			    element.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so make sure date is valid
				    if (Number(element.value) < Number(value)) {
					    element.select();
						element.focus();
						alert("Error! " + fieldName + " must be greater than or equal to " + value)
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}
		
// _____________________________________________________________________
// REAL-TIME VALIDATION AS KEYS ARE ENTERED

		// copyright 1999 Idocs, Inc. http://www.idocs.com
		// Distribute this script freely but keep this notice in place
		function numericOnly(myfield, e, dec) {
			var key;
			var keychar;

			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if ((("0123456789").indexOf(keychar) > -1)) { // numbers
			  	return true;
			} else if (dec && (keychar == ".")) { // decimal point jump
			  	myfield.form.elements[dec].focus();
				return false;
			} else {
   			  	return false;
			}
		}
		
		function dateOnly(myfield, e, dec) {
			var key;
			var keychar;

			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if ((("/0123456789").indexOf(keychar) > -1)) { // numbers
			  	return true;
			} else {
   			  	return false;
			}
		}

		function yearRangeOnly(myfield, e, dec) {
			var key;
			var keychar;

			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if ((("-,0123456789").indexOf(keychar) > -1)) { // numbers
			  	return true;
			} else {
   			  	return false;
			}
		}

		function alphanumericOnly (myfield, e, dec) {
			var key;
			var keychar;
			var alphanumericSet = new RegExp(/\w/);

			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if (alphanumericSet.test(keychar)) { // numbers & letters
			  	return true;
			} else {
   			  	return false;
			}
		}
		
		function nameOnly (myfield, e, dec) {
			var key;
			var keychar;
			var alphanumericSet = new RegExp("[a-zA-Z0-9 '-].","g");

			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if (alphanumericSet.test(keychar)) { // numbers & letters
			  	return true;
			} else {
   			  	return false;
			}
		}

		var REQUIRED = true;
		var OPTIONAL = false;
		
		// Regular expressions for full field validation
		var REGEX_NAME = "^[\x2E a-zA-Z0-9'-]+$";
		var REGEX_BUSINESS_NAME = "^[\x2E\046\053 a-zA-Z0-9'-]+$";
		var REGEX_USERNAME = "^[a-zA-Z0-9_]+$";
		var REGEX_PASSWORD = "^[a-zA-Z0-9_]+$";
		var REGEX_DATE = "^([0]?[1-9]|[1][0-2])[/]([0]?[1-9]|[1|2][0-9]|[3][0|1])[/]([0-9]{4}|[0-9]{2})$";
		var REGEX_YEAR = "[0-9]{2,4}";
		var REGEX_YEAR_RANGE = "[0-9]{2,4}-[0-9]{2,4}";
		var REGEX_FLOAT = "^[0-9]+[\056][0-9]+$";   // \056=.
		var REGEX_CURRENCY = "^[0-9]+[\056][0-9]+{2}$";
		var REGEX_EMAIL = "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$";
		var REGEX_URL = "^((http://|https://|ftp://)|(www.))+(([a-zA-Z0-9.-]+.[a-zA-Z]{2,4})|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(/[-a-zA-Z0-9%:/_?.'~]*)?$";
		var REGEX_PHONE = "^(([\050][0-9]{3}[\051])|([0-9]{3}[-.]))[ ]?[0-9]{3}[-.][0-9]{4}([ ][x][0-9]{5})?$";
		var REGEX_FACEBOOKID = "^[\x2E a-zA-Z0-9-_]+$";
		var REGEX_LIST = "^[\056\050\051a-zA-Z0-9 -]+([\054\134\046\073]?[ ][\056\050\051a-zA-Z0-9 -]+)*$";  // \054=,
		var REGEX_NAME_LIST = "^[\x2E a-zA-Z0-9':-]+([;][\x2E a-zA-Z0-9':-]+)*$";
		
		function validField (element, fieldName, regEx, required) {
			try {
				var valid = true;
				if (element.value == null || element.value == "") {
				    // Field is empty.  Check if required, otherwise nothing to do.
				    if (required) { 
    				    element.select();
        			    element.focus();
        			    alert("Error! " + fieldName + " is required");
        				valid = false;
					}
    			} else {  // Field is not empty, so make sure content is valid
				    var regExObj = new RegExp(regEx);
//alert ("regEx='" + regEx + "', string='" + element.value + "',  Match: " + regExObj.exec(element.value));					
				    if (regExObj.test(element.value) == false) {
					    element.select();
						element.focus();
						alert("Error! " + fieldName + " is in an invalid format or contains one or more invalid characters.")
        				valid = false;
					}
				}
				return valid;
			} catch (e) {
			    alert ("Error: " + e);
				return false;
			}
		}
		
		// Regular expressions for real-time data entry single character input validation
		var REGEX_INPUT_NAME = "[\x2E a-zA-Z0-9'-]";
		var REGEX_INPUT_BUSINESS_NAME = "[\x2E\046\053 a-zA-Z0-9'-]";
		var REGEX_INPUT_USERNAME = "\\w";
		var REGEX_INPUT_PASSWORD = "\\w";
		var REGEX_INPUT_DATE = "[0-9/]";
		var REGEX_INPUT_YEAR = "[0-9]";
		var REGEX_INPUT_NUMERIC_RANGE = "[0-9-]";
		var REGEX_INPUT_URL   = "[\x2E0-9a-zA-Z-_/:&\\?#\\[\\];=\\+,\\$@]";
		var REGEX_INPUT_EMAIL = "[\x2E0-9a-zA-Z-_/:&\\?#\\[\\];=\\+,\\$@]";
		var REGEX_INPUT_PHONE = "[\050\051\056\055x 0-9]"; // \050=(, \051=), \056=., \055=- 
		var REGEX_INPUT_FACEBOOKID = "[\x2E0-9a-zA-Z-_]"; 
		var REGEX_INPUT_LIST = "[\056\050\051\054\134\046\0730-9a-zA-Z, -]";
		var REGEX_INPUT_INTEGER = "[0-9]";

		// Validate a field as the user types in it by preventing invalid
		// characters from displaying.
		// Example: within an <input> tag - 
		// 			onkeypress="return validInput(this, event, REGEX_INPUT_NAME);"
		function validInput (myfield, e, regEx) {
			var key;
			var keychar;
			regExObj = new RegExp(regEx, "g");
//alert("regex='" + regEx + "'");
			if (window.event) {
			   	key = window.event.keyCode;
			} else if (e) { 
				 key = e.which;
			} else { 
				 return true;
			}
			keychar = String.fromCharCode(key);

			// control keys
			if ((key==null) || (key==0) || (key==8) || 
			    (key==9) || (key==13) || (key==27) ) {
				return true;
			} else if (regExObj.test(keychar)) { // numbers & letters
			  	return true;
			} else {
   			  	return false;
			}
		}
		
