var urlSiteBase = MIXAD.common.getCookie("MixadUrlSiteBase");
var serverAddress =  urlSiteBase + "lien_http=";

// on se trouve dans une iframe
if (!urlSiteBase)
{
	serverAddress = MIXAD.common.getServerAddress();
}

// nb minimum d'annonces pour l'affichage direct de la liste des resultats
var AD_THRESHOLD_NUMBER = 20;

var mapAreaGet = null;
var regionListGet = null;
var cityListGet = null;
var areaInfoGet = null;


var formRecherche = null;
var selectCountry = null;
var selectType = null;
var selectMaxCapacity = null;
var searchContent = null;
var searchLoading = null;
var toolTip = null;

var loadingCount = 0;


var countryList = new Array();

var countryId = "fr";
var areaId = "";
var subAreaId = "";

var typeId = "";
var maxCapacity = "";

var currentCountry = "France";
var currentArea = "";
var currentSubArea = "";

var searchPathLevel = 0;

var levelCacheData = new Array(2);

var areaInfo = null;

// code des pays pour lesquels il existe une cartographie (separés par une virgule)
var validMapCountries = "fr";


var searchLoadingTimer = null;

var imgBaseUrl = "http://perso.mixad.com/img/";
var imgRootPath = imgBaseUrl + "country/" + countryId + "/";
var imgRegionPath = imgBaseUrl + "country/" + countryId + "/region/";

var areaImg = new Array();


/****************************************************************************************************************
* Initialise l'affichage de la page de recherche
*****************************************************************************************************************/
function InitPage()
{
	// objet pour recuperer les coordonnees des zones cliquables d'une carte
	mapAreaGet = new MIXAD.tool.SimpleGet(serverAddress + "/pa/ajax/ls/get_mapareas.asp", GetMapAreaCallBack);
	// objet pour recuperer la liste des regions pour un pays donné
	regionListGet = new MIXAD.tool.SimpleSearch(serverAddress + "/pa/ajax/ls/get_regionlist.asp", "region", GetRegionListCallBack);
	// objet pour recuperer la liste des offres pour un departement ou une region donné
	cityListGet = new MIXAD.tool.SimpleSearch(serverAddress + "/pa/ajax/ls/get_citylist.asp", "city", GetCityListCallBack);
	// objet pour recuperer les informations relatives aux zones cliquables d'une carte (nom de la zone, nb d'annonces pour cette zone)
	areaInfoGet = new MIXAD.tool.SimpleSearch(serverAddress + "/pa/ajax/ls/get_areainfo.asp", "area", GetAreaInfoCallBack);

	// affectation des variables globales
	formRecherche = document.FORMULAIRE_RECHERCHE;
	selectCountry = formRecherche.NACPAYS_ANNONCE;
	selectType = formRecherche.NAIKILOMETRAGE;
	selectMaxCapacity = formRecherche.NAINUM_CATEGORIE_MINI;
	searchContent = document.getElementById("search-content");
	searchLoading = document.getElementById("search-loading");
	toolTip = document.getElementById("toolTip");

	// on supprime le premier element de la liste des pays (i.e "choisissez")
	selectCountry.options[0] = null;


	// gestion du onchange sur la liste de selection "type de bien"
	MIXAD.common.addEvent(selectType, "change", SelectTypeChange);
	// gestion du onchange sur la liste de selection "maxCapacity"
	MIXAD.common.addEvent(selectMaxCapacity, "change", SelectMaxCapacityChange);


	// assignation a l'evenement global mousemove de la fonction MoveToolTip qui permet
	// l'affichage d'un tooltip sur la carte
	document.onmousemove = function (evt) { MoveToolTip(evt) };

	// un petit timer pour gerer l'affichage d'une boite d'information "chargement en cours..."
	searchLoadingTimer = setInterval("DisplaySearchLoading()", 10);

	// nb de process de chargement en cours de traitement
	loadingCount = 0;


	// s'agit-il d'un retour de la liste de resultats ?
	var action = MIXAD.common.getQueryStringData("ACTION");

	if (action == "MODIFIER")
	{
		currentCountry = unescape(MIXAD.common.getQueryStringData("NACPAYS_ANNONCE")).replace(/\+/g, " ");
		countryId = countryList[currentCountry];
		currentArea = unescape(MIXAD.common.getQueryStringData("NACREGION")).replace(/\+/g, " ");

		if (currentArea == "") { currentArea = "Autre région"; }
		currentSubArea = unescape(MIXAD.common.getQueryStringData("NACDEPARTEMENT")).replace(/\+/g, " ");
		areaId = MIXAD.common.getQueryStringData("AREAID");
		subAreaId = MIXAD.common.getQueryStringData("SUBAREAID");
		typeId = MIXAD.common.getQueryStringData("NAIKILOMETRAGE");
		maxCapacity = MIXAD.common.getQueryStringData("NAINUM_CATEGORIE_MINI");

		if (typeId == "")	{ typeId = "-1"; }
		if (maxCapacity == "") { maxCapacity = "-1"; }

		// on renseigne les valeurs des listes deroulantes
		selectCountry.value = currentCountry;
		selectType.value = typeId;
		selectMaxCapacity.value = maxCapacity;

		if (typeId == "-1") { typeId = ""; }
		if (maxCapacity == "-1") { maxCapacity = ""; }

		var inseeCode = MIXAD.common.getQueryStringData("NACMODE_PAIEMENT");

		if (inseeCode == "")
		{
			if (subAreaId == "")
			{
				ChangeCountry(currentCountry);
			}
			else
			{
				ZoomArea(areaId);
			}
		}
		else
		{
			searchPathLevel = (currentSubArea != "") ? 2 : 1;

			if (subAreaId != "")
			{
				GetCityList(subAreaId, currentArea, areaId);
			}
			else
			{
				GetCityList(null, currentArea, areaId);
			}
		}
	}
	else
	{
		// on renseigne les valeurs par defaut des listes deroulantes
		selectCountry.value = "France";
		selectType.value = "-1";
		selectMaxCapacity.value = "-1";

		ChangeCountry("France");
	}
}
/****************************************************************************************************************
* Gere la fermeture de la page de recherche
*****************************************************************************************************************/
function ClosePage()
{
	clearInterval(searchLoadingTimer);
}
/****************************************************************************************************************
* Passe en surbrillance une zone donnee de la carte en cours
*****************************************************************************************************************/
function HighLightArea()
{
	if (this.id)
	{
		var currentAreaData = this.id.split(",");
		var currentAreaId = currentAreaData[0];
		var currentAreaCaption = currentAreaData[2];

		if (searchPathLevel == 0) 
		{
			currentArea = currentAreaCaption;
		}
		else
		{
			currentSubArea = currentAreaCaption;
		}

		// on met en evidence la region en cours
		var searchMap = document.getElementById("search-map");
		searchMap.style.backgroundPosition = "0px -" + ((currentAreaId*407)-4) + "px";

		ShowToolTip(currentAreaData);
	}
}
/****************************************************************************************************************
* Cache la zone actuellement en surbrillance
*****************************************************************************************************************/
function HideArea()
{
	var searchMap = document.getElementById("search-map");

	// on retablit la carte "vierge"
	if (searchMap != null)
	{
		searchMap.style.backgroundPosition = "0px 0px";
	}

	HideToolTip();
}
/****************************************************************************************************************
* "Zoom" sur la zone cliquee de la carte en cours (passage de la vue globale a la vue departementale)
* @param newAreaId {Int} id de la zone a zoomer
*****************************************************************************************************************/
function ZoomArea()
{
	if (this.id || (!this.id && areaId != ""))
	{
		if (this.id)
		{
			var currentAreaData = this.id.split(",");

			areaId = currentAreaData[1];

			if (!MIXAD.common.isSet(areaId))
			{
				areaId = currentAreaData[0];
			}
		}
		searchPathLevel = 1;

		searchContent.style.overflow = "hidden";

		DisplaySearchPath();

		HideArea();
		GetMapArea();

		// fond de carte
		searchContent.style.backgroundImage = "url(" + imgRootPath + areaId + ".gif)";
	}
}
/****************************************************************************************************************
* Lance la recuperation des coordonnees des zones cliquables pour la carte en cours
*****************************************************************************************************************/
function GetMapArea()
{
	mapAreaGet.setSearchParam("countryId", countryId);
	mapAreaGet.setSearchParam("areaId", areaId);
	
	loadingCount++;
	mapAreaGet.getData();
}
/****************************************************************************************************************
* Procedure de callback appelee a la reception des coordonnees des zones cliquables
*****************************************************************************************************************/
function GetMapAreaCallBack()
{
	loadingCount--;

	var responseText = mapAreaGet.getResponseText();

	// suppression des retours a la ligne
	responseText = responseText.replace(/[\r\n]+/g, "");

	// on recupere ce qui nous interesse
	var myRe = new RegExp("<div id=\"search-map\">(.*)</map>");
	var myArray = myRe.exec(responseText);

	if (myArray != null)
	{
		responseText = myArray[0];
	}


	if (responseText.indexOf('id="search-map"') == -1)
	{
		responseText = '<div id="search-map"></div>' + responseText;

	}

	searchContent.innerHTML = responseText;

	// creation de l'image liee a l'image map utilisé dans l'affichage des regions et departements survolés
	var searchMap = document.getElementById("search-map");
	var searchMapImg = MIXAD.common.createSimpleElement("img", "search-map-img", "", searchMap);
	searchMapImg.src = imgBaseUrl + "blank.gif";
	searchMapImg.useMap = "#areas";

	UpdateAreaInfoData();
	DisplaySearchPath();
}
/****************************************************************************************************************
* Lance la recuperation, en fonction des criteres de recherche, des informations (nom + nb d'annonces)
* attachees a chacune des zones cliquables de la carte en cours
*****************************************************************************************************************/
function UpdateAreaInfoData()
{
	// indispensable pour les sites affiliés car IIS se vautre comme une merde en renvoyant des tags html chelou
	areaInfoGet.setMimeType("text/plain");

	areaInfoGet.setSearchParam("countryId", countryId);
	areaInfoGet.setSearchParam("areaId", areaId);

	areaInfoGet.setSearchParam("typeId", typeId);
	areaInfoGet.setSearchParam("maxCapacity", maxCapacity);

	loadingCount++;
	areaInfoGet.launchSearch();
}
/****************************************************************************************************************
* Procedure de callback appelee a la reception des informations relatives aux zones cliquables
* Mise a jour du tableau areaInfo a partir des nouvelles donnees reçues
*****************************************************************************************************************/
function GetAreaInfoCallBack()
{
	loadingCount--;

	var resultData = areaInfoGet.getResultData();

	areaInfo = new Array();

	if (resultData.length > 0)
	{
		areaInfo.length = resultData.length;

		for (i = 0; i < resultData.length; i++)
		{
			areaInfo[resultData[i]["code"].toLowerCase()] = resultData[i]["count"];
		}
	}
	else
	{
		//
	}

	// definition du lien de la zone cliquable ainsi que de ses evenement de souris (mousemove & mouseout)
	var searchMapAreas = document.getElementById("search-map-areas");
	var nodeIndex = 0;
	for (i = 0; i < searchMapAreas.childNodes.length; i++)
	{
		var aNode = searchMapAreas.childNodes[i];

		if (aNode.id)
		{
			nodeIndex++;

			var nodeData = aNode.id.split(",");
			var adCount = areaInfo[nodeData[1].toLowerCase()];

		
			// ajout de l'evenement mousemove sur la zone en cours (permet de gerer le highlight de la zone ainsi que l'affichage du tooltip)
			MIXAD.common.addEvent(aNode, "mousemove", HighLightArea);

			// ajout de l'evenement mouseout sur la zone en cours (permet de gerer le masquage du highlight et celui du tooltip)
			MIXAD.common.addEvent(aNode, "mouseout", HideArea);


			// permet de modifier a la volee l'appel a la bonne methode sur le clic d'une zone donnee (se base sur le nombre d'annonces)
			if (MIXAD.common.isSet(adCount))
			{
				// => si adCount <= AD_THRESHOLD_NUMBER alors on va directement sur la liste de resultats (appel a ShowResultPage)
				if (adCount <= AD_THRESHOLD_NUMBER)
				{
					//aNode.href = "javascript:ShowResultPage('" + nodeData[1] + "')";

					//alert(aNode.id);

					/*
					var currentAreaData = this.id.split(",");
					var currentAreaId = currentAreaData[0];
					var currentAreaCaption = currentAreaData[2];
					*/

					//aNode.id = nodeData[1];
					aNode.id += ",1";
					aNode.href = "#";
					aNode.target = "_self";

					MIXAD.common.addEvent(aNode, "click", ShowResultPage);
				}
				// => sinon on permet le zoom sur la zone cliquee (appel a ZoomArea) ou l'affichage de la liste des villes (appel a GetCityList)
				else
				{
					//var functionName = (areaId == "") ? "ZoomArea" : "GetCityList";
					
					//aNode.href = "javascript:" + functionName + "('" + nodeData[1] + "')";
					aNode.href = "#";
					aNode.target = "_self";

					//alert(nodeData[1]);

					if (areaId == "")
					{
						MIXAD.common.addEvent(aNode, "click", ZoomArea);
					}
					else
					{
						MIXAD.common.addEvent(aNode, "click", GetCityList);
					}
					
				}
			}
			// aucun resultats
			else
			{
				aNode.href = "javascript:ShowNoResult()";
			}
		}
	}

	// affectation de la bonne image "areas.gif" ou "areas_nn.gif" (nn = areaId) pour gerer les zones survolees
	var searchMap = document.getElementById("search-map");
	var areasFileName = (areaId == "") ? "areas.gif" : "areas_" + areaId + ".gif";
	searchMap.style.backgroundImage = "url(" + imgRootPath + "region/" + areasFileName + ")";

	// mise en cache des informations pour le niveau en cours
	SaveLevelData(searchPathLevel);
}
/****************************************************************************************************************
* Affiche le drapeau du pays en cours au niveau du chemin de navigation
*****************************************************************************************************************/
function DisplayCountryFlag()
{
	var countryFlag = document.getElementById("country-flag");
	var className = countryId.toLowerCase();
	if (IsCountryFrench(countryId))
	{
		className = "fr";
	}
	countryFlag.className = "flag " + className;
}
/****************************************************************************************************************
* Affiche le chemin de navigation de la recherche en cours
*****************************************************************************************************************/
function DisplaySearchPath()
{
	var searchPath = document.getElementById("search-path");
	var searchPathLink = null;

	searchPath.innerHTML = "";

	if (searchPathLevel > 0)
	{
		searchPathLink = MIXAD.common.createSimpleElement("a", "", "", searchPath, currentCountry);
		//searchPathLink.href = "javascript:DisplayLevelData(0)";

		searchPathLink.href = "#";
		searchPathLink.target = "_self";
		
		//if (!MIXAD.common.isSet(levelCacheData[0]))
		//{
			//searchPathLink.href = "javascript:ChangeCountry('" + currentCountry + "')";
			MIXAD.common.addEvent(searchPathLink, "click", function() { ChangeCountry(currentCountry);});
		//}
		/*else
		{
			MIXAD.common.addEvent(searchPathLink, "click", function() { DisplayLevelData(0);});
		}*/
	}
	else
	{
		MIXAD.common.createSimpleElement("span", "", "", searchPath, currentCountry);
	}

	MIXAD.common.createSimpleElement("span", "", "", searchPath, " > ");

	// niveau 0 = regions (sous forme de carte ou de liste)
	if (searchPathLevel == 0)
	{
		MIXAD.common.createSimpleElement("span", "", "strong", searchPath, "Choix de la région");
	}
	// niveau 1 = departements (sous forme de carte ou de liste)
	if (searchPathLevel == 1)
	{
		MIXAD.common.createSimpleElement("span", "", "", searchPath, currentArea + " > ");
		MIXAD.common.createSimpleElement("span", "", "strong", searchPath, "Choix du département");
	}
	// niveau 2 = liste des communes
	if (searchPathLevel == 2)
	{
		if (currentSubArea != "")
		{
			searchPathLink = MIXAD.common.createSimpleElement("a", "", "", searchPath, currentArea);
			//searchPathLink.href = "javascript:DisplayLevelData(1)";

			searchPathLink.href = "#";
			searchPathLink.target = "_self";
			//MIXAD.common.addEvent(searchPathLink, "click", function() { DisplayLevelData(1);});

			if (!MIXAD.common.isSet(levelCacheData[1]))
			{
				//searchPathLink.href = "javascript:ZoomArea('" + areaId + "')";
				searchPathLink.id = areaId;
				MIXAD.common.addEvent(searchPathLink, "click", ZoomArea);
			}
			else
			{
				MIXAD.common.addEvent(searchPathLink, "click", function() { DisplayLevelData(1);});
			}
			MIXAD.common.createSimpleElement("span", "", "", searchPath, " > " + currentSubArea + " > ");
			MIXAD.common.createSimpleElement("span", "", "strong", searchPath, "Choix de la commune");
		}
		else
		{
			MIXAD.common.createSimpleElement("span", "", "", searchPath, currentArea + " > ");
			MIXAD.common.createSimpleElement("span", "", "strong", searchPath, "Choix de la commune");
		}
	}

	DisplayCountryFlag();
}
/****************************************************************************************************************
* Determine si un pays est "français", c'est a dire un dom, tom ou tout simplement la France
* @param countryId {Int} id du pays
*****************************************************************************************************************/
function IsCountryFrench(countryId)
{
	return (countryId == "fr" || countryId == "gp" || countryId == "mq" || countryId == "re" || countryId == "pm" || countryId == "pf");
}
/****************************************************************************************************************
* Sauve en memoire un niveau de recherche donnee
* @param aLevel {Int} index du niveau a sauver
*****************************************************************************************************************/
function SaveLevelData(aLevel)
{
	levelCacheData[aLevel] = new LevelCache(searchContent.innerHTML);
}
/****************************************************************************************************************
* Affiche un niveau de recherche mis en cache memoire
* @param aLevel {Int} index du niveau a afficher
*****************************************************************************************************************/
function DisplayLevelData(aLevel)
{
	searchContent.innerHTML = levelCacheData[aLevel].htmlContent;

	searchPathLevel = aLevel;
	currentArea = levelCacheData[aLevel].currentArea;
	currentSubArea = levelCacheData[aLevel].currentSubArea;

	if (aLevel == 0)
	{
		areaId = "";
	}

	if (searchContent.style.backgroundImage != "")
	{
		searchContent.style.backgroundImage = levelCacheData[aLevel].backgroundImage;
		searchContent.style.overflow = "hidden";
		HideArea();
	}
	if (levelCacheData[aLevel].areaInfo)
	{
		areaInfo = levelCacheData[aLevel].areaInfo;
	}

	if (ShowMap())
	{
		UpdateAreaInfoData();
	}

	DisplaySearchPath();
}
/****************************************************************************************************************
* Petite classe pour stocker les informations relatives a un niveau de cache donné
* @param htmlContent {String} le contenu html du niveau de cache a sauver
*****************************************************************************************************************/
function LevelCache(htmlContent)
{
	this.currentArea = currentArea;
	this.currentSubArea = currentSubArea;
	this.htmlContent = htmlContent;
	this.backgroundImage = searchContent.style.backgroundImage;
	this.areaInfo = areaInfo;
	this.typeId = typeId;
	this.maxCapacity = maxCapacity;
}
/****************************************************************************************************************
* Affiche le petit indicateur de chargement
*****************************************************************************************************************/
function DisplaySearchLoading()
{
	if (loadingCount > 0)
	{
		// calcul des coordonnees absolues de notre petit cadre de chargement
		var o = MIXAD.common.getAbsoluteCoordinates(document.getElementById("search-main-container"));
		var searchLoadingWidth = MIXAD.common.getCssValue("search-loading", "width");
		var searchLoadingHeight = MIXAD.common.getCssValue("search-loading", "height");
		var searchLoadingLeft = o.left + ((o.width - searchLoadingWidth) / 2);
		var searchLoadingTop = o.top + ((o.height - searchLoadingHeight) / 2);

		searchLoading.style.left = searchLoadingLeft + "px";
		searchLoading.style.top = searchLoadingTop + "px";

		searchLoading.style.visibility = "visible";
	}
	else
	{
		//loadingCount = 0;
		searchLoading.style.visibility = "hidden";
	}
}
/****************************************************************************************************************
* Deplace le tooltip en fonction des coordonnes de la souris
* @param evt {Object} objet de type evenement recuperé a partir de l'evenement mousemove de la zone de
*                     la carte en cours de survol
*****************************************************************************************************************/
function MoveToolTip(evt)
{
	var x = 0;
	var y = 0;
	if (document.all)
	{
		x = (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
		y = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
		x += window.event.clientX;
		y += window.event.clientY;
	}
	else
	{
		x = evt.pageX;
		y = evt.pageY;
	}
	toolTip.style.left = x + "px";
	toolTip.style.top = y + 25 + "px";

	if (toolTip.style.display == "block")
	{
		searchContent.style.cursor = "pointer";
	}
}
/****************************************************************************************************************
* Affiche le tooltip pour la zone de carte en cours de survol
* @param toolTipCaption {String} libellé a afficher dans le tooltip
*****************************************************************************************************************/
function ShowToolTip(areaData) 
{
	toolTip.innerHTML = "";

	var areaCode = areaData[1];
	var areaCaption = areaData[2];

	var adCount = areaInfo[areaCode];
	if (MIXAD.common.isSet(adCount))
	{
		adCount += (adCount > 1) ? " OFFRES" : " OFFRE";
	}
	else
	{
		adCount = "AUCUNE OFFRE";
	}
	MIXAD.common.createSimpleElement("span", "", "caption", toolTip, areaCaption.toUpperCase());
	MIXAD.common.createSimpleElement("span", "", "count", toolTip, adCount);

	toolTip.style.display = "block";
}
/****************************************************************************************************************
* Cache le tooltip) affiché
*****************************************************************************************************************/
function HideToolTip() 
{
	toolTip.innerHTML = "";
	toolTip.style.display = "none";

	searchContent.style.cursor = "default";
}
/****************************************************************************************************************
* Gere l'affichage d'un nouveau pays a partir de la liste deroulante
* @param countryName {String} nom du nouveau pays a afficher
*****************************************************************************************************************/
function ChangeCountry(countryName)
{
	searchContent.style.overflow = "hidden";

	searchPathLevel = 0;

	countryId = countryList[countryName];
	areaId = "";
	subAreaId = "";

	currentCountry = countryName;
	currentArea = "";
	currentSubArea = "";


	if (ShowMap())
	{
		searchContent.innerHTML = "";
		searchContent.style.backgroundImage = "url(" + imgBaseUrl + "country/" + countryId + "/map.gif)";
		GetMapArea();
	}
	else
	{
		searchContent.style.backgroundImage = "none";
		GetRegionList();
	}
}
/****************************************************************************************************************
* Lance la recuperation de la liste des regions pour un pays donné ainsi qu'en fonction des criteres
* selectionnés
*****************************************************************************************************************/
function GetRegionList()
{
	regionListGet.setMimeType("text/plain");
	regionListGet.setSearchParam("countryId", countryId);
	regionListGet.setSearchParam("typeId", typeId);
	regionListGet.setSearchParam("maxCapacity", maxCapacity);

	loadingCount++;
	regionListGet.launchSearch();		
}
/****************************************************************************************************************
* Procedure de callback appelee a la reception de la liste des regions
* Creation a la volee de l'affichage de la liste des regions
*****************************************************************************************************************/
function GetRegionListCallBack()
{
	loadingCount--;

	var resultData = regionListGet.getResultData();

	searchContent.innerHTML = "";
	var resultList = MIXAD.common.createSimpleElement("ul", "result-list", "", searchContent);
	if (resultData.length > 0)
	{		
		for (i = 0; i < resultData.length; i++)
		{
			var resultItem = MIXAD.common.createSimpleElement("li", "", "", resultList);
			var resultLinkItem = MIXAD.common.createSimpleElement("a", "", "", resultItem, resultData[i]["name"]);

			// ajout d'un petit evenement mouseover qui va permettre de renseigner la currentArea pour le lien survolé
			// (utile pour la fonction ShowResultPage)
			MIXAD.common.addEvent(resultLinkItem, "mouseover", RegionNameOver);


			var adCount = resultData[i]["count"];
			MIXAD.common.createSimpleElement("span", "", "", resultItem, " (" + adCount + ")");


			resultLinkItem.href = "#";
			resultLinkItem.target = "_self";
			
			var hrefValue = "";
			if (adCount <= AD_THRESHOLD_NUMBER)
			{
				//hrefValue = "javascript:ShowResultPage('" + resultData[i]["code"] + "')";

				resultLinkItem.id = resultData[i]["code"];

				MIXAD.common.addEvent(resultLinkItem, "click", ShowResultPage);
			}
			else
			{
				resultLinkItem.id = "," + resultData[i]["name"] + "," + resultData[i]["code"];

				MIXAD.common.addEvent(resultLinkItem, "click", GetCityList);


				/*hrefValue = "javascript:GetCityList(null,'" + resultData[i]["name"].replace(/\'/g, "\\'") + "'";
				if (!ShowMap())
				{
					hrefValue += ",'" + resultData[i]["code"] + "'"; 
				}
				hrefValue += ")";*/
			}

			//resultLinkItem.href = hrefValue;
		}
	}
	else
	{
		MIXAD.common.createSimpleElement("li", "", "", resultList, "Aucune offre n'a pu être trouvée.");
	}

	SaveLevelData(0);

	DisplaySearchPath();
}
/****************************************************************************************************************
* Stocke dans la variable currentArea le nom de la region en cours de survol
* (declenché a partir de l'evenement mouseover associé a chacune des regions de la liste)
*****************************************************************************************************************/
function RegionNameOver()
{
	currentArea = this.innerHTML;
}
/****************************************************************************************************************
* Lance la recuperation de la liste des villes
*****************************************************************************************************************/
function GetCityList(newSubAreaId, newAreaName, newAreaId)
{
	if (newAreaId) { areaId = newAreaId; }
	
	if (this.id)
	{
		var currentAreaData = this.id.split(",");

		newSubAreaId = "";
		if (currentAreaData[0] != "")
		{
			newSubAreaId = currentAreaData[1];
		}
		newAreaId = currentAreaData[2];

		if (currentAreaData[0] == "" && currentAreaData[2] != "")
		{
			areaId = newAreaId;
		}
	}

	if (newSubAreaId)
	{
		subAreaId = newSubAreaId;

		if (searchContent.innerHTML != "")
		{
			SaveLevelData(1);
		}
	}

	if (newAreaName) { currentArea = newAreaName; }

	HideArea();

	searchContent.style.backgroundImage = "none";

	cityListGet.setMimeType("text/plain");
	cityListGet.setSearchParam("countryId", countryId);
	cityListGet.setSearchParam("areaId", areaId);
	cityListGet.setSearchParam("subAreaId", subAreaId);
	cityListGet.setSearchParam("typeId", typeId);
	cityListGet.setSearchParam("maxCapacity", maxCapacity);


	loadingCount++;
	cityListGet.launchSearch();
}
/****************************************************************************************************************
* Procedure de callback appelee a la reception de la liste des villes
* Creation a la volee de l'affichage de la liste des villes
*****************************************************************************************************************/
function GetCityListCallBack()
{
	loadingCount--;

	var resultData = cityListGet.getResultData();

	searchPathLevel = 2;
	DisplaySearchPath();

	searchContent.innerHTML = "";
	var resultList = MIXAD.common.createSimpleElement("ul", "result-list", "", searchContent);
	if (resultData.length > 0)
	{		
		for (i = 0; i < resultData.length; i++)
		{
			var resultItem = MIXAD.common.createSimpleElement("li", "", "", resultList);
			var resultLinkItem = MIXAD.common.createSimpleElement("a", "", "", resultItem, resultData[i]["name"]);
			MIXAD.common.createSimpleElement("span", "", "", resultItem, "  (" + resultData[i]["count"] + ")");

			//resultLinkItem.href = 'javascript:ShowResultPage("' + resultData[i]["insee"] + '","' + resultData[i]["name"] + '")';
			resultLinkItem.id = resultData[i]["insee"] + "," + resultData[i]["name"];
			resultLinkItem.href = '#';
			resultLinkItem.target = '_self';

			MIXAD.common.addEvent(resultLinkItem, "click", ShowResultPage);
		}
	}
	else
	{
		MIXAD.common.createSimpleElement("li", "", "", resultList, "Aucune offre n'a pu être trouvée.");
	}

	// permet d'afficher une barre de scroll verticale dans les listes de villes trop longues
	searchContent.style.overflow = "auto";

	HideArea();
}
/****************************************************************************************************************
* Determine si, pour le pays en cours, il est necessaire d'afficher une carte
* Se base sur la variable validMapCountries qui stocke les id des pays (separés par une virgule) pour lesquels
* une carte est disponible
*****************************************************************************************************************/
function ShowMap()
{
	return (validMapCountries.indexOf(countryId) != -1)
}
/****************************************************************************************************************
* Gere le changement de selection dans la liste deroulante "situation"
*****************************************************************************************************************/
function SelectTypeChange()
{
	typeId = this.value;
	if (typeId == "-1") { typeId = ""; }
	
	if (ShowMap())
	{
		if (searchPathLevel < 2) { UpdateAreaInfoData(); }

		if (searchPathLevel == 2) {	GetCityList(); }
	}
	else
	{
		if (searchPathLevel == 0) { GetRegionList(); } else { GetCityList(); }
	}
}
/****************************************************************************************************************
* Gere le changement de selection dans la liste deroulante "nb de personne(s)"
*****************************************************************************************************************/
function SelectMaxCapacityChange()
{
	maxCapacity = this.value;
	if (maxCapacity == "-1") { maxCapacity = ""; }
	if (ShowMap())
	{
		if (searchPathLevel < 2) { UpdateAreaInfoData(); }

		if (searchPathLevel == 2) {	GetCityList(); }
	}
	else
	{
		if (searchPathLevel == 0) { GetRegionList(); } else { GetCityList(); }
	}
}
/****************************************************************************************************************
* Affiche une boite de dialogue indiquant qu'aucune offre n'est disponible pour la zone cliquee
*****************************************************************************************************************/
function ShowNoResult()
{
	var noResultText = "Désolé, mais aucune offre correspondant à vos critères\nn'est disponible pour ";
	if (currentSubArea == "")
	{
		noResultText += "la région " + currentArea + ".";
	}
	else
	{
		noResultText += "le département " + currentSubArea + ".";
	}
	alert(noResultText);
}
/****************************************************************************************************************
* Lance l'affichage de la liste de resultats
* @param mainParam {String}
* - si cityName est a null, il correspond a l'id de la region (areaId) ou du departement (subAreaId)
* - si cityName est renseigné, il correspond a la valeur du code insee associé a la ville
*   (code insee = NACMODE_PAIEMENT)
* @param cityName {String} nom de la ville pour laquelle on souhaite afficher des resultats
*****************************************************************************************************************/
function ShowResultPage()
{
	var mainParam = null;
	var cityName = null;

	if (this.id)
	{
		var currentLinkData = this.id.split(",");

		mainParam = currentLinkData[0];

		if (currentLinkData.length != 4)
		{
			if (currentLinkData.length > 1)
			{
				cityName = currentLinkData[1];
			}
		}
		// il s'agit d'un clic a partir de la "racine" du systeme et
		// la zone cliquee comporte moins de AD_THRESHOLD_NUMBER annonces
		// -> l'id de la zone cliquee contient un element en plus (cf GetAreaInfoCallBack "+= ',1'")
		//    i.e : [1,44,Loire Atlantique],1
		else
		{
			subAreaId = "";
			if (areaId != "")
			{
				mainParam  = currentLinkData[1];
			}
			
		}
	}

	if (IsCountryFrench(countryId))
	{
		countryId = "fr";
	}

	formRecherche.COUNTRYID.value = countryId;
	
	if (currentArea != "Autre région")
	{
		formRecherche.NACREGION.value = currentArea;
	}

	formRecherche.NACDEPARTEMENT.value = currentSubArea;

	
	if (cityName)
	{
		formRecherche.AREAID.value = areaId;	
		formRecherche.SUBAREAID.value = subAreaId;
		formRecherche.NACMODE_PAIEMENT.value = mainParam;
		formRecherche.CITYNAME.value = cityName;
		// la ville est inconnue dans notre base de donnees (code insee = 9999999)
		// -> la recherche ne se fait plus par le code insee mais par le nom de la ville
		if (mainParam == "9999999")
		{
			formRecherche.NACVILLE_ANNONCE.value = cityName;
		}
	}
	else
	{
		if (searchPathLevel == 0)
		{
			areaId = mainParam;
		}
		else
		{
			subAreaId = mainParam;
		}
		formRecherche.AREAID.value = areaId;	
		formRecherche.SUBAREAID.value = subAreaId;
	}


	formRecherche.TYPE.value = formRecherche.NAIKILOMETRAGE.options[formRecherche.NAIKILOMETRAGE.selectedIndex].text;
	formRecherche.submit();
}

window.onload = InitPage;
window.onunload = ClosePage;
