var flagStart = new Array();
var flagEnd = new Array();
var flagRoute = new Array();

var geocoder;
var gDirStart = new Array();
var gDirEnd = new Array();
var gDirRoute = new Array();
var location1 = new Array();
var location2 = new Array();

var civicAddress;
var civicLoc;

function startGIS(){
	civicAddress="Civic center, San Francisco";
	geocoder = new GClientGeocoder();
	geocoder.getLocations(civicAddress, function (response) {
		if (!response || response.Status.code != 200)
		{
			alert("Sorry, Google was unable to geocode San Francisco civic center location. The Google service was not available. Please try again later.");
		}
		else
		{
			civicLoc = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
			//alert(civicLoc.lat + " " + civicLoc.lon + " " + civicLoc.address);
		}
	});
	var openForm = Number($("formNum").value);
	for (var i=1; i<=openForm; i++)
	{
		initialize(i);
		//alert("Google initializes "+i);
	}
	
}
function initialize(arg) {
	var myArg = arg;
	location1[arg] = new Object();
	location2[arg] = new Object();
	flagStart[arg] = 0;
	flagEnd[arg] = 0;
	flagRoute[arg] = 0;
	
	gDirStart[arg] = new GDirections();
	gDirEnd[arg] = new GDirections();
	gDirRoute[arg] = new GDirections();
	GEvent.addListener(gDirStart[myArg], "load", function() {
		$('miles_AC_'+myArg).value = (gDirStart[myArg].getDistance().meters / 1609.344).toFixed(2);
		//alert("Miles From: "+$('miles_AC_'+myArg).value);
		flagStart[myArg] = 1;
		//alert("Estimated mileage from "+ myArg + " start point is "+ $('miles_AC_'+myArg).value);
		if ((flagEnd[myArg] == 1)&&(flagRoute[myArg] == 1))
		{
			mileage = Math.max(Math.max(Number($('miles_AC_'+myArg).value), Number($('miles_CB_'+myArg).value)), Number($('miles_AB_'+myArg).value));
			//alert("Mileage 1: "+mileage1+"\nMileage 2: "+mileage2+"\nMax="+Math.max(mileage1,mileage2));
			
			if (mileage<60.0) {
				$('mileage_'+myArg).value = Math.max((carPrices[$('Car_'+myArg).selectedIndex]* mileage).toFixed(2),carMaxes[$('Car_'+myArg).selectedIndex].toFixed(2));
			} else {
				$('mileage_'+myArg).value = 0.0;
			}
		}
	});
	GEvent.addListener(gDirEnd[myArg], "load", function() {
		$('miles_CB_'+myArg).value = (gDirEnd[myArg].getDistance().meters / 1609.344).toFixed(2);
		//alert("Miles To: "+$('miles_AC_'+myArg).value);
		flagEnd[myArg] = 1;
		//alert("Estimated mileage to "+ myArg + " end point is "+ $('miles_CB_'+myArg).value);
		if ((flagStart[myArg] == 1)&&(flagRoute[myArg] == 1))
		{
			mileage = Math.max(Math.max(Number($('miles_AC_'+myArg).value), Number($('miles_CB_'+myArg).value)), Number($('miles_AB_'+myArg).value));
			//alert("Mileage 1: "+mileage1+"\nMileage 2: "+mileage2+"\nMax="+Math.max(mileage1,mileage2));
			
			if (mileage<60.0) {
				$('mileage_'+myArg).value = Math.max((carPrices[$('Car_'+myArg).selectedIndex]* mileage).toFixed(2),carMaxes[$('Car_'+myArg).selectedIndex].toFixed(2));
			} else {
				$('mileage_'+myArg).value = 0.0;
			}			
		}
	});
	GEvent.addListener(gDirRoute[myArg], "load", function() {
		$('miles_AB_'+myArg).value = (gDirRoute[myArg].getDistance().meters / 1609.344).toFixed(2);
		//alert("Miles To: "+$('miles_AC_'+myArg).value);
		flagRoute[myArg] = 1;
		//alert("Estimated mileage to "+ myArg + " end point is "+ $('miles_CB_'+myArg).value);
		if ((flagStart[myArg] == 1)&&(flagEnd[myArg] == 1))
		{
			mileage = Math.max(Math.max(Number($('miles_AC_'+myArg).value), Number($('miles_CB_'+myArg).value)), Number($('miles_AB_'+myArg).value));
			//alert("Mileage 1: "+mileage1+"\nMileage 2: "+mileage2+"\nMax="+Math.max(mileage1,mileage2));
			
			if (mileage<60.0) {
				$('mileage_'+myArg).value = Math.max((carPrices[$('Car_'+myArg).selectedIndex]* mileage).toFixed(2),carMaxes[$('Car_'+myArg).selectedIndex].toFixed(2));
			} else {
				$('mileage_'+myArg).value = 0.0;
			}
		}
	});
}

function showLocation(arg, addr1, addr2) {
	var address1 = addr1;
	var address2 = addr2;
	var myArg = arg;
	
	geocoder.getLocations(address1, function (response) {
		if (!response || (response.Status.code != 200 && response.Status.code != 601))
		{
			alert("The first address for Trip #"+myArg + " could not be recognized. \nPlease go back to the address field and verify location.");
			$('desc_1_'+myArg).innerHTML = "The first address for Trip #"+myArg + " could not be recognized. \nPlease go back to the address field and verify location.";
		}
		else
		{
			location1[myArg] = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
			// alert("Location 1:"+ location1[myArg].lat + " " + location1[myArg].lon + " " + location1[myArg].address);
			var pickUpValue = getRadioValue($('PickUp_'+myArg));
			if (pickUpValue.length != 3){	
				pickUpValue = "";
			} else {
				pickUpValue += ", ";
			}
			$('desc_1_'+myArg).innerHTML = '\n<br /><strong>Address 1: </strong>' + pickUpValue + location1[myArg].address;
			$('google_'+myArg).value = '<br /><strong>Address 1: </strong>' + pickUpValue + location1[myArg].address;
			gDirStart[myArg].load('from: ' + location1[myArg].address + ' to: ' + civicLoc.address);
			geocoder.getLocations(address2, function (response) {
				if (!response || (response.Status.code != 200 && response.Status.code != 601))
				{
					alert("The second address for Trip #"+myArg + " could not be recognized. \nPlease go back to the address field and verify location.");
					$('desc_2_'+myArg).innerHTML = "The second address for Trip #"+myArg + " could not be recognized. \nPlease go back to the address field and verify location.";
				}
				else
				{
					location2[myArg] = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
					//$('desc_2_'+myArg).innerHTML = '\n<br /><strong>Address 2: </strong>' + location2[myArg].address;
					var destinationValue = getRadioValue($('Destination_'+myArg));
					if (destinationValue.length != 3){	
						destinationValue = "";
					} else {
						destinationValue += ", ";
					}
					$('desc_1_'+myArg).innerHTML += '\n<br /><strong>Address 2: </strong>' + destinationValue + location2[myArg].address;
					$('google_'+myArg).value += '<br /><strong>Address 2: </strong>' + destinationValue + location2[myArg].address;
					//alert("Location 2:"+ location2[myArg].lat + " " + location2[myArg].lon + " " + location2[myArg].address);
					gDirEnd[myArg].load('from: ' + civicLoc.address + ' to: ' + location2[myArg].address);
					gDirRoute[myArg].load('from: ' + location1[myArg].address + ' to: ' + location2[myArg].address);
				}
			});
		}
	});
}
