//Proxy fuer die Kommunikation zwischen Verteilten Systeme 
OpenLayers.ProxyHost = "/geo-cgi/proxy.cgi?url=";

function loadgeo(){


	/**
		Hier kommen jetzt ein paar globale Variablen
	*/
	// Das Window für die Quellenangabe
	var quellenwindow;
	
	//Speicher fuer Layer
	var geolayer = [];
	
	//String der alle Quellen als HTML vereint. Er wird hier schon instanziiert, damit kein "undefined" uebergeben wird
	var quellenHTML ='';
	
	//Layer in Speicher laden
	for(var i=0;i<loadgeo.arguments.length;i=i+4){

		quellenHTML += "<p>"+loadgeo.arguments[i+1]+":<br>"+loadgeo.arguments[i+2]+"</p>&nbsp;";
		
		var wms = new OpenLayers.Layer.WMS(
			loadgeo.arguments[i+1],
			"http://www.ifo.de/geoserver/wms?",
			{
				layers: loadgeo.arguments[i],
				format: "image/png"
			}
		);
		
		if(loadgeo.arguments[i+3]!="b"){
			wms.setIsBaseLayer(false);
			wms.mergeNewParams(
				{
					transparent:true
				}
			);
		} 
		
		geolayer.push(wms);
	}
	
	// Openlayers Map erzeugen und Layer hinzufuegen
	var map = new OpenLayers.Map(
		{
			/**
				Diese Properies werden gesetzt, um die Map in der 
				richtigen Aufloesung anzeigen zu lassen. 
				maxExtent gibt die Ausdehnung in Koordinaten an.
				maxResolution ist dann die Ausdehnung durch die Pixel der Map
			*/
			maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
			units: "degrees",
			maxResolution: 0.45
		}
	);
	map.addLayers(geolayer);
	
	//Controls erzeugen und der Map anhaengen
	var layerswitcher = new OpenLayers.Control.LayerSwitcher();
	
	var featureinfo = new OpenLayers.Control.WMSGetFeatureInfo(
		{
			autoActivate: true,
			infoFormat: "application/vnd.ogc.gml",
			layers: map.layers
		}
	);
	
	//Funktion um nur die sichtbaren Layer in der featureinfo anzeigen zu lassen
	function getVisibalLayersForFeatureInfo(){
		var geolayerVisibal = [];
		for(var i=0;i<map.layers.length;i++){
			if(map.layers[i].getVisibility()){
				geolayerVisibal.push(map.layers[i]);
			}
		}
		featureinfo.layers = geolayerVisibal;
	}
	
	//Reaktion auf das layerswitcher event
	map.events.register(
		"changelayer",
		null,
		function(event){
			getVisibalLayersForFeatureInfo();
		}
	);
	
	//Reaktion auf ein 'Clicken' in die Karte. Antwort mit featureinfo Inhalt.
	featureinfo.events.on(
		{
			getfeatureinfo: function(event){
				var item = [];
				// featureinfo nur anzeigen, wenn auch ein Inhalt vorhanden ist
				if(event.features.length!=0){
					Ext.each(event.features, function(feature){
						var grid = new Ext.grid.PropertyGrid(
							{
								title: feature.name,
								source: feature.attributes
							}
						);
						
						item.push(grid);
					});
				
					//Popup für den Inhalt der featureinfo Anfrage
					var popup = new GeoExt.Popup(
						{
							title: "Feature Info",
							width: 300,
							height: 300,
							layout: "accordion",
							map: map,
							location: event.xy,
							items: item
						}
					);
				
					popup.show();
				}
			}
		}
	);

	//Openlayer Controls an die Map binden und evtl. aktivieren
	map.addControl(layerswitcher);
	map.addControl(featureinfo);
	featureinfo.activate();
	
	//Map Panel erzeugen
	var mapPanel = new GeoExt.MapPanel(
		{
			region: "center",
			map: map
		}
	);
	
	//LegendPanel erzeugen
	var legendPanel = new GeoExt.LegendPanel(
		{
			region: "east",
			title: "Legende",
			width: 200,
			autoScroll: true,
			padding: 5
		}
	);
	
	function createQuellenWindow(){
		//Quellen Panel erzeugen
		var quellenPanel = new Ext.Panel(
			{
				html: quellenHTML
			}
		);
	
		//Quellen Window erzeugen
		quellenwindow = new Ext.Window(
			{
				title: "Quellen",
				heigth: 400,
				width: 400,
				initCenter: false,
				x: 25,
				y: 25,
				items: [quellenPanel]
			}
		);
	}

	//Map Window erzeugen. Oberste Ebende der GUI
	var win = new Ext.Window(
		{
			title: "ifo Geodatendienst",
			layout: "border",
			height: 600,
			width: 1000,
			initCenter: false,
			x: 15,
			y: 15,
			items: [mapPanel,legendPanel],
			bbar: [{
				text: "Quellen",
				handler: function(){
					createQuellenWindow ();
					quellenwindow.show();
				}
			}]
		}
	);
	
	win.show();
}
		
		
	
