function Check(id, type, severity, link)
{
 var el = xGetElementById(id);
 if ((type != "cc") && (type != "ccdate") && (el.value == ''))
 {
  HighlightElement(el, severity);
  return true;
 }

 switch (type)
 {
  case "string" :
    if (CheckString(el)) {HighlightElement(el, "error");} else {DimElement(el);}
   break;
  case "date" :
    if (CheckDate(el)) {HighlightElement(el, "error");} else {DimElement(el);}
   break;
  case "select" :
    if (el.value == 0) {HighlightElement(el, severity);} else {DimElement(el);}
   break;
  case "cc" :
    if (CheckCC(el, xGetElementById(link).value)) {HighlightElement(el, "error");} else {DimElement(el);}
   break;
  case "ccdate" :
    if (CheckCCDate(el, xGetElementById(link).value)) {HighlightElement(el, "error");} else {DimElement(el);}
   break;
  default:
    CheckString(el);
   break;
 }
return true;
}

function HighlightElement(el, ht)
{
 switch (ht)
 {
  case "error" : myxAddClass(el,"invalidvalue");
   break;
  case "warn" : myxAddClass(el,"warnvalue");
   break;
  case "nowarn" :
   break;
  default: myxAddClass(el,"invalidvalue");
   break;
 }
}

function DimElement(el)
{
 myxRemoveClass(el,"invalidvalue");
 myxRemoveClass(el,"warnvalue");
}


function CheckString(el)
{
 var s = el.value;
 return false;
}

function CheckDate(el)
{
 var now = new Date();
 var dateparts = new Array();
 dateparts = el.value.split('/');
 var m = dateparts[0];
 var d = dateparts[1];
 var y = dateparts[2];
 if ((!m) || (!y) || (!d)) {return "invalid date";}
 if ((m == '') || (y == '') || (d == '')) {return "invalid date";}
 if (y < 2000) {return "invalid date";}
 var cd = new Date(y, m-1, d, 23, 59, 59, 999);
 if (cd == null) {return false;}
 //xGetElementById("note").value = cd.getTime() + ' ' + now.getTime();
 if (cd.getTime() < now.getTime())
 {
  //el.value = ''+ parseInt(now.getMonth()+1) + '/' + now.getDate() + '/' + now.getFullYear();
  return true;
 }
 return false;
}

function CheckCC(el, cardType)
{
  var cardNumber = el.value;
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "M":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "V":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "A":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        return false;
//        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1;
      digitCounter >= 0;
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length;
        productDigitCounter++)
      {
        checkSumTotal +=
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return !isValid;
}

function CheckCCDate(el, cardtype) //Month and Year
{
 switch (cardtype)
 {
  case "M":
  case "V":
  case "A":
    var now = new Date();
    var dateparts = new Array();
    dateparts = el.value.split('/');
    var m = dateparts[0];
    var y = dateparts[1];
    if ((!m) || (!y)) {return "invalid date";}
    if ((m == '') || (y == '')) {return "invalid date";}
    if (y < 2000) {return "invalid date";}
    var cd = new Date(y, m-1, 1);
    cd = new Date(y, m-1, cd.getDaysInMonth());
    if (cd == null) {return false;}
    if (cd.getTime() <= now.getTime()) {return "pastdate";}
   break;
  default :
    return false;
   break;
 }
 return false;
}


