function clearSearch(el)
{
	if(el.value == el.title)
	{
		el.value = "";
	}
}

function setSearchTip(el, force)
{
	if(el.value == "" || force)
	{
		el.value = el.title;
	}
}

function resetSearch(placeId)
{
	var post = "search_channel=0&search_filter=";
	
	if(placeId)
	{
		post += "&placeId=" + placeId;
		setSearchTip(document.getElementById("search_filter" + placeId),true);
		document.getElementById("search_channel" + placeId).selectedIndex = 0;		
	}
	else
	{
		setSearchTip(document.getElementById("search_place"),true);
		setSearchTip(document.getElementById("search_filter"),true);			
		document.getElementById("search_channel").selectedIndex = 0;
		document.getElementById("error_place").value = "false";		
	}

	var callback =
	{
	  success: searchSuccess,
	  failure: function(o) {/*failure handler code*/},
	  argument: [placeId]
	}
 	
	YAHOO.util.Connect.asyncRequest('POST', 'mod/search/xhrSetSearch.php', callback, post);
	//return false;		
}

function search_start(aPlace, placeId) {
	var place = null;
	var searchForm = null;
	var post = null;
	
	if(isEmpty(placeId))
	{		
		var searchForm = $("search_form");
		lastSearchFormError = $("searchFormError");
		place = searchForm.search_place.value;
		
	}
	else
	{
		var searchForm = $("search_form_" + placeId);
		lastSearchFormError = $("searchFormError"+placeId);
		post = "placeId=" + placeId;
	}
	
	if(lastSearchFormError)
	{
		lastSearchFormError.style.display = "none";
	}
	
	if(!isEmpty(place) && place != "Strasse/Ort" && aPlace==null)
	{
		geocoder.getLocations(place, search_foundLocation);
	}
	else
	{
		if(aPlace)
		{
			map.setCenter(new GLatLng(aPlace[0], aPlace[1]), 16);
			searchForm.search_place.value = aPlace[2];
		}
		var callback =
		{
		  success: searchSuccess,
		  failure: function(o) {/*failure handler code*/},
		  argument: [placeId]
		}
	 	
		YAHOO.util.Connect.setForm(searchForm); 
		YAHOO.util.Connect.asyncRequest('POST', 'mod/search/xhrSetSearch.php', callback, post);
	}
	
	//return false;	
};

function searchSuccess(o)
{
	document.getElementById("error_place").value = "false";
  	var placeId = o.argument[0];
  	if(!isEmpty(placeId))
  	{
  		getRecentOpinions(1,placeId);
  	}
  	else
  	{
  		getRecentOpinions(1,null);
  		mapRefreshPlaces();
  	}	
}

/**
 * Liefert die Suchergebnisse
 */
function search_foundLocation(placemarks)
{
	var results = "";
	var latlng;
	var count = 0;
	var lastLocation;

	if(placemarks.Placemark)
	{
		for(i=0;i<placemarks.Placemark.length;i++)
		{
			lat = placemarks.Placemark[i].Point.coordinates[1];
			lng = placemarks.Placemark[i].Point.coordinates[0];
			latlng = new GLatLng(lat, lng);
			if(maxGLatLngBounds.containsLatLng(latlng))
			{
				address = placemarks.Placemark[i].address.split(",")[0];
				results = results + "<a href='search_start([" + lat + "," + lng + "," + address + "]>" + address + "</a><br>";
				count++;
				lastLocation = [lat,lng,address];
			}
		}
	}
	if(count == 0)
	{
		lastSearchFormError.innerHTML = "Der Ort wurde in Wien nicht gefunden!";
		lastSearchFormError.style.display = "";
		document.getElementById("error_place").value = "true";
	}
	else
	{
		if(count == 1)
		{
			search_start(lastLocation);
		}
		else
		{
			lastSearchFormError.innerHTML = "Der Ort wurde in Wien nicht gefunden!";
			lastSearchFormError.style.display = "";
			document.getElementById("error_place").value = "true";
		}
	}
}

function addNewOpinion()
{
	var search_place = $("search_place").value;
	if(search_place != "" && search_place != "Strasse/Ort" && document.getElementById("error_place").value != "true")
	{
		searchForAddNewOpinion(search_place);
	}
	else
	{
		var callback =
		{
			success: function(o)
			{			
				if(!isEmpty(o.responseText))
				{
					
					if(!addNewOpinionDialog)
					{			
						panelDiv = document.createElement("div");
						panelDiv.id = "addNewOpinionDialog";
						document.body.appendChild(panelDiv);
						var panel = new YAHOO.widget.Panel(panelDiv,
							{ fixedcenter: true, 
							constraintoviewport: true, 
							visible:false,
							modal: true, 
							width:"315px", 
							draggable:true } );
						
						overlayManager.register(panel);
					
						addNewOpinionDialog = panel;
						addNewOpinionDialog.setHeader("Gib jetzt deine Meinung ab");
					}
					addNewOpinionDialog.setBody(o.responseText);
					
					addNewOpinionDialog.render();
					addNewOpinionDialog.show();		
				}
				else
				{
					alert("Fehler in addNewOpinionDialog()");
				}
			},
			failure: function(o)
			{
				alert("Fehler in addNewOpinionDialog()");
			}
		}
		YAHOO.util.Connect.asyncRequest('POST', "mod/search/xhrAddNewOpinionDialog.php", callback); 	
	}
}

function searchForAddNewOpinion(place)
{
	if(place == null)
	{
		var searchForm = null;
				
		var searchForm = $("opinionAddNewForm");
		place = searchForm.address.value;
	}
	
	geocoder.getLocations(place, searchForAddNewOpinion_foundLocation);
}

/**
 * Liefert die Suchergebnisse
 */
function searchForAddNewOpinion_foundLocation(placemarks)
{
	var results = "";
	var latlng;
	var count = 0;
	var lastLocation = null;

	if(placemarks.Placemark)
	{
		for(i=0;i<placemarks.Placemark.length;i++)
		{
			lat = placemarks.Placemark[i].Point.coordinates[1];
			lng = placemarks.Placemark[i].Point.coordinates[0];
			accuracy = placemarks.Placemark[i].AddressDetails.Accuracy;
			latlng = new GLatLng(lat, lng);
			if(accuracy >=6 && maxGLatLngBounds.containsLatLng(latlng))
			{
				address = placemarks.Placemark[i].address.split(",")[0];
				results = results + "<a href='javascript:searchForAddNewOpinion_start([" + lat + "," + lng + ",\"" + address + "\"]);'>" + address + "</a><br>";
				count++;
				//WENN MEHRERE ERGEBNISSE, DANN LISTE AUSGEBEN
				lastLocation = [lat,lng,address];
				break;
			}
		}
	}
	if(count == 0)
	{
		/* Wenn aus ReverseGeocode dann kein neues latlng */
		var searchterm = placemarks.name;
		var split = searchterm.split(",");
		if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1]))
		{
			lastLocation = [split[0],split[1],""];
		}
		else
		{
			if($("opinionAddNewError"))
			{
				$("opinionAddNewError").innerHTML = "Deine Suche hat keine Ergebnisse erzielt! Bitte &uuml;berpr&uuml;fe deinen Suchbegriff oder versuche einen anderen.";
				$("opinionAddNewError").style.display = "";
			}
			else
			{
				$("search_place").value = $("search_place").title;
				addNewOpinion();
			}
			if(!map.getInfoWindow().isHidden())
			{
				map.updateInfoWindow();
			}
		}
	}
	
	if(lastLocation != null)
	{
		//WENN MEHRERE ERGEBNISSE, DANN LISTE AUSGEBEN
		//if(count == 1)
		{
			
			var post = "lat=" + lastLocation[0];
			post += "&lng=" + lastLocation[1];
			post += "&address=" + lastLocation[2];
			
			var callback =
			{
				success: searchForAddNewOpinion_start,
				failure: function(o)
				{
					alert("Fehler in searchForAddNewOpinion_foundLocation()");
				},
				argument: [lastLocation[0],lastLocation[1],lastLocation[2]]
			}
			YAHOO.util.Connect.asyncRequest('POST', "mod/search/xhrAddNewOpinionDialog2.php", callback, post);
		}
		/*else
		{
			$("opinionAddNewList").innerHTML = results;
			$("opinionAddNewList").style.display = "";
		}*/
	}
}

function searchForAddNewOpinion_start(o)
{
	if(addNewOpinionDialog)
	{
		addNewOpinionDialog.hide();
	}
	var aPlace = o.argument;
	
	var latlng = new GLatLng(aPlace[0], aPlace[1]);
	var html = o.responseText;
	
	if(map.getZoom() < 16)
	{
		map.setCenter(latlng, 16);
	}
	
	if(!addNewOpinionMarker)
	{
		addNewOpinionMarker = new GMarker(latlng,{draggable:true});
		GEvent.addListener(addNewOpinionMarker, "dragend", searchForAddNewOpinionReverseGeocode);
		GEvent.addListener(addNewOpinionMarker, "click", searchForAddNewOpinionReverseGeocode);
		GEvent.addListener(addNewOpinionMarker, "infowindowclose", function(){addNewOpinionMarker.hide()});
		map.addOverlay(addNewOpinionMarker);
	}
	else
	{
		addNewOpinionMarker.setLatLng(latlng);
	}
	addNewOpinionMarker.openInfoWindowHtml(html);
	addNewOpinionMarker.show();
}

function searchForAddNewOpinionReverseGeocode()
{
	var marker = this;
	geocoder.getLocations(marker.getLatLng(), searchForAddNewOpinion_foundLocation);
}

function addNewArtSpot()
{
	var search_place = $("search_place").value;
	if(search_place != "" && search_place != "Strasse/Ort" && document.getElementById("error_place").value != "true")
	{
		searchForAddNewArtSpot(search_place);
	}
	else
	{
		var callback =
		{
			success: function(o)
			{			
				if(!isEmpty(o.responseText))
				{
					
					if(!addNewArtSpotDialog)
					{			
						panelDiv = document.createElement("div");
						panelDiv.id = "addNewArtSpotDialog";
						document.body.appendChild(panelDiv);
						var panel = new YAHOO.widget.Panel(panelDiv,
							{ fixedcenter: true, 
							constraintoviewport: true, 
							visible:false,
							modal: true, 
							width:"315px", 
							draggable:true } );
						
						overlayManager.register(panel);
					
						addNewArtSpotDialog = panel;
						addNewArtSpotDialog.setHeader("Art Spotting");
					}
					addNewArtSpotDialog.setBody(o.responseText);
					
					addNewArtSpotDialog.render();
					addNewArtSpotDialog.show();		
				}
				else
				{
					alert("Fehler in addNewArtSpotDialog()");
				}
			},
			failure: function(o)
			{
				alert("Fehler in addNewArtSpotDialog()");
			}
		}
		YAHOO.util.Connect.asyncRequest('POST', "mod/search/xhrAddNewArtSpotDialog.php", callback); 	
	}
}

function searchForAddNewArtSpot(place)
{
	if(place == null)
	{
		var searchForm = null;
				
		var searchForm = $("artSpotAddNewForm");
		place = searchForm.address.value;
	}
	
	geocoder.getLocations(place, searchForAddNewArtSpot_foundLocation);
}

/**
 * Liefert die Suchergebnisse
 */
function searchForAddNewArtSpot_foundLocation(placemarks)
{
	var results = "";
	var latlng;
	var count = 0;
	var lastLocation = null;

	if(placemarks.Placemark)
	{
		for(i=0;i<placemarks.Placemark.length;i++)
		{
			lat = placemarks.Placemark[i].Point.coordinates[1];
			lng = placemarks.Placemark[i].Point.coordinates[0];
			accuracy = placemarks.Placemark[i].AddressDetails.Accuracy;
			latlng = new GLatLng(lat, lng);
			if(accuracy >=6 && maxGLatLngBounds.containsLatLng(latlng))
			{
				address = placemarks.Placemark[i].address.split(",")[0];
				results = results + "<a href='javascript:searchForAddNewArtSpot_start([" + lat + "," + lng + ",\"" + address + "\"]);'>" + address + "</a><br>";
				count++;
				//WENN MEHRERE ERGEBNISSE, DANN LISTE AUSGEBEN
				lastLocation = [lat,lng,address];
				break;
			}
		}
	}
	if(count == 0)
	{
		/* Wenn aus ReverseGeocode dann kein neues latlng */
		var searchterm = placemarks.name;
		var split = searchterm.split(",");
		if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1]))
		{
			lastLocation = [split[0],split[1],""];
		}
		else
		{
			if($("artSpotAddNewError"))
			{
				$("artSpotAddNewError").innerHTML = "Deine Suche hat keine Ergebnisse erzielt! Bitte &uuml;berpr&uuml;fe deinen Suchbegriff oder versuche einen anderen.";
				$("artSpotAddNewError").style.display = "";
			}
			else
			{
				$("search_place").value = $("search_place").title;
				addNewArtSpot();
			}
			if(!map.getInfoWindow().isHidden())
			{
				map.updateInfoWindow();
			}
		}
	}
	
	if(lastLocation != null)
	{
		//WENN MEHRERE ERGEBNISSE, DANN LISTE AUSGEBEN
		//if(count == 1)
		{
			
			var post = "lat=" + lastLocation[0];
			post += "&lng=" + lastLocation[1];
			post += "&address=" + lastLocation[2];
			
			var callback =
			{
				success: searchForAddNewArtSpot_start,
				failure: function(o)
				{
					alert("Fehler in searchForAddNewArtSpot_foundLocation()");
				},
				argument: [lastLocation[0],lastLocation[1],lastLocation[2]]
			}
			YAHOO.util.Connect.asyncRequest('POST', "mod/search/xhrAddNewArtSpotDialog2.php", callback, post);
		}
		/*else
		{
			$("opinionAddNewList").innerHTML = results;
			$("opinionAddNewList").style.display = "";
		}*/
	}
}

function searchForAddNewArtSpot_start(o)
{
	if(addNewArtSpotDialog)
	{
		addNewArtSpotDialog.hide();
	}
	var aPlace = o.argument;
	
	var latlng = new GLatLng(aPlace[0], aPlace[1]);
	var html = o.responseText;
	
	if(map.getZoom() < 16)
	{
		map.setCenter(latlng, 16);
	}
	
	if(!addNewArtSpotMarker)
	{
		addNewArtSpotMarker = new GMarker(latlng,{draggable:true});
		GEvent.addListener(addNewArtSpotMarker, "dragend", searchForAddNewArtSpotReverseGeocode);
		GEvent.addListener(addNewArtSpotMarker, "click", searchForAddNewArtSpotReverseGeocode);
		GEvent.addListener(addNewArtSpotMarker, "infowindowclose", function(){addNewArtSpotMarker.hide()});
		map.addOverlay(addNewArtSpotMarker);
	}
	else
	{
		addNewArtSpotMarker.setLatLng(latlng);
	}
	addNewArtSpotMarker.openInfoWindowHtml(html);
	addNewArtSpotMarker.show();
}

function searchForAddNewArtSpotReverseGeocode()
{
	var marker = this;
	geocoder.getLocations(marker.getLatLng(), searchForAddNewArtSpot_foundLocation);
}