function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;


    	for( i = 0; i < cardNumber.length; ++i ) {
    		ar[i] = parseInt(cardNumber.charAt(i));
    	}
    	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
    		ar[i] *= 2;							 // every second digit starting with the right most (check digit)
    		if( ar[i] > 9 ) ar[i]-=9;			 // will be doubled, and summed with the skipped digits.
    	}										 // if the double digit is > 9, ADD those individual digits together 


        	for( i = 0; i < ar.length; ++i ) {
        		sum += ar[i];						 // if the sum is divisible by 10 mod10 succeeds
        	}
        	return (((sum%10)==0)?true:false);	 	
    }



        function expired( month, year ) {
        	var now = new Date();							// this function is designed to be Y2K compliant.
        	var expiresIn = new Date(year,month,0,0,0);		// create an expired on date object with valid thru expiration date
        	expiresIn.setMonth(expiresIn.getMonth()+1);		// adjust the month, to first day, hour, minute & second of expired month
        	if( now.getTime() < expiresIn.getTime() ) return false;
        	return true;									// then we get the miliseconds, and do a long integer comparison
    }


function validateCard(cardNumber,cardType) {
	if( cardNumber.length == 0 ) {						//most of these checks are self explanitory
		alert("Please enter a valid card number.");
		return false;				
	}
	for( var i = 0; i < cardNumber.length; ++i ) {		// make sure the number is all digits.. (by design)
		var c = cardNumber.charAt(i);


			if( c < '0' || c > '9' ) {
				alert("Please enter a valid card number. Use only digits. Do not use spaces or hyphens.");
				return false;
			}
		}
		var length = cardNumber.length;			//perform card specific length and prefix tests


			switch( cardType ) {
				case 'a':


						if( length != 15 ) {
							alert("Please enter a valid American Express Card number.");
							return false;
						}
						var prefix = parseInt( cardNumber.substring(0,2));


							if( prefix != 34 && prefix != 37 ) {
								alert("Please enter a valid American Express Card number.");
								return false;
							}
							break;
								case 'm':


										if( length != 16 ) {
											alert("Please enter a valid MasterCard number.");
											return false;
										}
										var prefix = parseInt( cardNumber.substring(0,2));


											if( prefix < 51 || prefix > 55) {
												alert("Please enter a valid MasterCard Card number.");
												return false;
											}
											break;
										case 'v':



												if( length != 16 && length != 13 ) {
													alert("Please enter a valid Visa Card number.");
													return false;
												}
												var prefix = parseInt( cardNumber.substring(0,1));


													if( prefix != 4 ) {
														alert("Please enter a valid Visa Card number.");
														return false;
													}
													break;
											}
											if( !mod10( cardNumber ) ) { 		// run the check digit algorithm
												alert("Sorry! this is not a valid credit card number.");
												return false;
											}
											/*if( expired( cardMonth, cardYear ) ) {							// check if entered date is already expired.
												alert("Sorry! The expiration date you have entered would make this card invalid.");
												return false;
											}*/
											
											return true; // at this point card has not been proven to be invalid
									}