DOMInclude.includeOnce("../jscript/DOMEvents.js");

function AjaxObject() {
	
	var me = this;

	this.createRequestObject = function() {
		var ro;
		var browser = navigator.appName;
		if ( browser == "Microsoft Internet Explorer") {
			try {
				ro = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				ro = new XMLHttpRequest();
			}
		}
		else {
			ro = new XMLHttpRequest();
		}
		return ro;
	}
		
	this.sndReq = function(action, url, data) {
		if (action.toUpperCase() == "POST") {
			this.http.open(action,url,true);
			this.http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.http.onreadystatechange = this.handleResponse;
			this.http.send(data);
		}
		else {
			this.http.open(action,url + '?' + data,true);
			this.http.onreadystatechange = this.handleResponse;
			this.http.send(null);
		}
	}


	/* Event callback setters */
	
	/*************************************************
	 * REMOVED - Updated to use DOMEvents.js library
	 ************************************************/
	 /*
	this.setCompleteHandler = function(completeHandler) {
		this.completeHandler = completeHandler;
	}
	
	this.setLoadingHandler = function(loadingHandler) {
		this.loadingHandler = loadingHandler;
	}

	this.setInteractiveHandler = function(interactiveHandler) {
		this.interactiveHandler = interactiveHandler;
	}
	
	this.setErrorHandler = function(errorHandler) {
		this.errorHandler = errorHandler;
	}

	*/
	
	this.handleResponse = function() {
		if ( me.http.readyState == 4) {
			if(me.http.status==200) {
				//try {
					_broadcastEvent(me,"complete",me.http);
				//} catch(e) {
				//	if(typeof(log) != "undefined" && typeof(log.addMessage) != "undefined") log.addMessage("AjaxObject.handleResponse: " + e, "error");
				//}
			} else {
				_broadcastEvent(me,"error",me.http);
				alert("Error: " + me.http.status + "\n\nSorry,\nThere was a problem retrieving some required data. Please try the request again.");
				if(typeof(log) != "undefined" && typeof(log.addMessage) != "undefined") log.addMessage("Problem retrieving XML data", "error");
			}
		} else if ( me.http.readyState == 1) {
			try {
				_broadcastEvent(me,"opened",me.http);
			} catch(e) {
				alert("failed to broadcast opened event");
				if(typeof(log) != "undefined" && typeof(log.addMessage) != "undefined") log.addMessage("AjaxObject.handleResponse - failed to broadcast opened event: ", "error");
			}
		} else if ( me.http.readyState == 2) {
			try {
				_broadcastEvent(me,"sent",me.http);
			} catch(e) {
				if(typeof(log) != "undefined" && typeof(log.addMessage) != "undefined") log.addMessage("AjaxObject.handleResponse - failed to broadcast sent event: ", "error");
			}
		} else if ( me.http.readyState == 3) {
			try {
				_broadcastEvent(me,"receiving",me.http);
			} catch(e) {
				if(typeof(log) != "undefined" && typeof(log.addMessage) != "undefined") log.addMessage("AjaxObject.handleResponse - failed to broadcast receiving event: ", "error");
			}
		}
	}
	this.http = this.createRequestObject();
}
