
/* -- Google Maps -- */

// Check if an address is available in the Shop Detail Page:
var $address = $('#store-meta address');
if($address.length > 0) {
	
	// Create container of Google Map
	$('#store-details').append('<h3 id="route-title">Routebeschrijving</h3>');
	$('<div id="gmap"></div>').insertAfter('#store-details');
	$('<div id="gmap-directions"></div>').insertAfter('#gmap');
	
	// Prepare some functions:
	var map = null;
	var geocoder = null;
	var gdir = null;
	var gDirLoaded = false;
	
	// Map loader
	function loadGoogleMaps() {
		if(GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("gmap"));
			map.addControl(new GSmallMapControl());
			geocoder = new GClientGeocoder();
		}
	}
	
	// Function to Look up address
	function showAddress(address) {
		if(geocoder) {
			geocoder.getLatLng(address, function(point) {
				if (!point) {
					$('#gmap').remove();
					$('#route-title').remove();
				} else {
					// Show the address
					map.setCenter(point, 15);				
					var marker = new GMarker(point);
					map.addOverlay(marker);
					marker.openInfoWindowHtml(address);
					
					// Show interface to plan route:
					var t = '';
					t += '<div id="directions">';
					t +=    '<h4>Ik vertrek vanuit</h4>';
					t +=    '<input type="text" name="h" value="" id="directions-address" />';
					t +=    '<div class="small note">';
					t +=       'Druk op &lt;Enter&gt; om uw route te berekenen';
					t +=    '</div>';
					t += '</div>';
					
					$(t).insertAfter('#gmap');
					
					// Actions for interface:
					$('#directions-address').keyup(function($eventObject) {
						var k = $eventObject.charCode ? $eventObject.charCode : $eventObject.keyCode ? $eventObject.keyCode : 0;
						if(k == 13) { // "Enter" key
							showDirections($(this).val());
						}
					});
				}
			});
		}
	}
	
	// Function to listen to update in Route description
	function onDirectionsLoad() {
		gDirLoaded = true;
	}
	
	// Function to listen to error in Route description
	function onDirectionsError() {
		var h = '';
		
		h += '<h4>Niet gevonden</h4>';
		h += 'Uw route kon niet berekend worden, omdat we het vertrekpunt niet vinden op de kaart. <strong>Probeer de volgende tips:</strong>';
		h += '<ul>';
		h +=    '<li>';
		h +=       'Controleer het adres op typfouten';
		h +=    '</li>';
		h +=    '<li>';
		h +=       'Geef postcode in van de gemeente, als u dat nog niet heeft gedaan. Dit helpt ons in het herkennen van uw gemeente, als meerdere gemeenten bestaan met dezelfde naam. Bijvoorbeeld, u heeft betere resultaten met <em>2320 Hoogstraten</em> dan met <em>Hoogstraten</em>';
		h +=    '</li>';
		h +=    '<li>';
		h +=       'Geef straatnaam en huisnummer in, om een zeer precieze route te berekenen';
		h +=    '</li>';
		h +=    '<li>';
		h +=       'Geef het land in. Dit kan helpen als de opgegeven gemeente bestaat in meerdere landen.';
		h +=    '</li>';
		h += '</ul>';
		
		$('#directions-from-google').html(h);
		
		clearDirections();
		gDirLoaded = false;
	}
	
	// Function to show route description
	function showDirections(toAddress) {
		// Clear previous directions
		clearDirections();
		
		// Create new container
		$('#directions-from-google').remove();
		$('<div id="directions-from-google"></div>').insertAfter('#directions');
		
		// Load Directions:
		gdir = new GDirections(map, document.getElementById("directions-from-google"));
		GEvent.addListener(gdir, "load", onDirectionsLoad);
		GEvent.addListener(gdir, "error", onDirectionsError);
		gdir.load("from: "+ toAddress + " to: " + $address.text());
	}
	
	function clearDirections() {
		if(gDirLoaded == true) {
			gdir.clear();
		}
	}
	
	// Load the map, and look up the address
	loadGoogleMaps();
	showAddress($address.text());
}
