/**
 * Fonctions JS pour le moteur de recherche
 * fonctions communes au moteur de base, avancé et indicateur de prix
 * @author Paragon {29/04/2011}
 * MAJ by Paragon {25/05/2011}: ajout d'un parametre à typeChange() pour éviter les conflits si plusieurs moteurs présents ds la page
 * MAJ by Paragon {22/06/2011}: fix bug typeChange(element) si element inexistant
 * MAJ by Paragon {22/07/2011}: ajout effet accordéon
 * MAJ by Paragon {01/08/2011}: maj de l'effet accordéon
 * MAJ by Paragon {23/12/2011}: ajout mrDisplay + refonte mise en page commentaires
 */  


/**
 * On ajoute ici les événements à la page
 */
addEvent(window,"load",function(){typeChange('mr_biens');});	// on adapte dès la fin du téléchargement le formulaire
addEvent(window,"load",function(){typeChange('mr_prix');});	// on adapte dès la fin du téléchargement le formulaire

/**
 * Fonction écouteur d'événements, qui ajoute les événements
 * @author Paragon {29/04/2011}
 */
function addEvent(obj,event,fct) {
    if (obj.attachEvent)	// pour IE
        obj.attachEvent("on"+event,fct);
    else
        obj.addEventListener(event,fct,true);
}


/**
 * Adaptation du formulaire en fonction du type choisi
 * On efface ou affiche les champs correspondant au type de recherche
 * @author Paragon {29/04/2011}
 */
function typeChange(element)
{
	// on récupère le select dont le nom est donnée en parametre
	var select=document.getElementById(element+"_type");
	if (select==null)
		return;	// on quitte si pas présent 
	
	var typeRegex=new RegExp("\^"+element+"_type\\b");  // commencant par le mot "type" (\b=fin de mot ou de chaine)
	var blockRegex=new RegExp(" "+select.options[select.selectedIndex].value+"\\b");  // espace suivi de notre selection
	
	// on traite tous les éléments "table" du dom
	var table=document.getElementsByTagName("table");
	for (var i=0;i<table.length;i++)
	{
		var tablei=table[i];
		if (typeRegex.test(tablei.className))
			if (blockRegex.test(tablei.className))
				tablei.style.display='block';	// on affiche si class="type X" avec X=notre selection
			else
				tablei.style.display='none';	// on efface si class="type" mais sans " X"
	}
	// idem avec les éléments "hr"
	var hr=document.getElementsByTagName("hr");
	for (var i=0;i<hr.length;i++)
	{
		var hri=hr[i];
		if (typeRegex.test(hri.className))
			if (blockRegex.test(hri.className))
				hri.style.display='block';	// on affiche si class="type X" avec X=notre selection
			else
				hri.style.display='none';	// on efface si class="type" mais sans " X"
	}
}


/**
 * Effacement du contenu du champ et du texte de l'erreur associée
 * + mise en noir du texte
 * @author Paragon {29/04/2011}
 */
function optionFocus(objet,nom,value)
{
	if (objet.value==value || objet.className=='erreur')
	{
		objet.value='';
		objet.className='';
		document.getElementById(nom+'Erreur').style.display='none';
		objet.style.color='black';	// on ajoute la couleur car par defaut gris car champ optionnel
	}
}


/**
 * Affiche un élément dont le css display est à none
 * @param id2display: id à afficher
 * @author Paragon {22/12/2011}
 */
function mrDisplay(id2display)
{
	$("#"+id2display).css("display","block");
}




/**********************************************************
 * Effet accordéon avec boutons de gestion (toggle)
 * @author Paragon {20/07/2011}
 * MAJ by Paragon {01/08/2011}: possibilité de fermeture d'une fenetre
 **********************************************************/

/**
 * Active l'effet accordéon (ouvre ou ferme la fenêtre liée + lève/abaisse le toggle et pivote sa flèche)
 * si toggleId2close,windowId2close et coul2close définis, les ferme/désactive
 *  @param toggle: le toogle de contrôle à activer/désactiver: objet appelant = this
 *  @param windowId: id de la fenêtre liée
 *  @param coul: couleur du toggle et de sa fleche
 *  @param toggleId2close [OPT]: id du toggle à désactiver
 *  @param windowId2close [OPT]: id de la fenetre à fermer
 *  @param coul2close [OPT]: couleur du toggle à désactiver
 *  @author Paragon {21/07/2011}
 *  MAJ by Paragon {01/08/2011}
 */
function mrToggleClick(toggle,windowId,coul,toggleId2close,windowId2close,coul2close)
{
	// si la fenêtre est fermée
	if ($("#"+windowId).css("display")=="none")
	{
		// ouverture et activation du toggle
		mrToggleDown(toggle.id,coul);
		$("#"+windowId).slideDown(500);
		
		// fermeture/désactivation si défini
		if (toggleId2close)
		{
			mrToggleUp(toggleId2close,coul2close);
			$("#"+windowId2close).slideUp(500);
		}
	}
	else
	{
		// fermeture de la fenêtre et désactivation du toggle
		mrToggleUp(toggle.id,coul);
		$("#"+windowId).slideUp(500);
	}
}


/**
 * Ajoute un effet bouton enfoncé au toggle et pivote sa flèche vers le bas
 * produit l'inverse si déjà actif
 *  @param toggle: objet appelant = this
 *  @param windowId: id de la fenêtre liée
 *  @param coul: coul du toggle et de la fleche
 *  @author Paragon {01/08/2011}
 */
function mrToggleOver(toggle,windowId,coul)
{
	// si la fenètre liée est fermée
	if ($("#"+windowId).css("display")=="none")
		mrToggleDown(toggle.id,coul);	// on active le toggle
	else
		mrToggleUp(toggle.id,coul);		// sinon on le désactive
}


/**
 * Retire l'effet bouton enfoncé du toggle et pivote sa flèche vers le haut
 * produit l'inverse si déjà désactif
 *  @param toggle: objet appelant = this
 *  @param windowId: id de la fenêtre liée
 *  @param coul: coul du toggle et de la fleche
 *  @author Paragon {01/08/2011}
 */
function mrToggleOut(toggle,windowId,coul)
{
	// si la fenètre liée est fermée
	if ($("#"+windowId).css("display")=="none")
		mrToggleUp(toggle.id,coul);		// on désactive le toggle
	else
		mrToggleDown(toggle.id,coul);	// sinon on le réactive
}


/**
 * Effet bouton relevé
 *  @param toggleId: id du toggle à relever 
 *  @param coul: coul du toggle et de la fleche
 *  @author Paragon {22/07/2011}
 */
function mrToggleUp(toggleId,coul)
{	
	var toggle=$("#"+toggleId);
	var fleche=$("#"+toggleId+" .mrFleche");
	
	fleche.css("background-image","url(/images/bt/fleche-"+coul+"-droite-24.png)");
	fleche.css("right","15px");

	toggle.css("padding","5px 0");
	toggle.css("border-color","rgb(255,255,255)");
	mrCssGrad(toggle,coul,false);
}


/**
 * Effet bouton enfoncé
 *  @param toggleId: id du toggle à enfoncer
 *  @param coul: coul du toggle et de la fleche
 *  @author Paragon {22/07/2011}
 */
function mrToggleDown(toggleId,coul)
{
	var fleche=$("#"+toggleId+" .mrFleche");
	toggle=$("#"+toggleId);
	
	fleche.css("background-image","url(/images/bt/fleche-"+coul+"-bas-24.png)");
	fleche.css("right","14px");
	
	toggle.css("padding","5px 0px 5px 1px");
	toggle.css("border-color","rgb(230,230,230)");
	mrCssGrad(toggle,coul,true);
}


/**
 * Modifie le css d'un objet pour y ajouter un dégradé
 *  @param objet: objet de la forme $("#objet.id")
 *  @param coul: couleur du dégradé
 *  @param inverse: inverse le dégradé si définit
 *  @author Paragon {22/07/2011}
 *  MAJ by Paragon {03/08/2011}: fix bug IE7-8
 *  MAJ by Paragon {20/12/2011}: changement synthaxe degradé webkit
 */
function mrCssGrad(objet,coul,inverse)
{
	// définition des couleurs
	var coulNoGrad,coulNoGradC,coulGradC,coulGradS;
	if (coul=="orange")
	{	
		coulNoGrad="rgb(242,157,72)";	// couleur par défaut en non dégradé
		coulNoGradC="rgb(242,175,109)";	// couleur active en non dégradé
		coulGradC="rgb(242,175,109)";	// dégradé clair
		coulGradS="rgb(242,139,36)";	// dégradé sombre
	}
	else
	{
		coulNoGrad="rgb(204,176,163)";
		coulNoGradC="rgb(229,198,183)";
		coulGradC="rgb(229,198,183)";
		coulGradS="rgb(178,154,142)";
	}
	
	// si inverse est défini, on intervertit les couleurs
	if (inverse)
	{
		coulNoGrad=coulNoGradC;
		var coulTmp=coulGradC;
		coulGradC=coulGradS;
		coulGradS=coulTmp;
	}
	
	// MAJ du css avec les dégradés
	objet.css("background-color",coulNoGrad);
	if (navigator.appName!='Microsoft Internet Explorer')
	{
		objet.css("background-image","-moz-linear-gradient(top,"+coulGradC+","+coulGradS+")");
		objet.css("background-image","-o-linear-gradient(top,"+coulGradC+","+coulGradS+")");
		objet.css("background-image","-webkit-linear-gradient(top,"+coulGradC+","+coulGradS+")");
		objet.css("background-image","linear-gradient(top,"+coulGradS+","+coulGradC+")");
	}
	else
		objet.css("-pie-background",coulNoGrad+" linear-gradient(top,"+coulGradS+","+coulGradC+")");
}

