
var MODALBOX={ 
	addElement:function(parent,type,params){
		var newElem=document.createElement(type);
		if(params)for(key in params){newElem.setAttribute(key,params[key]);if(key=="class")newElem.setAttribute("className",params[key]);}
		if(parent)parent.appendChild(newElem);
	 	return newElem;
		},
	cleanup:function(){
		with(MODALBOX){removeElement("modalWindow");removeElement("modalOverlay");}
		return false;
		},
 	init:function(){
		var anchors=$.getByClass("modalbox",null,"a");
		for(var counter=0;counter<anchors.length;counter++){
			anchors[counter].onclick=function(){this.blur();MODALBOX.show(this.firstChild.alt,this.href);return false;}
			MODALBOX.addElement(anchors[counter],"img",{"alt":"View a larger version of this image","class":"magnify","src":"/_img/shared/modalbox-magnify.gif"});
			}
		},
	getPageScrollTop:function(){
		var yScrolltop;
		var xScrollleft;
		if(self.pageYOffset||self.pageXOffset)
			with(self){	yScrolltop=pageYOffset; xScrollleft=pageXOffset; }			
		else if(document.documentElement&&document.documentElement.scrollTop||document.documentElement.scrollLeft)	 
			with(document.documentElement){yScrolltop=scrollTop;xScrollleft=scrollLeft;}
		else if(document.body)
			with(document.body){yScrolltop=scrollTop;xScrollleft=scrollLeft;}
		arrayPageScroll=new Array(xScrollleft,yScrolltop);
		return arrayPageScroll;
		},
	getPageSize:function(){
		var de=document.documentElement;
		var w=window.innerWidth||self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth;
		var h=window.innerHeight||self.innerHeight||(de&&de.clientHeight)||document.body.clientHeight;
		arrayPageSize=new Array(w,h);
		return arrayPageSize;
		},
	loadPosition:function(){
		var pagesize=MODALBOX.getPageSize();
		var arrayPageScroll=MODALBOX.getPageScrollTop();
		with($.getById("modalLoad").style){
			left=(arrayPageScroll[0]+(pagesize[0]-100)/2)+"px";
			top=(arrayPageScroll[1]+((pagesize[1]-100)/2))+"px";
			display="block";
			}
		},
	overlaySize:function(){
		if (window.innerHeight&&window.scrollMaxY||window.innerWidth&&window.scrollMaxX){	
			yScroll=window.innerHeight+window.scrollMaxY;
			xScroll=window.innerWidth+window.scrollMaxX;
			var deff=document.documentElement;
			var wff=(deff&&deff.clientWidth)||document.body.clientWidth||window.innerWidth||self.innerWidth;
			var hff=(deff&&deff.clientHeight)||document.body.clientHeight||window.innerHeight||self.innerHeight;
			xScroll-=(window.innerWidth-wff);
			yScroll-=(window.innerHeight-hff);
			}
		else if(document.body.scrollHeight>document.body.offsetHeight||document.body.scrollWidth>document.body.offsetWidth){ 
			yScroll=document.body.scrollHeight;
			xScroll=document.body.scrollWidth;
			}
		else{ 
			yScroll=document.body.offsetHeight;
			xScroll=document.body.offsetWidth;
	  	}
		with($.getById("modalOverlay").style){
		 	height=yScroll+"px";
		 	width=xScroll+"px";
		 	}
		},
	position:function(){
		MODALBOX.overlaySize();
		var pagesize=MODALBOX.getPageSize();	
		var arrayPageScroll=MODALBOX.getPageScrollTop();
		with($.getById("modalWindow").style){
			width=MODALBOX.WIDTH+"px";
			left=(arrayPageScroll[0]+(pagesize[0]-MODALBOX.WIDTH)/2)+"px";
			top=(arrayPageScroll[1]+(pagesize[1]-MODALBOX.HEIGHT)/2)+"px";
			}
		},
	remove:function(){
		with(window){onresize=null;onscroll=null;onkeyup=null;}
		$.getById("modalImageOff").onclick=null;
		$.getById("modalOverlay").onclick=null;
		$.getById("modalCloseWindowButton").onclick=null;
		MODALBOX.cleanup();
		return false;
		},
	removeElement:function(elem){
		if(typeof elem=='string')elem=$.getById(elem);
		try{elem.parentNode.removeChild(elem);}catch(err){}
		},
	show:function(caption,url){
		if (!$.getById("modalOverlay")){
			var overlayDiv=MODALBOX.addElement(document.body,"div",{"id":"modalOverlay"});
			overlayDiv.onclick=function(){return MODALBOX.remove();};
			var windowDiv=MODALBOX.addElement(document.body,"div",{"id":"modalWindow"});
			}
		window.onscroll=function(){MODALBOX.position();}
		MODALBOX.overlaySize();
		var loadingDiv=MODALBOX.addElement(document.body,"div",{"id":"modalLoad"});
		var loadingImg=MODALBOX.addElement(loadingDiv,"img",{"src":"/_img/shared/modalbox-loading.gif"});
		MODALBOX.loadPosition();
		imgPreloader=new Image();
		imgPreloader.onload=function() {
			imgPreloader.onload=null;
			var imageWidth=imgPreloader.width;
			var imageHeight=imgPreloader.height;
			MODALBOX.WIDTH=imageWidth+30;
			MODALBOX.HEIGHT=imageHeight+60;
			mbWindow=$.getById("modalWindow");
			aImageOff=MODALBOX.addElement(mbWindow,"a",{"href":"#","id":"modalImageOff","title":"Close"});
			aImageOff.onclick=function(){return MODALBOX.remove();};
			MODALBOX.addElement(aImageOff,"img",{"id":"modalImage","src":url,"width":imageWidth,"height":imageHeight,"alt":caption});
			mbCaption=MODALBOX.addElement(mbWindow,"div",{"id":"modalCaption"});
			mbCaption.innerHTML=caption;
			mbCloseWindow=MODALBOX.addElement(mbWindow, "div",{"id":"modalCloseWindow"});
			mbCloseWindowButton=MODALBOX.addElement(mbCloseWindow,"a",{"href":"#","id":"modalCloseWindowButton","title":"Close"});
			with(mbCloseWindowButton){
				innerHTML="close";
				onclick=function(){return MODALBOX.remove();};
				}
			MODALBOX.position();
			MODALBOX.removeElement("modalLoad");
			mbWindow.style['display']="block";
			}
		imgPreloader.src=url;
		window.onresize=function(){MODALBOX.position();}
		}
	};	

$.addOnload(MODALBOX.init);

