/*
 * Copyright (C) 2009 GeoNetwork
 *
 * This file is part of GeoNetwork
 *
 * GeoNetwork is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * GeoNetwork is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GeoNetwork.  If not, see <http://www.gnu.org/licenses/>.
 */
Ext.namespace('GeoNetwork');



// create application
GeoNetwork.miniapp = function() {
    // private vars:
    var toolbar, viewport;

    // global map object
    var miniMap;

    var extentBox;
  
    var createMap = function() {
        var options = {
            projection: "EPSG:28992",
            units: 'm',
            maxExtent: new OpenLayers.Bounds(-285401.92,22598.08,595401.92,903401.92),
            restrictedExtent: new OpenLayers.Bounds(-285401.92,22598.08,595401.92,903401.92),
            resolutions: new Array(3440.64,1720.32,860.16,430.08,215.04,107.52,53.76,26.88,13.44,6.72,3.36,1.68,0.84),
            controls: []
        };
        miniMap = new OpenLayers.Map(options);
    };

    var createWmsLayer = function(name, url, params, options) {
        miniMap.addLayer(new OpenLayers.Layer.WMS(name, url, params, options));
    };

    var addMapControls = function() {
        miniMap.addControl(new GeoNetwork.Control.ZoomWheel());
        miniMap.addControl(new OpenLayers.Control.LoadingPanel());
    };

    var createToolbars = function() {
        toolbar = new mapfish.widgets.toolbar.Toolbar({
            map: miniMap,
            configurable: false
        });

        // this is a quick fix for http://trac.mapfish.org/trac/mapfish/ticket/126
        toolbar.autoHeight = false;
        toolbar.height = 25;

    };

    var addSeparator = function() {
        toolbar.add(new Ext.Toolbar.Spacer());
        toolbar.add(new Ext.Toolbar.Separator());
        toolbar.add(new Ext.Toolbar.Spacer());
    };

    var createViewport = function() {
      var mapPanel = new GeoExt.MapPanel({
        id: "mini_mappanel",
        title: "",
        renderTo: "ol_minimap",
        height: 220,
        width: 250,
        center: [155000, 463000],
        zoom: 1,
        map: miniMap,
        tbar: toolbar
      });
    };

    var setToolbarContent = function() {

        toolbar.addControl(
            new OpenLayers.Control.ZoomToMaxExtent({
                map: miniMap
            }), {
                tooltip: {title: OpenLayers.i18n("zoomToMaxExtentTooltipTitle"), text: OpenLayers.i18n("zoomToMaxExtentTooltipText")},
                iconCls: 'zoomfull',
                toggleGroup: 'map1'
            }
        );

        addSeparator();

        toolbar.addControl(
            new OpenLayers.Control.ZoomBox(), {
                tooltip: {title: OpenLayers.i18n("zoominTooltipTitle"), text: OpenLayers.i18n("zoominTooltipText")},
                iconCls: 'zoomin',
                toggleGroup: 'map1'
            }
        );

        toolbar.addControl(
            new OpenLayers.Control.ZoomBox({
                displayClass: 'ZoomOut',
                out: true
            }), {
                tooltip: {title: OpenLayers.i18n("zoomoutTooltipTitle"), text: OpenLayers.i18n("zoomoutTooltipText")},
                iconCls: 'zoomout',
                toggleGroup: 'map1'
            }
        );

        toolbar.addControl(
            new OpenLayers.Control.DragPan({
                isDefault: true
            }), {
                tooltip: {title: OpenLayers.i18n("dragTooltipTitle"), text: OpenLayers.i18n("dragTooltipText")},
                iconCls: 'pan',
                toggleGroup: 'map1'
            }
        );
 
        addSeparator();   
        
        
        extentBox = new GeoNetwork.Control.ExtentBox({
            	minxelement: Ext.get('westBL'), 
            	maxxelement: Ext.get('eastBL'),
            	minyelement: Ext.get('southBL'),
            	maxyelement: Ext.get('northBL')  	
            	});
            
        toolbar.addControl(extentBox, {
                tooltip: {title: OpenLayers.i18n("selectExtentTooltipTitle"), text: OpenLayers.i18n("selectExtentTooltipText")},
                iconCls: 'selextent',
                toggleGroup: 'map1'
            });
    }


		var updateMap = function updateMap() {
            if (extentBox)
			    extentBox.updateMap();
		}

        var clearExtentBox = function clearExtentBox() {
            if (extentBox)
			    extentBox.clear();
		}

    // public space:
    return {
        init: function() {
            if (!$("ol_minimap")) return;

            createMap();

            /* createWmsLayer(
                "Referentiekaart",
                "http://geoserver.nl/tiles/tilecache.aspx?",
                {layers: 'nlreferentie_xl', format: 'image/png', userid: userid},
                {isBaseLayer: true, buffer: 1}
            ); */
           // 2011-02-04: Thijs Brentjens, PDOK. Use the PDOK BRT Achtergrondkaart
           createWmsLayer('BRT Achtergrondkaart',
                'http://geodata.nationaalgeoregister.nl/wmsc?',
                {'layers': 'brtachtergrondkaart', 'format': 'image/png'},
                {'isBaseLayer': true, 'buffer':1}
           );       

            createToolbars();
            createViewport();
            addMapControls();

            setToolbarContent();
            toolbar.activate();
            
            // Thijs Brentjens, PDOK, 04-02-2011: add a copyright notice to the minimap (in div copyrightMap).
            $("copyrightMap").update(OpenLayers.i18n('copyrightMap'));

            Ext.EventManager.on(Ext.get("westBL"), 'change', updateMap);
            Ext.EventManager.on(Ext.get("eastBL"), 'change', updateMap);
            Ext.EventManager.on(Ext.get("southBL"), 'change', updateMap);
            Ext.EventManager.on(Ext.get("northBL"), 'change', updateMap);
				
        },

        clearExtentBox: function() {
            clearExtentBox();
        },

        getMap: function() {
            return miniMap;
        }
    };
}(); // end of app

Ext.onReady(GeoNetwork.miniapp.init, GeoNetwork.miniapp);

