addEvent(window, 'load', initialize);

var map;
var gdir;
var geocoder = null;
var addressMarker;
var kilometer;
var k;
var k2;

var booking_fee = 2.00;
var flagfall_fee = 3.20;
var silver_service_fee = 11;
var km_rate = 1.94; 
/* Including Stopping/waiting time at 20% of km rate*/
var maxi_surchg_rate = 50.00;
var night_surchg_rate = 20.00;

var c_btn = null;

var c_type = null;
var f_addr  = null;
var t_addr = null;
var night_schg = null;
var est_fare = null;

var directionDisplay;
var directionsService;
var map;

function initialize() 
{	
	f_addr = id("fromAddress");
	t_addr = id("toAddress");
	c_type = id("CarType");
	night_schg = id("night_surchg");
	est_fare = id("estimated_fair");	
	c_btn = id('clear_btn');	
	addEvent(c_btn, 'click', doClear);

	directionsService = new google.maps.DirectionsService();
	directionsDisplay = new google.maps.DirectionsRenderer();

  	var fromAddress  = f_addr.value + ' Victoria Australia';

	var myOptions = {
	  origin:fromAddress,
      zoom:7,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	directionsDisplay.setMap(map);
	setDirections();

}
   
      
function setDirections() 
{
	var fromAddress  = f_addr.value + ' Victoria Australia';
	var toAddress = t_addr.value + ' Victoria Australia';
	
  	var request = {
        origin:fromAddress, 
        destination:toAddress,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function(result, status) {
	    if (status == google.maps.DirectionsStatus.OK) {
	    	directionsDisplay.setDirections(result);
	    	calculateFare(result.routes[0].legs[0].distance.value);
	    } else {
	    	handleErrors(status);
	    }
  	});

}

function handleErrors(status)
{
	alert('Unable obtain an estimate');
}


function calculateFare(dist)
{ 
	var unit = 'm';
	k2 = dist / 1000.00;

	var fare = (k2 * km_rate);
	if (night_schg.value == 1){
		fare = fare * (1 +  night_surchg_rate/100);
	}
	
	switch (c_type.value){

	    case "Maxi":
	        var fare = fare * (1 + maxi_surchg_rate/100);  
	        break;
	        
	  	case "Silver Service":
	        var fare = fare + silver_service_fee;    	   
	        break;
	               
	    default:
	        break;          
	}
	
	fare +=  (booking_fee + flagfall_fee);
	
	fare = Math.ceil(fare);    
	est_fare.innerHTML = '$' + fare;
}

function doClear()
{
	f_addr.value = '';
	t_addr.value = '';
	est_fare.innerHTML = "$0";
	c_type.selectedIndex = 0;
	night_schg.selectedIndex = 0;
}

