function xmlhttp(url, F_callback, param_F_callback)
{
	var xml_http;

	xml_http=null;

	if (window.XMLHttpRequest)
	{
		xml_http = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		xml_http = new ActiveXObject("Msxml2.XMLHTTP");
		if(!xml_http)
			xml_http = new ActiveXObject("Microsoft.XmlHttp");
	}
	if(!xml_http)
	{
		alert("Impossible de créer l'objet xmlhttp.\r\nVotre navigateur ne supporte pas la technologie AJAX !");
		return;
	}

	this.xmlhttp = xml_http;
	this.url = url;
	this.resultat = null;
	this.traiter_reception = F_callback;
	this.param_traiter_reception = param_F_callback;
	this.ouvrir = ouvrir_requete;
	this.fermer = fermer_requete;
	this.envoyer = envoyer_requete
	this.methode = "";
	if(F_callback)
		xml_http.onreadystatechange = F_callback;

return(this);
}

//---------------------------------------------------------------------------------------
// Destruction de la requete (objet et objet ActiveX inclus)
// A lancer au bon moment (i.e. après réception des données)

function detruire_xmlhttp(r)
{
	var r;

	r.xmlhttp = null;
	r = null;
}

//---------------------------------------------------------------------------------------
// connexion serveur (méthode = POST ou GET)
function ouvrir_requete(methode)
{
	var xmlhttp;
	var async;

	xmlhttp = this.xmlhttp;
	// mode async => traitement	n'attend pas la réception de données (non bloquant)
	async = ((this.traiter_reception != null) ? true : false);
	this.methode = methode;
	xmlhttp.open(methode, this.url, async);
}

//---------------------------------------------------------------------------------------
// DEconnexion serveur
function fermer_requete()
{
	var xmlhttp;

	xmlhttp = this.xmlhttp;
	xmlhttp.abort();
}

//---------------------------------------------------------------------------------------
// lancement de la requete
function envoyer_requete(str)
{
	var xmlhttp, str;

	xmlhttp = this.xmlhttp;
	if(str == "")
		xmlhttp.send("");
	else
	{
		if(this.methode == "POST")
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.send(str);
	}
}


//---------------------------------------------------------------------------------------
function envoyer_requete_xmlhttp(url, param, methode, mode)
{
	var x, resultat;

	x = new xmlhttp(url, null, null);

	if(!methode || methode.length<1) methode="POST";
	x.ouvrir(methode);

	x.envoyer(param);

	if (mode && mode=="XML")
		x.resultat = x.xmlhttp.responseXML;
	else
		x.resultat = x.xmlhttp.responseText;

	resultat=x.resultat;

	x.fermer();
	detruire_xmlhttp(x);
	return resultat;
}


//---------------------------------------------------------------------------------------
function xmlhttp_requete_creer(x, url, param, methode)
{

	x = new xmlhttp(url, null, null);

	if(!methode || methode.length<1) methode="POST";
	x.ouvrir(methode);
	x.envoyer(param);
	x.resultat = x.xmlhttp.responseText;

	return x;
}


