function Hijax() {
	var container,url,canvas,data,loading,callback,request;

	this.setContainer = function(value) {
		container = value;
	};
	this.setUrl = function(value) {
		url = value;
	};
	this.setCanvas = function(value) {
		canvas = value;
	};
	this.setLoading = function(value) {
		loading = value;
	};
	this.setCallback = function(value) {
		callback = value;
	};

	this.getData = function() {
		return data;
	}

	this.getResponseText = function() {
		return request.responseText;
	}

	this.getResponseXML = function() {
		return request.responseXML;
	}

	this.captureData = function() {
		if (container.nodeName.toLowerCase() == "form") {
			var query = "";
			for ( var i = 0; i < container.elements.length; i++ ) {
				if ( container.elements[i].type != 'checkbox' || container.elements[i].checked ) {
					query += container.elements[i].name;
					query += "=";
					query += escape(container.elements[i].value);
					query += "&";
				}
			}
			data = query;
			return !start();
/*		if (container.nodeName.toLowerCase() == "form") {
			container.onsubmit = function() {
				var query = "";
				for ( var i = 0; i < this.elements.length; i++ ) {
					query += this.elements[i].name;
					query += "=";
					query += escape(this.elements[i].value);
					query += "&";
				}
				data = query;
				return !start();
			};*/
		} else {
			var links = container.getElementsByTagName("a");
			for ( var i = 0; i < links.length; i++ ) {
				links[i].onclick = function() {
					var query = this.getAttribute("href").split("?")[1];
					url += "?" + query;
					return !start();
				};
			}
			links = null;
		}
		return false; // should never get here, but this makes the warning go away
	};

	var start = function() {
		request = getHTTPObject();
		if (!request || !url) {
			return false;
		} else {
			initiateRequest();
			return true;
		}
	};

	var getHTTPObject = function() {
		var xmlhttp = false;
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					xmlhttp = false;
				}
			}
		}
		return xmlhttp;
	};

	var initiateRequest = function() {
		if ( loading ) {
			loading();
		}
		request.onreadystatechange = completeRequest;
		if ( data ) {
			request.open("POST", url, true);
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			request.send(data);
		} else {
			request.open("GET", url, true);
			request.send(null);
		}
	};

	var completeRequest = function() {
		if ( request.readyState == 4 ) {
			if ( request.status == 200 || request.status == 304 ) {
				if ( canvas ) {
					canvas.innerHTML = request.responseText;
				}
				if ( callback ) {
					callback();
				}
			}
		}
	};

} // Hijax

