function init_ibox() {
	createIbox(document.getElementsByTagName("body")[0]);
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length - 1; i++) {
		var e = links[i];
		if(t = e.getAttribute("rel")) {
			if ((t.indexOf("ibox") != -1) || t.toLowerCase() == "ibox") {
				e.onclick = function() { showIbox(this.href, parseQuery(this.getAttribute("rel").substr(5,999))); return false; };
			}
		}
	}
}

createIbox = function(elem) {
	var ibox = document.createElement("div");
	ibox.setAttribute("id", "ibox");
	ibox.style.display = '';
	ibox.innerHTML = "<div id=\"ibox_w\" style=\"display:none;\"></div><div id=\"ibox_wrapper\" style=\"display:none;\"><div id=\"ibox_content\"></div><a id=\"ibox_close_a\" href=\"javascript:void(null);\" >Click here to close</a></div>";
	elem.appendChild(ibox);
}

showIbox = function(url, params) {
	var ibox = $('ibox_wrapper');
	ibox.style.width = (params['width']) ? params['width']+'px' : '700px';
	ibox.style.height = (params['height']) ? params['height']+'px' : '300px';
 	$('ibox_content').innerHTML = $(url.substr(url.indexOf("#")+1, 1000)).innerHTML;
	ibox.style.display = "";
	ibox.onclick = null;
	posToCenter(ibox);
	$("ibox_close_a").onclick = function() { hideIbox() }

	// Show background
	var pagesize = new getPageSize();
	var scrollPos = new getScrollPos();
	var box_w = $('ibox_w');
	box_w.style.width = pagesize.width+'px';
	box_w.style.height = pagesize.height+scrollPos.scrollY+'px';
	box_w.style.display = "block";
	window.onscroll = window.onresize = maintPos;
	return true;
}

maintPos = function() {
	var pagesize = new getPageSize();
	var scrollPos = new getScrollPos();
	var box_w = $('ibox_w');
	box_w.style.width = pagesize.width+'px';
	box_w.style.height = pagesize.height+scrollPos.scrollY+'px';
	posToCenter($('ibox_wrapper'));
}

hideIbox = function() {
	$('ibox_w').style.display = "none";
	$('ibox_wrapper').style.display = "none";
	window.onscroll = window.onresize = null;
}

posToCenter = function(elem) {
	var scrollPos = new getScrollPos();
	var pageSize = new getPageSize();
	var emSize = new getElementSize(elem);
	var x = Math.round(pageSize.width/2) - (emSize.width /2) + scrollPos.scrollX;
	var y = Math.round(pageSize.height/2) - (emSize.height /2) + scrollPos.scrollY;
	elem.style.left = x+'px';
	elem.style.top = y+'px';
}

getScrollPos = function() {
	var docElem = document.documentElement;
	this.scrollX = self.pageXOffset || (docElem&&docElem.scrollLeft) || document.body.scrollLeft;
	this.scrollY = self.pageYOffset || (docElem&&docElem.scrollTop) || document.body.scrollTop;
}

getPageSize = function() {
	var docElem = document.documentElement
	this.width = self.innerWidth || (docElem&&docElem.clientWidth) || document.body.clientWidth;
	this.height = self.innerHeight || (docElem&&docElem.clientHeight) || document.body.clientHeight;
}

getElementSize = function(elem) {
	this.width = elem.offsetWidth ||  elem.style.pixelWidth;
	this.height = elem.offsetHeight || elem.style.pixelHeight;
}

$ = function(elemId) {
	return document.getElementById(elemId);
}

parseQuery = function(query) {
   var params = new Object();
   if (!query) return params;
   var pairs = query.split(/[;&]/);
   for (var i = 0; i < pairs.length; i++) {
      var KeyVal = pairs[i].split('=');
      if (!KeyVal || KeyVal.length != 2) continue;
      var key = unescape(KeyVal[0]);
      var val = unescape(KeyVal[1]);
      val = val.replace(/\+/g, ' ');
      params[key] = val;
   }
   return params;
}

function addEvent(obj, evType, fn){
 if (obj.addEventListener){
   obj.addEventListener(evType, fn, false);
   return true;
 } else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
   return r;
 } else {
   return false;
 }
}
addEvent(window, 'load', init_ibox);