/**
 * function mkXHR()
 * @return Un nouvel objet XMLHTTPRequest
 *
 * Crée un objet XMLHTTPRequest
 */
function mkXHR()
{
	if (window.XMLHttpRequest)
		return new XMLHttpRequest();
	else if (window.ActiveXObject)
		try { return new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e) {
			try { return new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (e) {
				return false;
			}
		}
}

/** Queue AJAX **/
var xhr = mkXHR();
var ajaxURLs = new Array();
var ajaxCallbacks = new Array();
var ajaxPosts = new Array();

xhr.ajaxWorking = false;

function ajaxProcessQueue()
{
	if (ajaxURLs.length < 1) return; /* Queue vide */

	var url = ajaxURLs.shift();
	var cbk = ajaxCallbacks.shift();
	var pst = ajaxPosts.shift();

	xhr.ajaxCallback = cbk;
	xhr.ajaxWorking = true;

	if (pst == null)
	{
		xhr.open("GET", url, true);
	}
	else
	{
		xhr.open("POST", url, true);
	}

	xhr.onreadystatechange = ajaxStateChange;
	xhr.send(pst);
}

function ajaxStateChange()
{
	if (xhr.readyState != 4) return;
	if (xhr.ajaxCallback) xhr.ajaxCallback(xhr.responseText);
	xhr.ajaxWorking = false;
	ajaxProcessQueue();
}

function ajaxEnqueue(url, callback)
{
	ajaxURLs.push(url);
	ajaxCallbacks.push(callback);
	ajaxPosts.push(null);

	if (!xhr.ajaxWorking) ajaxProcessQueue();
}

function ajaxEnqueuePost(url, postdata, callback)
{
	ajaxURLs.push(url);
	ajaxCallbacks.push(callback);
	ajaxPosts.push(postdata);

	if (!xhr.ajaxWorking) ajaxProcessQueue();
}

