function isCreditCard(cc) {
	// Encoding only works on cards with less than 19 digits
	if ((cc.length < 1) || (cc.length > 19)) return false;
	sum = 0; mul = 1; l = cc.length;
	for (i = 0; i < l; i++) {
		digit = cc.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;
	return false;
}

function isAmericanExpress(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == "3") && ((seconddig == "4") || (seconddig == "7"))) return isCreditCard(cc);
  return false;
}

function isCarteBlanche(cc) {
	firstdig = cc.substring(0,1);
	seconddig = cc.substring(1,2);
	if ((cc.length == 14) && (firstdig == "3") && ((seconddig == "0") || (seconddig == "6") || (seconddig == "8"))) return isCreditCard(cc);
	return false;
}

function isDinersClub(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == "3") && ((seconddig == "0") || (seconddig == "6") || (seconddig == "8"))) return isCreditCard(cc);
  return false;
}

function isDiscover(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011")) return isCreditCard(cc);
	return false
}

function isEnRoute(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) && ((first4digs == "2014") || (first4digs == "2149"))) return isCreditCard(cc);
  return false;
}

function isJCB(cc) {
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && ((first4digs == "3088") || (first4digs == "3096") || (first4digs == "3112") || (first4digs == "3158") || (first4digs == "3337") || (first4digs == "3528"))) return isCreditCard(cc);
  return false;
}

function isMasterCard(cc) {
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == "5") && ((seconddig <= "5") && (seconddig >= "1"))) return isCreditCard(cc);
  return false
}

function isVisa(cc) {
	if (((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == "4")) return isCreditCard(cc);
	return false
}

function isCardMatch (cardNumber, cardType) {
	if ((cardType == "8") && (!isVisa(cardNumber))) return false;
	if ((cardType == "7") && (!isMasterCard(cardNumber))) return false;
	if ((cardType == "6") && (!isJCB(cardNumber))) return false;
	if ((cardType == "5") && (!isEnRoute(cardNumber))) return false;
	if ((cardType == "4") && (!isDiscover(cardNumber))) return false;
	if ((cardType == "3") && (!isDinersClub(cardNumber))) return false;
	if ((cardType == "2") && (!isCarteBlanche(cardNumber))) return false;
	if ((cardType == "1") && (!isAmericanExpress(cardNumber))) return false;
	return true;
}
