// make ajax request object function createRequestObject() { var requestObject; var browser = navigator.appName; if (browser == "Microsoft Internet Explorer") { requestObject = new ActiveXObject("Microsoft.XMLHTTP"); } else { requestObject = new XMLHttpRequest(); } return requestObject; } // declare a variable for the request object var http = createRequestObject(); var distance,mileage,directions,state; var tooFar = 0; var invalidZip = 0; var cost = 0; // send the zipcode function getMileage() { var zipcode = document.getElementById('zipcode').value; if (zipcode > 0 && zipcode.match(/^\d{5}$/)) { toggleSubmit("off"); if (GBrowserIsCompatible()) { getState(zipcode); // setup distance query from google api directions = new GDirections(); directions.load('17603 to ' + document.getElementById('zipcode').value); if (navigator.userAgent.indexOf("Opera") != -1) { GEvent.addListener(directions, "load", getMileagePrice()); } else { GEvent.addListener(directions, "load", getMileagePrice); } } else { alert ("Your web browser is incompatible with this website! \nPlease upgrade to one of: \nFirefox 1 or newer \nInternet Explorer 6 or newer \nSafari 3 or newer \nOpera 9 or newer"); } } else { getAPrice(); } } // toggles submit button function toggleSubmit(action) { switch(action) { case "on": document.getElementById('submitButton').disabled = false; break; case "off": document.getElementById('submitButton').disabled = true; break; default: alert ("Action: " + action + " is not a valid action"); break; } } function getMileagePrice() { // disable submit button so the impatient don't cause problems // need a way to timeout the google query in case we have connection problems toggleSubmit("off"); distance = directions.getDistance().meters; var miles = distance / 1609.344; miles = miles.toFixed(0); // if less than 400 miles, we're good to go if (miles <= 400 ) { // get a charged shipping distance if (miles - 20 < 0) { var mileage = 0; } else { var mileage = miles - 20; } // calculate the cost if (Number(Shed.Shed_width) >= Number(Shed.Shed_depth)) { var size = Shed.Shed_depth; } else { var size = Shed.Shed_width; } if (size < 10 || document.getElementById('kit').checked == true || document.getElementById('build').checked == true) { cost = 3.35 * mileage; } else { cost = (3.5 * mileage) + 25; if (state != "PA") { cost += 50; } if (state == "VA" || state == "WV" || state == "CT" || state == "VT" || state == "MA" || state == "KY" ) { cost = cost + 50; } if (state == "RI" || state == "NH" || state == "NC" || state == "TN") { cost = cost + 50 * 2; } if (state == "ME" || state == "SC") { cost += 50 * 3; } } document.getElementById('message').innerHTML = "You are " + miles + " miles away, and it will cost $" + cost.toFixed(2) + " to ship your shed"; invalidZip = 0; tooFar = 0; getAPrice(); GUnload(); // need to enable the submit button once again toggleSubmit("on"); } // if it's too far away... else if (miles > 400) { tooFar = 1; invalidZip = 0; document.getElementById('message').innerHTML = "Sorry, you live too far away for us to ship to you"; GUnload(); // we have an error otherwise } else { tooFar = 0; invalidZip = 1; document.getElementById('message').innerHTML = "Please place a valid zip code in the above field." GUnload(); } } function getState(zip) { http.open("get", "./includes/getState.php?zip=" + zip, true); http.onreadystatechange = handleState; http.send(null); } function handleState() { if (http.readyState == "4") { var response = http.responseText; if (response == "error") { document.getElementById('message').innerHTML = "Sorry, there was an error in the calculations. Make sure that you are putting a five digit zip code in the above box."; tooFar = 0; invalidZip = 1; } else { state = response; getAPrice(); } } } // end handleState