function getMapPosition(theMap, theMarker, streetField, cityField) {

	var dir = new google.maps.Directions();
	var waypoints = [];
	
	waypoints[0] = theMarker.getPoint();
	var tmp = theMarker.getPoint().lat()+0.0000000000001;
	//var tmp = regionMarker.getPoint().lat()+0.01;
	waypoints[1] = tmp+','+theMarker.getPoint().lng();
	//dir.loadFromWaypoints(waypoints,{getSteps: true, getPolyline:true});
	dir.loadFromWaypoints(waypoints);
	
	//var data = ;
	google.maps.Event.addListener(dir,'load',
	function() {
		//alert(dir.getStatus());
		
		if (dir.getStatus().code != 200) {
			alert('Fehler! Adresse kann nicht bestimmt werden.');
			return false;
		}
		
		//alert(print_r(dir.getPolyline().getVertex(0)));
		
		var data = dir.getGeocode(0);
		//alert(print_r(data));
		/*
		if (data.AddressDetails['Accuracy'] < 6) {
			alert('Fehler! Adresse kann nicht bestimmt werden.');
			return false;
		}
		*/
		var geo = new google.maps.ClientGeocoder();
		geo.setViewport(theMap.getBounds());
		
		geo.getLocations(data.address, 
						function(response) { 
							response.streetField = streetField;
							response.cityField   = cityField; 
							processGeocoding(response);
						});
		
	})
}


function processGeocoding(response) {
	
	if (!response || response.Status.code != 200) {
		alert('Fehler! Adresse kann nicht bestimmt werden.');
		return false;
	}
	
    place = response.Placemark[0];
	var address = place.address;;

	new Ajax.Request('/region-process-geodata', {
		method: 'get',
		parameters: {data: address}
	});
	
	//alert(address);
	
	//get the street
	street = address.substring(0,address.indexOf(','));
	
	//get the city + zip
	tmp = place.address.slice(address.indexOf(',') + 2);
	city = tmp.substring(0,tmp.lastIndexOf(','));

	if (response.streetField == response.cityField || typeof response.cityField == 'undefined') {
		$(response.streetField).value = street + ', ' + city;
	}
	else {
		$(response.streetField).value = street;
		$(response.cityField).value   = city;
	}
}


function initRegionMap(initlat,initlon,accuracy){

	var mapControl = new google.maps.SmallMapControl();
	regionMap = new google.maps.Map2($("regionSelectMap"));

    regionMap.addControl(mapControl);
    
    if (typeof initlat != "undefined" && typeof initlon != "undefined") {
		var home = new google.maps.LatLng(initlat,initlon);
		
		var zoom = 6;
		if (accuracy == 2) { zoom = 8; }
		if (accuracy == 3) { zoom = 11; }
		if (accuracy == 4) { zoom = 14; }
		if (accuracy == 5) { zoom = 15; }
		if (accuracy == 6) { zoom = 16; }
		if (accuracy >= 7) { zoom = 17; }
		
		
	}
	else {
		var home = new google.maps.LatLng(52.523480,13.411494);
		var zoom = 12;
	}
	
	regionMap.setCenter(home, zoom);
    
    
    var icon = createMapIcon('user');
    regionMarker = new google.maps.Marker(home,{icon: icon, draggable: true});
    

	regionMap.addOverlay(regionMarker);
	regionMarker.enableDragging();
		
    GEvent.addListener(regionMap,"click", function(overlay, latlng) {
		if (latlng) {   
			regionMarker.setLatLng(latlng);
		}
    });
	
}



function initLocationNewMap(initlat,initlon,accuracy){

	var mapControl = new google.maps.SmallMapControl();
	locationNewMap = new google.maps.Map2($("createLocation_map"));

    locationNewMap.addControl(mapControl);
    
    if (typeof initlat != "undefined" && typeof initlon != "undefined") {
		var home = new google.maps.LatLng(initlat,initlon);
		
		var zoom = 6;
		if (accuracy == 2) { zoom = 8; }
		if (accuracy == 3) { zoom = 11; }
		if (accuracy == 4) { zoom = 14; }
		if (accuracy == 5) { zoom = 15; }
		if (accuracy == 6) { zoom = 16; }
		if (accuracy >= 7) { zoom = 17; }
		
		
	}
	else {
		var home = new google.maps.LatLng(52.523480,13.411494);
		var zoom = 12;
	}
	
	locationNewMap.setCenter(home, zoom);
    
    
    var icon = createMapIcon('location_standard');
    locationNewMarker = new google.maps.Marker(home,{icon: icon, draggable: true});
    

	locationNewMap.addOverlay(locationNewMarker);
	
    GEvent.addListener(locationNewMap,"click", function(overlay, latlng) {
		if (latlng) {   
			locationNewMarker.setLatLng(latlng);
			$('markerpos').value = latlng;
		}
    });
	
}



function initWelcomeMap(initlat,initlon,accuracy){

	var mapControl = new google.maps.SmallMapControl();
	welcomeMap = new google.maps.Map2($("welcome_map"));

    welcomeMap.addControl(mapControl);
    
    if (typeof initlat != "undefined" && typeof initlon != "undefined") {
		var home = new google.maps.LatLng(initlat,initlon);
		
		var zoom = 6;
		if (accuracy == 2) { zoom = 8; }
		if (accuracy == 3) { zoom = 11; }
		if (accuracy == 4) { zoom = 14; }
		if (accuracy == 5) { zoom = 15; }
		if (accuracy == 6) { zoom = 16; }
		if (accuracy >= 7) { zoom = 17; }
		
		
	}
	else {
		var home = new google.maps.LatLng(52.523480,13.411494);
		var zoom = 12;
	}
	
	welcomeMap.setCenter(home, zoom);
    
    
    var icon = createMapIcon('user');
    welcomeMarker = new google.maps.Marker(home,{icon: icon, draggable: true});
    

	welcomeMap.addOverlay(welcomeMarker);
	
    GEvent.addListener(welcomeMap,"click", function(overlay, latlng) {
		if (latlng) {   
			welcomeMarker.setLatLng(latlng);
			$('markerpos').value = latlng;
		}
    });
	
}


/**
* Baut verschiedene Icons fuer die Map
**/
function createMapIcon(type) {

	switch (type) {
		case 'location_standard':
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_location1.gif';
			icon.iconSize = new GSize(23,27);
		break;
		case 'location_active':
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_location2.gif';
			icon.iconSize = new GSize(23,27);
		break;
		case 'location_fav':
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_location3.gif';
			icon.iconSize = new GSize(23,27);
		break;
		case 'user':
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_user.gif';
			icon.iconSize = new GSize(23,27);
		break;
		case 'user_friend':
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_user_friend.gif';
			icon.iconSize = new GSize(23,27);
		break;
		default:
			var icon = new google.maps.Icon(G_DEFAULT_ICON);
			icon.image = '/images/map_marker_standard.gif';
			icon.iconSize = new GSize(23,27);
		break;
	}
	return icon;
}

function padding(laenge) {
  result = '';
  for (i = 0; i < laenge; i++)
    result = result + '___';
  return result;
}

function print_r(das_array, ebene) {
  var result = '';  
  for (var wert in das_array)
    if (typeof das_array[wert] == "object")
      result = result + ' ' + padding(ebene) + wert + "\n" + print_r(das_array[wert], ebene + 1);
    else
      result = result + ' ' + padding(ebene) + wert + ' = ' + das_array[wert] + "\n";

  return result;
}