$(document).ready(function() {
    $("#gmaps_from_input").keypress(
        function(e)
        {
            var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
            if (key === 13)
            {
                e.preventDefault();
                executeGoogleMapsDirections();
            }
        }
    );
});

var googleMaps;
var googleMapsDirections;
var googleMapsMapElementId = "gmaps_map";
var googleMapsDirectionsElementId = "gmaps_direction";

function executeGoogleMapsDirections() 
{
    if (GBrowserIsCompatible())
    {
        // Expand modal popup. Needed to load map properly.
        $("#gmaps_wrapper").show();

        if (googleMaps == null)
        {
            // Add inline size. Needed to print properly.
            $("#gmaps_map").attr("style", "width: " +  $("#gmaps_map").width() +"px; height: " +  $("#gmaps_map").height() +"px");
        
            var googleMapsMapElement = document.getElementById(googleMapsMapElementId);
            var googleMapsDirectionsElement = document.getElementById(googleMapsDirectionsElementId);
            var smallMapControl = new GSmallMapControl();
            googleMaps = new GMap2(googleMapsMapElement);
            googleMaps.addControl(smallMapControl);
            googleMapsDirections = new GDirections(googleMaps, googleMapsDirectionsElement);
            GEvent.addListener(googleMapsDirections, "load", googleMapsDirections_load);
            GEvent.addListener(googleMapsDirections, "error", googleMapsDirections_error);
        }
        
        // Collapse modal popup.
        $("#gmaps_wrapper").hide();
        
        var fromAddress = $("div.google-form").find("input[name=gmaps_from]").val();
        var toAddress = $("div.google-form").find("input[name=gmaps_to]").val();
        googleMapsDirections.load("from: " + fromAddress + " to: " + toAddress, { "locale": "nl" });
        return false;
    }
}

function googleMapsDirections_error()
{
    // Hide print link.
    $("#printItineraryLink").hide();  
    
    // Collapse modal popup.
    $("#gmaps_wrapper").hide();
    
    // Remove previous error div element.
    $("div.google-form").find(".google_error").remove();      

    var statusCode = googleMapsDirections.getStatus().code;
    var error = "Er heeft zich een onbekende fout voor gedaan. Probeer het alstublieft nogmaals.";
    
    switch(statusCode) 
    {
        case G_GEO_UNKNOWN_ADDRESS:
	        error = "Het opgegeven adres kon niet worden gevonden. Dit komt mogelijk doordat het adres relatief nieuw is of dat het adres incorrect geschreven is."; 
	        break;    
        case G_GEO_SERVER_ERROR:
	        error = "Er kon geen route berekend worden, exacte reden hiervan in onbekend. Probeer het alstublieft nogmaals.";
	        break;
        case G_GEO_BAD_REQUEST:
	        error = "Er kon geen route berekend worden." ;
	        break;
        default:
	        error = "Er heeft zich een onbekende fout voor gedaan. Probeer het alstublieft nogmaals.";
    }
    
    // Add error div element.
    $("<div class=\"google_error\"><p>" + error + "</p></div>").insertAfter("form input[name=gmaps_from]");            
}

function googleMapsDirections_load()
{
    // Clean up.
    $("div.google-form").find(".google_error").remove();  
    
    // Show print link.
    $("#printItineraryLink").show();
    
    // Expand modal popup.
    $("#gmaps_wrapper").show();
}

function openItineraryModalPopup() 
{
    // Collapse modal popup.
    $("#gmaps_wrapper").hide();
    
    // Apply lightbox CSS.
    var lighboxCssLink = $("#printcsslink").attr("href").replace("print", "lightbox");
    $("#printcsslink").attr("href", lighboxCssLink);
}

function closeItineraryModalPopup() 
{
    // Clean up.
	$("div.google-form").find(".google_error").remove();
    $("#gmaps_from_input").attr("value", "");
    
    // Hide print link.
    $("#printItineraryLink").hide();
    
    // Restore original print CSS.
    var lighboxCssLink = $("#printcsslink").attr("href").replace("lightbox", "print");
    $("#printcsslink").attr("href", lighboxCssLink);    
}

$(window).unload( function () {
    GUnload();
});
