var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var iEmail = "This field must be a valid email address (like foo@bar.com). Please reenter it now."
var defaultEmptyOK = false
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
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;
}
function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
function isInteger (s)
{   var i;
if (isEmpty(s)) 
if (isInteger.arguments.length == 1) return defaultEmptyOK;
else return (isInteger.arguments[1] == true);
for (i = 0; i < s.length; i++)
{   
var c = s.charAt(i);
if (!isDigit(c)) return false;
}
return true;
}
function isFloat (s)
{   var i;
var seenDecimalPoint = false;
if (isEmpty(s)) 
if (isFloat.arguments.length == 1) return defaultEmptyOK;
else return (isFloat.arguments[1] == true);
if (s == decimalPointDelimiter) return false;
for (i = 0; i < s.length; i++)
{   
var c = s.charAt(i);
if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
else if (!isDigit(c)) return false;
}
return true;
}
function isAlphabetic (s)
{   var i;
if (isEmpty(s)) 
if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
else return (isAlphabetic.arguments[1] == true);
for (i = 0; i < s.length; i++)
{   
var c = s.charAt(i);
if (!isLetter(c))
return false;
}
return true;
}
function isAlphanumeric (s)
{   var i;
if (isEmpty(s)) 
if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
else return (isAlphanumeric.arguments[1] == true);
for (i = 0; i < s.length; i++)
{   
var c = s.charAt(i);
if (! (isLetter(c) || isDigit(c) || isWhitespace(c) ) )
return false;
}
return true;
}
function isEmail (s)
{   if (isEmpty(s)) 
if (isEmail.arguments.length == 1) return defaultEmptyOK;
else return (isEmail.arguments[1] == true);
if (isWhitespace(s)) return false;
var i = 1;
var sLength = s.length;
while ((i < sLength) && (s.charAt(i) != "@"))
{ i++
}
if ((i >= sLength) || (s.charAt(i) != "@")) return false;
else i += 2;
while ((i < sLength) && (s.charAt(i) != "."))
{ i++
}
if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
else return true;
}
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;
}
function countInteger (s)
{   var i;
var count = 0;
if (isEmpty(s)) 
return 0;
for (i = 0; i < s.length; i++)
{   
var c = s.charAt(i);
if (isDigit(c)) 
count++;
}
return count;
}
function warnEmpty (theField, s)
{   theField.focus()
alert(mPrefix + s + mSuffix)
return false
}
function warnInvalid (theField, s)
{   theField.focus()
theField.select()
alert(s)
return false
}
function checkString (theField, s, emptyOK)
{   // Next line is needed on NN3 to avoid "undefined is not a number" error
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;
}