var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var phoneNumberDelimiters = "()- ";
var dateDelimiters = "/- ";
var validUSDateChars = digits + dateDelimiters;
var validUSPhoneChars = 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 minLoginLength = 6
var minPasswordLength = 6
var creditCardDelimiters = " "
var minAge = 13;
var maxAge = 100;
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var iPrefix = "The "
var iReEnter = " Please re-enter it now."
var iDate = " field must contain a valid date using the MM/DD/YYYY format." + iReEnter
var iAlphanumeric = " field must contain only letters and numbers." + iReEnter
var iLoginMinLength = " field must be " + minLoginLength + " or more characters long." + iReEnter
var iLoginFirstChar = " field must begin with a letter." + iReEnter
var iPasswordMinLength = " field must be " + minPasswordLength + " or more characters long." + iReEnter
var iComparePrefix = "The "
var iCompareMiddle = " field must match the "
var iCompareSuffix = " field." + iReEnter
var iSelectPrefix = "The first "
var iSelectSuffix = " option is not a valid selection.  Please choose one of the other options."
var iZIPCode = " field must be a 5 or 9 digit U.S. ZIP Code (like 94043)." + iReEnter
var iUSPhone = " field must be a 10 digit U.S. phone number (like 415 555 1212)." + iReEnter
var iSSN = " field must be a 9 digit U.S. social security number (like 123 45 6789)." + iReEnter
var iEmail = " field must be a valid email address (like name@domain.com)." + iReEnter
var iCreditCardPrefix = "This is not a valid "
var iCreditCardSuffix = " credit card number." + iReEnter
var iDay = "This field must be a day number between 1 and 31." + iReEnter
var iMonth = "This field must be a month number between 1 and 12." + iReEnter
var iYear = "This field must be a 2 or 4 digit year number." + iReEnter
var iDatePrefix = "The Day, Month, and Year for "
var iDateSuffix = " do not form a valid date." + iReEnter
var defaultEmptyOK = false

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;

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 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 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 ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

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 isSignedInteger (s)
{   if (isEmpty(s))
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}

function isPositiveInteger (s)
{   var secondArg = defaultEmptyOK;
    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s,10) > 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,10) >= 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,10) < 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,10) <= 0) ) );
}

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 isSignedFloat (s)
{   if (isEmpty(s))
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedFloat.arguments.length > 1)
            secondArg = isSignedFloat.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (isFloat(s.substring(startPos, s.length), secondArg))
    }
}

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) ) )
        return false;
    }
    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 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 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 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 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 == 4));
}

function isIntegerInRange (s, a, b)
{   if (isEmpty(s))
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;
    var num = parseInt (s,10);
    return ((num >= a) && (num <= b));
}

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,10);
    var intMonth = parseInt(month,10);
    var intDay = parseInt(day,10);
    if (intDay > daysInMonth[intMonth]) return false;
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}

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)
{
    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 checkSelect (theField, s)
{   if (theField.selectedIndex == 0)
    {
       theField.focus();
       alert(iSelectPrefix + s + iSelectSuffix);
       return false;
    } else return true;
}

function checkFile (theField, s, emptyOK)
{
    if (checkFile.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if ((emptyOK == false) && (isEmpty(theField.value)))
       return warnEmpty (theField, s);
    else return true;
}


function checkTextarea (theField, intLength, s, emptyOK)
{
	if (checkTextarea.arguments.length == 3) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
	if (theField.value.length > intLength)
		return warnInvalid (theField, "The " + s + " field's value must not exceed " + intLength + " characters.\nPlease reduce its value by " + (theField.value.length - intLength) + " characters.");
	return true;
}

function checkPayPeriods (theField, s, emptyOK)
{   if (checkPayPeriods.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    if (!isPositiveInteger(theField.value)) return warnInvalid (theField, "The " + s + " field must contain a positive number");
    return true;
}

function checkLogin (theField, s, emptyOK)
{   if (checkLogin.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    if (theField.value.length < minLoginLength) return warnInvalid (theField, iPrefix + s + iLoginMinLength);
    if (!isAlphabetic(theField.value.charAt(0))) return warnInvalid (theField, iPrefix + s + iLoginFirstChar);
    if (!isAlphanumeric(theField.value)) return warnInvalid (theField, iPrefix + s + iAlphanumeric);
    return true;
}

function checkPassword (theField, s, emptyOK)
{   if (checkPassword.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    if (theField.value.length < minPasswordLength) return warnInvalid (theField, iPrefix + s + iPasswordMinLength);
    if (!isAlphanumeric(theField.value)) return warnInvalid (theField, iPrefix + s + iAlphanumeric);
    return true;
}

function checkAmount(theField, s, minValue, maxValue, emptyOK)
{   if (checkAmount.arguments.length == 4) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    if (!isNonnegativeInteger(theField.value)) return warnInvalid (theField, iPrefix + s + " field must contain a valid number." + iReEnter);
    if (theField.value < minValue || theField.value > maxValue) return warnInvalid (theField, iPrefix + s + " field must be between " + minValue + " and " + maxValue + "." + iReEnter);
    return true;
}

function checkCompare (theField1, s1, theField2, s2)
{   if (theField1.value != theField2.value)
    {
       theField2.focus();
       alert(iComparePrefix + s1 + iCompareMiddle + s2 + iCompareSuffix);
       return false;
    } else return true;
}

function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}

function checkZIPCode (theField, s, emptyOK)
{   if (checkZIPCode.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false))
         return warnInvalid (theField, iPrefix + s + iZIPCode);
      else
      {
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}

function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

function reformatUSDate (USDate)
{   return (reformat (USDate, 2, "/", 2, "/", 4))
}

function checkUSPhone (theField, s, emptyOK)
{   if (checkUSPhone.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false))
          return warnInvalid (theField, iPrefix + s + iUSPhone);
       else
       {
          theField.value = reformatUSPhone(normalizedPhone)
          return true;
       }
    }
}

function checkEmail (theField, s, emptyOK)
{   if (checkEmail.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else if (!isEmail(theField.value, false))
       return warnInvalid (theField, iPrefix + s + iEmail);
    else return true;
}

function reformatSSN (SSN)
{   return (reformat (SSN, "", 3, "-", 2, "-", 4))
}

function checkSSN (theField, s, emptyOK)
{   if (checkSSN.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    {  var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters)
       if (!isSSN(normalizedSSN, false))
          return warnInvalid (theField, iPrefix + s + iSSN);
       else
       {
          theField.value = reformatSSN(normalizedSSN)
          return true;
       }
    }
}

function checkRadio (theField, s)
{
  var radioSelected = false;
  for (i = 0;  i < theField.length;  i++)
  {
    if (theField[i].checked) radioSelected = true;
  }
  if (!radioSelected) {
      theField[0].focus();
      alert(mPrefix + s + mSuffix);
      return false;
  } else return true;
}

function checkValidDate (theField, s, emptyOK)
{   if (checkValidDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    {  dateArray = theField.value.split("/")
       if (dateArray.length != 3) return warnInvalid (theField, iPrefix + s + iDate);
       if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
          var today_date = new Date();
          var entered_date = new Date(dateArray[0] + "/" + dateArray[1] + "/" + dateArray[2])
          today_month = today_date.getMonth() + 1;
          today_day = today_date.getDate();
          today_year = today_date.getYear();
          today_date = new Date(today_month + "/" + today_day + "/" + today_year);
          today_time = today_date.getTime();
          entered_time = entered_date.getTime();
          if (entered_time < today_time) return warnInvalid(theField, "You must enter a valid date of today or later in the " + s + " field.  Today's Date:" + today_date + "  Entered Dare: " + entered_date );
          else return true;
       }
       else
          	return warnInvalid (theField, iPrefix + s + iDate);
    }
}

function checkAnyValidDate (theField, s, emptyOK)
{   if (checkAnyValidDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    {  dateArray = theField.value.split("/")
       if (dateArray.length != 3) return warnInvalid (theField, iPrefix + s + iDate);
       if (isDate(dateArray[2], dateArray[0], dateArray[1])) return true;
       else
          	return warnInvalid (theField, iPrefix + s + iDate);
    }
}

function checkValidAnnivDate (theField, s, emptyOK) {  
    if (checkValidAnnivDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value)) {
    	return warnEmpty (theField, s);
    } else {
        dateArray = theField.value.split("/");
        if (dateArray.length == 2) {
			 dateArray[2] = "1800"
			 if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
				return true;
			 } else {
				return warnInvalid (theField, iPrefix + s + iAnnivDate);
			 }
		}
		if (dateArray.length != 3) {
				return warnInvalid (theField, iPrefix + s + iAnnivDate);
		}
		if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
				return true;
		} else {
				return warnInvalid (theField, iPrefix + s + iAnnivDate);
		}
    }
}

function checkBirthDate (theField, s, emptyOK)
{   if (checkBirthDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if ((emptyOK == false) && (isEmpty(theField.value))) return warnEmpty (theField, s);
    if (isWhitespace(theField.value)) return warnEmpty (theField, s);
    else
    {  dateArray = theField.value.split("/")
       if (dateArray.length != 3) return warnInvalid (theField, iPrefix + s + iDate);
       if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
          var today_date = new Date();
          var birth_date = new Date(dateArray[0] + "/" + dateArray[1] + "/" + dateArray[2])
          today_month = today_date.getMonth() + 1;
          today_day = today_date.getDate();
          today_year = today_date.getYear();
          if (today_year < 100) today_year = today_year + 1900;
          min_year = today_year - minAge;
          max_year = today_year - maxAge;
          min_date = new Date(today_month + "/" + today_day + "/" + min_year);
          max_date = new Date(today_month + "/" + today_day + "/" + max_year);
          birth_time = birth_date.getTime();
          min_time = min_date.getTime();
          max_time = max_date.getTime();
          if (birth_time > min_time) return warnInvalid(theField, "You must be at least " + minAge + " to register here");
          else if (birth_time < max_time) return warnInvalid (theField, iPrefix + s + iDate);
          else return true;
       }
       else
          	return warnInvalid (theField, iPrefix + s + iDate);
    }
}

function checkExpDate (monthField, yearField)
{
    if (isWhitespace(monthField.value)) return warnEmpty (monthField, "Expiration Month");
    if (isWhitespace(yearField.value)) return warnEmpty (yearField, "Expiration Year");
    if (!isMonth(monthField.value, false)) return warnInvalid (monthField, iMonth);
    if (!isYear(yearField.value, false)) return warnInvalid (yearField, iYear);
    var today_date = new Date();
    var today_month = today_date.getMonth() + 1;
    var today_year = today_date.getYear();
    if (today_year < 100) today_year = today_year + 1900;
    var exp_date = new Date(monthField.value + "/1/" + yearField.value);
    var check_date = new Date(today_month + "/1/" + today_year);
    var check_time = check_date.getTime();
    var exp_time = exp_date.getTime();
    if (exp_time < check_time) return warnInvalid (monthField, "The specified expiration date has expired." + iReEnter);
    else 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)
{
    if (isWhitespace(theField.value)) return warnEmpty (theField, "Credit Card Number");
    var cardType = getRadioButtonValue (radio)
    if (cardType == 1) cardType = "VISA";
    if (cardType == 2) cardType = "MASTER CARD";
    if (cardType == 3) cardType = "AMERICAN EXPRESS";
    if (cardType == 4) cardType = "DISCOVER";

    var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
    if (!isCardMatch(cardType, normalizedCCN))
       return warnInvalid (theField, iCreditCardPrefix + cardType + iCreditCardSuffix);
    else
    {  theField.value = normalizedCCN
       return true
    }
}

function isCreditCard(st) {
  if (st.length > 19)
    return (false);
  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) == 0)
    return (true);
  else
    return (false);
}

function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}

function isMasterCard(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;
}

function isAmericanExpress(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;
}

function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;
}

function isAnyCard(cc)
{
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDiscover(cc)) {
    return false;
  }
  return true;
}

function isCardMatch (cardType, cardNumber)
{
	cardType = cardType.toUpperCase();
	var doesMatch = true;
	if ((cardType == "VISA") && (!isVisa(cardNumber)))
		doesMatch = false;
	if ((cardType == "MASTER CARD") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if ( ( (cardType == "AMERICAN EXPRESS") || (cardType == "AMEX") )
                && (!isAmericanExpress(cardNumber))) doesMatch = false;
	if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	return doesMatch;
}

function checkNumbers (theField, s, emptyOK)
{
	if (checkNumbers.arguments.length == 2) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	if (isWhitespace(theField.value))
	  return warnEmpty (theField, s);
	if (!isInteger(theField.value)) {
	  var Amount = theField.value;
	  theField.focus();
	  alert('The ' + s + ' you have specified "' + Amount + '" is not a valid number.');
	  return false}
	else return true;
	}

function checkMonthYear (yearField, monthField, labelString)
{
    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
    if (!isMonth(monthField.value)) return warnInvalid (monthField, iMonth);
    else return true;
}

function checkFutureDate (yearField, monthField, s)
{
	var currentDate = new Date();
	var currentYear = currentDate.getYear();
	var currentMonth = (currentDate.getMonth() + 1);
  if (currentYear <= 150) currentYear = currentYear + 1900;
	var maxYear = currentYear + 1;

	if (!checkMonthYear(yearField, monthField, s)) return false;

	  if (parseInt(yearField.value) < currentYear){
		alert("Please re-enter the pledge date.The date entered has passed.");
		yearField.focus();
		return false;
		}

	  if (parseInt(yearField.value) == currentYear){
		if (parseInt(monthField.value) < currentMonth){
		alert("Please re-enter the pledge date.The date entered has passed.");
		monthField.focus();
		return false;
		}
		if (parseInt(monthField.value) == currentMonth){
		alert("Please choose a Begin payment date at least one month from today.");
		monthField.focus();
		return false;
		}
		if (parseInt(monthField.value) > currentMonth) return true ;}


	  if ((parseInt(yearField.value) > currentYear) && (parseInt(yearField.value) == maxYear)){
		if (parseInt(monthField.value) <= currentMonth) return true ;
		else {
		alert("Please choose a date within one year from today.");
		monthField.focus();
		return false;}}

		if (parseInt(yearField.value) > maxYear) {
		alert("Please choose a date within one year from today.");
		monthField.focus();
		return false;}
		}


function chooseDateRadio(formRadio, yearField, monthField, s) {
	if (formRadio.checked == true) {
	  if (!checkFutureDate(yearField, monthField, s)) return false;
	  else return true;
	  }
	else return true;
	}


function checkSelectExpDate(monthField,s1,yearField,s2) {
var currentDate = new Date();
var currentMonth = currentDate.getMonth()+1;
var currentYear = currentDate.getYear();
if (currentYear <= 100) currentYear = currentYear + 1900;
if (parseInt(yearField.options[yearField.selectedIndex].value) > currentYear) return true;
else if (parseInt(yearField.options[yearField.selectedIndex].value) == currentYear) {
  if (parseInt(monthField.options[monthField.selectedIndex].value) >= currentMonth) return true;
  else {
    alert("The " + s1 + " that you have entered has passed. Please enter a new month.");
    monthField.focus();
    return false; }}
else {
  alert("The " + s2 + " that you have entered has passed. Please enter a new year.");
  yearField.focus();
  return false; }}

function checkCompName(name1,s1,emptyOK) {
 	if( name1.value=="" ) {
		alert('Company Name cannot be empty ...');
		name1.focus();
		return false;
	}
return true;
}

function checkDirName(name1,s1,emptyOK) {
 	if( name1.value=="" ) {
		alert('Dir Name cannot be empty ...');
		name1.focus();
		return false;
	}
	return true;
}
function checkSImage(name1,s1,emptyOK) {
	if( name1.value=="" ) {
		alert('Source Image cannot be empty ...');
		name1.focus();
		return false;
	}
	return true;
}
function checkCompId(name,s1,emptyOK) {
	if(name.value=="") {
		alert('CompID cannot be empty ');
		name.focus();
		return false;
	}
	name1 = name.value;
	var len = name1.length;
	for(var i=0; i<name1.length; i++) {
		 var c = name1.charAt(i);
		 if ((c < "0") || (c > "9") )  {
			alert('Company ID must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;
}
function checkLyplgAmount(name,s1,emptyOK) {
	if(name.value=="") {
		return true;
	}
	name1 = name.value;
	for(var i=0; i<name1.length ; i++) {
		 var c = name1.charAt(i);
		 if ((c < "0") || (c > "9") )  {
			alert('Last Year Pledge Amount must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;
}

function checkCygoalAmount(name,s1,emptyOK) {

	if(name.value=="") {
		return true;
	}
	name1 = name.value;
	for(var i=0; i<name1.length ; i++) {
		 var c = name1.charAt(i);
		 if (c < "0" || c > "9")  {
			alert('Current yeargoal Amount must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;

}
function checkYtodatePledge(name,s1,emptyOK) {

	if(name.value=="") {
		return true;
	}
	name1 = name.value;
	for(var i=0; i<name1.length ; i++) {
		 var c = name1.charAt(i);
		 if (c < "0" || c > "9")  {
			alert('Last Year Pledge Amount must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;

}

function checkSDate (theField, s, emptyOK)
{
	if (checkSDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    	if (isWhitespace(theField.value)) return warnEmpty (theField, s);
 	else
    	{
  		dateArray = theField.value.split("/")
       	if (dateArray.length != 3) return warnInvalid (theField, iPrefix + s + iDate);
		if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
			return true;
		}
		else
			return warnInvalid (theField, iPrefix + s + iDate);
	}
}

function checkEDate(theField, s,emptyOK) {
	if (checkEDate.arguments.length == 2) emptyOK = defaultEmptyOK;
    	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    	if (isWhitespace(theField.value)) return warnEmpty (theField, s);
 	else
    	{
  		dateArray = theField.value.split("/")
       	if (dateArray.length != 3) return warnInvalid (theField, iPrefix + s + iDate);
		if (isDate(dateArray[2], dateArray[0], dateArray[1])) {
			return true;
		}
		else
			return warnInvalid (theField, iPrefix + s + iDate);
	}
}

function checkZip1(name,s1,emptyOK) {
	if(emptyOK ==true )
		return true;
	name1 = name.value;
	for(var i=0; i<name1.length ; i++) {
		 var c = name1.charAt(i);
		 if (c < "0" || c > "9")  {
			alert('Zip must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;
}

function checkPhoneNo(name,s1,emptyOK) {
	if(name.value=="") {
		return true;
	}
	name1 = name.value;
	for(var i=0; i<name1.length ; i++) {
		 var c = name1.charAt(i);
		 if (c < "0" || c > "9")  {
			alert('Phone Number must be number..');
		 	name.focus();
			return false;
		}
	}
	return true;
}
