/*======================================================================*\
|| #################################################################### ||
|| # Script for Credit Card Validation in English Language				||
|| # ---------------------------------------------------------------- # ||
|| # Last Modified: Mohit Malik											||
|| #																	||
|| #################################################################### ||
\*======================================================================*/

function check_card(obj) {
var cardType=obj.cardType.options[obj.cardType.selectedIndex].value;
var cnlen=obj.cardNumber.value.length;
var cardNumber=obj.cardNumber.value;
var secCode = obj.secCode.value;
if (cardType == "") { 
alert('Please select a credit card type.')
obj.cardType.focus();
return false;
}
if (cardType != "") { 
if (obj.cardName.value == "") {
alert('Please enter the name on the credit card.')
obj.cardName.focus();
return false;
 }
if (obj.expDate.value == "") {
alert('Please enter the expiration date of your credit card.')
obj.expDate.focus();
return false;
 }
if (isNaN(obj.expDate.value)) {
alert('Credit Card Expiration date must only contain numbers.')
obj.expDate.focus();
return false;
   }
if (cardNumber == "") {
alert('Please enter your credit card number.')
obj.cardNumber.focus();
return false;
 }
if (cardNumber.indexOf(" ")!=-1) {
alert('Please DO NOT include spaces or dashes in your credit card number.')
obj.cardNumber.focus();
return false;
   }
if (cardNumber.indexOf("-")!=-1) {
alert('Please DO NOT include spaces or dashes in your credit card number.')
obj.cardNumber.focus();
return false;
   }
if (isNaN(cardNumber)) {
alert('Credit Card number must only contain numbers.')
obj.cardNumber.focus();
return false;
   }

if(secCode == "") {
	alert('Please enter security code.');
	obj.secCode.focus();
	return false;
}
if(isNaN(secCode)) {
	alert('Security Code should be numeric.');
	obj.secCode.focus();
	return false;
}
if(secCode.length != 3) {
	alert('Security Code should be of 3 characters.');
	obj.secCode.focus();
	return false;
}

if ((cardType == "American Express") && !(cnlen==15)) { 
bad_card(cardType, obj)
return false;
  }
if (((cardType == "MasterCard") || (cardType == "Discover")) && !(cnlen==16)) { 
bad_card(cardType, obj)
return false;
  }
if ((cardType == "Visa") && !((cnlen==13) || (cnlen==16))) { 
bad_card(cardType, obj)
return false;
  }
ccdgt = new Array();
for (c = 0; c < cnlen; c++) { 
ccdgt[c] = cardNumber.substring(c,c+1);
  }
ccdgta = new Array();
for (c = 0; c < cnlen; c++) { 
ccdgta[c] = ccdgt[c]*2; 
  }
if ((cnlen==13)||(cnlen==15)) {
if (ccdgta[1] >= 10) { 
ccda1=ccdgta[1].toString();
var cc1b = ccda1.substring(0,1);
var cc1c = ccda1.substring(1,2);
var cc1 = parseInt(cc1b)+parseInt(cc1c);
} 
 else {
var cc1 = ccdgta[1];
  }
if (ccdgta[3] >= 10) { 
ccda3=ccdgta[3].toString();
var cc3b = ccda3.substring(0,1);
var cc3c = ccda3.substring(1,2);
var cc3 = parseInt(cc3b)+parseInt(cc3c);
} 
 else {
var cc3 = ccdgta[3];
  }
if (ccdgta[5] >= 10) { 
ccda5=ccdgta[5].toString();
var cc5b = ccda5.substring(0,1);
var cc5c = ccda5.substring(1,2);
var cc5 = parseInt(cc5b)+parseInt(cc5c);
} 
 else {
var cc5 = ccdgta[5];
  }
if (ccdgta[7] >= 10) { 
ccda7=ccdgta[7].toString();
var cc7b = ccda7.substring(0,1);
var cc7c = ccda7.substring(1,2);
var cc7 = parseInt(cc7b)+parseInt(cc7c);
} 
 else {
var cc7 = ccdgta[7];
  }
if (ccdgta[9] >= 10) { 
ccda9=ccdgta[9].toString();
var cc9b = ccda9.substring(0,1);
var cc9c = ccda9.substring(1,2);
var cc9 = parseInt(cc9b)+parseInt(cc9c);
} 
 else {
var cc9 = ccdgta[9];
  }
if (ccdgta[11] >= 10) { 
ccda11=ccdgta[11].toString();
var cc11b = ccda11.substring(0,1);
var cc11c = ccda11.substring(1,2);
var cc11 = parseInt(cc11b)+parseInt(cc11c);
} 
 else {
var cc11 = ccdgta[11];
  }
if (cnlen == 13) { 
ccval = ccdgt[0]+cc1+ccdgt[2]+cc3+ccdgt[4]+cc5+ccdgt[6]+cc7+ccdgt[8]+cc9+ccdgt[10]+cc11+ccdgt[12];
if (ccval != 0) { 
bad_card(cardType, obj)
return false;
  }
 else {
alert('13 digit card is ok.');
obj.cardNumber.focus();
return;
   }
  }
if (ccdgta[13] >= 10) { 
ccda13=ccdgta[13].toString();
var cc13b = ccda13.substring(0,1);
var cc13c = ccda13.substring(1,2);
var cc13 = parseInt(cc13b)+parseInt(cc13c);
} 
 else {
var cc13 = ccdgta[13];
  }
if (cnlen == 15) {
var ccval = parseInt(ccdgt[0])+parseInt(cc1)+parseInt(ccdgt[2])+parseInt(cc3)+parseInt(ccdgt[4])+parseInt(cc5)+parseInt(ccdgt[6])+parseInt(cc7)+parseInt(ccdgt[8])+parseInt(cc9)+parseInt(ccdgt[10])+parseInt(cc11)+parseInt(ccdgt[12])+parseInt(cc13)+parseInt(ccdgt[14]);
ccvalstr=ccval.toString();
if (ccvalstr.substring(1,2) !=0) { 
bad_card(cardType, obj)
return false;
   }
  }
 }
if (ccdgta[0] >= 10) { 
ccda0=ccdgta[0].toString();
var cc0b = ccda0.substring(0,1);
var cc0c = ccda0.substring(1,2);
var cc0 = parseInt(cc0b)+parseInt(cc0c);
} 
 else {
var cc0 = ccdgta[0];
  }
if (ccdgta[2] >= 10) { 
ccda2=ccdgta[2].toString();
var cc2b = ccda2.substring(0,1);
var cc2c = ccda2.substring(1,2);
var cc2 = parseInt(cc2b)+parseInt(cc2c);
} 
 else {
var cc2 = ccdgta[2];
  }
if (ccdgta[4] >= 10) { 
ccda4=ccdgta[4].toString();
var cc4b = ccda4.substring(0,1);
var cc4c = ccda4.substring(1,2);
var cc4 = parseInt(cc4b)+parseInt(cc4c);
} 
 else {
var cc4 = ccdgta[4];
  }
if (ccdgta[6] >= 10) { 
ccda6=ccdgta[6].toString();
var cc6b = ccda6.substring(0,1);
var cc6c = ccda6.substring(1,2);
var cc6 = parseInt(cc6b)+parseInt(cc6c);
} 
 else {
var cc6 = ccdgta[6];
  }
if (ccdgta[8] >= 10) { 
ccda8=ccdgta[8].toString();
var cc8b = ccda8.substring(0,1);
var cc8c = ccda8.substring(1,2);
var cc8 = parseInt(cc8b)+parseInt(cc8c);
} 
 else {
var cc8 = ccdgta[8];
  }
if (ccdgta[10] >= 10) { 
ccda10=ccdgta[10].toString();
var cc10b = ccda10.substring(0,1);
var cc10c = ccda10.substring(1,2);
var cc10 = parseInt(cc10b)+parseInt(cc10c);
} 
 else {
var cc10 = ccdgta[10];
  }
if (ccdgta[12] >= 10) { 
ccda12=ccdgta[12].toString();
var cc12b = ccda12.substring(0,1);
var cc12c = ccda12.substring(1,2);
var cc12 = parseInt(cc12b)+parseInt(cc12c);
} 
 else {
var cc12 = ccdgta[12];
  }
if (ccdgta[14] >= 10) { 
ccda14=ccdgta[14].toString();
var cc14b = ccda14.substring(0,1);
var cc14c = ccda14.substring(1,2);
var cc14 = parseInt(cc14b)+parseInt(cc14c);
} 
 else {
var cc14 = ccdgta[14];
  }
var ccval = parseInt(cc0)+parseInt(ccdgt[1])+parseInt(cc2)+parseInt(ccdgt[3])+parseInt(cc4)+parseInt(ccdgt[5])+parseInt(cc6)+parseInt(ccdgt[7])+parseInt(cc8)+parseInt(ccdgt[9])+parseInt(cc10)+parseInt(ccdgt[11])+parseInt(cc12)+parseInt(ccdgt[13])+parseInt(cc14)+parseInt(ccdgt[15]);
ccvalstr=ccval.toString();
if (ccvalstr.substring(1,2) !=0) { 
bad_card(cardType, obj)
return false;
  }
 }
//alert('Your credit card information has passed verification.')
return true;
 }
 
function bad_card(ctype, obj) {
alert('You have entered an invalid '+ctype+ ' credit card number, please verify.')
obj.cardNumber.focus();
}
