/**
 * @author eric
 */
window.onload=initialize_map;

/* Error messages for possible errors */
		var error_address_empty 	= 'Please enter a valid address first.';
		var error_invalid_address 	= 'This address is invalid. Make sure to enter your street number and city as well?'; 
		var error_google_error 		= 'There was a problem processing your request, please try again.';
		var error_no_map_info		= 'Sorry! Map information is not available for this address.';
		
		
		/**********************************************************************************************************************/
		/* CHANGE THIS TO YOUR ADDRESS - The default address of your store, This address will display on the map on startup */
		/**********************************************************************************************************************/
		var default_address = '135 Monmouth St, Red Bank, NJ 07701';
		
		
		
		var current_address = null; /* Current address we are displaying, we save it here for directions */
		var map				  = null; /* Instance of Google Maps object */
		var geocoder		  = null; /* Instance of Google Deocoder object */
		var gdir		      = null; /* Instance of Google Directions object */
		var map_compatible  = false; /* Whether or not user's browser is compatible to show the map */
		
		/* Check if the browser is compatible */
		if( GBrowserIsCompatible() ) {
			map_compatible = true;
		}
		
		/* Initialize the map this will be called when the document is loaded from: <body onLoad="initialize_map();"> */
		function initialize_map() {
			if( map_compatible ) {
				map = new GMap2(document.getElementById('map'));        
				geocoder = new GClientGeocoder();
				//show_address(default_address);
				current_address = default_address;
				
				var lat = 40.349032;
            	var lng = -74.071923;
            	var point = new GLatLng(lat,lng);
				
				var otherPoint = new GLatLng(40.35, -74.071923);
				map.setCenter(otherPoint, 17);
				var marker = new GMarker(point);
				map.addOverlay(marker);
				marker.openInfoWindowHtml("<h2>Prown's Home Improvement</h2>" + default_address);
				
				/* This displays the zoom controls for the map. If you don't want them just delete the line */
				map.addControl(new GSmallMapControl());
				
				/* This displays the map type. If you don't want that feature then just delete this */
				map.addControl(new GMapTypeControl());
				
			}
		}
		
		/* This function will move the map and shows the address passed to it */
		function show_address(address) {
			if( map_compatible && geocoder ) {
				/* Save this address in current_address value to use later if user wants directions */
				current_address = address;		
				geocoder.getLatLng(
				address,
				function( point ) {
					if( !point ) {
						alert(error_no_map_info);
					} else {
						map.setCenter(point, 16);
						var marker = new GMarker(point);
						map.addOverlay(marker);
						marker.openInfoWindowHtml("<h2>Prown's Home Improvement</h2>" + address);
					}
				}
				);
			}
			return false;
		}
		
		/* Get the directions */
		function get_directions() {
			if( map_compatible ) {
				if( document.direction_form.from_address.value == '' ) {
					alert(error_address_empty);
					return false;
				}
				/**
				 * Delete the contents of 'directions' DIV first 
				 * because user might ask for directions more than once.
				**/
				document.getElementById('directions').innerHTML = '';
				
				gdir = new GDirections(map, document.getElementById('directions'));
				
				/* Setup to event handlers, one: when the directions are loaded, two: if there was any error */
				GEvent.addListener(gdir, 'load',  onGDirectionsLoad);
				GEvent.addListener(gdir, 'error', handleErrors);
				
				/* Show the directions */
				set_directions(document.direction_form.from_address.value, current_address);			
			}
			return false;
		}
		
		/* This will actually set the directions on the map and loads the direction table */
		function set_directions(fromAddress, toAddress) {
      	gdir.load("from: " + fromAddress + " to: " + toAddress,
                	{ "locale": "en" });
    	}
		
		/* This will handle the errors might happen while retrieving the directions */
		function handleErrors(){
			if( gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS )
				alert(error_invalid_address);
			else if( gdir.getStatus().code == G_GEO_SERVER_ERROR )
				alert(error_google_error);
			else if( gdir.getStatus().code == G_GEO_MISSING_QUERY )
				alert(error_address_empty);
			else 
				alert(error_invalid_address);
		}
		
		/* This function will be called when the directions are loaded */
		function onGDirectionsLoad(){
			/* We will simple scroll down to the directions, but with a little delay so it's loaded */
			setTimeout('eval(\'window.location = "#directions_table"\;\')', 500);
		}