// variable booleenne nous permettant de savoir si une requete AJAX est en cours.
var isAjaxRequestActive = false;


/** 
 --> Lance une requete AJAX en mode asynchrone qui permet d'invoquer une page distante et d'en recuperer le contenu.
 	- ajaxPage = url de la page a invoquer
 	- params = chaine de parametre a passer a la page
 	- objectToReload = nom complet du composant de la page cliente a recharger avec le code source html renvoye par la page invoquee
 	- innerOrOuter = "INNER" si c'est le innerHTML du composant qu'il faut recharger
 					 "OUTER" si c'est le outerHTML.
 					 La valeur du innerOrOuter est fonction du type de composant et de la structure de la page invoquee.
 	- evalJS = True si vous desirez executer du code js apres le chargement de la page.
 					(Dans ce cas, completez la fonction js runAfterAjaxReload en spécifiant la page invoquee (ajaxPage).)
 			   False sinon. 
--> ===POUR=== : permet de relaoder un bloc en déportant la mise en page coté serveur
--> ==CONTRE== : le flux de données qui passe par la bande est plus important, donc à utiliser avec précautions
*/
function runAjaxReloadPage(ajaxPage, params, objectToReload, innerOrOuter, evalJS) {
	//alert('runAjaxReload >>> lancement de la requete asynchrone');	

	var xhr_object = null;
			
   	if(window.XMLHttpRequest) // Firefox
      	xhr_object = new XMLHttpRequest();
   	else if(window.ActiveXObject) // Internet Explorer
      	xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   	else { // XMLHttpRequest non supporte par le navigateur
      	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
      	return;
   	}
   	
   	if (isAjaxRequestActive) {
   		xhr_object.abort();
   		//alert ("precedente requete avortee");
   	}
   	
   	xhr_object.open("POST", ajaxPage, true);
   	
   	xhr_object.onreadystatechange = 
	   			function() {
					if(xhr_object.readyState == 4) {
						//eval(xhr_object.responseText); // cas ou la page reverrai un code JS a executer
						
						isAjaxRequestActive = false;
						         
				        if (xhr_object.status=="200") {				        	 
					         myResponse = xhr_object.responseText;
					         if (myResponse!=null && myResponse!="undefined") 
					         {
					         	var pos1 = myResponse.indexOf("BEGIN_AJAX", 0) + "BEGIN_AJAX".length;
					         	var pos2 = myResponse.indexOf("END_AJAX", pos1);
					         	var newHtmlCode = myResponse.substring(pos1, pos2); 
					         	//alert(newHtmlCode);
					         	
					         	if (innerOrOuter=="INNER")
					         		document.getElementById(objectToReload).innerHTML = newHtmlCode;
					         	else if (innerOrOuter=="OUTER")
					         		document.getElementById(objectToReload).outerHTML = newHtmlCode;
					         		
					         	if (evalJS)
					         		runAfterAjaxReload(ajaxPage);								         	
					         }	
					    }
					}						         
				}
				
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr_object.send(params);
	isAjaxRequestActive = true;	
}


// ----------------- Spécif éventimmo -------------------
// lance les fonction javascript necessaire a l'affichage de la page fromAjaxPage appelee via runAjaxReloadPage()
// fromAjaxPage = page chargee avec la fonction runAjaxReloadPage
/*
function runAfterAjaxReload(fromAjaxPage)
{
	if (fromAjaxPage == (applicationContext+"/faces/protected/navigation/ajax_navigation_fax.jsp"))
	{	
		//fonction de navigation.js
		//permet d'afficher le (...) dans le panel si il y a de 3 fax dans la liste
		affichageSuiteFax();
	}else
		alert("on vient de la page:"+fromAjaxPage);
}
*/


/**
* Invoque une page en mode Asynchone puis exécute le résultat JS renvoyé par cette page
*/
function runAjaxAndEval(ajaxPage, params) 
{	
	var xhr_object = null;
			
   	if(window.XMLHttpRequest) // Firefox
      	xhr_object = new XMLHttpRequest();
   	else if(window.ActiveXObject) // Internet Explorer
      	xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   	else { // XMLHttpRequest non supporte par le navigateur
      	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
      	return;
   	}
   	
   	if (isAjaxRequestActive) {
   		xhr_object.abort();
   		//alert ("precedente requete avortee");
   	}
   	
   	xhr_object.open("POST", ajaxPage, true);
   	
   	xhr_object.onreadystatechange = 
	   			function() {
					if(xhr_object.readyState == 4) {
						isAjaxRequestActive = false;
						eval(xhr_object.responseText);
					}						         
				}
				
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
	xhr_object.send(params);
	isAjaxRequestActive = true;	
}

/**
* permet de lancer une requete Ajax en mode synchro ou asynchrone juste en invoquant la servlet (pas besoin de créer une vari page jsp ou html)
* renvoie true si le traitement s'est exécuté
* Attention si une page est invoquée, son rendu ne sera pas interprété ==> utiliser runAjaxAndEval pour cela
* boolean asynchrone : true si traitement asynchrone, false sinon. ATTENTION !!! --> en mode asynchrone le résultat renvoyé sera systématiquement false
*/
function runAjaxRequest(asynchrone, ajaxPage, params) 
{	

	var isDone = false;
	var xhr_object = null;
			
   	if(window.XMLHttpRequest) { // Firefox
      	xhr_object = new XMLHttpRequest();
   	}
   	else if(window.ActiveXObject) // Internet Explorer
      	xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   	else { // XMLHttpRequest non supporte par le navigateur
      	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
      	return;
   	}
   	
   	if (isAjaxRequestActive) {
   		xhr_object.abort();
   	}
   	
   	xhr_object.open("POST", ajaxPage, asynchrone);
   	
   	xhr_object.onreadystatechange = 
	   			function() {
					if(xhr_object.readyState == 4) {
						isAjaxRequestActive = false;
						eval(xhr_object.responseText);
						isDone = true;
					}					         
				};
				
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
	xhr_object.send(params);

	if (navigator.appName == 'Netscape' && asynchrone == false)
	{
		eval(xhr_object.responseText);
		isDone = true;
	}
	
	isAjaxRequestActive = true;
	return isDone;
}


/**
*	Combinée à partage/js/addonYui.js cette fonction permet d'afficher le contenue d'une page invoquée en Ajax dans une div
*	(comme une popup mais en plus esthétique)
*/
function showYuiAjaxMessage(ajaxPage, params, message, config) 
{	
	affichMessage(message, config);
				
	var xhr_object = null;
			
   	if(window.XMLHttpRequest) // Firefox
      	xhr_object = new XMLHttpRequest();
   	else if(window.ActiveXObject) // Internet Explorer
      	xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   	else { // XMLHttpRequest non supporte par le navigateur
      	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
      	return;
   	}
   	
   	if (isAjaxRequestActive) {
   		xhr_object.abort();
   		//alert ("precedente requete avortee");
   	}
   	
   	xhr_object.open("POST", ajaxPage, true);
   	
   	xhr_object.onreadystatechange = 
	   			function() {
					if(xhr_object.readyState == 4) {
						isAjaxRequestActive = false;
						alertMessage0001.setBody(xhr_object.responseText);
					}						         
				}
				
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
	xhr_object.send(params);
	isAjaxRequestActive = true;	
}

/**
*	Combinée à partage/js/addonYui.js cette fonction permet d'afficher le contenue d'une page invoquée en Ajax dans un tool tip
*/
function showYuiToolTipAjaxMessage(ajaxPage, params, divId) 
{               
    var xhr_object = null;     
    if(window.XMLHttpRequest) // Firefox
        xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
        xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporte par le navigateur
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
        return;
    }
    
    xhr_object.open("POST", ajaxPage, true);
    xhr_object.onreadystatechange = function() {
        if(xhr_object.readyState == 4) {     
        	addLargeToolTip(divId, xhr_object.responseText);
        }  
    }                               

    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
    xhr_object.send(params);        
}  


/**
*Execute la fonction handler passee en parametre (sur les objet xhr_object et json passes en parametres) apres execution de la requete ajax
*@ajaxPage url de la page a invoquer
*@params parametres pour la page
*@handler fonction appele au retour de la page fun(obj1 XXX, obj2 JSon); ou obj1 est le resultat renvoyé par le serveur.
*@handlerParams parametre de la fonction en jSon
*/
function runAjax(ajaxPage, params,handler,handlerParams){
	var xhr_object = null;
   	if(window.XMLHttpRequest) // Firefox
      	xhr_object = new XMLHttpRequest();
   	else if(window.ActiveXObject) // Internet Explorer
      	xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   	else { // XMLHttpRequest non supporte par le navigateur
      	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest! Contactez votre administrateur.");
      	return;
   	}
	xhr_object.open("POST", ajaxPage, true);
   	xhr_object.onreadystatechange = function(){
		if(xhr_object.readyState == 4) {
			handler(xhr_object,handlerParams);
		}						         
	}
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=ISO-8859-1");
	xhr_object.send(params);
}


/**
 * La fonction suivante permet de créer de façon dynamique un bout de code javascript
 * 
 * Exemple : <script src > ... code java script qui va être générer de façon dynamique ... </script>
 * 
 * @param src 
 * @param varName
 * @param callback
 * @return
 */
function getCrossDomainVar(src, varName, callback) {
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', src);
    
    if (callback) {
        wait_for_script_load(varName, callback.success, callback.fail);
    }
    
    var head = document.getElementsByTagName('head')[0];
    if (head) {
        head.appendChild(s);
    } else {
        document.body.appendChild(s);
    }
}

/**
 * fonction qui permet d'attendre la réponse du serveur et au bout de n secondes on  fait appel à callBack.fail.... 
 * 
 * @param varName
 * @param callback
 * @return
 */
function wait_for_script_load(varName, callback, callbackFail) {
    var timeout = 10000; //10 secondes
    var interval = setInterval(function() {
        if (eval("typeof " + varName) != 'undefined' && eval(varName) != null) {
            clearInterval(interval);
            callback();
        }
        timeout -= 50;
        if (timeout <= 0) {
            clearInterval(interval);
            callbackFail();
        }
    }, 50);
}

/**
 * fonction utile pour faire un appel web service à un json;
 * 
 * @param url : url du webservice
 * @param methodSuccess : le nom de la méthode à exécuter si la valeur de retour du web service est bon 
 * @param methodFail : le nom de la méthode à exécuter si la valeur de retour du web service n'est pas bon
 * @param msg404 : message à afficher si l'url du webservice n'est pas correcte
 * 
 */
function callJsonWebService(url,methodSuccess,methodFail,msg404)
{
    var callback = {};
    callback.success = function() {
        if (retour.status == "success")
        {
        	methodSuccess(retour.result);             
        }
        else
        {
        	methodFail(retour.errors);
        }
        retour=null;
    }
    // c'est dans le cas ou on arrive pas à charger l'url
    callback.fail = function() {
        retour=null;
        alertMessage (msg404);
    }
    getCrossDomainVar(url,"retour", callback);
}


