// VARIABLE DECLARATIONS
	var whitespace = " \t\n\r";
	var defaultEmptyOK = false;


	// CONSTANT STRING DECLARATIONS
	// m is an abbreviation for "missing"
	var mPrefix = "You did not enter a value into the "
	var mSuffix = " field. This is a required field. Please enter it now."
	var lPrefix = "The value enter into the "
	var lSuffix = " field is not long enough. Please enter it now."
	var iEmail = "This field must be a valid email address (like info@net.com). Please reenter it now."


	// Check whether string s is long enough.
	function isNotLongEnough(s, minchar)
	{   
		if (s.length < minchar) return true;
		return false;
	}


	// Check whether string s is empty.
	function isEmpty(s)
	{   return ((s == null) || (s.length == 0))
	}


	// Returns true if string s is empty or 
	// whitespace characters only.
	function isWhitespace (s)
	{  
		var i;
		// Is s empty?
		if (isEmpty(s)) return true;

		// Search through string is characters one by one
		// until we find a non-whitespace character.
		// When we do, return false; if we do not, return true.

		for (i = 0; i < s.length; i++)
		{   
			// Check that current character isn not whitespace.
			var c = s.charAt(i);

			if (whitespace.indexOf(c) == -1) return false;
		}

		// All characters are whitespace.
		return true;
	}

	// isEmail (STRING s [, BOOLEAN emptyOK])
	// 
	// Email address must be of form a@b.c -- in other words:
	// * there must be at least one character before the @
	// * there must be at least one character before and after the .
	// * the characters @ and . are both required
	//
	// For explanation of optional argument emptyOK,
	// see comments of function isInteger.
	function isEmail (s)
	{   if (isEmpty(s)) 
		   if (isEmail.arguments.length == 1) return defaultEmptyOK;
		   else return (isEmail.arguments[1] == true);
	   
		// is s whitespace?
		if (isWhitespace(s)) return false;
		
		// there must be >= 1 character before @, so we
		// start looking at character position 1 
		// (i.e. second character)
		var i = 1;
		var sLength = s.length;

		// look for @
		while ((i < sLength) && (s.charAt(i) != "@"))
		{ i++
		}

		if ((i >= sLength) || (s.charAt(i) != "@")) return false;
		else i += 2;

		// look for .
		while ((i < sLength) && (s.charAt(i) != "."))
		{ i++
		}

		// there must be at least one character after the .
		if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
		else return true;
	}

	// Get checked value from radio button.
	function getSelectButtonValue (theField )
	{   for (var i = 0; i < theField.length; i++)
		{   if (theField.options[i].selected) 
			{ return theField.options[i].value }
		}
		return 0;
	}

	// check to see if a select has been selected (usually from a listbox).
	function isSelectButtonValue (theField )
	{   for (var i = 0; i < theField.length; i++)
		{   
			if (theField.options[i].selected) 
			{ return 1 }
		}
		return 0;
	}

	// check to see if a checkbox with the value of theValue has been checked.  If theValue is
	// empty or whitepsace, then it looks for any value.
	function isChecked (theField, theValue)
	{   
		var found = 0;
		for (var i = 0; i < theField.length; i++)
		{   
			if (theField[i].checked) 
			{ 
				if (isWhitespace(theValue))
				{
					return 1;
				} else if ( theField[i].value == theValue)
				{
					return 1;
				}
			}
		}
		return 0;
	}


	// Notify user that required field theField is empty.
	// String s describes expected contents of theField.value.
	// Put focus in theField and return false.
	function warnEmpty (theField, s)
	{   theField.focus()
		alert(mPrefix + s + mSuffix)
		return false
	}


	// Notify user that required field theField is not long enough.
	// String s describes expected contents of theField.value.
	// Put focus in theField and return false.
	function warnLong (theField, s)
	{   theField.focus()
		alert(lPrefix + s + lSuffix)
		return false
	}


	// Notify user that contents of field theField are invalid.
	// String s describes expected contents of theField.value.
	// Put select theField, pu focus in it, and return false.
	function warnInvalid (theField, s)
	{   theField.focus()
		theField.select()
		alert(s)
		return false
	}



	// checkString (TEXTFIELD theField, STRING s, [, BOOLEAN emptyOK==false])
	//
	// Check that string theField.value is not all whitespace.
	//
	// For explanation of optional argument emptyOK,
	// see comments of function isInteger.
	function checkString (theField, s, emptyOK)
	{   // Next line is needed on NN3 to avoid "undefined is not a number" error
		// in equality comparison below.
		if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
		if ((emptyOK == true) && (isEmpty(theField.value))) return true;
		if (isWhitespace(theField.value)) 
		   return warnEmpty (theField, s);
		else return true;
	}

	// checkStringLong (TEXTFIELD theField, STRING s, [, BOOLEAN emptyOK==false])
	//
	// Check that string theField.value is not all whitespace.
	//
	// For explanation of optional argument emptyOK,
	// see comments of function isInteger.
	function checkStringLong (theField, s, emptyOK)
	{   // Next line is needed on NN3 to avoid "undefined is not a number" error
		// in equality comparison below.
		if (checkStringLong.arguments.length == 2) emptyOK = defaultEmptyOK;
		if ((emptyOK == true) && (isEmpty(theField.value))) return true;
		if (isWhitespace(theField.value)) 
		   return warnEmpty (theField, s);
		else if (isNotLongEnough (theField.value, 4))
			return warnLong (theField, s);
		else return true;
	}



	// checkEmail (TEXTFIELD theField [, BOOLEAN emptyOK==false])
	//
	// Check that string theField.value is a valid Email.
	//
	// For explanation of optional argument emptyOK,
	// see comments of function isInteger.
	function checkEmail (theField, emptyOK)
	{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
		if ((emptyOK == true) && (isEmpty(theField.value))) return true;
		else if (!isEmail(theField.value, false)) 
		   return warnInvalid (theField, iEmail);
		else return true;
	}

	// checkChecked (CHECKBOXFIELD theField, STRING s [, STRING theValue==""])
	//
	// Check that the checkbox is checked.
	//
	function checkChecked (theField, s, theValue)
	{
		if (theField.checked)
			return true;

		else {
		   alert(s);
		   return false;
		}
	}
