var controlform2;
function CheckPost(CP, controlform) {
    controlform2 = controlform;
    var isCRPValid;
    isCRPValid = false;

    var isCRPIncorrectcode;
    isCRPIncorrectcode = false;

    var txtCRP;
    txtCRP = document.getElementsByName(controlform2 + "txtCRP");

    if (txtCRP != null && txtCRP.length > 0) {
        if (txtCRP.item(0).value != "") {
            var txtCRPUpperCase = txtCRP.item(0).value.toUpperCase();
            if (txtCRPUpperCase == 'MEDIAAJ' || txtCRPUpperCase == 'MEDIACC' || txtCRPUpperCase == 'AUSVIP' || txtCRPUpperCase == 'INTNLVIP' || txtCRPUpperCase == 'NZFWPS' || txtCRPUpperCase == 'CRPHO') {
                isCRPValid = true;
            }
            else {
                isCRPIncorrectcode = true;
            }
        }
    }
    if (isCRPValid == true) {
        return true;
    }
    else if (isCRPIncorrectcode == true) {
        alert("Please enter correct code.");
        txtCRP.item(0).focus();
        return false;
    }

    if (CP == 1 || CP == 3) {
        if (document.getElementsByName(controlform2 + "chkAgreeTerms") != null && document.getElementsByName(controlform2 + "chkAgreeTerms").length > 0) {
            var Terms = document.getElementsByName(controlform2 + "chkAgreeTerms").item(0).checked;
            if (!Terms) {
                alert("Please indicate you accept terms and condictions by checking the tickbox.");
                document.getElementsByName(controlform2 + "chkAgreeTerms").item(0).focus();
                return false;
            }
        }
        if (document.getElementsByName(controlform2 + "ContactEMail") != null && document.getElementsByName(controlform2 + "ContactEMail").length > 0) {
            var vEMail = document.getElementsByName(controlform2 + "ContactEMail").item(0).value;
            if (isEmail(vEMail) == false) {
                alert("Please enter a valid email address.");
                document.getElementsByName(controlform2 + "ContactEMail").item(0).focus();
                return false;
            }
        }
        if (validateContact() == false) {
            return false;
        }
    }
    if (CP == 1 || CP == 2) {
        if (validateCard() == false) {
            return false;
        }
    }
}
function validateContact() {
    if (document.getElementsByName(controlform2 + "ContactStreet") != null && document.getElementsByName(controlform2 + "ContactStreet").length > 0) {
        var Street = document.getElementsByName(controlform2 + "ContactStreet").item(0).value;
        if (Street.length == 0) { alert("Please enter your street"); document.getElementsByName(controlform2 + "ContactStreet").item(0).focus(); return false; }
    }
    if (document.getElementsByName(controlform2 + "ContactCity") != null && document.getElementsByName(controlform2 + "ContactCity").length > 0) {
        var City = document.getElementsByName(controlform2 + "ContactCity").item(0).value;
        if (City.length == 0) { alert("Please enter your city"); document.getElementsByName(controlform2 + "ContactCity").item(0).focus(); return false; }
    }
    if (document.getElementsByName(controlform2 + "ContactPhone") != null && document.getElementsByName(controlform2 + "ContactPhone").length > 0) {
        var Phone = document.getElementsByName(controlform2 + "ContactPhone").item(0).value;
        if (Phone.length == 0) { alert("Please enter your phone number"); document.getElementsByName(controlform2 + "ContactPhone").item(0).focus(); return false; }
    }
    if (document.getElementsByName(controlform2 + "ContactCountryID") != null && document.getElementsByName(controlform2 + "ContactCountryID").length > 0) {
        var CountryID = document.getElementsByName(controlform2 + "ContactCountryID").item(0).value;
        //dropdown
        if (CountryID == -1) { alert("Please select your country"); document.getElementsByName(controlform2 + "ContactCountryID").item(0).focus(); return false; }
    }
    if (document.getElementsByName(controlform2 + "ApprovedCharge") != null && document.getElementsByName(controlform2 + "ApprovedCharge").length > 0) {
        var ApprovedCharge = document.getElementsByName(controlform2 + "ApprovedCharge").item(0).value;
        //dropdown
        if (ApprovedCharge.length == 0) { alert("Please enter your approved charge to your card"); document.getElementsByName(controlform2 + "ApprovedCharge").item(0).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 txtCCCardNo = document.getElementsByName(controlform2 + 'cardNumber');
    var ddlCCCardType = document.getElementsByName(controlform2 + 'cardType');
    var ddlCCExpMonth = document.getElementsByName(controlform2 + 'cardMonth');
    var ddlCCExpYear = document.getElementsByName(controlform2 + 'cardYear');
    var txtCCCardName = document.getElementsByName(controlform2 + 'NameOnCard');

    if (txtCCCardNo != null && txtCCCardNo.length > 0 && ddlCCCardType != null && ddlCCCardType.length > 0 && ddlCCExpMonth != null && ddlCCExpMonth.length > 0 && ddlCCExpYear != null && ddlCCExpYear.length > 0 && txtCCCardName != null && txtCCCardName.length > 0) {
        var cardNumber = txtCCCardNo.item(0).value;
        var cardType = ddlCCCardType.item(0).value;
        var cardMonth = ddlCCExpMonth.item(0).value;
        var cardYear = ddlCCExpYear.item(0).value;
        var NameOnCard = txtCCCardName.item(0).value;

        if (cardNumber.length == 0) {	//most of these checks are self explanitory
            alert("Please enter a valid card number.");
            txtCCCardNo.item(0).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.");
                txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).focus();
                    return false;
                }
                break;
            case '2':
                if (length != 16) {
                    alert("Please enter a valid MasterCard number.\n\nA MasterCard number contains 16 digits.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).focus();
                    return false;
                }
                break;
            case '6':
                if (length != 15 && length != 16) {
                    alert("Please enter a valid JCB number.\n\nA JCB number contains either 15 or 16 digits.");
                    txtCCCardNo.item(0).focus();
                    return false;
                }
                var prefix = parseInt(cardNumber.substring(0, 2));

                if (prefix != 3 && prefix != 1800 && prefix != 2131) {
                    alert("Please enter a valid JCB Card number.\n\nA JCB number starts with 3, 1800 or 2131.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).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.");
                    txtCCCardNo.item(0).focus();
                    return false;
                }
                break;
        }
        if (!mod10(cardNumber)) { 		// run the check digit algorithm
            alert("Sorry! this is not a valid credit card number.");
            txtCCCardNo.item(0).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.");
            txtCCCardName.item(0).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) {
    var now = new Date(); 						// this function is designed to be Y2K compliant.
    var expiresIn = new Date(20 + 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
}
