function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(doAjax);

function doAjax() {
	
	var prepareLinks = function(containerId,canvasId,service) {
	
		if (!document.getElementById) { return; }
		if (!document.getElementById(canvasId)) { return; }
		if (!document.getElementById(containerId)) { return; }
	
		var lnks = document.getElementById(containerId).getElementsByTagName("a");
	
		var xhr = new Ajax();
		xhr.canvas = document.getElementById(canvasId);
		xhr.url = "cm_"+service+".php";
		xhr.loading = function() {
			displayLoading(document.getElementById(canvasId));
		};
		xhr.callback = doAjax;
	
		for (var i=0; i<lnks.length; i++) {
	
			var thelink = lnks[i];
	
	
				thelink.ajaxHandler = xhr;
	
				thelink.onclick = function() {
	
					this.ajaxHandler.data = this.getAttribute("href");
					document.body.setAttribute('id',service);
					return (!this.ajaxHandler.start());			
	
				};

			thelink = null;	// Clean up for IE

		}
	};
	
	prepareLinks(
		"home-link",
		"content",
		"home");
	prepareLinks(
		"about-link",
		"content",
		"about");
	prepareLinks(
		"news-link",
		"content",
		"news");
	prepareLinks(
		"projects-link",
		"content",
		"projects");
	prepareLinks(
		"press-link",
		"content",
		"press");
	prepareLinks(
		"gallery-link",
		"content",
		"gallery");
	prepareLinks(
		"schedule-link",
		"content",
		"schedule");
	prepareLinks(
		"links-link",
		"content",
		"links");

}

function Ajax() {

	var url,canvas,data,loading,callback,request;

	this.start = function() {

		url			= this.url;
		canvas		= this.canvas;
		data		= this.data;
		loading		= this.loading;
		callback	= this.callback;
		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();
		}
		loadData();
	};

	var loadData = function() {
		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) {
				if (canvas) {
					canvas.innerHTML = request.responseText;
				}
				if (callback) {
					callback();
				}
			} else {
				if (canvas) {
					canvas.innerHTML = request.statusText;
				}
			}
		}
	};

}

function displayLoading(element) {
	document.emptyElement(element);
	var content = document.createElement("img");
	content.setAttribute("src","images/loading.gif");
	content.setAttribute("alt","Loading...");
	element.appendChild(content);
	window.scrollToElement(element);
}

document.emptyElement = function(element) {
	while (element.hasChildNodes()) {
		element.removeChild(element.lastChild);
	}
};


window.scrollToElement = function(element) {

	var getYpos = function() {

		var ypos = element.offsetTop; 
		var thisNode = element; 
		while (thisNode.offsetParent &&  (thisNode.offsetParent != document.body)) { 
			thisNode = thisNode.offsetParent;
			ypos += thisNode.offsetTop; 
		}
		return ypos;

	};

	var getCurrentYPos = function() {
	
		if (document.body && document.body.scrollTop) {
			return document.body.scrollTop;
		}
	
		if (document.documentElement && document.documentElement.scrollTop) {
			return document.documentElement.scrollTop;
		}
	
		if (window.pageYOffset) {
			return window.pageYOffset;
		}
	
		return 0;
	
	};

	if (element.movement) {
		window.clearTimeout(element.movement);
	}

	var final_y = getYpos();
	var ypos = getCurrentYPos();

	if (ypos == final_y) {
		return true;
	}
	if (ypos < final_y) {
		ypos += Math.ceil((final_y - ypos)/2);
	}
	if (ypos > final_y) {
		ypos -= Math.ceil((ypos - final_y)/2);
	}

	window.scrollTo(0,ypos);

	if (getCurrentYPos() != ypos) {
		return false;
	}

	element.movement = window.setTimeout("window.scrollToElement('"+element+"')",8);

};

