<!--- validate credit card number --->
function validatecard(cardtype,cardnumber) {
//	alert("cardtype = " + cardtype);
	if (cardnumber.length<15) return false;
	if (cardnumber.length==0) return true
	else {
	switch (cardtype) {
		case "VISA": //Visa
//			alert("VISA:cardtype = " + cardtype);
//			alert("leading digit: " + (cardnumber.charAt(0)=="4")); 
//			alert("mod10 " + mod10(cardnumber));
//			alert("length " + ((cardnumber.length==13) || (cardnumber.length==16)));
			return (cardnumber.charAt(0)=="4") && mod10(cardnumber) && ((cardnumber.length==13) || (cardnumber.length==16));
			break;
		case "Mastercard": //Mastercard
//			alert("Mastercard:cardtype = " + cardtype);
//			alert(cardnumber.substring(0,2));
			return Number(cardnumber.substring(0,2))>=51 && Number(cardnumber.substring(0,2))<=55 && mod10(cardnumber) && (cardnumber.length==16);
			break;
		case "American Express": //Amex
//			alert("American Express:cardtype = " + cardtype);
//			alert("leading digit: " + (Number(cardnumber.substring(0,2))==34 || Number(cardnumber.substring(0,2))==37)); 
//			alert("mod10 " + mod10(cardnumber));
//			alert("length " + (cardnumber.length==15));
			return (Number(cardnumber.substring(0,2))==34 || Number(cardnumber.substring(0,2))==37) && mod10(cardnumber) && (cardnumber.length==15);
			break;
		case "Discover": //Discover
//			alert("Discover:cardtype = " + cardtype);
			return (cardnumber.substring(0,4)=="6011") && mod10(cardnumber) && (cardnumber.length==16);
			break;
		case "DinersClub": // DinersClub & CarteBlanche
//			alert("DinersClub:cardtype = " + cardtype);
			return ((cardnumber.substring(0,2)=="36")||(cardnumber.substring(0,2)=="38")||((Number(cardnumber.substring(0,3))>=300)&&(Number(cardnumber.substring(0,3))<=305)) ) && mod10(cardnumber) && (cardnumber.length==14);
			break;
		default:
//			alert("default:cardtype = " + cardtype);
			return false;
			break;
		}
	}
}

	function mod10(inputstr) {
		checksum = 0;
		for (i=0;i<inputstr.length;i++) {
			k = inputstr.length-i-1
			if (Math.floor(i/2) == i/2) checksum = checksum + Number(inputstr.charAt(k))
					 else {
						substr = " " + (2 * Number(inputstr.charAt(k)));
						for (j=0;j<substr.length;j++) {
							checksum = checksum + Number(substr.charAt(j));
							}
						}
			}
	//	alert('checksum = ' + checksum + ' Result = ' + (checksum/10)==Math.floor(checksum/10));
		return (checksum/10)==Math.floor(checksum/10);
	}
