function PopUpHelp(URL) {window.open(URL, 'popup', 'width=275,height=300,scrollbars,menubar,resizable');}
function PopUpCheck(URL) {window.open(URL, 'popup', 'width=475,height=500,scrollbars,menubar,resizable');}
function PopUpWindow(URL) {window.open(URL, 'popup', 'width=275,height=300,scrollbars,menubar,resizable');}
function popUpAlert(text) {if (confirm(text)) {return (true);}}
function launch(xaction) {document.form01.formid.value = xaction; document.form01.submit();}
function LaunchWin(xaction) {document.form01.formid.value = xaction; document.form01.target = "_blank"; document.form01.submit(); document.form01.target = "_self";}
function SubmitIt(xaction) {document.form01.action.value = xaction; document.form01.submit();}
function SubmitWin(xaction) {document.form01.action.value = xaction; document.form01.target = "_blank"; document.form01.submit(); document.form01.target = "_self";}
function ViewPage(xaction) {document.form01.formcmddata.value = xaction; document.form01.formid.value = "viewpgc1"; document.form01.submit();}
function ViewPageWin(xaction) {document.form01.formcmddata.value = xaction; document.form01.formid.value = "viewpgc1"; document.form01.target = "_blank"; document.form01.submit(); document.form01.target = "_self";}

function isDigit (c) {return ((c >= "0") && (c <= "9")) }
function isEmpty(s) {return ((s == null) || (s.length == 0)) }
function fmtMoney(value)
   {
   //result="$"+Math.floor(value)+".";
   //var cents=100*(value-Math.floor(value))+0.5;
   //result += Math.floor(cents / 10);
   //result += Math.floor(cents % 10);
   result = Number(value);
   result = result.toFixed(2);
   result = "$" + result;
   return result;
   }
function fmtDollar(value)
   {
   //result=Math.floor(value)+".";
   //var cents=100*(value-Math.floor(value))+0.5;
   //result += Math.floor(cents / 10);
   //result += Math.floor(cents % 10);
   result = Number(value);
   result = result.toFixed(2);
   return result;
   }
function isInteger (s)
{   var i;
    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return false;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}
function isIntegerInRange (s, min, max)
{   if (!isInteger(s)) return false;
    var num = parseInt (s, 10);
    var imin = parseInt (min, 10);
    var imax = parseInt (max, 10);
    return ((num >= imin) && (num <= imax));
}
function isMonth(s) { return isIntegerInRange(s, 1, 12) }
function isDay(s) { return isIntegerInRange(s, 1, 31) }
function isYear(s) { return isIntegerInRange(s, 1900, 2100) }
function isHour(s) { return isIntegerInRange(s, 0, 23) }
function isMinute(s) { return isIntegerInRange(s, 0, 59) }
function isEmail(s) {
//changed 10/21/2008 by TES - old code is commented out here
//    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;
  var slength = s.length;
  var atPos = s.indexOf('@');  //first position of @
  var perPos = s.lastIndexOf('.');  //last position of .
  if (atPos == -1  || perPos == -1) {return false}  //no @ or .
  if (atPos == 0) {return false}  //@ cannot be in first position
  if (perPos < atPos) {return false}  //last period cannot come before @
  if (perPos - atPos == 1) {return false}  //must be at least one character between last period and @
  if (slength - perPos < 3) {return false}  //tld must be 2 or more characters
  return true;
}
function checkABA(s) {
  var i, n, t;
  t = "";
  for (i = 0; i < s.length; i++) {
    c = parseInt(s.charAt(i), 10);
    if (c >= 0 && c <= 9)
      t = t + c;
  }
  if (t.length != 9)
    return false;
  n = 0;
  for (i = 0; i < t.length; i += 3) {
    n += parseInt(t.charAt(i),     10) * 3
      +  parseInt(t.charAt(i + 1), 10) * 7
      +  parseInt(t.charAt(i + 2), 10);
  }
  if (n != 0 && n % 10 == 0)
    return true;
  else
    return false;
}

/* f=field, fn=pretty field name, s=show error, t=error-text, */
 function valRequired(f,fn,s,t) {t=""; if(f.name=="amount"){f.className="inumber req"} else {f.className="req"}; if(isEmpty(f.value)) {if(f.name=="amount"){f.className="inumber reqError"} else {f.className="reqError"}; t = fn + ' is required \n'; if(s == 1) alert(t);} return t}
 function valbaba(f,s,t) {t=""; if(!checkABA(f.value)) {t = 'ABA Transit Number is not valid \n'; if(s == 1) alert(t);} return t}
 function valbacct(f,s,t) {t=""; if(!isInteger(f.value)) {t = 'Account Number is not valid'; if(s == 1) alert(t);} return t}
 function valInteger(f,fn,s,t) {t=""; if(!isInteger(f.value)) {t = fn + ' is not a valid number \n'; if(s == 1) alert(t);} return t}
 function valMonth(f,fn,s,t) {t="";f.className="req"; if(!isMonth(f.value)) {f.className="reqError";t = fn + ' is not a valid month (01-12) \n'; if(s == 1) alert(t);} return t}
 function valOptMonth(f,fn,s,t) {t=""; if(isEmpty(f.value)) {return t}; if(!isMonth(f.value)) {t = fn + ' is not a valid month (01-12) \n'; if(s == 1) alert(t);} return t}
 function valDay(f,fn,s,t) {t=""; f.className="req"; if(!isDay(f.value)) {f.className="reqError"; t = fn + ' is not a valid day (01-31) \n'; if(s == 1) alert(t);} return t}
 function valOptDay(f,fn,s,t) {t=""; if(isEmpty(f.value)) {return t}; if(!isDay(f.value)) {t = fn + ' is not a valid day (01-31) \n'; if(s == 1) alert(t);} return t}
 function valYear(f,fn,s,t) {t="";f.className="req";; if(!isYear(f.value)) {f.className="reqError";t = fn + ' is not a valid Year (1901-2100) \n'; if(s == 1) alert(t);} return t}
 function valOptYear(f,fn,s,t) {t=""; if(isEmpty(f.value)) {return t}; if(!isYear(f.value)) {t = fn + ' is not a valid Year (1901-2100) \n'; if(s == 1) alert(t);} return t}
 function valHour(f,fn,s,t) {t=""; if(!isHour(f.value)) {t = fn + ' is not a valid hour (00-23) \n'; if(s == 1) alert(t);} return t}
 function valMinute(f,fn,s,t) {t=""; if(!isMinute(f.value)) {t = fn + ' is not a valid minute (00-59) \n'; if(s == 1) alert(t);} return t}
 function valSize(f,fn,min,max,s,t) {t=""; if(!isIntegerInRange(f, min, max)) {t = fn + ' is to large (limit '+max+' characters) \n'; if(s == 1) alert(t);} return t }
 function valDollar(f,fn,s,t) {t="";
  if (f.value == "") {return t;}
  var chars = "0123456789.";
  for (var i = 0; i < f.value.length; i++)
  {
    if (chars.indexOf(f.value.charAt(i)) == -1)
       {t = fn + ' is not a valid dollar amount \n'; if(s == 1) {alert(t); return t;}}
  }
  return t;
 }
 function valEmail(f,fn,s,e,t)
 {t=""; f.className="req";
  if(e){if(isEmpty(f.value)) {f.className="reqError"; t = fn + ' is required \n'; if(s == 1) alert(t); return t}}
  if(!isEmail(f.value)) {f.className="reqError"; t = fn + ' does not appear to be valid \n'; if(s == 1) alert(t); return t}
  return t
 }
 function valOptionalEmail(f,fn,s,e,t)
 {t="";  f.className="";
  if(isEmpty(f.value)) {return t}
  if(!isEmail(f.value)) {f.className="nreqError"; t = fn + ' does not appear to be valid \n'; if(s == 1) alert(t); return t}
  return t
 }
//----------------------------------------------------------------------------------------------------
function valCC(fCN /*CardNumber Field*/, fCT /*CardType Field*/, s) {
  var t="";
  fCN.className = "req";
  fCT.className = "req";
  var cardnumber = fCN.value;
  if (fCT.selectedIndex == -1) {
    t = "Please select a Card Type\n";
    fCT.className = "reqError";
    if(s == 1) {alert(t)} else {return t};
  } else {
    var cardname = fCT.options[fCT.selectedIndex].text;
  }
  var ccErrorNo = 0;
  var ccErrors = new Array();
  ccErrors[0] = "Card Type is required\n";  //cardtype not in cards array
  ccErrors[1] = "Card Number is required\n";  //card number textfield is blank
  ccErrors[2] = "Card Number must be numeric\n";  //card number is not numeric
  ccErrors[3] = "Card Number is invalid for selected Card Type\n";  //card number not a valid prefix for cardtype
  ccErrors[4] = "Card Number length is not valid for selected Card Type\n";  //card number length not good for cardtype
  ccErrors[5] = "Card Number is invalid\n";  //card number did not pass checksum validation
  // Array to hold the permitted card characteristics
  var cards = new Array();
  // Define the cards we support. You may add addtional card types.
  //   Name:      As in the selection box of the form - must be same as user's
  //   Length:    List of possible valid lengths of the card number for the card
  //   prefixes:  List of possible prefixes for the card
  //   checkdigit Boolean to say whether there is a check digit
  // Visa, MC, Discover and AMEX all use a check-digit, but I do not want to test that in
  // the validation, so I have changed the checkdigit property to false.  When we want to
  // validate the check digit, change this property to true.
  cards[0] = {name: "Visa",
              length: "13,16",
              prefixes: "4",
              checkdigit: false};
  cards[1] = {name: "MasterCard",
              length: "16",
              prefixes: "51,52,53,54,55",
              checkdigit: false};
  cards[2] = {name: "Discover",
              length: "16",
              prefixes: "6011",
              checkdigit: false};
  cards[3] = {name: "AMEX",
              length: "15",
              prefixes: "34,37",
              checkdigit: false};
  cards[4] = {name: "American Express",
              length: "15",
              prefixes: "34,37",
              checkdigit: false};
  //Establish card type as index of the cards array
  var cardType = -1;
  for (var i = 0; i < cards.length; i++) {
    //See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase() == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  //Error 0 - Invalid Card Type
  if (cardType == -1) {
     ccErrorNo = 0;
     t = ccErrors[ccErrorNo];
     fCT.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
  }
  //Error 1 - Card Number not provided
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     t = ccErrors[ccErrorNo];
     fCN.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
  }
  //Error 2 - Card Number is not numeric
  var cardNo = cardnumber
  var cardNoExpr = new RegExp('[0-9]{' + cardNo.length + '}');
  if (!cardNoExpr.test(cardNo))  {
     ccErrorNo = 2;
     t = ccErrors[ccErrorNo];
     fCN.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
  }
  //Setup for Errors 3 and 4 - Card Specific Validations
  var LengthValid = true;  //to add length test change this to false
  var PrefixValid = false;
  var undefined;
  //We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
  //Error 3 - Card Number does not have a valid prefix for card type selected
  //Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
  //Now see if any of them match what we have in the card number
  for (i = 0; i < prefix.length; i++) {
    var prefixExpr = new RegExp("^" + prefix[i]);
    if (prefixExpr.test(cardNo)) PrefixValid = true;
  }
  //If it isn't a valid prefix return error
  if (!PrefixValid) {
     ccErrorNo = 3;
     t = ccErrors[ccErrorNo];
     fCN.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
  }
  //Error 4 - Card Number does not have a valid length for card type selected
  //Load an array with the valid prefixes for this card
  lengths = cards[cardType].length.split(",");
  //Now see if the lengths match the card number
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  //If it isn't a valid length return error
  if (!LengthValid) {
     ccErrorNo = 4;
     t = ccErrors[ccErrorNo];
     fCN.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
  };
  //Error 5
  //Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
    //Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
      //Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
      //If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
      //Add the units element to the checksum total
      checksum = checksum + calc;
      //Switch the value of j
      if (j == 1) {j = 2} else {j = 1};
    }
    //All done with calcualation- if checksum is divisible by 10, it is a valid modulus 10.
    //If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 5;
     t = ccErrors[ccErrorNo];
     fCN.className = "reqError";
     if(s == 1) {alert(t)} else {return t};
    }
  }
  //The credit card is in the required format, so return t, which should be blank
  return t;
}
//----------------------------------------------------------------------------------------------------
function valPhone(pha, phe, phn, pn, s, t) {
  var fullPhone;      // Consolidated digits.
  var i;              // Loop counter.
  t = "";             // Assume no error msg will be needed.

  if (pha.className == "req" || pha.className == "reqError") {
     pha.className = "req";
    phe.className = "req";
    phn.className = "req";
    t = t + valRequired(pha,pn,0,t);
    t = t + valRequired(phe,pn,0,t);
    t = t + valRequired(phn,pn,0,t);
    if (t != "") {t = pn + ' is not valid\n'; if (s == 1) alert(t);return t;}
  } else if (pha.className == "nreqError") {
     pha.className = "";
    phe.className = "";
    phn.className = "";
  }
  // Check for wrong lengths of parts; return error msg if found:
  if ((pha.value.length > 0 && pha.value.length < 3) || (phe.value.length > 0 && phe.value.length < 3) || (phn.value.length > 0 && phn.value.length < 4)) {
     if (pha.className == "req") {
       pha.className = "reqError";
      phe.className = "reqError";
      phn.className = "reqError";
    } else if (pha.className == "") {
       pha.className = "nreqError";
      phe.className = "nreqError";
      phn.className = "nreqError";
    }
     t = pn + " is not valid.\n";
    if (s == 1) alert(t);
     return t;
  }
  // Check for non-digits, return error if found:
  fullPhone = pha.value + phe.value + phn.value;
  for (i = 0; i < 10; i++) {
     if (!isDigit(fullPhone.charAt(i)) && pha.value != "") {
        if (pha.className == "req") {
         pha.className = "reqError";
         phe.className = "reqError";
         phn.className = "reqError";
        } else if (pha.className == "") {
         pha.className = "nreqError";
         phe.className = "nreqError";
         phn.className = "nreqError";
      }
        t = pn + " is not valid.\n";
       if (s == 1) alert(t);
        return t;
     }
  }
  return t;
}
//----------------------------------------------------------------------------------------------------
function valSSN(ssn1, ssn2, ssn3, pn, s, t) {
  var fullSSN;        // Consolidated digits.
  var i;              // Loop counter.
  t = "";             // Assume no error message will be needed.

  if (ssn1.className == "req" || ssn1.className == "reqError") {
     ssn1.className = "req";
    ssn2.className = "req";
    ssn3.className = "req";
    t = t + valRequired(ssn1,pn,0,t);
    t = t + valRequired(ssn2,pn,0,t);
    t = t + valRequired(ssn3,pn,0,t);
    if (t != "") {t = pn + ' is not valid\n'; if (s == 1) alert(t);return t;}
  } else if (ssn1.className == "nreqError") {
     ssn1.className = "";
    ssn2.className = "";
    ssn3.className = "";
  }

  // Check for all-zero sections; return error message if found:
  if ((ssn1.value == "000") || (ssn2.value == "00") || (ssn3.value == "0000")) {
     if (ssn1.className == "req") {
       ssn1.className = "reqError";
      ssn2.className = "reqError";
      ssn3.className = "reqError";
     } else if (ssn1.className == "") {
       ssn1.className = "nreqError";
      ssn2.className = "nreqError";
      ssn3.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  // Check for wrong lengths of parts; return error msg if found:
  if ((ssn1.value.length > 0 && ssn1.value.length < 3) || (ssn2.value.length > 0 && ssn2.value.length < 2) || (ssn3.value.length > 0 && ssn3.value.length < 4)) {
     if (ssn1.className == "req") {
       ssn1.className = "reqError";
      ssn2.className = "reqError";
      ssn3.className = "reqError";
     } else if (ssn1.className == "") {
       ssn1.className = "nreqError";
      ssn2.className = "nreqError";
      ssn3.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  // Check for non-digits, return error if found:
  fullSSN = ssn1.value + "0" + ssn2.value + "0" + ssn3.value;
  for (i = 0; i < 11; i++) {
     if (!isDigit(fullSSN.charAt(i)) && ssn1.value != "") {
        if (ssn1.className == "req") {
         ssn1.className = "reqError";
         ssn2.className = "reqError";
         ssn3.className = "reqError";
        } else if (ssn1.className == "") {
         ssn1.className = "nreqError";
         ssn2.className = "nreqError";
         ssn3.className = "nreqError";
      }
        t = pn + " is not valid.\n";
      if (s == 1) alert(t);
      return t;
     }
  }
  return t;
}
//----------------------------------------------------------------------------------------------------
function valState (statecode, pn, s, t) {
  var bigstring = new String("AAAEAKALAPARASAZCACOCTDCDEFLFMGAGUHIIAIDILINKSKYLAMAMDMEMHMIMNMOMPMSMTNCNDNENHNJNMNVNYOHOKORPAPRPWRISCSDTNTXUTVAVIVTWAWIWVWY");
  var i;             // Loop counter.
  var mystate = new String();    // Current state code considered.
  t = "";            // Assume no errors.
  if (statecode.className == "req" || statecode.className == "reqError") {
     statecode.className = "req";
    t = valRequired(statecode,pn,0,t);
    if (t != "") {if (s == 1) alert(t);return t;}
  } else if (statecode.className == "nreqError") {
     statecode.className = "";
  } else {
     if (isEmpty(statecode.value)) {return t;}
  }
  if (statecode.value.length > 0 && statecode.value.length < 2) { // Check for correct length.
     if (statecode.className == "req") {
       statecode.className = "reqError";
     } else if (statecode.className == "") {
       statecode.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  statecode.value = statecode.value.toUpperCase(); // Capitalize.
  for (i = 0; i < 62; i++) {
     mystate = bigstring.charAt(2*i) + bigstring.charAt(2*i+1);
     if (statecode.value == mystate) {
       return t;
     }
  }
  if (statecode.value != "") {
     if (statecode.className == "req") {
        statecode.className = "reqError";
     } else if (statecode.className == "") {
        statecode.className = "nreqError";
     }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
    return t;
  }
}
//----------------------------------------------------------------------------------------------------
function valDate(m, d, y, pn, s, t) {
  var fullDate;       // Consolidated date.
  var fullLength;     // Length of full date.
  var i;              // Loop counter.
  var numm;         // Month as number.
  var numd;           // Day as number.
  var numy;           // Year as number.
  t = "";             // Assume no error msg will be needed.

  if (m.className == "req" || m.className == "reqError") {
     m.className = "req";
    d.className = "req";
    y.className = "req";
    t = t + valRequired(m,pn,0,t);
    t = t + valRequired(d,pn,0,t);
    t = t + valRequired(y,pn,0,t);
    if (t != "") {t = pn + ' is not valid\n'; if (s == 1) alert(t);return t;}
  } else if (m.className == "nreqError") {
     m.className = "";
    d.className = "";
    y.className = "";
  }

  m.value = s2cnum(m.value, 2, 0); // Make sure the month is exactly 2 digits (zero-filled)
  d.value = s2cnum(d.value, 2, 0); // Make sure the day is exactly 2 digits (zero-filled)

  // Check for proper lengths:
  if (m.value.length < 0 || m.value.length > 2 || d.value.length < 0 || d.value.length > 2 || y.value.length < 0 || y.value.length > 4) {
     if (m.className == "req") {
       m.className = "reqError";
      d.className = "reqError";
      y.className = "reqError";
     } else if (m.className == "") {
       m.className = "nreqError";
      d.className = "nreqError";
      y.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  // Check for non-digits:
  fullDate = m.value + d.value + y.value;
  fullLength = m.value.length + d.value.length + y.value.length;
  for (i = 0; i < fullLength; i++) {
     if (!isDigit(fullDate.charAt(i)) && m.value != "") {
        if (m.className == "req") {
         m.className = "reqError";
         d.className = "reqError";
         y.className = "reqError";
      } else if (m.className == "") {
         m.className = "nreqError";
         d.className = "nreqError";
         y.className = "nreqError";
      }
      t = pn + " is not valid.\n";
      if (s == 1) alert(t);
      return t;
     }
  }
  // Check for plausible Gregorian dates:
  numm = parseInt(m.value, 10);
  numd = parseInt(d.value, 10);
  numy = parseInt(y.value, 10);
  if (numm < 1 || numm > 12 || numd < 1 || numd > 31 || numy < 1800 || numy > 2200) {
     if (m.className == "req") {
       m.className = "reqError";
      d.className = "reqError";
      y.className = "reqError";
     } else if (m.className == "") {
       m.className = "nreqError";
      d.className = "nreqError";
      y.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return t;
  }
  if ((numm == 4 || numm == 6 || numm == 9 || numm == 11) && numd > 30) {
     if (m.className == "req") {
       m.className = "reqError";
      d.className = "reqError";
      y.className = "reqError";
       } else if (m.className == "") {
       m.className = "nreqError";
      d.className = "nreqError";
      y.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return t;
  }
  if (numm == 2) {         // Leap year?
     var isLeap = (numy % 4 == 0 && (numy % 100 != 0 || numy % 400 == 0));
       if (numd > 29 || (numd == 29 && !isLeap)) {
        if (m.className == "req") {
         m.className = "reqError";
         d.className = "reqError";
         y.className = "reqError";
      } else if (m.className == "") {
         m.className = "nreqError";
         d.className = "nreqError";
         y.className = "nreqError";
      }
      t = pn + " is not valid.\n";
      if (s == 1) alert(t);
      return t;
     }
  }
  return t;
}
//----------------------------------------------------------------------------------------------------
// valTime6 validates a time of day (hh:mm:zz) by the 24-hour clock.
function valTime6(h, m, z, pn, s, t) {
  var fullTime;      // Time fields concatenated.
  var i;       // Loop counter.
  var hval;    // Hours as integer.
  var mval;    // Minutes as integer.
  var zval;    // Seconds as integer.
  t = "";

  h.value = s2cnum(h.value, 2, 0); // Make sure the hour is exactly 2 digits (zero-filled)
  m.value = s2cnum(m.value, 2, 0); // Make sure the min is exactly 2 digits (zero-filled)
  s.value = s2cnum(s.value, 2, 0); // Make sure the seconds is exactly 2 digits (zero-filled)

  if (h.className == "req" || h.className == "reqError") {
     h.className = "req";
    m.className = "req";
    z.className = "req";
    t = t + valRequired(h,pn,0,t);
    t = t + valRequired(m,pn,0,t);
    t = t + valRequired(z,pn,0,t);
    if (t != "") {t = pn + ' is not valid\n'; if (s == 1) alert(t);return t;}
  } else if (h.className == "nreqError") {
     h.className = "";
    m.className = "";
    z.className = "";
  }
  // Check for proper field lengths:
  if (h.value.length < 0 || h.value.length > 2 || m.value.length < 0 || m.value.length > 2 || z.value.length < 0 || z.value.length > 2) {
     if (h.className == "req") {
       h.className = "reqError";
      m.className = "reqError";
      z.className = "reqError";
       } else if (h.className == "") {
       h.className = "nreqError";
      m.className = "nreqError";
      z.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return t;
  }
 // Check for non-digits:
  fullTime = h.value + m.value + z.value;
  for (i = 0; i < fullTime.length; i++) {
     if (!isDigit(fullTime.charAt(i)) && h.value != "") {
        if (h.className == "req") {
         h.className = "reqError";
         m.className = "reqError";
         z.className = "reqError";
      } else if (h.className == "") {
         h.className = "nreqError";
         m.className = "nreqError";
         z.className = "nreqError";
      }
      t = pn + " is not valid.\n";
      if (s == 1) alert(t);
      return t;
     }
  }
  // Finally, check for proper range:
  hval = parseInt(h.value, 10);
  mval = parseInt(m.value, 10);
  zval = parseInt(z.value, 10);
  if (hval < 0 || hval > 23 || mval < 0 || mval > 59 || zval < 0 || zval > 59) {
     if (h.className == "req") {
       h.className = "reqError";
      m.className = "reqError";
      z.className = "reqError";
       } else if (h.className == "") {
       h.className = "nreqError";
      m.className = "nreqError";
      z.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return;
  }
  return t;
}
//----------------------------------------------------------------------------------------------------
// valTime4 validates a time of day (hh:mm) by the 24-hour clock.
function valTime4(h, m, pn, s, t) {
  var fullTime;      // Time fields concatenated.
  var i;       // Loop counter.
  var hval;    // Hours as integer.
  var mval;    // Minutes as integer.
  t = "";
  if (h.className == "req" || h.className == "reqError") {
     h.className = "req";
    m.className = "req";
    t = t + valRequired(h,pn,0,t);
    t = t + valRequired(m,pn,0,t);
    if (t != "") {t = pn + ' is not valid\n'; if (s == 1) alert(t);return t;}
  } else if (h.className == "nreqError") {
     h.className = "";
    m.className = "";
  }
  // Check for proper field lengths:
  if (h.value.length < 0 || h.value.length > 2 || m.value.length < 0 || m.value.length > 2) {
     if (h.className == "req") {
       h.className = "reqError";
      m.className = "reqError";
       } else if (h.className == "") {
       h.className = "nreqError";
      m.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return t;
  }
  // Check for non-digits:
  fullTime = "0" + h.value + m.value
  for (i = 0; i < fullTime.length; i++) {
     if (!isDigit(fullTime.charAt(i)) && h.value != "") {
        if (h.className == "req") {
         h.className = "reqError";
         m.className = "reqError";
      } else if (h.className == "") {
         h.className = "nreqError";
         m.className = "nreqError";
      }
      t = pn + " is not valid.\n";
      if (s == 1) alert(t);
      return t;
     }
  }
  // Finally, check for proper range:
  hval = parseInt(h.value, 10);
  mval = parseInt(m.value, 10);
  if (hval < 0 || hval > 23 || mval < 0 || mval > 59) {
     if (h.className == "req") {
       h.className = "reqError";
       m.className = "reqError";
       } else if (h.className == "") {
       h.className = "nreqError";
      m.className = "nreqError";
    }
       t = pn + " is not valid.\n";
       if (s == 1) alert(t);
       return;
  }
  return t;
}
//----------------------------------------------------------------------------------------------------
function valZip5 (z, pn, s, t) {
  var i;             // Loop counter.
  t = "";            // Assume no errors.
  // Check for required
  if (z.className == "req" || z.className == "reqError") {
     z.className = "req";
    t = valRequired(z,pn,0,t);
    if (t != "") {if (s == 1) alert(t);return t;}
  } else if (z.className == "nreqError") {
     z.className = "";
  }
  // Check for correct length.
  if (z.value.length != 5) {
     if (z.className == "req") {
       z.className = "reqError";
     } else if (z.className == "") {
       z.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  // Check for integer
  if (valInteger(z,pn,0,t) != "") {
     if (z.className == "req") {
       z.className = "reqError";
     } else if (z.className == "") {
       z.className = "nreqError";
    }
     t = pn + " is not valid.\n";
     if (s == 1) alert(t);
     return t;
  }
  return t;
}

/* String Routines */
function toUpper(string) {string.value = string.value.toUpperCase(); }
function toLower(string) {string.value = string.value.toLowerCase(); }
function trim(string) { return trims(string,' '); }
function ltrim(string) { return ltrims(string,' '); }
function rtrim(string) { return rtrims(string,' '); }
function ltrims(string,chr) {
   var finished = false;
   for (var i = 0; i < string.length && !finished; i++)
       if (string.substring(i,i+1) != chr) finished = true;
   if (finished) return string.substring(i-1); else return string;
}
function rtrims(string,chr) {
   var finished = false;
   for (var i = string.length - 1; i > -1 && !finished; i--)
       if (string.substring(i,i+1) != chr) finished = true;
   if (finished) return string.substring(0,i+2); else return string;
}
function trims(string,chr) { return rtrims(ltrims(string,chr),chr) }

/* Number Conversion Routines */
function cnum2s(input,bDec,aDec) {
  //bDec is the number of digits before decimal point
  //aDec is the number of digits after decimal point
  //bDec is not used in this function, it is here for backward compatibility
  var divisor = Math.pow(10.0, aDec);
  input = input/divisor;
  input = input.toFixed(aDec);
  return input;
}
function s2cnum(input,bDec,aDec) {
  //bDec is the number of digits before decimal point
  //aDec is the number of digits after decimal point
  //digits (calculated below) is the total length (aDec + bDec)
  var multiplier = Math.pow(10.0, aDec);
  input = Number(input) * multiplier;
  input = Math.round(input * 100) / 100;
  input = parseInt(input,10);
  str = input.toString();
  var digits = aDec + bDec;
  while (str.length < digits) {
    str = "0" + str;
  }
  return str;
}

function oldcnum2s(input, len, dec) {
  var divisor, dot, n, str, width, x;
  if (input == " " || input == "") input = "00";
  divisor = Math.pow(10.0, dec);
  n = parseInt(input, 10);
  if (n == 0) {
    str = "0.0";
    n = 1;
    while (n < dec) {
      str += "0";
      n++;
    }
    return str;
  }
  x = n / divisor;
  str = x.toString();
  dot = str.indexOf(".");
  width = str.length - dot - 1;
  while (width < dec) {
    str = str + "0";
    width++;
  }
  return str;
} // cnum2s

function olds2cnum(input, len, dec) {
  var factor, out, total, x;
  if (input == " " || input == "") input = "0.0";
  factor = Math.pow(10.0, dec);
  total = parseInt(len, 10) + parseInt(dec, 10);
  x = Math.abs(Math.round(factor * parseFloat(input)));
  out = x.toString();
  while (out.length < total) {
    out = "0" + out;
  }
  return out;
} // s2cnum

  function valCid1()
  /*****************************************************************
    Allow only numeric in id number
                              5/15/2009 3:28PM
  *****************************************************************/
  {
    var cid1 = document.form01.cid1
    var strValue = cid1.value.toString()
    var strChar
    var validChars = "0123456789"
    for ( var i = 0; i < strValue.length; i++) {
      strChar = strValue.charAt(i);
    if (validChars.indexOf(strChar) == -1) {
      alert("You have entered a non numeric character! Only numeric characters are allowed!");
      return false;
    }
    }
  }  // valCid1

  function valZip5( zipCode )
  /*****************************************************************
    require zip field to be 5 characters
                              5/21/2009 8:40AM
  *****************************************************************/
  {

    if ( zipCode.length !== 5 ) {
      return false;
    }

  }  // valZip5

function formatShipTo()
/*****************************************************************
  add leading zeros for TG
                               9/4/2009 8:30AM
*****************************************************************/
{
  var fcc = document.getElementById('fcc')
  if ( fcc == null ) {
    return;
  }
  else{
  var shipTo = document.getElementById('shipto');
  if ( shipTo != null && shipTo.value != 0 ) {
    for (var i = shipTo.value.length; i < 18; i++ ) {
     shipTo.value = 0 + shipTo.value;
    }
    }
    else
   {return;}
  }

}  // formatShipTo

            function epayMenu(version, client, optcc, optmcc, optach, optsach, optmach)
            {
                // Config Here ________________________________________
                // 0 = old 1 = new
                this.version = version;
                // 0 = client 1 = admin
                this.client = client;
                // cc,mcc,ach,sach,mach
                this.optcc = optcc;
                this.optmcc = optmcc ;
                this.optach = optach ;
                this.optsach = optsach ;
                this.optmach = optmach ;
                //_____________________________________________________


                this.rows = document.getElementsByTagName('tr');

                this.review = document.getElementById('review');
                this.letters = document.getElementById('letters');
                this.password = document.getElementById('password');
                this.users = document.getElementById('users');
                this.secform = document.getElementById('secform');
                this.webreports = document.getElementById('webreports');
                this.opts =
                    [
                    review,
                    letters,
                    password,
                    users,
                    secform,
                    webreports
                    ]

                this.cc = document.getElementById('cc');
                this.ach = document.getElementById('ach');
                this.scc = document.getElementById('scc');
                this.mcc = document.getElementById('mcc');
                this.siach = document.getElementById('siach');
                this.sach = document.getElementById('sach');
                this.mach = document.getElementById('mach');
             }

            function setupmenu(config)
                {
                mopt = config.split(",")
                var menu = new epayMenu(parseInt(mopt[0]), parseInt(mopt[1]), parseInt(mopt[2]), parseInt(mopt[3]), parseInt(mopt[4]), parseInt(mopt[5]), parseInt(mopt[6]));
                switch(menu.version)
                    {

                    case 0:
                        for (var i = 0; i < menu.rows.length; i++)
                            {
                            if (menu.rows[i].className == 'current')
                                {
                                menu.rows[i].style.display = "none";
                                }

                            if (menu.rows[i].className == 'legacy')
                                {
                                menu.rows[i].style.display = "";
                                }
                            }
                        break;

                    case 1:
                        for (var i = 0; i < menu.rows.length; i++)
                          {
                          if (menu.rows[i].className == 'legacy')
                              {
                              menu.rows[i].style.display = "none";
                              }

                          if (menu.rows[i].className == 'current')
                              {
                              menu.rows[i].style.display = "";
                              }
                          }
                      break;
                    }
                switch (menu.client)
                    {
                    case 0:
                        for (var i = 0; i < menu.opts.length; i++)
                            {
                            menu.opts[i].style.display = 'none';
                            }
                        break;

                    case 1:
                        if(mopt[5] == 0 && mopt[6] == 0)
                          {
                          document.getElementById('letters').style.display = "none";
                          }
                      break;
                      }

                if (menu.optcc == 0 && menu.optmcc == 0)
                    {
                    menu.cc.style.display = 'none';
                    }

                else
                    {
                    switch (menu.optcc)
                        {
                        case 0:
                            menu.scc.style.display = 'none';
                            break;

                        case 1: menu.scc.style.display = '';
                        break;
                        }

                    switch (menu.optmcc)
                        {
                        case 0:
                            menu.mcc.style.display = 'none';
                            break;

                        case 1:
                        menu.mcc.style.display = '';
                        break;
                        }
                    }

                if (menu.optach == 0 && menu.optsach == 0 && menu.optmach == 0)
                    {
                    menu.ach.style.display = 'none';
                    }

                else
                    {
                    switch (menu.optach)
                        {
                        case 0:
                            menu.siach.style.display = 'none';
                            break;

                        case 1:
                            menu.siach.style.display = '';
                            break;
                        }

                    switch (menu.optsach)
                        {
                        case 0:
                            menu.sach.style.display = 'none';
                            break;

                        case 1:
                            menu.sach.style.display = '';
                            break;
                        }

                    switch (menu.optmach)
                        {
                        case 0:
                            menu.mach.style.display = 'none';
                            break;

                        case 1:
                            menu.mach.style.display = '';
                            break;
                        }
                    }
                }
        function replaceSpace(str)
        /*****************************************************************
          Remove all spaces in a field.
                              10/29/2009 9:10AM
        *****************************************************************/
        {
          var newstr = "";
          for ( var i=0; i < str.length; i++) {
            var myChar = str.charAt(i)
            if (!myChar.match(/\s+/)) {
              newstr = newstr + myChar;
            }
          }
            return newstr;

        }  // replaceSpace
        function concatName(first, last)
        /*****************************************************************
          Trim First and Last Name and concatenate to cname
                              10/29/2009 8:21AM
        *****************************************************************/
        {

          first = replaceSpace(first);
          last = replaceSpace(last);
          document.form01.fname.value = first;
          document.form01.lname.value = last;
          fullname = first + " " + last
          return fullname;

        }  // concatName
        function splitcName( fullname )
        /*****************************************************************
          Split fullname to first and last.
                              10/29/2009 8:26AM
        *****************************************************************/
        {

          var name = document.form01.cname.value.split(" ");
          if ( name[0] !== undefined ) {
          document.form01.fname.value = name[0];
          }
          if ( name[1] !== undefined ) {
          document.form01.lname.value = name[1];
          }

        }  // splitName

function spacechk(s)
/*****************************************************************
  Replace whitespace with "" so a whitespace only string becomes 0 length.
                              11/6/2009 2:52PM
*****************************************************************/
{
var re = /\s/g;
var str = s.replace(re,"");
if ( str.length == 0 )
{
  return true;
}
{
  return false;
}
}  // spacechk
