/*-------------------------------------------------------------
writeIn

Cette fonction permet d'ecrire dans un ?l?ment block.

Note : Il semble qu'il soit impossible d'?crire dans un <select></select> ou dans un <td></td>

string		: String que l'on veut ecrire dans l'element
elementId	: Id de l'element dans lequel on veut ecrire

Auteur : SUPAD
-------------------------------------------------------------*/
function writeIn(string, elementId)
{//debug("elementId : "+elementId);
	document.getElementById(elementId).innerHTML = string;
}

/*-------------------------------------------------------------
getData

Cette fonction renvoi le contenu d'un fichier.

Note : Le fichier requet? doit ?tre sur le m?me domaine

fileUrl		: Url du fichier dont on veut le contenu

Auteur : SUPAD
-------------------------------------------------------------*/
function getData(fileUrl)
{
	if(window.XMLHttpRequest) // FIREFOX
		xhr_object = new XMLHttpRequest();
	else if(window.ActiveXObject) // IE
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else
		return(false);

	xhr_object.open("GET", fileUrl, false);
	xhr_object.send(null);

	if(xhr_object.readyState == 4)
		return(xhr_object.responseText);
	else
		return(false);
}

var oldKeyWord = "";
var oldNbrResult = "";
var elapsedTime = "";
var bChanged = 0;
var countRequestDone = 0;
var meanElapsedTime = 0;
var isLoaded = true;

/*-------------------------------------------------------------
listenForKeyWord

R?cup?re les keyword entr? dans le champ texte pass?.
La fonction teste si la derni?re requ?te est termin?e avant d'en
lancer une autre.
En fonction du temps mis pour que la requ?te soit termin?e elle
determine le temps pour le setTimeout()

textField	: Champ texte sur lequel on d?marre le listener
aFileUrl	: Array de fichier sur lesquel on fait les requete
aElementId	: Array des id de l'element dans lesquel on ecrit le resultat de la requete

Auteur : SUPAD
-------------------------------------------------------------*/
function listenForKeyWord(textFieldId, i)
{
	var curKeyWord;
	var dateObj;
	var data;

	// On verifie qu'on a pas d?pass? l'array
	if((i+1) > aFileUrl.length)
		i = 0;

	// On recupere le fichier et l'element en cours
	curFileUrl = aFileUrl[i];

	// On recup?re le mot entr?
	curKeyWord = document.getElementById(textFieldId).value;
	
	// On recup?re le nombre de resultat voulu
	curNbrResult = document.getElementById('hiddenNbrResult').value;
	
	dateObj = new Date();

	// On check si le mot a chang?
	if(curKeyWord != oldKeyWord || curNbrResult != oldNbrResult)
	{
		tmpsMoyen = meanElapsedTime*aFileUrl.length;
		bChanged = i;
	}
	else if(bChanged == i)
	{//debug("- -- --- -- -");
		bChanged = -1;
	}
/*debug("curKeyWord : "+curKeyWord);
debug("oldKeyWord : "+oldKeyWord);
debug("bChanged : "+bChanged);*/

	// Si le mot a change on lance la mise ? jour
	if(bChanged >= 0 && isLoaded)
	{//debug("i : "+i);
		//writeIn("Recherche en cours - Temps moyen d'une recherche : "+(tmpsMoyen.toFixed(0)/1000)+" secondes", "div_searching");
		writeIn("Recherche en cours", "div_searching");
	
		setIsLoaded(false);
	
		// On enregistre le temps du d?but de la requete
		startTime = dateObj.getTime();
	
		// On envoi la requete
		data = getData(curFileUrl+'?value='+escape(curKeyWord)+'&nbr_result='+curNbrResult+'&i='+i+'&starttime='+startTime);

		// On affiche le resultat
		eval(data);
		
/*debug("startTime : "+startTime);
debug("endTime : "+endTime);
debug("elapsedTime : "+elapsedTime);*/

	/*if(elapsedTime < 1000)
		elapsedTime = 1000;
debug("elapsedTime "+i+" : "+elapsedTime);
debug("meanElapsedTime "+i+" : "+meanElapsedTime);*/
	}
	else
	{
		writeIn("", "div_searching");
	}

	oldKeyWord = curKeyWord;
	oldNbrResult = curNbrResult;

	/*if (elapsedTime > 5)
		debug("elapsedTime : "+elapsedTime);*/

	i++;

	// On relance la fonction
	timerSeachAjax = setTimeout('listenForKeyWord("'+textFieldId+'", '+i+')', 100);
}

/*-------------------------------------------------------------
debug

Auteur : SUPAD
-------------------------------------------------------------*/
function debug(string)
{
	document.getElementById('debug').innerHTML = string+'<br>'+document.getElementById('debug').innerHTML;
}

function setIsLoaded(bLoaded, i, startTime)
{

	isLoaded = bLoaded;

	if(bLoaded)
	{
		// On recupere le temps ecoule
		dateObj = new Date();
		endTime = dateObj.getTime();

		elapsedTime = endTime-startTime;

		// On incremente le nombre de requete et on calcul la moyenne
		meanElapsedTime = (meanElapsedTime*countRequestDone+elapsedTime)/(countRequestDone+1);

		countRequestDone++;
	}
}