/**
 * Fonction javascript permettant ou facilitant le traitement de requêtes Ajax
 *
 * Fonction documentées :
 * mixed  send_ajax_request(str method, bool asynchronous, str target, [str data, func fonction]) : Envoie une requête ajax et exécute la fonction si passée en paramètre
 * 
 * object GetXmlHttpObject()              : Retourne la ressource nécessaire à l'exécution de requêtes Ajax
 **/

/**
 * Envoie une requête ajax et exécute la fonction si passée en paramètre
 * Paramètres : str method, bool asynchronous, str target, str data, str flag
 * Retourne   : str ou void, ou bool
 **/
function send_ajax_request(method, asynchronous, target, data, flag) {
  var xmlHttp = GetXmlHttpObject();
  if(xmlHttp == null) return false;
  else {
		if((method != 'GET')&&(method != 'POST')) {
			switch(method) {
				case 'get'  : method = 'GET';  break;
				case 'post' : method = 'POST'; break;
				default : return false;
			}
		}
		if(target == '') return false;
		if(data == '') data = null;
		
		//Fail safe pour SID
		if((target.indexOf("&sid=") < 0)&&(target.indexOf("&sid=") < 0)) {
			if(target.indexOf("?") < 0) target += "?sid="+Math.random();
			else target += "&sid="+Math.random();
		}
		
    if(asynchronous == true) {
	    xmlHttp.onreadystatechange = function() {
	      if((xmlHttp.readyState == 4)&&(xmlHttp.responseText != flag)) alert("Une erreur est survenue lors de l'exécution d'une requête sur le serveur.\n\nInformation de débogage :\n\nFichier cible : "+target+"\nParamètres : "+data+"\nRéponse du serveur : "+xmlHttp.responseText);
			};
		}
		xmlHttp.open(method,target,asynchronous);
		if(method == 'POST') {
			xmlHttp.setRequestHeader('Cache-Control', 'no-cache');
			xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
			xmlHttp.setRequestHeader('Content-length', (data == null?0:data.length));
			//xmlHttp.setRequestHeader('Connection', 'close');
		}
		xmlHttp.send(data);
		if(asynchronous == false) return xmlHttp.responseText;
  }
}

/**
 * Ne pas toucher
 **/
function GetXmlHttpObject(){
  var objXMLHttp = null;
  if (window.XMLHttpRequest){
		try { objXMLHttp = new XMLHttpRequest(); }
		catch(e) { objXMLHttp = false; }
	}
	else {
		if(window.createRequest) {
			try { objXMLHttp = new window.createRequest(); }
			catch(e) { objXMLHttp = false; }
    }
		else {
			if(window.ActiveXObject) {
        try { objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
				catch(e) {
					try { objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
					catch(e) { objXMLHttp = false; }
				}
			}
		}
	}
	return objXMLHttp;
}
