/**
* Bibliothèque qui permet d'effectuer des appels asynchrone grâce à XMLHTTPRequest.
* Exemple de code côté client :
<script>
sendRequest('ajax/myAjaxUrl',callback);

function callback(){
	if(httpRequest.readyState == 4){
		if(httpRequest.status!=200){
			alert("Problème : lors de l'appel de l'url. Err : " + httpRequest.status);			
		}else{
			alert("Réponse renvoyée par l'url : " + httpRequest.responseText);
		}	
	}
}
</script>
**/

//sert à la sécurisation des requête Ajax
var token_key = null;

/**
* Référence le token pour qu'il soit implicitement joint aux requêtes Ajax
* (ne sert que si votre code serveur effectue un contrôle de token)
*/
function referenceToken(t){
	token_key = t;
}

function getHttpObject(){
  var xhr=null;
  if(window.XMLHttpRequest) // Firefox et autres
 	 xhr = new XMLHttpRequest();
  else if(window.ActiveXObject){ // Internet Explorer
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e1) {
        xhr = null;
      }
    }
  }
  else { // XMLHttpRequest non support? par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  }
  return xhr;
}


 

var httpRequest = getHttpObject();

/**
* <p>Fonction qui réalise l'appel en méthode Get. l'URL doit donc contenir les paramètres en "queryString"</p>
* <p>La méthode utilise la variable globale httpRequest</p>
* @param url
* 		URL à appeler, avec paramètres éventuels dans la chaînde de requête
* @param function_reponse
* 		Poiteur sur la fonction à appeler lors de la réponse
*/
function sendRequest(url,function_reponse) {
if(httpRequest==null)alert("Problème lié à Internet Explorer. Impossible d'executer la requête Ajax");
	
	//intégration du token à la fin de la querystring
	if(token_key!=null){
		if(url.indexOf('?')!=-1)
			url+='&token='+token_key;
		else
			url+='?token='+token_key;
	}
	httpRequest.onreadystatechange = function_reponse; 
 	httpRequest.open('GET', url);		
	httpRequest.send(null);

}

/**
 * Créé un objet AjaxRequest
 * @param url
 * 		Url à appeler
 * @param method
 * 		méthode HTTP. 'GET' ou 'POST' supporté
 * @param onCompleteFunction
 * 		Fonction callback à appeler (peut être NULL)
 * @param params
 * 		Chaîne contenant les paramètres, type "nom=value&nom2=value2";
 * @return
 * 		L'objet AjaxRequest contruit
 */
function AjaxRequest(url, method, callback_handler, params){
	this.xhr = getHttpObject();
	this.url = url;
	this.callback_handler = callback_handler;
	this.params=params;
	this.method=method;
	return true;
}

/**
 * Gère les requêtes en GET ou en POST
 */
AjaxRequest.prototype.sendRequest = function(){
		if(this.xhr==null)
			alert("Problème lié à Internet Explorer. Impossible d'executer la requête Ajax");
		
		var _tempAJAX_Reference_ = this; // Crée une copie de l'objet AJAX courant pour pouvoir le récupérer après // 
		this.xhr.onreadystatechange = function(){
			if(_tempAJAX_Reference_.callback_handler!=null)
				_tempAJAX_Reference_.callback_handler(_tempAJAX_Reference_.xhr);			
		};
		if(this.method=='GET'){
			var url = this.url;
			//intégration des paramètre à la queryString
			if(this.params!=null){
				url+='?' + this.params;
			}
			this.xhr.open(this.method, url);		
			this.xhr.send(null);
		}
		
		if(this.method=='POST'){
			this.xhr.open(this.method, this.url, true);
			
			//Send the proper header information along with the request
			this.xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			this.xhr.setRequestHeader("Content-length", this.params.length);
			this.xhr.setRequestHeader("Connection", "close");
			this.xhr.send(this.params);
		}		
}
