var tif_subtype;
var tif_type;
var tif_tpl;
var tif_nblst;
var tif_mode;
var skipScroll = true;

function params2Object() {
	return {
		"tif_type": tif_type,
		"tif_subtype": tif_subtype,
		"tif_tpl": tif_tpl,
		"tif_stlst": $("#tif_stlst").val(),
		"tif_nblst": tif_nblst
	};
}

function filtres2Requete() {
	return $.param(filtres2Object());
}

function filtres2Object() {

	var tif_filtres = {};
	
	$("#tif_filtres form :input:not(:checkbox):not(:button):not(:submit):not(:radio), #tif_filtres form :checkbox:checked, #tif_filtres form :radio:checked").each(function() {
		if($(this).val() != "") {
			tif_filtres[$(this).attr("name")] = $(this).val();
		}
	});

	return tif_filtres;
}

function requete2Filtres(requete) {
	
	$("#tif_filtres form :input:not(:checkbox):not(:button):not(:submit):not(:radio)").val("");
	$("#tif_filtres form :radio:checked, #tif_filtres form :checkbox:checked").removeAttr("checked");
	
	if(requete != "") {
		var origine = unescape(requete).toString().split("&");
		
		for(var i in origine) {
			var filtre = origine[i].toString().split("=");
			
			$("#tif_filtres form :input[name='"+filtre[0].toString()+"']").each(function() {
				if($(this).is(":checkbox") || $(this).is(":radio")) {
					if($(this).val() == filtre[1].toString()) {
						$(this).attr("checked", "checked").trigger("change");
					}
				} else {
					$(this).val(filtre[1].toString().replace(/\+/gi," "));
				}
			});
		}
	}
}

function chargerFiltre(requete)
{
	// On charge le resultat de la recherche
	$.get(
		"/TourInFrance/parser.php",
		$.extend(params2Object(), filtres2Object()),
		function(data) {
			
			if(tif_mode == "liste")
			{
				$("#tif_filtres, #tif_carte, #tif_agenda", "#tif_side").show();
				$("#tif_content").html(data);
				
				if(!skipScroll) {
					$(window).scrollTop(0);
				}
	
				/* Les markers
				 **************************************************/

				// On efface la carte et les markers
				deleteMap();
				createMapModeListe();
				
				// On recréé les markers
				$(".tif_situer").each(function () {
					
					// Récupération des infos sur le marker
					var marker = addMarkerModeListe({
						index :		$(this).attr("index"),
						lat :		$(this).attr("lat"),
						lng :		$(this).attr("lng"),
						details :	$(this).attr("details")
					});
					
					// Réponse au click sur le lien situer
					if(marker != null) {
						$(this).bind("click", function() {
							zoomOnMarker(marker);
						});					
					}
				});
				
				/* Les boutons voir +
				 **************************************************/
				
				// Réponse au click sur le lien .details
				$(".tif_details").bind("click", function() {
					var oi = $(this).attr("details");
					$.history.load("/details/" + oi);
				});
				
				/* Le carnet de voyage
				 **************************************************/
				
				// Réponse au click sur le lien .details
				$(".tif_carnet").bind("click", function() {
					var tmp = $(this).attr("carnet");
					var origine = (window.location.href).split("#");
					
					$.get("/TourInFrance/carnet.php?action=add&"+tmp+"&origine="+escape(origine[0]), function(data) {
						chargerCarnet("#tif_carnet_list", Math.round((new Date()).getTime()/1000), 3);
						alert("L'élément a été ajouté au carnet de voyage.");
					});
				});
				
				/* La pagination
				 **************************************************/
				$(".tif_page").bind("click", function() {
					var tmp = $(this).attr("page");
					$("#tif_stlst").val(tmp);
					getResultatsFiltrage();
				});
			}
			
			else if(tif_mode == "carte")
			{
				$("#tif_filtres, #tif_agenda", "#tif_side").show();
				$("#tif_carte", "#tif_side").hide();
				
				if(!skipScroll) {
					$(window).scrollTop(0);
				}
				
				$("#tif_content").html(data);
				$("#tif_content").prepend("<div id='tif_content_carte'><div id='tif_content_carte_map'></div></div>");
				
				// On efface la carte et les markers
				deleteMap();
				createMapModeCarte();
				
				// On recréé les markers
				$(".tif_details").each(function () {
					// Récupération des infos sur le marker
					var marker = addMarkerModeCarte({
						index :		$(this).attr("index"),
						lat :		$(this).attr("lat"),
						lng :		$(this).attr("lng"),
						details :	$(this).attr("details")
					});
				});
			}
			
			skipScroll = false;
		}

	);
}

function chargerDetails(requete)
{
	$.get(
		"/TourInFrance/parser.php",
		$.extend(params2Object(), {index : requete}),
		function(data) {
			$("#tif_filtres, #tif_carte, #hautheberg, #tif_side-fond", "#tif_side").hide();
			$("#tif_content").html(data);
			
			if(!skipScroll) {
				$(window).scrollTop(0);
			}
			
			Shadowbox.clearCache("a.zoomImage");
			
			Shadowbox.setup("a.zoomImage", {
	            gallery: "ZoomImage"
	        });
			
			skipScroll = false;
		}
	);
}

function getResultatsFiltrage() {
	$.history.load("/rechercher/" + filtres2Requete());
}

function getSmallDetailsByMarker(details) {
	$.history.load("/reduit/" + details);
}

function getDetailsByMarker(details) {
	$.history.load("/details/" + details);
}

function parserurl(hash)
{
	if(hash == "" || hash == null || hash == undefined || hash.indexOf("/") == -1) {
		getResultatsFiltrage();
		return false;
	}

	var splitedHash = hash.split("/");
	var regDetails	= new RegExp("^([0-9]+)\-(.+)$","gi");
	
	if(splitedHash[1] == "rechercher") {
		requete2Filtres(splitedHash[2].toString());
		chargerFiltre(splitedHash[2].toString());
	} else if(splitedHash[1] == "details" != -1 && regDetails.test(splitedHash[2])) {
		var tmp	= splitedHash[2].toString().split("-");
		chargerDetails(tmp[0].toString());
	} else {
		getResultatsFiltrage();
		return false;
	}
}

function chargerAgenda(target, tpl, mindate, nombre)
{
	// On charge les données de l'agenda
	$.get(
		"/TourInFrance/parser.php",
		{
			"tif_type": "agenda",
			"tif_subtype": "agenda",
			"tif_tpl": tpl,
			"tif_stlst": 0,
			"tif_nblst": 2,
			"tif_tri": "ByDate",
			"mindatestrict": "1",
			"mindate": mindate
		},
		function(data) {
			$(target).html(data);
		}
	);
}

function chargerCarnet(target, nombre)
{
	// On charge les données de l'agenda
	$.get(
			"/TourInFrance/carnet.php",
			{
				"round": nombre,
				"action": "list-module"
			},
			function(data) {
				$(target).html(data);
			}
	);
}

function chargerCarnetDetaille(target, nombre)
{
	// On charge les données de l'agenda
	$.get(
			"/TourInFrance/carnet.php",
			{
				"round": nombre,
				"action": "list"
			},
			function(data) {
				$(target).html(data);
				
				$("#tif_carte, #tif_agenda", "#tif_side").show();
				$("#tif_carnet_detaille").html(data);
				
				if(!skipScroll) {
					$(window).scrollTop(0);
				}
	
				/* Les markers
				 **************************************************/

				// On efface la carte et les markers
				deleteMap();
				createMapModeListe();
				
				// On recréé les markers
				$(".tif_situer").each(function () {
					
					// Récupération des infos sur le marker
					var marker = addMarkerModeListe({
						index :		$(this).attr("index"),
						lat :		$(this).attr("lat"),
						lng :		$(this).attr("lng"),
						details :	$(this).attr("details")
					});
					
					// Réponse au click sur le lien situer
					if(marker != null) {
						$(this).bind("click", function() {
							zoomOnMarker(marker);
						});					
					}
				});
				
				/* Le carnet de voyage
				 **************************************************/
				
				// Réponse au click sur le lien .details
				$(".tif_carnet_supprimer").bind("click", function() {
					var tmp = $(this).attr("cle");
					$.get("/TourInFrance/carnet.php?action=delete&cle="+tmp, function(data) {
						chargerCarnetDetaille("#tif_carnet_detaille", Math.round((new Date()).getTime()/1000), 3);
					});
				});
				
				skipScroll = false;
			}
	);
}

function chargerCommune(target)
{
	// On charge la liste des communes relatif au xml demandé
	$.get(
		"/TourInFrance/filtres.php",
		{
			"tif_type": tif_type,
			"tif_subtype": tif_subtype
		},
		function(data) {
			$(target).append(data);
		}
	);
}

// Dès que la page est prete
$(document).ready(function()
{
	if($("#tif_agenda_list").length) {
		chargerAgenda("#tif_agenda_list", "module-agenda", Math.round((new Date()).getTime()), 3);
	}
	
	if($("#tif_carnet").length) {
		chargerCarnet("#tif_carnet_list", Math.round((new Date()).getTime()/1000), 3);
	}
	
	if($("#tif_carnet_detaille").length) {
		chargerCarnetDetaille("#tif_carnet_detaille", Math.round((new Date()).getTime()/1000), 3);
	}
	
	if($("#tif_stlst, #tif_subtype, #tif_type, #tif_tpl").length == 4) {
		
		// On initialise les  variable de travail
		tif_subtype	= $("#tif_subtype").val();
		tif_type	= $("#tif_type").val();
		tif_tpl		= $("#tif_tpl").val();
		tif_nblst	= $("#tif_nblst").val();
		tif_mode	= "liste";

		$(":input[name='tif_mode']").bind("change", function() {
			if($(this).val() == "liste") {
				tif_mode = "liste";
				tif_nblst = $("#tif_nblst").val();
			} else if($(this).val() == "carte") {
				tif_mode = "carte";
				tif_nblst = 1000;
			}
		});
		
		if($(":input[name='commune']").length) {
			chargerCommune(":input[name='commune']");
		}
		
		// On charge l'url courante - détails ou résultats de recherche
		$.history.init(parserurl);
		
		// Lancer la recherche lorsqu'on valide le formulaire de filtrage
		$("#tif_submit").bind("click", function(event) {
			$("#tif_stlst").val("0");
			getResultatsFiltrage();
		});
	}
});
