// Our global state
var gLocalSearch;
var gMap;
//var gSelectedResults = [];
var gCurrentResults = [];
var gSearchForm;
var main;
var main_marker;
var center;

// Create our "tiny" marker icon
var gSmallIcon = new GIcon();
gSmallIcon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
gSmallIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
gSmallIcon.iconSize = new GSize(12, 20);
gSmallIcon.shadowSize = new GSize(22, 20);
gSmallIcon.iconAnchor = new GPoint(6, 20);
gSmallIcon.infoWindowAnchor = new GPoint(5, 1);

var gSmallIcon2 = new GIcon();
gSmallIcon2.image = "http://labs.google.com/ridefinder/images/mm_20_green.png";
gSmallIcon2.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
gSmallIcon2.iconSize = new GSize(12, 20);
gSmallIcon2.shadowSize = new GSize(22, 20);
gSmallIcon2.iconAnchor = new GPoint(6, 20);
gSmallIcon2.infoWindowAnchor = new GPoint(5, 1);

// Set up the map and the local searcher.
function load() {

  gSearchForm = new GSearchForm(false, document.getElementById("searchform"));
  gSearchForm.setOnSubmitCallback(null, CaptureForm);
  gSearchForm.input.focus();

  // Initialize the map
  gMap = new GMap(document.getElementById("map"));
  gMap.addControl(new GSmallMapControl());
  gMap.addControl(new GMapTypeControl());
  center = new GLatLng(x, y);
  gMap.setCenter(center, 13);
  main = new GLatLng(x, y);
  main_marker = new GMarker(main);
  gMap.addOverlay(main_marker);

  // Initialize the local searcher
  gLocalSearch = new GlocalSearch();
  gLocalSearch.setCenterPoint(gMap);
  gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);

  // Execute the initial search
  //gSearchForm.execute("italian restaurants");
}

// Called when Local Search results are returned, we clear the old
// results and load the new ones.
function OnLocalSearch() {
  if (!gLocalSearch.results) return;
  var searchWell = document.getElementById("searchwell");

  // Clear the map and the old search well
  //searchWell.innerHTML = "";
  searchWell.style.display = 'block';
  
  for (var i = 0; i < gCurrentResults.length; i++) {
    if (!gCurrentResults[i].selected()) {
      gMap.removeOverlay(gCurrentResults[i].marker());
    }
  }

  gCurrentResults = [];
  if (gLocalSearch.results.length > 20)
  {
  	var length = 20;
  } else {
  	var length = gLocalSearch.results.length;
  }
  for (var i = 0; i < length; i++) {
    gCurrentResults.push(new LocalResult(gLocalSearch.results[i]));
  }

  var attribution = gLocalSearch.getAttribution();
  //if (attribution) {
    //document.getElementById("searchwell").appendChild(attribution);
  //}

  // move the map to the first result
  if (gLocalSearch.results[0])
  {
  	//gMap.removeOverlay(main_marker);
  	//main = new GLatLng(x, y);
    //main_marker = new GMarker(main);
    //gMap.addOverlay(main_marker); 	
  	gMap.closeInfoWindow();
  	var first = gLocalSearch.results[0];
  	gMap.recenterOrPanToLatLng(new GPoint(parseFloat(first.lng), parseFloat(first.lat)));
  } else {
  	//var cnt = gMap.getCenter();
  	//var center = new GLatLng(x, y);
  	//gMap.clearOverlays();
  	//var marker = new GMarker(center);
  	//gMap.addOverlay(marker);
  	main_marker.openInfoWindowHtml("No results were found.<br /> Please try another search.");
  	document.getElementById("searchwell").style.display = 'none';
  }

}

// Cancel the form submission, executing an AJAX Search API search.
function CaptureForm(searchForm) {
  gLocalSearch.execute(searchForm.input.value);
  return false;
}



// A class representing a single Local Search result returned by the
// Google AJAX Search API.
function LocalResult(result) {
  this.result_ = result;
  this.resultNode_ = this.unselectedHtml();
  //document.getElementById("searchwell").appendChild(this.resultNode_);
  document.getElementById("searchwell").style.display = 'block';
  gMap.addOverlay(this.marker(gSmallIcon));
  gMap.addOverlay(new GMarker(main));
}

// Returns the GMap marker for this result, creating it with the given
// icon if it has not already been created.
LocalResult.prototype.marker = function(opt_icon) {
  if (this.marker_) return this.marker_;
  var marker = new GMarker(new GLatLng(parseFloat(this.result_.lat),
                                     parseFloat(this.result_.lng)),
                           opt_icon);
  GEvent.bind(marker, "click", this, function() {
    marker.openInfoWindow(this.selected() ? this.selectedHtml() :
                                            this.unselectedHtml());
  });
  this.marker_ = marker;
  return marker;
}

// "Saves" this result if it has not already been saved
/*LocalResult.prototype.select = function() {
  if (!this.selected()) {
    this.selected_ = true;

    // Remove the old marker and add the new marker
    gMap.removeOverlay(this.marker());
    this.marker_ = null;
    gMap.addOverlay(this.marker(gSmallIcon2));

    // Add our result to the saved set
    document.getElementById("selected").appendChild(this.selectedHtml());

    // Remove the old search result from the search well
    this.resultNode_.parentNode.removeChild(this.resultNode_);
  }
}*/

// Returns the HTML we display for a result before it has been "saved"
LocalResult.prototype.unselectedHtml = function() {
  var container = document.createElement("div");
  container.className = "unselected";
  container.appendChild(this.result_.html.cloneNode(true));
  //var saveDiv = document.createElement("div");
  //saveDiv.className = "select";
  //saveDiv.innerHTML = "Save this location";
  //GEvent.bindDom(saveDiv, "click", this, function() {
    //gMap.closeInfoWindow();
    //this.select();
    //gSelectedResults.push(this);
  //});
  //container.appendChild(saveDiv);
  return container;
}

// Returns the HTML we display for a result after it has been "saved"
LocalResult.prototype.selectedHtml = function() {
  return this.result_.html.cloneNode(true);
}

// Returns true if this result is currently "saved"
LocalResult.prototype.selected = function() {
  return this.selected_;
}	

function performSearch(item)
{
	gMap.setCenter(center, 13);
	gSearchForm.execute(item);
}
