function viewbox(){
	var low=50;
	var medium=150;
	var high=600;
	var img=null;
	var imgX=0;
	var imgY=0;
	var src=null;
	var tempimg=null;
	var iv=null;
	var x=0;
	var y=0;

	this.addEvent=function(obj,evType,fn,useCapture){if(obj.addEventListener){obj.addEventListener(evType,fn,useCapture); return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn); return r;}else{alert("Handler could not be attached");}}

	this.init=function(c,low,medium,high){
		low=low; medium=medium; high=high;
		tempimg=document.createElement('img');
		var D=document.getElementsByTagName('div');

		var i,j,d,thumb;
		for(i=0; d=D[i]; i++){
			if(d.className==c){
				img=d.getElementsByTagName('img');
				viewbox.addEvent(img[0],'click',viewbox.next,false);
				viewbox.addEvent(img[0],'mouseover',viewbox.over,false);
				viewbox.addEvent(img[0],'mousemove',viewbox.move,false);
				viewbox.addEvent(img[0],'mouseout',viewbox.out,false);
				img[0].style.position='relative';

				var a=img[0].parentNode;
				while(a.nodeName!='A'){a=a.parentNode;}
				a.style.display='block';
				a.style.position='relative';
				a.style.overflow='hidden';
				a.style.width=medium+'px';
				a.style.height=medium+'px';
				a.style.border='1px solid #FFF';

				for(j=1; thumb=img[j]; j++){
					thumb.style.display='none';
					thumb.style.position='relative';
					thumb.style.top='-'+(low+2)+'px';
					thumb.style.left=(medium-low-2)+'px';
					thumb.style.border='1px solid #FFF';
					thumb.style.cursor='pointer';
					if(j==2){thumb.style.display='block';}

					viewbox.addEvent(thumb,'click',viewbox.thumb,true);
					viewbox.addEvent(thumb,'mouseover',viewbox.thumbover,true);	
					viewbox.addEvent(thumb,'mouseout',viewbox.thumbout,true);	
				}
			}
		}
	}

	this.over=function(e){
		if(!e){var e=window.event;}
		if(e.target){img=e.target;}else if(e.srcElement){img=e.srcElement;}
		if(img.nodeType==3){img=img.parentNode;}

		var a=img.parentNode;
		while(a.nodeName!='A'){a=a.parentNode;}
		a.style.border='1px solid #FFA800';

		src=img.src;

		var i=img;
		imgX=i.offsetLeft;
		imgY=i.offsetTop;
		if(i.offsetParent){while(i=i.offsetParent){imgX+=i.offsetLeft; imgY+=i.offsetTop;}}
		
		tempimg.src='';
		iv=self.setInterval('viewbox.zoom(true)',500);
	}

	this.out=function(e){
		iv=window.clearInterval(iv);

		img.style.left='0px';
		img.style.top='0px';
		img.style.width=medium+'px';
		img.style.height=medium+'px';
		img.src=src;
		
		var a=img.parentNode;
		while(a.nodeName!='A'){a=a.parentNode;}
		a.style.border='1px solid #FFFFFF';
		
		img=null;
	}

	this.move=function(e){
		if(!e){var e=window.event;}
		var posx=0;
		var posy=0;
		if(e.pageX||e.pageY){
			posx=e.pageX;
			posy=e.pageY;
		}else if(e.clientX||e.clientY){
			posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
			posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;
		}

		x=posx-imgX;
		y=posy-imgY;
		viewbox.pos();
	}

	this.preload=function(){if(img!=null){img.src=tempimg.src;}}

	this.zoom=function(p){
		iv=window.clearInterval(iv);

		if(p){viewbox.addEvent(tempimg,'load',viewbox.preload,false); tempimg.src=img.src.replace('_medium','_high');}

		var end=false;
		var w=Math.round(img.offsetWidth*1.1);
		var h=Math.round(img.offsetHeight*1.1);
		if(w>high){w=high; h=medium*(high/medium); end=true;}
		img.style.width=w+'px';
		img.style.height=h+'px';
		viewbox.pos();

		if(!end){iv=self.setInterval('viewbox.zoom(false)',0);}
	}

	this.pos=function(){
		var w=img.offsetWidth;
		var h=img.offsetHeight;
		
		if(w>medium){
			var f=w/medium;
			var left=Math.round(((x*f)-x)*-1);
			var top=Math.round(((y*f)-y)*-1);
			img.style.left=left+'px';
			img.style.top=top+'px';
		}
	}

	this.thumb=function(e){
		var thumb;
		if(!e){var e=window.event;}
		if(e.target){thumb=e.target;}else if(e.srcElement){thumb=e.srcElement;}
		if(thumb.nodeType==3){thumb=thumb.parentNode;}

		var a=thumb.parentNode;
		while(a.nodeName!='A'){a=a.parentNode;}
		a.setAttribute('onclick','return false');
		a.blur();

		var IMG=a.getElementsByTagName('img');

		IMG[0].src=thumb.src.replace('_low','_medium');

		var i,j,img;
		for(i=1; img=IMG[i]; i++){
			img.style.display='none';
			if(img==thumb){j=i;}
		}
		
		j < IMG.length-1 ? j++: j=1;
		IMG[j].style.display='block';

		return false;
	}

	this.thumbover=function(e){
		var thumb;
		if(!e){var e=window.event;}
		if(e.target){thumb=e.target;}else if(e.srcElement){thumb=e.srcElement;}
		if(thumb.nodeType==3){thumb=thumb.parentNode;}
		thumb.style.border='1px solid #FFA800';
	}
	
	this.thumbout=function(e){
		var thumb;
		if(!e){var e=window.event;}
		if(e.target){thumb=e.target;}else if(e.srcElement){thumb=e.srcElement;}
		if(thumb.nodeType==3){thumb=thumb.parentNode;}
		thumb.style.border='1px solid #FFFFFF';
	}

	this.next=function(e){
		var a=img.parentNode;
		while(a.nodeName!='A'){a=a.parentNode;}
		a.setAttribute('onclick','return true');
	}
}

var viewbox=new viewbox();