/* ************************************************************************************ */
/*										-= Ajax =-						   				*/
/*																						*/
/*	Gestion de l'ActiveX Ajax et fonctions associés (type traitement de formulaire)		*/
/*	Gère la compatibilé entre les différents navigateurs								*/
/*																						*/
/*	send(lien : String, asend : String)													*/
/* 	form(lien : String, elements : String'/', fonction : String, message : String)		*/
/*	encode(source: HTMLelement, cible: HTMLelement)										*/
/*	clear(formulaire: HTMLelement)														*/
/*	idelete(liste: HTMLelement, valeur:String/Int)										*/
/* 	icreate(liste: HTMLelement, valeur:String/Int, texte:String)						*/
/* ************************************************************************************ */

var ajax = function(loader) /* chargemeent true/false afficher ou non des écran de chargement */
{
	/***********************/
	/** Variables locales **/
	/***********************/
	
		this.loader=loader;
		if(this.loader)
		{
			this.ajax_popup = new popup();
		}
		
	/***********************/
	/** Fonctions Publics **/
	/***********************/
	
	// Fonction principale de la classe -> Utilisation de l'activeX et execution de la page 'lien'
	this.send = function(lien, asend)  
	{
		this.load('Chargement...');
		try
		{ req = new XMLHttpRequest(); }
		catch(e) {
			try { req = new ActiveXObject("Msxml2.XMLHTTP"); req.header("Cache-Control: no-cache"); }
			catch(e2) {
				try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
				catch(e3) { alert("Votre navigateur ne gère pas Ajax"+e3+e2+e); }
					}
				}
		req.onreadystatechange = this.reception;
		req.open("POST", lien, true);
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
		req.send(asend);
	}
	
/* ************************************** */
/* Fonction de traitement des formulaires */
/* ************************************** */
	
	// Appelle Ajax en envoyant les elements et la variable précisé + Possibilité d'afficher un message de confirmation
	this.form = function(lien, elements, fonction, message)
	{
		if(message!=0)
		{
			if(message=="" || message==undefined || message=="")
				message="Voulez-vous continuer ?";
			var validation=confirm(message);
		}
		else
		{
			var validation=1;
		}
		if(validation)
		{
			var tableau = elements.split('/');
			var asend="fonction="+fonction;
			for(var i=0; i<tableau.length; i++)
			{
				try
				{
					asend+="&" + tableau[i] + "=" + document.getElementById(tableau[i]).value;
				}
				catch(e) {
				}
			}
				this.send(lien, asend);
		}
		this.loadClose();
		return validation;
	}
	
	// Encode source en sha1, efface source et change la valeur de cible
	this.encode = function(source, cible)
	{
		 cible.value=hex_sha1(source.value);
		 if(source!=cible)
			source.value="";
		return cible;
	}

	// Vide tout les elements contenus dans 'formulaire'
	this.clear = function(formulaire)
	{
		var contener = formulaire.getElementsByTagName("input");
		for (var i=0 ; i< contener.length ; i++)
		{
			if(contener[i].type!="button" && contener[i].type!="submit")
				contener[i].value="";
		}
		var contener = formulaire.getElementsByTagName("select");
		for (var i=0 ; i< contener.length ; i++)
		{
				contener[i].selectedIndex=0;
		}
		var contener = formulaire.getElementsByTagName("textarea");
		for (var i=0 ; i< contener.length ; i++)
		{
				contener[i].value="";
		}
	}
	this.iselect = function(liste, valeur)
	{
		var contener = liste.getElementsByTagName("option");
		for (var i=0 ; i< contener.length ; i++)
		{
			if(contener[i].value==valeur)
			{
				liste.selectedIndex=i;
				return 1;
			}
		}
	}
	// Supprime l'option ayant la valeur 'valeur' du select 'liste'
	this.idelete = function(liste, valeur)
	{
		var contener = liste.getElementsByTagName("option");
		for (var i=0 ; i< contener.length ; i++)
		{
				if(contener[i].value==valeur)
					liste.removeChild(contener[i]);
		}
	}
	
	// Creer l'option de valeur 'value' et de libéllé 'texte' dans le Select 'liste'
	this.icreate = function(liste, value, texte)
	{
		var option=document.createElement("option");
		option.value=value;
		var texte = document.createTextNode(texte);
		option.appendChild(texte);
		liste.insertBefore(option, liste.firstChild);
	}
	/***********************/
	/** Fonctions privées **/
	/***********************/
	// Cette fonction va lancer l'affichage des données reçues, une fois que la requête sera "complete" (readyState=4)
	this.reception =function() 
	{ 
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{
				try
				{ eval(req.responseText); }
				catch(e) {
					alert("Problem [AJAX] : Erreur eval()");
					alert(req.responseText + " -> " + e); }
				}
			else 
				alert("Problem [AJAX] : " + req.statusText + " -> " + req.status);
		}
	}
	
	this.load =function(message)
	{
		if(this.loader)
		{
			this.ajax_popup.create('40','30','auto', message);
		}
	}
	this.loadClose = function()
	{
		if(this.loader)
		{
			this.ajax_popup.close();
		}
	}
	this.loadMessage = function(message)
	{
		if(this.loader)
		{
			if(message!="return")
				this.ajax_popup.div.innerHTML=message;
			return this.ajax_popup.div.innerHTML;
		}
	}
}

