function AjaxTransaction (url, query, callbackMethod, errorMethod, isTextResponse) {
	var request = init();
	request.onreadystatechange = processRequest;

	function init() {
		this.request = null;
		
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
    }

	function processRequest () {
		if (request.readyState == 4) {
			if (request.status == 200) {
				if (callbackMethod) {
					if (!isTextResponse) {				
						callbackMethod(request.responseXML);
					} else {
						callbackMethod(request.responseText);
					}
				}
			} else {
				if (errorMethod) {
					errorMethod ();
				}
			}
		}
	}

	this.doGet = function() {
		request.open("GET", url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.send(query);
	}
    
	this.doPost = function(body) {
		request.open("POST", url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.send(query);
	}
	
	this.initOk = function () {
		return request != null;
	}
}