﻿//<![CDATA[
//
// Added this all as a seperate js file with seperate AJAX calls rather
// than using the ajax.lib.js in the /common folder
// Mainly just to make it a bit more portable

// main marker
var marker;
var markers = new Array();
var map;
var bounds = null;
var centerPoint = null;
var mapCenterLat = null;
var mapCenterLng = null;

//
// Load map, wrapped in a function to try and get around IE7 and its bollocks "Operation aborted" issue
//
function InitMap(data, icon, zoomLevel, mapType, mapCenter) {
    if (GBrowserIsCompatible()) {

        map = new GMap2(document.getElementById("map-holder"));
        markers = new Array();

        applyMarkers(data, icon);
        applyMapSettings(mapCenter, zoomLevel, mapType);
        
        if ((window.location + "").indexOf("step-two.aspx") > 0)
            applyEvents();        
    }
    else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}

function applyEvents() {
    
    map.disableScrollWheelZoom();

    GEvent.addListener(map, 'zoomend', function(oldlevel, newlevel) {
        SaveMapZoom(newlevel);
    });

    GEvent.addListener(map, 'maptypechanged', function() {
        SaveMapType(map.getCurrentMapType().getUrlArg());
    });

    GEvent.addListener(map, 'drag', function() {
        $("#recenter").css("display", "block");
        setCenterPoint();
    });

    SaveMapZoom(map.getZoom());
}

function applyMapSettings(mapCenter, zoomLevel, mapType) {

    var uiOptions = map.getDefaultUI();
    uiOptions.controls.scalecontrol = true;
    uiOptions.controls.largemapcontrol3d = true;
    uiOptions.controls.maptypecontrol = true;

    // Now set the map's UI with the tweaked options.
    map.setUI(uiOptions);
    
    bounds = new GLatLngBounds();

    for (var i = 0; i < markers.length; i++) {
        bounds.extend(markers[i].getPoint());
    }

    var type = G_PHYSICAL_MAP;
    if (mapType != "") {
        switch (mapType) {
            case "k":
                type = G_SATELLITE_MAP;
                break;
            case "m":
                type = G_NORMAL_MAP;
                break;
            case "h":
                type = G_HYBRID_MAP;
                break;
            case "p":
                type = G_PHYSICAL_MAP;
                break;
        }
    }

    map.setMapType(type);

    if (mapCenter == "") {
        map.setCenter(bounds.getCenter());        
    }
    else {
        centerPoint = ("" + mapCenter).split(",");
        mapCenterLat = centerPoint[0];
        mapCenterLng = centerPoint[1];
        map.setCenter(new GLatLng(mapCenterLat, mapCenterLng));
    }

    if (zoomLevel > 0)
        map.setZoom(zoomLevel);
    else
        map.setZoom(map.getBoundsZoomLevel(bounds));
            
}

function applyMarkers(data, icon) {
    $.each(data, function(i, photo) {
        var point = new GLatLng(photo.Latitude, photo.Longitude);

        var baseIcon = new GIcon(G_DEFAULT_ICON);
        baseIcon.iconSize = new GSize(32, 32);
        baseIcon.image = "/images/pinpoints/" + icon;
        baseIcon.shadow = "/images/blank.gif";
        marker = new GMarker(point, { icon: baseIcon, draggable: false });

        marker.infowindowhtml = photo.InfoHTML;
        marker.title = photo.ToolTip;
        marker.maxwindowhtml = photo.MaxHTML;

        var maxContentURL = "/common/handler/photo-description.ashx?id=" + photo.PhotoID + "&d=" + photo.Direction;
        // create max marker content
        var maxContentDiv = document.createElement('div');
        maxContentDiv.innerHTML = 'Loading...'

        // create marker window
        GEvent.addListener(marker, "click", function() {

            GDownloadUrl(maxContentURL, function(page_data) {
                maxContentDiv.innerHTML = page_data;
            });

            map.openInfoWindowHtml(this.getPoint(), this.infowindowhtml, {
                maxContent: maxContentDiv,
                maxTitle: this.title,
                maxWidth: 280
            });
        });

        map.addOverlay(marker);
        markers[markers.length] = marker;
    });
}

// maximise window on a href click
function toMax() {
    map.getInfoWindow().maximize();
}

function openInfoWindow(index, photoId, direction) {

    var maxContentURL = "/common/handler/photo-description.ashx?id=" + photoId + "&d=" + direction;
    // create max marker content
    var maxContentDiv = document.createElement('div');
    maxContentDiv.innerHTML = 'Loading...';

    GDownloadUrl(maxContentURL, function(page_data) {
        maxContentDiv.innerHTML = page_data;
    });

    markers[index].openInfoWindowHtml(markers[index].infowindowhtml, {
        maxContent: maxContentDiv,
        maxTitle: markers[index].title
    });
}
