function mod10( ccNum ) { 
	var ar = new Array( ccNum.length );
	var i = 0,sum = 0;


    	for( i = 0; i < ccNum.length; ++i ) {
    		ar[i] = parseInt(ccNum.charAt(i));
    	}
    	for( i = ar.length -2; i >= 0; i-=2 ) { 
    		ar[i] *= 2;							 
    		if( ar[i] > 9 ) ar[i]-=9;	
    	}									


        	for( i = 0; i < ar.length; ++i ) {
        		sum += ar[i];						
        	}
        	return (((sum%10)==0)?true:false);	 	
    }


        function expired( month, year ) {
        	var now = new Date();							
        	var expiresIn = new Date(year,month,0,0,0);	
        	expiresIn.setMonth(expiresIn.getMonth()+1);	
        	if( now.getTime() < expiresIn.getTime() ) return false;
        	return true;								
    }


        function validateCard(ccNum,ccType,ccExpMo,ccExpYr) {
        	if( ccNum.length == 0 ) {					
        		alert("Please enter a valid card number.");
        		return false;				
        	}
        	for( var i = 0; i < ccNum.length; ++i ) {	
        		var c = ccNum.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 = ccNum.length;		


                	switch( ccType ) {
                		case 'AmEx':


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


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


                            			if( length != 16 ) {
                            				alert("Please enter a valid Discover Card number.");
                            				return false;
                            			}
                            			var prefix = parseInt( ccNum.substring(0,4));


                                			if( prefix != 6011 ) {
                                				alert("Please enter a valid Discover Card number.");
                                				return false;
                                			}
                                			break;
                                		case 'MasterCard':


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


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


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


                                                			if( prefix != 4 ) {
                                                				alert("Please enter a valid Visa Card number.");
                                                				return false;
                                                			}
                                                			break;
                                                	}
                                                	if( !mod10( ccNum ) ) { 		// run the check digit algorithm
                                                		alert("Sorry! this is not a valid credit card number.");
                                                		return false;
                                                	}
                                                	if( expired( ccExpMo, ccExpYr ) ) {						
                                                		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
                                            }
