var oldOnLoad = window.onload;
var oldOnUnload = window.onunload;

var map; /* The google map Elt */
var geocoder = new GClientGeocoder();
var terrainMap = new Array(); /* map containing terrain objects group by ville as key */

window.onload = function() {
	if(oldOnLoad)
	{
		oldOnLoad();
	}
	initializeGooglemap();
}
window.onunload = function() {
	if(oldOnUnload)
	{
		oldOnUnload();
	}
	GUnload();
}

/*
 * Initialize the google map
 */
function initializeGooglemap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(47.749492, 7.339781), 9);
	initTerrainList();
      }
    }

/*
 *	Show on googlemap the coordinates passed in parameter
 */
function showCoordinates(coordinates) {
  
  var terrains = terrainMap[coordinates];
  var infoHTML = '';
  infoHTML = '<h1>'+terrains[0].ville+'</h1>';
  for(var i=0; i<terrains.length; i++)
  {
	infoHTML += '<p>'+terrains[i].surface+' à '+ terrains[i].prix+'</p>';
  }

	var point = getGLatLngFromCoordinates(coordinates);
	map.openInfoWindow(point,infoHTML);
        map.setCenter(point, 11);
	location.href="#compteur-terrain";	
}

/*
 *	Add a marker on googlemap
 */
function addMarkerFromAddress(address) {
  geocoder.getLatLng(
    address + ', FR',
    function(point) {
      if (point) {
        var marker = new GMarker(point);
        map.addOverlay(marker);
      }
    }
  );
}

function getGLatLngFromCoordinates(coordinates)
{
	var separatorIndex = coordinates.indexOf(',');	
	return new GLatLng(coordinates.substr(0,separatorIndex-1),coordinates.substr(separatorIndex+1));
}

/**
 *	Add a marker on map from string containing "lat,lng"
 */
function addMarkerFromCoordinates(coordinates)
{
	var marker = new GMarker(getGLatLngFromCoordinates(coordinates));
	GEvent.addListener(marker, "click", function() {
		showCoordinates(coordinates);
  	});

        map.addOverlay(marker);
}

/*
 *	Loads terrain list from HTML table
 */
function initTerrainList() {
	var ville; /* ville in string */

	var terrainElt; /* A <tr> containing terrain data */
	var terrainTableElt = $$("#liste_terrains .terrain-line");

	for(var i=0; i<terrainTableElt.length; i++)
	{
			terrainElt = terrainTableElt[i].select("td");
			var terrain = new Object(); /* terrain object */
			terrain.ville = terrainElt[0].firstChild.firstChild.nodeValue;
			terrain.ville = terrain.ville.substr(0,terrain.ville.indexOf('(')-1);


			terrain.surface = terrainElt[1].firstChild.nodeValue;

			terrain.prix = '';
			if(terrainElt[2].firstChild != null)
			{
				terrain.prix = terrainElt[2].firstChild.nodeValue;
			}			

			terrain.coordinates = terrainElt[5].firstChild.nodeValue;

			if(!terrainMap[terrain.coordinates])
			{
				terrainMap[terrain.coordinates]=new Array();
			}
			
			terrainMap[terrain.coordinates].push(terrain);
	}

	for(var mycoordinates in terrainMap)
	{
		if(mycoordinates.indexOf(',')>-1)
		{
			addMarkerFromCoordinates(mycoordinates);
		}
	}
}

