/*

$Id: AJAXRequest.js 73 2006-03-13 06:48:40Z lindsay $
$Revision: 73 $
$Date: 2006-03-13 17:48:40 +1100 (Mon, 13 Mar 2006) $
$Author: lindsay $

*/

var __AJAXRequests = {};

function AJAXRequest() {
	this.url = '';
	this.resultHandler = '';
	this.errorHandler = '';
	this.httpRequest = false;
	this.__resultHandlerStub = __resultHandlerStubImpl;
}

function __resultHandlerStubImpl(caller){
	var e = caller.httpRequest;
	var responseVars;
	var tmp;
	var responseObject = new Object();

	if (e.readyState == 4) {
/*		try {*/
			if (e.status == 200) {
				responseVars = e.responseXML.getElementsByTagName('var');
				for(var i = 0; i < responseVars.length; i++){ // TODO: need to implement casting properly
					switch(responseVars[i].getAttribute('type')){
						case 'string':
						case 'integer':
						case 'float':
						case 'boolean':
						case 'date':
							responseObject[responseVars[i].getAttribute('name')] = responseVars[i].getAttribute('value');
							break;
						case 'array':
							responseObject[responseVars[i].getAttribute('name')] = [];
							tmp = responseVars[i].getElementsByTagName('item');
							for(var ii = 0; ii < tmp.length; ii++){
								responseObject[responseVars[i].getAttribute('name')].push(tmp[ii].getAttribute('value'));
							}
							break;
						default:
							break;
					}
				}
				caller.resultHandler(responseObject);
			} else {
				caller.errorHandler('There was a problem with the request');
			}
/*		}catch(err){
			alert('Status error');
		}*/
	}
}

AJAXRequest.prototype.send = function(){

	this.httpRequest = false;

	if(window.XMLHttpRequest){ // Gecko, Safari, etc
		this.httpRequest = new XMLHttpRequest();
		if(this.httpRequest.overrideMimeType){
			this.httpRequest.overrideMimeType('text/xml');
		}
	}else if(window.ActiveXObject){ // IE
		try{
			this.httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				this.httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){}
		}
	}

	if (!this.httpRequest) {
		this.errorHandler('Cannot create an XMLHTTP instance');
		return false;
	}


	__AJAXRequests[this.url] = this; // kinda lame
	this.httpRequest.onreadystatechange = new Function('return __resultHandlerStubImpl(__AJAXRequests[\''+this.url+'\']);');
	this.httpRequest.open('GET', this.url, true);
	this.httpRequest.send('');

}
