/*
function CheckChars(obj, charlist)
{
  var string = obj.value;
  var length = string.length;
  
  if(length < 1)
  {
    alert("Value cannot be blank.");
    obj.focus(); 
    return false;
  }    
  if(charlist == "alphanumeric")
   validchars="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  else if(charlist == "numeric")
   validchars="0123456789";
  else if(charlist == "alpha")
   validchars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  else if(charlist == "zipcode")
   validchars="-0123456789";
  else if(charlist == "phone")
   validchars="0123456789- ()";
  else if(charlist == "numericspace")
   validchars=" 0123456789";
  else if(charlist == "alphaspecial")
   validchars=" '-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  else if(charlist == "phone")
   validchars="0123456789- ()";
  else
    validchars = charlist;   
  
  for(var i=0; i<length; i++)
  {
    if(validchars.indexOf(string.charAt(i)) < 0)
    {
      alert('Invalid Character: ' + string.charAt(i));
      obj.focus();
      return false;
    }
  }
  return true;
}
*/

function isDate(dateStr)
{
  // Checks for the following valid date formats:
  // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
  // Also separates date into month, day, and year variables

  var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

  // To require a 4 digit year entry, use this line instead:
  // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

  var matchArray = dateStr.match(datePat); // is the format ok?
  if(matchArray == null)
  {
    alert("Date is not in a valid format.")
    return false;
  }
  month = matchArray[1]; // parse date into variables
  day = matchArray[3];
  year = matchArray[4];
  if(month < 1 || month > 12)
  { // check month range
    alert("Month must be between 1 and 12.");
    return false;
  }
  if(day < 1 || day > 31)
  {
    alert("Day must be between 1 and 31.");
    return false;
  }
  if((month==4 || month==6 || month==9 || month==11) && day==31)
  {
    alert("Month "+month+" doesn't have 31 days!")
    return false
  }
  if(month == 2)
  { // check for february 29th
    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
    if(day>29 || (day==29 && !isleap))
    {
      alert("February " + year + " doesn't have " + day + " days!");
      return false;
     }
  }
  return true;  // date is valid
}


function isEmpty(s)
{
  return((s == null) || (s.length == 0));
}
function isLetter(c)
{
  return(((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")));
}
function isDigit(c)
{
  return ((c >= "0") && (c <= "9"))
}
function isWhitespace(s)
{
  var whitespace = " \t\n\r";
  if(isEmpty(s))
   return true;

  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(whitespace.indexOf(c) == -1)
     return false;
  }
  return true;
}
function isAlpha(s)
{
  if(isEmpty(s))
   return false;
  for(i=0; i <s.length; i++)
  {   
    var c = s.charAt(i);
    if(!isLetter(c))
      return false;
  }
  return true;
}
function isNumeric(s)
{
  if(isEmpty(s))
   return false
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(!isDigit(c))
     return false;
  }
  return true;
}
function isAlphanumeric(s)
{
  if(isEmpty(s))
   return false;
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(! (isLetter(c) || isDigit(c) ) )
     return false;
  }
  return true;
}
function isSentence(s)
{
  if(isEmpty(s))
   return false;
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(!(isLetter(c) || isDigit(c) || c == " " || c == "."))
     return false;
  }
  return true;
}
function isWords(s)
{
  if(isEmpty(s))
   return false;
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(!(isLetter(c) || isDigit(c) || c == " "))
     return false;
  }
  return true;
}

function isName(s)
{
  if(isEmpty(s))
   return false;
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(!(isLetter(c) || c == " " || c == "."))
     return false;
  }
  return true;
}

function isEmail(s)
{
  //Must be of form a@b.c
  if(isEmpty(s))
   return false;
   
  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 isStateCode(s)
{
  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"

  if(isEmpty(s))
   return false;
  return((USStateCodes.indexOf(s) != -1) && (s.indexOf(USStateCodeDelimiter) == -1))
}
function isZipCode(s)
{
  if(isEmpty(s))
   return false
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
    if(! (isDigit(c) || "-" ) )
     return false;
  }
  return((s.length == 5) || (s.length == 9))
}
function isPhone(s)
{
  if(isEmpty(s))
   return false
  for(var i=0; i<s.length; i++)
  {   
    var c = s.charAt(i);
	/*
	if(!(isDigit(c)))
     return false;
	*/
	if ((c !="-")&&(c !="(")&&(c !=")")&&(c !=" ")&&!(isDigit(c)) )
		return false;
  }
  return true;
}


function isCreditCard(st)
{
  // Encoding only works on cards with less than 19 digits
  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)
{
  //4111 1111 1111 1111
  if(((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}
function isMasterCard(cc)
{
  //5500 0000 0000 0004
  ch1 = cc.substring(0,1);
  ch2 = cc.substring(1,2);
  if((cc.length == 16) && (ch1 == 5) && ((ch2 >= 1) && (ch2 <= 5)))
   return isCreditCard(cc);
  return false;
}
function isAmericanExpress(cc)
{
  //340000000000009
  ch1 = cc.substring(0,1);
  ch2 = cc.substring(1,2);
  if((cc.length == 15) && (ch1 == 3) && ((ch2 == 4) || (ch2 == 7)))
   return isCreditCard(cc);
  return false;
}
function isDinersClub(cc)
{
  //30000000000004
  ch1 = cc.substring(0,1);
  ch2 = cc.substring(1,2);
  if((cc.length == 14) && (ch1 == 3) && ((ch2 == 0) || (ch2 == 6) || (ch2 == 8)))
   return isCreditCard(cc);
  return false;
}
function isDiscover(cc)
{
  //6011000000000004
  first4digs = cc.substring(0,4);
  if((cc.length == 16) && (first4digs == "6011"))
   //return isCreditCard(cc);
   return isNumeric(cc);
  return false;
}
function isAnyCard(cc)
{
  if(!isCreditCard(cc))
   return false;
  if(!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(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 == "MC") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if((cardType == "AMEX") && (!isAmericanExpress(cardNumber)))
	  doesMatch = false;
	if((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	if((cardType == "DINERS") && (!isDinersClub(cardNumber)))
		doesMatch = false;
	return doesMatch;
}
