/*
  * Based on Code from http://www.drakware.com/articles/multijax.php
  * Marche en reponseText (TODO: ajouter le responseXML)
  */

var xmlreqs = new Array();

function CXMLReq(type, xmlhttp)
{
	this.type = type;
	this.xmlhttp = xmlhttp;
}

function getXmlHttpRequest ()
{
	if (window.XMLHttpRequest)
	{
		xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		if(!xmlhttp)
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");			
	}
	return xmlhttp;
}

//fonction pour AJAXer avec un GET
function xmlreqGET (url, onState200fct, private_params_array)
{
	xmlhttp = getXmlHttpRequest () ;
	xmlhttp.onreadystatechange = xmlhttpChange;
	xmlhttp.open("GET",url,true);
	xmlhttp.send("");

	var xmlreq = new CXMLReq('', xmlhttp);
	xmlreq.returnToFct = onState200fct ;
	xmlreq.private_params_array = private_params_array ;	
	xmlreqs.push(xmlreq);
}

//fonction pour AJAXer avec un POST
function xmlreqPOST(url,data, onState200fct, private_params_array)
{
	var xmlhttp=false;
	xmlhttp = getXmlHttpRequest () ;	
	xmlhttp.open("POST",url,true);
	xmlhttp.onreadystatechange=xmlhttpChange;
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xmlhttp.send(data);
	
	var xmlreq = new CXMLReq('', xmlhttp);
	xmlreq.returnToFct = onState200fct ;
	xmlreq.private_params_array = private_params_array ;
	xmlreqs.push(xmlreq);	
}

//fonction pour lire l'AJAXion
function xmlhttpChange()
{
	if (typeof(window['xmlreqs']) == "undefined")
		return;

	for (var i=0; i < xmlreqs.length; i++)
	{
		if (xmlreqs[i].xmlhttp.readyState == 4)
		{
			if (xmlreqs[i].xmlhttp.status == 200 || xmlreqs[i].xmlhttp.status == 304)
			{
				responseText = xmlreqs[i].xmlhttp.responseText ;
				xmlreqs[i].returnToFct (responseText, xmlreqs[i].private_params_array);
				xmlreqs.splice(i,1); 
				i--;
			}
			else
			{
				xmlreqs.splice(i,1); 
				i--;
				alert("A problem occurred!");
			}
		}
	}
}