// calculate delivery charge
////////////////////////////
var journeyCost = "";

function calculateDirections()
{
	// build address string
	var from = "50.882946, -1.207037"; // co-ord for southwick
	var to = "";
	
	// check address filled out at top or in seperate delivery address
	if(getCheckedValue(document.logorder.billing_different) == "alternate_billing")
	{
		// check alt address
		if(!document.getElementById("billing_address").value)
		{
			alert("You have selected an alternative delivery address to your billing address\nPlease enter this address above");
			return;
		}
		
		// grab address
		to = document.getElementById("billing_address").value;
		
	}
	else if(!document.getElementById("address").value)
	{
		// no? abort - show error message "please fill out address"
		alert("Please fill out your delivery address");
		return;
	}
	else
	{
		to = document.getElementById("address").value;
	}
	
	// send query to google
	var oDir = new GDirections(null, null); // new directions object
	
	// Listnener for error getting directions
	GEvent.addListener(oDir,"error", function() {
		//GLog.write("Failed: "+oDir.getStatus().code);
		document.getElementById("submit_error").style.display = "block";
		document.getElementById("submit_instruct").style.display = "none";		
		document.getElementById("submit_ok").style.display = "none";
		document.getElementById("submit").style.display = "block";
		document.getElementById("delivery_output").innerHTML = '';
		document.getElementById("journey_cost").value = "uncalculated";
	});	

	// Listnener for directions on load
	GEvent.addListener(oDir, 'load', function(){ 

		var distanceMeters = oDir.getDistance().meters;
		var distanceMiles = oDir.getDistance().meters / 1609.344;
		
		//GLog.write("The distance is " + distanceMeters + " metres");
		//GLog.write("The distance is " + distanceMiles + " miles one way");
		//GLog.write("The distance is " + (distanceMiles * 2) + " miles both ways");
		
		if(distanceMiles <= 15)
		{
			//GLog.write("The distance is within the free radius");
			
			document.getElementById("delivery_output").innerHTML = '<p>You are <strong>within</strong> the free delivery radius</p>';
			
			// save journey cost to hidden field
			document.getElementById("journey_cost").value = "free";

		}
		else
		{	
			//GLog.write("The distance is NOT within the free radius");
			
			// get order total
			var orderSize = getCheckedValue(document.forms["logorder"].elements["load"]);
			
			var orderTotal = 0.0;
			switch(orderSize)
			{
				case "single":
					orderTotal = 45.00;
					break;
				case "double":
					orderTotal = 80.00;				
					break;
				case "largeload":
					orderTotal = 120.00;				
					break;					
			}
			
			distanceMiles = distanceMiles - 15;
			journeyCost = Math.round(distanceMiles * 2) * 0.50;
			
			// add delivery cost to order cost
			orderTotal = orderTotal + journeyCost;
						
			document.getElementById("delivery_output").innerHTML  = '<p>You are <strong>outside</strong> of the free 15 mile delivery radius</p>';
			document.getElementById("delivery_output").innerHTML += '<p>Additional Mileage: ' + Math.round(distanceMiles * 2) + ' miles</p>';
			document.getElementById("delivery_output").innerHTML += '<p>Cost Per Mile: 50p</p>';
			document.getElementById("delivery_output").innerHTML += '<p>Total Delivery Charge: &pound;' + journeyCost.toFixed(2) + '</p>';			
			document.getElementById("delivery_output").innerHTML += '<p>&nbsp;</p>';
			document.getElementById("delivery_output").innerHTML += '<p>Total Order Cost: &pound;' + orderTotal.toFixed(2) + '</p>';			
			
			// save journey cost to hidden field
			document.getElementById("journey_cost").value = journeyCost.toFixed(2);
		}
		
		// visual reward
		document.getElementById("submit").style.display = "block";
		document.getElementById("submit_instruct").style.display = "none";
		document.getElementById("submit_error").style.display = "none";		
		document.getElementById("submit_ok").style.display = "block";
	});

	oDir.load('from: '+from+' to: '+to, {getSteps: true});    // Load directions
	
}


// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}


// form validation - core validation routine
function setupValidation()
{
	if(document.getElementById("logorder"))
	{
		var frmvalidator = new Validator("logorder");
			
		frmvalidator.addValidation("fullname", "req", "Please enter your full name");
		frmvalidator.addValidation("email", "req", "Please enter your email address");
		frmvalidator.addValidation("email", "email", "Please enter a valid email address");
		frmvalidator.addValidation("address", "req", "Please enter your full postal address");
		frmvalidator.addValidation("daytimenumber", "req", "Please enter your daytime telephone number");
	}
}


// global startup function
/////////////////////////////////////////////////
if(document.getElementById && document.createTextNode)
{
	addEvent(window, 'load', function(e)
	{
		// form validation
		setupValidation();
		
		document.getElementById("submit").style.display = "none";
		document.getElementById("submit_error").style.display = "none";		
		document.getElementById("submit_ok").style.display = "none";
		
		addEvent(document.getElementById("calculate"), 'click', function(e) { calculateDirections(); });
	});
}// JavaScript Document