/**
 *	Ajax Callback Queue Class
 *	
 *	this class supports multiple syncronous ajax request
 *	see the example to understand how it works.
 *	Tested in Safarie 2.0, Firefox 2.0, IE 6 & 7
 *
 *	Example
 *	<code>
 *		axj = new AjaxCallback();
 *		Axj.get("loadone.php");
 *		Axj.get("second.php");
 *		Axj.onLoad = function(answer, i) {
 *			if (i == 1) {
 *				alert("answer 1: " + answer);
 *			} elseif (i == 2) {
 *				alert("answer 2: " + answer);
 *			}
 *		}
 *	</code>
 *
 *	@author Marcel Eichner // Ephigenia <love at ephigenia dot de>
 *	@since 2007-02-11
 */

AjaxCallback = function() {
	axjCallbackObj = this;
	axjCallbackObj.error = "";
	axjCallbackObj.responses = new Array();
	axjCallbackObj.reqs = new Array();

	this.createRequest = function () {
		var req = false;
		if (typeof XMLHttpRequest != 'undefined') {
		 	req = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			var objNames = new Array("Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0",  "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0");
			for (var i = objNames.length -1; i >= 0; i--) {
				try {
					req = new ActiveXObject(objNames[i]);
					if (req) {
						break;
					}
				} catch(e) {}
			}
		}
		if (req && typeof(req) != "undefined") {
			req.onreadystatechange = function() {
				axjCallbackObj.processRequest();
			}
			return req;
		}
		this.error = "Error creating Object.\r\nXMLHttp (AJAX) seemes to be not supported.";
		this.onError();
		return false;
	}

	this.get = function(url) {
		axjCallbackObj.url = url;
		var req = this.createRequest();
		if (!req) return false;
		req.open("GET", url, true);
		req.send(null);
		this.reqs.push(req);
		return req;
	}

	this.processRequest = function() {
		for (var i = 0; i < axjCallbackObj.reqs.length; i++) {
			req = axjCallbackObj.reqs[i];
			if (req.readyState != 4) continue;
			if (req.status == 200) {
				try {
	      			if (req.responseText.length > 0) {
						this.onLoad(req.responseText, i);
					} else if (req.responseXML.length > 0) {
						this.onLoad(req.responseXML, i);
					} else {
						this.onError(req);
					}
				} catch (e) {
					this.onError(req, e);
				}
			} else {
				this.onError(req);
			}
		}
	}
	
	this.onError = function(req, e) {
		var message = "AjaxCallback Error:\r\n";
		if (typeof(req) != "undefined") {
			message += "Readystate: " + req.readyState + "\r\n("+ req.status +") " + req.statusText;
			//if (typeof(e) != "undefined") message + "\r\nexception: " + e;
			message + "\r\nexception: " + e;
		} else {
			message += this.error;
		}
		alert(message);
	}
	
	this.onLoad = function(response, index) {
		alert("Response:\r\n" + axjCallbackObj.response);
	}
	
}