
//Fonction d'initialisation de l'objet XMLHttpRequest
function initialisationRequeteHTTP() {
	var httpRequest = null;
    if (window.XMLHttpRequest) {			// Mozilla, Safari
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
    	    httpRequest.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) {		// IE
        try {
        	httpRequest  = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
	            httpRequest  = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
				httpRequest = null;
			}
		}
    }else { // XMLHttpRequest non supporté par le navigateur
		alert("Votre navigateur ne permet pas d'utiliser cette fonctionnalité...");
 		httpRequest = null;
 	}
	return httpRequest;
}


function getReponseXmlAjax(url,donnees){
 	//Création de la requete XML Http
	var requeteHttp = initialisationRequeteHTTP();
	if (requeteHttp == null){
		alert('Impossible de créer une requête HTTP.');
		return "";
	}
	//Ouverture de la requete en synchrone
	requeteHttp.open("POST", url, false);
	
	var xmldoc;

	//Gestion du traitement de la réponse pour de l'ASYNCHRONE SEULEMENT
	/*
	requeteHttp.onreadystatechange = function() { 
		//Si l'état de la requete est différent de 4, la réponse n'a pas été recue dans son intégralité
		if (requeteHttp.readyState == 4) { //La réponse a été traitée completement
			if (requeteHttp.status == 200) { //La reponse HTTP est valide	
					if (window.ActiveXObject) {							//Pour IE
						xmldoc = new ActiveXObject("Microsoft.XMLDOM");
						xmldoc.async = false;
						alert(requeteHttp.responseText);
						xmldoc.loadXML(requeteHttp.responseText);
					}else{												//Pour FireFox
						xmldoc = requeteHttp.responseXML;
					}
			} else { //la réponse contient un message d'erreur
				alert('Un problème est survenu avec la requête.\n\n'+requeteHttp.statusText);
			}
		}
	};
	*/
	

	//Dans le cas d'un POST il faut modifier le request Header après ouverture de la requete
	//requeteHttp.setRequestHeader("Method", "POST " + url + " HTTP/1.1"); Ne pas mettre car bloque la requête chez certains clients
	requeteHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

	//Envoi de la requete
	requeteHttp.send(donnees);
	
	if (window.ActiveXObject) {							//Pour IE
		xmldoc = new ActiveXObject("Microsoft.XMLDOM");
		xmldoc.async = false;
		//alert(requeteHttp.responseText);
		xmldoc.loadXML(requeteHttp.responseText);
	}else{												//Pour FireFox
		xmldoc = requeteHttp.responseXML;
	}	

	logErreurJS("[outilAjax.js, function getReponseXmlAjax] \n xml(sous forme de text) = \n"+requeteHttp.responseText);
	
	return xmldoc;
}

function getReponseTextAjax(url,donnees){
 	//Création de la requete XML Http
	var requeteHttp = initialisationRequeteHTTP();
	if (requeteHttp == null){
		alert('Impossible de créer une requête HTTP.');
		return "";
	}
	//Ouverture de la requete en synchrone
	requeteHttp.open("POST", url, false);
	
	var reponseText;

	//Dans le cas d'un POST il faut modifier le request Header après ouverture de la requete
	//requeteHttp.setRequestHeader("Method", "POST " + url + " HTTP/1.1"); Ne pas mettre car bloque la requête chez certains clients
	requeteHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

	//Envoi de la requete
	requeteHttp.send(donnees);
	
	reponseText = requeteHttp.responseText;
	logErreurJS("[outilAjax.js, function getReponseTextAjax] \n resultat = "+reponseText);
	
	return reponseText;
}


//Fonction d'appel au serveur
//url : définir l'url à appeler ('/monoframe/.../action.html')
//typeRequete : prend pour valeur 'POST' ou 'GET'
//données : chaine représentant les paramètres de la reqûete (param1=value1&param2=value2)
//asynchronous : boolean précisant si l'appel ajax est asynchrone (et non synchrone)
//responseText : boolean précisant si la réponse doit se faire en mode text (et non xml)
//functionResultat : nom de la fonction appeler apres avoir reçu la réponse serveur
//activeParametresFunctionResultat : boolean précisant s'il faut utiliser le parametre 'parametresFunctionResultat'
//parametresFunctionResultat : chaine représentant les paramètre de la fonction appeler après avoir reçu la réponse serveur
function appelServeurEnAjax(url,typeRequete,donnees,asynchronous,responseText,functionResultat,activeParametresFunctionResultat,parametresFunctionResultat) 
{
	//Création de la requete XML Http
	var requeteHttp = initialisationRequeteHTTP();
	if (requeteHttp == null)
	{
		alert('Impossible de créer une requête HTTP.');
		return false;
	}

	//Création de l'url complete dans le cas d'un GET
	if (typeRequete == 'GET' && donnees != null) {  
		url = url + "?"+donnees;  
		donnees = null;  
 	}  

	//Ouverture de la requete
	if (asynchronous){
		requeteHttp.open(typeRequete, url, true);
	}else{
		requeteHttp.open(typeRequete, url, false);
	}

	//Gestion du traitement de la réponse
	requeteHttp.onreadystatechange = function() { 
		//Si l'état de la requete est différent de 4, la réponse n'a pas été recue dans son intégralité
		if (requeteHttp.readyState == 4) { //La réponse a été traitée completement
			if (requeteHttp.status == 200) { //La reponse HTTP est valide	
				if(responseText){
					var text = requeteHttp.responseText;
					if (activeParametresFunctionResultat){
						eval(functionResultat+"(text,"+parametresFunctionResultat+")");
					}else{
						eval(functionResultat+"(text)");
					}
				}else{
					var xmldoc;
					if (window.ActiveXObject) {							//Pour IE
						xmldoc = new ActiveXObject("Microsoft.XMLDOM");
						xmldoc.async = false;
						xmldoc.loadXML(requeteHttp.responseText);
					}else{												//Pour FireFox
						xmldoc = requeteHttp.responseXML;
					}
					if (activeParametresFunctionResultat){
						eval(functionResultat+"(xmldoc,"+parametresFunctionResultat+")");
					}else{
						eval(functionResultat+"(xmldoc)");
					}
				}

			} else { //la réponse contient un message d'erreur
				alert('Un problème est survenu avec la requête.\n\n'+requeteHttp.statusText);
			}
		}
	};

	//Dans le cas d'un POST il faut modifier le request Header après ouverture de la requete
	if (typeRequete == 'POST') {
		requeteHttp.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
		requeteHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	}

	//Envoi de la requete
	requeteHttp.send(donnees);
}



function execJS(node) {
	var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
	var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
	var bMoz = (navigator.appName == 'Netscape');
	  var st = node.getElementsByTagName('SCRIPT');
	  var strExec;
	  for(var i=0;i<st.length; i++) {     
	    if (bSaf) {
	      strExec = st[i].innerHTML;
	    }
	    else if (bOpera) {
	      strExec = st[i].text;
	    }
	    else if (bMoz) {
	      strExec = st[i].textContent;
	    }
	    else {
	      strExec = st[i].text;
	    }
	    try {
	      eval(strExec);
	      
	    } catch(e) {
	      //alert(e);
	    }
	  }
}
//Remplacer noeudMessage.firstChild.data par getNodeText(noeudMessage) (corrige bug Firefox 4k XML node limit)
function getNodeText(xmlNode)  {  
	if(!xmlNode) return '';  
	if(typeof(xmlNode.textContent) != "undefined") return xmlNode.textContent;  
	return xmlNode.firstChild.nodeValue;  
}
