var gMap;
var gLocalSearch;
var gCurrentResults = [];
var baseIcon;
var CatId;

function SelectCat(cat) {
	if (CatSearch.length>1) {
		for (i=0; i<CatSearch.length; i++) {
			classCat = '';
			if (cat==i) classCat = 'select';
			document.getElementById('cat'+i).className = classCat;
		}
	}
	CatId = cat;
	Search();
}

function MapDefaut() {
	gMap = new GMap2(document.getElementById("map"));
	gMap.addControl(new GLargeMapControl());
	gMap.setCenter(new GLatLng(document.getElementById("latitude").value, document.getElementById("longitude").value), 5);
	document.getElementById("searchwell").innerHTML = "";
}

function Search() {
	if( GBrowserIsCompatible() ) {
		GSearch.getBranding(document.getElementById("google_branding"));
		baseIcon = new GIcon();
		baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
		gLocalSearch = new GlocalSearch();
		gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
		where = document.getElementById("where").value;
		if (where) {
			gLocalSearch.setCenterPoint(document.getElementById("where").value);
			gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);
			gLocalSearch.execute("category: "+CatSearch[CatId]);
		}
		else MapDefaut();
	}
}

function OnLocalSearch() {
	if (!gLocalSearch.results.length) {
		MapDefaut();
		return;
	}
	if (gMap==null) {
		gMap = new GMap2(document.getElementById("map"));
		gMap.addControl(new GLargeMapControl());
	} else for (var i = 0; i < gCurrentResults.length; i++) gMap.removeOverlay(gCurrentResults[i].marker()); // on efface les pts
	var first = gLocalSearch.results[0];
	gMap.setCenter(new GLatLng(parseFloat(first.lat), parseFloat(first.lng)), 14);
	var searchWell = document.getElementById("searchwell");
	searchWell.innerHTML = "";
	gCurrentResults = [];
	for (var i=0; i<gLocalSearch.results.length; i++) gCurrentResults.push(new LocalResult(gLocalSearch.results[i],i));
	var attribution = gLocalSearch.getAttribution();
	if (attribution) document.getElementById("searchwell").appendChild(attribution);
}

// Create a lettered icon for this point using our icon class
function createMarker(point, index) {
  var letter = String.fromCharCode("A".charCodeAt(0) + index);
  var letteredIcon = new GIcon(baseIcon);
  letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
  markerOptions = { icon:letteredIcon };
  var marker = new GMarker(point, markerOptions);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("Marker <b>" + letter + "</b>");
  });
  return marker;
}

// A class representing a single Local Search result returned by the
// Google AJAX Search API.
function LocalResult(result,idx) {
	this.result_ = result;
	this.index_ = idx;
	this.resultNode_ = this.unselectedHtml();
	var letter = String.fromCharCode("A".charCodeAt(0) + this.index_);
	var result = document.getElementById("searchwell");
	var newimg = document.createElement('img');
	newimg.src = "http://www.google.com/mapfiles/marker" + letter + ".png";
	newimg.alt = letter;
	newimg.align = 'left';
	result.appendChild(newimg);
	result.appendChild(this.resultNode_);
	gMap.addOverlay(this.marker());
}

LocalResult.prototype.marker = function(opt_icon) {
	if (this.marker_) return this.marker_;
	var point = new GLatLng(parseFloat(this.result_.lat), parseFloat(this.result_.lng));
	var marker = createMarker(point, this.index_);
	GEvent.bind(marker, "click", this, function() {
		marker.openInfoWindow(this.unselectedHtml());
	});
	this.marker_ = marker;
	return marker;
}

LocalResult.prototype.unselectedHtml = function() {
	var container = document.createElement("div");
	container.className = "unselected";
	container.appendChild(this.result_.html.cloneNode(true));
	return container;
}

