/*******************************************************************************
*     Lance une requête httpRequest et récupère le résultat sous forme 
*     Soit d'un texte, soit un objet XML
*     @param url 		string 	=>fournit l'url du CGI à appeler
*     @param param 		string	=>fournit les paramètres à transmettre au CGI
*     @param resultID 	string 	=> fournit l'ID où insérer le résultat dans le cas d'une chaine en retour
*	  @param method		string	=> soit GET ou POST
*	  @param xml		string	=> soit 'XML', soit 'TEXT' pour définir le mode d'exécution
*
*     @return strig ou objet XML
*/
    function makeRequest(url, param, resultID, method, xml) {

        //var http_request = false;
        http_request = false;	// http_request doit être défini en global par this.http_request

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // Voir la note ci-dessous à propos de cette ligne
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
		//----------- Recuppère la réponse du serveur et lui indique la fonction
		//----------- qui exécutera le traitement
        http_request.onreadystatechange = function() { 
        	//Désigne la fonction qui sera lancée quand les données seront retournées
        	alertContents(http_request, resultID, xml); };
        if(method.toUpperCase() == 'GET')
        	http_request.open('GET', url, true);
		else{ 	
        	http_request.open('POST', url, true); //Valeur implicite
			// en cas d'utilisation de la méthode POST il faut modifier le header comm suit :
			http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
		}
		//-------- Liste des paramètres complémentaires sous la forme "nom=valeur&autrenom=autrevaleur&ainsi=desuite"
        http_request.send(param);

    }
	//----------- Fonction désignée par "http_request.onreadystatechange"
    function alertContents(http_request, resultID, xml) {
    	try{
		//liste des valeurs possibles
		/*Voici la liste complète des valeurs de readyState :
		----------------------------------------------------
		    * 0 (non initialisée)
		    * 1 (en cours de chargement)
		    * 2 (chargée)
		    * 3 (en cours d'interaction)
		    * 4 (terminée) , seule cette valeur à un sens du fait de l'asynchronisme*/
	        if (http_request.readyState == 4) {
	            if (http_request.status == 200) {
	            	if(xml.toUpperCase() == 'XML'){ //Est-ce une demande XML ?
	            		var xml = http_request.responseXML;
	            		var root = xml.documentElement;
	            		//Dans le cas d'une réponse XML on se contente de retourner la racine de l'objet document
	            		return(root);
	            	}else{         	
	    			  	//Cas d'un retour sous forme d'une chaîne de caractères
		                var doc = http_request.responseText;
		                var div_result = document.getElementById(resultID);
		                if(doc != "")
							div_result.innerHTML = doc;
	            	}
	            } else {
	                alert('Un problème est survenu avec la requête.');
	            }
	        }
	    } catch(err){
	    	alert("Le serveur paraît indsiponible "+
	    		  "pour cette application. Veuillez "+
	    		  "réessayer dans un instant. \nErreur : " + err.message);
	    }
    }