/*
	Chargement des etats initiaux des cases a cocher
*/
// declarations obligatoires sinon erreur javascript
var isTitleChecked;
var isContentsChecked;
var isKeywordsChecked;

//Fonction de traitement de la touche 'entree' dans le champ 'query'
function enterEvt(eventFirefox) {
	var eventIE = window.event;
	if (eventIE) {
		if (eventIE.srcElement.name == "query") {
			if (eventIE.keyCode && eventIE.keyCode == 13) {
				doLancer();
				/* VA le 09-09-2008 : Ajout de return false pour arreter le dispatch des events */
				return false;
			}
		}
	} else if (eventFirefox) {
		if (eventFirefox.which && eventFirefox.which == 13) {
			doLancer();
			/* VA le 09-09-2008 : Ajout de return false pour arreter le dispatch des events */
			return false;
		}
	}
}

//equivalent de trim() de String en Java
function trim(s) {
	if (s.length > 0) {
		while (s.length > 0 && s.lastIndexOf(" ") == s.length - 1) {
			s = s.substring (0, s.length - 1);
		}
		while (s.indexOf(" ") == 0) {
			s = s.substring (1, s.length);
		}
	}
	return s;
}
// Fonction en mode Normal (sans surcharge de la recherche) qui teste l'existence d'une requete valide dans le champ Query
function doLancer(startIndex) {

	if (self.document.forms["search"].elements["query"]) {
		// Si pas de champ query alors il doit s'agir d'une surcharge de la recherche standard
		if (trim(self.document.forms["search"].elements["query"].value) == "" ) {
			alert("Veuillez saisir une recherche");
			self.document.forms["search"].elements["query"].value = "";
			self.document.forms["search"].elements["query"].focus();
			return;
		}
	}
	doLancerInternal(startIndex);
}
//Fonction qui lance la recherche seulement si query contient une recherche
function doLancerInternal(startIndex) {

	if (!startIndex || startIndex==null) startIndex=0;
	self.document.forms["search"].elements["startIndex"].value=startIndex;
	var url=getCorrectJSPAddressBase() +"search.jsp"+ "?";
	var params = new Array();
	var j=0;

	self.document.forms.search.queryLucene.value = buildQueryLucene(self.document.forms.search);

	with(self.document.forms["search"]) {
		for (var i=0;i<elements.length;i++) {
			if (elements[i].type=="button" || (elements[i].type=="checkbox" && elements[i].checked==false)) {
			} else if (elements[i].name == null) {
				// Rien, par exemple un cadre
			} else if (elements[i].type=="radio") {
				/* Pour les boutons radio, ne prendre que celui qui est coche */
				if (elements[i].checked) {
					params[j]=elements[i].name+"="+encodeURI(elements[i].value);
					j++
				}
			} else {
				// Encodage de l'URI pour eviter les problemes de conversion de charset
				params[j]=elements[i].name+"="+encodeURI(elements[i].value);
				j++
			}
		}
	}
	var actionURL = url+params.join("&");

	showSearcherPage(actionURL);
}

// affichage de la page suivante
function nextPage(index) {
	// Recuperation de l'url de la page active pour en changer le startIndex uniquement
	// Ceci evite des problemes de numerotation si l'utilisateur a change un critere de recherche
	var lastQuery = GetCookie("lastSearchURL");
	/*
	VA le 09-10-2007 : dans le cas de FrameSet avec la page principale sur un 
	serveur et le formulaire de recherche sur un autre, il peut y avoir des problèmes avec les cookies
	donc, tentative de récupération de l'url via le frameSet
	*/
	if (lastQuery == null || lastQuery == "") {
		lastQuery = "" + self.location;
		if (lastQuery.indexOf("startIndex=") < 0) {
			// Si l'url ne contient pas le startIndex, alors ce n'est pas une url de constitution du moteur de recherche
			lastQuery = null;
		}
	}

	if (lastQuery == null || lastQuery == "") {
		// Sans doute en mode sans AJAX
		doLancerInternal(index);
		return;
	}
	try {
		var posStartIndex = lastQuery.indexOf("startIndex=");
		var urlPage = lastQuery.substring(0, posStartIndex);
		urlPage += "startIndex=" + index;
		var posNextParams = lastQuery.indexOf("&", posStartIndex);
		if (posNextParams > 0) urlPage += lastQuery.substring(posNextParams);
		showSearcherPage(urlPage);
		document.body.scrollTop = 0;
		var myDiv = document.getElementById("kwcontent");
		if (myDiv != null) myDiv.scrollTop = 0;
	} catch (e) {
		debugMessage("Exception sur next page : " + e);
		// Si Exception alors on relance la page selon l'ancienne methode
		doLancerInternal(index);
	}
}
// Methode standard de capture de la touche entree pour lancer la recherche
function captureEnterKeyEvent(inputObject) {
	if (inputObject) {
		// Capture de l'event Enter Keyboard
		inputObject.onkeypress = enterEvt;
	}
}

function initSearch() {
	var myForm = self.document.forms["search"];

	if (myForm == null) {
		// Ce n'est pas une page standard du formulaire, donc ce soit etre une page d'erreur
		return;
	}
	var queryInput = null;
	if (myForm.elements["query"]) {
		// Si pas de champ Query, alors c'est une surcharge de la recherche
		queryInput = myForm.elements["query"];
		// Capture de l'event Enter Keyboard
		captureEnterKeyEvent(queryInput);
		// Le focus sur la zone de saisie de la recherche
		queryInput.focus();
	} else if (myForm.elements["queryLucene"]) {
		// Surcharge de la recherche standard
		queryInput = myForm.elements["queryLucene"];
	} else {
		// Pas de query, donc on ne fait rien
		return;
	}

	debugMessage("queryInput : " + queryInput);

	// Positionnement des cas a cocher standard (Contenu, titre, mots-cles)
	if(isTitleChecked && isContentsChecked && isKeywordsChecked) {
		// Test de l'existance du champ, il peut ne pas exister lors de surcharge
		if(isTitleChecked == "true" && !isResult && myForm.elements["title"])
			myForm.elements["title"].checked = 1;
		if(isContentsChecked == "true" && !isResult && myForm.elements["contents"])
			myForm.elements["contents"].checked = 1;
		if(isKeywordsChecked == "true"  && !isResult && myForm.elements["keywords"])
			myForm.elements["keywords"].checked = 1;
	}

	//Mise en place valeur de 'alias'
	myForm.elements["alias"].value=kwJSPAlias();

	myForm.elements["relativeUrl"].value=getBase();

}

function getCorrectJSPAddressBase() {
	//Positionner serveur pour envoyer la requete
	var launchAddress = kwJSPAddress();
	var modeFile = (getBase().indexOf("http") != 0)

	if (launchAddress && launchAddress.length > 0) {
		// Si l'option est renseign�e, alors
		launchAddress = launchAddress.substring(0, launchAddress.indexOf("search.jsp"));
	} else {
// VA/FB le 25-02-2008 si pas renseigne on le deduit
		launchAddress = self.location.protocol + "//" + self.location.host + "/isiman/searcher/";
	}

	if(!modeFile) {
		// VA le 26-09-2007 : prise en compte de ce param�tre pour le calcul de l'url de r�sultat
		if (getForceServerUrl() != 'false') {
			launchAddress = self.location.protocol + "//" + self.location.host + "/isiman/searcher/";
		}
	}

	return launchAddress;
}

//Fonction de lancement de l'aide
function kwShowHelp() {

	window.open(getBase()+"syntaxe.htm" , "Aide", "menubar=0,scrollbars=yes, resizable=yes,width=500,height=500");
}

function getBase() {
	var theForm = self.document.forms["search"];

	if (theForm!=null && theForm.elements["relativeUrl"].value!="") {
		return theForm.elements["relativeUrl"].value
	} else {
		var Pos;
		var laBase=self.location.href;
		Pos=laBase.lastIndexOf('/');

		return laBase.substring(0,Pos+1);
	}
}
function debugMessage(message) {
	// Decommenter la ligne ci-dessous pour faire apparaitre les message de debug dans Firefox avec le plugin FireBug
	try {
		console.debug(message);
	} catch (e) {
	}
}
var timeoutToClear = 0;
function isAjaxPossible(urle) {

	if (urle == null) return;

	if (this.getUseKwIframe && getUseKwIframe()==true) {

		return false
	}
	if (!this.getUseKwAjax || !this.getUseKwAjax()) {
		// Si on n'arrive pas a charge le script ou si l'option est a false, pas d'utilisation d'ajax
		return false;
	}
	var sameServer = self.location.protocol + "//" + self.location.host;
	if (urle.indexOf(sameServer) != 0) {
		// Pas sur le meme serveur ou pas le meme protocole, donc AJAX ne marchera pas
		return false;
	}
	return true;
}
// Positionnement de l'option d'utilisation de AJAX pour gerer l'affichage du moteur de recherche
// Fonction d'affichage (via Ajax) de la page de recherche
function showSearcherPage(ajaxUrl) {

	// Gestion si l'url demandee est sur le meme serveur, si ce n'est pas le cas, il y a une erreur "Permission refusee" !
	var useKwAjax = isAjaxPossible(ajaxUrl);

	// Pas d'element portant l'id kwcontent, donc pas d'ajax
	if (!document.getElementById("kwcontent")) {
		useKwAjax = false;

	}

	debugMessage("useAjax = " + useKwAjax);

	if (!useKwAjax) {
		var iFrame = self.document.frameElement;

		debugMessage("iFrame = " + iFrame);
		if (iFrame == null ) {

			// Pas de AJAX et pas de IFRAME, donc on affiche la recherche en pleine page
			if (self.name=="iframeresult") { // FB le 03-08-2007 dans les pages resultats c'est comme si on avait plus de iframe
								  //  car self correspond alors au iframe lui meme...
			SetCookie("lastSearchURL", ajaxUrl);
			} else {
			SetCookie("lastSearchURL", "");
			}
			self.location.replace(ajaxUrl);
		} else {

			// Dans un IFrame, on affiche le contenu de la recherche dans le IFrame

			SetCookie("lastSearchURL", ajaxUrl);

			iFrame.src = ajaxUrl;

		}
	} else {

		// Curseur en sablier pour que l'utilisateur ne s'impatiente pas
		document.body.style.cursor = "wait";
		// Affichage de la page d'attente si la page met du temps pour s'afficher
		var waitForPage = "<div id=\"wait4qq\" style=\"display:none\" class=\"searchwait\">";
		waitForPage += "<img src=\"../xmedia/ajax.wait.gif\"/>";
		waitForPage += "</div>";
		document.getElementById("kwcontent").innerHTML = waitForPage;
		// Lancement de la requete Ajax
		launchAjaxPage(ajaxUrl, 'displaySearchHTML');
		// Memorisation de la derniere recherche effectuee
		SetCookie("lastSearchURL", ajaxUrl);
		// Attente de 500ms avant d'afficher l'image
		timeoutToClear = setTimeout("var toto = document.getElementById('wait4qq'); if (toto) toto.style.display = 'inline';", 1000);
	}
}
// Fonction callback appelee quand la page de recherche a ete entierement recuperee
function displaySearchHTML(divContent) {
	clearTimeout(timeoutToClear);
	timeoutToClear = 0;
	// La page est chargee, donc positionnement du curseur en normal
	document.body.style.cursor = "default";
	// Inscription du fragment XHTML dans le DIV
	document.getElementById("kwcontent").innerHTML=divContent;
	// Lancement de l'initalisation du formulaire
	initSearch();
}

function buildQueryLucene(form,quickSearch)
{
	
	var stdOptions = quickSearch==false?false:true
					/*
						Requ�te � construire :

						(contenus OR titres OR mots-cl�s)
						AND (
							(domaine AND processus)
							OR r�gles
							OR formations
							OR m�tiers
						)
					*/

					// recherche standard
					var stdSearch = new Expr("OR");
					if (form.elements.query.value != '') {
						if (stdOptions) {
						
						if(!form.elements.title.checked && !form.elements.contents.checked && !form.elements.keywords.checked)
						{
							stdSearch.addItem(new Term("title", form.elements.query.value));
							stdSearch.addItem(new Term("contents", form.elements.query.value));
							stdSearch.addItem(new Term("keywords", form.elements.query.value));
						}
						else
						{
							if(form.elements.title.checked)
								stdSearch.addItem(new Term("title", form.elements.query.value));
							if(form.elements.contents.checked)
								stdSearch.addItem(new Term("contents", form.elements.query.value));
							if(form.elements.keywords.checked)
								stdSearch.addItem(new Term("keywords", form.elements.query.value));
						}
						} else {
						if (isTitleChecked != "false") {
							stdSearch.addItem(new Term("title", form.elements.query.value));
						}
						if (isContentsChecked != "false") {
							stdSearch.addItem(new Term("contents", form.elements.query.value));
						}
						if (isKeywordsChecked != "false") {
							stdSearch.addItem(new Term("keywords", form.elements.query.value));
						}
							
						}
					}
					var autres = getSpecifikQuery(form)

					// stdSearch + le reste
					var requete = new Expr("AND");
					requete.addItem(stdSearch);
					if (autres !=null) {
					requete.addItem(autres);
					}
					
					return requete.getString();
				}




// VA/FB le 25-02-2008 externalisation au lieu de faire tout en xsl de la construction de la base de la query
				function constructBaseQuery(isStatic,isGlobal,shownView,profilParm) {
					
					var LaBase=self.location.href;
					var Pos=LaBase.lastIndexOf('/');
					var relativeUrl=LaBase.substring(0,Pos+1);

					var statique = isStatic;
					var valide = isGlobal;

					
					var view =shownView
					var versionIsiman = 2002;
					var mimeType = "text/html";

					var alias=kwJSPAlias();

					var query="?alias=" + alias +
								"&relativeUrl=" + relativeUrl +
								"&static=" + statique +
								"&valide=" + valide +
								"&view=" + view +
								"&versionIsiman=" + versionIsiman+
								"&mimeType=" + mimeType+
								"&profil="+profilParm;
					return  query
				}
				
				
				
				function constructContainer(urle) {
					//var currentBase = self.location.protocol + "//" + self.location.host;
					var nodeContainer = document.getElementById("kwcontent");

					if (getUseKwIframe() == 'true' || !this.isAjaxPossible || !this.isAjaxPossible(urle)) {
						// Pas d'Ajax, donc IFRame

						if (nodeContainer == null) {
							nodeContainer = document.body;
						} else {
							// VA le 08/08/2008 : correction bug d'affichage du IFrame en partiel sous Firefox
							nodeContainer.style.width = "100%";
							nodeContainer.style.height = "100%";
						}
						nodeContainer.innerHTML = ("<iframe name=\"iframeresult\" id=\"iFrameSearcher\" frameborder=\"0\" border=\"0\" style=\"overflow:auto;width:100%;height:100%;\" src=\"" + urle + "\">"
						+ "</iframe>");

					} else {

						// Ajax, donc creation d'un div kwcontent
						showSearcherPage(urle);
					}
				}

