﻿var geocoder = null;
var map = null;
var mapbounds = null;
var geocoder = null;
var itemCount = 0;

function createMap(mapDiv, mapOptions) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(mapDiv);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();

        mapbounds = new GLatLngBounds();
        geocoder = new GClientGeocoder();

        for (var i = mapOptions.length-1; i >= 0; i--) {
            if (mapOptions[i]) {
                itemCount++;
                showAddress(mapOptions[i]);
            }
        }

        GEvent.addDomListener(window, 'unload', unloadMap);
    }
}

function unloadMap() {
    GUnload();
}

function showAddress(mapOptions) {

    if (mapOptions.latitude &&
        mapOptions.longitude &&
        mapOptions.latitude > 0 &&
        mapOptions.longitude > 0) {

        itemCount--;
        showPoint(new GLatLng(mapOptions.latitude, mapOptions.longitude), mapOptions);
        
    }
    else {
        geocoder.getLatLng(mapOptions.address, function(point) {
            
            itemCount--;
            if (point) {
                showPoint(point, mapOptions);
            }
            
        });
    }

}

function showPoint(point, mapOptions) {

    mapbounds.extend(point);
    var marker = placeMarker(point, mapOptions);

    if (itemCount == 0) {

        var zoom = map.getBoundsZoomLevel(mapbounds);

        if (zoom > 16)
            zoom = 16;
            
        var center = mapbounds.getCenter();
        map.setCenter(center, zoom);
    }

    if (mapOptions.detailUrl) {

        GEvent.addListener(marker, "click", function() {
            document.location.href = mapOptions.detailUrl;
        });

    }
}

function placeMarker(point, mapOptions) {
    var icon = new GIcon();
    icon.shadow = mapOptions.shadowImage;
    icon.iconSize = new GSize(mapOptions.iconWidth, mapOptions.iconHeight);
    icon.shadowSize = new GSize(mapOptions.shadowWidth, mapOptions.shadowHeight);
    icon.iconAnchor = new GPoint(mapOptions.iconAnchorWidth, mapOptions.iconAnchorHeight);
    icon.image = mapOptions.iconImage;
    
    markerOptions = { icon: icon, title: mapOptions.overlay };

    var marker = new GMarker(point, markerOptions);
    map.addOverlay(marker);

    return marker;
}

function showDirections(from, to) {
    if (from && to) {

        var url = 'http://maps.google.nl/maps?q=from: ' + from;
        url += ' to: ' + to;
        
        window.open(url.replace(/\s/g, '+'));
    }
}


