
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var SSNDelimiters = "-";
var ZIPCodeDelimiters = "-";
var phoneNumberDelimiters = "()- ";
var decimalPointDelimiter = "."
var whitespace = " \t\n\r";
var defaultRequired = false;
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 stripCharsInBag (s, bag){
    var i;
    var returnString = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
function isDigit (c){
    return ((c >= "0") && (c <= "9"))
}
function isInteger (s){
    var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultRequired;
    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 isEmpty(s){
    return ((s == null) || (s.length == 0))
}
function isSSN (s){
  if (isEmpty(s)) 
	if (isSSN.arguments.length == 1) return defaultRequired;
  else return (isSSN.arguments[1] == true);
  return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}
function checkSSN (theField, isRequired){
   if (checkSSN.arguments.length == 1) isRequired = defaultRequired;
    if ((isRequired == false) && (isEmpty(theField.value))) return true;
    else{
      if (isEmpty(theField.value)){
      	theField.focus();
      	alert("Social Security # is required.");
      	return false;
      }
      else{
    	var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
    	if (!isSSN(normalizedSSN, false))        	  
          return warnInvalidSSN (theField)
        else {
          theField.value = reformatSSN(normalizedSSN)
          return true;
        }
      }
    }
}
function warnInvalidSSN (theField)
{   
     alert("The Social Security # [" + theField.value + "] is invalid.");
     theField.value = "";
     theField.focus()
     return false;
}
function warnInvalidMoney(theField){
	alert("The dollar amount [" + theField.value + "] is invalid.");
	theField.value = "";
	theField.focus();
	return false;
}
function reformatSSN (SSN){
    return (reformat (SSN, "", 3, "-", 2, "-", 4))
}
function reformat (s){
    var arg;
    var sPos = 0;
    var resultString = "";
    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) resultString += arg;
       else {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}
function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}
function isUSPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isUSPhoneNumber.arguments.length == 1) return defaultRequired;
       else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}
function checkUSPhone (theField, theName, isRequired){
  if (checkUSPhone.arguments.length == 2) isRequired = defaultRequired;
    if ((isRequired == false) && (isEmpty(theField.value))) return true;
    else{
       var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false)) 
          return warnInvalidPhone (theField, theName);
       else {
          theField.value = reformatUSPhone(normalizedPhone)
          return true;
       }
    }
}
function warnInvalidPhone (theField, theName){   
     alert(theName + " [" + theField.value + "] is invalid.");
     theField.value = "";
     theField.focus();
     return false;
}
function warnInvalidZipCode (theField, theName){    
    alert(theName + " [" + theField.value + "] is invalid.");
    theField.value = "";
    theField.focus();
    return false;
}
function reformatTaxID(TAXID)
{   return (reformat (TAXID, "", 2, "-", 7))
}
function checkTaxID (theField, isRequired)
{   if (checkTaxID.arguments.length == 1) isRequired = defaultRequired;
    if ((isRequired == false) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedTaxID = stripCharsInBag(theField.value, SSNDelimiters)
       if (!isSSN(normalizedTaxID, false)){
       	  theField.focus();
       	  alert("The Federal Tax ID must be a 9 digit number (such as 99-1234567).");
          return false;
       }
       else {
          theField.value = reformatTaxID(normalizedTaxID)
          return true;
       }
    }
}
function isEmail (s){
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultRequired;
       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, theName, isRequired)
{   if (checkEmail.arguments.length == 2) isRequired = defaultRequired;
    if ((isRequired == false) && (isEmpty(theField.value))) return true;
    else if (!isEmail(theField.value, false)) 
       return warnInvalid (theField, theName);
    else return true;
}
function isZIPCode (s)
{  if (isEmpty(s)) 
       if (isZIPCode.arguments.length == 1) return defaultRequired;
       else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}
function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}
function checkZIPCode (theField, theName, isRequired)
{   if (checkZIPCode.arguments.length == 2) isRequired = defaultRequired;
    if ((isRequired == false) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalidZipCode (theField, theName);
      else{
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}
function checkMoney(theField, theName, isRequired)
{  if (checkMoney.arguments.length == 2) isRequired = defaultRequired;
   if ((isRequired == false) && (isEmpty(theField.value))) return true;
   if (isFloat(theField.value))
   	return true;
   else return warnInvalidMoney(theField);
}
function isFloat (s){
    var i;
    var seenDecimalPoint = false;
    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultRequired;
       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 checkNumeric(theField, s, isRequired)
{  if (checkNumeric.arguments.length == 2) isRequired = defaultRequired;
   if ((isRequired == false) && (isEmpty(theField.value))) return true;
   if (isInteger(theField.value))
        return true;
   else return warnInvalidPhone(theField, s);
}
function checkTaxID (theField, isRequired)
{   if (checkTaxID.arguments.length == 1) isRequired = defaultRequired;
    if ((isRequired == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedTaxID = stripCharsInBag(theField.value, SSNDelimiters)
       if (!isSSN(normalizedTaxID, false)){
       	  theField.focus();
       	  alert("A Federal Tax ID must be a 9 digit number (such as 99-1234567).");
          return false;
       }
       else {
          theField.value = reformatTaxID(normalizedTaxID)
          return true;
       }
    }
}