<!--
/* Validates the fields for a credit card form.
Fields must be named like:
	CardName
	CreditCardType
	CardNumber
	CardExpM
	CardExpY
	CardSecurityCode
*/
function ValidateCC(frm){
	if (Trim(frm.CardName.value) == "") {
		alert("Please enter the name on credit card.");
		frm.CardName.focus();
		return false;
	}
	if (frm.CreditCardType.selectedIndex == 0) {
		alert("Please select the Credit Card type.");
		frm.CreditCardType.focus();
		return false;
	}
	if (Trim(frm.CardNumber.value) == "") {
		alert("Please fill in the Credit Card Number field.");
		frm.CardNumber.focus();
		return false;
	}
	if (isNaN(parseInt(new Number(frm.CardNumber.value)))) {
		alert("The Credit Card Number field may not contain spaces, non-numeric characters, or dashes.");
		frm.CardNumber.focus();
		return false;
	}
	var checkOK = "0123456789";
	var checkStr = frm.CardNumber.value;
	var allValid = true;
	var validGroups = true;
	var decPoints = 0;
	var allNum = "";
	for (i = 0;  i < checkStr.length;  i++) {
		ch = checkStr.charAt(i);
		for (j = 0;  j < checkOK.length;  j++)
			if (ch == checkOK.charAt(j)) break;
		if (j == checkOK.length) {
			allValid = false;
			break;
		}
		if (ch == ".") {
			allNum += ".";
			decPoints++;
		} else if (ch == "," && decPoints != 0)	{
			validGroups = false;
			break;
		} else if (ch != ",")
			allNum += ch;
	}
	if (!allValid) {
		alert("Please enter only digit characters in the Credit Card Number field.");
		frm.CardNumber.focus();
		return false;
	}
	if (decPoints > 1 || !validGroups || !CheckCC(checkStr,frm)) {
		alert("Please enter a valid number in the Credit Card Number field.");
		frm.CardNumber.focus();
		return false;
	}
	if (frm.CreditCardType.selectedIndex != 0 && CheckCC(checkStr,frm)=="wrongtype") {
		alert("This looks like a "+cardType+" card number, not a "+ frm.CreditCardType.options[frm.CreditCardType.selectedIndex].value +" card number.");
		frm.CreditCardType.focus();
		return false;
	}
	if (frm.CreditCardType.selectedIndex != 0 && CheckCC(checkStr,frm)=="unknowntype") {
		alert("This is not a "+ frm.CreditCardType.options[frm.CreditCardType.selectedIndex].value +" card number.");
		frm.CreditCardType.focus();
		return false;
	}
	if (Trim(frm.CardSecurityCode.value) != "" && isNaN(parseInt(new Number(frm.CardSecurityCode.value)))) {
		alert("Please use only digits for Credit Card Security Code field.");
		frm.CardSecurityCode.focus();
		return false;
	}
	if (frm.CardExpM.selectedIndex==0){alert("Please select the month for Credit Card expiration.");frm.CardExpM.focus();return false}
	else if (frm.CardExpY.selectedIndex==0){alert("Please select the year for Credit Card expiration.");frm.CardExpY.focus();return false}
	else{
		var today = new Date();
		var month = parseInt(new Number(frm.CardExpM.options[frm.CardExpM.selectedIndex].value));
		var year = parseInt(new Number(new String(frm.CardExpY.options[frm.CardExpY.selectedIndex].text)));
		var expiry = new Date(year,month);
		if (today.getTime() > expiry.getTime()){alert("The credit card is expired.");frm.CardExpM.focus();return false;}
	}
	
	return true;
}



/* Validates the credit card number.
Boolean CheckCC([String CardNumber],form)
Returns true if card Number passes the luhn check else returns false.
*/

//value that holds the creditcard type
var cardType = new String("");

function CheckCC(Number,frm) {
	cardType = "";
	var digArr = new Array();
	var givenCardType = new String(frm.CreditCardType.options[frm.CreditCardType.selectedIndex].value);
	var CardNumber = new String(Number);
	var no_digit = CardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;
	for (var count = 0; count < no_digit; count++) {
		var digit = parseInt(CardNumber.charAt(count));
		digArr[count] = digit;
		if (!((count & 1) ^ oddoeven)) {
		digit *= 2;
		if (digit > 9)
			digit -= 9;
		}
		sum += digit;
	}
	if (sum % 10 == 0){
		if (no_digit==13){
			if (digArr[0]==4) cardType = "VISA";
		}
		if (no_digit==16){
			if (digArr[0]==4) cardType = "VISA";
			if (digArr[0]==5&&(digArr[1]==1||digArr[1]==2||digArr[1]==3||digArr[1]==4||digArr[1]==5)) cardType = "MasterCard";
			if (digArr[0]==6&&digArr[1]==0&&digArr[2]==1&&digArr[3]==1) cardType = "Discover";
		}
		if (no_digit==15){
			if (digArr[0]==3&&(digArr[1]==4||digArr[1]==7)) cardType = "American Express";
		}
		if(cardType ==""){
			return "unknowntype";
		}else if(cardType.toLowerCase() != givenCardType.toLowerCase() && cardType!=""){
			return "wrongtype";
		}else return true;
	}else
		return false;
}
//-->
