//On definit une variable qui va servir de cache
var cache = new Array();

//Fonction qui instancie un objet XMLHttpRequest en s'adaptant au navigateur du surfeur
function getHTTPObject() 
{
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	try 
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} 
	catch (e) 
	{
		try 
	  {
	  	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } 
	  catch (E) 
	  {
	  	xmlhttp = false;
	  }
	}
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
	{
	  xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

function HttpRequest(url , fonction_nom , parametres , id_champ)
{	

		var argv = HttpRequest.arguments;
		var argc = argv.length;

		var obj_http = getHTTPObject();
		//on enregistre dans le tableau l'URL appelé
		if(cache[url] == undefined || argc<5)
		{
			cache[url] = 'pas_reponse';	

			obj_http.open("POST", url, true);
			if (parametres!='')
			{
				obj_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
				obj_http.send(parametres);
			}
			else
			{
	
				obj_http.send(null);			
			}
			
			if (fonction_nom=="DefaultAction")
			{
				obj_http.onreadystatechange = function () {DefaultAction(obj_http , id_champ)};
			}
			else
			{
				obj_http.onreadystatechange = function () {fonction_nom(obj_http , id_champ)};
			}
	}
}


//Fonction qui recoit la reponse a une requete precedemment envoyée
// - type : définit le type de la réponse attendue renvoyée par l'objet XMLHttpRequest (la chaine de résultat, l'etat de l'objet, le code d'erreur ....)
function HttpResponse(type , obj) 
{

	switch (type)
	{
	  case 'readyState':
	    results = obj.readyState;
	  break;
	  
	  case 'text':
	  	if (obj.readyState == 4) 
		{
	  		//on effectue l'equivalent d'un trim() en JS pour supprimer tout caractere special en debut de chaine
	  		results =  obj.responseText.replace(/(^\s*)|(\s*$)/g, "");
	  	}
	  	else
	  	{	
	  		results = false;
	  	}
	  break;
	  
	  case 'xml':
	 	  if (obj.readyState == 4) 
			{
	      results = obj.respondeXML;
	    }
	  	else
	  	{	
	  		results = false;
	  	}
	  break;
	  
	  case 'status':
	    results = obj.status;
	  break;
	   
	  case 'onreadystate':
	    results = obj.onreadystate;
	  break;
	  
	  case 'statusText ':
	    results = obj.onreadystate;
	  break;
	  
	}
	return results;
}


//Fonction ne réalisant aucun traitement à appeler lorsque l'on veut réaliser une requete HTTPRequest qui ne doit rien faire en retour
//par ex lorsqu'une requete HTTPRequest va faire un insert en base ou lorsqu'une requete HTTPRequest va modifier une variable de session
function HttpDefault(obj , str) 
{

}

//Fonction Javascript appelée automatiquement en réponse à une requete XMLHttpRequest dans le cas default
function DefaultAction(obj, id_champ)
{

	reponse = HttpResponse("text",obj);	

	if (reponse!=false)
	{
		document.getElementById(id_champ).innerHTML = reponse;
	}
}

//Fonction Javascript appelée automatiquement en réponse à une requete XMLHttpRequest dans le cas default pour un dialogue popup/opener
function DefaultActionOpener(obj, id_champ)
{
	reponse = HttpResponse("text",obj);	

	if (reponse!=false)
	{
		window.opener.document.getElementById(id_champ).innerHTML = reponse;
		window.close();
	}
}

