/* $Id: calc.js,v 1.6 2006/04/29 22:05:32 mark Exp $ 
**
** This is used from calc.html
*/

/* this should be the onsubmit action */
function do_quote(quote_form)
{
	var results_element = document.getElementById('quote_results');
	var zip = quote_form.zip.value;
	var miles = quote_form.miles.value;

	results_element.style.display = 'none';

	if (zip.length <= 0 && miles.length <= 0)
	{
		alert('Please complete all fields in this form');
	}
	else if (miles.length > 0 && !miles.match(/^\d+$/))
	{
		alert('Invalid miles. Please try again.');
	}
	else if (zip.length > 0 && !zip.match(/^\d{5}$/))
	{
		alert('Invalid ZIP. Please try again.');
	}
	else if (quote_form.miles.value.length > 0)
	{
		update_cost(quote_form.miles.value);
	}
	else if (quote_form.zip.value.length > 0)
	{
		get_distance(quote_form.zip.value);
	}

	return false;
}

/* calculate distance from zip code */
function get_distance(zip)
{
	var xmlHttpReq = false;
	var isIE = false;

	try {
		/* Mozilla/Safari */
		if (window.XMLHttpRequest) {
			xmlHttpReq = new XMLHttpRequest();
			xmlHttpReq.overrideMimeType('text/xml');
		}
		/* IE */
		else if (window.ActiveXObject) {
			xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
			isIE = true;
		}
	}
	catch(e) {};

	if (xmlHttpReq)
	{
		var calc_element = document.getElementById('quote_calc');
		calc_element.style.display = 'block';

		xmlHttpReq.onreadystatechange = function() {
			if (xmlHttpReq.readyState == 4)
			{
				calc_element.style.display = 'none';

				if (xmlHttpReq.status == 200 && xmlHttpReq.responseText != 'E')
					update_cost(xmlHttpReq.responseText);
				else
				{
					ask_mileage();
/*					alert('ERROR:\n' + xmlHttpReq.responseText);  */
				}
			}
		}

		xmlHttpReq.open('GET', 'distance.cgi?zip=' + zip, true);

		if (isIE)
			xmlHttpReq.send();
		else
			xmlHttpReq.send(null);
	}
	else
		ask_mileage();
}

/* update and display the cost */
function update_cost(distance)
{
	var results_element = document.getElementById('quote_results');
	var cost_element    = document.getElementById('quote_cost');

	if (cost_element && results_element)
	{
		var cost = 0;
		var rate = 1.73;

		distance = (distance * 2) - 50; // round trip - 50 miles
		if (distance < 0)
			distance = 0;

		cost = Math.round((distance * rate) * 100).toString();
		cost = cost.replace(/(\d{2})$/, ".$1");

		cost_element.innerHTML = cost;
		results_element.style.display = 'block';
	}
	else
		alert("Can't find element");
}

function ask_mileage()
{
	var miles_element = document.getElementById('quote_miles');

	if (miles_element)
		miles_element.style.display = 'block';

	alert('ZIP code lookup failed!\nTry entering miles instead.');
}
