﻿(function() {
    var centerLatitude = 52.91180409857035;
    var centerLongitude = -2.5288563252500353;
    var initialZoom = 6;

    function addUKOutlineTiles(map) {
        var crunchedLayerManager = new VE.MapCruncher.CrunchedLayerManager(map);
        crunchedLayerManager.ImportLayersFromAnchorHRef('uk-tiles');
        var layer = crunchedLayerManager.layerList.find('NewLayer');
        layer.Activate(map);
        return layer;
    }

    function initMap() {
        var map = new VEMap('map');
        var pinData = new Object();
        var options = new VEMapOptions();
        options.LoadBaseTiles = false;
        map.LoadMap(new VELatLong(centerLatitude, centerLongitude, 0, VEAltitudeMode.RelativeToGround), initialZoom, VEMapStyle.Road, false, VEMapMode.Mode2D, true, 1, options);
        map.HideDashboard();
        map.HideScalebar();

        // Disable the mouse and keyboard manually by handling the events.
        // This is so we can still click on the added VEShapes.
        map.AttachEvent('onmousemove', function() { return true; });
        map.AttachEvent('onmousewheel', function() { return true; });
        map.AttachEvent('onkeydown', function() { return true; });
        map.AttachEvent('ondoubleclick', function() { return true; });
        map.AttachEvent('onclick', function mapClicked(e) {
            if (e.elementID) {
                var shape = map.GetShapeByID(e.elementID);
                window.location = pinData[shape.GetID()];
            } else {
                var ll = map.PixelToLatLong(new VEPixel(e.mapX, e.mapY));
                console.log(ll.Latitude.toString() + '  ' + ll.Longitude.toString());
            }
        });

        addUKOutlineTiles(map);

        $('#VE_MapCruncher_legend_box').hide();
        $('#map').addClass('loaded');
        $('#content .containee').append('<p class="small-print">Reproduced from Ordnance Survey map data by permission of the Ordnance Survey © Crown copyright 2001.</p>');
        $('.MSVE_Map').css('cursor', 'default');
        
        var pinLayer = new VEShapeLayer();
        map.AddShapeLayer(pinLayer);
        return { map: map, pinLayer: pinLayer, pinData: pinData };
    }

    function addPin(projectAnchor, layer, pinData) {
        var latitude = projectAnchor.attr('data-latitude');
        var longitude = projectAnchor.attr('data-longitude');
        var pin = new VEShape(VEShapeType.Pushpin, new VELatLong(latitude, longitude));
        pin.SetTitle(projectAnchor.text());
        pin.SetDescription('Click to find out more about this project.');
        pin.SetZIndex(1001);
        pin.SetCustomIcon('<div class="project-pin"></div>');
        layer.AddShape(pin);
        pinData[pin.GetID()] = projectAnchor.attr('href');
        projectAnchor.data('pin', pin);
    }

    $(function() {
        $('#map').height(Math.max(530, $('#projects').height())).width(530);
        var mapInfo = initMap();
        $('#map').css({ 'background-color': '#b1d3ef', cursor: 'default' });
        $('#projects a')
            .each(function() { addPin($(this), mapInfo.pinLayer, mapInfo.pinData); })
            .hover(function() { $(this).data('pin').SetCustomIcon('<div class="project-pin highlight"></div>'); },
                   function() { $(this).data('pin').SetCustomIcon('<div class="project-pin"></div>'); });
    });
})();
