	
	// Globale Vars anlegen																	
	var map;
	var geocoder;
	
	var lat;
	var lng;
	var lat_orig;
	var lng_orig;
	
	var zoom;
	var map_restrict;
	var marker_label;
	
	var admin_active = false;
	var use_map_restrict = true;
	
	var MarkerIcon;
	
	var ZoomControl;
	var TypeControl;
	
	var geoXml;
	
	// 																										
	// -----------------------------------------------------												
	// FUNCTION InitGoogleMaps																				
	// -----------------------------------------------------												
	// 											 															
	function InitGoogleMaps() {
		// Ueberpruefen obMap-Canvas vorhanden, sonst Abbruch								
		if (!document.getElementById("googlemap_canvas")) return;
		
		if (GBrowserIsCompatible()) {
			
			// Parameter stehen als CSV (;) in element_text -> aus innerHTML auslesen		
			csv2vars(document.getElementById("googlemap_canvas").innerHTML);
			lat_orig = lat;
			lng_orig = lng;
			
			// Neue Map initialisieren														
			map = new GMap2(document.getElementById("googlemap_canvas"));
			
			// Map auf Punkt setzen															
			map.setCenter(new GLatLng(lat,lng), zoom);
			
			// Controls zu Map hinzufuegen													
			ZoomControl = new GSmallZoomControl();
			map.addControl(ZoomControl);
			TypeControl = new GHierarchicalMapTypeControl();
			map.addControl(TypeControl);
			
			// Geocoder fuer Adressuche initialisieren										
			geocoder = new GClientGeocoder();
			
			// gdir-Objekt anlegen, wenn Ausgabe-Div 'googlemap_directions' vorhanden		
			if (document.getElementById("googlemap_directions")) {
				gdir = new GDirections(map, document.getElementById("googlemap_directions"));
        		GEvent.addListener(gdir, "error", handleErrors_gdir);
			}
			// Wenn Marker-Label uebergeben, dann Marker setzen								
			if (marker_label) {
				point = new GLatLng(lat, lng);
				var marker = createMarker(point, marker_label);
				map.addOverlay(marker);
			}
		}
		
	}
    
    function setDirections(fromAddress, toAddress, locale) {
		if (document.getElementById('googlemap_directions')) {
			document.getElementById('googlemap_directions').style.visibility='visible';
			document.getElementById('googlemap_directions').style.height='100%';
		}
		else alert("div googlemap_directions not found");
		gdir.load("from: " + fromAddress + " to: " + toAddress, { "locale": locale });
    }


	
	// 																										
	// -----------------------------------------------------												
	// FUNCTION csv2vars																					
	// -----------------------------------------------------												
	// 											 															
	// Uebertraegt Werte aus CSV-Liste auf Variablen														
	// lat;lng;zoom;map_restrict;marker_label																
	// 											 															
	function csv2vars(csv_values) {
		var ARR_values = csv_values.split(";");
		
		// CSV in Vars ueberfuehren														
		lat 			= parseFloat(ARR_values[0]);
		lng 			= parseFloat(ARR_values[1]);
		zoom 			= parseFloat(ARR_values[2]);
		map_restrict 	= ARR_values[3];
		marker_label 	= ARR_values[4];
		
		// Defaultwerte setzen															
		if (!zoom) zoom = 13;
	}

	
	// 																										
	// -----------------------------------------------------												
	// FUNCTION addAddressToMap																				
	// -----------------------------------------------------												
	// 											 															
	// Wird von geocoder aufgerufen																			
	// Zeigt Fehler wenn Adresse nicht gefunden																
	// Setzt Marker und zentriert Map darauf wenn Adresse gefunden											
	// 											 															
	function addAddressToMap(response) {
		
		map.clearOverlays();
		// Wenn Adresse nicht gefunden									
		if (!response || response.Status.code != 200) {
			alert_not_found = "Die angegebene Adresse konnte nicht gefunden werden.";
			
			if (use_map_restrict && map_restrict) {	
				var map_restrict_translated = map_restrict.replace(/austria/gi, "%D6sterreich");

				alert_not_found += "\n\nHINWEIS: Diese Karte findet nur Adressen in der N%E4he von "+map_restrict_translated+"";
			}
			alert(unescape(alert_not_found));
		}
		// Wenn Adresse gefunden										
		else {
		
			// Ranzoomen					
			if (map.getZoom()<15) map.setZoom(15);
			
			
			// Marker setzen				
			place = response.Placemark[0];
			lat = place.Point.coordinates[1];
			lng = place.Point.coordinates[0];
			point = new GLatLng(lat, lng);
			
			var marker_infotext = "<p class='googlemap_info'>"+place.address+"</p>";
			
			var marker = createMarker(point, marker_infotext);
			map.addOverlay(marker);
			
			// Karte auf Marker zentrieren	
			map.setCenter( marker.getPoint() );
			
			//marker.openInfoWindowHtml('<p class="googlemap_info">'+place.address+'</p>', {maxWidth:100});
		}
	}
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION findAddress																					
	// -----------------------------------------------------												
	// 											 															
	// Wird von Form aufgerufen, sucht mit geocoder nach uebergebener Adresse (string)						
	// Ruft geocoder auf, der wiederum ruft addAddressToMap() auf											
	// 											 															
    function findAddress() {
		var address = document.forms["googlemap_search_form"].googlemap_search_input.value;
		if (!address) return false;
		if (use_map_restrict && map_restrict) address = address+", "+map_restrict;
		if (admin_active) {
			alert("Admin-Info:\n\nSuchstring: "+address+"\nEinschraenkung (fuer Admin nicht in Kraft): "+map_restrict);
		}
		geocoder.getLocations(address, addAddressToMap);
    }
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION findLocation																				
	// -----------------------------------------------------												
	// 											 															
	// Wird von Link aufgerufen, traegt uebergebene Adresse (string) in Form ein und sucht danach			
	// 											 															
	function findLinkedAddress(address) {
		use_map_restrict = false;
		document.forms["googlemap_search_form"].googlemap_search_input.value = address;
		findAddress();
	}
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION markAndCenter																				
	// -----------------------------------------------------												
	// 											 															
	// Wird von Link aufgerufen, setzt Marker und zentriert Map darauf										
	// 											 															
	function markAndCenter(csv_values) {
		map.clearOverlays();
		
		csv2vars(csv_values);
		
		// Map auf Punkt setzen															
		map.panTo(new GLatLng(lat,lng), zoom);
		//smoothPanTo(lat,lng,zoom);
		
		// Wenn Marker-Label uebergeben, dann Marker setzen								
		if (marker_label) {
			point = new GLatLng(lat, lng);
			var marker = createMarker(point, marker_label);
			map.addOverlay(marker);
		}
	}
	
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION createMarker																				
	// -----------------------------------------------------												
	// 											 															
	// Setzt einen Marker an uebergebenem Point																
	// 											 															
	function createMarker(point, marker_infotext) {
		var marker = new GMarker(point);
		
		// wenn marker_infotext != "marker", Marker klickbar machen und mit Infotext versehen				
		if ( marker_infotext!="marker" ) {
			GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(marker_infotext);
			});
		}
		return marker;
	}
	
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION GoogleAdminToolsActivate																	
	// -----------------------------------------------------												
	// 											 															
	function GoogleAdminToolsActivate(element_id) {
		admin_active = true;
		use_map_restrict = false;
	}
	
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION AdminCaptureCurrent																			
	// -----------------------------------------------------												
	// 											 															
	// Erzeugt CSV-String zu aktueller Ansicht und traegt ihn in Admin-Form ein								
	// 											 															
	function AdminCaptureCurrent(element_id) {
		lat = map.getCenter().lat();
		lng = map.getCenter().lng();
		var googlemap_element_link = ""+ lat.toFixed(5) + ";" + lng.toFixed(5) + ";" +map.getZoom() + "";
		document.getElementById("googlemap_element_link").value = googlemap_element_link;
	}
	
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION AdminLinkCurrent																			
	// -----------------------------------------------------												
	// 											 															
	// Erzeugt Link zu aktueller Ansicht in alert-Box														
	// 											 															
	function AdminLinkCurrent(element_id) {
		lat = map.getCenter().lat();
		lng = map.getCenter().lng();
		var googlemap_element_link = "<a class=\"arrow\" href=\"javascript:markAndCenter('"+ lat.toFixed(5) + ";" + lng.toFixed(5) + ";" +map.getZoom() + ";;marker')\">TEXT</a>";
		alert(googlemap_element_link);
	}
	
    
	// 																										
	// -----------------------------------------------------												
	// FUNCTION handleErrors_gdir																			
	// -----------------------------------------------------												
	// 											 															
	// Erzeugt Link zu aktueller Ansicht in alert-Box														
	// 											 															
	function handleErrors_gdir() {
		if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) 
			alert("Adresse nicht gefunden.\n\nBitte geben Sie die Adresse so ein, wie in diesen Beispielen:\n\nMünchen, Deutschland\nSalzburg, Österreich");
		else if (gdir.getStatus().code == G_GEO_SERVER_ERROR) 
			alert("Fehler bei der Abfrage\n Error code: " + gdir.getStatus().code + " (server error)");
		
		else if (gdir.getStatus().code == G_GEO_MISSING_QUERY) 
			alert("Fehler bei der Abfrage\n Error code: " + gdir.getStatus().code + " (missing query)");
		
		else if (gdir.getStatus().code == G_GEO_BAD_KEY) 
			alert("Fehler bei der Abfrage\n Error code: " + gdir.getStatus().code + " (bad key)");
		
		else if (gdir.getStatus().code == G_GEO_BAD_REQUEST) 
			alert("Fehler bei der Abfrage\n Error code: " + gdir.getStatus().code + " (bad request)");
		
		else alert("Fehler bei der Abfrage\n Error code: " + gdir.getStatus().code);
    }
