Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

function is_num(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	
	
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}

function load_map() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("map"));
		geocoder = new GClientGeocoder();

		custom_map_controls(map, images_url, user_home);
		rounded_corners(map, images_url);
		
		map.addMapType(G_PHYSICAL_MAP);
		
		map.setCenter(center, zoom);
		session_saver();
		//hide_copyright();

		$("map").appendChild(tooltip);
		
		if(mode == 'edit_user') {
			edit_user_mode();
		} else if(mode == 'locations') {
			if(mode_var != '') {
				//location_detail(mode_var);
				show_loader();
				
				callback = function() {
					set_active_marker(mode_var);
					hide_loader();
				};
				
				session_saver();
			}
		} else if(mode == 'users') {
			if(mode_var != '') {
				user_mode(mode_var);
				session_saver();
			}
			//else display generic user site
		} else if(mode == 'add') {
			// do nothing as not to disturb the draggable marker
		} else {
			//load the markers visible in the map
			session_saver();
			
			//load the intro panel
			$('pane4').innerHTML = '';
			var url = actions_url+'/show_intro.php';
			var pars = '';
			var updater = new Ajax.Updater('pane4', url, { method: 'get' });
			
			if(active_marker != '' && active_x != '' && active_y != '') {
				location_detail(active_marker);
				map.panTo(new GLatLng(active_x, active_y));
			}
		}
		
		//update facebook if neccessary
		if(fb == 1) {
			//var updater_facebook = new Ajax.Updater('no_show', main_url+'facebook/update_user_content.php', { method: 'get', parameters: 'user_id='+user_id }); //not too solid. some quirks
		}
		
		GEvent.addListener(map, "moveend", function() {
			session_saver();
		});
	}
}

function session_saver() {
		var new_center = map.getCenter();
		var session_name = 'latlng';

		//write location into the PHP session
		var url = actions_url+'/write_session.php';
		var pars = 'id='+session_name+'&value='+new_center+'&value2='+map.getZoom()+'&sid='+session_id;
		var updater = new Ajax.Updater('no_show', url, { method: 'get', parameters: pars });

		//reevaluate the markers, load new ones if needed
		if(mode == 'add' || mode == 'edit') {
			//do nothing, don't disturb the draggable marker
		} else if(mode == 'directions') {	
			//do nothing
			$('pane1').innerHTML = '';
		} else {
			//load locations
			map.clearOverlays();
			
			var bounds = map.getBounds();
			
			var coords = new Array();
			coords[0] = bounds.getNorthEast().lat(); //O
			coords[1] = bounds.getNorthEast().lng(); //R
			coords[2] = bounds.getSouthWest().lat(); //U
			coords[3] = bounds.getSouthWest().lng(); //L

			load_markers(coords);
			show_map_results(coords);
		}
}

//CREATE MARKER FUNCTION
function create_marker(point, id, marker_id, loc_name, created) {

	if(mode == 'users') {
		if(created == 'yes') {
			//assign markers created by this user the color blue
			var icon = icon_blue;
			var url = images_url+'/mm_20_blue.png';
		} else {
			//everything else goes red
			var icon = icon_red;
			var url = images_url+'/mm_20_red.png';
		}
	} else {
		var icon = icon_red;
		var url = images_url+'/mm_20_red.png';
	}
	var marker = new GMarker(point, {icon: icon}); //title: loc_name
	marker.marker_id = id;
	marker.state = 0; //zeigt, ob der marker gerade selektiert ist
	marker.visible_status = 1; //1=sichtbar, 0=unsichtbar
	//marker.tooltip = '<div id="ctooltip"><div class="ctooltip_header">'+loc_name+'</div><div class="ctooltip_footer"><div>&nbsp;</div></div></div>';
	marker.tooltip = '<div id="tooltip"><table style="empty-cells: show;"><tr><td class="corner"><img src="'+images_url+'/white_neg-round-top-left.gif" /></td><td class="white" rowspan="3" style="vertical-align: middle; padding-left: 0.3em; padding-right: 0.2em;">'+loc_name+'</td><td class="corner"><img src="'+images_url+'/white_neg-round-top-right.gif" /></td></tr><tr><td class="white">&nbsp;</td><td class="white">&nbsp;</td></tr><tr><td class="corner"><img src="'+images_url+'/white_neg-round-bottom-left.gif" /></td><td class="corner"><img src="'+images_url+'/white_neg-round-bottom-right.gif" /></td></tr></table></div>';
	marker.image = url;

	GEvent.addListener(marker, "mouseover", function() {
		if(mode == 'view' || mode== 'search') {
			//$("no_show").innerHTML = loc_name;
		}
		
		//mouseover effect, since 2.75
		if(this.visible_state != 0) {
			this.setImage(images_url+'/mm_20_white.png');
			var ele = $('loc_link_'+this.marker_id);
			ele.addClassName('bluelink');
		}
		
		//den custom tooltip anzeigen
		show_tooltip(this.marker_id);
	});
	
	GEvent.addListener(marker, "mouseout", function() {
		//set the default icon if needed
		if(this.visible_state != 0) {
			if(this.state == 0) {

				this.setImage(this.image);

				var ele = $('loc_link_'+this.marker_id);
				ele.removeClassName('bluelink');
			}
		}
		
		//hide the custom tooltip
		tooltip.style.visibility = "hidden";
	});
	
	GEvent.addListener(marker, "click", function() {
		if(map.getZoom() < 13 && map.getZoom() >= 11) {
			//plz niveau
			map.setCenter(this.getPoint(), 15);
		} else if(map.getZoom() < 13 && map.getZoom() < 11) {
			//city/country niveau
			map.setCenter(this.getPoint(), 12);
		} else {
			//if the marker is not (fake-)invisible
			if(this.visible_state != 0) {
				//announce the position
				this.state = 1;
				
				//alten marker wieder auf rot schalten und state inaktiv (0) setzen
				set_active_marker(this.marker_id);
				
				//die liste wieder auf ihre normale farbe setzen, vorerst.			
				var ele = $('loc_link_'+this.marker_id);
				ele.removeClassName('bluelink');
			}
		}
		
		//hide the custom tooltip
		tooltip.style.visibility = "hidden";
	});
	
	all_markers[id] = marker;
	//new_markers.push(marker);
	
	return marker;
}

function show_tooltip(marker_id) {
	tooltip.innerHTML = all_markers[marker_id].tooltip;
	
	var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
	var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(all_markers[marker_id].getPoint(),map.getZoom());
	var anchor = all_markers[marker_id].getIcon().iconAnchor;
	var width = all_markers[marker_id].getIcon().iconSize.width;
	var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width,- offset.y + point.y +anchor.y)); 
	pos.apply(tooltip);
	tooltip.style.visibility = "visible";
}

function load_markers(bounds) {
	
	show_loader();
	//reset all_markers
	all_markers = new Object;
	
	var add = '';
	
	if(mode == 'users' && user_filter != 0) {
		add += '&user='+user_filter;
	}
	
	
	var tags_string = urlencode(get_active_tags_string());
	var parameters = '?bounds='+bounds[0]+','+bounds[1]+','+bounds[2]+','+bounds[3]+'&zoom='+map.getZoom()+'&tags='+tags_string+add;
	
	$("no_show").innerHTML = parameters;
	//alert(parameters);
	
	GDownloadUrl(main_url+'/locations5.php'+parameters, function(data, responseCode) { //fehler treten auf bei absoluter URL mit 'main_url'

		var xml = GXml.parse(data);

		// load all the markers into the global array
		all_locations = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < all_locations.length; i++) {
			var point = new GLatLng(parseFloat(all_locations[i].getAttribute("lat")), parseFloat(all_locations[i].getAttribute("lng")));
			var loc_id = all_locations[i].getAttribute("id");
			var loc_name = all_locations[i].getAttribute("name");
			var created = all_locations[i].getAttribute("created");
			//alert(created);

			var marker = create_marker(point, loc_id, i, loc_name, created);

			
			//map.addOverlay(new GMarker(point));
			
			map.addOverlay(marker);
		}
		
		if(callback != null) {
			callback();
		}
		hide_loader();
	});
	
}

function get_active_tags_string() {
	var tags = new Array();
	for(t in active_tags) {
		if(active_tags[t] != '' && active_tags[t] != undefined) {
			var clean_tag = active_tags[t];
			tags.push(clean_tag);
		}
	}
	if(tags.length > 0) {
		var tags_string = tags.join(',');
	} else {
		var tags_string = '';
	}
	var url_tags = tags;
	return url_tags;
}

function location_detail(id) {
	if($('col_right') == null) {
		//if only one column is present, add the second for location info display
		add_column();
	}
	var updater = new Ajax.Updater('pane4', actions_url+'/show_address.php', { method: 'get', parameters: 'id='+id, onComplete: function() {  } });
	var updater2 = new Ajax.Updater('pane5', actions_url+'/show_tags.php', { method: 'get', parameters: 'id='+id });
	var updater3 = new Ajax.Updater('pane6', actions_url+'/show_comments.php', { method: 'get', parameters: 'id='+id });
}

function user_detail(id) {
	//obsolete. delete later
	if($('col_right') == null) {
		//if only one column is present, add the second for location info display
		add_column();
	}
	alert('details zu user '+id);
	//var updater = new Ajax.Updater('pane4', actions_url+'/show_address.php', { method: 'get', parameters: 'id='+id });
}

function update_active(lat, lng) {
	//updates the global active position markers
	if(lat != '' && lng != '') {
		active_x = lat;
		active_y = lng;
	}
}

function distance(lat1,lng1,lat2,lng2) {
	//Google's distance function
	var p1 = new GLatLng(lat1, lng1);
	var p2 = new GLatLng(lat2, lng2);
	
	var distance = p1.distanceFrom(p2);
	return distance;
}

function distance2(lat1,lng1,lat2,lng2) {
	//custom function: calculate the distance between two points on the fly
	var O = Math.PI/180;
	var b = lat1 * O;
	var c = lat2 * O;
	var d = b - c;
	var e = (lng1 * O) - (lng2 * O);
	var f = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(d/2),2)+Math.cos(b)*Math.cos(c)*Math. pow(Math.sin(e/2),2)));
	return f*6378137;
}

function add_tags(id, loc_id) {
	var taglist = $(id).value;
	if(taglist != '') {
		var user = user_id; //globale user id lesen
		var updater = new Ajax.Updater('tag_list', actions_url+'/add_tags.php', { method: 'get', parameters: 'id='+loc_id+'&user='+user+'&tags='+taglist });
		$(id).value = '';
	}
}

function add_comment(c_msg, c_rating) {
	var message = urlencode($(c_msg).value);
	var rating = $(c_rating).value;

	if(message != '') {
		$('error1').style.display = 'none';
		if(rating != 0) {
			var url = actions_url+'/exec_comment_add.php';
			var pars = 'loc='+now_showing+'&user='+user_id+'&msg='+message+'&rating='+rating;
			var updater = new Ajax.Updater('no_show', url, { method: 'post', postBody: pars, onSuccess: function() {
				var updater3 = new Ajax.Updater('pane6', actions_url+'/show_comments.php', { method: 'get', parameters: 'id='+now_showing });
				var updater_facebook = new Ajax.Updater('no_show', main_url+'facebook/update_user_content.php', { method: 'get', parameters: 'user_id='+user_id }); //not too solid. some quirks
			} });
		} else {
			//alert('Du hast noch keine Wertung abgegeben. Bitte mach das noch.');
			$('error2').style.display = 'block';
		}
	} else {
		//alert('Du hast doch noch gar nichts eingegeben? Wie soll das denn funktionieren?');
		$('error1').style.display = 'block';
	}
}

function add_comment2(c_rating, c_msg, c_loc) {
	//gather variables
	var location = c_loc;
	var user = user_id;
	var message = $(c_msg).value;
	var rating = c_rating; //$(c_rating).value;
	//loc_new_rating = ''; //reset the global new rating variable

	//normalize the old 'new_comment_display' item, remove ID and set class to normal comment.
	if ($('new_comment_display') != null) {
		var old_item = $('new_comment_display');
		old_item.setAttribute('class', 'comment');
		old_item.setAttribute('id', '');
	}
	
	//remove one comment from the bottom of the list
	var remove_from = $('comment_list');
	var comments = remove_from.getElementsByTagName("div");
	if (comments[3] != null) {
		remove_from.removeChild(comments[3]);
	}
	
	//add a new DOM object to the comment list, to load the new comment to. hide the input field. show thank you message.
	var add_to = $('comment_list');
	var new_c = document.createElement('div');
	new_c.setAttribute('id', 'new_comment_display');
	new_c.setAttribute('class', 'comment');
	var first_element = add_to.getElementsByTagName("div")[0];
	
	add_to.insertBefore(new_c, first_element); //insert at the first position
	
	//populate the created DOM object with the new comment data
	var updater = new Ajax.Updater('new_comment_display', actions_url+'/add_comment.php', { method: 'get', parameters: 'loc='+location+'&user='+user+'&msg='+message+'&rating='+rating });
	new Effect.Highlight('new_comment_display', { startcolor:'#008000', endcolor:'#333333', duration: 3 });
	
	//reset input form
	$(c_msg).value = '';
}

function save_rating(num) {
	var e = $('star_rating');

	var active_width = num*10;
	var active_content = '<span class="saved_star_active">';
	active_content += '<img src="'+images_url+'/clear.gif" width="'+active_width+'" height="10" alt="" />';
	active_content += '</span>';

	
	var inactive_width = (5-num)*10;
	var inactive_content = '<span class="saved_star_inactive">';
	inactive_content += '<img src="'+images_url+'/clear.gif" width="'+inactive_width+'" height="10" alt="" />';
	inactive_content += '</span>';

	e.innerHTML = active_content+inactive_content;
	loc_new_rating = num;
}

function clear_pane(which) {
	$(which).innerHTML = '';
}

function add_column() {
	if ($('col_right') != null) {
		//do nothing, because we are already in a two column layout!
	} else {
		//add the second column
		
		//first add the TD
		var add_to = $('row1');
		var new_pane = document.createElement('td');
		new_pane.setAttribute('id', 'col_right');
		add_to.appendChild(new_pane);
		
		//then add the container DIVs
		var add_to = $('col_right');
		var new_pane = document.createElement('div');
		new_pane.setAttribute('id', 'pane4');
		new_pane.setAttribute('class', 'content_pane');
		add_to.appendChild(new_pane);
		
		var new_pane = document.createElement('div');
		new_pane.setAttribute('id', 'pane5');
		new_pane.setAttribute('class', 'content_pane');
		add_to.appendChild(new_pane);
		
		var new_pane = document.createElement('div');
		new_pane.setAttribute('id', 'pane6');
		new_pane.setAttribute('class', 'content_pane');
		add_to.appendChild(new_pane);
		
		single_column_mode = 0;
	}
}

function remove_column() {
	if ($('col_right') != null) {
		//remove the second column, if it exists. else do nothing.
		var remove_from = $('col_right');
		remove_from.parentNode.removeChild(remove_from);
		single_column_mode = 1;
	}
}

function set_mode_var(value) {
	mode = value;
}

function tag_mode() {
	mode = 'tags';

	remove_column();
	single_column_mode = 1;

	$('pane1').innerHTML = '';
	$('pane2').innerHTML = '';
	//$('pane3').innerHTML = '';
	
	var updater = new Ajax.Updater('pane2', actions_url+'/show_tag_cloud.php', { method: 'get', parameters: '' });
}

function stm(tag) {
	//stm = single tag mode
	mode = 'tags';
	
	//verschiebe die geladene tagwolke ein Pane nach unten (zu 2)
	$('pane2').innerHTML = $('pane1').innerHTML;
	$('pane1').innerHTML = '';
	
	//update the markers to match the selection
	var updater = new Ajax.Updater('pane1', actions_url+'/show_tag_cloud.php', { method: 'get', parameters: 'mode=tags&value='+tag+'&single=1', onComplete: show_marker_array});
}

function search_code_mode() {
	mode = 'search_code';
	
	if($('col_right') == null) {
		//if only one column is present, add the second
		add_column();
	}
	
	$('pane1').innerHTML = '';
	$('pane2').innerHTML = '';
	//$('pane3').innerHTML = '';
	
	var updater = new Ajax.Updater('pane2', actions_url+'/show_code_search.php', { method: 'get', parameters: '' });
}

function search_code() {
	var code = $('code_input').value;
	if(code != 'plz') {
		var updater = new Ajax.Updater('pane2', actions_url+'/show_code_search.php', { method: 'get', parameters: 'search=1&code='+code });
	} else {
		alert('Bitte erst eine Postleitzahl eingeben.');
	}
}

function add_user_mode() {
	//only admit users with login
	mode = 'add';
	$('pane1').innerHTML = '';
	map.clearOverlays();
	var new_center = map.getCenter();
	var new_latlng = '';
	var marker = new GMarker(new_center, { draggable: true, icon: icon_green });
	
	GEvent.addListener(marker, "dragstart", function() {
	  //map.closeInfoWindow();
	});
	
	GEvent.addListener(marker, "dragend", function() {
		var new_latlng = this.getPoint(); // get point
		var new_latlng_string = new_latlng.toString();

		$('loc_latlng').innerHTML = new_latlng_string;
		$('loc_xy').value = new_latlng_string;

		//extract single values
		var new_x = new_latlng.lat();
		var new_y = new_latlng.lng();
		
		json_search(new_x, new_y);
	});

	map.addOverlay(marker);

	var updater = new Ajax.Updater('pane1', actions_url+'/show_add_user_form.php', { method: 'get', parameters: '' });
}

function add_location_mode() {
	if(user_id != '0') {
		//only admit users with login
		if(mode == 'add') {
			//alert('Du bist bereits dabei ein Lokal anzulegen.');
		} else {
			mode = 'add';
			
			if($('col_right') == null) {
				//if only one column is present, add the second
				add_column();
			}
			
			$('pane1').innerHTML = '';
			var updater = new Ajax.Updater('pane1', actions_url+'/show_add_loc_form.php', { method: 'get', parameters: '', onSuccess: function() { $('c_add_form').reset(); } });
		}
		
		map.clearOverlays();
		var new_center = map.getCenter();
		var new_latlng = '';
		var marker = new GMarker(new_center, { draggable: true, icon: icon_green });
		
		GEvent.addListener(marker, "dragstart", function() {
		  //map.closeInfoWindow();
		});
		
		GEvent.addListener(marker, "dragend", function() {
			var new_latlng = this.getPoint(); // get point
			var new_latlng_string = new_latlng.toString();
			
			$('loc_latlng').innerHTML = new_latlng_string;
			$('loc_xy').value = new_latlng_string;
			
			//extract single values
			var new_x = new_latlng.lat();
			var new_y = new_latlng.lng();
			
			//update the active location
			update_active(new_x, new_y);
			json_search(new_x, new_y);
			
			map.panTo(this.getPoint());
		});
		
		GEvent.addListener(marker, "click", function() {
			map.panTo(this.getPoint());
			map.setZoom(16);
		});

		map.addOverlay(marker);
		
		//update the location for the first time
		update_active(new_center.lat(), new_center.lng());
		json_search(new_center.lat(), new_center.lng());
	}
}

function edit_location_mode(loc_id) {
	if(user_id != '0') {
		mode = 'edit';
	
		map.clearOverlays();

		var position = new GLatLng(active_x,active_y);
		var marker = new GMarker(position, { draggable: true, icon: icon_green });
		
		GEvent.addListener(marker, "dragend", function() {
			var new_latlng = this.getPoint(); // get point
			var new_latlng_string = new_latlng.toString();
			
			$('loc_latlng').innerHTML = new_latlng_string;
			$('loc_xy').value = new_latlng_string;

			//extract single values
			var new_x = new_latlng.lat();
			var new_y = new_latlng.lng();
	
			//update global position variables		
			active_x = this.getPoint().lat();
			active_y = this.getPoint().lng();

			json_search(new_x, new_y);
		});
		
		map.addOverlay(marker);
		map.panTo(position);
		
		$('pane1').innerHTML = '';
		var updater = new Ajax.Updater('pane1', actions_url+'/show_edit_loc_form.php', { method: 'get', parameters: 'id='+loc_id+'&lat='+active_x+'&lng='+active_y });		
	}
}

function user_mode(id) {
	set_mode_var('users');
	user_filter = id;
	if(!id) {
		alert('Keine Nutzer-ID übergeben. So kanns ja nicht klappen!');
	}
	
	$('pane1').innerHTML = ''; //clear pane 1
	$('pane2').innerHTML = '';
	var updater = new Ajax.Updater('pane2', actions_url+'/show_user.php', { method: 'get', parameters: 'id='+id });
	
	session_saver();
}

function edit_user_mode() {
	if(user_id != '0') {
		map.clearOverlays();
		
		if($('col_right') == null) {
			//if only one column is present, add the second
			add_column();
		}

		var marker = new GMarker(user_home, { draggable: true, icon: icon_green });
		
		GEvent.addListener(marker, "dragend", function() {
			var new_latlng = this.getPoint(); // get point
			var new_latlng_string = new_latlng.toString();

			$('loc_latlng').innerHTML = new_latlng_string;
			$('loc_xy').value = new_latlng_string;

			//extract single values
			var new_x = new_latlng.lat();
			var new_y = new_latlng.lng();

			json_search(new_x, new_y);
		});

		map.addOverlay(marker);
	}
}

function change_home() {
	
	$('pane1').innerHTML = '';
	$('pane2').innerHTML = '';
	$('pane3').innerHTML = '';
	$('pane4').innerHTML = '';
	$('pane5').innerHTML = '';
	$('pane6').innerHTML = '';
	var updater = new Ajax.Updater('pane2', actions_url+'/show_home_change.php', { method: 'get', onComplete: 
		function() {
			var marker = new GMarker(new_center, { draggable: true, icon: icon_green });
	
			GEvent.addListener(marker, "dragend", function() {
				var new_latlng = this.getPoint(); // get point
				//extract single values
				var new_x = new_latlng.lat();
				var new_y = new_latlng.lng();
				
				$('new_lat').value = new_x;
				$('new_lng').value = new_y;
				
				$('loc_city').value = '';
				$('loc_country').value = '';
				$('loc_cc').value = '';
				
				//update the active location
				update_active(new_x, new_y);
				json_search(new_x, new_y);
				
				map.panTo(this.getPoint());
			});
			
			GEvent.addListener(marker, "click", function() {
				map.panTo(this.getPoint());
				map.setZoom(16);
			});
		
			map.addOverlay(marker);
			
			//update the location for the first time
			$('new_lat').value = user_home.lat();
			$('new_lng').value = user_home.lng();
		}
	});
		
	mode = 'add';
	map.clearOverlays();
	map.setCenter(user_home);
	var new_center = user_home;
}

// THREE JSON FUNCTIONS FOR REVERSE GEOCODING
function json_country(jData) {
	if (jData == null) {
		// error. abbrechen
		return;
	}

	var html = jData.countrycode;
	$('loc_country').value = html;
}

function json_postal(jData) {
	if (jData == null) {
		// error. abbrechen
		return;
	}
	//fill the form (countryName,adminCode1,fclName,countryCode,lng,fcodeName,fcl,name,fcode,geonameId,lat,population,adminName1)
	var city = $('loc_city');
	if(city.value == '') {
		city.value = jData.geonames[0].name;
	}
	$('loc_country').value = jData.geonames[0].countryName;
	$('loc_cc').value = jData.geonames[0].countryCode;
}

function json_search(j_lat, j_lng) {
	//var request = 'http:/'+'/fieldesign.de/work/rgc_country.php?lat='+j_lat+'&lng='+j_lng+'&style=json';
	var request = actions_url+'/rgc_postal.php?lat='+j_lat+'&lng='+j_lng;
	aObj = new JSONscriptRequest(request);
	aObj.buildScriptTag();
	aObj.addScriptTag();
}

function json_geolocation(jData) {
	if (jData == null) {
		// error. abbrechen
		return;
	}
	
	var point = new GLatLng(parseFloat(jData.latitude), parseFloat(jData.longitude));
	var error_notice = jData.error;
	if(error_notice == 1) {
		alert('Deine Position (ip: '+session_ip+') konnte nicht ermittelt werden.');
	}	
	map.panTo(point);
}

function json_ip_search(j_ip) {
	var request = actions_url+'/geolocation.php?ip='+j_ip;
	aObj = new JSONscriptRequest(request);
	aObj.buildScriptTag();
	aObj.addScriptTag();
}

function json_suggestions(string) {
	//don't process string shorter than 3 characters for performance reasons
	if(string.length > 2) {
		var request = actions_url+'/exec_suggest.php?str='+string;
		aObj = new JSONscriptRequest(request);
		aObj.buildScriptTag();
		aObj.addScriptTag();
	}
	
	json_tag_suggestions(string, 0);
}

function json_suggestions_display(jData, original_string) {

	if (jData == null || jData[0] == 'Nichts gefunden') {
		// error. abbrechen
		$('cadd_suggest').style.display = 'none';
		return;
	}

	var locations = new Array();
	for(i in jData) {
		var name = urldecode(jData[i]).split("+").join(' '); //good spaces
		if(name != original_string) {
			var safe_name = name.split("'").join("\\'"); //safe quotes transfer
			locations.push('<a href="#" onclick="$(\'loc_name\').value=\''+safe_name+'\'; $(\'cadd_suggest\').style.display = \'none\'; json_tag_suggestions(\''+name+'\', 1); return false;">'+name+'</a>');
			//locations.push(jData[i]);
			//alert(jData[i]);
		}
	}
	
	//fill the form (countryName,adminCode1,fclName,countryCode,lng,fcodeName,fcl,name,fcode,geonameId,lat,population,adminName1)
	var display_string = locations.join(', ');
	/*
	for(i in jData.suggests) {
		display_string += jData.suggests.value;
	}
	*/
	if(locations[0] == undefined) {
		//es gibt das lokal schon, keine weiteren vorschlaege
		$('cadd_suggest_content').innerHTML = 'Von diesem Lokal gibt es bereits Filialen. Gut, dass du eine weitere hinzuf&uuml;gst.';
		$('cadd_suggest').style.display = 'inline';
	} else {
		//vorschlaege anzeigen
		$('cadd_suggest_content').innerHTML = 'Meintest du '+display_string+'?';
		$('cadd_suggest').style.display = 'inline';
	}
}

function json_tag_suggestions(string, check) {
	var verified = '';
	if(check == 1) {
		verified = '&verified=true';
	}
	if(string.length > 2) {
		var request = actions_url+'/exec_tag_suggest.php?str='+string+verified;
		aObj = new JSONscriptRequest(request);
		aObj.buildScriptTag();
		aObj.addScriptTag();
	}
}

function json_tag_display(jData, jData2, original_string) {

	if (jData == null || jData[0] == 'Nichts gefunden') {
		// error. abbrechen
		$('cadd_tag_suggest').style.display = 'none';
		return;
	}
	
	if(jData2[0] != undefined) {
		var location_tags = new Array();
		var j = 50;
		for(i in jData2) {
			var tag = urldecode(jData2[i]).split("+").join(' '); //good spaces
			if(tag != original_string) {
				var komma = ''
				if(i != 0) {
					var komma = ', ';
				}
				var safe_tag = tag.split("'").join("\\'"); //safe quotes transfer
				safe_tag = safe_tag.split(" ").join("_"); //tag-safe spaces
				location_tags.push('<span id="tag_suggestion_'+j+'">'+komma+'<a href="#" onclick="$(\'loc_tags\').value+=\' '+safe_tag+'\'; $(\'tag_suggestion_'+j+'\').style.display=\'none\'; return false;">'+tag+'</a></span>');
				j++;
			}
		}
		var display_location_string = location_tags.join('');
	} else {
		//falls es kein bestehendes restaurant ist, location tags wieder verstecken
		$('cadd_specialtag_suggest').style.display = 'none';
	}
	
	var tags = new Array();
	for(i in jData) {
		var tag = urldecode(jData[i]).split("+").join(' '); //good spaces
		if(tag != original_string) {
			var komma = ''
			if(i != 0) {
				var komma = ', ';
			}
			var safe_tag = tag.split("'").join("\\'"); //safe quotes transfer
			safe_tag = safe_tag.split(" ").join("_"); //tag-safe spaces
			tags.push('<span id="tag_suggestion_'+i+'">'+komma+'<a href="#" onclick="$(\'loc_tags\').value+=\' '+safe_tag+'\'; $(\'tag_suggestion_'+i+'\').style.display=\'none\'; return false;">'+tag+'</a></span>');
		}
	}
	
	var display_string = tags.join('');
	
	if(tags[0] == undefined) {
		//keine tag vorschlaege. sollte eigentlich nie vorkommen
		//$('cadd_tag_suggest_content').innerHTML = 'Von diesem Lokal gibt es bereits Filialen. Gut, dass du eine weitere hinzuf&uuml;gst.';
		$('cadd_tag_suggest').style.display = 'none';
	} else {
		//tag-vorschlaege anzeigen
		$('cadd_tag_suggest_content').innerHTML = 'Beliebte Tags sind zB. '+display_string+'.';
		$('cadd_tag_suggest').style.display = 'block';
		
		if(location_tags[0] != undefined) {
			//special location tags werden angezeigt
			$('cadd_specialtag_suggest_content').innerHTML = original_string+' wurde schon mit '+display_location_string+' getaggt.';
			$('cadd_specialtag_suggest').style.display = 'block';
		}
	}
}

function send_add_location_form() {
	//almost obsolete
	var loc_name = urlencode($('loc_name').value);
	var loc_street = urlencode($('loc_street').value);
	var loc_code = $('loc_code').value;
	var loc_city = urlencode($('loc_city').value);
	var loc_country = $('loc_cc').value;
	var loc_desc = urlencode($('loc_desc').value);
	var loc_phone = urlencode($('loc_phone').value);
	var loc_mail = $('loc_mail').value;
	var loc_url = $('loc_url').value;
	var loc_user = user_id;
	var loc_tags = urlencode($('loc_tags').value);
	var loc_latlng = $('loc_xy').value;
	
	//sicherheitscheck ob der user vergessen hat, den marker an die richtige stelle zu bewegen
	if(loc_latlng == '(0.00,0.00)' || loc_latlng == '') {
		alert("Du hast den Marker noch nicht bewegt. Bitte gib einen Ort auf der Karte an.");
		
	} else {
		var pars = 'name='+loc_name+'&street='+loc_street+'&code='+loc_code+'&city='+loc_city+'&country='+loc_country+'&desc='+loc_desc+'&phone='+loc_phone+'&mail='+loc_mail+'&url='+loc_url+'&user='+loc_user+'&latlng='+loc_latlng+'&tags='+loc_tags;
		var updater = new Ajax.Updater('cadd_result', actions_url+'/add_location.php', { method: 'get', parameters: pars, onSuccess: function() { map.setZoom(16); window.location = main_url+'?msg=Das Lokal wurde eingetragen.'; } });
		//new Effect.Highlight('cadd_result', { startcolor:'#008000', endcolor:'#333333', duration: 3 });
		//reset the form
		$('c_add_form').reset();
		$('loc_xy').value = '(0.00,0.00)';
		//var mode = 'add';
	}
}

function send_edit_location_form() {
	show_loader();

	var loc_id = $('loc_id').value;
	var loc_name = $('loc_name').value;
	var loc_street = $('loc_street').value;
	var loc_code = $('loc_code').value;
	var loc_city = $('loc_city').value;
	var loc_country = $('loc_cc').value;
	var loc_desc = $('loc_desc').value;
	var loc_phone = $('loc_phone').value;
	var loc_mail = $('loc_mail').value;
	var loc_url = $('loc_url').value;
	var loc_latlng = $('loc_xy').value;
	
	var pars = 'id='+loc_id+'&name='+loc_name+'&street='+loc_street+'&code='+loc_code+'&city='+loc_city+'&country='+loc_country+'&desc='+loc_desc+'&phone='+loc_phone+'&mail='+loc_mail+'&url='+loc_url+'&latlng='+loc_latlng;
	var updater = new Ajax.Updater('cedit_result', actions_url+'/edit_location.php', { method: 'post', parameters: pars, onComplete: function() {
		mode = 'view';
		$('pane1').innerHTML = '';
		session_saver();
		
		var updater2 = new Ajax.Updater('pane4', actions_url+'/show_address.php', { method: 'get', parameters: 'id='+loc_id });
		hide_loader();
		}
	});
}

function send_add_user_form() {
	var user_username = $('user_username').value;
	var user_fullname = $('user_firstname').value + '_' + $('user_lastname').value;
	var user_password1 = $('user_password1').value;
	var user_password2 = $('user_password2').value;

	var user_street = $('loc_street').value;
	var user_code = $('loc_code').value;
	var user_city = $('loc_city').value;
	var user_country = $('loc_cc').value;

	var user_mail = $('user_mail').value;
	var user_url = $('user_url').value;
	var user_latlng = $('loc_xy').value;
	
	//sicherheitscheck ob der user vergessen hat, den marker an die richtige stelle zu bewegen
	if(user_latlng == '(0.00,0.00)' || user_latlng == '') {
		alert("Du hast den Marker noch nicht bewegt. Bitte gib deinen Wohnort auf der Karte wenigsten ungefähr an. Du hast später einige vorteile davon.");
		
	} else {
		if(user_password1 == user_password2 && user_password1 != '') {
			var pars = 'username='+user_username+'&password='+user_password1+'&fullname='+user_fullname+'&street='+user_street+'&code='+user_code+'&city='+user_city+'&country='+user_country+'&mail='+user_mail+'&url='+user_url+'&latlng='+user_latlng;
			var updater = new Ajax.Updater('cadd_result', actions_url+'/add_user.php', { method: 'get', parameters: pars });
			new Effect.Highlight('cadd_result', { startcolor:'#008000', endcolor:'#333333', duration: 3 });
			//reset the form
			$('c_add_form').reset();
			$('loc_xy').value = '(0.00,0.00)';
			//var mode = 'add';
		} else {
			alert("Das Passwort muss zweimal identisch ausgefüllt werden und darf nicht leer bleiben!");
		}
	}
}

function dismiss(what) {
	var ele = $(what);
	ele.parentNode.removeChild(ele);
}

function pan_to(marker_id) {
	var point = all_markers[marker_id].getPoint();
	map.panTo(point);
}

function pan_to_latlng(lat, lng) {
	var point = new GLatLng(lat, lng);
	map.panTo(point);
}

function set_active_marker(id) {
	//alten marker wieder auf rot schalten und state inaktiv (0) setzen

	if(now_showing != 0) {
		
		if(mode == 'users') {
			if(all_markers[now_showing]) {
				all_markers[now_showing].setImage(all_markers[now_showing].image);
				all_markers[now_showing].state = 0;
			}
		} else {
			if(all_markers[now_showing]) {
				all_markers[now_showing].setImage(all_markers[now_showing].image);
				all_markers[now_showing].state = 0;
			}
		}
	}
	
	//neuen aktiven marker setzen
	now_showing = id;
	
	all_markers[now_showing].setImage(images_url+'/mm_20_white.png');
	all_markers[now_showing].state = 1;
	
	active_marker = all_markers[id].getPoint().toString();
	active_x = all_markers[id].getPoint().lat();
	active_y = all_markers[id].getPoint().lng();

	location_detail(id);
}


function marker_highlight_on(id) {
	all_markers[id].setImage(images_url+'/mm_20_white.png');
}

function marker_highlight_off(id) {
	if(all_markers[id].state == 0) {
		if(mode == 'users') {
			//alert('mode blue');
			all_markers[id].setImage(images_url+'/mm_20_blue.png');
		} else {
			//alert('mode red');
			all_markers[id].setImage(images_url+'/mm_20_red.png');
		}
	}
}

function marker_set_active(id) {
	//obsolete?? deprecated = yes.
	if(now_showing != 0) {
		all_markers[now_showing].state = 0;
		if(mode == 'users') {
			all_markers[now_showing].setImage(images_url+'/mm_20_blue.png');
		} else {
			all_markers[now_showing].setImage(images_url+'/mm_20_red.png');
		}		
	}
	now_showing = id;
	all_markers[id].state = 1;
	all_markers[id].setImage(images_url+'/mm_20_white.png');
}

function marker_toggle(marker) {
	if(marker.isHidden()) {
		marker.show();
	} else {
		marker.hide();
	}
}

function show_marker_array(marker_array) {
	if(mode == 'tags') {
		//takes an array of markers and hides all but in this array
		if(!marker_array.length) {
			var marker_array_string = $('js_tag_array').innerHTML; //js_tag_array ist ein unsichtbarer span in der show_tag_cloud.php
			var marker_array = marker_array_string.split(",");
			alert(marker_array_string);
			single_tag_array = marker_array; //for later some time
		} else {
			alert('marker array schon gesetzt');
		}

		if(marker_array.length>0) {
			for(marker in all_markers) {
				if(is_num(marker) == true) { //check if value is numeric, avoid object properties this way
					if(!marker_array.inArray(marker)) {
						if(!all_markers[marker].isHidden()) {
							//hide all markers that were not in the array
							all_markers[marker].hide();
							all_markers[marker].visible_status = 0;
						}
					} else {
						if(all_markers[marker].isHidden()) {
							//show markers that are hidden right now, but ARE in the array
							all_markers[marker].show();
							all_markers[marker].visible_status = 1;
						}
					}
				}
			}
		} else {
			alert('marker array ist leer');
		}
	} else {
	}
}


function unhide_markers() {
	//show all markers again that were hidden
	for(marker in all_markers) {
		if(is_num(marker) == true) {
			if(all_markers[marker].isHidden()) {
				all_markers[marker].show();
				all_markers[marker].visible_status = 1;
			}
		}
	}
	//reset the global stm array
	single_tag_array = new Array();
}

function hide_copyright() {
	var source = document.getElementById('map');
	
	//remove Terms of use link
	var divs = source.getElementsByTagName('div');
	var current = (divs[14].style.display == 'none') ? 'block' : 'none';
	divs[14].style.display = current;
	
	//remove Google Logo link
	var links = source.getElementsByTagName('a');
	var current = (links[1].style.display == 'none') ? 'block' : 'none';
	links[1].style.display = current;
	
	//set the Google Logo to the tasteful Black & White variant
	//links[1].firstChild.src = images_url+'/google_black_and_white.png';
}

function toggle_display(nr) {
	if (document.layers) {
		current = (document.layers[nr].display == 'none') ? 'block' : 'none';
		document.layers[nr].display = current;
	} else if (document.all)	{
		current = (document.all[nr].style.display == 'none') ? 'block' : 'none';
		document.all[nr].style.display = current;
	} else if (document.getElementById) {
		vista = (document.getElementById(nr).style.display == 'none') ? 'block' : 'none';
		document.getElementById(nr).style.display = vista;
	}
}

function show_loader() {
	var ele = $('loader');
	ele.style.display = 'inline';
}

function hide_loader() {
	var ele = $('loader');
	ele.style.display = 'none';
}

function show_map_results(bounds) {
	var center_lat = map.getCenter().lat();
	var center_lng = map.getCenter().lng();
	
	var add = '';
	if(mode == 'users' && user_filter != 0) {
		add += '&user='+user_filter;
	}
	
	var loading_html = '<div id="ccode_search" class="cbox"><h2 class="cbox_header">Orte auf der Karte</h2><div id="cmap_result_content" class="cbox_content"><img src="'+images_url+'/loading_dark.gif" width="16" height="16"  /></div><div class="cbox_footer"><div>&nbsp;</div></div></div>';
	$('pane1').innerHTML = loading_html;

	var tags_string = get_active_tags_string();

	var url = actions_url+'/show_map_result.php'; //probleme bei absolutem pfad mit main_url
	var pars = '?bounds='+bounds[0]+','+bounds[1]+','+bounds[2]+','+bounds[3]+'&zoom='+map.getZoom()+'&clat='+center_lat+'&clng'+center_lng+'&tags='+tags_string+add;
	var updater = new Ajax.Updater('pane1', url, { method: 'get', parameters: pars });

}

function toggle_pages(amount, page, prefix) {
	if(!prefix) {
		var prefix = '';
	}
	var ele;
	for(i=1;i<=amount;i++) {
		if(i != page) {
			//alert('seite '+i+' ist unsichtbar');
			ele = $(prefix+'result_page_'+i);
			ele.style.display = 'none';
		} else {
			//alert('seite '+i+' ist sichtbar');
			ele = $(prefix+'result_page_'+i);
			ele.style.display = 'block';
		}
	}
	
	//toggle_display($('result_page_'+page));
	return false;
}

function show_address(address) {
	if(address != '' && address != ' ') {
		if(geocoder) {
			geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						//alert(address + " wurde nicht gefunden.");
						$('error').innerHTML = "<i>"+address+" wurde nicht gefunden.</i>";
						$('error').style.display = 'block';
					} else {
						map.setCenter(point, 13);
						Tiny.hide();
					}
				}
			);
		} else {
			alert('der geocoder wurde nicht initialisiert. irgendwas stimmt nicht. sollte nicht vorkommen.');
		}
	} else {
		$('error').innerHTML = "<i>Du musst schon eine Stadt eintragen, nach der du suchen willst.</i>";
		$('error').style.display = 'block';
	}
}

function set_marker_geocode(street, zip, city, country) {
	if(street == '' && zip == '' && city == '' && country == '') {
		$('error').innerHTML = "<i>Du musst schon eine Stadt eintragen, nach der du suchen willst.</i>";
		$('error').style.display = 'block';
	} else {
		var address = street+', '+zip+', '+city+', '+country;
		if(geocoder) {
			geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						$('error').innerHTML = "<i>"+address+" wurde nicht gefunden.</i>";
						$('error').style.display = 'block';
					} else {
						map.setCenter(point, 13);
						add_location_mode();
					}
				}
			);
		}
	}
}

function submit_geocode(e, value) {
	//if submitted via enter key
	var characterCode; //literal character code will be stored in this variable

	if(e && e.which) { //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	} else {
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	
	if(characterCode == 13) {
		if(value == '' || value == ' ') {
			//alert('Du hast ja gar nichts eingegeben!');
			$('error').style.display = 'block';
			return false;
		} else {
			show_address(value);
			return false;
		}
	}
}

function old_urlencode(value) {
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = value;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				//don't show the error for now, since it's working anyway
				/*
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				*/
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for
	return encoded;
}

function old_urldecode(value) {
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = value;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}

function urlencode(clearString) {
	//unicode-safe
	var output = '';
	var x = 0;
	clearString = clearString.toString();
	var regex = /(^[a-zA-Z0-9_.]*)/;
	while (x < clearString.length) {
		var match = regex.exec(clearString.substr(x));
		if (match != null && match.length > 1 && match[1] != '') {
			output += match[1];
			x += match[1].length;
		} else {
			if (clearString[x] == ' ')
				output += '+';
			else {
				var charCode = clearString.charCodeAt(x);
				var hexVal = charCode.toString(16);
				output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
			}
			x++;
		}
	}
	return output;
}

function urldecode(encodedString) {
	//unicode-safe
	var output = encodedString;
	var binVal, thisString;
	var myregexp = /(%[^%]{2})/;
	while ((match = myregexp.exec(output)) != null && match.length > 1 && match[1] != '') {
		binVal = parseInt(match[1].substr(1),16);
		thisString = String.fromCharCode(binVal);
		output = output.replace(match[1], thisString);
	}
	return output;
}

function reset_password() {

	toggle_display('loader_reset');

	var username = $('username').value;
	var email = $('email').value;
	
	if(username != '' && email != '') {
		var pars = 'username='+username+'&email='+email;
		var url = actions_url+'/exec_reset_password.php';
		
		var login = new Ajax.Request(url, {
			method: 'get',
			parameters: pars,
			onComplete: function(response) {
				window.location = main_url+'?msg='+urlencode(response.responseText);
			}
		});
	} else {
		$('error').style.display = 'block';
		toggle_display('loader_reset');
	}
}

function noenter() {
	return !(window.event && window.event.keyCode == 13);
}

function show_filter() {
	var filter_id = $('filter');
	filter_id.style.display = 'block';

	return false;
}

function hide_filter() {
	var filter_id = $('filter');
	filter_id.style.display = 'none';

	return false;
}

function filter_add_tag(tag) {
	var url_tag = urlencode(tag);
	show_filter();
	
	if(!active_tags[url_tag]) {
		
		var clean_tag = tag.split('_').join('&nbsp;');
		var tag_string = '<p id="filter_item_'+url_tag+'"><a href="#" onclick="filter_remove_tag(\''+tag+'\')"><img src="'+images_url+'/tags_minus.gif" style=""/>&nbsp;'+clean_tag+'</a></p>';
		
		$('filter_tags').style.display = 'block';
		$('filter_tags').innerHTML += tag_string; //add a visible tag link to the filter
		
		active_tags[url_tag] = tag; //add the array element

		session_saver(); //refresh
	} else {
		filter_remove_tag(tag);
	}
	return false;
}

function filter_remove_tag(tag) {
	var url_tag = urlencode(tag);
	
	Element.remove('filter_item_'+url_tag); //remove the visible tag link from the filter
	//active_tags[url_tag] = undefined; //remove the array element
	delete active_tags[url_tag];
	
	var i = 0; //counter for remaining object elements
	for(t in active_tags) {
		i++;
		//alert('rest: '+active_tags[t]);
	}
	//alert('i = '+i);
	if(i <= 0) {
		hide_filter();
	}
	
	session_saver(); //refresh
	
	return false;
}

function clear_filter() {
	for(t in active_tags) {
		//active_tags[t] = undefined;
		delete active_tags[t];
	}
	$('filter_tags').innerHTML = '';
	session_saver(); //refresh
}

function get_directions(lat1, lng1, lat2, lng2, name1, name2) {
	set_mode_var('directions');
	var point1 = new GLatLng(lat1, lng1);
	var point2 = new GLatLng(lat2, lng2);
	
	//display vorbereiten
	$('pane1').innerHTML = '';
	map.clearOverlays();
	map.addOverlay(new GMarker(point1, icon_blue));
	map.addOverlay(new GMarker(point2, icon_blue));
	
	var container = $('pane2');
	var directions_details = new Array();

	if(directions) {
		//die alte anfahrt loeschen, wenns die schon gibt.
		directions.clear();
	}
	directions = new GDirections();

	GEvent.addListener(directions, "load", function() {
		var new_html_summary = '';
		var dir_summary = directions.getSummaryHtml();
		var dir_duration = directions.getDuration()["seconds"];
		var dir_distance = directions.getDistance()["meters"];
		var dir_geocodes = directions.getNumGeocodes();
		var dir_routes = directions.getNumRoutes();
	
		for(var i=0;i<dir_routes;i++) {
			var dir_route = directions.getRoute(i);
			var dir_steps = dir_route.getNumSteps();
			directions_details.push(lat1+','+lng1);
	
			for(var j=0;j<dir_steps;j++) {
				var dir_step = dir_route.getStep(j);
				var step_html = dir_step.getDescriptionHtml();
				var step_latlng = new Array(dir_step.getLatLng().lat(), dir_step.getLatLng().lng());
				var step_duration = dir_step.getDuration()["seconds"];
	
				//replace functions for the new formatting
				step_html = step_html.replace(/<b>/g, '<span class="bold">');
				step_html = step_html.replace(/<\/b>/g, '</span>');
				step_html = step_html.replace(/<wbr\/>/g, '');
				step_html = step_html.replace(/<div class=".*">/g, '');
				step_html = step_html.replace(/<\/div>/g, '');
	
				var step_data = new Array(step_html, step_duration, step_latlng);
				//alert('step_data: '+step_data);
				directions_details.push(step_data);
			}
		}
		//alert('check2: '+directions_details);
		directions_details.push(lat2+','+lng2); //den endpunkt noch reinpushen
		
		container.innerHTML = '<div id="cdirections" class="cbox" style="margin-bottom: 1em;"><h2 class="cbox_header">Anfahrtsbeschreibung</h2><div id="cdirections_content" class="cbox_content"><div id="cdirections_data">';
		container.innerHTML += '</div></div><div class="cbox_footer" style="margin-top: -2.25em;"><div>&nbsp;</div></div>';
		
		$('cdirections_data').innerHTML += '<p>Start: <a href="#" onclick="map.panTo(new GLatLng('+lat1+','+lng1+')); return false;">'+name1+'</a></p>';
		for(var k=0;k<directions_details.length;k++) {
			if(typeof(directions_details[k]) == "string") {
				//wenn der wert ein string ist, ist es ein wegpunkt, kein einzelschritt
				//$('cdirections_data').innerHTML += '<span class="waypoint" onclick="map.panTo(new GLatLng('+directions_details[k]+'));">'+directions_details[k]+'</span><br />';
			} else {
				var time = Math.ceil(directions_details[k][1]/60);
				$('cdirections_data').innerHTML += '<p onclick="map.panTo(new GLatLng('+directions_details[k][2]+')); return false;">'+directions_details[k][0]+' ('+time+'&nbsp;min)</p>';
			}
		}
		
		$('cdirections_data').innerHTML += '<p>Ziel: <a href="#" onclick="map.panTo(new GLatLng('+lat2+','+lng2+')); return false;">'+name2+'</a></p>';
		
		$('cdirections_data').innerHTML += '<a href="#" onclick="$(\'pane2\').innerHTML=\'\'; set_mode_var(\'view\'); session_saver();"><img src="'+images_url+'/button_schliessen.gif" class="interfacebutton" title="Schliessen" alt="button" /></a>';
	});
	
	directions.loadFromWaypoints([lat1+','+lng1, lat2+','+lng2], { locale: 'DE', getPolyline: true, getSteps: true, preserveViewport: true });
}

function write_to_session(name, value) {
	//write into the PHP session
	var url = actions_url+'/write_session.php';
	var pars = 'id='+name+'&value='+value+'&value2=0&sid='+session_id;
	var updater = new Ajax.Updater('no_show', url, { method: 'get', parameters: pars });
}

function delete_comment(id) {
	var url = actions_url+'/exec_comment_delete.php';
	var pars = 'id='+id;
	var updater = new Ajax.Updater('no_show', url, { method: 'get', parameters: pars, onSuccess: function() {
		var updater3 = new Ajax.Updater('pane6', actions_url+'/show_comments.php', { method: 'get', parameters: 'id='+now_showing });
	} });
}
