function CheckPost(CP)
	{
	if (CP == 1 || CP == 3)
			{
			var vEMail = document.getElementById("ContactEMail").value;
			if (isEmail(vEMail) == false) 
				{
					alert("Please enter a valid email address.");
					document.getElementById("ContactEMail").focus();
					return false;
				}
			if (validateContact() == false)
			{
				return false;		
			}
			}
	if (CP == 1 || CP == 2){
		if (validateCard() == false)
			{
				return false;		
			}
		}
	} 
function validateContact()
{
	var Street = document.getElementById("ContactStreet").value;
	var City = document.getElementById("ContactCity").value;
	var Phone = document.getElementById("ContactPhone").value;
	var CountryID = document.getElementById("ContactCountryID").value; 
	if( Street.length == 0 ) {alert("Please enter your street"); document.getElementById("ContactStreet").focus(); return false;}
	if( City.length == 0 ) {alert("Please enter your city"); document.getElementById("ContactCity").focus(); return false;}
	if( Phone.length == 0 ) {alert("Please enter your phone number"); document.getElementById("ContactPhone").focus(); return false;}
	//dropdown
	if( CountryID == -1 ) {alert("Please select your country"); document.getElementById("ContactCountryID").focus(); return false;}
}
function isEmail(string) 
{
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
		return false;
}
function validateCard() {
	var cardNumber = document.getElementById("cardNumber").value;
	var cardType = document.getElementById("cardType").value;
	var cardMonth = document.getElementById("cardMonth").value;
	var cardYear = document.getElementById("cardYear").value;
	var NameOnCard = document.getElementById("NameOnCard").value;
	
	if( cardNumber.length == 0 ) {	//most of these checks are self explanitory
        alert("Please enter a valid card number.");
        document.getElementById("cardNumber").focus();
        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.\n\n Use only digits. Do not use spaces or hyphens.");
            document.getElementById("cardNumber").focus();
            return false;
        }
    }
        var length = cardNumber.length;			//perform card specific length and prefix tests


            switch( cardType ) {
                case '3':
                    if( length != 15 ) {
                    	alert("Please enter a valid American Express Card number.\n\nAn American Express Card number contains 15 digits.");
                    	return false;
                    }
                    var prefix = parseInt( cardNumber.substring(0,2));
                        if( prefix != 34 && prefix != 37 ) {
                        	alert("Please enter a valid American Express Card number.\n\nAn American Express Card number starts with either 34 or 37.");
                        	document.getElementById("cardNumber").focus();
                        	return false;
                        }
                        break;
                case '5':
                    if( length != 16 ) {
                        alert("Please enter a valid Discover Card number.\n\nA Discover Card number contains 16 digits.");
                        document.getElementById("cardNumber").focus();
                        return false;
                    }
                    var prefix = parseInt( cardNumber.substring(0,4));

                        if( prefix != 6011 ) {
                            alert("Please enter a valid Discover Card number.\n\nA Discover Card number starts with 6011.");
                            document.getElementById("cardNumber").focus();
                            return false;
                        }
                        break;
                case '4':
                    if( length != 14 ) {
                        alert("Please enter a valid Diners Club / Carte Blanche Card number.\n\nThe Card number contains 14 digits.");
                        document.getElementById("cardNumber").focus();
                        return false;
                    }
                    var prefix = parseInt( cardNumber.substring(0,2));

                        if( prefix != 30 && prefix !=36 && prefix !=38 ) {
                            alert("Please enter a valid Diners Club / Carte Blanche Card number.\n\nThe card starts with 30, 36 or 38.");
                            document.getElementById("cardNumber").focus();
                            return false;
                        }
                        break;
                case '2':
                    if( length != 16 ) {
                        alert("Please enter a valid MasterCard number.\n\nA MasterCard number contains 16 digits.");
                        document.getElementById("cardNumber").focus();
                        return false;
                    }
                    var prefix = parseInt( cardNumber.substring(0,2));

                    if( prefix < 51 || prefix > 55) {
                            alert("Please enter a valid MasterCard Card number.\n\nA MasterCard number starts with 51 to 55.");
                            document.getElementById("cardNumber").focus();
                            return false;
                        }
                        break;
				case '1':
                    if( length != 16 && length != 13 ) {
                        alert("Please enter a valid Visa Card number.\n\nA Visa Card number contains either 13 or 16 digits.");
                        document.getElementById("cardNumber").focus();
                        return false;
						}
                    var prefix = parseInt( cardNumber.substring(0,1));
                    if( prefix != 4 ) {
                            alert("Please enter a valid Visa Card number.\n\nA Visa Card number starts with 4.");
                            document.getElementById("cardNumber").focus();
                            return false;
							}
                 break;
					}
		if( !mod10( cardNumber ) ) { 		// run the check digit algorithm
			alert("Sorry! this is not a valid credit card number.");
			document.getElementById("cardNumber").focus();
			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;
			}
		if( NameOnCard.length == 0 ) {	
			alert("Please enter name on card.");
			document.getElementById("NameOnCard").focus();
			return false;}
	return true; // at this point card has not been proven to be invalid
        }
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) {
                  // modified: 2010/02/11, Nathan Dunn - fixed bug on certain dates due to UTC and local timezone differences
            var now = new Date();                                       // this function is designed to be Y2K compliant.
            var expiresIn = new Date(20+year,month-1,1,0,0,0);          // create an expired on date object with valid thru expiration date
            expiresIn.setUTCMonth(expiresIn.getUTCMonth()+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
}