function GMap_Directions(fromAddress, toAddress, fn)
{
    gdir = new GDirections();

    if (Browser  &&  Browser.Engine  &&  Browser.Engine.gecko)
    {
        gdir.load("from: " + fromAddress + " to: " + fromAddress, { "locale": "de" });
        var error1 = GEvent.addListener(gdir, "error", function() { GMap_Errors(this, fromAddress); });
        
        GEvent.addListener(gdir, "load", function() { 
            GEvent.removeListener(error1);
            gdir.load("from: " + toAddress + " to: " + toAddress, { "locale": "de" });
            var error2 = GEvent.addListener(gdir, "error", function() { GMap_Errors(this, toAddress); });

            GEvent.addListener(gdir, "load", function() {
                GEvent.removeListener(error2);
                gdir.load("from: " + fromAddress + " to: " + toAddress, { "locale": "de" });
                GEvent.addListener(gdir, "load", fn(gdir.getDistance()));
            });
        });
    }
    else
    {
        gdir.load("from: " + fromAddress + " to: " + toAddress, { "locale": "de" });
        GEvent.addListener(gdir, "load", fn(gdir.getDistance()));
        GEvent.addListener(gdir, "error", function() { GMap_Errors(this, null); });
    }
}

function GMap_Errors(gdir, address)
{
    if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) {
        if (address) {
            alert("Der Ort oder die Adresse \"" + address + "\" konnte nicht ermittelt werden.");
        }
        else {
            alert("Eine von den zwei angegebenen Adressen wurde nicht gefunden.");
        }
    }
    else if (gdir.getStatus().code == G_GEO_BAD_KEY) {
        alert("Der uebertragene Key ist entweder ungueltig.");
    }
    else if (gdir.getStatus().code == G_GEO_BAD_REQUEST) {
        alert("Die Anfrage konnte nicht bearbeitet werden.");
    }
}

if (!GBrowserIsCompatible()) {
    alert('Ihr Browser ist nicht mit Google Maps kompatibel.');
}

window.onunload = function() {
    GUnload();
}
