/*-------------------------------------------------------------
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)
{
	document.getElementById(elementId).innerHTML = string;
}

var isLoaded=1;
var cur_ajax_object;
var iNbrInQueue=0;
var aQueueUrl = new Array();

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

Cette fonction permet d'envoyer ne requete via l'objet XMLHttpRequest.

Elle commence par verifier qu'une autre requete n'est pas deja en cours.
S'il n'y en a pas, elle envoie la requete et definie le callback sur la fonction evalReturn()
qui lancera un eval() du retour si l'etat est ? 4.
S'il y a deja une requete en cours, la fonction ajoute l'url a traiter dans un array (aQueueUrl)
qui sera traite via la fonction doQueue() qui est appele dans evalReturn().

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, sendData, isPost)
{
	// On ne lance pas un script si le pr?c?dent n'est pas load?
	if(isLoaded > 0)
	{
		// S'il y en a en queue, on en retire un
		if(iNbrInQueue > 0)
			iNbrInQueue = iNbrInQueue-1;
	
		if(window.XMLHttpRequest) // FIREFOX
			cur_ajax_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // IE
			cur_ajax_object = new ActiveXObject("Microsoft.XMLHTTP");
		else
			return(false);

		// On definie la fonction a appeler sur le changement d'etat
		cur_ajax_object.onreadystatechange=evalReturn;

		if(isPost)
			curMethod = "POST";
		else
			curMethod = "GET";		

		cur_ajax_object.open(curMethod, fileUrl, true);
		cur_ajax_object.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
		cur_ajax_object.send(sendData);
		
		// On enregistre qu'on est en train de traiter une requete
		setIsLoaded(0);
	}
	// Si la requ?te pr?c?dente n'est pas pass? on la relance dans X secondes * num?ro dans la queue
	else
		aQueueUrl.push(fileUrl);
}

/*-------------------------------------------------------------
doQueue

Cette fonction permet de traiter les url qui ont ete mises en attente.

Auteur : SUPAD
-------------------------------------------------------------*/
function doQueue()
{
	if(aQueueUrl.length > 0)
	{
		// On recupere la nouvelle url a traiter
		curUrl = aQueueUrl[0];

		// On retire l'element de l'array
		aQueueUrl.shift();
		
		// On lance la requete
		getData(curUrl);
	}
}

/*-------------------------------------------------------------
evalReturn

Cette fonction est definie par getData() comme devant etre appelee
a chaque changement du readyState de l'objet ajax.

Quant le readyState est ? 4, on evalue le code retourne.

iTry	: Nombre de tentative d?j? effectu?e

Auteur : SUPAD
-------------------------------------------------------------*/
function evalReturn()
{
	if(cur_ajax_object.readyState == 4)
	{
		eval(cur_ajax_object.responseText);
		
		setIsLoaded(1);
		doQueue();
	}
}

/*-------------------------------------------------------------
setIsLoaded

Cette fonction est appel?e au lancement d'une requete 
et par le javascript retourn?.
Cette fonction defini des variables globales :
isLodaded		: VRAI si la derniere requete est termin?e, FAUX sinon
startTime		: Date de debut de la derniere requete
endTime			: Date de fin de la derniere requete termin?e
elapsedTime		: Temps ecoul? pour la derni?re requete termin?e
meanElapsedTime		: Temps moyen ecoul?
countRequestDone	: Nombre de requetes effectu?es

bLoaded : faux au lancement de la requ?te, vrai pour le javascript retourn?

Auteur : SUPAD
-------------------------------------------------------------*/
function setIsLoaded(bLoaded)
{
	var elapsedTime, startTime, endTime, meanElapsedTime, countRequestDone;

	// Variable permettant de savoir si un script est en cours de chargement
	isLoaded = bLoaded;

	if(!bLoaded)
	{
		// Date de debut du chargement
		dateObj = new Date();
		startTime = dateObj.getTime();		
	}
	else
	{
		// 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++;
	}
}

b_debug = true;

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

Auteur : SUPAD
-------------------------------------------------------------*/
function debug(string)
{
	if(b_debug == true)
	{
		if(!document.getElementById('debug'))
			document.body.innerHTML += "<div id='debug' style='position:absolute;width:400px;right:0px;top:0px;background-color:#FFF;'></div>"

		document.getElementById('debug').innerHTML = string+'<br>'+document.getElementById('debug').innerHTML;
	}
}
