function validateCard (strNum, strType, intExpMonth, intExpYear) {
    if (isValidCardNumber(strNum) && isCardTypeCorrect(strNum, strType)) {
        //alert("Valid Card!");
        return true;
    }
    else {  
        //alert("Invalid Card!");
        return false;
    }
}

function isValidCardNumber (strNum) {
   var nCheck = 0;
   var nDigit = 0;
   var bEven  = false;
   
   for (n = strNum.length - 1; n >= 0; n--) {
      var cDigit = strNum.charAt (n);
      if (isDigit (cDigit)) {
         var nDigit = parseInt(cDigit, 10);
         if (bEven) {
            if ((nDigit *= 2) > 9) {
               nDigit -= 9;
            }
         }
         nCheck += nDigit;
         bEven = ! bEven;
      }
      else if (cDigit != ' ' && cDigit != '.' && cDigit != '-') {
         return false;
      }
   }
   return (nCheck % 10) == 0;
}

function isDigit (c) {
   var strAllowed = "1234567890";
   return (strAllowed.indexOf (c) != -1);
}

function isCardTypeCorrect (strNum, strType) {
   var nLen = 0;
   for (n = 0; n < strNum.length; n++) {
      if (isDigit (strNum.substring (n,n+1))) {
         ++nLen;
      }
   }
   
   if (strType == 'VISA') {
      return ((strNum.substring(0,1) == '4') && (nLen == 13 || nLen == 16));
   }
   else if (strType == 'MC') {
      return ((strNum.substring(0,2) == '51' || strNum.substring(0,2) == '52'
              || strNum.substring(0,2) == '53' || strNum.substring(0,2) == '54'
              || strNum.substring(0,2) == '55') && (nLen == 16));
   }
   else if (strType == 'DISC') {
      return ((strNum.substring(0,1) == '6' && (nLen == 16)));
   }
   else if (strType == 'AMEX') {
      return ((strNum.substring(0,2) == '34' || strNum.substring(0,2) == '37') && (nLen == 15));
   }

   return false;
}


