// JavaScript Document

    function makeRequest(url, inner_func, other_arg) {
        var http_request = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function() { alertContents(http_request, inner_func, other_arg); };
        http_request.open('GET', url, true);
        http_request.send(null);
    }
	
	function makePostRequest(url, inner_func, snd, other_arg) {
        var http_request = false;
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        
		http_request.onreadystatechange = function() { alertContents(http_request, inner_func, other_arg); };
		http_request.open('POST', url, true);
		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http_request.setRequestHeader("Content-length", snd.length);
      	http_request.setRequestHeader("Connection", "close");
      	http_request.send(snd);

    }

	function alertContents(http_request, inner_func, other_arg) {
		//alert('http_request.readyState-'+http_request.readyState);
		if (http_request.readyState == 4) {
			//alert('http_request.status-'+http_request.status);
			if (http_request.status == 200) {
				inner_func(http_request.responseText, other_arg);
				document.getElementById('loading').style.display='none';
			} else {
				alert('There was a problem with the request.');
			}
		}
    }
	

function postAddress(obj, url) {
	var poststr = "street1=" + encodeURI( document.getElementById("street1").value ) + 
				  "&street2=" + encodeURI( document.getElementById("street2").value ) + 
				  "&street3=" + encodeURI( document.getElementById("street3").value ) + 
				  "&streetB1=" + encodeURI( document.getElementById("streetB1").value ) + 
				  "&streetB2=" + encodeURI( document.getElementById("streetB2").value ) + 
				  "&streetB3=" + encodeURI( document.getElementById("streetB3").value ) + 
				  "&city=" + encodeURI( document.getElementById("city").value ) +
				  "&cityB=" + encodeURI( document.getElementById("cityB").value ) +
				  "&company=" + encodeURI( document.getElementById("company").value ) +
				  "&companyB=" + encodeURI( document.getElementById("companyB").value ) +
				  "&country=" + encodeURI( document.getElementById("country").value ) +
				  "&countryB=" + encodeURI( document.getElementById("countryB").value ) +
				  "&dt_phone=" + encodeURI( document.getElementById("dt_phone").value ) +
				  "&dt_phoneB=" + encodeURI( document.getElementById("dt_phoneB").value ) +
				  "&fname=" + encodeURI( document.getElementById("fname").value ) +
				  "&fnameB=" + encodeURI( document.getElementById("fnameB").value ) +
				  "&lname=" + encodeURI( document.getElementById("lname").value ) +
				  "&lnameB=" + encodeURI( document.getElementById("lnameB").value ) +
				  "&mname=" + encodeURI( document.getElementById("mname").value ) +
				  "&mnameB=" + encodeURI( document.getElementById("mnameB").value ) +
				  "&phone=" + encodeURI( document.getElementById("phone").value ) +
				  "&phoneB=" + encodeURI( document.getElementById("phoneB").value ) +
				  "&state=" + encodeURI( document.getElementById("state").value ) +
				  "&stateB=" + encodeURI( document.getElementById("stateB").value ) +
				  "&zip=" + encodeURI( document.getElementById("zip").value ) +
				  "&zipB=" + encodeURI( document.getElementById("zipB").value ) +
				  "&order_total=" + encodeURI( document.getElementById("order_total").value ) + 
				  "&step1=" + encodeURI( document.getElementById("step1").value ) + 
				  "&allDone=" + encodeURI( document.getElementById("allDone").value ) + 
				  "&card_number_1=" + encodeURI( document.getElementById("card_number_1").value ) + 
				  "&card_number_2=" + encodeURI( document.getElementById("card_number_2").value ) + 
				  "&card_number_3=" + encodeURI( document.getElementById("card_number_3").value ) + 
				  "&card_number_4=" + encodeURI( document.getElementById("card_number_4").value ) + 
				  "&card_type=" + encodeURI( document.getElementById("card_type").value ) +
				  "&exp_year=" + encodeURI( document.getElementById("exp_year").value ) +
				  "&exp_month=" + encodeURI( document.getElementById("exp_month").value ) +
				  "&allDone=" + encodeURI( document.getElementById("allDone").value ) + 
				  "&delivery_charge=" + encodeURI( document.getElementById("delivery_charge").value ) + 
				  "&to_country=" + encodeURI( document.getElementById("to_country").value ) + 
				  "&ship_method=" + encodeURI( document.getElementById("ship_method").value ) + 
				  "&pay_method=" + encodeURI( document.getElementById("pay_method").value ) +
				  "&cvv=" + encodeURI( document.getElementById("cvv").value ) +
				  "&register=" + encodeURI( document.getElementById("register").value ) +
				  "&e_mail=" + encodeURI( document.getElementById("e_mail").value ) +
				  "&passwd=" + encodeURI( document.getElementById("passwd").value );
	makePostRequest(url, checkout, poststr);
}

function checkoutLogin(obj, url) {
	var poststr = "login2=" + encodeURI( document.getElementById("login2").value )+
				  "&password2=" + encodeURI( document.getElementById("password2").value );
	makePostRequest(url, chk_login, poststr);
	alert(poststr);
}

function postCoupon(obj, url) {
	var poststr = "order_total=" + encodeURI( document.getElementById("order_total").value ) + 
				  "&delivery_charge=" + encodeURI( document.getElementById("delivery_charge").value ) + 
				  "&to_country=" + encodeURI( document.getElementById("to_country").value ) + 
				  "&ship_method=" + encodeURI( document.getElementById("ship_method").value ) + 
				  "&card_number_1=" + encodeURI( document.getElementById("card_number_1").value ) + 
				  "&card_number_2=" + encodeURI( document.getElementById("card_number_2").value ) + 
				  "&card_number_3=" + encodeURI( document.getElementById("card_number_3").value ) + 
				  "&card_number_4=" + encodeURI( document.getElementById("card_number_4").value ) +
				  "&card_type=" + encodeURI( document.getElementById("card_type").value ) +
				  "&exp_year=" + encodeURI( document.getElementById("exp_year").value ) +
				  "&exp_month=" + encodeURI( document.getElementById("exp_month").value ) +
				  "&allDone=" + encodeURI( document.getElementById("allDone").value ) +
				  "&coupon=" + encodeURI( document.getElementById("coupon").value ) +
				  "&pay_method=" + encodeURI( document.getElementById("pay_method").value ) +
				  "&cvv=" + encodeURI( document.getElementById("cvv").value );
	makePostRequest(url, checkout, poststr);
}

function postCCard(obj, url) {
	var poststr = "order_total=" + encodeURI( document.getElementById("order_total").value ) + 
				  "&delivery_charge=" + encodeURI( document.getElementById("delivery_charge").value ) +
				  "&to_country=" + encodeURI( document.getElementById("to_country").value ) + 
				  "&ship_method=" + encodeURI( document.getElementById("ship_method").value ) + 
				  "&card_number_1=" + encodeURI( document.getElementById("card_number_1").value ) + 
				  "&card_number_2=" + encodeURI( document.getElementById("card_number_2").value ) + 
				  "&card_number_3=" + encodeURI( document.getElementById("card_number_3").value ) + 
				  "&card_number_4=" + encodeURI( document.getElementById("card_number_4").value ) + 
				  "&card_type=" + encodeURI( document.getElementById("card_type").value ) +
				  "&exp_year=" + encodeURI( document.getElementById("exp_year").value ) + 
				  "&exp_month=" + encodeURI( document.getElementById("exp_month").value ) +
				  "&coupon=" + encodeURI( document.getElementById("coupon").value ) +
				  "&pay_method=" + encodeURI( document.getElementById("pay_method").value ) +
				  "&allDone=" + encodeURI( document.getElementById("allDone").value ) + 
				  "&cvv=" + encodeURI( document.getElementById("cvv").value );
	makePostRequest(url, checkout, poststr);
}

function contactUs(obj, url){
	var poststr = "y_name=" + encodeURI( document.getElementById("y_name").value ) + 
				  "&y_email=" + encodeURI( document.getElementById("y_email").value ) +
				  "&y_phone=" + encodeURI( document.getElementById("y_phone").value ) + 
				  "&y_subject=" + encodeURI( document.getElementById("y_subject").value ) + 
				  "&y_message=" + encodeURI( document.getElementById("y_message").value );
	makePostRequest(url, contact_us, poststr);
}

function chk_login(){}

function choose_country(content){
	document.getElementById("country_list").innerHTML = content;
}

function choose_country_recalc(content){
	document.getElementById("country_list").innerHTML = content;
	reCalculate(document.ff1.new_deliv_chrg.value);
}

function checkout(content){
	document.getElementById("checkout_frame").innerHTML = content;
}

function contact_us(content){
	document.getElementById("contact_us_form").innerHTML = content;
}

function showStates(content){
	document.getElementById("states").innerHTML = content;
}

function showStatesB(content){
	document.getElementById("statesB").innerHTML = content;
}

function useCoupon(content){
	if(content!=""){
		document.getElementById("coupon_rows").innerHTML = content;
	}
}

function sum(a, b) {
  var res = Number(a) + Number(b);
  return round_decimals(res, 2);
}

function reCalculate(sss){
	document.getElementById("delivery").innerHTML=sss;
	document.getElementById("delivery_charge").value=sss;
	document.ff1.order_total.value = sum(document.ff1.total.value,sss);
	document.getElementById("order_total_field").innerHTML = sum(document.ff1.total.value,sss);
	return true;
}

function round_decimals(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return pad_with_zeros(result3, decimals)
}

function pad_with_zeros(rounded_value, decimal_places) {

    // Convert the number to a string
    var value_string = rounded_value.toString()
    
    // Locate the decimal point
    var decimal_location = value_string.indexOf(".")

    // Is there a decimal point?
    if (decimal_location == -1) {
        
        // If no, then all decimal places will be padded with 0s
        decimal_part_length = 0
        
        // If decimal_places is greater than zero, tack on a decimal point
        value_string += decimal_places > 0 ? "." : ""
    }
    else {

        // If yes, then only the extra decimal places will be padded with 0s
        decimal_part_length = value_string.length - decimal_location - 1
    }
    
    // Calculate the number of decimal places that need to be padded with 0s
    var pad_total = decimal_places - decimal_part_length
    
    if (pad_total > 0) {
        
        // Pad the string with 0s
        for (var counter = 1; counter <= pad_total; counter++) 
            value_string += "0"
        }
    return value_string
}
