var xmlhttp=false;
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}

function fetchStateDataCheckout(name, target_div, country_id, state_id){ 
    countryCode = document.getElementById(country_id).value;
    currentRegion = '';
    url = BASE_URL+"regions/getStatesByCountryCheckout/"+countryCode+"/"+name+"/"+state_id;
    elem = document.getElementById(target_div);

    elem.innerHTML = "Refreshing ... ";	

    xmlhttp.open("GET", url, true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            elem.innerHTML = xmlhttp.responseText;								
            if(document.getElementById("ShippingAddress_same_address").checked) {
                var BillingAddress_country = document.getElementById("BillingAddress_country").selectedIndex;
                document.getElementById("ShippingAddress_country").options[BillingAddress_country].selected = true;
                document.getElementById("ShippingAddress_country").disabled = true;
                countryCode = document.getElementById("ShippingAddress_country").options[BillingAddress_country].value;
                currentRegion = '';
                url = BASE_URL+"regions/getStatesByCountryCheckout/"+countryCode+"/ShippingAddress/ShippingAddress_state";
                elem = document.getElementById("stateSelectSh");
                elem.innerHTML = "Refreshing ... ";
                xmlhttp.open("GET", url, true);
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState == 4) {
                        elem.innerHTML = xmlhttp.responseText;
                        document.getElementById("ShippingAddress_state").disabled = true;
                        try {
                            var BillingAddress_state = document.getElementById("BillingAddress_state").value;
                            document.getElementById("ShippingAddress_state").value = BillingAddress_state;
                        }
                        catch(exception) {}
                        try {
                            var BillingAddress_state = document.getElementById("BillingAddress_state").selectedIndex;
                            document.getElementById("ShippingAddress_country").options["ShippingAddress_country"].selected = BillingAddress_state;
                        }
                        catch(exception) {}
                    }
                };
                xmlhttp.send(null);
            }
        }
    };
    xmlhttp.send(null);
}

function enableShippingAddressFieldsCheckout(form) {
    if(document.getElementById("ShippingAddressDesappeared").value == "true") {
        return;
    }
    if(document.getElementById("ShippingAddress_same_address").checked) {
        var BillingAddress_address_1 = document.getElementById("BillingAddress_address_1").value;
        document.getElementById("ShippingAddress_address_1").value = BillingAddress_address_1;
        document.getElementById("ShippingAddress_address_1").disabled = true;
        
        var BillingAddress_address_2 = document.getElementById("BillingAddress_address_2").value;
        document.getElementById("ShippingAddress_address_2").value = BillingAddress_address_2;
        document.getElementById("ShippingAddress_address_2").disabled = true;
        
        var BillingAddress_suburb = document.getElementById("BillingAddress_suburb").value;
        document.getElementById("ShippingAddress_suburb").value = BillingAddress_suburb;
        document.getElementById("ShippingAddress_suburb").disabled = true;
        
        var BillingAddress_post_code = document.getElementById("BillingAddress_post_code").value;
        document.getElementById("ShippingAddress_post_code").value = BillingAddress_post_code;
        document.getElementById("ShippingAddress_post_code").disabled = true;
        
        var BillingAddress_city = document.getElementById("BillingAddress_city").value;
        document.getElementById("ShippingAddress_city").value = BillingAddress_city;
        document.getElementById("ShippingAddress_city").disabled = true;
        
        var BillingAddress_country = document.getElementById("BillingAddress_country").selectedIndex;
        document.getElementById("ShippingAddress_country").options[BillingAddress_country].selected = true;
        document.getElementById("ShippingAddress_country").disabled = true;
        countryCode = document.getElementById("ShippingAddress_country").options[BillingAddress_country].value;
        currentRegion = '';
        url = BASE_URL+"regions/getStatesByCountryCheckout/"+countryCode+"/ShippingAddress/ShippingAddress_state";
        elem = document.getElementById("stateSelectSh");
        elem.innerHTML = "Refreshing ... ";
        xmlhttp.open("GET", url, true);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                elem.innerHTML = xmlhttp.responseText;
                document.getElementById("ShippingAddress_state").disabled = true;
                try {
                    var BillingAddress_state = document.getElementById("BillingAddress_state").value;
                    document.getElementById("ShippingAddress_state").value = BillingAddress_state;
                }
                catch(exception) {}
                try {
                    var BillingAddress_state = document.getElementById("BillingAddress_state").selectedIndex;
                    document.getElementById("ShippingAddress_country").options["ShippingAddress_country"].selected = BillingAddress_state;
                }
                catch(exception) {}
            }
        };
        xmlhttp.send(null);
    } else {
        document.getElementById("ShippingAddress_address_1").disabled = false;
        document.getElementById("ShippingAddress_address_2").disabled = false;
        document.getElementById("ShippingAddress_suburb").disabled = false;
        document.getElementById("ShippingAddress_post_code").disabled = false;
        document.getElementById("ShippingAddress_city").disabled = false;
        document.getElementById("ShippingAddress_country").disabled = false;
        document.getElementById("ShippingAddress_state").disabled = false;
    }
}

function validateFormCheckOut() {
    enableShippingAddressFieldsCheckout(null);
    reEmail = /^.+@[^\.].*\.[a-z]{2,}$/i;
    /* check personal details */
    if(document.getElementById("PersonalDetails_FirstName").value == "") {
        alert('First Name field is required');
        document.getElementById("PersonalDetails_FirstName").focus();
        return false;
    }
    if(document.getElementById("PersonalDetails_LastName").value == "") {
        alert('Last Name field is required');
        document.getElementById("PersonalDetails_LastName").focus();
        return false;
    }
    if(document.getElementById("PersonalDetails_Phone").value == "") {
        alert('Phone field is required');
        document.getElementById("PersonalDetails_Phone").focus();
        return false;
    }
    if(document.getElementById("PersonalDetails_Email").value == "") {
        alert('The e-mail address is required');
        document.getElementById("PersonalDetails_Email").focus();
        return false;
    }
    if(reEmail.test(document.getElementById("PersonalDetails_Email").value) == false) {
        alert('The e-mail address you specified is invalid');
        document.getElementById("PersonalDetails_Email").value = "";
        document.getElementById("PersonalDetails_Email").focus();
        return false;
    }
    if(document.getElementById("BillingAddress_address_1").value == "") {
        alert('Billing address 1 field is required');
        document.getElementById("BillingAddress_address_1").focus();
        return false;
    }
    var BillingAddress_country = document.getElementById("BillingAddress_country").selectedIndex;
    if(document.getElementById("BillingAddress_country").options[BillingAddress_country].value == "AU" && document.getElementById("BillingAddress_post_code").value == "") {
        alert('Billing postcode field is required');
        document.getElementById("BillingAddress_post_code").focus();
        return false;
    }
    if(document.getElementById("ShippingAddressDesappeared").value != "true") {
        if(document.getElementById("ShippingAddress_address_1").value == "") {
            alert('Shipping address 1 field is required');
            document.getElementById("ShippingAddress_address_1").focus();
            return false;
        }
        var ShippingAddress_country = document.getElementById("ShippingAddress_country").selectedIndex;
        if(document.getElementById("ShippingAddress_country").options[ShippingAddress_country].value == "AU" && document.getElementById("ShippingAddress_post_code").value == "") {
            alert('Shipping postcode field is required');
            document.getElementById("ShippingAddress_post_code").focus();
            return false;
        }
    }
    for (i=0; i < document.formOrderDetails.elements.length; i++) {
        if (containInvalidChars(document.formOrderDetails[i].value)) {
            alert('Form field contains invalid charater ie: & etc.');
            document.formOrderDetails[i].focus();
            return false;
         }
    }
}
function containInvalidChars (str) {
    //check for ampersand 
    if ( str.indexOf('&') >= 0 ) {
        return true 
    }
    return false;
}
