	var ibox = {
		indicator_img_path : "/development/javascript/ibox/files/indicator.gif",
		indicator_img_html : "",
		loadCancelled : false,
		ibox_w_height : 0,
		setIboxOpacity : "",
		http : "",
		init : function() {
			ibox.indicator_img_html = "<img id=\"ibox_indicator\" src=\"" + ibox.indicator_img_path + "\" alt=\"Loading Indicator Image\" width=\"128\" height\"128px\"/><p>Please wait, loading</p><p><a href=\"javascript:void(null);\">Cancel Load</a></p>"; // don't remove the name
			ibox.http = ibox.createRequestObject();
			ibox.createIbox(document.getElementsByTagName("body")[0]); //create our ibox
			var docRoot = document.getElementsByTagName("area");
			var ibAttr = "rel"; 	// our attribute identifier for our iBox elements
			var e;
			for (var i = 0; i < docRoot.length; i++) {
				e = docRoot[i];
				if(e.getAttribute(ibAttr)) {
					var t = e.getAttribute(ibAttr);
					if((t.indexOf("ibox") != -1)  ||  t.toLowerCase() == "ibox") // check if this element is an iBox element
						e.onclick = function() { // rather assign an onclick event
							var t = this.getAttribute(ibAttr);
							var params = ibox.parseQuery(t.substr(5,999));
							var url = this.href;
							if(this.target != "") {url = this.target} 
							var title = this.title;
							ibox.showBG();
							ibox.showIbox(url,title,params); // show ibox
							window.onscroll = ibox.maintPos;
							window.onresize = ibox.maintPos;
							return false;
						};
				}
			}
		},
		createIbox : function(elem) { // a trick on just creating an ibox wrapper then doing an innerHTML on our root ibox element
			var strHTML =	"<div id=\"ibox_w\" style=\"display:none;\"></div>";
			strHTML +=	"<div id=\"ibox_progress\" style=\"display:none;\">";
			strHTML +=		ibox.indicator_img_html;
			strHTML +=	"</div>";
			strHTML +=	"<div id=\"ibox_wrapper\" style=\"display:none\">";
			strHTML +=		"<div id=\"ibox_footer_wrapper\">";
			strHTML +=			"<div id=\"ibox_footer\">&nbsp;</div></div>";
			strHTML +=		"<div id=\"ibox_content\"></div>";
			strHTML +=		"</div></div>";
			var docBody = document.getElementsByTagName("body")[0];
			var ibox_el = document.createElement("div");
			ibox_el.setAttribute("id","ibox_el");
			ibox_el.style.display = '';
			ibox_el.innerHTML = strHTML;
			elem.appendChild(ibox_el);
		},
		showBG : function() {
			var box_w = ibox.getElem('ibox_w');
			var opacity_level = 8;
			box_w.style.opacity = 0;
			box_w.style.filter = 'alpha(opacity=0)';
			ibox.setIboxOpacity = ibox.setOpacity;
			for(var i = 0; i <= opacity_level; i++){setTimeout("ibox.setIboxOpacity('ibox_w'," + i + ")", 70 * i);} // from quirksmode.org
			box_w.style.display = "";
			var pagesize = new ibox.getPageSize();
			var scrollPos = new ibox.getScrollPos();
			var ua = navigator.userAgent;
			if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width + 'px';}
			else {box_w.style.width = pagesize.width - 20 + 'px';}
			box_w.style.height = pagesize.height + scrollPos.scrollY + 'px';
			ibox.selectVisibility("hidden");
		},
		selectVisibility : function(v) { // Scrollbar hiding by Heidi http://liquidlead-art.com/
			var selectElems = document.getElementsByTagName('select');
			for(var i = 0; i < selectElems.length; ++i) {selectElems[i].style.visibility = v;}
		},
		hideBG : function() {
			var box_w = ibox.getElem('ibox_w');
			box_w.style.display = "none";
			ibox.selectVisibility("visible");
		},
		showIndicator : function() {
			var ibox_p = ibox.getElem('ibox_progress');
			ibox_p.style.display = "";
			ibox.posToCenter(ibox_p);
			ibox_p.onclick = function() {
				ibox.hideIbox();
				ibox.hideIndicator();
				ibox.loadCancelled = true;
			}
		},
		hideIndicator : function() {
			var ibox_p = ibox.getElem('ibox_progress');
			ibox_p.style.display = "none";
			ibox_p.onclick = null;
		},
		showIbox : function(url, title, params) {
			var ibox_el = ibox.getElem('ibox_wrapper');
			var ibox_type = 0;
			var ibox_footer = ibox.getElem('ibox_footer'); // set title here
			if(title != "") {ibox_footer.innerHTML = title;}
			else {ibox_footer.innerHTML = "&nbsp;";}
			var urlString = /\.jpg|\.jpeg|\.png|\.gif|\.html|\.htm|\.php|\.cfm|\.asp|\.aspx|\.jsp|\.jst|\.rb|\.txt/gi; // file checking code borrowed from thickbox
			var urlType = url.match(urlString);
			if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif'){
				ibox_type = 0;
				ibox.showIndicator();
				var imgPreloader = new Image();
				imgPreloader.onload = function(){
					var imgWidthHeight = ibox.resizeImageToScreen({width: imgPreloader.width, height:imgPreloader.height}); // Fixed Safari image size
					ibox.hideIndicator();
					ibox.getElem('ibox_content').style.overflow = "hidden";
					var strHTML = "<a href=\"javascript:void(null);\"><img name=\"ibox_img\" src=\"" + url + "\" style=\"width:" + imgWidthHeight.width + "px; height:" + imgWidthHeight.height + "px;\" /></a>";
					if(ibox.loadCancelled == false) { // set width and height
						ibox_el.style.height = imgWidthHeight.height + 'px';
						ibox_el.style.width = imgWidthHeight.width + 'px';
						ibox_el.style.display = "";
						ibox_el.style.visibility = "hidden";
						ibox.posToCenter(ibox_el); 
						ibox_el.style.visibility = "visible";
						ibox.setIBoxContent(strHTML);
					}
				}
				ibox.loadCancelled = false;
				imgPreloader.src = url;
			}
			else if(url.indexOf("#") > 0) {
				var strHTML = "";
				ibox_type = 1;
				if(params['height']){ibox_el.style.height = params['height']+'px';}
				else {ibox_el.style.height = '110px';}
				if(params['width']) {ibox_el.style.width = params['width']+'px';}
				else {ibox_el.style.width = '390px';}
				ibox_el.style.display = "";
				ibox_el.style.visibility = "hidden";
				ibox.posToCenter(ibox_el);
				ibox_el.style.visibility = "visible";
				var elemSrcId = url.substr(url.indexOf("#") + 1, 1000);
				var elemSrc = ibox.getElem(elemSrcId);
				if(elemSrc) {strHTML = elemSrc.innerHTML;}
				ibox.setIBoxContent(strHTML);
			}
			else if(urlType=='.htm'||urlType=='.html'||urlType=='.php'|| urlType=='.asp'||urlType=='.aspx'||urlType=='.jsp'|| urlType=='.jst'||urlType=='.rb'||urlType=='.txt'|| urlType=='.cfm') {
				ibox_type = 2;
				ibox.showIndicator();
				ibox.http.open('get', url, true);
				ibox.http.onreadystatechange = function() {
					if(ibox.http.readyState == 4){
						ibox.hideIndicator();
						if(params['height']) {ibox_el.style.height = params['height'] + 'px';}
						else {ibox_el.style.height = '280px';}
						if(params['width']) {ibox_el.style.width = params['width'] + 'px';}
						else {ibox_el.style.width = '450px';}
						var pageWidthHeight = ibox.resizeImageToScreen({width:ibox_el.style.width,height:ibox_el.style.height});
						ibox_el.style.display = "";
						ibox_el.style.visibility = "hidden";
						ibox.posToCenter(ibox_el); 
						ibox_el.style.visibility = "visible";
						var response = ibox.http.responseText;
						ibox.setIBoxContent(response);
					}
				}
				ibox.http.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
				ibox.http.send(null);
			}
			ibox_el.style.opacity = 0;
			ibox_el.style.filter = 'alpha(opacity=0)';
			var ibox_op_level = 10;
			ibox.setIboxOpacity = ibox.setOpacity;
			for(var i = 0; i <= ibox_op_level; i++) {setTimeout("ibox.setIboxOpacity('ibox_wrapper'," + i + ")", 30 * i);}
			ibox.getElem("ibox_w").onclick = function() {ibox.hideIbox();}
			if(ibox_type == 1 || ibox_type == 2) {
				ibox_el.onclick = null;
			}
			else {
				ibox_el.onclick = ibox.hideIbox;
			}
		},
		setOpacity : function (elemid, value) {
			var e = ibox.getElem(elemid);
			e.style.opacity = value / 10;
			e.style.filter = 'alpha(opacity=' + value * 10 + ')';
		},
		resizeImageToScreen : function(objImg) {
			var pagesize = new ibox.getPageSize();
			var x = pagesize.width - 100;
			var y = pagesize.height - 100;
			if(objImg.width > x) {
				objImg.height = objImg.height * (x / objImg.width);
				objImg.width = x;
				if(objImg.height > y) {
					objImg.width = objImg.width * (y / objImg.height);
					objImg.height = y;
				}
			}
			else if(objImg.height > y) {
				objImg.width = objImg.width * (y/objImg.height);
				objImg.height = y;
				if(objImg.width > x) {
					objImg.height = objImg.height * (x/objImg.width);
					objImg.width = x;
				}
			}
			return objImg;
		},
		maintPos : function() {
			var ibox_el = ibox.getElem('ibox_wrapper');
			var box_w = ibox.getElem('ibox_w');
			var pagesize = new ibox.getPageSize();
			var ua = navigator.userAgent;
			if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width + 'px';} 
			else {box_w.style.width = pagesize.width - 20 + 'px';}
			if(ua.indexOf("Opera/9") != -1) {box_w.style.height = document.body.scrollHeight + 'px';}
			else {box_w.style.height = document.body.scrollHeight + 50 + 'px';}
			ibox.posToCenter(ibox_el);
		},
		hideIbox : function() {
			ibox.hideBG();
			var ibox_el = ibox.getElem('ibox_wrapper');
			ibox_el.style.display = "none";
			ibox.clearIboxContent();
			window.onscroll = null;
		},
		posToCenter : function(elem) {
			var scrollPos = new ibox.getScrollPos();
			var pageSize = new ibox.getPageSize();
			var emSize = new ibox.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;
		},
		setIBoxContent : function(str) {
			ibox.clearIboxContent();
			var e = ibox.getElem('ibox_content');
			e.innerHTML = str;
			if(e.style.overflow != "hidden")
				e.style.overflow = "auto";
		},
		clearIboxContent : function() {
			var e = ibox.getElem('ibox_content');
			e.innerHTML = "";
			e.style.overflow = "hidden";
		},
		getElem : function(elemId) {
			return document.getElementById(elemId);	
		},
		parseQuery : function(query) { // parseQuery code borrowed from thickbox, Thanks Cody!
			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;
		},
		createRequestObject : function() { // Make this IE7 Compatible, http://ajaxian.com/archives/ajax-on-ie-7-check-native-first
			var xmlhttp;
				/*@cc_on
			@if (@_jscript_version>= 5)
					try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
					} catch (e) {
							try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
							catch (E) {xmlhttp = false;}
					}
			@else
				xmlhttp = false;
			@end @*/
			if (!xmlhttp && typeof XMLHttpRequest != "undefined")
					try {xmlhttp = new XMLHttpRequest();} catch (e) {xmlhttp = false;}
			return xmlhttp;
		}
	}
	
	addOnLoad(ibox.init);
	