//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;
}


//Fonction qui effectue une requete HTTP
// - url : l'url du fichier php contenant la requete a executer
// - fonction_nom : le nom de la fonction javascript qui permettra d'interpreter le resultat
// - parametres : une chaine concatenee (ex : nom_var1=valeur1&nom_var2=valeur2) de donnees a passer a la requete
function HttpRequest(url , fonction_nom , parametres , id_champ)
{
	var obj_http = getHTTPObject();
	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);			
		}
		
		obj_http.onreadystatechange = function () {reponse=HttpResponse("text",obj_http); if (reponse!=false) fonction_nom(reponse , id_champ);}
}


//Fonction qui effectue une requete HTTP
// - url : l'url du fichier php contenant la requete a executer
// - fonction_nom : le nom de la fonction javascript qui permettra d'interpreter le resultat
// - parametres : une chaine concatenee (ex : nom_var1=valeur1&nom_var2=valeur2) de donnees a passer a la requete
function HttpRequestExtd(url , fonction_nom , parametres , id_champ , type)
{
	var obj_http = getHTTPObject();
	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);			
		}
		
		obj_http.onreadystatechange = function () {reponse=HttpResponse(type,obj_http); if (reponse!=false) fonction_nom(reponse , 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.responseXML;
	    }
	  	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 HttpDefaut() 
{

}

//Fonction Javascript appelée automatiquement en réponse à une requete XMLHttpRequest dans le cas default
function DefaultAction(reponse , id_champ)
{
	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(reponse , id_champ)
{
	window.opener.document.getElementById(id_champ).innerHTML = reponse;
	window.close();
}


/** 
* Transforme un formulaire en un objet Javascript contenant le nom des champs 
* ainsi que pour chacun leur(s) valeur(s). Est prévu pour gérer les champs de type radio ,
* checkbox , listbox (avec choix multiples possibles) en les traitant uniquement
* dans le cas ou au moins une valeur a été spécifiées pour un élément de formulaire.
* Ne traite pas les éléments de type submit , reset ou button.
* 
* @En entree : prend l'id du formulaire a traiter
*
* @Retourne un objet JavaScript avec une propriété pour chaque champ du formulaire à soumettre.
* La valeur de chaque propriété de l'objet est un tableau contenant une ou plusieurs valeurs à soumettre */
function getFormValuesAsMap(id_form) 
{
	var params = new Object();
	var inputs = document.getElementById(id_form).elements;
	
	for (var i=0; i<inputs.length; i++) 
	{
		var input = inputs[i];
		if (input.type == "radio" || input.type == "checkbox") 
		{
			//Cas des radios et checkboxes, ne les traite que s'ils sont checked
			if (input.checked == true) 
			{                
				if (params[input.name] == null) 
				{
					params[input.name] = new Array();
				}
				params[input.name].push(input.value);
			}
		}
		else if (input.type == "select-multiple") 
		{
			//Cas des Select multiple
			for (var j=0; j<input.options.length; j++) 
			{
				if (input.options[j].selected == true) 
				{                    
					if (params[input.name] == null) 
					{
						params[input.name] = new Array();                    
					}
					params[input.name].push(input.options[j].value);
				}
			}
		}
		else if (input.type == "submit" || input.type == "button" || input.type == "reset") 
		{
			//On exclue les submit , reset , button
		}
		else if (input.name != undefined && input.value != undefined) 
		{
			//On traite tous les autres cas : text , hidden , textarea ...
			if (params[input.name] == null) 
			{
				params[input.name] = new Array();            
			}
			params[input.name].push(input.value);
		}
	}   
	return params;
}

/** 
* Retourne la query string contenant tous les champs avec que leur valeur d'un formulaire
* à soumettre.
* Chaque valeur est encodee avant d'etre ajoutée à la query string.
* 
* @En entree : prend l'id du formulaire a traiter
*
* @Retourne une query string  */
function getQueryString(id_form) 
{    
	var params = getFormValuesAsMap(id_form);    
	var queryString = "";    
	for (var name in params) 
	{        
		var values = params[name];        
		for (var i=0; i<values.length; i++) 
		{            
			queryString += "&" + name + "=" + encodeURIComponent(values[i]);        
		}    
	}    
	return queryString;
}
