﻿var mouseLoc;
var popup;
var map;

function initMap(mapid, profile){

    map = mapid;

    map = new OpenLayers.Map('map',
        {
            projection: 'EPSG:25832',
            //tileSize: new OpenLayers.Size(400,400),
            units: 'm',
            maxResolution: 'auto'
        }
    );
    map.maxExtent = new OpenLayers.Bounds(100000,6000000,1000000,6400000);

    var markers = new OpenLayers.Layer.Markers( "Markers" );
    markers.displayInLayerSwitcher = false;
    map.addLayer(markers);
    
    var WsoapR = new MR.Request('getLayers','getLayers',"Services/miniMap.asmx");
    WsoapR.addArg("profile", profile);
    WsoapR.submit();
    
}

function setupControls(profile)
{
    if (profile != 'nyhenvendelse_notloggedin')
    {
        map.addControl(new OpenLayers.Control.LayerSwitcher());
        addSelectAreaControl();
        addFullScreenControl();
    }
    //map.addControl(new OpenLayers.Control.Scale($('scale')));
    //map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));

    map.zoomToStartExtent();

    map.events.register('click', map, function(e) {
        function getActiveLayers() {
            var activeLayers = [];
            for (var i = 0; i < this.getNumLayers(); i++)
                if (this.layers[i].visibility) activeLayers.push(this.layers[i].name);

            return activeLayers.join(",");
        }

        mouseLoc = this.getLonLatFromPixel(e.xy);

        if (popup != null)
            this.removePopup(popup);

        popup = new OpenLayers.Popup.FramedCloud("featurePopup",
        mouseLoc,
        new OpenLayers.Size(100, 100),
        "<div id='qresult' class='ol_qresult'></div>",
        null, true, null);

        popup.autoSize = true;

        popup.keepInMap = true;

        this.addPopup(popup);
        document.getElementById('featurePopup').style.display = "none";

        var WsoapR = new MR.Request('searchFromMap', 'searchFromMap', "Services/miniMap.asmx");
        WsoapR.addArg("x", mouseLoc.lon);
        WsoapR.addArg("y", mouseLoc.lat);
        WsoapR.addArg("searchradius", this.getScale() / 300);
        WsoapR.addArg("profile", profile);
        WsoapR.addArg("layers", getActiveLayers.call(this));
        WsoapR.submit();

        OpenLayers.Event.stop(e);
    });
}

function addFullScreenControl(){
    if(!(document.getElementById('mapFullScreen'))) return;
    var button = new OpenLayers.Control.Button({displayClass: "MyButton", trigger: function(){map.toggleFullScreen();}});
    var panel = new OpenLayers.Control.Panel();
    panel.addControls([button]);
    map.addControl(panel);

    map.normalDiv = map.div.id;
    map.fullscreenDiv = 'mapFullScreen';
    
    map.toggleFullScreen = function() {
        if(arguments.callee.isFullScreen) {
            this.div.style.display = 'none';
            this.render(this.normalDiv);
        }
        else {
            this.render(this.fullscreenDiv);
            this.div.style.display = '';
        }
        arguments.callee.isFullScreen = !arguments.callee.isFullScreen;
    }
    map.toggleFullScreen.isFullScreen = false;
}

function addSelectAreaControl() {
    var boxControl = new OpenLayers.Control();
    OpenLayers.Util.extend(boxControl, 
        {
            draw: function(){ this.box = new OpenLayers.Handler.Box(boxControl, {"done" : this.selectedArea}, {"boxDivClassName" : "olHandlerBoxSelect"}); },
            
            selectedArea: function(area) { 
                var minX = area.left;
                var minY = area.bottom;
                var maxX = area.right;
                var maxY = area.top;

                var bottomLeft = map.getLonLatFromPixel(new OpenLayers.Pixel(minX, minY));
                var topRight = map.getLonLatFromPixel(new OpenLayers.Pixel(maxX, maxY));
                
                DW.mapSearchBox.minX = bottomLeft.lon;
                DW.mapSearchBox.minY = bottomLeft.lat;
                DW.mapSearchBox.maxX = topRight.lon;
                DW.mapSearchBox.maxY = topRight.lat;
                
                DW.searchFromMap();
            },
            
            on: function(){this.box.activate();},
            
            off: function(){this.box.deactivate();}
        }
    );
    
    var keydownFunc = function(e) {
        if(e.ctrlKey) {
            boxControl.on();
        }
    };
    var keyupFunc = function(e) {
        if(e.keyCode == 17){
            boxControl.off();
        }
    };
    
    if(document.attachEvent) {
        document.attachEvent('onkeydown',keydownFunc);
        document.attachEvent('onkeyup',keyupFunc);
    }
    else {
        document.addEventListener('keydown',keydownFunc, true);
        document.addEventListener('keyup',keyupFunc, true);
    }
    
    map.addControl(boxControl);
}