var reWhitespace = /^\s+$/
var reLetter = /^[a-zA-Z]$/
var reAlphabetic = /^[a-zA-Z]+$/
var reName = /^[a-zA-Z]+\s+[a-zA-Z]+$/
var reCity = /^[a-zA-Z\s.]+$/
var reDateField = /^\d\d\/\d\d\/\d\d\d\d$/
var reAlphanumeric = /^[a-zA-Z0-9]+$/
var reUserID = /^[a-zA-Z]{1}[a-zA-Z0-9]{5,9}$/
var rePassword = /^[a-zA-Z0-9$#%-]{6,20}$/
var reDigit = /^\d/
var reLetterOrDigit = /^([a-zA-Z]|\d)$/
var reInteger = /^\d+$/
var DateDelimiters = "/. ";
var reSignedInteger = /^(\+|\-)?\d+$/
var reFloat = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/
var reCurrency = /^((\d+(\.\d{0,2})?)|((\d*\.)?\d{1,2}))$/
var reCurrency9 = /^((\d{1,9}(\.\d{0,2})?)|((\d{0,9}\.)?\d{1,2}))$/
var reEmail = /^.+\@.+\..+$/
var reInvalidVINChars = /^[IOQ]+$/
var reInvalid10thVINDigit = /[0IOQUZ]/
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var phoneNumberDelimiters = "()- ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var SSNDelimiters = "- ";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var creditCardDelimiters = " "
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var sUSLastName = "Last Name"
var sUSFirstName = "First Name"
var sWorldLastName = "Family Name"
var sWorldFirstName = "Given Name"
var sTitle = "Title"
var sCompanyName = "Company Name"
var sUSAddress = "Street Address"
var sWorldAddress = "Address"
var sCity = "City"
var sStateCode = "State Code"
var sWorldState = "State, Province, or Prefecture"
var sCountry = "Country"
var sZIPCode = "ZIP Code"
var sWorldPostalCode = "Postal Code"
var sPhone = "Phone Number"
var sFax = "Fax Number"
var sDateOfBirth = "Date of Birth"
var sExpirationDate = "Expiration Date"
var sEmail = "Email"
var sSSN = "Social Security Number"
var sCreditCardNumber = "Credit Card Number"
var sOtherInfo = "Other Information"
var iStateCode = "This field must be a valid two character U.S. state abbreviation (like CA for California). Please reenter it now."
var iZIPCode = "This field must be a 5 or 9 digit U.S. ZIP Code (like 94043). Please reenter it now."
var iUSPhone = "This field must be a 10 digit U.S. phone number (like 415 555 1212). Please reenter it now."
var iWorldPhone = "This field must be a valid international phone number. Please reenter it now."
var iSSN = "This field must be a 9 digit U.S. social security number (like 123 45 6789). Please reenter it now."
var iEmail = "You must enter a valid email address (i.e. user@email.com).\nPlease reenter it now."
var iCreditCardPrefix = "This is not a valid "
var iCreditCardSuffix = " credit card number. (Click the link on this form to see a list of sample numbers.) Please reenter it now."
var iDay = "This field must be a day number between 1 and 31.  Please reenter it now."
var iMonth = "This field must be a month number between 1 and 12.  Please reenter it now."
var iYear = "This field must be a 2 or 4 digit year number.  Please reenter it now."
var iDatePrefix = "The Day, Month, and Year for "
var iDateSuffix = " do not form a valid date.  Please reenter them now."
var iCity = "This field must be alphabetic. Please reenter now."
var iInteger = "This field must contain an integer. Please reenter now."
var iName = "This Name field must be alphabetic, and in the form of FirstName LastName. Please reenter the name now.";
var iDate = " is not a correct date. \nMake sure the date is formatted as MM/DD/YYYY, e.g. 01/01/1999. Please reenter now.";
var iDateEmpty = "A correct date in the format of MM/DD/YYYY is required here."
var iUserID = "The user id field must be 6-10 alphanumeric characters, and start with an alpha.";
var iPassword = 'The password field must be 6-20 alphanumeric characters.\nIt may also contain the following special characters: "$", "#", "%", and "-".';
var iCurrency = "A Currency entry is required here. It can be formatted either an integer or a Real Number with decimal points. \nFor example \"123\" or \"123.05\" is valid.";
var iCurrency9 = "A Currency entry is required here. It can be formatted either an integer or a Real Number with decimal points. \nThe maximum size for this field is 9 integers + 2 decimal points. \nFor example \"123\" or \"123456789.05\" is valid.";
var iFloat = "A number is required here. It can be formatted either an integer or a Real Number with decimal points. \nFor example \"123\" or \"123.05\" is valid.";
var iAlphanumeric = "This field must be Alphanumeric only. \nFor example \"abc\" or \"123\" or \"abc123\".";
var pEntryPrompt = "Please enter a "
var pStateCode = "2 character code (like CA)."
var pZIPCode = "5 or 9 digit U.S. ZIP Code (like 94043)."
var pUSPhone = "10 digit U.S. phone number (like 415 555 1212)."
var pWorldPhone = "international phone number."
var pSSN = "9 digit U.S. social security number (like 123 45 6789)."
var pEmail = "valid email address (like foo@bar.com)."
var pCreditCard = "valid credit card number."
var pDay = "day number between 1 and 31."
var pMonth = "month number between 1 and 12."
var pYear = "2 or 4 digit year number."
var defaultEmptyOK = true;
function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}
var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;
var USStateCodeDelimiter = "|";
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"
function isEmpty(s)
{   
  return ((s == null) || (s.length == 0))
 
}
function isWhitespace (s)

{
    return (isEmpty(s) || reWhitespace.test(s));
}
function stripCharsInRE (s, bag)

{       return s.replace(bag, "")
}
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 stripCharsNotInBag (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 stripWhitespace (s)

{   return stripCharsInBag (s, whitespace)
}
function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}
function stripInitialWhitespace (s)

{   var i = 0;

    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    
    return s.substring (i, s.length);
}
function isLetter (c)
{   return reLetter.test(c)
}
function isDigit (c)
{   return reDigit.test(c)
}
function isLetterOrDigit (c)
{   return reLetterOrDigit.test(c)
}
function whichRadio(radioGroup,msg) {

  var flag = "false";
  var checkedButton = "";
  for (var i=0; i < radioGroup.length; i++) {
    if (radioGroup[i].checked) {
      checkedButton=radioGroup[i].value;
      flag = "true";
      return checkedButton;
    }
  }
  if ( flag == "false" ) {
    alert(msg);
	//radioGroup.focus();
	return false;
  }
} 
function isIE5(){

	bName = navigator.appName.toLowerCase();
	bAgent = navigator.userAgent.toLowerCase(); 
	indexMSIE = bAgent.indexOf("msie"); 
	ieVersion = bAgent.charAt(indexMSIE + 5);
	return (bName == "microsoft internet explorer" && ieVersion >= "5");
}
function isIE4(){

	bName = navigator.appName.toLowerCase();
	bAgent = navigator.userAgent.toLowerCase(); 
	indexMSIE = bAgent.indexOf("msie"); 
	ieVersion = bAgent.charAt(indexMSIE + 5);
	return (bName == "microsoft internet explorer" && ieVersion == "4");
}
function isNS4(){

	bName = navigator.appName.toLowerCase();
	bVersion = parseInt(navigator.appVersion);
	return (bName == "netscape" && bVersion >= "4");
}
function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    return reInteger.test(s)
}
function isSignedInteger (s)

{   if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);

    
    else {
       return reSignedInteger.test(s)
    }
}
function isPositiveInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}
function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isNegativeInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}
function isNonpositiveInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}
function isFloat (s)

{   if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);

    else { 
       if (reFloat.test(s.value) == false) return false; //warnInvalid(s, iFloat);
       else return true;
	}
}
function isUserID (s)

{   if (isEmpty(s)) 
       if (isUserID.arguments.length == 1) return defaultEmptyOK;
       else return (isUserID.arguments[1] == true);

    else { 
       if (reUserID.test(s.value) == false) return warnInvalid(s, iUserID);
       else return true;
	}
}

function isPassword (s)

{   if (isEmpty(s)) 
       if (isPassword.arguments.length == 1) return defaultEmptyOK;
       else return (isPassword.arguments[1] == true);

    else { 
       if (rePassword.test(s.value) == false) return warnInvalid(s, iPassword);
       else return true;
	}
}

function isCurrency (s)

{   if (isEmpty(s)) 
       if (isCurrency.arguments.length == 1) return defaultEmptyOK;
       else return (isCurrency.arguments[1] == true);

    else { 
       if (reCurrency.test(s.value) == false) return warnInvalid(s, iCurrency);
       else return true;
	}
}
function isCurrency9 (s)

{   if (isEmpty(s)) 
       if (isCurrency9.arguments.length == 1) return defaultEmptyOK;
       else return (isCurrency9.arguments[1] == true);

    else { 
       if (reCurrency9.test(s.value) == false) return warnInvalid(s, iCurrency9);
       else return true;
	}
}
function isSignedFloat (s)

{   if (isEmpty(s)) 
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);

    else {
       return reSignedFloat.test(s)
    }
}
function isAlphabetic (s)

{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);

    else {
       return reAlphabetic.test(s)
    }
}
function isName (s)

{   var i;

    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isName.arguments[1] == true);
   else { 
       if (reName.test(s.value) == false) return warnInvalid(s, iName);
       else return true;
	}
}
function isCity (s)

{   var i;

    if (isEmpty(s)) 
       if (isCity.arguments.length == 1) return defaultEmptyOK;
       else return (isCity.arguments[1] == true);
    else { 
       if (reCity.test(s.value) == false) return warnInvalid(s, iCity);
       else return true;
	}
}
function isInt (s)

{   var i;

    if (isEmpty(s)) 
       if (isInt.arguments.length == 1) return defaultEmptyOK;
       else return (isInt.arguments[1] == true);
    else { 
       if (reInteger.test(s.value) == false) return warnInvalid(s, iInteger);
       else return true;
	}	   
}

function isValidDate(txtDate) {

    var objDate,  // date object initialized from the txtDate string
        mSeconds, // txtDate in milliseconds
        day,      // day
        month,    // month
        year;     // year
    // date length should be 10 characters (no more no less)
    if ( txtDate.length !== 10)
    {
        return false;
    }
    // third and sixth character should be '/'
    if (txtDate.substring(2, 3) !== '/' || txtDate.substring(5, 6) !== '/')
    {
        return false;
    }
    // extract month, day and year from the txtDate (expected format is mm/dd/yyyy)
    // subtraction will cast variables to integer implicitly (needed
    // for !== comparing)
    month = txtDate.substring(0, 2) - 1; // because months in JS start from 0
    day = txtDate.substring(3, 5) - 0;
    year = txtDate.substring(6, 10) - 0;
    // test year range
    if (year < 1000 || year > 3000)
    {
        return false;
    }
    // convert txtDate to milliseconds
    mSeconds = (new Date(year, month, day)).getTime();
    // initialize Date() object from calculated milliseconds
    objDate = new Date();
    objDate.setTime(mSeconds);
    // compare input date and parts from Date() object
    // if difference exists then date isn't valid
    if (objDate.getFullYear() !== year ||
        objDate.getMonth() !== month ||
        objDate.getDate() !== day)
    {
        return false;
    }

    // otherwise return true
    return true;

}

function points(x) {
	x = Math.floor(x*100)/100;
	return(x);
}
function isAlphanumeric (s)

{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    else { 
       if (reAlphanumeric.test(s.value) == false) return warnInvalid(s, iAlphanumeric);
       else return true;
	}
}
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 reformatDate (Date)
{   
  var normalizedDate = stripCharsInBag(Date.value, DateDelimiters)
  return (reformat (normalizedDate, "", 2, "/", 2, "/", 4))
}

function isSSN (s)
{   if (isEmpty(s)) 
       if (isSSN.arguments.length == 1) return defaultEmptyOK;
       else return (isSSN.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}
function isUSPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}
function isInternationalPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isInternationalPhoneNumber.arguments[1] == true);
    return (isPositiveInteger(s))
}
function isZIPCode (s)
{  if (isEmpty(s)) 
       if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
       else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}
function isStateCode(s)
{   if (isEmpty(s)) 
       if (isStateCode.arguments.length == 1) return defaultEmptyOK;
       else return (isStateCode.arguments[1] == true);
    return ( (USStateCodes.indexOf(s) != -1) &&
             (s.indexOf(USStateCodeDelimiter) == -1) )
}
function isEmail (s)

{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    
    else {
       return reEmail.test(s)
    }
}
function isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}
function isIntegerInRange (s, a, b)
{   s = removePrefixZeros( s );
    if (isEmpty(s))
       if (isIntegerInRange.arguments.length == 3) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[3] == true);
    if (!isInteger(s, false)) return false;
    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}
function removePrefixZeros( s ) {
    for ( var i = 0; i < s.length; ) {
        var c = s.substring( i, i+1 );
        if ( c == "0" && i+1 < s.length ) {
            s = s.substring( i+1, s.length );
        }
        else {
            return s;
        }
    }
    return s;
}
function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}
function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}
function daysInFebruary (year)
{
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function isDate (year, month, day)
{
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}
function prompt (s)
{   window.status = s
}
function promptEntry (s)
{   window.status = pEntryPrompt + s
}
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 warnInvalidWithPrefix (theField, s)
{   theField.focus();
    theField.select();
    alert(theField.value + s);
    return false;
}
function checkString (theField, s, emptyOK)
{
    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;
}
function checkStateCode (theField, emptyOK)
{   if (checkStateCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  theField.value = theField.value.toUpperCase();
       if (!isStateCode(theField.value, false)) 
          return warnInvalid (theField, iStateCode);
       else return true;
    }
}
function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}
function checkZIPCode (theField, emptyOK)
{   if (checkZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true)&& (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalid (theField, iZIPCode);
      else 
      {
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}
function reformatUSPhone (USPhone)
{   
	return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}
function checkUSPhone (theField, emptyOK)
{   if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false)) 
          return warnInvalid (theField, iUSPhone);
       else 
       {
          theField.value = reformatUSPhone(normalizedPhone)
          return true;
       }
    }
}
function checkInternationalPhone (theField, emptyOK)
{   if (checkInternationalPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  if (!isInternationalPhoneNumber(theField.value, false)) 
          return warnInvalid (theField, iWorldPhone);
       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 reformatSSN (SSN)
{   return (reformat (SSN, "", 3, "-", 2, "-", 4))
}
function checkSSN (theField, emptyOK)
{   if (checkSSN.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
       if (!isSSN(normalizedSSN, false)) 
          return warnInvalid (theField, iSSN);
       else 
       {
          theField.value = reformatSSN(normalizedSSN)
          return true;
       }
    }
}
function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false)) 
       return warnInvalid (theField, iYear);
    else return true;
}
function checkMonth (theField, emptyOK)
{   if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isMonth(theField.value, false)) 
       return warnInvalid (theField, iMonth);
    else return true;
}
function checkDay (theField, emptyOK)
{   if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isDay(theField.value, false)) 
       return warnInvalid (theField, iDay);
    else return true;
}
function checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)
{
    if (checkDate.arguments.length == 4) OKtoOmitDay = false;
    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
    if (!isMonth(monthField.value)) return warnInvalid (monthField, iMonth);
    if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
    else if (!isDay(dayField.value)) 
       return warnInvalid (dayField, iDay);
    if (isDate (yearField.value, monthField.value, dayField.value))
       return true;
    alert (iDatePrefix + labelString + iDateSuffix)
    return false
}
function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked) { break; }
    }
    return radio[i].value
}
function checkCreditCard (radio, theField)
{   var cardType = getRadioButtonValue (radio)
    var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
    if (!isCardMatch(cardType, normalizedCCN)) 
       return warnInvalid (theField, iCreditCardPrefix + cardType + iCreditCardSuffix);
    else 
    {  theField.value = normalizedCCN
       return true
    }
}
function isValidVIN (aVINString)
{
	var weights = new Array( 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 );
	var values = new Array();
	var checkSum = 0;
	var theRegExp = new RegExp( aVINString.charAt(0), "g" );
	if( aVINString.length != 17 )
	{
		return false;
	}
	if( reInvalidVINChars.test( aVINString ) )
	{
		return false;
	}
	if( !isAlphanumeric( aVINString ) )
	{
		return false;
	}
	if( aVINString.replace( theRegExp, "" ) == "" )
	{
		return false;
	}
	var endSlice="";
	for( i = 13; i <= 16; i++ )
	{
		endSlice += aVINString.charAt(i);
	}
	if( !isInteger( endSlice ) )
	{
		return false;
	}
	if( reInvalid10thVINDigit.test( aVINString.charAt( 9 ) ) )
	{
		return false;
	}
	for( i=0; i <= 16; i++ )
	{
		tempValue = 0;
		currentChar = aVINString.charAt( i );
		if( isInteger( currentChar ) )
		{
			tempValue = new Number( currentChar );
		}
		else
		{
			switch( currentChar )
			{
				case "A": case "J":
					tempValue = 1;
					break;
				case "B": case "K": case "S":
					tempValue = 2;
					break;
				case "C": case "L":	case "T":
					tempValue = 3;
					break;
				case "D":	case "M":	case "U":
					tempValue = 4;
					break;
				case "E":	case "N":	case "V":
					tempValue = 5;
					break;
				case "F":	case "W":
					tempValue = 6;
					break;
				case "G":	case "P":	case "X":
					tempValue = 7;
					break;
				case "H":	case "Y":
					tempValue = 8;
					break;
				case "R":	case "Z":
					tempValue = 9;
					break;
			}
		}
		checkSum += tempValue * weights[i];
	}
	checkVal = checkSum % 11;
	if( checkVal == 10 )
	{
		return aVINString.charAt(8) == "X";
	}
	
	if( checkVal != new Number( aVINString.charAt(8) ) )
	{
		return false;
	}
	return true;
}


function checkPassword( field1, field2 ) {
  if ( field1.value == field2.value )
    return true;
  else
    alert( "Passwords do not match.\nPlease re-enter your password and confirmation password." );
    field1.value = "";
    field2.value = "";
    return false;
}

var ERR_ENTER_USER_NAME             = "You must enter your name to continue.";
var ERR_ENTER_COMPANY               = "You must enter your company name to continue.";
var ERR_ENTER_ATTN                  = "You must fill in the ATTN line to continue.";
var ERR_ENTER_SUBJECT               = "You must enter a subject to continue.";
var ERR_ENTER_COMMENTS              = "You must enter some comments to continue.";
var ERR_SELECT_CONTACT              = "You must select a person to contact.";

var ERR_ENTER_SHIPTO                = "You must enter a valid account number to continue.";
var ERR_ENTER_DEF_PASSWORD          = "You must enter a valid Default Password to continue.";
var ERR_ENTER_USERID                = "You must enter your Desired User ID to continue.";
var ERR_ENTER_PASSWORD              = "You must enter your Desired password to continue.";
var ERR_ENTER_REENTER_PASSWORD      = "You must re-enter your Desired Password to continue.";
var ERR_ENTER_PASSWORD_REMINDER     = "You must enter a Password Reminder to continue.";

var ERR_ENTER_FNAME                = "You must enter your first name.";
var ERR_ENTER_LNAME                = "You must enter your last name.";
var ERR_ENTER_POSITION             = "You must enter your position.";
var ERR_ENTER_EMAIL                = "You must enter your email address.";
var ERR_ENTER_PHONE                = "Please enter a valid phone number with area code.";
var ERR_ENTER_FAX                  = "Please enter a valid fax number with area code.";
var ERR_EMPTY_FIELD                = "You have left one or more required fields empty.";



function checkField( fieldName, errorMsg ) {
  if ( fieldName.value ) {
    return true;
  }
  else {
    alert( errorMsg );
    fieldName.focus();
    return false;
  }
}

function checkPhone( fieldName, errorMsg ) {
  if ( fieldName.value.length == 10 ) {
    return true;
  }
  else {
    alert( errorMsg );
    return false;
  }
}


function isCheckboxSelected( fieldName, msg ) {
  chkSelected = 0;
  for ( i=0; i<fieldName.length; i++ ) {
    if ( fieldName[i].checked )
      chkSelected = true;
  }
  if ( !chkSelected ) {
    alert( msg );
    fieldName[0].focus();
    return false;
  }
  else
    return true;
}

