addLoadEvent(hijaxForm);


/* =Forms
-----------------------------------------------------------------------------*/
function hijaxForm(){
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById("formCanvas")) return false;
	var canvas = document.getElementById("formCanvas");
	if (!canvas.getElementsByTagName("form")[0]) return false;
	var container = canvas.getElementsByTagName("form")[0];
	var xhr = new Hijax();
	xhr.setContainer(container);
	xhr.setUrl(container.id+".php");// give the form the id of the php file you want to send the info to.
	xhr.setCanvas(canvas);
	xhr.setLoading(function(){
		document.getElementById("submitBut").innerHTML = '<span class="loading">Submiting...</span>';
	});
	xhr.setCallback(function(){
		hijaxForm();
	});
	xhr.captureData();
}

/* =Do Hijax
-----------------------------------------------------------------------------*/
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.captureData = function() {
		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;
		}
	};
	
	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){
					var newCanvas = document.createElement("div");
					var canId = canvas.id;
					newCanvas.setAttribute("id", canId);
					if(canvas.className){
						var canClass = canvas.className;
						newCanvas.setAttribute("class", canClass);
					}
					newCanvas.innerHTML = request.responseText;
					canvas = canvas.parentNode.replaceChild(newCanvas,canvas);
				}
				if (callback) callback();
			}
		}
	};

}