﻿var MiniMapController = Class.create();

MiniMapController.prototype =
{
    m_leftmenuitemCollapsed: true,
    m_kartController: null,
    m_drawCanvas: null,
    initialize: function(t_kartController) {
        this.m_kartController = t_kartController;

        miniMap = new AJAXMAP('minimap', 'http://webcache.test.gisline.no/', false, "TEMA-oversiktskart");
        miniMap.init(new Coordinate(262975.34375, 6650598.5), '2');
        miniMap.resize(200, 265);
        miniMap.centerAndZoom(new Coordinate(262975.34375, 6650598.5), '2');

        // Slår av navigering i oversiktskartet inntil den eventuelt får innvirkning på applet i fremtiden
        miniMap.disallowMouseNavigation();

        $('map').observe('map:moved', this.mapChanged.bind(this));
        $('map').observe('map:zoomed', this.mapChanged.bind(this));
        $('map').observe('map:resized', this.mapChanged.bind(this));
        $('map').observe('globe:moved', this.mapChanged.bind(this));

        this.mapChanged();

        $find("CollapseMinimapBehaviour").add_collapseComplete(this.collapseHandler.bind(this));
        $find("CollapseMinimapBehaviour").add_expandComplete(this.expandHandler.bind(this));
    },

    mapChanged: function(e) {
        if (this.m_drawCanvas == null) {
            this.m_drawCanvas = new WAPICanvas();
            miniMap.addDrawCanvas(this.m_drawCanvas);
        }

        if (g_kartController != null) {
            miniMap.centerAndZoom(g_kartController.getMap().getCenterCoordinate(), g_kartController.getMap().getZoomLevel() + 4)
            // Clear the canvas
            miniMap.getDrawCanvas().clear();
            this.draw2DBoundingBox(g_kartController.getMap().getBoundingBox());
            this.draw3DBoundingBox();
        }
    },

    draw2DBoundingBox: function(bb) {
        // Construct boundingxox
        var box = new PolyLine([], { 'rgba': "rgba(250,10,0,0.9)", 'lineWidth': 2 });
        box.addPoint(new Coordinate(bb.left, bb.bottom));
        box.addPoint(new Coordinate(bb.left, bb.top));
        box.addPoint(new Coordinate(bb.right, bb.top));
        box.addPoint(new Coordinate(bb.right, bb.bottom));
        box.addPoint(new Coordinate(bb.left, bb.bottom));
        // Add the PolyLines
        var drawCanvas = miniMap.getDrawCanvas();
        drawCanvas.addPolyLine(box);
    },

    draw3DBoundingBox: function() {
        // Construct boundingxox
        var box2 = new PolyLine([], { 'rgba': "rgba(0,10,255,0.9)", 'lineWidth': 2 });
        // TODO: Sjekk capabilities
        //var t_globeController = this.m_pageElements.globePane.getExtContentElement().contentWindow.g_globeController;
        var t_globeController = this.m_kartController.getGlobeController();
        if(t_globeController != null && t_globeController.getHiddenMode() == false){
            var globeView = this.m_kartController.getGlobeView();
            if (globeView != null) {
                for (var i = 0; i < globeView.length; i++) {
                    var coord = new Coordinate(globeView[i].lon * (180 / Math.PI), globeView[i].lat * (180 / Math.PI), 'EPSG:4326');
                    coord = coord.transform('EPSG:32633');
                    box2.addPoint(coord);
                }
                miniMap.getDrawCanvas().addPolyLine(box2);
            }
        }
    },

    collapse: function() {
        getLogoPane().resize(-205, 1);
        this.m_leftmenuitemCollapsed = true;
    },

    expand: function() {
        var miniMapBehaviour = $find("CollapseMinimapBehaviour");
        miniMapBehaviour.expandPanel();
    },
    
    expandHandler: function(sender, args) {
        // is fired constantly, need bool to avoid unnecessary processing...
        if (this.m_leftmenuitemCollapsed) {
            getLogoPane().resize(205, 1);
            this.m_leftmenuitemCollapsed = false;
        }
    },

    collapseHandler: function(sender, args) {
        if (!this.m_leftmenuitemCollapsed) {
            getLogoPane().resize(-205, 1);
            this.m_leftmenuitemCollapsed = true;
        }
    }
}
