var gMap = null;
var startLat = 41.8;
var startLng = 12.5;
var zoom = 12;
//var mgr = null;

function DoZoom(lat, lng) {
    gMap.setCenter(new GLatLng(lat, lng), gMap.getZoom() + 2);
}

function CenterMap(lat, lng) {
    gMap.panTo(new GLatLng(lat, lng));
}

function CenterMap(point) {
    gMap.panTo(point);
}

function ZoomMap(zoomLvl) {
    gMap.setZoom(zoomLvl);
}

function CreateCustomMarker(lat, lng, imageURL, imageWidth, imageHeight, infoHtml) {
    var point = new GLatLng(lat, lng);

    var marker;
    if (imageURL != '') {
        var customIcon = new GIcon(G_DEFAULT_ICON);
        customIcon.image = imageURL;
        customIcon.shadow = '';
        customIcon.iconSize = new GSize(imageWidth, imageHeight);
        customIcon.shadowSize = new GSize(0, 0);

        var markerOpts = { icon: customIcon };

        marker = new GMarker(point, markerOpts);
    }
    else
        marker = new GMarker(point);
    
        if (infoHtml != '') {
            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(infoHtml, {maxWidth: 250});
            });
        }

        return marker;
}

//function AddMarkersToManager(markers) {
//    if (mgr == null) {
//        var mgrOptions = { borderPadding: 0, maxZoom: gMap.getZoom(), trackMarkers: false };
//        mgr = new MarkerManager(gMap);
//    }

//    mgr.addMarkers(markers, gMap.getZoom(), gMap.getZoom());
//    mgr.refresh();
//}

function CreateMarker(lat, lng) {
    var point = new GLatLng(lat, lng);
    return new GMarker(point);
}

function AddMarker(lat, lng) {
    var marker = CreateMarker(lat, lng);
    gMap.addOverlay(marker);
}

function AddCustomMarker(lat, lng, imageUrl, imageWidth, imageHeight, infoHtml) {
    var marker = CreateCustomMarker(lat, lng, imageUrl, imageWidth, imageHeight, infoHtml);
    gMap.addOverlay(marker);
}

function AddGroupMarker(imagePath, lat, lng, label) {    
    var marker = CreateGroupMarker(imagePath, lat, lng, label);
    gMap.addOverlay(marker);
}

//// Function to create the marker group and set up the event window
function CreateGroupMarker(imagePath, lat, lng, label) {
    var latlng = new GLatLng(lat, lng);
    var icon = new GIcon();
    icon.image = imagePath;
    icon.iconSize = new GSize(48, 59);
    icon.iconAnchor = new GPoint(16, 16);
    icon.infoWindowAnchor = new GPoint(25, 7);

    opts = {
        "icon": icon,
        "clickable": true,
        "labelText": '<p style="color: #000000; font-weight: bold">' + label + '</p>',
        "labelOffset": OffsetByStringLen(label)
    };

    var marker = new LabeledMarker(latlng, opts);
    var handler = CreateMarkerClickHandler(lat, lng, marker);

    GEvent.addListener(marker, "click", handler);

    return marker;
}

function OffsetByStringLen(string) {
    string = String(string);
    if (string.length == 1)
        return new GSize(3, -11); // -,|
    else if (string.length == 2)
        return new GSize(0, -11); // -,|
    else if (string.length == 3)
        return new GSize(-3, -11); // -,|
    else if (string.length == 4)
        return new GSize(-8, -11); // -,|        
    else
        return new GSize(0, 0);
}

function CreateMarkerClickHandler(lat, lng, marker) {  
    return function() {
        DoZoom(lat, lng);
        return false;
    };
}

function OverlayDirections(dirPlaceHolderId, query, autoSetPosition) {
    var gdir = new GDirections(gMap, document.getElementById(dirPlaceHolderId));
    var language = 'it_IT';
    gdir.load(query, { "locale": language, "preserveViewport": !autoSetPosition });
}

function CleanMarkers() {
    //Clean all the markers
    gMap.clearOverlays();
}

//function CleanManager() {
//    //Clean all the markers
//    if (mgr) {
//        mgr.clearMarkers()
//        mgr.refresh();
//    }
//}

function GetMap() {
    if (gMap)
        return gMap;
    else
        return null;
}

function InitMap(mapPlaceHolderId, zoomLevel, enableScrollWheelZoom) {
    if (GBrowserIsCompatible()) {
        // Create the map
        // Make sure this element has the same ID as your div
        gMap = new GMap2(document.getElementById(mapPlaceHolderId));
        var customUI = gMap.getDefaultUI();
        customUI.controls.scalecontrol = false;
        customUI.controls.maptypecontrol = false;
        customUI.controls.largemapcontrol3d = false;
        customUI.controls.smallzoomcontrol3d = true;
        customUI.zoom.scrollwheel = enableScrollWheelZoom;
        
        gMap.setUI(customUI);

        // ITALY
        zoom = zoomLevel;
        gMap.setCenter(new GLatLng(startLat, startLng), zoom);
    }
    // Javascript alert for older browsers where Google Maps isn't supported
    else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}

