

(function() {

EMap = {

	routeStyles: new Array(
	{color: '#FF0000', icon:"/media/image/emap/point-mini-red.png"},
	{color: '#009900', icon:"/media/image/emap/point-mini-green.png"},
	{color: '#0000CC', icon:"/media/image/emap/point-mini-blue.png"}
	),
	pointIconSmall: "/media/image/emap/point-red.png",
	pointIconBig: "/media/image/emap/point-mini-port.png",
	lineColor: "#FF0000",
	lineWidth: 2,
	requestURL: "request.cfm",
	activePoint: null,
	currentRoute: {},
	stopPlay: 1,
	played: 0,
	mapdivid: null,
	mapsize: null,
	pagescroll: null,
	maptype: '',
	browser: "",
	zoomLimit: 11,
	copyright: 'Der Websitebetreiber &uuml;bernimmt keine Garantie f&uuml;r die Richtigkeit der dargestellten Routen.',
	marginX:20,
	marginY:10,
	winHeight: 600,
	winWidth: 800,
	window: function(){if(top != self){return true}else{return false}},
	windowed: function(){if(window.name == "emapWindow"){return true}else{return false}},
	label: false,

	/***** Point Constructor  ****************/
	Point: function(){
		this.id = null;
		this.name = null;
		this.type = null;
		this.lat = null;
		this.lng = null;
		this.description = null;
	},

	/***** Line Constructor  ****************/
	Line: function(){
		this.id = null;
		this.type = null;
		this.name = null;
		this.description = null;
		//this.points = new Array();
		this.vertices = new Array();
	},

	/*** Route Constructor ****************/
	Route: function(){
		 this.id = null;
		 this.name = null;
		 this.description = null;
		 this.points = new Array();
		 this.lines = new Array();
	},
	/*******************************/

	/*******************************************************************************************************/
	LoadMap: function(divid,options){
		EMap.mapsize = "full";
		mapsize = new GSize(400,300);
		//map = new GMap2(document.getElementById(divid),{size:mapsize});
		map = new GMap2(document.getElementById(divid),options);
		//map.addControl(new GSmallMapControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(0, 0), 2);
		bounds = new GLatLngBounds();

	},

	LoadFullscreenMap: function(divid,options){
		EMap.mapsize = "full";
		var arrayPageSize = getPageSize();
		mapsize = new GSize(arrayPageSize[0]- EMap.marginX*2 - 16, arrayPageSize[3] - EMap.marginY - 90);
		//mapsize = new GSize(1000,800);
		map = new GMap2(document.getElementById(divid),{size:mapsize});
		//map.addControl(new GSmallMapControl());
		map.addControl(new GLargeMapControl());
		//map.addControl(new GMapTypeControl());
		map.enableContinuousZoom();
		//map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(0, 0), 2);
		bounds = new GLatLngBounds();

	},

	/*******************************************************************************************************/
	LoadMiniMap: function(divid){

		EMap.mapsize = "mini";
		EMap.mapdivid = divid;
		map = new GMap2(document.getElementById(divid));
		
		map.setCenter(new GLatLng(0, 0), 1);
		bounds = new GLatLngBounds();
		EMap.PrepareCopyright();
		
		//document.getElementById(divid).style.position = '';





		/*
		element = document.createElement("div");
		element.style.width = "16px";
		element.style.height = "16px";
		element.style.position = "relative";
		element.style.left = "184px";
		element.style.top = "134px";
		element.style.cursor = "pointer";
		element.style.background = "url('image/image/emap/fullscreen.gif') no-repeat";
		element.onclick = function() { EMap.FullSize(); }

		document.getElementById(divid).appendChild(element);
		*/


		if(EMap.windowed()){
			EMap.FullSize();
		}


	},


	/*******************************************************************************************************/

	LoadRouteXML: function() {
	    var selected = document.getElementById('routes').selectedIndex
	    var id = document.getElementById('routes').options[selected].value
	    url = EMap.requestURL + '?action=getRoute&id='+id;
		EMap.HTTPRequest(url,'EMap.ImportRouteXML');
	},

	/*******************************************************************************************************/
	ImportRouteXML: function(){
		var xml = http_request.responseXML;
		EMap.currentRoute = new EMap.Route();
		EMap.currentRoute.id = xml.documentElement.getElementsByTagName("id")[0].firstChild.nodeValue;
		EMap.currentRoute.name = xml.documentElement.getElementsByTagName("name")[0].firstChild.nodeValu;
		EMap.currentRoute.description = xml.documentElement.getElementsByTagName("description")[0].firstChild.nodeValue;

		var points = xml.documentElement.getElementsByTagName("points")[0].getElementsByTagName("point");
		for (var i = 0; i < points.length; i++) {
			point = new EMap.Point();
			point.id = parseInt(points[i].getAttribute("id"));
			point.name = points[i].getElementsByTagName("name")[0].firstChild.nodeValue;
			point.lat = parseFloat(points[i].getAttribute("lat"));
			point.lng = parseFloat(points[i].getAttribute("lng"));
			point.description = points[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			EMap.currentRoute.points.push(point);
		}

		var lines = xml.documentElement.getElementsByTagName("lines")[0].getElementsByTagName("line");
		for (var i = 0; i < lines.length; i++) {
			line = new EMap.Line();
			line.id = parseInt(lines[i].getAttribute("id"));
			if(lines[i].getElementsByTagName("name")[0].firstChild){
				line.name = lines[i].getElementsByTagName("name")[0].firstChild.nodeValue;
			}
			line.type = parseFloat(lines[i].getAttribute("type"));
			if(lines[i].getElementsByTagName("description")[0].firstChild){
				line.description = lines[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			}
			if(lines[i].getElementsByTagName("vertices")[0].firstChild){
				line.vertices = EMap.VerticesToArray(lines[i].getElementsByTagName("vertices")[0].firstChild.nodeValue);
			}
			EMap.currentRoute.lines.push(line);
		}


		EMap.LoadRoute(EMap.currentRoute);
		EMap.BoundMap();
	},

	VerticesToArray: function(linepoints){
		var newLinePoints = new Array();
		var points = linepoints.split(";");
		for(n in points){
			//alert(points[n]);
			if(typeof(points[n]) == 'string' && points[n] != ""){
				var vertex = points[n].split(",");
				if(parseFloat(vertex[0]) && parseFloat(vertex[1])){
					var pointArr = new Array(parseFloat(vertex[0]),parseFloat(vertex[1]));
					newLinePoints[n] = pointArr;
				}else{
					return null;
				}
			}
		}
		return newLinePoints;
	},


  /*******************************************************************************************************/
	LoadRoutes: function(objRoutes){
		for(var i=0; i<=objRoutess.length; i++){
		  EMap.LoadRoute(objRoutes[i], false);
		}
	},

	/*******************************************************************************************************/
	LoadRoute: function(objRoute, clearmap){
		EMap.currentRoute = objRoute;
		EMap.activePoint = null;

	    if(clearmap){
			map.clearOverlays();
			bounds = new GLatLngBounds();
	    }

		for(n in  EMap.currentRoute.points){
			var lat = EMap.currentRoute.points[n].lat;
			var lng = EMap.currentRoute.points[n].lng;
			var title = EMap.currentRoute.points[n].name;
			var description = EMap.currentRoute.points[n].description;
			if(lat && lng){
				if(EMap.mapsize == 'mini'){
					EMap.AddPoint(lat,lng,EMap.IconSmall(),title,description);
				}else{
					//EMap.AddPoint(lat,lng,EMap.IconBig(),title,description);
					EMap.AddPoint(lat,lng,EMap.IconSmall(),title,description);
							if(EMap.label){
								var offset = new GSize(0,0);
								var label = new ELabel(new GLatLng(lat, lng), title,'e-map-pointlabel', offset, false, true);
								map.addOverlay(label);
							}
				}
			}
		}

		for(n in  EMap.currentRoute.lines){
			EMap.AddLine(EMap.currentRoute.lines[n].vertices, EMap.lineColor,EMap.lineWidth);
		}

		// Route Zoom Level Control
		GEvent.addListener(map, "zoomend", function(oldLevel,newLevel) {
			if(newLevel >= EMap.zoomLimit){
				EMap.ClearMap();
				document.getElementById("e-map-note").innerHTML = "Mit diesem Zoom-Level wird die Route nicht angezeigt.";
			}else{
				if(oldLevel >= EMap.zoomLimit ){
					EMap.LoadRoute(EMap.currentRoute);
					document.getElementById("e-map-note").innerHTML = "";
				}
			}
		});

		EMap.PrepareCopyright();
		EMap.Nav.Control();
	},

	BoundMap: function(){
		map.setCenter(bounds.getCenter());
	    if(map.getBoundsZoomLevel(bounds) >= EMap.zoomLimit){
			  map.setZoom(EMap.zoomLimit-1);
	    }else{
	      map.setZoom(map.getBoundsZoomLevel(bounds));
	    }
		map.savePosition();
	},

	/*******************************************************************************************************/
	AddPoint: function(lat, lng, icon, title, description){

		var marker = new GMarker(new GLatLng(lat, lng),icon);
		if(EMap.mapsize == "full"){
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml('<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+title+'</div><div class="e-map-infowindow-description">'+description+'</div></div>');
			});
		}
		map.addOverlay(marker);
		bounds.extend(marker.getPoint());


	},

	IconSmall: function(){
		var icon = new GIcon();
		icon.image = EMap.pointIconSmall;
		icon.iconSize = new GSize(10, 10);
		icon.iconAnchor = new GPoint(5, 5);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	},
	IconBig: function(){
		var icon = new GIcon();
		icon.image = EMap.pointIconBig;
		icon.iconSize = new GSize(30, 30);
		icon.iconAnchor = new GPoint(15, 25);
		icon.infoWindowAnchor = new GPoint(15, 25);
		return icon;
	},
	/*******************************************************************************************************/
	OpenInfoWindow: function(lat,lng,text){
	    map.openInfoWindowHtml(new GLatLng(lat, lng), text);
	},

	/*******************************************************************************************************/
	AddLine: function(vertices,lineColor,lineWidth){
	  var points = new Array();
	  //vertices >= new Array([0,0])
	  for(i in vertices ){
	    points[i] = new GLatLng(parseFloat(vertices[i][0]),parseFloat(vertices[i][1]));
	  }
	  var line = new GPolyline(points, EMap.lineColor, EMap.lineWidth, 1);
	  map.addOverlay(line);
	},

	/*******************************************************************************************************/
	ClearMap: function(){
	  //EMap.currentRoute = new Route();
	  //ClearRouteForm();
	  map.clearOverlays();
	  bounds = new GLatLngBounds();
	},

	/*******************************************************************************************************/
	PrepareCopyright: function(){
	  //document.getElementById(EMap.mapdivid).childNodes[1].style.fontSize = "5px";
	  //document.getElementById(EMap.mapdivid).childNodes[1].style.width = "200px";
	  //document.getElementById(EMap.mapdivid).childNodes[1].style.display = "none";
	  //document.getElementById(EMap.mapdivid).childNodes[2].style.display = "none";
	  //document.getElementById(EMap.mapdivid).childNodes[2].childNodes[0].style.width = "20px";
	},

	/*******************************************************************************************************/
	FullSize: function(){

		if(EMap.window()){
			openEmapWindow();
			return false;
		}

	    var objBody = document.getElementsByTagName("body").item(0);
	    // overlay div -----------------------------
	    var arrayPageSize = getPageSize();
	    var objOverlay = document.createElement("div");
	    objOverlay.setAttribute('id','e-map-overlay');
	    objOverlay.style.width = "100%";

	    //objOverlay.style.width = arrayPageSize[0]+"px";
	    //objOverlay.style.display = 'none';

		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			document.body.style.height = "100%";
			document.body.style.width = "100%";
			//document.body.style.overflow ='hidden';
			//document.body.scroll="no";
			objOverlay.style.height = arrayPageSize[1]+"px";
			document.documentElement.style.overflow ='hidden';
			EMap.browser = "IE6"
			var hideSelset = document.createElement("iframe");
			hideSelset.setAttribute('id','e-map-hideselect');
			objBody.appendChild(hideSelset);
			//alert("IE");
		}else{
			objOverlay.style.height = "100%";
			objOverlay.style.position = "fixed";
		}


	    objOverlay.style.opacity       = 0.75;
	    objOverlay.style.mozOpacity       = 0.75;
	    objOverlay.style.khtmlOpacity  = 0.75;
	    objOverlay.style.filter = 'alpha(opacity=75)';

	    objBody.appendChild(objOverlay);


	    // map div --------------------------------
	    var arrayPageScroll = getPageScroll();
	    var objEMap = document.createElement("div");
	    objEMap.setAttribute('id','e-map-wrapper');
	    objEMap.style.display = 'none';

		if(EMap.browser == "IE6"){
			objEMap.style.top = arrayPageScroll[1] + EMap.marginY +"px";
		}else{
			objEMap.style.top = EMap.marginY + "px";
		}
	    objEMap.style.left = EMap.marginX + "px";
	    objEMap.style.width = (arrayPageSize[0] - EMap.marginX*2 - 0) + "px";


	    pagescroll = arrayPageScroll[1];
		objEMap.innerHTML = '<div id="e-map-box">'+
			'<div id="e-map-fullsize"></div>'+
			'<div id="e-map-control">'+
				'<div id="e-map-control-karte" class="active" onclick="EMap.KarteMap()">Karte</div>'+
				'<div id="e-map-control-satellit" class="active" onclick="EMap.SatellitMap()">Satellit</div>'+
				'<div id="e-map-control-hybrid" class="active" onclick="EMap.HybridMap()">Hybrid</div>'+
				'<div id="e-map-control-close" class="active" onclick="EMap.CloseMap()"></div>'+
				'<div style="clear:both"></div>'+
			'</div>'+
			'<div id="e-map-nav">'+
				'<div id="e-map-nav-start" class="active" onclick="EMap.Nav.Start()"></div>'+
				'<div id="e-map-nav-prev" class="active" onclick="EMap.Nav.Prev()"></div>'+
				'<div id="e-map-nav-play" class="active" onclick="EMap.Nav.Play()"></div>'+
				'<div id="e-map-nav-stop" class="active" onclick="EMap.Nav.Stop()"></div>'+
				'<div id="e-map-nav-next" class="active" onclick="EMap.Nav.Next()"></div>'+
				'<div id="e-map-nav-finish" class="active" onclick="EMap.Nav.Finish()"></div>'+
				'<div id="e-map-note"></div>'+
				//'<div id="e-map-nav-close" class="active" onclick="EMap.CloseMap()"></div>'+
				'<div style="clear:both"></div>'+
			'</div>'+
		'</div>'+
		'<div id="e-map-copyright">'+ EMap.copyright +  '</div>';
		//window.scrollbars = false;
		//document.body.setAttribute('scroll','no');
		//document.body.style.overflow = "hidden";

		//document.body.scroll='no';
		var objCopy = document.createElement("div");
		objCopy.setAttribute('id','e-map-copyright');
	    objCopy.style.textAlign = 'center';
	    objCopy.style.display = 'none';
		objCopy.innerHTML = '';

	    objBody.appendChild(objEMap);
	    //objBody.appendChild(objCopy);
	    //EMap.Nav.Control();



	    // view divs --------------------------------
	    document.getElementById("e-map-overlay").style.display = "";
	    document.getElementById("e-map-wrapper").style.display = "block";
	    //document.getElementById("e-map-copyright").style.display = "block";

	    // load map --------------------------------
	    EMap.LoadFullscreenMap('e-map-fullsize');
		//document.getElementById('e-map-fullsize').style.position = "fixed";
		//document.getElementById('e-map-fullsize').style.background = "#eee none repeat scroll 0%";
		//document.getElementById('e-map-fullsize').style.display = "block";
	    //EMap.LoadRoute(EMap.currentRoute);
		//EMap.BoundMap();

	},

	KarteMap: function(){
		map.setMapType(G_NORMAL_MAP);
	},

	SatellitMap: function(){
		map.setMapType(G_SATELLITE_MAP);
	},

	HybridMap: function(){
		map.setMapType(G_HYBRID_MAP);
	},

	CloseMap: function(){

		if(EMap.windowed()){window.close(); return true}

		if(EMap.browser=="IE6"){

			var hideSelect = document.getElementById("e-map-hideselect");
			document.getElementsByTagName("body").item(0).removeChild(hideSelect);
			document.body.style.height = "100%";
			document.body.style.width = "100%";
			document.getElementsByTagName("html").item(0).style.overflow ='';
			//document.documentElement.style.overflow ='auto';
		}

		//document.body.style.overflow='visible';
		//document.body.scrollTop = pagescroll;
		EMap.stopPlay = 1;
		var objOverlay = document.getElementById("e-map-overlay");
		document.getElementsByTagName("body").item(0).removeChild(objOverlay);
		var objMap = document.getElementById("e-map-wrapper");
		document.getElementsByTagName("body").item(0).removeChild(objMap);


		GUnload();
		//EMap.LoadMiniMap(EMap.mapdivid);
		//EMap.LoadRoute(EMap.currentRoute);
		//EMap.BoundMap();
	},


	/*******************************************************************************************************/
	Nav: new Object({
		Start: function(){
			EMap.stopPlay = 1;
			var totalPoints = EMap.currentRoute.points.length;
			if (EMap.activePoint > 0 || EMap.activePoint == null) {
				EMap.activePoint = 0;
				map.panTo(new GLatLng(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng));
				EMap.OpenInfoWindow(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng,'<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+EMap.currentRoute.points[EMap.activePoint].name+'</div><div class="e-map-infowindow-description">'+EMap.currentRoute.points[EMap.activePoint].description+'</div></div>');
				EMap.Nav.Control();
			}
		},

		Prev: function(){
		  EMap.stopPlay = 1;
			var totalPoints = EMap.currentRoute.points.length;
			if (EMap.activePoint > 0) {
				EMap.activePoint=EMap.activePoint-1;
		    var lat = EMap.currentRoute.points[EMap.activePoint].lat;
		    var lng = EMap.currentRoute.points[EMap.activePoint].lng;
		    var name = EMap.currentRoute.points[EMap.activePoint].name;
		    var description = EMap.currentRoute.points[EMap.activePoint].description;
			map.panTo(new GLatLng(lat, lng));
		    //EMap.OpenInfoWindow(lat, lng,'<div class="e-map-infowindow-title">'+name+'</div><div class="e-map-infowindow-description">'+description+'</div>['+lat+', '+lng+']');
		    EMap.OpenInfoWindow(lat, lng,'<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+name+'</div><div class="e-map-infowindow-description">'+description+'</div></div>');
		    EMap.Nav.Control();
		  }
		},

		Next: function(){
		  EMap.stopPlay = 1;
			var totalPoints = EMap.currentRoute.points.length;
			if (EMap.activePoint < totalPoints-1) {
				if(EMap.activePoint == null){EMap.activePoint = 0}else{ EMap.activePoint++}
			    var lat = EMap.currentRoute.points[EMap.activePoint].lat;
			    var lng = EMap.currentRoute.points[EMap.activePoint].lng;
			    var name = EMap.currentRoute.points[EMap.activePoint].name;
			    var description = EMap.currentRoute.points[EMap.activePoint].description;
				map.panTo(new GLatLng(lat, lng));
			    //EMap.OpenInfoWindow(lat, lng,'<div class="e-map-infowindow-title">'+name+'</div><div class="e-map-infowindow-description">'+description+'</div>['+lat+', '+lng+']');
			    EMap.OpenInfoWindow(lat, lng,'<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+name+'</div><div class="e-map-infowindow-description">'+description+'</div></div>');
			    EMap.Nav.Control();
			}
		},

		Finish: function(){
		  EMap.stopPlay = 1;
			var totalPoints = EMap.currentRoute.points.length;
			if (EMap.activePoint < totalPoints-1) {
				EMap.activePoint = totalPoints-1;
				map.panTo(new GLatLng(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng));
			    EMap.OpenInfoWindow(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng,'<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+EMap.currentRoute.points[EMap.activePoint].name+'</div><div class="e-map-infowindow-description">'+EMap.currentRoute.points[EMap.activePoint].description+'</div></div>');
			    EMap.Nav.Control();
			}
		},

		Stop: function(){
		  EMap.stopPlay = 1;
		  EMap.activePoint--;
		  EMap.Nav.Control();
		},

		Play: function(){
			if(EMap.currentRoute.points.length > 0 && EMap.stopPlay == 1){
			  EMap.stopPlay = 0;
			  totalPoints = EMap.currentRoute.points.length;
			  if(EMap.activePoint == null || EMap.activePoint == totalPoints-1){EMap.activePoint = 0}else{ EMap.activePoint++}
			  navPlayNext();
			  EMap.Nav.Control();

			}
			function navPlayNext(){
				if(EMap.stopPlay == 0){
					map.panTo(new GLatLng(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng));
					EMap.OpenInfoWindow(EMap.currentRoute.points[EMap.activePoint].lat, EMap.currentRoute.points[EMap.activePoint].lng,'<div class="e-map-infowindow"><div class="e-map-infowindow-title">'+EMap.currentRoute.points[EMap.activePoint].name+'</div><div class="e-map-infowindow-description">'+EMap.currentRoute.points[EMap.activePoint].description+'</div></div>');
					EMap.Nav.Control();
					if(EMap.activePoint < totalPoints-1){
						EMap.activePoint++;
						setTimeout(navPlayNext,1500);
					}else{
						EMap.stopPlay = 1;
						EMap.Nav.Control();
					}
				}
			}
		},

		Control: function(){
			
			if(EMap.currentRoute.points.length > 0){
				
				if (EMap.activePoint == 0 || !EMap.activePoint){
					setInactive("e-map-nav-start");
					setInactive("e-map-nav-prev");
					setActive("e-map-nav-next");
					setActive("e-map-nav-finish");
					setActive("e-map-nav-play");
				}

				if (EMap.activePoint > 0 && EMap.activePoint < EMap.currentRoute.points.length-1){
					setActive("e-map-nav-start");
					setActive("e-map-nav-prev");
					setActive("e-map-nav-next");
					setActive("e-map-nav-finish");
					setActive("e-map-nav-play");
				}
				if(EMap.activePoint == EMap.currentRoute.points.length-1){
					setActive("e-map-nav-start");
					setActive("e-map-nav-prev");
					setInactive("e-map-nav-next");
					setInactive("e-map-nav-finish");
					setInactive("e-map-nav-play");
				}

				if(EMap.stopPlay == 1){
					setInactive("e-map-nav-stop");
					setActive("e-map-nav-play");
				}else{
					setActive("e-map-nav-stop");
					setInactive("e-map-nav-play");
				}

			}else{
				setInactive("e-map-nav-start");
				setInactive("e-map-nav-prev");
				setInactive("e-map-nav-next");
				setInactive("e-map-nav-finish");
				setInactive("e-map-nav-play");
			}
			
		}
		
	}),

  /*******************************************************************************************************/
	SwithToRoute: function(objRoute,clear){
		EMap.ToggleCompareControl();
		//EMap.FullSize();
		EMap.LoadRoute(objRoute,clear);
		EMap.BoundMap();
	},
	
	
	
	ToggleCompareControl: function(){
		$("#e-map-nav").toggle();
		$("#e-map-options").height(0).toggle();
		
	},
	
	AddCompareControl: function(routesArray,active){
		$("#e-map-nav").hide();
		$("#e-map-fullsize").wrap("<div id='e-map-wrapoptions'></div>");
		$("#e-map-wrapoptions").height($("#e-map-fullsize").height()+24);
		//$("#e-map-fullsize").height(($("#e-map-fullsize").height()-80)+"px");
		//$("#e-map-fullsize").height("-=80px");
		Options = "<div id='e-map-options' style='z-index: 999; height:14px;width: "+($("#e-map-fullsize").width())+"px'></div>"
		RoutesContainer="<div id='e-map-options-routes'>"+
			"<div class='e-map-options-tab'>weitere optionen anzeigen/verstecken</div>"+
			"<div id='e-map-options-routes-content'></div>"+
			"</div>";

		$("#e-map-fullsize").after(Options);
		$("#e-map-options").append(RoutesContainer);

		RoutesHTML="<div id='e-map-routes'>";
	    for(var i=0; i<routesArray.length; i++){
			if(i == active){
				checked="checked='checked'";
			}else{
				checked="";
			}
	      RoutesHTML+="<div class='e-map-route'>"+
				"<input id='routeoff:"+i+"' name='routeoff' value='"+i+"' type='checkbox' class='checkbox' checked='checked' />&nbsp;"+
				//"<input id='activeroute:"+i+"' name='routeactive' value='"+i+"' type='radio' class='radio' "+checked+" />&nbsp;"+
				"<span class='e-map-route-title' id='"+i+"'><font color='"+EMap.routeStyles[i].color+"'>"+routesArray[i].name +"</font></span>"+
			"</div>";
	    }
		RoutesHTML+="</div><div class='e-map-sitelogo'></div>";

		RoutesHelp = "<div id='e-map-routes-help'>"+
		"Klicken Sie auf den Checkbox um eine Route zu aktivieren/deaktivieren.<br /><br />"+
		"Klicken Sie auf den Radiobox um die Navigation für die Route zu aktivieren."+
		"</div>";

		emapOptions=$("#e-map-options");
		$("#e-map-options-routes-content").append(RoutesHTML);

		$(".e-map-options-tab").bind("click",hideMapOptions);
		/*
		$(".e-map-options-tab").click(function(){
			$("#e-map-options").animate({
				height: "14px"
			},'slow');
		}).toggle(function(){
			$("#e-map-options").animate({
				height: "100px"
			},'slow');
		});
		*/

		$("span.e-map-route-title",emapOptions).click(function(){
			EMap.SwithToRoute(routesArray[$(this).attr("id")],true);
		});
		
		$("input[name=routeoff]",emapOptions).click(function(){
			EMap.ClearMap();
			$("input[name=routeoff]",emapOptions).each(function(){
				//current = $("input[name='routeactive'][value='"+$(this).val()+"']",emapOptions);
				if(this.checked){
					//current.attr('disabled',false);
					EMap.lineColor = EMap.routeStyles[$(this).val()].color;
					EMap.pointIconSmall= EMap.routeStyles[$(this).val()].icon;
					EMap.LoadRoute(routesArray[$(this).val()], false);
				}else{
					/*current.attr('disabled',true);
					if(current.attr('checked')){
						current.attr('checked',false);
						EMap.currentRoute = new EMap.Route();
						EMap.Nav.Control();
					}*/
				}
			});
			EMap.BoundMap();
		});

		/*
		$("input[name=routeactive]",emapOptions).click(function(){
			EMap.currentRoute = routesArray[$(this).val()];
			EMap.stopPlay = 1;
			var totalPoints = EMap.currentRoute.points.length;
			EMap.activePoint = null;
			EMap.Nav.Control();
		});
		*/

		showMapOptions();

		function hideMapOptions(){
			$("#e-map-options").animate({
				height: "-=86px"
			},'fast')
			$("#e-map-fullsize").animate({
				height: "+=86px"
			},'fast');
			$(".e-map-options-tab").unbind();
			$(".e-map-options-tab").bind("click",showMapOptions);
		}

		function showMapOptions(){
			$("#e-map-options").animate({
				height: "+=86px"
			},'fast')
			$("#e-map-fullsize").animate({
				height: "-=86px"
			},'fast');
			$(".e-map-options-tab").unbind();
			$(".e-map-options-tab").bind("click",hideMapOptions);
		}

	},


	/*******************************************************************************************************/
	http_request: false,
	callback: null,
	HTTPRequest: function(url,callback1) {
		callback = callback1;
		http_request = false;

		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
			if (http_request.overrideMimeType) {
				http_request.overrideMimeType('text/xml');
			}
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}

		if (!http_request) {
			alert('Giving up :( Cannot create an XMLHTTP instance');
			return false;
		}
		http_request.onreadystatechange = StateChange;
		http_request.open('GET', url, true);
		http_request.send(null);

		function StateChange() {
			if (http_request.readyState == 4) {
				if (http_request.status == 200) {
					//alert(callback);
					//data = http_request.responseXML;
					//callback = xmldoc;
					eval(callback+'()');
				} else {
					alert('There was a problem with the request.');
				}
			}

		}
	}


	

}
/*******************************************************************************************************/


	
	

	function openEmapWindow(){

		emapHead = $("head").html();
		emapWindow=window.open('','emapWindow','width='+EMap.winWidth+',height='+EMap.winHeight);
		emapHTML = $("#e-map-minimap").parent().html();
		//emapHTML = "<div>"+emapHTML+"</div";


		emapWindow.document.write( "<html><head>" + emapHead + "</head><body><div style='margin-left:-9999; position: absolute'>"+ emapHTML + "</div></body></html>" );
		emapWindow.document.close();

		//IE Hook, reload window for script evaluating
		emapWindow.location.reload();

		emapWindow.focus();

		/*
		emapWindow.EMap.FullSize();
		emapWindow.EMap.LoadRoute(EMap.currentRoute,true);
		emapWindow.EMap.BoundMap();
		*/
		return true;

	}


	function openEmapWindow1(){
	
		emapHead = $("head").html();
		emapWindow=window.open('','emapWindow','width='+EMap.winWidth+',height='+EMap.winHeight);
		//emapHTML = $("#e-map-minimap").parent().html();
		//emapHTML = "<div>"+emapHTML+"</div";
	
	
		//emapWindow.document.write( "<html><head>" + emapHead + "</head><body><div style='margin-left:-9999; position: absolute'>"+ emapHTML + "</div></body></html>" );
		emapWindow.document.write( "<html><head>" + emapHead + "</head><body><div id='e-map-minimap-new'></div></body></html>" );
		emapWindow.document.close();
		//alert(1)
		
		//EMap.LoadMiniMap('e-map-minimap-new');
		
		//EMap.FullSize();
		//EMap.LoadRoute(EMap.currentRoute,true);
		//EMap.BoundMap();
		//IE Hook, reload window for script evaluating
		//emapWindow.location.reload();
	
		emapWindow.focus();
	
		/*
		emapWindow.EMap.FullSize();
		emapWindow.EMap.LoadRoute(EMap.currentRoute,true);
		emapWindow.EMap.BoundMap();
		*/
		return true;
	
	}
	




	function getPageSize(){

	  var xScroll, yScroll;

	  if (window.innerHeight && window.scrollMaxY) {
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	  } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	  } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	  }

	  var windowWidth, windowHeight;

	//  console.log(self.innerWidth);
	//  console.log(document.documentElement.clientWidth);

	  if (self.innerHeight) { // all except Explorer
		if(document.documentElement.clientWidth){
		  windowWidth = document.documentElement.clientWidth;
		} else {
		  windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	  } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	  } else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	  }
	  //alert(document.body.clientHeight +" "+parent.document.body.clientHeight);
	  // for small pages with total height less then height of the viewport
	  if(yScroll < windowHeight){
		pageHeight = windowHeight;
	  } else {
		pageHeight = yScroll;
	  }

	//  console.log("xScroll " + xScroll)
	//  console.log("windowWidth " + windowWidth)

	  // for small pages with total width less then width of the viewport
	  if(xScroll < windowWidth){
		pageWidth = xScroll;
	  } else {
		pageWidth = windowWidth;
	  }
	//  console.log("pageWidth " + pageWidth)

	  arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	  return arrayPageSize;
	}


	function getPageScroll(){

	  var xScroll, yScroll;

	  if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	  } else if (document.documentElement && document.documentElement.scrollTop){  // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	  } else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;
	  }

	  arrayPageScroll = new Array(xScroll,yScroll)
	  return arrayPageScroll;
	}

	function setInactive(id){
		var obj = document.getElementById(id);
		if(obj){
			obj.style.cursor = "default"
			obj.style.opacity       = 0.5;
			obj.style.mozOpacity       = 0.5;
			obj.style.khtmlOpacity  = 0.5;
			obj.style.filter = 'alpha(opacity=50)';
		}
	}

	function setActive(id){
		var obj = document.getElementById(id);
		if(obj){
			obj.style.cursor = "pointer";
			obj.style.opacity       = 0.99;
			obj.style.mozOpacity       = 0.99;
			obj.style.khtmlOpacity  = 0.99;
			obj.style.filter = 'alpha(opacity=99)';
		}
	}



	// ---------------------------------------------------

	function showSelectBoxes(){
		var selects = document.getElementsByTagName("select");
		for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "visible";
		}
	}

	// ---------------------------------------------------

	function hideSelectBoxes(){
		var selects = document.getElementsByTagName("select");
		for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "hidden";
		}
	}

	// ---------------------------------------------------

	function showFlash(){
		var flashObjects = document.getElementsByTagName("object");
		for (i = 0; i < flashObjects.length; i++) {
			flashObjects[i].style.visibility = "visible";
		}

		var flashEmbeds = document.getElementsByTagName("embed");
		for (i = 0; i < flashEmbeds.length; i++) {
			flashEmbeds[i].style.visibility = "visible";
		}
	}

	// ---------------------------------------------------

	function hideFlash(){
		var flashObjects = document.getElementsByTagName("object");
		for (i = 0; i < flashObjects.length; i++) {
			flashObjects[i].style.visibility = "hidden";
		}

		var flashEmbeds = document.getElementsByTagName("embed");
		for (i = 0; i < flashEmbeds.length; i++) {
			flashEmbeds[i].style.visibility = "hidden";
		}

	}




	function ELabel(point, title, classname, pixelOffset, percentOpacity, overlap) {
        // Mandatory parameters

        this.point = point;
        this.title = title;

        // Optional parameters
        this.classname = classname||"";

        this.pixelOffset = pixelOffset||new GSize(0,0);
        if (percentOpacity) {
          if(percentOpacity<0){percentOpacity=0;}
          if(percentOpacity>100){percentOpacity=100;}
        }
        this.percentOpacity = percentOpacity;
        this.overlap=overlap||false;
    }

	ELabel.prototype = new GOverlay();

	ELabel.prototype.initialize = function(map) {
		var div = document.createElement("div");
		div.style.position = "absolute";
		div.innerHTML = '<div class="' + this.classname + '">' + this.title + '</div>' ;
		map.getPane(G_MAP_FLOAT_PANE).appendChild(div);

		this.map_ = map;
		this.div_ = div;
		if (this.percentOpacity) {
		  if(typeof(div.style.filter)=='string'){div.style.filter='alpha(opacity:'+this.percentOpacity+')';}
		  if(typeof(div.style.KHTMLOpacity)=='string'){div.style.KHTMLOpacity=this.percentOpacity/100;}
		  if(typeof(div.style.MozOpacity)=='string'){div.style.MozOpacity=this.percentOpacity/100;}
		  if(typeof(div.style.opacity)=='string'){div.style.opacity=this.percentOpacity/100;}
		}
		if (this.overlap) {
		  var z = GOverlay.getZIndex(this.point.lat());
		  this.div_.style.zIndex = z;
		}
	}

	ELabel.prototype.remove = function() {
		this.div_.parentNode.removeChild(this.div_);
	}

	ELabel.prototype.copy = function() {
		return new ELabel(this.point, this.title, this.classname, this.pixelOffset, this.percentOpacity, this.overlap);
	}

	ELabel.prototype.redraw = function(force) {
		var p = this.map_.fromLatLngToDivPixel(this.point);
		var h = parseInt(this.div_.clientHeight);

		this.div_.style.left = (p.x + this.pixelOffset.width) + "px";
		this.div_.style.top = (p.y + this.pixelOffset.height - h) + "px";
	}

	ELabel.prototype.show = function() {
		this.div_.style.display=""; alert(this.div_.style.display);
	}

	ELabel.prototype.hide = function() {
		this.div_.style.display="none";
	}

	ELabel.prototype.setContents = function(title) {
		this.title = title;
		this.div_.innerHTML = '<div class="' + this.classname + '">'+ this.title + '</div>';
		this.redraw(true);
	}

	ELabel.prototype.setPoint = function(point) {
		this.point = point;
		if (this.overlap) {
		  var z = GOverlay.getZIndex(this.point.lat());
		  this.div_.style.zIndex = z;
		}
		this.redraw(true);
	}


	ELabel.prototype.setOpacity = function(percentOpacity) {
		if (percentOpacity) {
		  if(percentOpacity<0){percentOpacity=0;}
		  if(percentOpacity>100){percentOpacity=100;}
		}
		this.percentOpacity = percentOpacity;
		if (this.percentOpacity) {
		  if(typeof(this.div_.style.filter)=='string'){this.div_.style.filter='alpha(opacity:'+this.percentOpacity+')';}
		  if(typeof(this.div_.style.KHTMLOpacity)=='string'){this.div_.style.KHTMLOpacity=this.percentOpacity/100;}
		  if(typeof(this.div_.style.MozOpacity)=='string'){this.div_.style.MozOpacity=this.percentOpacity/100;}
		  if(typeof(this.div_.style.opacity)=='string'){this.div_.style.opacity=this.percentOpacity/100;}
		}
	}
	
})();