var url = "xml_gmap_terrain.asp";
var urlDetail = "xml_gmap_terrain_detail.asp";

var map = null;
var overviewmap = null;
var centreurl = null; 
var markersArray;
var pmax = -1;
var odd = false;
var nbQuery = 0;

var controls;

var color_hover = "#8bb835";
var color_out = "#FFF";

function getChecked(elem)
{
	if ($(elem).attr("checked") == true) return true;
	else return false;
}

function initCarto()
{
	$("#updating").show();
	//createRegions();
	$("#region_check input").attr("checked","checked");
	updateCarto();
	$("#updating").hide();
	$("#region_check input").removeAttr("checked");
	$("#result").children().hide();
	$("#msgError").hide();
}

function updateCarto(){
	$("#updating").show();
	pmax = parseFloat(pmax);
	var querystring = $("#form_gmap").serialize();
	querystring = querystring.replace(/%2F/g,"-");
	my_url = url + "?pmax=" + pmax + "&" + querystring;
	nbQuery++;
	downloadMarker(my_url);
}

function toggleGroup(region){
	for (var i = 0; i < markerGroups[region].length; i++) {
		var marker = markerGroups[region][i];
		
		if (marker.isHidden()) {
			marker.show();
		}
		else {
			marker.hide();
		}
		
		// affichage / masquage des éléments dans la liste
		$(".type_"+region).toggle();
		
	}
}

function createResultTable(id, name, region, ville, departement, telephone)
{
	var html = "";
	if (odd) html += "<tr class=\"odd\" id=\"terrain_"+ id +"\">";
	else html += "<tr id=\"terrain_"+ id +"\">";
	html += "<td class=\"tnom\"><a href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">"+ name +"</a></td>"
	html += "<td class=\"tville\"><a href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">"+ ville +"</a></td>"
	html += "<td class=\"tdep\"><a href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">"+ departement +"</a></td>"
	html += "<td class=\"ttel\"><a href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">"+ telephone +"</a></td>"
	html += "<td class=\"tdetail\"><a href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">[+]</a></td>"
	html += "</tr>";
	// création du li dans la liste des résultats
	$("#region_"+ region)	.append(html)
							.mouseover(function(){ showMarker(id); });
	odd = !odd;
}

function createResultLi(id, name, region)
{
	// création du li dans la liste des résultats
	$("#region_"+ region)	.append("<li><a id=\"terrain_"+ id +"\" href=\"/terrain.asp?sX_Menu_selectedID="+ sX_Menu_selectedID +"&id="+ id +"\">"+ name +"</a></li>")
							.mouseover(function(){ showMarker(id); });
}

function clearResultTable()
{
	$.each($("#result table tbody"), function() {
		$(this).empty();
	});
}

function clearResultList()
{
	$.each($("#result ul"), function() {
		$(this).empty();
	});
}

function checkResultList()
{
	//$.each($("#result ul"), function() {
	$.each($("#result table"), function() {
		var id = $(this).find("tbody").attr("id");
		if($(this).find("tbody").children().length == 0)
		{
			$(this).hide();
			$("#titre_"+ id ).hide();
			
		}
		else
		{
			//$(this).show();
			$("#titre_"+ id ).show();
		}
	});
}

function downloadMarker(my_url)
{
	GDownloadUrl(my_url, function(data){
		if (nbQuery == 1) $("#msgError").html("").hide();
		
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		
		var bounds = new GLatLngBounds;
		
		// active le zoom sur double click
		map.enableDoubleClickZoom();
		
		map.enableContinuousZoom();
		//map.enableScrollWheelZoom();
		
		// active le déplacement sur la carte
		map.enableDragging()
	
		// efface les marqueurs de la carte
		map.clearOverlays();
		// efface les résultats dans les table
		clearResultTable();
		// efface le tableau des marqueurs
		markersArray = new Array();
		
		// s'il n'y a aucune marker
		if (markers.length == 0) {
			if (nbQuery == 1) {
				// coche toutes les régions
				$("#region_check input").attr("checked", "checked");
				// relance la mise à jour
				updateCarto('xml_gmap_terrain.asp');
				$("#msgError").html("La recherche s'est effectu&eacute;e sur toutes les r&eacute;gions.").show();
				
			}
			else {
				$("#msgError").html("Aucun r&eacute;sultat.").show();
				map.setCenter(new GLatLng(46.227638, 2.213749), 5);
			}
		}
		else {
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var infoWindow = markers[i].getAttribute("infoWindow");
				var region = markers[i].getAttribute("region");
				var terrain = markers[i].getAttribute("id");
				var ville = markers[i].getAttribute("ville");
				var departement = markers[i].getAttribute("departement");
				var telephone = markers[i].getAttribute("telephone");
				
				var activite = markers[i].getAttribute("activite");
				var rm_appart = markers[i].getAttribute("rm_appart");
				var piscine = markers[i].getAttribute("piscine");
				var caravaneige = markers[i].getAttribute("caravaneige");
				var autocaravanes = markers[i].getAttribute("autocaravanes");
				var naturisme = markers[i].getAttribute("naturisme");
				
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				
				var marker = createMarker(point, name, infoWindow, terrain);
				map.addOverlay(marker);
				
				marker.id = terrain;
				markersArray.push(marker);
				
				// affichage de la liste de résultat
				createResultTable(terrain, name, region, ville, departement, telephone);
				
				bounds.extend(point);
			}
			
			if (markers.length > 0) {
				// recentrage et zoom sur l'ensemble des marqueurs
				var newzoom = map.getBoundsZoomLevel(bounds);
				if (newzoom > 12) 
					newzoom = 12;
				//if (newzoom > 8) overviewmap.hide(false);
				map.setZoom(newzoom);
				map.setCenter(bounds.getCenter());
			}
			else {
				map.setCenter(new GLatLng(46.227638, 2.213749), 6);
			}
		}
		
		// affichage de la barre de zoom et déplacement
		map.addControl(controls);
		
		// affiche / masque les régions dans la liste de résultat
		checkResultList();
		$("#updating").hide();
		
		// réinitialisation du nombre de requete
		nbQuery = 0;
	});
}

function createMarker(point, name, infoWindow, terrain, oddMarker){
	var icon = new GIcon();
	if (oddMarker) {
		icon.image = "/img/design/picto_carto_autre.png";
	}
	else {
		icon.image = "/img/design/picto_carto.png";
	}
	
	icon.iconSize = new GSize(30, 24);
	icon.iconAnchor = new GPoint(15, 20);
	icon.infoWindowAnchor = new GPoint(10, 7);
	
	var marker = new GMarker(point, {icon: icon});
	
	GEvent.addListener(marker, 'click', function(){
	  window.location = site_url+"terrain.asp?id="+ terrain +"&sX_Menu_selectedID="+sX_Menu_selectedID;
	});
	GEvent.addListener(marker, 'mouseover', function(){
		//marker.openInfoWindowHtml(infoWindow, {maxWidth: 100});
		$(".infoWindow").html(infoWindow);
	});
	
	GEvent.addListener(marker, "mouseover", function(){
		$("#terrain_"+ terrain).toggleClass("highlight");
	});
	
	GEvent.addListener(marker, "mouseout", function(){
		$("#terrain_"+ terrain).toggleClass("highlight");
	});
			
	return marker;
}

function createRegions()
{		
	// masque de la barre de zoom et déplacement
	map.removeControl(controls);
	
	// désactive le zoom sur le double click
	map.disableDoubleClickZoom();
	
	// désactive le déplacement sur la carte
	map.disableDragging()
	
	// efface les marqueurs de la carte
	map.clearOverlays();
	// efface les résultats dans les table
	clearResultTable();
	// efface le tableau des marqueurs
	markersArray = new Array();
	
	
	var exml = new EGeoXml("exml", map, "/kml/regions.xml", { 	nozoom:true
															, polygonoptions:{clickable:true, draggable: true} 
															, markeroptions:{clickable:true, draggable: true} 
														});
	exml.parse();
	
	map.setCenter(new GLatLng(46.227638, 2.213749), 5);
	
	//$("#updating").hide();
}

function showMarker(terrain)
{
	for (var i = 0; i < markersArray.length; i++)
	{
		var marker = markersArray[i];
		if (marker.id == terrain)
		{
			//marker.setImage('/img/design/tente_low.png');
			map.panTo(marker.getPoint());
		}
	}
}

function updateTerrainDetail(pk)
{
	var my_url = urlDetail + "?pk="+pk;
	downloadMarkerTerrainDetail(my_url);
}

function downloadMarkerTerrainDetail(my_url)
{
	GDownloadUrl(my_url, function(data){
		
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		
		// efface les marqueurs de la carte
		//map.clearOverlays();
		
		for (var i = 0; i < markers.length; i++) {
			var name = markers[i].getAttribute("name");
			var infoWindow = markers[i].getAttribute("infoWindow");
			var region = markers[i].getAttribute("region");
			var terrain = markers[i].getAttribute("id");
			var ville = markers[i].getAttribute("ville");
			var departement = markers[i].getAttribute("departement");
			var telephone = markers[i].getAttribute("telephone");
			
			var activite = markers[i].getAttribute("activite");
			var rm_appart = markers[i].getAttribute("rm_appart");
			var piscine = markers[i].getAttribute("piscine");
			var caravaneige = markers[i].getAttribute("caravaneige");
			var autocaravanes = markers[i].getAttribute("autocaravanes");
			var naturisme = markers[i].getAttribute("naturisme");
			
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
			
			var marker = createMarker(point, name, infoWindow, terrain, true);
			map.addOverlay(marker);
			
			marker.id = terrain;
		}
	});
}
