// JavaScript Document

/**
* initialisation du connecteur xmlhttprequest
*/
function getXhr() {
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else { // XMLHttpRequest non supporté par le navigateur 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
	return xhr;
}

/**
* Méthode (le flux renvoyé par le serveur est du code html) appelée via un évènement javascript
* soit 3 paramètres:
* parametre	: les paramètres utilisés par le processus de traitement de la requête sous la forme param1=x&param2=y
* urlTraitement	: l'url du fichier exécuté sur le serveur qui va effectuer le traitement
* divCible	: la valeur de l'attribut name de la balise div dont le code html est à mettre à jour 
*/
if(ajax_image_loader == "")
{
	var ajax_image_loader ='<img src="/img/ajax-loader2.gif">';
}
function refreshHtml(parametre, urlTraitement, divCible) {
	var xhr = getXhr();
	
	if(ajax_image_loader != "")
	{
		// envoi de la barre de loading dans un premier temps
		document.getElementById(divCible).innerHTML = ajax_image_loader;
	}
	
	// On défini ce qu'on fait quand on a la réponse
	xhr.onreadystatechange = function() {
		try{
			// On ne fait quelque chose que si on a tout reçu et que le serveur est OK
			if(xhr.readyState == 4 && xhr.status == 200) {
				// On se sert de innerHTML pour modifier le contenu du div ciblé
				document.getElementById(divCible).innerHTML = xhr.responseText;
			}
		}
		catch(e)
		{}
	}
	xhr.open("POST", urlTraitement, true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xhr.send(parametre);
}
function refreshHtmlGet(parametre, urlTraitement, divCible) {
	var xhr = getXhr();
	// On défini ce qu'on fait quand on a la réponse
	xhr.onreadystatechange = function() {
		// On ne fait quelque chose que si on a tout reçu et que le serveur est OK
		if(xhr.readyState == 4 && xhr.status == 200) {
			// On se sert de innerHTML pour modifier le contenu du div ciblé
			document.getElementById(divCible).innerHTML = xhr.responseText;
		}
	}
	xhr.open("GET", urlTraitement+"?"+parametre, true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xhr.send("");
}

/**
* fonctions utile en cas de renvoi d'une réponse au format xml : Node cleaner
*/
function go(c) {
	if(!c.data.replace(/\s/g,''))
		c.parentNode.removeChild(c);
}
function clean(d){
	var bal=d.getElementsByTagName('*');

	for(i=0;i<bal.length;i++){
		a=bal[i].previousSibling;
		if(a && a.nodeType==3)
			go(a);
		b=bal[i].nextSibling;
		if(b && b.nodeType==3)
			go(b);
	}
	return d;
} 
			
/**
* Méthode (le flux renvoyé par le serveur est du code xml) appelée via un évènement javascript
* soit 3 paramètres:
* parametre	: les paramètres utilisés par le processus de traitement de la requête sous la forme param1=x&param2=y
* urlTraitement	: l'url du fichier exécuté sur le serveur qui va effectuer le traitement
* divCible	: la valeur de l'attribut name de la balise div dont le code html est à mettre à jour 
*/
function refreshXml(parametre, urlTraitement, divCible) {
	var xhr = getXhr();
	// On défini ce qu'on fait quand on a la réponse
	xhr.onreadystatechange = function() {
		// On ne fait quelque chose que si on a tout reçu et que le serveur est OK
		if(xhr.readyState == 4 && xhr.status == 200) {
			// la réponse contient du xml, dont les noeuds indique les éléments de réponse
			reponse = clean(xhr.responseXML.documentElement);
			// Définissez ici votre traitement coté client
			alert(reponse.getElementsByTagName("message")[0].firstChild.nodeValue);
		}
	}
	xhr.open("POST", urlTraitement, true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xhr.send(parametre);
}