function Toernplaner(){
	
	/* Attribute */
	this.container = document.getElementById('Toernplaner');
	this.hidden = true;
	this.stopps = new Array(); //Literal mit Elementen: lat,lng,name,typ,order
	this.markers = new Array();
	this.GListeners = new Array();
	this.kriterien = {radius: 50.0, breite: 0.0, hoehe: 0.0, tiefe:0.0};
	this.polyline = ''; //Darstellung der route
	
	
	/* Methodendefinitionen */
	this.show = show;
	this.hide = hide;
	this.showHide = showHide;
	this.loadContent = loadContent;
	this.setContainerContent = setContainerContent;
	this.restoreState = restoreState;
	this.addStopp = addStopp;
	this.remStopp = remStopp;
	this.findRoute = findRoute;
	this.loadRoutentabelle = loadRoutentabelle;
	this.loadRoutenMapData = loadRoutenMapData;
	this.addListeners = addListeners;
	this.remListeners = remListeners;
	this.createTpMarker = createTpMarker;
	this.reset = reset;
	this.nearbyStrecke = nearbyStrecke;
	
	
	/* Initialisierung */
	this.container.style.backgroundColor = "white";
	this.container.style.border = "1px solid #000000";
	this.container.style.position = "absolute";
	this.container.style.maxHeight = "350px";
	this.container.style.width = "300px";
	this.container.style.top = "210px";
	this.container.style.left = "351px";
	this.container.style.overflow = "auto";
	
	
	
	
	/* Methoden */
	function show(){
		this.hidden = false;
		setTimeout("Effect.Appear('Toernplaner', {from: 0.0, to: 0.9, duration: 0.5 })", 250, 'JavaScript');
		this.loadContent();
		this.restoreState();
		this.addListeners();
		new Draggable('Toernplaner');
	}
	
	
	function hide(){
		this.hidden = true;
		this.remListeners();
		Effect.DropOut('Toernplaner');
		document.getElementById('routenresults').style.display="none";
		
	}
	
	
	function showHide(){
		if(this.hidden)
			this.show();
		else
			this.hide();
	}
	
	
	function loadContent(){
		
		var url = BASEURL+"data/karte.toernplaner.php";
		
		var aj = new Ajax.Request(url,{
				onCreate: ajaxLoading('Toernplaner',100),
				onComplete: Toernplaner.setContainerContent,
				onFailure: ajaxError,
				method:'get'
				});
	}
	
	
	//Bezeichnung - entweder latlng bei typ maus oder string
	//typ - "maus" (über eventlistener) oder "text" über textlink
	function addStopp(bez, type){
		
		var vLength = document.getElementById('vias').childNodes.length;
		//Bei clicks auf die Karte
		if(type == "maus"){
			//...ohne vorhandene Marker 
			if(Toernplaner.markers.length == 0){
				document.getElementById('startPunkt').value = bez.lat()+', '+bez.lng();
				var stp = {lat: bez.lat(), lng: bez.lng(), name:(bez.lat()+', '+bez.lng()), typ: type, order:(vLength+1)};

			}else{
				var m1 = document.createElement('div');
				m1.innerHTML = 'Stopp'+(vLength+2)+': <input disabled="disabled" type="text" value="'+bez.lat()+', '+bez.lng()+'" />&nbsp;<img src="'+BASEURL+'img/layout/toernplaner/delete_kl.png" onclick="Toernplaner.remStopp('+vLength+');" alt="Loeschen" title="Stopp entfernen" style="position:relative;top:5px;" />';
				m1.id = 'via'+(vLength+1);
				document.getElementById('vias').appendChild(m1);
				var stp = {lat: bez.lat(), lng: bez.lng(), name:(bez.lat()+', '+bez.lng()), typ: type};
			}
			
			Toernplaner.stopps.push(stp);
		
		
		//Bei eingaben über "stopps hinzufügen" im menü
		}else if(type == "text"){
			
			if(Toernplaner.markers.length == 0){
				var m1 = document.createElement('div');
					m1.innerHTML = 'Stopp'+(vLength+2)+': <input type="text" value="'+bez+'" />&nbsp;<img src="'+BASEURL+'img/layout/toernplaner/delete_kl.png" onclick="Toernplaner.remStopp('+vLength+');" alt="Loeschen" title="Stopp entfernen" style="position:relative;top:5px;" />';
					m1.id = 'via'+(vLength+1);
				
				document.getElementById('vias').appendChild(m1);
				var stp = {lat:0, lng:0, name:bez, typ:type, order:(vLength+1)};
			
			}else{
				var m1 = document.createElement('div');
					m1.innerHTML = 'Stopp'+(vLength+2)+': <input type="text" value="'+bez+'" />&nbsp;<img src="'+BASEURL+'img/layout/toernplaner/delete_kl.png" onclick="Toernplaner.remStopp('+vLength+');" alt="Loeschen" title="Stopp entfernen" style="position:relative;top:5px;" />';
					m1.id = 'via'+(vLength+1);
				
				document.getElementById('vias').appendChild(m1);
				var stp = {lat:0, lng:0, name:bez, typ:type, order:(vLength+1)};
			}
			Toernplaner.stopps.push(stp);
		}
	}//ende addStopp
	
	
	function remStopp(pos){
		var toRemove = document.getElementById('vias').childNodes;
		document.getElementById('vias').removeChild(toRemove[pos]);
		this.stopps.splice(pos+1, 1);
		this.markers.splice(pos+1, 1);
		refreshMapMarkers();
	}
	
	
	//Sucht eine Route zwischen den angegebenen Punkten, füllt Ergebnistabelle und
	//Karteninhalte
	function findRoute(){
		map.removeOverlay(this.polyline);
		this.markers = new Array();
		this.kriterien.breite = document.getElementById('minb').value;
		this.kriterien.tiefe = document.getElementById('mint').value;
		this.kriterien.hoehe = document.getElementById('minh').value;
		//this.kriterien.radius = 50.0;
		
		var url = BASEURL+"data/karte.toernplaner.php";
		var params = "route="+escape(this.stopps.toJSON());
		params += "&br="+this.kriterien.breite;
		params += "&ti="+this.kriterien.tiefe;
		params += "&ho="+this.kriterien.hoehe;
		//params += "&rad="+this.kriterien.radius;
		params += "&zoom="+map.getZoom();
		
		var aj = new Ajax.Request(url,{
				onCreate: ajaxLoading('routenresults',300),
				parameters: params,
				onComplete: Toernplaner.loadRoutentabelle,
				onFailure: ajaxError,
				method:'post'
				});
		
	}
	
	//Lädt die Ergebnisstabelle in die Zusatzinformationen und stößt 
	//das Zeichnen der Karteninhalte an.
	function loadRoutentabelle(xResp){
		document.getElementById('routenresults').innerHTML = xResp.responseText;
		
		Toernplaner.loadRoutenMapData();
	}
	
	
	//Lädt json-String aus id ROUTENRESPONSE und zeichnet marker sowie linie auf die karte.
	function loadRoutenMapData(){
		$('ZITitel').innerHTML = "Ergebnisse der Routensuche";
		eval($("ROUTENRESPONSE").innerHTML);//erstellt routedata
		
		if(routedata.polylinePoints.length > 1){
		
			var polyline = GPolyline.fromEncoded({
			    color: "#009900",  
		     	weight: 6,
		     	opacity: 0.75,
		     	points: routedata.polylinePoints,
		     	levels: routedata.polylineLevels,
		     	numLevels: 18,
	     		zoomFactor: 2
			});
			
			this.markers = new Array();
			for(var i = 0; i < routedata.polylineMarker.length; i++){
				var t = routedata.polylineMarker[i];
				this.createTpMarker(new GLatLng(t.lat, t.lng), (i+1), t.bez);
			}
			
			refreshMapMarkers();
			polyline.geodesic = true;
			map.addOverlay(polyline);
			Toernplaner.polyline = polyline;
		}else{
			alert("Keine Route");
		}
		
	}
	
	
	function setContainerContent(c){
		if(c.responseText){
			Toernplaner.container.innerHTML = c.responseText;
		}else
			Toernplaner.container.innerHTML = c;
		
		
	}
	
	
	
	//Lädt den zustand beim öffnen des Törnplaner kartenmenüs
	function restoreState(){
		$("routenresults").style.display="block";
		if(isNaN(document.getElementById('vias'))){ 
			for(var i = 0; i < this.stopps.length; i++){
				this.addStopp(this.stopps[i]);
			}
		}else{
			setTimeout('Toernplaner.restoreState();', 100);
		}
		
	}
	
	
	function addListeners(){
		var t = GEvent.addListener(map, "click", function(olay, latlng){
			var url = BASEURL+'data/karte.toernplaner.php';
			var params = "nearby=1&zoom="+map.getZoom();
			params += "&latlng="+latlng.toUrlValue(7);
			
			var aj = new Ajax.Request(url,{
				onCreate: ajaxLoading('routenresults',300),
				parameters: params,
				onComplete: Toernplaner.nearbyStrecke,
				onFailure: ajaxError,
				method:'post'
				});
			
			//Beim 1. Klick in die Karte
			if(Toernplaner.markers.length == 0){
				document.getElementById('startPunkt').value = toFix(latlng.lat(), 7)+', '+toFix(latlng.lng(), 7);
				document.getElementById('ratgeber').innerHTML = 'Klicken Sie jetzt an die Stelle wo ihre Route endet oder fuegen Sie weitere Stopps durch weitere Clicks hinzu.'; 
			}else{
				document.getElementById('suchButton').disabled = false;
				
			}
			Toernplaner.addStopp(latlng, "maus");
			Toernplaner.createTpMarker(latlng, document.getElementById('vias').childNodes.length+1, toFix(latlng.lat(), 7)+' '+toFix(latlng.lng(), 7));
		});
		
		Toernplaner.GListeners.push(t);
		
		
	}
	
	
	function nearbyStrecke(ajaxResp){
		$("routenresults").style.display="none";
		if(ajaxResp.responseText.length > 1)
			alert(ajaxResp.responseText);
	}
	
	
	function remListeners(){
		for(var i = 0; i < Toernplaner.GListeners.length; i++)
			GEvent.removeListener(Toernplaner.GListeners[i]);
		Toernplaner.GListeners = new Array();
	}
	
	
	
	
	//Erstellt einen Marker und fügt ihn dem markers array hinzu.
	//Zur darstellung redrawMarkers() aufrufen!
	function createTpMarker(glatlng, numb, name){
		var pos = new GPoint(glatlng.lng(), glatlng.lat());
		var ic = new GIcon(stdIcon, BASEURL+"img/karte/markers/marker.php?numb="+numb, null, '');
		ic.iconSize = new GSize(21, 34);
		var marker = new GMarker(pos, {draggable: true, title: name, clickable: true, icon: ic});
		marker.wtgIndex = Toernplaner.markers.length;
		
		var t = GEvent.addListener(marker, "dragend", function(draggedMarker){
				alert(draggedMarker);
			});
		
		Toernplaner.GListeners.push(t);
		Toernplaner.markers.push(marker);
		addMapMarker(marker);
	}
	
	
	
	function reset(){
		this.markers = new Array();
		refreshMapMarkers();
		map.removeOverlay(this.polyline);
		try{
			document.getElementById('vias').innerHTML = '';
			document.getElementById('ratgeber').innerHTML = 'Klicken Sie in die Karte um einen Startpunkt zu bestimmen<br/>';
			document.getElementById('startPunkt').value = '';
			document.getElementById('suchButton').disabled = true;
			$('routenresults').style.display="none";
		}catch(e){;};
		this.stopps = new Array(); //Literal mit Elementen: typ, lat, lng, bezeichnung, order
		this.markers = new Array();
		this.kriterien = {entfernung: 3,breite: 0, hoehe: 0, tiefe:0};
		
	}
	
}
