/**
 * Initialisation globale de la page.
 */
function pageInit() {
	window.addEvent('domready', function(){
		if ($('office-section') != null && $('footer-office') == null) {
			$$('.collaborator').setStyle('bottom', 10);
			$$('.collaborator').setStyle('margin­bottom', '0px');
		}
		if ($defined($('header'))) {
			/* height main content */
			resizeHolder();
			initWindow();
			/* fx header */
			fxHeader();
			/* fx main menu */
			fxMainMenu();
			/* Multibox */
			new multiBox('mb', { overlay: new overlay(), showControls: false });
			/* Concerne la gestion des bureaux annexes */
			if($('adresses') && $('scrollbar1')) makeScrollbarLoc( $('adresses'), $('scrollbar1'), $('handle1') );
			if($('only')) $$('.contact').setStyle('height', 250);
			/* ajuster titre header */
			checkTitleSize();
		}
		if ($defined($('js_functions'))) {
			parserF('js_functions');
		}
		parseEmails();
	});
}

/**
 * Affichage de l'image de fond.
 */
function dispBackGrdImg(imgSrc) {
	var image = new Image();
	image.id = 'fsImg';
	image.onload = function() {
		var img = $('fsImg');
		img.removeProperty('width');
		img.removeProperty('height');
		moosizedImage();
		img.addClass('wide');
	};
	$('fullscreen').grab(image);
	image.src = imgSrc;
}

/**
 * Transformation des adresses mail
 */
function parseEmails() {
	var emails = $$('a[href^="mailto"]');
	emails.each(
		function(email) {
			var emailHref = unescape(email.href.trim());
			email.href = emailHref.substitute({a: '@', d: '.'});
			var emailHtml = unescape(email.innerHTML.trim());
			email.innerHTML = emailHtml.substitute({a: '@', d: '.'});
		}
	);
}

/**
 * Initialisation des barres de défilement
 */
function doNoobSlide(el) {
	var player = new noobSlide({
		mode: 'horizontal',
		box: el.getElement('.player-slide'),
		size: 270,
		items: el.getElements('.slide'),
		autoPlay: true,
		handles: el.getElements('.branding ol li'),
		fxOptions: {
				duration: 800,
				transition: Fx.Transitions.Pow.easeOut,
				wait: false
		},
		onWalk: function(currentItem, currentHandle) {
			//style for handles
			$$(this.handles).getElement('a').removeClass('active');
			$$(currentHandle).getElement('a').addClass('active');
		}
	});
	el.getElements('.branding ol li').addEvent('click', function(e) {
		e.stop();
		player.stop();
	});
}

/**
 * Chargement du bloc de la page d'accueil.
 */
function loadAccueilBlock(url, targetEl) {
	if ($defined(targetEl)) {
		targetEl.fade("hide");
		new Request({
			method: "get",
			url: url,
			evalScripts : false,
			onSuccess: function(responseText, responseXML) {
				targetEl.innerHTML = responseText;
				var content = targetEl.getElement(".content");
				if ($defined(content)) {
					doNoobSlide(targetEl);
					targetEl.fade('in');
				}
			},
			onFailure: function() {
				// pas d'erreur affichée
			}
		}).send();
	}
}

/**
 * Verification du browser
 */
function checkBrowser() {
	 var displayAlert = true;
	 // IE 7+
 	 if (Browser.Engine.name == "trident"
 		 && Browser.Engine.version >= 5) {
 		 displayAlert = false;
 	 } else if (Browser.Engine.name == "gecko"
		&& Browser.Engine.version >= 19) {
		// FF 3+
		displayAlert = false ;
 	 } else if (Browser.Engine.name == "webkit"
		&& Browser.Engine.version >= 525) {
		// Safari
		displayAlert = false ;
 	 }

	 if (displayAlert) {
		 eval($('alertBrowser').innerHTML);
	 }
}

/**
 * Initialisation de l'accueil.
 */
function accueilInit(affImmo) {
	// chargement des annonces
	loadAccueilBlock("accueil-actualites.html", $('boxnews'));
	if (affImmo) {
		loadAccueilBlock("accueil-annonces.html", $('boxannonces'));
	}
	$('header').setStyle('z-index', '60');
	checkBrowser();
}

/**
* Initialisation de la page Office.
*/
function officeInit(hasCollab) {
	if (hasCollab) {
	 	/* SlideShow pour les collaborateurs */
		var gallery1 = new slideGallery($$("div.collaborator")[0], {
			steps: 3,
			speed: 600,
			transition: Fx.Transitions.Sine.easeInOut,
			mode: "circle"
		});
	} else {
		$$('.slideCollab').each(function(el) {
			el.setStyle("display","none");
		});
	}

    var borderColor = $$('.holder ul li a').getStyle('border-top-color');
    $$('.holder ul li').each(function(el) {
    	el.addEvents({
    		'mouseenter':function() {el.getElement('a').tween('border-color','#ffffff');},
			'mouseleave':function() {el.getElement('a').tween('border-color', borderColor[0]);}
		});
    });
}

/**
 * Décalage de l'image des collaborateurs
 */
function decalCollabImg(collabImgId) {
	var collabImg = $(collabImgId);
	if(collabImg.getSize().x > 120) {
    	var diff = collabImg.getSize().x - 120;
    	collabImg.setStyle('margin-left', -1 * diff);
    }
}

/**
 * Si le div suggestions a le focus.
 */
var sugfocus = false;

/**
* Initialisation de la page Annonces immobilières.
*/
etatSearchImmo=false;
isInitSearchImmo=false;
initialRightPosSearchImmo=null;
function annoncesInit() {
	if (!isInitSearchImmo) {
		isInitSearchImmo = true;

		// detection de la résolution, si la résolution est inférieure à 1200, on adapte les mouvements de la box
		resolution = getViewportSize();

		if (resolution[0]<=1200) {
			$('sortsbox').setStyle('right', '320px');
		} else {
			$('sortsbox').setStyle('right', '380px');
		}

		$('main-content').setStyle('width', '620px');

		if (Browser.Engine.trident==true && Browser.Engine.version<5) {
			$('form-sortsbox').setStyle('opacity','0');
		}

		var hideSortsBox = function() {
			if(resolution[0]<=1200) {
				$('sortsbox').tween('right', '320px');
			} else {
				$('sortsbox').tween('right', '376px');
			}
		};

		$('sortsbox').addClass('close');
		$('sortsbox-bt').addEvent('click', function() {addOrRemoveLocFocus();});
		
		var villes = $('villes');
		villes.addEvent('keyup', function(event) {return getCommunes(event);});
		villes.addEvent('keydown', function(event) {return selCommune(event);});
		villes.addEvent('blur', function() {blurCommune();});
		villes.addEvent('mouseup', function(event) {return selSelectionLoc(event);});
		villes.set('autocomplete', 'off');
		
		document.ondragstart = function () { return false; };
		
		cleanSuggestions();
		doAnnoncesQuery();
	} else {
		draw_bar(290,'fill-02');
	}
}

/**
 * Donne le focus au champ de recherche des localités ou le supprime.
 */
function addOrRemoveLocFocus() {
	if(!$('sortsbox').hasClass('close')) {
		cleanSuggestions();
		window.focus();
	} else {
		$('villes').focus();
	}
	sortsBox.run();
}

/**
 * Effectue une requête de rafraîchissement des annonces immobilières.
 */
function doAnnoncesQuery() {
	cleanSuggestions();
	blurCommune();
	$('annonces-refresh').innerHTML = $('annonces-waiting').innerHTML;
	var annoncesQueryForm = $('form-sortsbox');
	new Request({
		method: annoncesQueryForm.method,
		url: annoncesQueryForm.action,
		evalScripts : false,
		onSuccess: function(responseText, responseXML) {
			$('annonces-refresh').fade("hide");
			$('annonces-refresh').innerHTML = responseText;
			draw_bar(290, 'fill-02');
			$('annonces-refresh').fade("in");
		},
		onFailure: function() {
			$('annonces-refresh').innerHTML = $('defaultAjaxErrorText').innerHTML;
		}
	}).send(annoncesQueryForm.toQueryString());
}

/**
 * Le message pour un champ obligatoire.
 */
var champOblig = 'Champ obligatoire';

/**
 * Réinitialise la valeur de la page à 1, et effectue la requête.
 */
function reInitAndDoAnnoncesQuery() {
	setSugFocus(false);
	selectedLoc = '';
	var villes = $('villes');
	var insee = $('insee');
	if (villes.value.length == 0 || insee.value.length == 0) {
		if ($('sortsbox').hasClass('close')) {
			$('sortsbox-bt').fireEvent('click');
		}
		villes.focus();
		villes.value = champOblig;
		insee.value = '';
		villes.setStyle('color', 'red');
	} else {
		$('form-sortsbox-page').set("value", 1);
		doAnnoncesQuery();
	}
}

/**
 * Change de page lors de la consultation des annonces immo.
 * @param numPage numéro de la page
 */
function goToAnnoncesPage(numPage) {
	$('form-sortsbox-page').set("value", numPage);
	doAnnoncesQuery();
}

/**
 * Ajout d'un effet de focus sur le lien
 * de validation du formulaire de contact.
 */
sendContactFormInitialColor = null;
function focusLinkSend(doFocus) {
	if (doFocus) {
		sendContactFormInitialColor = $('sendContactFormLink').getStyle("color");
		$('sendContactFormLink').setStyle("color", "red");
	} else {
		$('sendContactFormLink').setStyle("color", sendContactFormInitialColor);
	}
}

/**
* Methode d'envoi du formulaire de contact.
*/
function sendContactForm() {
	var contactForm = $('contactForm');
	new Request({
		method: contactForm.method,
		url: contactForm.action,
		evalScripts : false,
		onSuccess: function(responseText, responseXML) {
			$('ads-lodgment').innerHTML = responseText;
			sendContactInit();
		},
		onFailure: function() {
			alert($('defaultAjaxErrorText').innerHTML);
		}
	}).send(contactForm.toQueryString());

	// désactivation du lien
	$("sendContactFormLink").set("onclick", "void(0);");
}

/**
* Initialisation du formulaire de contact.
*/
function contactInit() {
	new Request({
		method: "get",
		url: "send_contact.html",
		evalScripts : false,
		onSuccess: function(responseText, responseXML) {
			$('ads-lodgment').fade("hide");
			$('ads-lodgment').innerHTML = responseText;
			new Fx.Morph(
				$('ads-lodgment'), {duration:750, onComplete: function() {
			   		sendContactInit();
		   	    }}).start({'opacity':1});
		},
		onFailure: function() {
			alert($('defaultAjaxErrorText').innerHTML);
		}
	}).send();
}

/**
* Sous-initialisation du formulaire de contact.
*/
function sendContactInit() {
	$("civilite1").focus();

	var toControl = new Array("civilite", "nom", "prenom", "telephone", "email", "personneEnCharge", "captchaVerification");
	var toDisplay = "";
	for (var i=0; i<toControl.length; i++) {
		var errorSpan = $(toControl[i] + ".errors");
		if ($defined(errorSpan)) {
			if (toControl[i]=="captchaVerification") {
				$("captcha").setStyle("border-bottom", "1px #efc4c4 dashed");
			} else {
				$$("[for=" + toControl[i] + "]").each(function(el) {
					el.setStyle("border-bottom", "1px #efc4c4 dashed");
				});
			}
			toDisplay += " - " + errorSpan.innerHTML + "\n";
		}
	}
	if (toDisplay.length > 0) {
		alert(toDisplay);
	}
}

/**
 * Fonction spécifique qui désactive certains éléments
 * du FO pour preview article..
 */
function previewArticle() {
	 $$('.detail-back, .close-window-01, #header, #main-menu, #footer').each(function(el) {
		 el.setStyle("display", "none");
	 });
}

/**
 * Si la recherche des communes a retourné des résultats.
 */
var hasComRes = false;

/**
 * Si le positionnement des suggestions a été fait.
 */
var isSugPos = false;

/**
 * La localité sélectionnée.
 */
var selectedLoc = '';

/**
 * Fonction qui récupère les suggestions pour les communes.
 */
function getCommunes(event) {
	if (event.code != '38' && event.code != '40' && selectedLoc.length == 0 && checkSaisiePos()) {
		var reg = new RegExp("[,]+", "g");
		var search = $('villes').value;
		var searches = search.split(reg);
		var lengthSearches = searches.length;
		
		cleanSuggestions();
		
		var temp = searches[lengthSearches - 1];
	
		if (!endsWith(search.trim(), ',') &&
				lengthSearches > 0 && trim(temp).length >= 2) {
	
			$('recherche').value = temp;
			
			var communesQueryForm = $('form-communes');
			new Request({
				method: communesQueryForm.method,
				url: communesQueryForm.action,
				evalScripts : false,
				onSuccess: function(responseText, responseXML) {
					if (responseText.length > 50) {
						var suggestions = $('suggestions');
						if (!isSugPos) {
							var position = $('villes').getPosition();
							suggestions.setStyle('top', position.y + 23);
							suggestions.setStyle('left', position.x);
							isSugPos = true;
						}
						suggestions.set('html', responseText);
						suggestions.removeClass('doNotShow');
						hasComRes = true;
					}
				}
			}).send(communesQueryForm.toQueryString());
		}
		return true;
	} else {
		return false;
	}
}

/**
 * Sélection de la suggestion.
 */
function selCommune(event) {
	var toReturn = true;
	if (event.code == '188' || event.code == '13' || event.code == '9') {
		// ',', 'enter', 'tab' on sélectionne le résultat surligné ou le premier résultat
		var sel = selLoc();
		if (!sel && event.code == '9') {
			toReturn = true;
		} else {
			toReturn = false;
		}
	} else if (event.code == '27') {
		// 'esc' on supprime la dernière saisie si elle n'est pas sélectionnée dans une suggestion
		// sinon on supprime tout
		cleanLoc();
		toReturn = false;
	} else if (event.code == '38') {
		// 'haut' on se déplace dans la liste des résultats
		getPrevLoc();
		toReturn = false;
	} else if (event.code == '40') {
		// 'bas' on se déplace dans la liste des résultats
		getNextLoc();
		toReturn = false;
	} else if (event.code == '37') {
		// 'gauche' ou retourne à gauche et on sélectionne une localité si elle est déjà existante dans la liste
		if (isSaisie() && checkSaisiePos()) {
			toReturn = true;
		} else {
			cleanSuggestions();
			getLeftLoc();
			toReturn = false;
		}
	} else if (event.code == '39') {
		// 'droite' ou retourne à droite et on sélectionne une localité si elle est déjà existante dans la liste
		if (isSaisie() && checkSaisiePos()) {
			toReturn = true;
		} else {
			cleanSuggestions();
			getRightLoc();
			toReturn = false;
		}
	} else if (event.code == '8') {
		// 'retour arrière' on supprime la localité sélectionnée
		if (isSaisie() && checkSaisiePos()) {
			// Si c'est le début d'une saisie, on permet de supprimer lettre par lettre
			toReturn = true;
			selectedLoc = '';
		} else {
			// Suppression complète
			if (selectedLoc.length > 0) {
				// On supprime la localité sélectionnée
				delLoc();
			} else {
				// on sélectionne la localité précédente
				getLeftLoc();
			}
			toReturn = false;
		}
	} else if (event.code == '46') {
		// 'suppression' on supprime la localité sélectionnée
		if (isSaisie() && checkSaisiePos()) {
			// Si c'est le début d'une saisie, on permet de supprimer lettre par lettre
			toReturn = true;
			selectedLoc = '';
		} else {
			// Suppression complète
			if (selectedLoc.length > 0) {
				// On supprime la localité sélectionnée
				delLoc();
			} else {
				// on sélectionne la localité suivante
				getRightLoc();
			}
			toReturn = false;
		}
	} else if (event.code == '36') {
		// 'home' on sélectionne la première localité ou on retourne au début de la saisie
		if (isSaisie() && checkSaisiePos()) {
			// Si c'est le début d'une saisie, on permet de retourner au début
			selectedLoc = '';
			toReturn = true;
		} else {
			// on sélectionne la première localité
			cleanSuggestions();
			selPosLoc(1);
			toReturn = false;
		}
	} else if (selectedLoc.length > 0) {
		// si une localité est sélectionnée, on ne permet pas de la remplacer par d'autres caractères
		toReturn = false;
	}
	var villes = $('villes');
	if (villes.value == champOblig) {
		villes.setStyle('color', 'red');
	} else {
		villes.setStyle('color', 'black');
	}
	return toReturn;
}

/**
 * Sélection de la localité précédente.
 */
function getLeftLoc() {
	var villes = $('villes');
	var vvilles = villes.value;
	if (vvilles.length > 0) {
		var cPos = villes.getCaretPosition();
		var fPos = 0;
		var foundFPos = false;
		var foundDPos = false;
		var dPos = 0;
		var i = cPos - 1;
		while (i>-1 && !foundDPos) {
			var ccar = vvilles.charAt(i);
			if ((ccar == ',') && !foundFPos) {
				fPos = i;
				foundFPos = true;
			} else if ((ccar == ',') && foundFPos) {
				dPos = i + 2;
				foundDPos = true;
			}
			i--;
		}
		villes.setCaretPosition(dPos);
		if (dPos != fPos) {
			villes.selectRange(dPos, fPos);
			selectedLoc = trim(villes.getSelectedText());
		} else {
			selPosLoc(1);
		}
	} else {
		selectedLoc = '';
	}
}

/**
 * Sélection de la localité suivante.
 */
function getRightLoc() {
	var villes = $('villes');
	var vvilles = villes.value;
	if (vvilles.length > 0) {
		var cPos = villes.getCaretPosition();
		if (cPos != vvilles.length) {
			var fPos = 0;
			if (villes.getSelectedText() == selectedLoc) {
				cPos = cPos + selectedLoc.length;
				fPos = cPos + 2;
			}
			var foundDPos = false;
			var foundFPos = false;
			var dPos = 0;
			var i = cPos;
			while (i<vvilles.length && !foundFPos) {
				var ccar = vvilles.charAt(i);
				if ((i == 0 || ccar == ',') && !foundDPos) {
					if (i == 0) {
						dPos = i;
					} else {
						dPos = i + 2;
					}
					foundDPos = true;
				} else if ((ccar == ',') && foundDPos) {
					fPos = i;
					foundFPos = true;
				}
				i++;
			}
			villes.setCaretPosition(fPos);
			if (fPos != vvilles.length) {
				villes.selectRange(dPos, fPos);
				selectedLoc = trim(villes.getSelectedText());
			} else {
				selectedLoc = '';
			}
		} else {
			selectedLoc = '';
		}
	} else {
		selectedLoc = '';
	}
}

/**
 * Suppression de la localité sélectionnée.
 */
function delLoc() {
	var testSaisie = isSaisie();
	var villes = $('villes');
	var vvilles = villes.value;
	var reg = new RegExp("[,]+", "g");
	var svilles = vvilles.split(reg);
	var idx = -1;
	var found = false;
	var i = 0;
	var indexOf = vvilles.indexOf(selectedLoc);
	while (i<svilles.length && !found) {
		if (selectedLoc == trim(svilles[i])) {
			idx = i;
			found = true;
		}else {
			i++;	
		}
	}
	if (idx > -1) {
		var newVilles = '';
		for (var i=0; i<svilles.length; i++) {
			var temp = trim(svilles[i]);
			if (i != idx && temp.length > 0) {
				newVilles = newVilles + temp;
				if (!(i == svilles.length -1 && testSaisie)) {
					newVilles = newVilles + ', ';
				}
			}
		}
		villes.value = newVilles;
		var insee = $('insee');
		var vinsee = insee.value;
		var sinsee = vinsee.split(reg);
		var newInsee = '';
		for (var i=0; i<sinsee.length; i++) {
			var temp = trim(sinsee[i]);
			if (i != idx && temp.length > 0) {
				newInsee = newInsee + temp + ', ';
			}
		}
		insee.value = newInsee;
	}
	selectedLoc = '';
	villes.focus();
	if (!checkCurSaisiePos(indexOf)) {
		selPosLoc(indexOf);
	}
}

/**
 * Sélectionne la localité qui se trouve au début de la sélection.
 */
function selSelectionLoc(event) {
	var cPos = $('villes').getSelectionStart();
	selPosLoc(cPos);
	return false;
}

/**
 * Sélectionne une localité en fonction de la position du curseur.
 */
function selPosLoc(pos) {
	var villes = $('villes');
	var vvilles = villes.value.split('');
	var debut = 0;
	if (pos != debut) {
		var i = pos;
		var found = false;
		while (i>-1 && !found) {
			if (vvilles[i] == ',') {
				debut = i + 2;
				found = true;
			}
			i--;
		}
	}
	var fin = vvilles.length;
	if (pos < fin) {
		var i = debut;
		var found = false;
		while (i<vvilles.length && !found) {
			if (vvilles[i] == ',') {
				fin = i;
				found = true;
			}
			i++;
		}
	}
	villes.selectRange(debut, fin);
	selectedLoc = trim(villes.getSelectedText());
}

/**
 * Retourne vrai si on est sur une saisie, faux si on est sur une localité.
 */
function checkSaisiePos() {
	var villes = $('villes');
	var vvilles = villes.value;
	var cPos = villes.getCaretPosition();
	var found = true;
	var i = cPos - 1;
	if (i < 0) {
		i = 0;
	}
	while (i<vvilles.length && found) {
		if (vvilles.charAt(i) == ',') {
			found = false;
		}
		i++;
	}
	return found;
}

/**
 * Retourne vrai si on est sur une saisie, faux si on est sur une localité.
 */
function checkCurSaisiePos(cPos) {
	var villes = $('villes');
	var vvilles = villes.value;
	var found = true;
	var i = cPos - 1;
	if (i < 0) {
		i = 0;
	}
	while (i<vvilles.length && found) {
		if (vvilles.charAt(i) == ',') {
			found = false;
		}
		i++;
	}
	return found;
}

/**
 * Si on est sur une suggestion sélectionnée ou sur une nouvelle saisie.
 */
function isSaisie() {
	var toReturn = false;
	var vvilles = $('villes').value;
	var vsug = $('insee').value;
	var reg = new RegExp("[,]+", "g");
	var svilles = vvilles.split(reg);
	var ssug = vsug.split(reg);
	var villesDer = '';
	if (svilles.length > 0) {
		villesDer = trim(svilles[svilles.length - 1]);
	}
	var sugDer = '';
	if (ssug.length > 0) {
		sugDer = trim(ssug[ssug.length - 1]);
	}
	if (villesDer.length > sugDer.length) {
		toReturn = true;
	}
	return toReturn;
}

/**
 * Suppression des localités recherchées.
 */
function cleanLoc() {
	if (isSaisie()) {
		var vvilles = $('villes').value;
		var reg = new RegExp("[,]+", "g");
		var svilles = vvilles.split(reg);
		if (svilles.length > 0) {
			var temp = '';
			for (var i=0; i<svilles.length - 1; i++) {
				temp = temp + trim(svilles[i]) + ', ';
			}
			$('villes').value = temp;
		} else {
			$('villes').value = '';
		}
	} else {
		$('villes').value = '';
		$('insee').value = '';
	}
}

/**
 * Sélectionne la suggestion suivante.
 */
function getNextLoc() {
	var suggs = $$('#suggestions div.sugres');
	var suggsel = $$('#suggestions div.selsug');
	if (suggsel.length > 0) {
		// une suggestion est déjà sélectionnée
		var selId = -1;
		var done = false;
		for (var i=0; i<suggs.length && !done; i++) {
			var suggdiv = suggs[i];
			if (suggdiv.hasClass('selsug')) {
				selId = i + 1;
				suggdiv.removeClass('selsug');
			} else if (i == selId) {
				suggdiv.addClass('selsug');
				done = true;
			}
		}
		if (selId == suggs.length) {
			suggs[0].addClass('selsug');
		}
	} else {
		if (suggs.length > 0) {
			// il existe des résultats, on prend le premier
			suggs[0].addClass('selsug');
		}
	}
}

/**
 * Sélection de la suggestion précédente.
 */
function getPrevLoc() {
	var suggs = $$('#suggestions div.sugres');
	var suggsel = $$('#suggestions div.selsug');
	if (suggs.length > 0) {
		// une suggestion est déjà sélectionnée
		var selId = -1;
		var done = false;
		for (var i=suggs.length - 1; i>-1 && !done; i--) {
			var suggdiv = suggs[i];
			if (suggdiv.hasClass('selsug')) {
				selId = i - 1;
				suggdiv.removeClass('selsug');
			} else if (i == selId) {
				suggdiv.addClass('selsug');
				done = true;
			}
		}
		if (selId == -1) {
			suggs[suggs.length - 1].addClass('selsug');
		}
	} else {
		if (suggs.length > 0) {
			// il existe des résultats, on prend le dernier
			suggs[suggs.length - 1].addClass('selsug');
		}
	}
}

/**
 * Surligne la localité cliquée.
 */
function surThisLoc(locDiv) {
	var suggs = $$('#suggestions div.sugres');
	for (var i=0; i<suggs.length; i++) {
		var suggdiv = suggs[i];
		suggdiv.removeClass('selsug');
	}
	locDiv.addClass('selsug');
	setSugFocus(true);
	var villes = $('villes');
	villes.focus();
	villes.setCaretPosition('end');
}

/**
 * Donne ou supprime le focus au div suggestions.
 */
function setSugFocus(value) {
	sugfocus = value;
}

/**
 * Sélectionne la localité cliquée.
 */
function selThisLoc(locDiv) {
	var locSpan = locDiv.getElement('span');
	addLoc(locSpan);
}

/**
 * Sélection de la localité surlignée ou de la première.
 */
function selLoc() {
	var sel = false;
	var suggs = $$('#suggestions div.selsug');
	if (suggs.length > 0) {
		var fsugg = suggs[0].getElement('span');
		addLoc(fsugg);
		sel = true;
	} else {
		sel = selFirstLoc();
	}
	return sel;
}

/**
 * Sélection du premier résultat dans la liste des localités.
 */
function selFirstLoc() {
	var sel = false;
	var suggs = $$('#suggestions div.sugres');
	if (suggs.length > 0) {
		var fsugg = suggs[0].getElement('span');
		addLoc(fsugg);
		sel = true;
	}
	return sel;
}

/**
 * Ajoute une localité à la recherche.
 */
function addLoc(span) {
	replaceLastChars(span.get('html'));
	addInsee(span.id);
	cleanSuggestions();
	$('villes').setCaretPosition('end');
}

/**
 * Ajoute un code insee à la liste.
 */
function addInsee(insee) {
	var vinsee = $('insee').value;
	vinsee = vinsee + insee + ', ';
	$('insee').value = vinsee;
}

/**
 * Supprime les derniers caractères entrés par l'utilisateur.
 */
function replaceLastChars(nom) {
	var vvilles = $('villes').value;
	var reg = new RegExp("[,]+", "g");
	var searches = vvilles.split(reg);
	var temp = '';
	
	if (searches.length - 1 >= 0) {
		for (var i=0; i<searches.length - 1; i++) {
			temp = temp + trim(searches[i]) + ', ';
		}
		if (nom.length > 0) {
			temp = temp + trim(nom) + ', ';
		}
	} else {
		temp = trim(nom);
	}
	
	$('villes').value = temp;
}

/**
 * Supprime les suggestions des localités.
 */
function cleanSuggestions() {
	var suggestions = $('suggestions');
	suggestions.addClass('doNotShow');
	suggestions.erase('html');
	hasComRes = false;
}

/**
 * Quand le focus est enlevé du champ de recherche.
 */
function blurCommune() {
	if(!sugfocus) {
		replaceLastChars('');
		cleanSuggestions();
	}
}

/**
 * Suppression des espaces en début et en fin de chaîne.
 */
function trim(str) {
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

/**
 * Vérification de la fin d'une chaîne.
 */
function endsWith(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

/**
 * Teste la saisie.
 */
function testSaisie(event) {
	var toReturn = false;
	var ecode = event.keyCode;
	var eshift = event.shiftKey;
	if (eshift && (ecode >= 48 && ecode <= 57)) {
		toReturn = true;
	} else if (ecode >= 96 && ecode <= 105) {
		toReturn = true;
	} else if (ecode == 8 || ecode == 9 || ecode == 27 || ecode == 37
			|| ecode == 39 || ecode == 46 || ecode == 35 || ecode == 36) {
		toReturn = true;
	}
	return toReturn;
}

/**
 * Teste la saisie des nombres de chambres.
 */
function testNbChb(event) {
	return testSaisie(event);
}

/**
 * Teste la saisie des surfaces.
 */
function testSurf(event) {
	return testSaisie(event);
}

/**
 * Teste la saisie des prix.
 */
function testPrix(event) {
	return testSaisie(event);
}

