﻿var map;

function initialize() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(37, -97), 4);
        map.disableDragging();
        loadOverlay();
        loadPoints();
        loadStates();
    }
}

function loadOverlay() {
    var baseicon = createOverlayIcon();
    var markerOptions = { icon: baseicon, zIndexProcess: overlayZIndex, clickable: false };
    var overlay = new GMarker(getOverlayOrigin(), markerOptions);
    map.addOverlay(overlay);
}

function getOverlayOrigin() {
    return new GLatLng(53.78, -133.1);
}

function createOverlayIcon() {
    var baseicon = new GIcon();
    baseicon.image = "../handlers/maphandler.ashx";
    baseicon.iconSize = new GSize(820, 550);
    baseicon.shadowSize = new GSize(0, 0);
    baseicon.iconAnchor = new GPoint(0, 0);
    baseicon.infoWindowAnchor = new GPoint(0, 0);
    return baseicon;
}

function loadStates() {
    for (stateCode in stateBorders) {
        var polygon = createPoly(stateCode);
        map.addOverlay(polygon);
    }
}

function loadPoints() {
    MapService.GetPoints(drawPoints, onError, null);
}

function drawPoints(result, context, methodName) {
    for (var i = 0; i < result.length; i++) {
        var latlng = new GLatLng(result[i].Lat, result[i].Long);
        var marker = createMarker(latlng);
        map.addOverlay(marker);
    }
}

function createMarker(point) {
    var baseicon = createMarkerIcon();
    var markerOptions = { icon: baseicon, zIndexProcess: markerZIndex, clickable: false };
    var marker = new GMarker(point, markerOptions);
    return marker;
}

function createMarkerIcon() {
    var baseicon = new GIcon();
    baseicon.image = "../images/maps/yellowdot.gif";
    baseicon.iconSize = new GSize(9, 9);
    baseicon.shadowSize = new GSize(0, 0);
    baseicon.iconAnchor = new GPoint(5, 5);
    baseicon.infoWindowAnchor = new GPoint(0, 0);
    return baseicon;
}

function markerZIndex(marker, b) {
    return 2;
}

function overlayZIndex(marker, b) {
    return 1;
} 

function onError() {
    alert("Error loading map data, please refresh the page");
}

function createPoly(stateCode) {
    var polygon = new GPolygon(stateBorders[stateCode], "#000000", 0, 0, "#000000", 0);
    GEvent.addListener(polygon, "click", function(latlng) {
        window.location = 'GetFacilities.aspx?state=' + stateCode;
    });
    return polygon;
}

