
function httpRequest(pathToScript, params, method) 
{
	this.File      = pathToScript;
	this.params    = params;
	this.method    = method;
	this.waitingMsg= "";
	
	this.txtErreur = "";
	this.xmlHttp   = null;
	
	/********************************************************************************
	 * Fonction qui crée un object XMLHttpRequest compatible sur tout les			*
	 *          naviguateur(ou presque)												*
	 ********************************************************************************/
	this.createRequestObject = function() 
	{
		if (window.ActiveXObject)
		{
			//this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			try {
                this.xmlHttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
                //alert("MSXML");
            } catch (e) {
                try {
                    this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                    this.xmlHttp = false;
                }
            }
		}// on detecte si il supporte l'objet XMLHttpRequest
		else if (window.XMLHttpRequest)
		{
		  this.xmlHttp = new window.XMLHttpRequest();
		}

	}

	/********************************************************************************
 	 * Fonction qui permet d'envoyer une requete http de type : POST 				*
 	 ********************************************************************************/
	this.sendGetReq = function() 
	{
  		this.xmlHttp.open('POST',this.File + '?'+ this.params , true);
  		this.xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  		this.xmlHttp.send("?" + this.params);
	}
	
	/********************************************************************************
 	 * Fonction qui permet d'envoyer une requete http de type : POST				*
 	 ********************************************************************************/
	this.sendPostReq = function() 
	{	
		this.xmlHttp.open("POST", this.File, true);
		this.xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.xmlHttp.send(this.params);
	}
	
	
	/********************************************************************************
 	 * Fonction qui traite le status apres utilisation du xmlHttpRequest			*
 	 * PARAM : status , integer, code de retour HTTP								*
 	 * RETURN: boolean, a true si aucune erreur, false si probleme, ecriture de		*
 	 *									l'erreur dans this.error					*
 	 ********************************************************************************/
 	this.gestionStatus = function(status)
 	{
 	 	var reussite = true;
 	 	
 	 	if (status >= 300 && status < 400)
 	 	{
 	 		this.txtErreur = "erreur http numéro : " + status + " \n Code de redirection !" ;
 	 		reussite = false;
 	 	}
 	 	else if(status >= 400 && status < 500)
 	 	{
 	 		this.txtErreur = "erreur http numéro : " + status + " \n Code erreur client !" ;
 	 		reussite = false;
 	 	}
 	 	else if (status >= 500 )
 	 	{
 	 		this.txtErreur = "erreur http numéro : " + status + " \n Code erreur serveur !" ;
 	 		reussite = false;
 	 	}
 	 	
 	 	
 	 	if (!reussite && isDebug)
 	 	{
			ShowDebugMsg(this.txtErreur + "<br/><br/><br/>" + this.xmlHttp.responseText)
 	 	
 	 	}
 	 	return reussite;
 	}	
 	
 	
 	
 	//Poste un formulaire via HTTPRequest
	this.PostForm = function(formName) 
	{	

		//on récupère les données du formulaire à envoyer
		var dataObj = document.getElementById(formName);
		this.params = "?send=ok";
					
		for (nbElt=0;nbElt<dataObj.elements.length;nbElt++) 
		{

			if (dataObj.elements[nbElt].type=="checkbox" || dataObj.elements[nbElt].type=="radio")
			{
				var Elt = dataObj.elements[nbElt]
				if (Elt.checked)
				{
					this.params += "&" + dataObj.elements[nbElt].name + "=" + dataObj.elements[nbElt].value;
				}
			}
			else
			{
				this.params += "&" + dataObj.elements[nbElt].name + "=" + dataObj.elements[nbElt].value;
			}
		}
	}  
 	
 	
 	//=====================================================================================
	// charge le contenu dynamique d'une page et l'ecrit dans un div à l'aide de l'objet XHR()
	this.LoadContent = function(TAGID,waitingMsg,MoreAction) 
	{
	  //setOpacity(document.getElementById("main"), 60);
	  //document.getElementById("main").innerHTML="";
	//alert("requete");

		// Récupération du message d'attente
		if (waitingMsg!='')
		{
			this.waitingMsg = waitingMsg;
			if (TAGID=='main') 
			{
			    this.ShowWaitingMessage('loading_page',this.waitingMsg);
			} else {
			    this.ShowWaitingMessage(TAGID,this.waitingMsg);
			}
		}
	
	    if (TAGID=='main') {
            document.getElementById("main").style.display ='none';
            document.getElementById("loading_page").style.display ='inline';
        }
        
		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}

		var self = this;
	

		self.xmlHttp.onreadystatechange = function()
		{
			if (self.xmlHttp.readyState == 4) 
			{
				if (self.gestionStatus)
				{
				    
					var objMain=document.getElementById(TAGID);
					if (objMain)
					{
						
						objMain.innerHTML = self.xmlHttp.responseText;
						
						
						//alert("reponse");
						
					}
					
					initXHR();
					if (TAGID=='main') {
					    document.getElementById("loading_page").style.display ='none';
					    document.getElementById("main").style.display ='inline';
					}
					
					eval(MoreAction);
				}
			}
		}
	}
	
	//=====================================================================================
	// charge le contenu dynamique d'une page et l'ecrit dans un div à l'aide de l'objet XHR()
	this.LoadContent_setFunction = function(TAGID,waitingMsg,withFunction) 
	{
		// Récupération du message d'attente
		this.waitingMsg = waitingMsg;

		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}

		var self = this;


		self.xmlHttp.onreadystatechange = function()
		{eval(withFunction)(self, document.getElementById(TAGID))}
	}
	
	
	 
	//=====================================================================================
	// charge le contenu dynamique d'une page et l'ecrit dans un div à l'aide de l'objet XHR()
	this.execContent = function(MoreAction) 
	{
		// Récupération du message d'attente
		this.waitingMsg = "";


		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}

		var self = this;
		self.xmlHttp.onreadystatechange = function()
		{
			if (self.xmlHttp.readyState == 4) 
			{
			
				if (self.gestionStatus)
				{
				    //alert(self.xmlHttp.responseText);
					eval(self.xmlHttp.responseText);
					eval(MoreAction);
					initXHR();
				}
			}
		}
	}
	
	
		//=====================================================================================
	// charge le contenu dynamique d'une page et l'ecrit dans un div à l'aide de l'objet XHR()
	this.sendContent = function(MoreAction) 
	{
		// Récupération du message d'attente
		this.waitingMsg = "";


		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}


		var self = this;
		self.xmlHttp.onreadystatechange = function()
		{
			if (self.xmlHttp.readyState == 4) 
			{
				
				if (self.gestionStatus)
				{	
					eval(MoreAction);
				}
			}
		}
	}
	

//=====================================================================================
//Affiche un message d'attente pendant qu'une recherche est effectuee
//de maniere asynchrone
this.ShowWaitingMessage = function(_target,message) 
{
	var newHTML="";
	var objMain=document.getElementById(_target);
	if (objMain)
	{
	newHTML += "<div align=\"center\" style=\"width:100%\">";
	newHTML += "<p><br><br>" + message + "<br><br>";
	newHTML += "<img src=\"" +  "/i/loading.gif\"></p>";
	newHTML += "</div>";
	
	objMain.innerHTML = newHTML;		
	}

}
// FIN  function ShowWaitingMessage
	
	
	this.createRequestObject();
}





