﻿var _map = null;
var _names = {};
var _polys = {};
var _polysMinZoom = 11;

function initMap() {
    _map = new GMap2($("#map-cont")[0]);
    _map.setCenter(new GLatLng(-41, 174), 5);
    _map.addControl(new GLargeMapControl());
    _map.addControl(new GScaleControl());
    _map.addControl(new GMapTypeControl());
    
    _map.addMapType(G_PHYSICAL_MAP);
    _map.setMapType(G_PHYSICAL_MAP); 

    // Add markers and populate jump to areas list
    var list = $("#mapareas")[0];
    var iconOptions = {};
    iconOptions.primaryColor = "#ff0000";
    iconOptions.strokeColor = "#000000";
    iconOptions.labelColor = "#000000";
    for (var i = 0; i < _polys.length; i++) {
        // Add marker
        iconOptions.label = String(i + 1);
        var marker = new GMarker(_polys[i].getBounds().getCenter(), { icon: MapIconMaker.createLabeledMarkerIcon(iconOptions), title: _names[i] });
        GEvent.addListener(marker, "click", onMarkerClick);
        _map.addOverlay(marker);

        // Update link in area link
        $("#MapAreaLink" + i).attr("href", "javascript:moveTo(new GLatLng(" + _polys[i].getBounds().getCenter().lat() + "," + _polys[i].getBounds().getCenter().lng() + "));");
    }

    GEvent.addListener(_map, "moveend", onMapMoveEnd);
}

function onMapMoveEnd() {
    // Display / hide polys
    for (var i = 0; i < _polys.length; i++) {
        // Only show polys when zoomed in enough
        if (_map.getZoom() >= _polysMinZoom) {
            if (_polys[i].getBounds().intersects(_map.getBounds()))
                _map.addOverlay(_polys[i]);
            else
                _map.removeOverlay(_polys[i]);
        }
        else {
            _map.removeOverlay(_polys[i]);
        }
    }
}

function onMarkerClick(latlng) {
    moveTo(latlng);
}

function moveTo(latlng) {
    // NOTE: Must zoom first or causes problems!
    if (_map.getZoom() < _polysMinZoom)
        _map.setZoom(_polysMinZoom);
    _map.panTo(latlng);
}