/*======================================================================*\
|| #################################################################### ||
|| # Script for Credit Card Validation									||
|| # ---------------------------------------------------------------- # ||
|| # Last Modified: Mohit Malik											||
|| #																	||
|| #################################################################### ||
\*======================================================================*/

function check_card(obj) {
var res = '';
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 == "" || 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 && secCode.length != 4) {
		alert('Security Code should contain either 3 or 4 characters.');
		obj.secCode.focus();
		return false;
	}

	if ((cardType == "americanexpress") && !(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;
	  }
		
	if(cardType == "visa")
	{
		// Visa: length 16, prefix 4, dashes optional.
		var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	}
	else if(cardType == "mastercard")
	{
		// Mastercard: length 16, prefix 51-55, dashes optional.
		var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	}
	else if(cardType == "discover")
	{
		// Discover: length 16, prefix 6011, dashes optional.
		var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
	}
	else if(cardType == "americanexpress")
	{
		// American Express: length 15, prefix 34 or 37.
		var re = /^3[4,7]\d{13}$/;
	}
	if(!re.test(cardNumber))
	{
		bad_card(cardType, obj);
		return false;
	}

	}
	return true;
}
 
function bad_card(ctype, obj) {
alert('You have entered an invalid '+ctype+ ' credit card number, please verify.')
obj.cardNumber.focus();
}
