// start map specific code;

var allMarkers = [];
var markers = [];
var map = null;
var mapBounds = null;

function createIcon(colour) {

    // create icons/markers
    icon = new GIcon();
    icon.image = "/_assets/img/maps/map_icon_" + colour + ".png";
    icon.shadow = "/_assets/img/maps/map_icon_shadow.png";
    icon.iconSize = new GSize(30.0, 34.0);
    icon.shadowSize = new GSize(48.0, 34.0);
    icon.iconAnchor = new GPoint(15.0, 34.0);
    icon.infoWindowAnchor = new GPoint(15.0, 17.0);

    window[colour + "icon"] = icon;

}

function createMarker(lat, lng, icon, id) {

    var icon = eval(icon);

    // GMarkerOptions object
    markerOptions = { icon: icon };

    // GMarker
    var marker = new GMarker(new GLatLng(lat, lng), markerOptions);
    
    // GMarker Click Event
    GEvent.addListener(marker, "click", function() {
        var markerHtml = $("#mapInfoWindow_" + marker.Id ).html();
        marker.openInfoWindowHtml(markerHtml);
    });

    return marker;

}

function setCenterAndZoom() {
    
    // if only one object, use that
    if (mapJson.length == 1) {
        map.setCenter(new GLatLng(mapJson[0].MapLatitude, mapJson[0].MapLongitude), mapJson[0].MapZoom);
    }

    // if multiple objects, use auto generated 
    if (mapJson.length > 1) {
        map.setCenter(mapBounds.getCenter(), map.getBoundsZoomLevel(mapBounds));
    }

    // if multiple objects, but override available, use overide
    if (mapJson.length > 1 && typeof mapOverrideJson !== "undefined") {
        map.setCenter(new GLatLng(mapOverrideJson.MapLatitude, mapOverrideJson.MapLongitude), mapOverrideJson.MapZoom);
    }

    // if we are on the homepage
    if (typeof window.HOME !== "undefined") {
        map.setCenter(new GLatLng(54.316523240258256, -3.7353515625), 5);
    }

    
    // save this
    map.savePosition();  
    
}

function addClickEventToLinkInSideBar( marker ) {

    $("#GoogleMapSideBar li a[rel=" + marker.Id + "]").click(function(e) {

        e.preventDefault();
        
        var markerHtml = $("#mapInfoWindow_" + marker.Id).html();
        marker.openInfoWindowHtml(markerHtml);

    });

}


function initMap() {

    if (GBrowserIsCompatible()) {

        // create map handle
        map = new GMap2(document.getElementById("GoogleMap"));

        // add controls
        if (typeof window.HOME !== "undefined") {
            map.addControl(new GSmallMapControl());
        } else {
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());
        }
       
  
        // set center
        map.setCenter(new GLatLng(0, 0), 0);

        // create icons/markers
        createIcon("red");
        createIcon("green");
        createIcon("blue");
        createIcon("orange");

        // create bounds object
        mapBounds = new GLatLngBounds();

        // reset markers
        markers.length = 0;

        // got a sidebar?
        var hasSidebar = false;
        if ($("#GoogleMapSideBar").length) {
            hasSidebar = true;
        }

        // loop markers and add to map
        for (var i in mapJson) {

            var m = mapJson[i];

            var marker = createMarker(m.MapLatitude, m.MapLongitude, m.MapIcon, m.Id);

            marker.Id = m.Id;

            mapBounds.extend(new GLatLng(m.MapLatitude, m.MapLongitude))

            markers.push(marker);

            map.addOverlay(marker);

            // add click event to sidebar?
            if (hasSidebar) {
                addClickEventToLinkInSideBar(marker);
            }

        }

        setCenterAndZoom();

    }

}

