/**
 * @author richard
 */
var map;
var geocoder = null;
var bound = null;

var directions = null;
var loc = new Array();
var isset = false;
var directionsPanel;

// Set locations
loc[0] = {
    name: 'Worldwide Vision',
    address: 'Luxemburgstraat 7 <br> 5061 JW Oisterwijk',
    coord: new GLatLng(51.583373, 5.191368)
};

function initialize(){
    directionsPanel = document.getElementById("routeDesc");
}

function convertMap(){
    var imageElement = $("static");
    var parameters = parseMapParameters(imageElement.src);
    var center = parameters.center.split(',');
    var longitude = parseFloat(center[0]);
    var latitude = parseFloat(center[1]);
    var zoom = parseInt(parameters.zoom);
    var size = parameters.size.split('x');
    var mapElement = $('dynamic')
    Element.setStyle(mapElement, {
        width: size[0] + "px",
        height: size[1] + "px"
    });
    Element.hide(imageElement);
    map = new GMap2(document.getElementById("dynamic"));
    map.setCenter(new GLatLng(51.583373, 5.191368), zoom);
    
    //Set controls
    map.setMapType(G_NORMAL_MAP);
    map.addControl(new GSmallMapControl());
    //map.addControl(new GMapTypeControl());
    map.enableContinuousZoom();
    map.enableScrollWheelZoom();
    map.enableDoubleClickZoom();
    
    //Add marker on the map 
    var marker = new GMarker(new GLatLng(51.583373, 5.191368));
    map.addOverlay(marker);
    
    directions = new GDirections(map, directionsPanel);
    
    GEvent.addListener(directions, "error", function(){
        if (directions.getStatus().code == G_GEO_UNKNOWN_ADDRESS) 
            alert("De locatie van het opgegeven vertrekpunt kon niet worden bepaald.\nGebruik uw postcode en/of plaats.\nError code: " + directions.getStatus().code);
        else 
            if (directions.getStatus().code == G_GEO_SERVER_ERROR) 
                alert("Er is iets misgegaan. Maar het is onduidelijk wat!\n Error code: " + directions.getStatus().code);
            
            else 
                if (directions.getStatus().code == G_GEO_MISSING_QUERY) 
                    alert("Een parameter ontbreekt. Misschien was er geen vertrekpunt ingevoerd.\n Error code: " + directions.getStatus().code);
                
                //   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
                //     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
                
                else 
                    if (directions.getStatus().code == G_GEO_BAD_KEY) 
                        alert("De Google Maps sleutel is ongeldig of de gebruikte sleutel is niet geldig voor dit domein. \n Error code: " + directions.getStatus().code);
                    
                    else 
                        if (directions.getStatus().code == G_GEO_BAD_REQUEST) 
                            alert("Er is iets misgegaan. Maar het is volstrekt onduidelijk wat de oorzaak is!\n Error code: " + directions.getStatus().code);
                        
                        else 
                            alert("An unknown error occurred.");
    });
}

function parseMapParameters(staticMapSrc){
    var mapSettings = new Hash();
    var parametersString = staticMapSrc.split("?")[1];
    var parameters = parametersString.split("&");
    parameters.each(function(paramsPart){
        var paramPair = paramsPart.split("=");
        mapSettings[paramPair[0]] = paramPair[1];
    });
    return mapSettings;
}

function loadGmapScriptWithCallback(){
    if (!isset) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        var key = parseMapParameters($("static").src).key;
        script.src = "http://maps.google.com/maps?file=api&v=2.x&hl=" + lang + "&key=" + key + "&async=2&callback=convertMap";
        document.body.appendChild(script);
        isset = true;
    }
}

// Calculate Route
function calcRoute(){

    if (map == null) {
		loadGmapScriptWithCallback();
		setTimeout("calcRoute()", 500);
		return;
	 }
	 
    document.getElementById('routeDesc').innerHTML = '';
    directions.clear();
    
    // get data
    var from = document.getElementById('address').value;
    var toId = 0;
    
    // new directions
    directions.load('from: ' + from + ' to: ' + loc[toId]['coord'].lat() + ', ' + loc[toId]['coord'].lng());
}


