	var map = null;
	var mapLat = 48.698524;
	var mapLon = 8.134003;
	var mapZoom = 15;
	
	var poiMarkers = new Array();
	var poiZoom;
	var poiMapCenter;
	var poiLoaded = false;
	
	var suchMarkers = new Array();
	var suchZoom;
	var suchMapCenter;
	var suchLoaded = false;
	
	var rundgangMarkers = new Array();
	var rundgangZoom;
	var rundgangMapCenter;
	var rundgangLoaded = false;
	var contentDiv;
	
	function loadGMap()
	{
	    if (!GBrowserIsCompatible())
		    return;
		
		map = new GMap2($$('#karte .container')[0]);
		
		var copyright = new GCopyright(1,
			new GLatLngBounds(new GLatLng(48.0,8.0),new GLatLng(49.0,9.0) ),
			16, "Stadt Buehl");

      	// ====== Create a copyright collection =====
      	// ====== and add the copyright to it   =====
      	var copyrightCollection = new GCopyrightCollection('Kartendaten:');
      	copyrightCollection.addCopyright(copyright);
			
		var CustomGetTileUrl=function(point,zoom){
			var url = "kacheln/" + zoom + "_" + point.x + "_" + point.y + ".png" ;
			return url ;
			}
		
		var tilelayers = [new GTileLayer(copyrightCollection,14,16)];
      	tilelayers[0].getTileUrl = CustomGetTileUrl;
		tilelayers[0].getOpacity = function(){return 1;}
		tilelayers[0].getTileUrl = CustomGetTileUrl ;

		var normalmap = new GMapType(tilelayers, G_SATELLITE_MAP.getProjection(), "Stadtplan", { shortName: "Stadt", maxResolution: 16, minResolution: 14, errorMessage: "F&uuml;r diesen Bereich stehen keine Daten der Stadt B&uuml;hl zur Verf&uuml;gung. Bitte wechseln Sie zur Ansicht Karte oder Satellit" });
		map.addMapType(normalmap);
		
		var hybridLayer = [ tilelayers[0], G_HYBRID_MAP.getTileLayers()[1] ] ;
		var hybridmap = new GMapType(hybridLayer,  G_SATELLITE_MAP.getProjection(), "Mix",{shortName:"Mix",maxResolution:16,minResolution:14,errorMessage:"Für diesen Maßstab stehen keine Daten zur Verfügung"}) ;
		map.addMapType(hybridmap);
		
		var hierarchy = new GHierarchicalMapTypeControl();
		// put the OS Hybrid under the OS and rename it
		hierarchy.addRelationship(normalmap, hybridmap, "Hybrid", false);
		// make Google Satellite Hybrid NOT be the satellite default
		hierarchy.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, null, false);

		map.addControl(hierarchy);
		map.addControl(new GOverviewMapControl());
		//map.addControl(new GLargeMapControl());
		map.addControl(new GLargeMapControl3D());
		
		map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(mapLat, mapLon), mapZoom);
		map.setMapType(normalmap);
		//parent.karteninhalt.gibStandorte();
	}

	function createMarker(point, tooltip, html, symbol, width, height) {
	    var marker = new GMarker(point, { icon: gibIcon(symbol, width, height), title: tooltip });
	    GEvent.addListener(marker, "click", function() {
	        if (html == null)
	            html = "<div id=\"infoDiv\"><p>Daten werden geladen...</p>"
	        //alert(html);
	        //marker.openInfoWindow("<div id=\"infoDiv\">" + html + "</div>");
	        marker.openInfoWindow(html);
	    });

	    return marker;
	}

	
	
	function gibIcon(symbol, width, height)
	{
	    var icon = new GIcon();
		//alert(image)
		icon.image = "images/" + symbol + ".png";
        //icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        icon.iconSize = new GSize(width, height);
        //icon.shadowSize = new GSize(width, height);
        icon.iconAnchor = new GPoint(width/2, height/2);
        icon.infoWindowAnchor = new GPoint(width/2, 0);
        icon.infoShadowAnchor = new GPoint(width/2, 0);
		return icon;
    }

    

	// This function picks up the click and opens the corresponding info window
	function myclick(i) {
		gmarkers[i].openInfoWindowHtml(htmls[i]);
	}
	
	function marker(id, pfad, html, isVisible, gObj) 
	{
		this.id = id;
		this.pfad = pfad;
		this.html = html;
		this.isVisible = isVisible;
		this.gObj = gObj;
  	}
	
	function setDarstellung(pfad, checked)
	{
		for(var i=0; i<poiMarkers.length; i++){
			var krit = poiMarkers[i].pfad.substr(0, pfad.length);
			if (krit==pfad){
				if(checked)
					poiMarkers[i].gObj.show();
				else
					poiMarkers[i].gObj.hide();
				poiMarkers[i].isVisible = checked;
			}	
		}
	
	}
	function hideMarker(pfad)
	{
		for(var i=0; i<poiMarkers.length; i++){
			var krit = poiMarkers[i].pfad.substr(0, pfad.length);
			if (krit==pfad){
				poiMarkers[i].gObj.hide();
				poiMarkers[i].isVisible = false;
			}	
		}
	
	}

	function showMarker(pfad)
	{
		for(var i=0; i<poiMarkers.length; i++){
			var krit = poiMarkers[i].pfad.substr(0, pfad.length);
			if (krit==pfad){
				poiMarkers[i].gObj.show();
				poiMarkers[i].isVisible = true;
			}	
		}
	
	}
	
	function hidePoiMarkers()
	{
		for(var i=0; i<poiMarkers.length; i++){
			poiMarkers[i].gObj.hide();
		}
	
	}

	function showPoiMarkers()
	{
		for(var i=0; i<poiMarkers.length; i++){
			if(poiMarkers[i].isVisible)
				poiMarkers[i].gObj.show();
		}
	}
	
	function ZoomTo(id, lat, lon, zoom)
	{
		var center = new GLatLng(lat,lon);
		if (parseInt(zoom)!=map.getZoom())
			map.setCenter(center, zoom, map.getCurrentMapType())
		else
			map.panTo(center);
		
		//parent.suchMarkers[id].gObj.openInfoWindowHtml("<p id='test'>Marker " + id + "</p>")
		GEvent.trigger(suchMarkers[id].gObj, "click");
		//window.setTimeout(function(){contentDiv.innerHTML = "Ein neuer Text..";}, 1000);
		//alert(parent.map.updateInfoWindow("test!"));

    }

    function ZoomAufStartansicht() {
        var center = new GLatLng(mapLat, mapLon);
        var zoom = mapZoom;
        if (parseInt(zoom) != map.getZoom())
            map.setCenter(center, zoom, map.getCurrentMapType())
        else
            map.panTo(center);
    }
    

    function ZoomAufStrasse(lat, lon) {
        if (lat!=null && lon!=null)
            var center = new GLatLng(lat, lon);
        else
            var center = map.getCenter();
            
        var zoom = 18;
        
        if (parseInt(zoom) != map.getZoom())
            map.setCenter(center, zoom, map.getCurrentMapType())
        else
            map.panTo(center);
    }

    function ZoomAufOrt(lat, lon) {
        if (lat!=null && lon!=null)
            var center = new GLatLng(lat, lon);
        else
            var center = map.getCenter();
        
        var zoom = 14;
        
        if (parseInt(zoom) != map.getZoom())
            map.setCenter(center, zoom, map.getCurrentMapType())
        else
            map.panTo(center);
    }

    function GibMittelpunkt() {
        var center = map.getCenter();
        alert(center.x + ' ' + center.y);

    }
    
	
	function markerStadtrundgangClick(id)
	{
		GEvent.trigger(rundgangMarkers[id].gObj, "click");
	}
	
	function zoomToExtend(objs)
	{
		var bounds = new GLatLngBounds();
		for (var i = 0; i < objs.length; i++)
		    bounds.extend(objs[i].getPoint());
		
		map.setZoom(map.getBoundsZoomLevel(bounds));
		
		// zusaetzlich soll die karte auch noch optimal zentriert werden
		var lat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
		var lng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
		
		map.panTo(new GLatLng(lat,lng));
		//parent.map.setCenter(new parent.GLatLng(lat,lng));

	}
	
	
	function removeMarkersSuche()
	{
		for(var i=0; i<suchMarkers.length; i++){
			map.removeOverlay(suchMarkers[i].gObj);
		}
		
	}

	function hideMarkersSuche()
	{
		for(var i=0; i<suchMarkers.length; i++){
			suchMarkers[i].gObj.hide();
		}
	
	}

	function showMarkersSuche()
	{
		for(var i=0; i<suchMarkers.length; i++){
			suchMarkers[i].gObj.show();
		}
	}
	
	function hideMarkersRundgang()
	{
		for(var i=0; i<rundgangMarkers.length; i++){
			rundgangMarkers[i].gObj.hide();
		}
	
	}

	function showMarkersRundgang()
	{
		for(var i=0; i<rundgangMarkers.length; i++){
			rundgangMarkers[i].gObj.show();
		}
	}
	

	
