var searchingLocation=false;
var shownMarker=null;
var map;
var geo_location;
var geocoder;

function _searchLocation(){
address=$('loc').value;
  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        $('search_status').innerHTML=address + " not found";
      } else {
        loc_map.setCenter(point, 13);

        if(shownMarker){
  			loc_map.removeOverlay(shownMarker)
  		}

  		shownMarker = new GMarker(point);

  		GEvent.addListener(shownMarker, "click", function() {
								loc_map.openInfoWindowHtml(point, address);
								});

        loc_map.addOverlay(shownMarker);
        shownMarker.openInfoWindowHtml(address);
      }
    }
  );
}

// addAddressToMap() is called when the geocoder returns an
    // answer.  It adds a marker to the map with an open info window
    // showing the nicely formatted version of the address and the country code.
    function addAddressToMap(response) {
      loc_map.clearOverlays();
      if (!response || response.Status.code != 200) {
        $('search_status').innerHTML="Sorry, we were unable to geocode that address";
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
        shownMarker = new GMarker(point);
        loc_map.addOverlay(shownMarker);
        loc_map.setCenter(point, 13);
        var countryCode = place.AddressDetails.Country.CountryNameCode;

        if(place.AddressDetails.Country.AdministrativeArea && place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea)
        var city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;

        else if(place.AddressDetails.Country.AdministrativeArea)
        var city = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
        else var city = place.AddressDetails.Country.Locality.LocalityName;
        shownMarker.openInfoWindowHtml(place.address + '<br>' +
          '<b>Country code:</b> ' + countryCode + '<br>'+
          '<b>City</b> '+ city);

		$('search_status').innerHTML="";

		geo_location = new Array();
		geo_location["city"] = city;
		geo_location["country"] = countryCode;
		geo_location["lat"] = place.Point.coordinates[1];
		geo_location["long"] = place.Point.coordinates[0];

      }
    }

    // showLocation() is called when you click on the Search button
    // in the form.  It geocodes the address entered into the form
    // and adds a marker to the map at that location.
    function searchLocation() {
    	$('search_status').innerHTML="Geocoding location";
      var address = $('loc').value;
      geocoder.getLocations(address, addAddressToMap);
    }


function __searchLocation() {
	load();
	if(searchingLocation==true)
	{
		return;
	}

	var addr='./ajax/searchlocationsxml.php';
	var params='loc='+$('loc').value;

	var myAjax = new Ajax.Request(addr,
									{
										method:'get',
										parameters:params,
										onComplete: showLocations,
										onFailure: systemError
									});


	searchingLocation = true;


}


function showLocations(request_msg) {

		try{
			if (request_msg.readyState == 4) {
					searchingLocation = false;
				if(request_msg.status == 200) {
					var htmlDoc = request_msg.responseText;
					//alert(htmlDoc);
					//document.getElementById('text_div').innerHTML =  "<pre>"+htmlDoc+"</pre>";
					//document.getElementById('status').innerHTML = '';
					searchingLocation = false;
					//delete request_msg;


						var xmlDoc = request_msg.responseXML;
						//alert(request_msg.responseXML);
						if(xmlDoc && xmlDoc.documentElement){
							var location = xmlDoc.documentElement.getElementsByTagName("location");

								response = new Array();
								response["text"] = decode(location[0].getAttribute("text"));
								response["city"] = decode(location[0].getAttribute("city"));
								response["country"] = decode(location[0].getAttribute("country"));
								response["lat"] = location[0].getAttribute("lat");
								response["long"] = location[0].getAttribute("long");
								$('search_status').innerHTML=response["text"];
								$('loc').value=response['city']+", "+response['country'];
								var point = new GLatLng(response['lat'], response['long']);
  								if(shownMarker){
  									loc_map.removeOverlay(shownMarker)
  								}

  								shownMarker= new GMarker(point);

  								loc_map.addOverlay(shownMarker);

  								GEvent.addListener(shownMarker, "click", function() {
								loc_map.openInfoWindowHtml(point, $('loc').value);
								});

								loc_map.setCenter(point, 13);
								//alert(response["text"]);
								Element.show("location_select_button");

							}
					}
				}
				else {
					alert('Request error.');
				}
			}
			catch(e){
			// caught an error
			//alert('Response failed.\n'+e);
		}
		finally{}

		}

		function saveSelection(){

			$('city').value=geo_location['city'];
			$('country').value=geo_location['country'];
			$('lat').value=geo_location['lat'];
			$('long').value=geo_location['long'];
			$('location_internat').innerHTML=geo_location['city']+", "+geo_location['country'];
			$('location_link').innerHTML="[change your location]";
			locationChecked=true;
			if($('form_submit'))
				$('form_submit').disabled=false;


			eraseWindow('locationW');

		}

		function saveSelection_items_form(){

			if($('photos_form').style.display!="none") {

			$('city').value=geo_location['city'];
			$('country').value=geo_location['country'];
			$('lat').value=geo_location['lat'];
			$('long').value=geo_location['long'];
			$('location_internat').innerHTML=geo_location['city']+", "+geo_location['country'];
			$('location_link').innerHTML="[change location]";
			} else if($('places_form').style.display!="none") {
			$('place_city').value=geo_location['city'];
			$('place_country').value=geo_location['country'];
			$('place_lat').value=geo_location['lat'];
			$('place_long').value=geo_location['long'];
			$('place_location_internat').innerHTML=geo_location['city']+", "+geo_location['country'];
			$('place_location_link').innerHTML="[change location]";

			} else {
			$('user_city').value=geo_location['city'];
			$('user_country').value=geo_location['country'];
			$('user_lat').value=geo_location['lat'];
			$('user_long').value=geo_location['long'];
			$('user_location_internat').innerHTML=geo_location['city']+", "+geo_location['country'];
			$('user_location_link').innerHTML="[change location]";

			}
			//locationChecked=true;
			//$('form_submit').disabled=false;


			eraseWindow('locationW');

		}


function systemError(){
	alert("Ajax failed!");
}