
var ajaxQueue = Array();

//--> Plaats een element en url in de wachtrij
//    [element] zal vervangen worden met het resultaat van [url]
function doAjaxReplaceElement(elementId, url) {
	var request = new Object();
	request.request = 'ReplaceElement';
	request.elementId = elementId;
	request.url = AppendRandomIntToURL(url);
	ajaxQueue.push(request);
	
	// Verwerk de wachtrij
	ajaxProcessQueue();
}

function doAjaxUpdate(elementId, property, url) {
	var request = new Object();
	request.request = 'Update';
	request.elementId = elementId;
	request.property = property;
	request.url = AppendRandomIntToURL(url);
	ajaxQueue.push(request);
	
	// Verwerk de wachtrij
	ajaxProcessQueue();
}

//--> Willekeurige integer toevoegen aan de querystring, zodat het bestand
//    niet in de cache vast blijft zitten
function AppendRandomIntToURL(url) {
	if (url.indexOf('?')>=0) appendSign='&';
	else appendSign='?';
	return url + appendSign + 'r=' + Math.round(Math.random()*10000);
}

function ajaxProcessQueue() {
	// Controleer of de wachhtrij niet leeg is
	if (ajaxQueue.length > 0) {
		xmlHttp=GetXmlHttpObject();
		if (xmlHttp==null) {
			alert("Uw browser ondersteunt geen XMLHTTP Requests."); 
			return;
		}

		// ReplaceElement request
		if (ajaxQueue[0].request == 'ReplaceElement') {
			xmlHttp.onreadystatechange = ajaxStateChanged;
			xmlHttp.open("GET",ajaxQueue[0].url,true);
			xmlHttp.send(null);
		} else if (ajaxQueue[0].request == 'Update') {
			xmlHttp.onreadystatechange = ajaxStateChanged;
			var value = document.getElementById(ajaxQueue[0].elementId)[ajaxQueue[0].property];
			xmlHttp.open("GET",ajaxQueue[0].url + "&" + [ajaxQueue[0].property] + "=" + escape(value),true);
			xmlHttp.send(null);
		}
	}
}

function ajaxStateChanged() {
	if ((xmlHttp.readyState==4 || xmlHttp.readyState=="complete") && ajaxQueue.length > 0) { 
		// ReplaceElement request
		if (ajaxQueue[0].request == 'ReplaceElement') {
			// Vervang inhoud
			ajxElem = document.getElementById(ajaxQueue[0].elementId);
			ajxElem.innerHTML = unescape(xmlHttp.responseText);
			// Update request
		} else if (ajaxQueue[0].request == 'Update') {
			// Niets te doen 
		}
		// Verwijder request uit wachtrij
			ajaxQueue.shift();
		// Verwerk volgend element in queue
		ajaxProcessQueue()
	}
}

function GetXmlHttpObject(handler) { 
	var objXMLHttp=null
	if (window.XMLHttpRequest) {
		objXMLHttp=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objXMLHttp 
}