/*
 * POI-Popup-Funktionen: Parameter der Usereingabe auswerten
 * und an die PHP-Date weiterleiten
 */


var select=false;

/*
 * Funktion, die entsprechend der User-Eingabe 
 * POIs aus der Datenbank zurueckgibt 
 * 
 * @param value	Suchstring bei der POI-Suche oder Wert der Umkreissuche
 * @param startoderziel	Start- oder Stoppbutton
 * @param typ Art der Suche, zur Auswahl stehen Uni-, POI-, Umkreis- oder Bildersuche 
 * @param pan Zentrieren auf den POI in der Karte oder nicht
 */
function suchePOI(value, startoderziel, typ, pan) {
	
	poi_layer.removeFeatures(poi_layer.features); //blauen Marker loeschen
	if(select){selectControl.deactivate();map.removeControl(selectControl);}

	// Aktuellen Bildschirmausschnitt ermitteln
	var currentExtent = mapnik.getExtent().transform(
			new OpenLayers.Projection("EPSG:900913"),
			new OpenLayers.Projection("EPSG:4326"));
	var current_bl_x = currentExtent.left;
	var current_bl_y = currentExtent.bottom;
	var current_tr_x = currentExtent.right;
	var current_tr_y = currentExtent.top;
	
	
	var auswahl = document.form2.POI.options[document.form2.POI.selectedIndex].value;
	var poisearch = value;
	var umkreissearch = value;

	var x, y;
	// Art der Suche auswaehlen 
	switch (typ) {	
	case "umkreis":
		x = poi_punkt.lon;
		y = poi_punkt.lat;
		ausgabe("Eingabe korrekt.<br> Suche POIs im Umkreis.");
		createCircle(x, y, umkreissearch); //Buffer erzeugen und darstellen
		break;
	case "uni":
		auswahl = "uni";
		x = null;
		y = null;
		break;
	case "poisuche":
		x = null;
		y = null;
		break;	
	case "bildsuche":
		x = null;
		y = null;
		auswahl = "bildsuche";
		break;
	}
	//Paramter weitergeben an PHP-Datei
	var request = OpenLayers.Request.GET( { 
				url : "createPoiRequest.php",
				asynch : true,
				params : {
					vp1 : current_bl_x,
					vp2 : current_bl_y,
					vp3 : current_tr_x,
					vp4 : current_tr_y,
					poi_auswahl : auswahl,
					poistring : poisearch,
					x_pos : x,
					y_pos : y,
					umkreiswert : umkreissearch,
					checker : typ,
					startend:startoderziel
				},
				callback : function(response) {
								gefundenePOIs(response,startoderziel,typ,pan);
				}
	});
}


/*
 * Funktion, die alle gefundenen POIs in Textform (als anklickbare Links) 
 * in die rechte HTML Spalte ausgibt
 * 
 * @param response gefundene POIs
 * @param startoderziel	Start- oder Stoppbutton
 * @param typ Art der Suche, zur Auswahl stehen Uni-, POI-, Umkreis- oder Bildersuche 
 * @param pan Zentrieren auf den POI in der Karte oder nicht
 */
function gefundenePOIs(response,startoderziel,typ,pan){
	document.getElementById('ergebnisse').innerHTML ="<br /><br />Bitte Mittelpunkt neu definieren! ";
     
    var style;
    //nur beim ersten Mal soll auf den getDataExtent der POI-Features gezoomt werden
    //wenn dort hin gezoomt wurde, wird diese Variable auf f wie false gesetzt
    wfs_extent="t"; 
    
    switch (document.form2.POI.options[document.form2.POI.selectedIndex].value) {
         
         case "rad":          style= myStyleFahrrad;          break;
         case "hotel":        style= myStyleHotel;            break;
         case "attraktion":   style= myStyleAttraktion;       break;
         case "historisch":   style= myStyleHistorisch;       break;
         case "tourism":      style= myStyleTourismus;        break;
         case "restaurant":   style= myStyleRestaurant;       break;
         case "cafe":         style= myStyleCafe;             break;
         case "shop":         style= myStyleShop;             break;
         case "food":         style= myStyleFood;             break;
         case "service":      style= myStyleService;          break;
         case "freizeit":     style= myStyleFreizeit;         break;
         case "erholung":     style= myStyleErholung;         break;
         case "sport":        style= myStyleSport;            break;
         case "bad":          style= myStyleBad;              break;
         case "playground":   style= myStylePlayground;       break;
         case "uni":          style= myStyleUni;              break;
         case "gesundheit":   style= myStyleGesundheit;       break;
         case "bus":          style= myStyleBus;              break;
         case "taxi":         style= myStyleTaxi;             break;
         case "train":        style= myStyleTrain;            break;
         case "transport":    style= myStyleTransport;        break;
         case "zoo":          style= myStyleZoo;              break;
           
         default: style=standard_style;           
        }  
 
         
         if(typ=="uni")style=myStyleUni; 
         if(typ=="alles")style=standard_style; 
         poi.removeFeatures(poi.features); //vorherige Ergebnisse loeschen
                
         oeffnen('namen'); //Slidebar oeffnen, um Ergebnisse als Links anzuzeigen
	    
    	 var  poisoderunisuche; //Ereignis bei manuellem Klicken
    	 var direkteausgabe;   //automatisches Durchlaufen und Aufrufen der Methode mit diesem Parameter    
         var pois = response.responseXML.getElementsByTagName('poi'); //xml-Ergebnisse

//normale POI-Suche, normale Uni-Suche oder immer jeweils "als Startpunkt", "als Zielpunkt"
    	 //mehr als 1 POI
    	 if(pois.length>1){
    		    poisoderunisuche="pois";
    		 if(startoderziel!="nichts"){		  //"als Start" oder "als Stop" wurde ausgewaehlt
    			 direkteausgabe="pois";			  //erstmal alle normal ausgeben
    			 poisoderunisuche=startoderziel;} //fuer Klick auf Sidebar-Ergebnisse: setzt Start- oder Zielpunkt; Panning dorthin
    		 else { 
    			 direkteausgabe="pois";			  //normale POI-Suche, kein Panning oder Zoom
    			 poisoderunisuche="klick";        //fuer Panning und Zoom zum in der Sidebar angeklickten POI
    			 }
    	 }   
    	 
    	 //nur 1 poi
    	 else if(pois.length==1){
    		 if(startoderziel!="nichts"){ 		 //"als Start" oder "als Stop" wurde ausgewaehlt
    			 poisoderunisuche=startoderziel;
    			 direkteausgabe=startoderziel;
    			 }
    		 else { 
    			 direkteausgabe="pois";			  //normale POI-Suche, kein Panning oder Zoom
    			 poisoderunisuche="klick";        //fuer Panning und Zoom zum in der Sidebar angeklickten POI
    			 pan="pan";
    			 }
    	 }
//Ende der Fallunterscheidung
    	 
    	 //Von der PHP-Datei zurueckgeliefertes Ergebnis weiterverarbeiten und in der Karte anzeigen
    	 
    	 if(pois.length>100) document.getElementById('ergebnisse').innerHTML ="&Uuml;ber 100 POIs gefunden. Suche verfeinern bzw. in die Karte zoomen, oder bei Umkreissuche: Umkreis verkleinern.";
    	 else{
    		 document.getElementById('ergebnisse').innerHTML =  "Gefundende POIs: <b>"+pois.length+"</b>";
    		 var poiergebnisse = "";
    		 for (var i = 0; i < pois.length; i++) {
        	
    			 var wkt = pois[i].getElementsByTagName('wkt')[0].firstChild.data;
    			 var poid= pois[i].getElementsByTagName('id')[0].firstChild.data;
              
    			 ausgabe_poi(wkt,direkteausgabe,style,poid,pan);         
    			 poiergebnisse +=  
    				 "<br /><a href=\"javascript:ausgabe_poi('"
    				 +pois[i].getElementsByTagName('wkt')[0].firstChild.data //Inhalt des ersten Elements des xml-Tags "poi"--> "wkt" 
    				 +"','"+ poisoderunisuche+"','null','null',"+pan+");\">"
    				 +pois[i].getElementsByTagName('name')[0].firstChild.data+"</a>";           
    			 	
    		 }
    		 document.getElementById('ergebnisse').innerHTML+=poiergebnisse;
    	}
    	 //die ganze Zeit lauschen, ob auf ein POI geklickt wird
         poi.events.on({
                     "featureselected": onFeatureSelect, //entsprechende Methode aufrufen
                     "featureunselected": onPopupClose
         });                                           
               
                                                                            
         //Loesung fuer drag + select fuer verschiedene Layer:
         //Drag-Layer mit zu diesem selectControl hinzufuegen
 	     selectControl = new OpenLayers.Control.SelectFeature([markerLayer,poi]); 
 	     map.addControl(selectControl);
 	     selectControl.activate();
 	     select=true;

}

/*
 * Funktion, die die Popup-Fenster schliesst
 * @param event ausgewaehltes Feature
 */
function onPopupClose(event) {
	
	selectControl.unselectAll();
	selectControl.activate();
	var feature = selectedFeature;
	if (feature.popup) {
		map.removePopup(feature.popup);
		feature.popup.destroy();
		delete feature.popup;
	}
	for ( var i = 0; i < map.popups.length; i++) {
		map.removePopup(map.popups[i]);
	}
}

/*
 * Funktion, die angeklickten POI auswaehlt
 * @param event angeklickter POI
 */
function onFeatureSelect(event) {
	var feature = event.feature;
	selectedFeature = feature;
	//ID, die mit der Methode "ausgabe_poi" in general_openlayers_functions.js
	//einem POI zugewiesen wurde wieder herauslesen und an PHP-Datei weitergeben
	OpenLayers.loadURL("popup.php", "?id=" + selectedFeature.id,
			null, createPopup, null);
}


/*
 * Funktion, welche bei Selektion eines Punktes aufgerufen wird Erstellt ein
 * Popup in der Groesse 385x220px und enthaelt als HTML-Code den Namen, ein
 * Vorschaubild und den Infotext des gewaehlten Punktes.
 * 
 * @param response Inhalt des Popups
 */
function createPopup(response) {
	// hier wird der Text aus der Rueckgabe der PHP-Datei genommen
	result_popup = response.responseText;
	popup = new OpenLayers.Popup.FramedCloud("Information",
			selectedFeature.geometry.getBounds().getCenterLonLat(), null,
			result_popup, null, true, onPopupClose);
	popup.panMapIfOutOfView = true; // Map verschieben, wenn Popup aus dem Bild faellt
	popup.contentDiv.style.overflow = "auto"; // Autoresize
	selectedFeature.popup = popup;
	map.addPopup(popup);
}


/*
 * Funktion, die die angezeigten POIs wieder loescht
 */
function poisLoeschen() {
	poi.removeFeatures(poi.features);
}
