var ccErrorNo = 0;
var ccErrors = ["Unsupported Credit Card Type","No Credit Card Number Supplied","Invalid Credit Card Number Format","Invalid Credit Card Number","Incorrect Number Of Digits In Credit Card Number"];
function checkCreditCard (cardnumber, cardname) {
  var cards =[{name: "VI", length: "13,16", prefixes: "4", checkdigit: true},
                {name: "MA", length: "16", prefixes: "51,52,53,54,55", checkdigit: true},
                {name: "DI", length: "14,16", prefixes: "300,301,302,303,304,305,36,38,55", checkdigit: true},
                {name: "AM", length: "15", prefixes: "34,37", checkdigit: true}]; 
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
  cardnumber = cardnumber.replace (/\s/g, "");
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                 
    var mychar = "";                                  
    var j = 1;                                        
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
      calc = Number(cardNo.charAt(i)) * j;
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
      checksum = checksum + calc;
      if (j ==1) {j = 2} else {j = 1};
    } 
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 
  var prefix = [];
  var lengths = [];
  prefix = cards[cardType].prefixes.split(",");
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  return true;
}