/*********************************************************************
File:		ajax.js
Type:		Utility javascript.
Author:		Chris McHugh
Version:	1.0

This script provides an automated and queue-driven abstraction layer
to HTTP request and response handling.
**********************************************************************/

var queue = new Array();
var http = null;

var domain = document.location.href.match( /:\/\/([^\/:]+)/ );
var ajax_root = "http://" + domain[1] + "/ajax/";

function createRequestObject(){
	return (navigator.appName == "Microsoft Internet Explorer") ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}

function queueJump() {
	queue.shift();
	http = null;
	setTimeout("dequeueRequests();",100);
}

function enqueueRequest(u,r,f) {
	queue[queue.length] = new Array(u,r,f);
	if (!http) dequeueRequests();
}

function dequeueRequests() {
	if (queue.length) {
		if (!http) {
			var qitem = queue[0];
			var qurl = qitem[0];
			var qreq = qitem[1];
			var qres = qitem[2];
			http = createRequestObject();
			http.open('POST', qurl, true);
			http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			http.onreadystatechange = function() { 
				if (http.readyState == 4) {
					eval(qres + '(http.responseText);');
				}
			}
			http.send(qreq);
		} else {
			setTimeout("dequeueRequests()", 100);
		}
	}
}

function doNothing() {
	queueJump();
}

function processResult() {
	var resp = eval('(' + http.responseText + ')');
	queueJump();
	return resp;
}