function CheckBrowser()
{	
	this.ver=navigator.appVersion;
	this.dom=document.getElementById?1:0;
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
	this.ie55=((this.ver.indexOf("MSIE 5.5")>-1 || this.ie6) && this.dom)?1:0;
	this.ie5=((this.ver.indexOf("MSIE 5")>-1 || this.ie5 || this.ie6) && this.dom)?1:0;
	this.ie4=(document.all && !this.dom)?1:0;
	this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
	this.ns4=(document.layers && !this.dom)?1:0;
	this.ie4plus=(this.ie6 || this.ie5 || this.ie4);
	this.ie5plus=(this.ie6 || this.ie5)
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns5);
	this.ajaxFirefox = window.XMLHttpRequest;	//ajax avec XMLHttpRequest
	this.ajaxIE = window.ActiveXObject;		//ajax avec ActiveXObject("Microsoft.XMLHTTP")
	return this;
}
			
bw = new CheckBrowser();

function getObjectById(ID) 
{
	if (bw.dom)
		return document.getElementById(ID);
	else if (bw.ie4)
		return document.all[id];
	else if (bw.ns4)
		return eval('document.' + ID);
	else
		return false;		
}


/* fonction permettant la l'appel à un script PHP et la réception de son interprétation par XMLHttpRequest() */
//methode : "GET" ou "POST"
//fichier : nom du fichier à appeller
//sync : true (synchrone) ou false (non synchrone)
//func : fonction à appeller lorsque les donnés sont complètement accessible 
//param : paramètre à donner de la façons suivante => p1=val1&p2=val2&p3=val3...

function ajaxRequest(methode, fichier, sync, func, param){
	
	var ajaxObj;

	//L'objet ajxObj est construit en fonction du browser
	if (bw.ajaxFirefox){
		ajaxObj = new XMLHttpRequest();	
	} else if (bw.ajaxIE) {
	
      		try {   
      			ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
      			
      		} catch(e) { 
         		try {   
         			ajaxObj = new ActiveXObject("Msxml2.XMLHTTP");   
         		} catch(e) { 
         			return false; 
         		} 
         	} 

	} else {
		return false;	
	}					
	
	//Si la methode d'envoie est "GET", les paramètres sont concaténés au fichier (paramètres donnés par l'URL)
	//sinon ils sont envoyés par la méthode send()(dans le cas de "POST")
	if ((methode.toUpperCase() == "GET") && (param != null)) {
		fichier += "?" + param;	
		param = null;		
	}		
	
	//Ouverture de la connexion
	ajaxObj.open(methode, fichier, sync);
	
	ajaxObj.onreadystatechange = function() {
		if (ajaxObj.readyState == 4){
			func(ajaxObj.responseText);	
		} else {
			return false;	
		}	
	}
	
	if (methode.toUpperCase() == "POST") {
		//présision de l'encodage par les en-têtes
		//Les données reçues via la méthode POST doivent être décodées avec utf8_decode dans le script PHP,
		//sinon les caractères accentués sont mal interprétés
		ajaxObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	} 
	
	ajaxObj.send(param);
	
	return true;	
	
}



/********************************************************************************************************
** Création d'un objet AjaxConnexion.								       **
** L'appel à la fonction connect() doit se faire après la définitions des paramètres de la connexion.  **
** Ces paramètres sont défini à l'aide des fonction setMethode(), setFile() et setData().	       **
********************************************************************************************************/

//Les données reçues via la méthode "POST" doivent être décodées avec utf8_decode dans le script PHP,
//sinon les caractères accentués sont mal interprétés.
//Un autre moyen est de définir les headers du script appellé de la façon suivante:
//header('Content-Type: text/html; charset=ISO-8859-1');

//La méthode de synchronisation par défaut est asynchrone
function AjaxConnexion(){
	
	var connAjax;		//la connexion ajax (objet)
	var httpMode;		//la méthode utilisé ("GET" ou "POST") (string)
	var nameOfFile;		//le script php appellé (string)
	var datas;		//les paramètres (string) sous la forme: "p1=v1&p2=v2&p3=v3..."
	var sync;		//mode asynchrone par défaut
	var areaId;		//layer où le résultat de la requête doit être écrit
	var functionBack;	//fonction qui doit être appellé lorsque le résultat de la requête est près.
				//la fonction reçoit le résultat de la requête

	//L'objet ajxObj est construit en fonction du browser
	if (bw.ajaxFirefox){
		connAjax = new XMLHttpRequest();		
	} else if (bw.ajaxIE) {
      		try {   
      			connAjax = new ActiveXObject("Microsoft.XMLHTTP");    			
      		} catch(e) { 	
         		try {  		 
         			connAjax = new ActiveXObject("Msxml2.XMLHTTP");  		 
         		} catch(e) { 
         			return false;         			 
         		} 
         	}
	} else {
		return false;	//Aucun objet pour la connexion ajax (browser trop vieux)	
	}	
	
	
	//définition de la méthode utilisé (string): "GET" ou "POST"
	this.setHttpMode = function(mode) {
		httpMode = mode;	
	};
	
	
	//définition du fichier appellé (string):
	this.setFile = function (f) {
		nameOfFile = f;	
	};
	
	//définition des paramètres transmit au fichier (string) sous la forme:
	//"p1=v1&p2=v2&p3=v3..."
	this.setDatas = function(param) {
		datas = param;	
	};
	
	this.appendData = function(pfield, pvalue) {
		datas += (datas.length == 0) ? pfield + "=" + escape(pvalue) : "&" + pfield + "=" + escape(pvalue);
	};

	
	//définition de la méthode de synchronisation
	this.setMethodeSync = function(synchronisation) {
		sync = synchronisation;
	}
	
	
	this.setFunctionBack = function(func) {
		functionBack = func;	
	};
	
	
	this.setAreaId = function(id) {
		areaId = id;	
	};
	
	//mise en forme des paramètres données au script php
	this.setFormDatas = function() {
		switch (httpMode) {
			case "GET":
				nameOfFile += "?" + datas;
				datas = null;
				break;
			case "POST":
				//Définition de l'encodage des entêtes
				connAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				break;
		}	
	};						
		
	
	this.runConnexion = function() {												
		
		//Mise en forme des données en fonction de la méthode ("GET" ou "POST") utilisée
		this.setFormDatas();

		//connAjax.overrideMimeType('text/HTML');

		//Ouverture de la connexion
		connAjax.open(httpMode, nameOfFile, sync);			
		
		
		/* Définition de la fonction appellé lors d'un changement d'état de la connexion */
		connAjax.onreadystatechange = function() {
	
			if (connAjax.readyState == 4) {
				if (connAjax.status == 200) {
					//si définie, fonction appellée lorsque les données sont complètement accessibles
					if (functionBack != null){				
						functionBack(connAjax.responseText);
						return;		
					} else if (areaId != null){
						getObjectById(areaId).innerHTML = connAjax.responseText;
					}
				}					
			}
		}
		
		//envoie des données
		connAjax.send(datas);
			
	}
	
	
	
	return this;
	
}


