var TTL_ALERT_CREATION	= "Création d'une alerte";

var TXT_ALERT_CREATED	= "Votre alerte e-mail a bien été créée.";
var TXT_ALERT_ISSUE		= "Une erreur est survenue lors de la création de votre alerte.";
var TXT_ALERT_EXISTS    = "L'alerte que vous tentez de créer existe déjà !";

window.addEvent("domready", InitSearch);

var cookieData = new Hash();
var cookieValues = null;
var catMapping = new Array();
var intervalIds = new Hash();
var selectCache = new Hash();
var locationData = null;
var isLocating = false;
var isClearing = false;


/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function AjaxRequest(methodName, params)
{
    var myRequest = new Request({ method: "post", url: appDirectory + "/ajax/" + methodName + ".aspx", onSuccess: function(r) { eval(methodName + "CallBack(r)") } });
	myRequest.send(Hash.toQueryString(params));
}
/*************************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function InitSearch()
{
	// initialisation de la carte flash si elle existe
	var searchMap = $("searchMap");
	if (searchMap != null)
	{
		var mapWidth = searchMap.getStyle('width').replace("px", "");
		var mapHeight = searchMap.getStyle('height').replace("px", "");
			
		var flashvars = {};
		flashvars.wmode = "transparent";

		swfobject.embedSWF("/swf/searchmap.swf", "searchMap", mapWidth, mapHeight, "9.0.0", "/swf/core/expressInstall.swf", flashvars);
	}

	// recuperation des valeurs contenues dans l'eventuel cookie de recherche
	if (Cookie.read("MIXADSEARCH") != null)
	{
		cookieValues = Cookie.read("MIXADSEARCH").hexadecode().split("@");
	}

	if (COOKIE_MODE)
	{
		// affectation des liens de suppressions aux filtres deja actifs
		// recuperation et stockage dans notre hash des valeurs du cookie de recherche
		var activeFilterList = $$("ul[id=mxdActiveFilters] li a");
		for (var i = 0; i < activeFilterList.length; i++)
		{
			if (activeFilterList[i].getAttribute("rel") != null)
			{
				var activeLink = activeFilterList[i];
				//var filterField = activeLink.getAttribute("rel").replace("mxdFilter", "").toLowerCase();

				var filterField = activeLink.getAttribute("rel").toLowerCase();	
				// cas des criteres de filtres liés a un meme champ
				// cf filtre auto_options
				if (filterField.indexOf("[") != -1)
				{
					filterField = filterField.substring(0, filterField.indexOf("["));
				}

				cookieValue = GetCookieFilterValue(filterField);
				cookieData.set(filterField, cookieValue);

				if (activeLink.getAttribute("href") == "/")
				{
					activeLink.setAttribute("href", RESULT_URL);
				}

				activeLink.addEvent("click", RemoveSearchFilter);
			}
		}
	}
	 
	var userId = GetCookieFilterValue("num_usager");
	if (userId != "")
	{
		cookieData.set("num_usager", userId);
	}

	// recuperation du mode de recherche (rapide ou avancé)
	var mode = GetCookieFilterValue("search_mode");
	if (mode != "")
	{
		cookieData.set("search_mode", mode);
	}

	// recuperation du mode de recherche (rapide ou avancé)
	var display = GetCookieFilterValue("search_display");
	if (display != "")
	{
		cookieData.set("search_display", display);
	}


	// recuperation d'eventuels mots-cle
	var keywords = GetCookieFilterValue("keywords");
	if (keywords != "")
	{
		cookieData.set("keywords", keywords);
	}



	var currentKeywords = filterList["keywords"];
	if ($defined(currentKeywords) && currentKeywords != "")
	{
		var keywordField = $("filter-form").getElement("input[name$=keywords]");

		if ($defined(keywordField))
		{
			keywordField.value = currentKeywords + " ";
		}
	}


	// on traite d'eventuels elements rattachés a un formulaire de filtres
	//if (COOKIE_MODE)
	//{
		ProcessFilterFormItems();
		
		// affectation des evenements de clic sur les liens de filtres et sous-filtres (si presents)
		var filterListUL = $$("ul[class^=mxdFilter]");

		for (var i = 0; i < filterListUL.length; i++)
		{
			var filter = filterListUL[i];
			
			var filterField = filter.className.replace("mxdFilter", "").toLowerCase();
			filterField = filterField.replace(" multiple", "");

			var filterItems = filter.getChildren("li");

			for (var j = 0; j < filterItems.length; j++)
			{
				var item = filterItems[j];
				var link = item.getFirst();
				var subFilter = link.getNext("ul");	

				if (link != null)
				{
					var filterValue = link.getAttribute("rel");
					
					if (filterValue != null)
					{
						if (link.getAttribute("href") == "/")
						{
							link.setAttribute("href", RESULT_URL);
						}

						link.addEvent("click", SetSearchFilter.bindWithEvent(link, filterField));

						// prise en compte d'un ou plusieurs sous-filtre (si present)
						if (subFilter != null)
						{
							var filterSubItems = subFilter.getChildren("li");
							var parentFilterValue = "";
							for (var s = 0; s < filterSubItems.length; s++)
							{
								var subItem = filterSubItems[s];
								var subLink = subItem.getFirst();

								if (subLink != null)
								{
									var subFilterValue = subLink.getAttribute("rel");

									if (subFilterValue != "")
									{
										parentFilterValue += subFilterValue + ",";

										if (subLink.getAttribute("href") == "/")
										{
											subLink.setAttribute("href", RESULT_URL);
										}

										subLink.addEvent("click", SetSearchFilter.bindWithEvent(subLink, filterField));
									}
								}
							}
							if (parentFilterValue != "")
							{
								parentFilterValue = parentFilterValue.trunc(1);
								// on renseigne la valeur pour le filtre parent
								// (i.e. : une liste de categories 401,402,...)
								link.setAttribute("rel", parentFilterValue);
							}
						}
					}
				}
			}
		}
	//}


	// cas special pour la region
	var region = GetCookieFilterValue("region")
	if (region != "")
	{
		cookieData.set("region", region);
	}

	// s'il existe des filtres en libre saisie de type "intervalle" (i.e. : mini maxi)
	// => on rend ces champs "numerique" a la saisie et on sauvegarde leur nom
	var filterMinMax = $$("input[class^=mxdFilter]");
	var workList = new Hash();
	for (var i = 0; i < filterMinMax.length; i++)
	{
		var field = filterMinMax[i];
		var fieldName = field.getProperty("class").replace("mxdFilter", "");

		var isMinMax = (fieldName.right(3) == "Min" || fieldName.right(3) == "Max");

		if (isMinMax)
		{
			fieldName = fieldName.trunc(3);

			if (workList.has(fieldName))
			{
				intervalIds.set(fieldName);
			}
			else
			{
				workList.set(fieldName);
			}

			field.onkeypress = function(event) { CheckNumericData(event) };
		}
	}

	// ajout d'un evenement sur d'eventuels liens, boutons pour valider la / les valeurs
	// d'un filtre donné (i.e. : utile pour les filtres en libre saisie)
	var validItems = $$("[class=mxdFilterValid]");
	for (var i = 0; i < validItems.length; i++)
	{
		var item = validItems[i];
			
		if (COOKIE_MODE)
		{
			item.addEvent("click", function(e)
		    {
				var elem = e.target.getParent("div[class=mxdFilter]").getElements("input[type=text]")[0];

				UpdateSearch(elem);
		    });
		}
		else
		{
			item.addEvent("click", function(e) { e.stop(); SetSearchParam(e.target); });
		}

		// permet d'affecter un nouvel evenement "return" sur tous
		// les elements de type input reliés au bouton de validation
		// => permet de valider son critere en pressant "return"
		var itemParents = item.getParents();
		for (var j = 0; j < itemParents.length; j++)
		{
			var inputList = itemParents[j].getElements('input');

			if (inputList.length > 0)
			{
				inputList.addEvent("keyup", function(e)
				{
					if (e.key == "enter")
					{
						e.stop();

						if (COOKIE_MODE)
						{	
							UpdateSearch(e.target);

							if (!isLocating) { document.location.reload(); }
						}
						else
						{
							if (this.id != "location-search")
							{
								SetSearchParam(e.target);
							}
							else
							{
								SetLocationParam(e.target);
							}
						}
					}
				});
				break;
			}
		}
	}

	if ($("location-search"))
	{
		// restriction à la saisie numérique pour le numéro de département
		$("location-search").onkeypress = function(e) { CheckNumericData(e) };

		var label = $$("label[for=location-france]");
		if (label)
		{
			// permet de coller le focus dans le champ de saisie de département
			// quand la checkbox "Département" est cochée
			label.addEvent("click", function(e)
			{
				var checked = $("location-france").checked;
				if (!checked)
				{
					e.stop();
					
					$("location-france").checked = !checked;
					$("location-search").focus();
				}
			});
		}
	}

	// ajout d'un evenement sur le lien permettant de changer de mode
	// de recherche (filtres sous forme de formulaire rapide ou avancé)
	if ($("filter-mode"))
	{
		$("filter-mode").addEvent("click", ToggleFilterMode).setAttribute("href", "javascript:void(0)");
	}

	// ajout d'un evenement au formulaire de recherche
	if ($("filter-form"))
	{
		$("filter-form").addEvent("submit", CheckFilterForm);

		// on met le focus sur le champ de recherche par mots-cles si il existe :)
		var defaultField = $("filter-form").getElement("input[name$=_keywords]");
		if (defaultField != null)
		{
			defaultField.focus();
		}
	}


	if (COOKIE_MODE)
	{
		// ajout d'un evenement sur le lien du type "clear all  filters"
		// => permet de supprimer tous les filtres de recherche
		if ($("clearSearchFilters"))
		{
			$("clearSearchFilters").addEvent("click", ClearSearchFilters);
			$("clearSearchFilters").setAttribute("href", RESULT_ROOT_URL);
		}
	}

	if ($("mxdCreateAlert"))
	{
		$("mxdCreateAlert").addEvent("click", function() { CreateAlert(); });
	}
}

function SetSearchParam(aObj)
{
	var obj = ($(aObj) == null) ? this : aObj;
	var parent = obj.getParent('[class=mxdFilter]');

	var inputList = parent.getElements('input');

	// cas special des champs de type intervalle, min + max
	if (inputList.length == 2)
	{
		SetIntervalParam(inputList[0], inputList[1]);
	}
	// champ de saisie classique
	else
	{
		var paramName = inputList[0].name.replace('filter', '').toLowerCase();
		var paramValue = inputList[0].value;

		var paramQS = paramName + "=" + paramValue;

		if (parent.id == "filterLocation")
		{
			SetLocationParam();
		}
		else
		{
			var docLocation = document.location.href;

			docLocation = docLocation.replace(/\/page-(\d+)/gi, "");
			docLocation = docLocation.replace(/\/sort-(\w+)-(\w+)/gi, "");
			docLocation = docLocation.replace(/\/sort-(\w+)/gi, "");

			//if (COOKIE_MODE && paramName.right(8) == "keywords" && $defined(filterList["keywords"]))
			if (paramName.right(8) == "keywords")
			{
				//paramValue = filterList["keywords"] + " " + paramValue;
				paramQS = paramName + "=" + paramValue;

				var regex = new RegExp("[&;\?]?" + paramName + "[^&;]+", "gi");
				docLocation = docLocation.replace(regex, "");

				docLocation = docLocation.replace("/&", "/?");

				if (docLocation.right(1) == "?")
				{
					docLocation = docLocation.trunc(1);
				}
			}

			if (docLocation.right(1) == "?")
			{
				docLocation = docLocation.replace("?", "/?");
			}

			if (docLocation.right(1) != "/")
			{
				docLocation += "/";
			}

			docLocation += (docLocation.indexOf("?") == -1 ? "?" : "&") + paramQS;

			docLocation = docLocation.replace("/&", "&");

			/*if (docLocation.indexOf(paramName + "=") != -1)
			{
				var regex = new RegExp(paramName + "=(.*(?:&))", "gi");			
				docLocation = docLocation.replace(regex, paramQS);
			}
			else
			{
				docLocation += (docLocation.indexOf("?") == -1 ? "?" : "&") + paramQS;
			}*/
			
			document.location.href = docLocation;
		}
	}
}

function SetIntervalParam(inputMin, inputMax)
{
	if (inputMin && inputMax)
	{
		var min = inputMin.value;
		var max = inputMax.value;

		if (min == "") { min = 0; }
		if (max == "") { max = 10000000; }

		if (min > 0 || max < 10000000)
		{
			var paramName = inputMin.name.replace('filter', '').replace('Min', '').toLowerCase();
			var paramValue = min + "-" + max;
			var paramQS = paramName + "=" + paramValue;

			var docLocation = document.location.href;

			// suppression d'un eventuel parametre deja present dans la querystring
			if (docLocation.indexOf(paramName + "=") != -1)
			{
				var regex = new RegExp(paramName + "=(\\d+)-(\\d+)", "gi");			
				docLocation = docLocation.replace(regex, paramQS);
			}
			else
			{
				docLocation += (docLocation.indexOf("?") == -1 ? "?" : "&") + paramQS;
			}

			docLocation = docLocation.replace(/\/page-(\d+)/gi, "");
			docLocation = docLocation.replace(/\/sort-(\w+)-(\w+)/gi, "");
			docLocation = docLocation.replace(/\/sort-(\w+)/gi, "");

			document.location.href = docLocation;
		}
	}
}

function GetLocationData()
{
	var value = $("location-search").value;
	var around = ($("location-around").checked) ? 1 : 0;
	var france = ($("location-france").checked) ? 1 : 0;
	var other = ($("location-other").checked) ? 1 : 0;

	if ((france == 1 && value != "" && value.length == 2) || other == 1)
	{
		// on ne prend en compte que les pays étrangers
		if (france == 0)
		{
			value = 0;
			around = 0;
		}

		return "L-" + value + "|" + around + "|" + other;
	}
	return "";
}
function SetLocationParam()
{
	var data = GetLocationData();

	if (data != "")
	{
		// construction du parametre et de la valeur correspondante
		var paramQS = "location=" + data;

		// creation de l'url de recherche
		var docLocation = document.location.href;

		// suppression d'un eventuel parametre deja present dans la querystring
		if (docLocation.indexOf("location=") != -1)
		{
			var regex = new RegExp("location=L-(\d+)-(\d)", "g");			
			docLocation = docLocation.replace(regex, paramQS);
		}
		else
		{
			docLocation += (docLocation.indexOf("?") == -1 ? "?" : "&") + paramQS;
		}

		docLocation = docLocation.replace(/\/page-(\d+)/gi, "");
		docLocation = docLocation.replace(/\/sort-(\w+)-(\w+)/gi, "");
		docLocation = docLocation.replace(/\/sort-(\w+)/gi, "");

		document.location.href = docLocation;
	}
}

function ProcessFilterFormItems()
{
	/////////////////////////////////////////
	// listes deroulantes
	/////////////////////////////////////////
	$$(".mxdFilter.select").each(function(el)
	{
		var name = el.id.replace("filter", "");
		var id = name.toLowerCase();
		var isNumeric = el.hasClass("numeric");

		var select = new Element("select", { "id": id, "name": id }).inject(el, "before");
		if (isNumeric) { select.addClass("numeric"); }

		var isMinMax = (id.right(3) == "min" || id.right(3) == "max");

		var cookieId = (isMinMax) ? id.trunc(3) : id;

		// prise en compte des champs de type intervalle (min & max)
		if (isMinMax) { intervalIds.set(cookieId); }

		// evenement onchange par defaut
		// => permet de modifier l'apparence de l'element selectionné
		select.addEvent("change", FilterSelectChange);

		// ajout d'un evenement pour la gestion des intervales min / max
		// permet de masquer / afficher les valeurs min <=> max
		if (isMinMax)
		{
			select.addEvent("change", MinMaxChange);
		}

		// si une fonction "onchange" est trouvee (du type OnChange...
		// => on affecte l'evenement a la liste deroulante
		var changeFunc = "OnChange" + name;
		if (IsSet(changeFunc)) { select.addEvent("change", eval(changeFunc)); }

		var defaultText = el.getElement("span").get("text");
		new Element("option", { "value": "" }).set("html", defaultText).inject(select);

		// recuperation de la valeur selectionnee (si elle existe) a partir de la querystring
		var selectedValue = filterList[id];
		if (!selectedValue) { selectedValue = GetQueryStringValue(id); }

		if (!selectedValue)
		{
			var isMin = id.indexOf("min") != -1;
			var newId = id.trunc(3);
			if (filterList[newId])
			{
				selectedValue = filterList[newId];
				selectedValue = selectedValue.split('$')[isMin ? 0 : 1];
			}
		}

		if (selectedValue == "")
		{
			var cookieValue = GetCookieFilterValue(cookieId);

			if (isMinMax)
			{
				var index = (id.right(3) == "min") ? 0 : 1;
				selectedValue = cookieValue.split("$")[index];
			}		
		}

		if (selectedValue != "")
		{
			selectedValue = unescape(selectedValue).replace(/\+/g, " ");
			selectedValue = selectedValue.toLowerCase();
		}

		var initFunc = "InitList" + name;
		if (IsSet(initFunc)) { eval(initFunc + "()"); }

		// creation de tous les elements de la liste deroulante
		var alreadySelected = false;
		el.getElements("li a").each(function(link)
		{
			// libelle de l'item
			var text = link.get("text");
			// valeur de l'item
			var value = link.getAttribute("rel");
			value = value.replace(/\+/g, " ");

			var parentClass = link.getParent().className;

			// cas special pour la categorie
			if (id == "libelle_categorie")
			{
				value = text.toLowerCase();
				catMapping[value] = link.getAttribute("rel");
			}

			// on insert l'element dans la liste
			//
			// => soit a partir d'une methode custom
			//    (cf creation de la liste des marques NewItemMarque dans filtre_auto.js)
			//
			// => soit a partir d'un insert de l'element classique
			var newItemFunc = "NewItem" + name;
			if (IsSet(newItemFunc))
			{
				eval(newItemFunc + '("' + value + '","' + text + '","' + parentClass + '")');
			}
			else
			{
				new Element("option", { "value": value }).set("html", text).inject(select);
			}

			var item = select.options[select.length-1];
			
			// gestion d'une eventuelle valeur selectionnee
			if (!alreadySelected && $defined(selectedValue) && value.toLowerCase() == selectedValue.toLowerCase())
			{
				alreadySelected = true;

				item.setAttribute("selected", "true");

				select.addClass("selected");
			}
		});

		// pour chrome qui pue de la fesse
		new Element("option", { "value": "" }).set("html", "dummy").inject(select).destroy();

		// on sauve les objets select de type MinMax (cf MinMaxChange)
		if (isMinMax)
		{
			selectCache[id] = new Array();
			for (var i = 1; i < select.options.length; i++)
			{
				var option = select.options[i];
				selectCache[id][i] = { "value": option.value, "text": option.text };
			}
		}

		// on detruit la liste source
		el.destroy();
	});

	// initialisation des select de type "min" "max" avec la prise en compte des
	// valeurs courantes dans le masquage des valeurs dans chacune des listes
	// i.e. : pour le prix si max = 12000 le minimum ne peut pas aller au dela
	//        de cette valeur
	intervalIds.each(function(dummy, fieldName)
	{
		var fieldMin = $(fieldName + "min");
		var fieldMax = $(fieldName + "max");

		if (fieldMin && fieldMax)
		{
			if (fieldMin.value != "") fieldMin.fireEvent("change");
			if (fieldMax.value != "") fieldMax.fireEvent("change");
		}
	});

	/////////////////////////////////////////
	// cases a cocher
	/////////////////////////////////////////
	$$(".mxdFilter.check").each(function(el)
	{
		var name = el.id.replace("filter", "");
		var id = name.toLowerCase();
		var list = new Element("ul", { "class": "checkList" }).inject(el, "before");

		// champ caché pour stocker la valeur de la liste de checkboxes
		var checkField = new Element("input", { "type": "hidden", "id": id, "name": id }).inject(el, "before");

		// recuperation de la valeur selectionnee (si elle existe) a partir de la querystring
		var selectedValue = GetQueryStringValue(id);
		if (selectedValue != "")
		{
			selectedValue = "," + unescape(selectedValue) + ",";
			checkField.value = selectedValue;
		}
		// tentative de recuperation a partir du cookie de recherche
		else
		{
			selectedValue = GetCookieFilterValue(id);
		}

		var index = 0;
		el.getElements("li a").each(function(link)
		{
			// libelle de l'item
			var text = link.get("text");
			// valeur de l'item
			var value = link.getAttribute("rel");

			var checkId = id + "_" + index;

			var item = new Element("li").inject(list);
			var check = new Element("input", { "type": "checkbox", "id": checkId, "value": value }).inject(item);
			new Element("label", { "for": checkId }).set("text", text).inject(item);

			if (selectedValue.indexOf("," + value + ",") != -1 || value == selectedValue)
			{
				check.setAttribute("checked", true);
			}

			check.addEvent("click", FilterCheckboxClick);

			index++;
		});

		// on detruit la liste source
		el.destroy();
	});
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function CheckFilterForm()
{
	var filterForm = $("filter-form");

	if (COOKIE_MODE)
	{
		filterForm.getElements("select").each(function(el)
		{
			var isMinMax = (el.id.right(3) == "min" || el.id.right(3) == "max");

			if (SEO_PARAMS.indexOf(el.id) == -1 && !isMinMax) { cookieData.set(el.id, el.value); }
		});
		filterForm.getElements("input[type=hidden]").each(function(el)
		{
			if (SEO_PARAMS.indexOf(el.id) == -1) { cookieData.set(el.id, el.value); }
		});

		// suppression d'une eventuelle clé (= nom du champ de type intervalle)
		// presente dans intervalIds + supppression de la clé de cookieData
		intervalIds.each(function(dummy, fieldName)
		{
			var fieldMin = $(fieldName + "min");
			var fieldMax = $(fieldName + "max");

			if (fieldMin && fieldMax)
			{
				if (fieldMin.value == "" && fieldMax.value == "")
				{
					cookieData.erase(fieldName);
					intervalIds.erase(fieldName);
				}
			}
		});

		UpdateSearch();
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function FilterSelectChange()
{
	if (this.value != "")
	{
		this.addClass("selected");
	}
	else
	{
		this.removeClass("selected");
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function FilterCheckboxClick()
{
	// id du champ (i.e. : generique2_0 => generique2)
	var fieldId = this.id.split("_")[0];

	// recuperation de la reference au container "checkList"
	var checkList = this.getParent("ul");

	// recuperation de la liste des valeurs cochées
	var valueList = "";
	checkList.getElements("input[type=checkbox").each(function(el)
	{
		if (el.checked) { valueList += el.value + ","; }
	});
	if (valueList != "") { valueList = valueList.trunc(1); }

	// on renseigne le champ caché utilisé dans le stockage des valeurs
	// de la checklist
	$(fieldId).value = valueList;
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function ToggleFilterMode()
{
	var mode = GetCookieFilterValue("search_mode");
	if (mode == "") { mode = "quick"; }

	var newMode = "";

	if (mode == "quick") { newMode = "advanced"; }
	if (mode == "advanced") { newMode = "quick"; }

	cookieData.set("search_mode", newMode)

	if ($("filter-form"))
	{
		CheckFilterForm();
		$("filter-form").submit();
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function SetSearchDisplay(aDisplay)
{
	cookieData.set("search_display", aDisplay)

	UpdateSearch();

	document.location.href = RESULT_URL;
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function MinMaxChange()
{
	var fieldName = this.id.trunc(3);
	var isMin = (this.id.right(3) == "min");
	var targetId = (isMin) ? fieldName + "max" : fieldName + "min";

	if ($(targetId))
	{
		var min = (isMin) ? this.value : $(targetId).value;
		var max = (isMin) ? $(targetId).value : this.value;

		if (min == "") { min = 0; }
		if (max == "") { max = 0; }

		min = parseInt(min) + (1 && isMin);
		max = parseInt(max) - (1 && !isMin);

		var selectedValue = $(targetId).value;

		// modification de la liste d'options presente dans le select par rapport au min ou au max
		// du select en cours
		$(targetId).options.length = 1;
		for (var i = 1; i < selectCache[targetId].length; i++ )
		{
			var value = selectCache[targetId][i].value;
			var text = selectCache[targetId][i].text;

			var condition = (parseInt(value) < min);
			if (!isMin) { condition = (parseInt(value) > max && max > 0); }

			if (!condition)
			{
				var item = new Element("option", { "value": value }).set("html", text).inject($(targetId));

				if (value == selectedValue)
				{
					item.setAttribute("selected", "true");
				}
			}
		}
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function GetCookieFilterValue(aFilterField)
{
	var cookieValue = "";
	if (Cookie.read("MIXADSEARCH") != null)
	{
		if (Cookie.read("MIXADSEARCH").hexadecode().indexOf(aFilterField + "#") != -1)
		{
			for (var c = 0; c < cookieValues.length; c++)
			{
				var valueData = cookieValues[c].split("#");
				if (valueData[0] == aFilterField)
				{
					cookieValue = valueData[1];
					break;
				}
			}
		}
	}
	return cookieValue;
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function UpdateSearch(element)
{
	if (!isClearing)
	{
		var cookieValue = [];

		// gestion des champs de saisie libre de type "intervale" (prix, longueur, ...)
		intervalIds.each(function(dummy, fieldName)
		{
			var fieldMin = $$("input[class=mxdFilter" + fieldName + "Min]")[0];
			var fieldMax = $$("input[class=mxdFilter" + fieldName + "Max]")[0];

			if (!fieldMin && !fieldMax)
			{
				fieldMin = $(fieldName + "min");
				fieldMax = $(fieldName + "max");
			}

			if (fieldMin != null || fieldMax != null)
			{
				var minValue = (fieldMin != null) ? fieldMin.value : 0;
				var maxValue = (fieldMax != null) ? fieldMax.value : 10000000;

				if (minValue == "") { minValue = 0; }
				if (maxValue == "") { maxValue = 10000000; }

				if (minValue > 0 || maxValue < 10000000)
				{				
					var fieldValue = minValue + "$" + maxValue;

					cookieData.set(fieldName.toLowerCase(), fieldValue)
				}
			}
		});

		if ($("location-search") != null && !$("filterLocation").hasClass("mxdHidden"))
		{
			var locData = GetLocationData();

			if (locData != "" && locData != "L-|0|1")
			{
				cookieValue.push("location" + "#" + locData);
			}
		}

		if (element != null)
		{
			var fieldName = element.name.replace("filter", "").toLowerCase();
			fieldName = fieldName.replace(/min$/g, "").replace(/max$/g, "");

			var notInCookie = cookieData.toQueryString().indexOf(fieldName) == -1;

			if (notInCookie && fieldName != "locationsearch")
			{
				if (fieldName.indexOf("_") != -1)
				{
					fieldName = fieldName.split("_")[1];
				}

				if (cookieData.indexOf(fieldName) == null)
				{
					var fieldValue = element.value;
					cookieData.set(fieldName, fieldValue);
				}
			}
		}

		cookieData.each(function(value, key)
		{
			if (value != "" && value != "-1")
			{
				key = key.replace(" mxdhidden", "");
				key = key.replace(" multiple", "");
				result = key + "#" + value;

				// les parametres contenus dans l'url ne doivent pas etre stockés
				// dans le cookie de recherche
				if (SEO_PARAMS.indexOf(key) == -1)
				{
					cookieValue.push(result);
				};
			}
		});

		if (cookieValue.length > 0)
		{
			var exp = new Date();
			exp.setDate(exp.getDate() + 7);

			document.cookie = "MIXADSEARCH=" + cookieValue.join("@").hexaencode() + "; path=/; expires=" + exp.toGMTString();
		}
		else
		{
			document.cookie = "MIXADSEARCH=; path=/; expires=Fri, 02-Jan-1970 00:00:00 GMT";
		}

		// suppression du cookie permettant de sauver le contexte de la liste de resultats
		// (i.e. : la page et le tri en cours)
		document.cookie = "RESULT_CONTEXT=; path=/; expires=Fri, 02-Jan-1970 00:00:00 GMT";
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function SetSearchFilter(e, aField)
{
	var value = this.getAttribute("rel");

	// il s'agit d'un champ lié a une liste de reference
	// cf equipement auto
	if (this.getParent("ul").getProperty("class").indexOf("multiple") != -1)
	{
		value = (cookieData.get(aField)) ? cookieData.get(aField) : "";
		value += ((value != "") ? "," : "") + this.getProperty("rel");
	}

	cookieData.set(aField, value);

	UpdateSearch();
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function RemoveSearchFilter(e)
{
	var filterField = e.target.getAttribute("rel").toLowerCase();

	if (filterField.indexOf("[") == -1)
	{
		cookieData.erase(filterField);
	}
	else
	{
		var refValue = filterField.toUpperCase().split("[")[1];
		refValue = refValue.replace("]", "");

		filterField = filterField.substring(0, filterField.indexOf("["));

		var cookieValue = cookieData.get(filterField);

		cookieValue = cookieValue.replace(refValue, "");
		cookieValue = cookieValue.replace(/^,*/, '');

		if (cookieValue != "")
		{
			cookieData.set(filterField, cookieValue);
		}
		else
		{
			cookieData.erase(filterField);
		}
	}

	// d'autres filtres doivent ils etre supprimés ?
	// cf cas de la marque et du modele de voiture associé
	if ($defined(window.RemoveOtherSearchFilter))
	{
		RemoveOtherSearchFilter(filterField);
	}

	// suppression d'une eventuelle clé (= nom du champ de type intervalle)
	// presente dans intervalIds
	intervalIds.each(function(dummy, fieldName) 
	{
		if (fieldName == filterField)
		{
			intervalIds.erase(filterField);
		}
	});

	UpdateSearch();
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function ClearSearchFilters(reloadPage)
{
	isClearing = true;

	var mode = GetCookieFilterValue("search_mode");
	var display = GetCookieFilterValue("search_display");

	document.cookie = "MIXADSEARCH=; path=/; expires=Fri, 02-Jan-1970 00:00:00 GMT";
	document.cookie = "SEARCHURL=; path=/; expires=Fri, 02-Jan-1970 00:00:00 GMT";

	if (reloadPage == true)
	{
		var cookieValue = "";
		if (mode != "" || display != "")
		{
			if (mode != "") { cookieValue = "search_mode#" + mode; }
			if (display != "")
			{
				if (mode != "") { cookieValue += "@"; }
				cookieValue += "search_display#" + display;
			}

			var exp = new Date();
			exp.setDate(exp.getDate() + 7);

			document.cookie = "MIXADSEARCH=" + cookieValue.hexaencode() + "; path=/; expires=" + exp.toGMTString();
		}

		window.location.href = RESULT_ROOT_URL;
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
 function SetRegion(aRegion)
 {
	cookieData.set("region", aRegion);
	
	UpdateSearch();

	window.location.href = RESULT_URL;
 }
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function completerQuery(data)
{
	var country = "france";
	var city = $("searchCity").value;

	data.setParamsManually({ "c": country.hexaencode(), "n": city.hexaencode() });
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function AdClick(aId)
{
	if (aId != null)
	{
		var adLink = $("ad-" + aId);
		var docLocation = unscramble(adLink.href);

		document.location.href = docLocation;
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function TriggerClick(aId)
{
	if (aId != null)
	{
		var aLink = $(aId);
		if (aLink)
		{
			var docLocation = unscramble(aLink.href);
			document.location.href = docLocation;
		}
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function CreateAlert()
{
	var alertEmail = $("alert_email").value;
	var alertFilters = $("alert_filters").value;
	var alertCategories = $("alert_categories").value;

	var goodEmail = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,3}|\d+)$/.test(alertEmail);

	var sendForm = true;
	if (alertEmail == "" || !goodEmail)
	{
		sendForm = false;
		alert("Merci de vérifier l'adresse email saisie.");
		$("alert_email").focus();
	}

	if (sendForm)
	{
		alertEmail = alertEmail.hexaencode();

		AjaxRequest("CreateAlert", { "e": alertEmail, "f": alertFilters, "c": alertCategories });
	}
}
/*******************************************************************************************************************************************************************************
 * 
 *******************************************************************************************************************************************************************************
 *
 *
 *******************************************************************************************************************************************************************************/
function CreateAlertCallBack(data)
{
	simpleAlert = new SimpleAlert(
	{
		btnCaption: "OK",
		"onValid": function() {	simpleAlert.hide();} 
	});

	var message = TXT_ALERT_CREATED;
	
	if (data == "ko") { message = TXT_ALERT_ISSUE; }
	if (data == "exists") { message = TXT_ALERT_EXISTS; }

	simpleAlert.show(TTL_ALERT_CREATION, message);
}
