var oldOnLoadGoogleMap = window.onload,
    map,
    mapDir,
    infoWindowHidden = true,
    suggestPlacemarks;

window.onload = function() {
    if (oldOnLoadGoogleMap) oldOnLoadGoogleMap();
    if (GBrowserIsCompatible()) {
        var mapEl = document.getElementById('map');
        if (!mapEl) return;
        map = new GMap2(mapEl);

        map.addControl(new GLargeMapControl());
        map.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(64,15)));
        map.addControl(new GMapTypeControl());
        map.addControl(new GOverviewMapControl());

        mapDir = new GDirections(map, document.getElementById('mapDir'));

        if (lat && lng) {
            map.setCenter(new GLatLng(lat, lng), zoom);
            var point = new GLatLng(lat, lng);
            var marker = new GMarker(point);
            map.addOverlay(marker);
            marker.openInfoWindowHtml(markerText);

            GEvent.addListener(marker, 'mouseover', function(){
                if (infoWindowHidden) marker.openInfoWindowHtml(markerText);
            });
            GEvent.addListener(marker, 'infowindowopen', function(){
                infoWindowHidden = false;
            });
            GEvent.addListener(marker, 'infowindowclose', function(){
                infoWindowHidden = true;
            });
        } else {
            var gcoder = new GClientGeocoder();
            gcoder.setBaseCountryCode('AT');
            gcoder.getLocations(address, function(o) {
                if (!o.Placemark) {
                    map.getContainer().hide();
                    document.getElementById('mapSearch').style.display = 'none';
                } else {
                    lng = o.Placemark[0].Point.coordinates[0];
                    lat = o.Placemark[0].Point.coordinates[1];

                    map.setCenter(new GLatLng(lat, lng), zoom);
                    var point = new GLatLng(lat, lng);
                    var marker = new GMarker(point);
                    map.addOverlay(marker);
                    marker.openInfoWindowHtml(markerText);

                    GEvent.addListener(marker, 'mouseover', function(){
                        if (infoWindowHidden) marker.openInfoWindowHtml(markerText);
                    });
                    GEvent.addListener(marker, 'infowindowopen', function(){
                        infoWindowHidden = false;
                    });
                    GEvent.addListener(marker, 'infowindowclose', function(){
                        infoWindowHidden = true;
                    });
                }
            });
        }
    } else {
        alert('Ihr Browser ist mit Google Maps nicht kompatibel.');
    }
}

var setMapDir = function(fromAddress) {
    map.closeInfoWindow();

    var gcoder = new GClientGeocoder();
    gcoder.setBaseCountryCode('AT');
    gcoder.getLocations(fromAddress, function(o) {
        if (!o.Placemark) {
            alert('Eingegebener Ort konnte nicht gefunden werden.');
        } else {
            useFrom(o.Placemark[0], false);
            suggestLocations(o.Placemark);
        }
    });
}

function useFrom(Placemark, rewriteInput) {
    if (typeof Placemark != 'object') {
        Placemark = suggestPlacemarks[Placemark];
    }
    var pos = Placemark.Point.coordinates[1] +','+ Placemark.Point.coordinates[0];

    mapDir.load('from: ' + pos + ' to: '+lat+','+lng, { 'locale': 'de_AT' });
    if (rewriteInput) document.getElementById('fromAddress').value = Placemark.address;
    document.getElementById('mapDirSuggestParent').style.display = 'none';

    setTimeout('if(mapDir.getMarker(1)){ mapDir.getMarker(1).hide();}', 1000);
}

function suggestLocations(Placemark) {
    suggestPlacemarks = Placemark;
    var el = document.getElementById('mapDirSuggest');
    var elParent = document.getElementById('mapDirSuggestParent');

    if (Placemark.length > 1) {
        elParent.style.display = 'block';
        el.innerHTML = '';
        for (var i=0; i<10; i++) {
            if (!Placemark[i]) { break; }
            el.innerHTML += '<li><a href="#" onclick="useFrom('+ i +', true); return false;">'+ Placemark[i].address +'</a></li>';
        }
    } else {
        elParent.style.display = 'none';
    }
}