﻿(function() {
    var jsfiles = new Array(
        '/static/js/lib/MtcoLib/Util/Util.js',
        '/static/js/lib/MtcoLib/Factory/Factory.js',
        '/static/js/lib/MtcoLib/Control/Panel.js',
        '/static/js/lib/MtcoLib/Style/Styles.js',
        '/static/js/lib/MtcoLib/Layer/Base.js',
        '/static/js/lib/MtcoLib/Map/Map.js'
    );

    var agent = navigator.userAgent;
    var docWrite = (agent.match("MSIE") || agent.match("Safari"));
    if(docWrite) {
        var allScriptTags = new Array(jsfiles.length);
    }
    for (var i=0, len=jsfiles.length; i<len; i++) {
        if (docWrite) {
            allScriptTags[i] = "<script src='" + jsfiles[i] + "'></script>"; 
        } else {
            var s = document.createElement("script");
            s.src = jsfiles[i];
            var h = document.getElementsByTagName("head").length ? 
               document.getElementsByTagName("head")[0] : 
               document.body;
            h.appendChild(s);
        }
    }
    if (docWrite) {
        document.write(allScriptTags.join(""));
    }
})();


function MtcoSetupMap(div) {

    var projection = new OpenLayers.Projection("EPSG:2169");
    var options = { 
                    controls: [],
					maxExtent: new OpenLayers.Bounds(-5120,0,154624,195584),
					restrictedExtent: new OpenLayers.Bounds(-5120,0,154624,195584),
                    units: "m",
                    resolutions: [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                    projection: projection
                };
    var controls = [
        new OpenLayers.Control.Navigation(),
        Mtco.Control.Panel.NavigationBar()
    ];
                
    map = new OpenLayers.Map(div, {controls: controls});
    map.setOptions(options);
    
    var base = new OpenLayers.Layer.TMS(
        'OpenStreetMap (Metrico Layout)',
        'http://www.gis-hosting.lu/ogc/tms/',
        {
            'layername': 'osm-luref',
            'type' : 'png',
            isBaseLayer: true
        }
    );
    
    map.addLayer(base);
    
    /*
     * Radioprot
     */
    /*
new OpenLayers.Layer.TMS(
        '',
        [
            'http://www.gis-hosting.lu/ogc/tms/'
        ],
        {
            'layername': 'fisalis',
            'type' : 'png',
            'serverResolutions' : [127,31.75,12.7,2.54,1.411]
        }
    );
    */
    
    var r1001 = new OpenLayers.Layer.TMS(
                        'Januar 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-01', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1002 = new OpenLayers.Layer.TMS(
                        'Februar 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-02', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
            
    var r1003 = new OpenLayers.Layer.TMS(
                        'März 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-03', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    var r1004 = new OpenLayers.Layer.TMS(
                        'April 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-04', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1005 = new OpenLayers.Layer.TMS(
                        'Mai 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-05', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1006 = new OpenLayers.Layer.TMS(
                        'Juni 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-06', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1007 = new OpenLayers.Layer.TMS(
                        'Juli 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-07', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1008 = new OpenLayers.Layer.TMS(
                        'August 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-08', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1009 = new OpenLayers.Layer.TMS(
                        'September 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-09', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var r1010 = new OpenLayers.Layer.TMS(
                        'Oktober 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-10', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
                
    var r1011 = new OpenLayers.Layer.TMS(
                        'November 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-11', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
     var r1012 = new OpenLayers.Layer.TMS(
                        'Dezember 2010',
                        'http://www.gis-hosting.lu/ogc/tms/',
                        { 
                            'layername': 'radioprotection-2010-12', 
                            'type': 'png',
                            'serverResolutions' : [352.8,176.4,88.2,35.3,17.6,7.1,3.52,1.764],
                            isBaseLayer: false
                        }
                    );
    
    var radioprot = new OpenLayers.MtcoLayerGroup(
            "Radioaktivität 2010",
            [r1001, r1002, r1003, r1004, r1005, r1006, r1007, r1008, r1009, r1010, r1011, r1012],
            {visibility: true}
    );
    map.addGroup(radioprot);
					
	
    var radiostat = new OpenLayers.Layer.Vector(
        'Messstationen',
        {              
            styleMap: new OpenLayers.StyleMap({
                    'default': new OpenLayers.Style({
                        'pointRadius': 20,
                        'externalGraphic': 'http://www.gis-hosting.lu/static/sld/img/radio.png'
                    }),
                    'select': new OpenLayers.Style({
                        'pointRadius': 20
                    }),
                    'highlight': new OpenLayers.Style(
                    {
                        'pointRadius': 20,
                        'label': '${label}',
                        'labelAlign': 'lb',
                        'fontColor': '#330000',
                        'fontSize': '12px',
                        'fontFamily': 'Verdana,sans-serif',
                        'fontWeight': 'bold'
                    },
                    {
                        'context': {
                            'label': function(feature) {
                                return feature.attributes.aero_stat;
                            }
                        }
                    })
            }),
            'projection': projection,
            'strategies': [
                new OpenLayers.Strategy.BBOX()
            ],
            'protocol': new OpenLayers.Protocol.WFS({
                        url: 'http://www.gis-hosting.lu/ogc/service/osm',
                        featureType: "radioprot-stations",
                        featureNS: "http://mapserver.gis.umn.edu/mapserver",
                        featurePrefix: "ms",
                        version: "1.1.0",
                        srsName: "EPSG:2169"
            }),
            extractAttributes: true
        }
    );
    
    map.addLayer(radiostat);
    
    var select = new OpenLayers.Control.MtcoSelectFeature(
        [radiostat],
        {
            onSelect: onSelect,
            onUnselect: onUnselect
        }
    );
    map.addControl(select);
    select.activate();
    
    var panel = new OpenLayers.MtcoPanel(new OpenLayers.Size(933, 120));
    map.addPanel(panel);
    panel.addTab(new OpenLayers.MtcoPanel.MtcoTab("lsTab", {name: "Layerswitcher"}));
    panel.addTab(new OpenLayers.MtcoPanel.MtcoTab("infoTab", {name: "Info"}));
    var tl = new OpenLayers.Control.MtcoTimeline(
        radioprot, 
        {
            divId: "timeline",
            interval: 2,
            slideupdate: true
    });
    var ls = new OpenLayers.Control.MtcoLayerSwitcher({divId: "lsTab"});
    var info = new OpenLayers.Control.MtcoAttribution(["metrico", "osm"], {divId: "infoTab"});
	var scaleDiv = document.createElement("div");
    OpenLayers.Element.addClass(scaleDiv, "mtcoScaleDiv");
    var scaleP = document.createElement("p");
    scaleP.id = "mtcoScaleP";
    scaleDiv.appendChild(scaleP);
    document.getElementById("infoTab").appendChild(scaleDiv);
    var scale = new OpenLayers.Control.Scale("mtcoScaleP");
    
    map.addControls([tl, ls, info, scale]);    
    map.setCenter(new OpenLayers.LonLat(77000, 97000), 1);
    return map;
}

function onSelect(evt) {
    OpenLayers.Popup.Anchored.prototype.calculateNewPx = function(px) {
        var newPx = px.offset(this.anchor.offset);
		newPx.y += this.anchor.size.h;
		newPx.x += this.anchor.size.w;
        return newPx;   
    }
	
	var popup = new OpenLayers.Popup.Anchored("radioPopup",
            null,
			new OpenLayers.Size(200, 200)
		);	
    var feature = evt.feature;
    var attributes = feature.attributes;
    var name = "<p class='radioName'>"+attributes.aero_stat+"</p>";
	var liste = "<li>"+name+"</li>";
    
    for (var key in attributes) {
        if (key != "aero_stat") {
            liste += "<li>" + key + "&nbsp;" + attributes[key] + "</li>";
        }
    }
    var string = "<ul class='radioUl'>" + liste + "</ul>"
    
	popup.setContentHTML(string);
	
	popup.setBackgroundColor("transparent");
	popup.setBorder("1px solid #808080");		
	popup.panMapIfOutOfView = true;
	popup.lonlat = evt.feature.geometry.getBounds().getCenterLonLat();
	map.addPopup(popup);
	feature.popup = popup;
}

function onUnselect(feature) {
    if (feature.popup) {
		var popup = feature.popup
		map.removePopup(popup);
		popup.destroy();
	}
}
