
 
 

var self_httpRequest = null;
function httpRequest(pathToScript, params, method, isNotAsynchrone) 
{
	this.File      = pathToScript.replace(/&amp;/g, '&');
	this.File      = this.File.replace(/http:\/\/[^\/]*/, '')
	this.params    = params;
	this.method    = method;
	this.waitingMsg= "";
	this.asynchrone= true; // mode synchrone géré à 5%.... risque de mauvaise réaction
	
	if (isNotAsynchrone) {this.asynchrone = false}
	
	this.txtErreur = "";
	this.xmlHttp   = null;
	this.idElmt_forWaitingMsg = ""; 
	
	if (params.length > 0)
	{
		this.params = params + "&isXHR=1";
	}
	else
	{
		this.params = "isXHR=1";
	}
	
	/********************************************************************************
	 * Fonction qui crée un object XMLHttpRequest compatible sur tous les			*
	 *          naviguateurs (ou presque)												*
	 ********************************************************************************/
	this.createRequestObject = function() 
	{
		if (window.ActiveXObject)
		{
			this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}// on detecte si il supporte l'objet XMLHttpRequest
		else if (window.XMLHttpRequest)
		{
		  this.xmlHttp = new XMLHttpRequest();
		}
	}

	/********************************************************************************
 	 * Fonction qui permet d'envoyer une requete http de type : POST 				*
 	 ********************************************************************************/
	this.sendGetReq = function() 
	{
  		this.xmlHttp.open('POST',this.File + '?'+ this.params , this.asynchrone);
  		this.xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  		this.xmlHttp.send("?" + this.params);
	}
	
	this.sendGetReq_onunload = function() 
	{
  		this.xmlHttp.open('POST',this.File + '?'+ this.params , this.asynchrone);
  		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, this.asynchrone);
		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";
	 
	 
	    widgSubmit();
	
		for (nbElt=0;nbElt<dataObj.elements.length;nbElt++) 
		{

			if (dataObj.elements[nbElt].type !== undefined && (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 if (dataObj.elements[nbElt].value !== undefined && dataObj.elements[nbElt].name !== undefined)
			{
				
				if (dataObj.elements[nbElt].value.indexOf("&") > -1)
				{
					this.params += "&" + dataObj.elements[nbElt].name + "=" + encodeURIComponent(dataObj.elements[nbElt].value);
				}
				else
				{
					this.params += "&" + dataObj.elements[nbElt].name + "=" + dataObj.elements[nbElt].value;
				}
			
				//if (document.encodeURIComponent)
				//{
					
				//}
				
			}
			
		}
	
		return checkForm(dataObj);
	}  
 	
 	
 	
 	
 	this.LoadContent_noTurnOffTimer = function (TAGID)
	{
		// 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();
		}

        
self_httpRequest = this;
        
		self_httpRequest.xmlHttp.onreadystatechange = function()
		{
			if (self_httpRequest.xmlHttp.readyState == 4) 
			{
				if (self_httpRequest.gestionStatus)
				{
					var objMain=document.getElementById(TAGID);
					
					if (objMain)
					{
						objMain.innerHTML = self_httpRequest.xmlHttp.responseText;
						
					}
				}
			}
		}
	}
 	
 	
 	this.LoadContentIn = function(objMain,waitingMsg,MoreAction) 
 	{
 	// Récupération du message d'attente
		this.waitingMsg = waitingMsg;
		
		if (this.waitingMsg.length > 5)
		{this.ShowWaitingMessage(this.waitingMsg)} 
		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}
 
        self_httpRequest = this;
	
        if (this.asynchrone)
        {
		    this.xmlHttp.onreadystatechange = function()
		    {
			    if (self_httpRequest.xmlHttp.readyState == 4) 
			    {
    	
				    if (self_httpRequest.gestionStatus)
				    {
					    if (self_httpRequest.waitingMsg.length > 5)
					    {self_httpRequest.hideWaitingMessage()}
    					
					  
					    if (objMain)
					    {
    						
						    objMain.innerHTML = self_httpRequest.xmlHttp.responseText;
    						
					    }
					    eval(MoreAction);
					    initXHR(); 
				    }
			    }
		    }
		}
		else
		{
		 if (self_httpRequest.gestionStatus)
				    {
					    if (self_httpRequest.waitingMsg.length > 5)
					    {self_httpRequest.hideWaitingMessage()}
    					
					    
					    if (objMain)
					    {
    						
						    objMain.innerHTML = self_httpRequest.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.LoadContent = function(TAGID,waitingMsg,MoreAction) 
	{
		// Récupération du message d'attente
		this.waitingMsg = waitingMsg;
		
		if (this.waitingMsg.length > 5)
		{this.ShowWaitingMessage(this.waitingMsg)}

		// Préparation de l'envoi en fonction de la method !
		if (this.method == "GET")
		{
			this.sendGetReq();
		}
		else
		{
			this.sendPostReq();
		}
 
        self_httpRequest = this;
	
        if (this.asynchrone)
        {
		    this.xmlHttp.onreadystatechange = function()
		    {
			    if (self_httpRequest.xmlHttp.readyState == 4) 
			    {
    	
				    if (self_httpRequest.gestionStatus)
				    {
					    if (self_httpRequest.waitingMsg.length > 5)
					    {self_httpRequest.hideWaitingMessage()}
    					
					    var objMain=document.getElementById(TAGID);
					    if (objMain)
					    {
    						
						    objMain.innerHTML = self_httpRequest.xmlHttp.responseText;
    						
					    }
					    eval(MoreAction);
					    initXHR(); 
				    }
			    }
		    }
		}
		else
		{
		 if (self_httpRequest.gestionStatus)
				    {
					    if (self_httpRequest.waitingMsg.length > 5)
					    {self_httpRequest.hideWaitingMessage()}
    					
					    var objMain=document.getElementById(TAGID);
					    if (objMain)
					    {
    						
						    objMain.innerHTML = self_httpRequest.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.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();
		}

		self_httpRequest = this;


		self_httpRequest.xmlHttp.onreadystatechange = function()
		{eval(withFunction)(self_httpRequest, 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();
		}



        self_httpRequest = this;
		
        if (this.asynchrone)
        {
		    this.xmlHttp.onreadystatechange = function()
		    {
			    if (self_httpRequest.xmlHttp.readyState == 4) 
			    {
    	
				   if (self_httpRequest.gestionStatus)
				    { 
					    eval(self_httpRequest.xmlHttp.responseText);
    					
					    eval(MoreAction);
					    initXHR();
				    }
			    }
		    }
		}
		else
		{
		    if (self_httpRequest.gestionStatus)
				    {
					    eval(self_httpRequest.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();
		}


		self_httpRequest = this;
		
		self_httpRequest.xmlHttp.onreadystatechange = function()
		{
			if (self_httpRequest.xmlHttp.readyState == 4) 
			{
				
				if (self_httpRequest.gestionStatus)
				{	
					eval(MoreAction);
				}
			}
		}
		
	}
	
	
	/* ################################################################################################
	* Affiche un message d'attente pendant qu'une recherche est effectuée de maniere asynchrone 
	* ################################################################################################ */
	this.ShowWaitingMessage= function(message)
	{
		if (document.getElementById("overlay_white"))
		{this.hideWaitingMessage()}
	
	
		// récupération du body
		var elmt_Body = document.getElementsByTagName("body").item(0); // récupération
		
		// création du div qui va "cacher" un peu tout
		var elmt_divObscure = document.createElement("div");
		elmt_divObscure.setAttribute("id","overlay_white");// on lui ajoute une belle Id ;)
		elmt_divObscure.className = "overlay_for_hidden waitingColor";
		
		var elmt_divToWrite = document.createElement("div");
		elmt_divToWrite.setAttribute("id","overlay_white_write")
		elmt_divToWrite.className = "overlay_to_write";
		elmt_divToWrite.style.position = "absolute";
		
		// écriture de l'image
		var elmt_imgWaiting = document.createElement("img");
		
		
		// SI ON DOIT CACHER SEULEMENT UN ELEMENT !
		if (this.idElmt_forWaitingMsg.length > 0)
		{
			forElmt = document.getElementById(this.idElmt_forWaitingMsg)
			
			var topAndLeft = findPos(forElmt)
			
			elmt_imgWaiting.setAttribute("src", "/_assets/i/download.gif");
			elmt_divToWrite.style.top = topAndLeft[1] + "px";
			elmt_divToWrite.style.left = topAndLeft[0] + "px";
			
			elmt_divObscure.style.top = topAndLeft[1] + "px";
			elmt_divObscure.style.left = topAndLeft[0] + "px";
					
			elmt_divToWrite.style.height = forElmt.offsetHeight  +"px";
			elmt_divToWrite.style.width = forElmt.offsetWidth + "px";
			
			elmt_divObscure.style.height = forElmt.offsetHeight  +"px";
			elmt_divObscure.style.width = forElmt.offsetWidth + "px";
		}
		else
		{
			elmt_imgWaiting.setAttribute("src", "/ds/i/loading.gif");
	 		nv_dimensionAndScroll = new structure_dimensionAndScrol();

			elmt_divToWrite.style.top = (nv_dimensionAndScroll.height / 3) + nv_dimensionAndScroll.scroll_y + "px";
			elmt_divToWrite.style.left = "0px";
			elmt_divToWrite.style.height =  nv_dimensionAndScroll.max_height - (nv_dimensionAndScroll.height / 3) + nv_dimensionAndScroll.scroll_y + "px";
			elmt_divToWrite.style.width  = nv_dimensionAndScroll.max_width + "px";
			
			elmt_divObscure.style.height = nv_dimensionAndScroll.max_height + "px";
			elmt_divObscure.style.width = nv_dimensionAndScroll.max_width + "px";
			
			// Il va falloir positioner contenablement not "image d'attente"
		}
		
		
		var elmt_divContent = document.createElement("div"); // création
		elmt_divContent.className = "waitingMessage";// on lui ajoute une belle Id ;)
		
		elmt_divContent.innerHTML = message ; // <img src='/i/loading.gif'>	

		elmt_Body.appendChild(elmt_divObscure);
		elmt_Body.appendChild(elmt_divToWrite);
		elmt_divToWrite.appendChild(elmt_imgWaiting);;
		elmt_divToWrite.appendChild(elmt_divContent)

		setOpacity(elmt_divObscure, 60);
	}


	/* ####################################################################################### */
	this.hideWaitingMessage = function()
	{
		if (! document.getElementById("overlay_white")) return false;
	
		var topAndLeft = [0,0];
		var widthAndHeight = [0,0];
		
		var forElmt = document.getElementsByTagName('body')
		if (this.idElmt_forWaitingMsg.length > 0)
		{
			forElmt = document.getElementById(this.idElmt_forWaitingMsg)
			
			var topAndLeft = findPos(forElmt)
		//	document.getElementById(this.idElmt_forWaitingMsg).removeChild(document.getElementById('overlay_white'))	
		}
		
		document.getElementsByTagName('body').item(0).removeChild(document.getElementById('overlay_white'))	
		document.getElementsByTagName('body').item(0).removeChild(document.getElementById('overlay_white_write'))	
		
	}
	this.createRequestObject();
}




