/**
 * Copyright (c) 2008-2010 The Open Source Geospatial Foundation
 * 
 * Published under the BSD license.
 * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text
 * of the license.
 */

/** api: example[tree]
 *  Tree Nodes
 *  ----------
 *  Create all kinds of tree nodes.
 */

var mapPanel, hurtigsok, omraader;
var skikart, turkart, topo_ski, topo_tur;

OpenLayers.ImgPath = "zoomkontroller/";


function osm_getTileURL(bounds) {
    var res = this.map.getResolution();
    var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
    var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
    var z = this.map.getZoom();
    var limit = Math.pow(2, z);

    if (y < 0 || y >= limit) {
        return OpenLayers.Util.getImagesLocation() + "404.png";
    } else {
        x = ((x % limit) + limit) % limit;
        return this.url + z + "/" + x + "/" + y + "." + this.type;
    }
}

var options = {
    projection: "EPSG:900913",
    maxResolution: 156543.0339,
    maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
	numZoomLevels: 16,
    units: 'm',
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    controls: [new OpenLayers.Control.Navigation(), 
                             new OpenLayers.Control.PanZoomBar()] 
    
            };
var map = new OpenLayers.Map('map', options);
//map.addControl(new OpenLayers.Control.MousePosition());
//map.addControl(new OpenLayers.Control.Scale());
map.addControl(new OpenLayers.Control.ZoomBox());
map.addControl(new OpenLayers.Control.Attribution());
map.addControl(new OpenLayers.Control.KeyboardDefaults());



/*
// Lager egne knapper for skifting av lag
*/
var byttSkiLag = function() {
    //alert("ski");
    map.setBaseLayer(skikart);
}

var byttTurLag = function() {
    //alert("tur");
    map.setBaseLayer(turkart);
}

var skikartButton = new OpenLayers.Control.Button({
    displayClass: 'olControlButtonSkikart',
    //trigger: byttSkiLag,
    title: 'Bytt kart',
    eventListeners: {
    	'activate': byttSkiLag,
    	'deactivate': byttTurLag
    },
    type: OpenLayers.Control.TYPE_TOGGLE
    
});

//var layerPanel = new OpenLayers.Control.Panel({defaultControl: skikartButton});
//layerPanel.addControls([skikartButton]);

//map.addControl(layerPanel);
//layerPanel.moveTo(new OpenLayers.Pixel(100,15));


var turkartButton = new OpenLayers.Control.Button({
    displayClass: 'olControlButtonTurkart',
    //trigger: byttTurLag,
    title: 'Bytt til skikart',
    eventListeners: {
    	'activate': byttTurLag,
    	'deactivate': byttSkiLag
    },
    type: OpenLayers.Control.TYPE_TOGGLE
});

var layerPanel = new OpenLayers.Control.Panel({defaultControl: skikartButton});



layerPanel.addControls([skikartButton]);

map.addControl(layerPanel);
//layerPanel.moveTo(new OpenLayers.Pixel(170,15));

aboutHtml = '<p>Turkompisen baserer seg på kartdata fra OpenStreetMap. OpenStreetMap har svært gode data i enkelte områder,' +
			' mens andre områder er mangelfulle. Du kan bidra med kartdata ved registrere deg på <a href="http://openstreetmap.org">Openstreetmap.org</a></p>' +
			'<p>Du kan få nyheter om Turkompisen på <a href="http://blog.turkompisen.no" target="_new">bloggen</a> eller <a href="http://twitter.com/#!/turkompisen" target="_new">Twitter</a>.' +
			' Du kan også gi tilbakemeldinger på <a href="mailto:espen@espenpost.com">e-post</a>.' +
			'<p>Rettigheter:<br>Kartdata © <a href="http://www.openstreetmap.org" target="_new">OpenStreetMap</a>-bidragsytere, ' +
			'<a href="http://creativecommons.org/licenses/by-sa/2.0/" target="_new">CC-BY-SA</a>' +
			'<br>AR50, <a href="http://www.skogoglandskap.no" target="_new">Skog og Landskap</a></p>';
			
function aboutWindow() {
	new Ext.Window({
		title:'Om Turkompisen',
		html: aboutHtml,
		height:200,
		width:400
	}).show();
}


Ext.onReady(function() {


	// The PrintProvider that connects us to the print service
    var printProvider = new GeoExt.data.PrintProvider({
        method: "POST", // "POST" recommended for production use
        capabilities: printCapabilities, // provide url instead for lazy loading
        timeout: 400000,
        customParams: {
            mapTitle: "turkompisen.no",
            comment: "",
            dpi: 130
        },
    	listeners: {
			"beforeprint": function() {
				Ext.MessageBox.show({
           			title: 'Utskrift av kart',
           			msg: '<img src="bilder/small_loader.gif"> PDF-fil til utskrift er klar iløpet av maks et minutt.',
           			width:350,
           			closable:true
       			});
			},
			"print": function(printProvider, url) {
				Ext.MessageBox.hide();
                Ext.Msg.minWidth = 200;
				Ext.Msg.alert('Utskrift', 'Utskriften din er klar.<br>Ingen PDF? <a href="' + url + '" target="_new">Trykk her!</a>');
			},
			"printexception": function() {
				Ext.MessageBox.hide();
				Ext.Msg.alert('Utskrift', 'Noe gikk galt med utskriften!');
			}
    		
        }
    });
    
    
    // Our print page. Tells the PrintProvider about the scale and center of
    // our page.
    printPage = new GeoExt.data.PrintPage({
        printProvider: printProvider,
        customParams: {
            mapTitle: "Printing Demo",
            comment: "This is a simple map printed from GeoExt."
        }
    });





	/* TOOLBAR */
    var toolbarItems = [], actions = {}, action;

    action = new GeoExt.Action({
		    control: new OpenLayers.Control.ZoomToMaxExtent(),
		    tooltip: "Goto Bounds",
		    iconCls: 'map',
    		    map: map

    });
    //actions["max_extent"] = action;
    //toolbarItems.push(action);
    //toolbarItems.push("-");
    
    dragPanControl = new OpenLayers.Control.DragPan();

    action = new GeoExt.Action({
	    control: dragPanControl,
		    map: map,
		    iconCls: 'pan',
		    tooltip: "Pan",
		    toggleGroup: "tools",
	        allowDepress: false,
	        // check item options
	        group: "tools"
		 });
	actions["zoom_in"] = action;
	toolbarItems.push(action);

	action = new GeoExt.Action({
	    control: new OpenLayers.Control.ZoomBox({alwaysZoom:true}),
		    map: map,
		    iconCls: 'zoom_in',
		    tooltip: "zoom in",
		    toggleGroup: "tools",
	        allowDepress: false,
	        tooltip: "Zoom Inn",
	        // check item options
	        group: "tools"
		 });
	actions["zoom_in"] = action;
	toolbarItems.push(action);

    action = new GeoExt.Action({
		    control: new OpenLayers.Control.ZoomOut(), // tobe changed to zoombox
    		    map: map,
    		    //scale: 'medium',
    		    iconCls: 'zoom_out',
    		    tooltip: "Zoom out"
    });
    actions["zoom_out"] = action;
    toolbarItems.push(action);
    
   
    //To be included when print is ready
    action = new GeoExt.Action({
    		    map: map,
    		    iconCls: 'print',
    		    tooltip: "Skriv ut",
    		    handler: function() {
                // convenient way to fit the print page to the visible map area
                printPage.fit(mapPanel, {mode: "closest"});
                // print the page, optionally including the legend
                printProvider.print(mapPanel, printPage, false);
            }
    });
    actions["print"] = action;
    toolbarItems.push(action);
    
       
    
    toolbarItems.push("-");
    
    /*var omraader = [
    ['Østmarka'],
    ['Nordmarka'],
    ['Finnemarka'],
    ['Kjekstadmarka'],
    ['Drammen sør']
	];*/
	 
	omraader = [
    [['Østmarka'],[12],[10.94265],[59.86593]],
    [['Nordmarka'],[10],[10.65048],[60.04849]],
    [['Kjekstadmarka'],[13],[10.34818],[59.77715]],
    [['Sørmarka'],[12],[10.87810],[59.73721]],
    [['Finnemarka'],[12],[10.05773],[59.81208]],
    [['Drammen Sør'],[13],[10.08314],[59.71380]],
    [['Sjusjøen'],[12],[10.69837],[61.15754]],
    [['Skeikampen'],[12],[10.06271],[61.35183]],
    [['Strindamarka'],[13],[10.48843],[63.38304]],
    [['Bymarka'],[13],[10.26973],[63.40595]]
	];
	
	
	hurtigsok = new Ext.form.ComboBox({
	    fieldLabel: 'Number',
	    hiddenName: 'number',
	    store: new Ext.data.SimpleStore({
	        fields: ['number'],
	        data : omraader
	    }),
	    displayField: 'number',
	    typeAhead: true,
	    mode: 'local',
	    triggerAction: 'all',
	    emptyText:'Velg område...',
	    selectOnFocus:true
	    /*listeners:{
         	'select': moveToArea()
   		 }*/

	});

	
	function moveToArea() {
		o = hurtigsok.getValue();
		
		for (var i=0; i<omraader.length; i++) {
			if(omraader[i][0] == o) {
				var zoom = omraader[i][1];
				var lon = omraader[i][2];
				var lat = omraader[i][3];
				
			
				//window.alert(omraader[i][2]);
				map.setCenter(
                new OpenLayers.LonLat(lon, lat).transform(
                    new OpenLayers.Projection("EPSG:4326"),
                    map.getProjectionObject()
                ), zoom
            ); 
			}
		}
	}
	

    skikart = new OpenLayers.Layer.WMS("Skikart wms", 
    								["http://kart1.turkompisen.no/cache/skikart.py/",
                                	"http://kart2.turkompisen.no/cache/skikart.py/",
                                	"http://kart3.turkompisen.no/cache/skikart.py/",
                                	"http://kart4.turkompisen.no/cache/skikart.py/"],
    								{layers:'skikart', format:'image/png'},
    								{ printUrl: 'http://www.turkompisen.no/wms/skikart', printLayerName: '__all__', transitionEffect: 'resize',
    								attribution:'Kartdata © <a href="http://www.openstreetmap.org" target="_new">OpenStreetMap</a>-bidragsytere, CC-BY-SA'});
    								
	turkart = new OpenLayers.Layer.WMS("Skikart wms", 
								["http://kart1.turkompisen.no/cache/turkart.py/",
								"http://kart2.turkompisen.no/cache/turkart.py/",
								"http://kart3.turkompisen.no/cache/turkart.py/",
								"http://kart4.turkompisen.no/cache/turkart.py/"],
								{layers:'turkart', format:'image/png'},
								{ printUrl: 'http://www.turkompisen.no/wms/turkart', printLayerName: '__all__', transitionEffect: 'resize',
    								attribution:'Kartdata © <a href="http://www.openstreetmap.org" target="_new">OpenStreetMap</a>-bidragsytere, CC-BY-SA'});

/*
    topo_ski = new OpenLayers.Layer.WMS(
                              "Topografisk skikart","http://opencache.statkart.no/gatekeeper/gk/gk.open?",
                              {layers: 'topo2', format: 'image/jpeg'},{attribution:'<a href="http://www.statkart.no">Statens kartverk</a>, <a href="http://www.statkart.no/nor/Land/                                            Fagomrader/Geovekst/">Geovekst</a> og <a href="http://www.statkart.no/?module=Articles;action=Article.publicShow;ID=14194">kommuner</a>'}
                        );

    topo_tur = new OpenLayers.Layer.WMS(
                              "Topografisk skikart","http://opencache.statkart.no/gatekeeper/gk/gk.open?",
                              {layers: 'topo2', format: 'image/jpeg'},{attribution:'<a href="http://www.statkart.no">Statens kartverk</a>, <a href="http://www.statkart.no/nor/Land/                                            Fagomrader/Geovekst/">Geovekst</a> og <a href="http://www.statkart.no/?module=Articles;action=Article.publicShow;ID=14194">kommuner</a>'}
                        );

*/


printProvider.on({
    'encodelayer': function (provider, layer, encodedLayer) {
        if (layer.printUrl) {
            encodedLayer.baseURL = provider.getAbsoluteUrl(layer.printUrl);
            if (layer.printLayerName) {
                encodedLayer.layers = [layer.printLayerName].join(",").split(",");
            }
            encodedLayer.singleTile = true;
        }
        return encodedLayer;
    }
});

    // create a map panel with some layers that we will show in our layer tree
    // below.
    mapPanel = new GeoExt.MapPanel({    
    	
        border: true,
        region: "center",
        // we do not want all overlays, to try the OverlayLayerContainer
        map: map,
        center: [1177599, 8383834],
        zoom: 10,
        tbar: [toolbarItems,hurtigsok],
        layers: [skikart, turkart]
    });
    

	hurtigsok.on('select', moveToArea);

	
	layerList = '<div name="velkommen" style="margin:10px;"><h3>Velkommen!</h3><br><p>Turkompisen gir deg kart over skiløyper og turstier i hele Norge.'
				+ '<p>Turkompisen er i startfasen så følg med på Turkompisen <a href="http://blog.turkompisen.no" target="_new">bloggen</a> '
				+ 'eller på <a href="http://twitter.com/#!/turkompisen" target="_new">Twitter</a> for nyheter.</p><div>'
       			+ '<p><a href="javascript:void(0)" onClick="aboutWindow();">Mer om turkompisen</a></p>'
       			;//+ '<div style="position: absolute;bottom: 10px;"><p>11 km med nye skiløyper siste uke!</p></div>';
    			
    
    new Ext.Viewport({
        layout: "fit",
        hideBorders: true,
        items: {
            layout: "border",
            deferredRender: false,
            items: [mapPanel, 
            {
            	border: true,
        		region: "west",
        		title: "turkompisen.no",
        		width: 170,
        		split: true,
        		collapsible: true,
        		collapseMode: "mini",
        		autoScroll: true,
        		enableDD: true,
        		html: layerList
        	}
            ]
        }
    });
    
    
    
	// Lagrer posisjon
	if (Modernizr.localstorage) {
			var lat = localStorage.getItem("lat");
			var lon = localStorage.getItem("lon");
			var zoom = localStorage.getItem("zoom");
			if(lat!=null) {
				map.setCenter(new OpenLayers.LonLat(lon,lat), zoom);
			}
	}
	map.events.register(
		'moveend', map, function (e) {
		if (Modernizr.localstorage) {
			localStorage.setItem("lat", map.getCenter().lat);
			localStorage.setItem("lon", map.getCenter().lon);
			localStorage.setItem("zoom", map.zoom);
			//alert("sdfds");
		}
	}); 


});


