function Hijax(){
	var container,url,canvas,data,loading,callback,request;
	var loadingElement;

	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.setData = function(value){
		data=value;
	}
	this.captureData = function(){
		if(container){
			if(container.nodeName.toLowerCase() == 'form'){
				if(!url)
					url=container.action;
				container.onsubmit = function(){
					if(checkForm){
						if(!checkForm.validate(container)){
							return false;
						}
					}
					var query = "";
					for(var i=0; i<this.elements.length; i++){
						if(this.elements[i].nodeName.search(/fieldset/i)==-1){
							if(this.elements[i].type.search(/file/i)>-1 && trimString(this.elements[i].value)!=''){
								var ifu=new inplaceFileUpload();
								ifu.setLoading(loading);
								ifu.setCallback(callback);
								ifu.setForm(container);
								ifu.submit();
								return true;
							}
							if(this.elements[i].type.search(/radio/i)==-1 || this.elements[i].checked){
								query+= this.elements[i].getAttribute('name');
								query+= "=";
								if(this.elements[i].type.search(/checkbox/i)>-1 && !this.elements[i].checked){
									query+=-9;
								}else{
									query+= encodeURIComponent(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;
			}
		}else{
			return !this.start();
		}
		return false;
	};
	var start=function(){
		if(request && (request.readyState == 2 || request.readyState == 3))
			request.abort();
		request = getHTTPObject();
		if(!request || !url){
			return false;
		}else{
			initiateRequest();
			return true;
		}
	}
	this.start = function(){
		start();
	};

	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){
			loadingElement=loading();
		}
		request.onreadystatechange = completeRequest;
		if(data){
			request.open('POST', url, true);
			request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
			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;
					var newContent=document.importNode(request.responseXML.getElementsByTagName('div')[0],true);
					while(canvas.hasChildNodes()) {
						canvas.removeChild(canvas.lastChild);
					}
					canvas.appendChild(newContent);
				}
				if(callback){
					//alert(request.responseText);
					callback(request);
				}
				if(loadingElement){
					var parent = loadingElement.parentNode;
					if(parent)
						parent.removeChild(loadingElement);
				}
				request=null;
			}
		}
	};
}
