/*********************************************************************************************************************
*																						*
*	Programmeur :		Daniel Rioux															*
*	Date de création :		12 Septembre 2008														*
*	Objet :			Classe Ajax																*
*																						*
*	Description :		Classe AJAX permettant d'envoyer des requêtes HTTP post et get au serveur web.				*
*					Utile pour mettre à jour les informations d'une page sans la recharger.						*
**********************************************************************************************************************/
function clsAJAX()
{
	this.Post = sendHttpPOST;			//Paramètres : Script serveur, Variable POST, VALEUR POST, Synchrone ou pas
	this.Get = sendHttpGET;				//Paramètres : Script serveur, Variable GET, VALEUR GET, Synchrone ou pas
	
	//Note : Synchrone vs. Asynchrone
	// Synchrone (true) : AJAX attend que le script serveur retorune les données avant de passer la main à la prochaine instruction.
	// Asynchrone(false) : N'Attends pas une réponse du serveur et poursuit le cours du programme.
	
	var XmlData = null;
	var XmlResponse = xmlRequest();
	var XmlResult;
	
	//Fonction qui crée une instance 
	function xmlRequest()
	{
		var HttpRequest = false;	//Objet xmlHttpRequest
		
		//--------------------------------Création d'une nouvelle instance-----------------------------------
		
		if (window.XMLHttpRequest)	//Mozilla
		{
			HttpRequest = new XMLHttpRequest();
		}
		else if (window.activeXObject)	//Micro$oft
		{
			try
			{
				HttpRequest = new ActiveXObject("msxml2.XMLHTTP");	//IE7
			}
			catch(e)
			{
				try
				{
					HttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); //IE5 & 6
				}
				catch(e) 
				{
					//Navigateur incompatible
					HttpRequest = false;
				}
			}
			
		}
		
		return HttpRequest;
	}

	//Fonction envoyant les requêtes au serveur. 

	// -HttpObj est l'instance, 
	// - Handler est la fonction de retour permettant de traiter les réponses du serveur
	// - Method est le type de requête au serveur (GET,POST,HEAD,PUT,DELETE)
	// - File est le fichier visé par la requête
	// - Sync est le synchrone ou asynchrone. False pour synchrone, true pour asynchrone.
	// - Data est, dans le cas d'une requete de type POST, les informations à soumettre au fichier visé sur le serveur http.
	// La syntaxe est comme ceci : param1=value1&param2=value2
	function xmlGetResult(HttpObj,Handler,Method,File,Sync,Data)
	{
		//Mozilla
		if (navigator.appName != "Microsoft Internet Explorer")
		{

			HttpObj.open (Method,File,Sync);
			
			HttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			switch (Handler)
			{
				case "text" :
					
					HttpObj.onreadystatechange = text(HttpObj);
					
				break;
				
				case "xml" :
				
					HttpObj.onreadystatechange = xml(HttpObj);
					
				break;
			}
			HttpObj.send(Data);
			
			return HttpObj;
		}
		else
		{
			
			
			HttpObj.open (Method,File,Sync);
			HttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			
			HttpObj.send(Data);
			switch (Handler)
			{
				case "text" :
					
					HttpObj.onreadystatechange = text(HttpObj);
					
				break;
				
				case "xml" :
				
					HttpObj.onreadystatechange = xml(HttpObj);
					
				break;
			}
			
			return HttpObj;
			
		}

	}

	//Fonction qui traite les réponses texte du serveur http
	function text(HttpRequest)
	{
		
		//État de traitement terminé
		if (HttpRequest.readyState == 4)
		{
			//status de requête serveur HTTP_OK
			if (HttpRequest.status == 200) 
			{
				
				return HttpRequest.responseText;
			}
			else
			{
				window.alert("Erreur # " + HttpRequest.status);
			}
			
		}

	}
	
	//Envoi une requête POST au serveur HTTP
	function sendHttpPOST(File,PostVar,PostValue,Sync)
	{
		
		if (XmlResponse == false)
		{
			Msg = MSG_INCOMPATIBLE_HTTP_BROWSER;
			
			return Msg;
		}
		else
		{
			if (typeof(PostVar) != "string")
			{
				for (var i = 0 ; i < PostVar.length ; i++)
				{
					if (XmlData == null)
					{
						if (i < (PostVar.length -1))
						{
							XmlData = PostVar[i] + "=" + PostValue[i] + "&";
						}
						else
						{
							XmlData = PostVar[i] + "=" + PostValue[i];
						}
					}
					else
					{
						
						if (i < (PostVar.length -1))
						{
							XmlData += PostVar[i] + "=" + PostValue[i] + "&";
						}
						else
						{
							XmlData += PostVar[i] + "=" + PostValue[i];
						}
					}
				
				}
			}
			else
			{
				XmlData = PostVar + "=" + PostValue;
			}
			
			XmlResult = xmlGetResult(XmlResponse,"text","POST",File,Sync,XmlData);
			
			return XmlResult.responseText;
		}

	}
	
	function sendHttpGET (File,GetVar,GetValue,Sync)
	{
		if (XmlResponse == false)
		{
			Msg = MSG_INCOMPATIBLE_HTTP_BROWSER;
			
			return Msg;
		}
		else
		{
			XmlResult = xmlGetResult(XmlResponse,"text","GET",File + "?" + GetVar + "=" + GetValue,Sync,XmlData);
		
			return XmlResult.responseText;
		}
	
	}
}