function initDock(element) {
	//private:
	function _startMouseCapture(f) {
		if(document.addEventListener) {
			Dock.theDockDiv.addEventListener('mousemove',f, false);
		} else {
			Dock.theDockDiv.attachEvent('onmousemove',f);
		}
	};
	function _stopMouseCapture() {
		if(document.removeEventListener) {
			Dock.theDockDiv.removeEventListener('mousemove',_getMousePosition, false);
		} else {
			Dock.theDockDiv.detachEvent('onmousemove',_getMousePosition);
		}
		Dock.theMousePos=null;
		_restoreDock();
	};
	function _getMousePosition(e) {
		if(!e) var e=window.event;
		if(!e.pageX) {
		var pos = {
			x : e.clientX + document.body.scrollLeft - Dock.theDockDivPos.x,
			y : event.clientY + document.body.scrollTop - Dock.theDockDivPos.y
			};
		} else {
		var pos = {
			x : e.pageX-Dock.theDockDivPos.x,
			y : e.pageY-Dock.theDockDivPos.y
			};
		}
		Dock.theMousePos = pos;
		if(pos.y>70 || pos.y<10)
		{
			_stopMouseCapture();
			Dock.start();
		}
	};
	function _findPos(obj) {
		var pos = {x:null,y:null};
		if(obj.offsetParent) {
			while (obj.offsetParent) {
				pos.x += obj.offsetLeft;
				pos.y += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if(obj.x) {
			pos.x += obj.x;
			pos.y += obj.y;
		}
		return pos;
	};
	function _getDockItems(obj) {
		var k=obj.firstChild;
		var r=new Array();
		while(k != null)
		{
			if(k.nodeName=='IMG' && k.getAttribute('alt')=='Dock-Item')
			{
				r.push(k);
			}
			k=k.nextSibling;
		}
		return r;
	};
	function _getDockItemKey() {
		for(var i=0; i<Dock.theDockItems.length; i++)
		{
			if(Dock.theMousePos.x>=Dock.theDockItems[i].offsetLeft && Dock.theMousePos.x<=(Dock.theDockItems[i].offsetLeft+Dock.theDockItems[i].width))
			{
				return i;
			}
		}
		return -1;
	};
	function _resizeElementWidth(itemKey,fromW,toW,step)
	{
		if(!step)
			step=1;
		if(fromW<toW) {
			if(fromW+step<=toW) {
				newW=fromW+step;
			} else {
				newW=toW;
			}
			Dock.theDockItems[itemKey].width=newW;
			Dock.theDockItems[itemKey].height=Math.round((Dock.theDockItems[itemKey].height/fromW)*newW);
		}
		else if(fromW>toW)
		{
			if(fromW-step>=toW) {
				newW=fromW-step;
			} else {
				newW=toW;
			}
			Dock.theDockItems[itemKey].width=newW;
			Dock.theDockItems[itemKey].height=Math.round((Dock.theDockItems[itemKey].height/fromW)*newW);
		}
	};
	function _makeDockEffect() {
		var itemKey=_getDockItemKey();
		if(itemKey<0) {
			_restoreDock();
			return;
		}
		var tmp=Dock.theMousePos.x-Dock.theDockItems[itemKey].offsetLeft;
		var tp=tmp/Dock.theDockItems[itemKey].width;
		var bp=1-tp;
		var inc=(Dock.maxW-Dock.minW)/Dock.inc;
		var i=0;
		var size=0;
		while(Dock.theDockItems[itemKey+i] || Dock.theDockItems[itemKey-i])
		{
			if(i==0) {
				_resizeElementWidth(itemKey, Dock.theDockItems[itemKey].width, Dock.maxW,50);
				size=size+Dock.theDockItems[itemKey+i].width;
			} else {
				if(Dock.theDockItems[itemKey+i] && i<Dock.inc) {
					_resizeElementWidth(itemKey+i, Dock.theDockItems[itemKey+i].width, Math.floor((Dock.maxW-(i*inc))+(tp*inc)),50);
					size=size+Dock.theDockItems[itemKey+i].width;
				}
				if(Dock.theDockItems[itemKey-i] && i<Dock.inc) {
					_resizeElementWidth(itemKey-i, Dock.theDockItems[itemKey-i].width, Math.floor((Dock.maxW-(i*inc))+(bp*inc)),50);
					size=size+Dock.theDockItems[itemKey-i].width;
				}
				if(Dock.theDockItems[itemKey+i] && i>=Dock.inc) {
					_resizeElementWidth(itemKey+i, Dock.theDockItems[itemKey+i].width, Dock.minW,50);	
				}
				if(Dock.theDockItems[itemKey-i] && i>=Dock.inc) {
					_resizeElementWidth(itemKey-i, Dock.theDockItems[itemKey-i].width, Dock.minW,50);
				}
			}
			i++;
		}
	};
	function _optimizeDockSize()
	{
		var l=Dock.theDockItems.length;
		Dock.theDockWidth = Dock.theDockDiv.offsetWidth;
		Dock.minW=Math.floor(Dock.theDockWidth/(l*(Dock.inc/2)));
		Dock.maxW=Dock.minW*Dock.inc;
		for(var i=0; i<l; i++)
		{
			Dock.theDockItems[i].style.display='inline';
			_resizeElementWidth(i, Dock.theDockItems[i].width, Dock.minW, 1000);			
		}
	};
	function _storeDock()
	{
		for(var i=0; i<Dock.theDockItems.length; i++)
		{
			Dock.theOrigDockItems[i]={width: Dock.theDockItems[i].width, height: Dock.theDockItems[i].height};
		}
	};
 	function _restoreDock()
 	{
		for(var i=0; i<Dock.theDockItems.length; i++)
		{
			Dock.theDockItems[i].width=Dock.theOrigDockItems[i].width;
			Dock.theDockItems[i].height=Dock.theOrigDockItems[i].height;
		}
 	};
 	function _makeGenieEffect()
 	{
		document.getElementById('display').style.display='none';
		document.getElementById('display').style.zIndex='1';
		var genieStart = {
				t : this.offsetTop,
				l : this.offsetLeft,
				h : this.height,
				w : this.width
			};
		var genieEnd 	= {
				t : 80,
				l : 0,
				h : 0,
				w : 0
			};
		if(genieStart.h>genieStart.w) //portrait
		{
			genieEnd.h=(document.getElementById('actual').offsetHeight-80<=600) ? document.getElementById('actual').offsetHeight-80 : 600;
			genieEnd.w=Math.floor((genieStart.w/genieStart.h)*genieEnd.h);
		}
		else
		{
			genieEnd.h=document.getElementById('actual').offsetHeight-80;
			genieEnd.w=Math.floor((genieStart.w/genieStart.h)*genieEnd.h);
			if(genieEnd.w>600)
			{
				genieEnd.w=600;
				genieEnd.h=Math.floor((genieStart.h/genieStart.w)*genieEnd.w);
			}
		}
		var genieSteps = {
				x : Math.round((genieEnd.l-genieStart.l)/100),
				y : Math.round((genieEnd.t-genieStart.t)/100),
				h : Math.round((genieEnd.h-genieStart.h)/100),
				w : Math.round((genieEnd.w-genieStart.w)/100)
		};
		document.getElementById('display').firstChild.src=this.src;
		document.getElementById('display').style.display='inline';
		i=0;
		t=window.setInterval(function() {
				if(genieStart.l>genieEnd.l)
					genieStart.l+=(genieSteps.x*i);
				if(genieStart.t<genieEnd.t)
					genieStart.t+=(genieSteps.y*i);
				if(genieStart.h<genieEnd.h)
					genieStart.h+=(genieSteps.h*i);
				if(genieStart.w<genieEnd.w)
					genieStart.w+=(genieSteps.w*i);
					
				if(genieStart.l>genieEnd.l)
					document.getElementById('display').style.left=genieStart.l+'px';
				if(genieStart.t<genieEnd.t)
					document.getElementById('display').style.top=genieStart.t+'px';
				if(genieStart.h<genieEnd.h)
					document.getElementById('display').firstChild.height=genieStart.h;
				if(genieStart.w<genieEnd.w)
					document.getElementById('display').firstChild.width=genieStart.w;
				if(genieStart.t>=genieEnd.t && genieStart.l<=genieEnd.l && genieStart.h>=genieEnd.h)
				{
					window.clearInterval(t);
					document.getElementById('display').style.left=genieEnd.l+'px';
					document.getElementById('display').style.top=genieEnd.t+'px';
					document.getElementById('display').style.zIndex='0';
				}
				i++;
		},10);
		document.getElementById('display').firstChild.src=this.src.replace(/thumbnails/i, 'display');
 	};
	function _regEvent(e,fn)
	{
		for(var i=0; i<Dock.theDockItems.length; i++)
		{
			if(document.addEventListener) {
				Dock.theDockItems[i].addEventListener(e,fn,false);
			}
			else {
				var s='Dock.theDockItems[i].on'+e+'='+fn;
				eval(s);
			}
		}
	};

 	//public
	var Dock = {
		inc : 3,
		active : null,
		maxW : null,
		minW : null,
		theDockDiv : '',
		theDockWidth : 700,
		theDockDivPos : null,
		theDockItems : null,
		theMousePos : null,
		theOrigDockItems : new Array(),
		initialize : function(element)
		{
			Dock.theDockDiv = (document.getElementById(element)) ? document.getElementById(element) : alert("Fehler:\nElement '"+element+"' konnte nicht gefunden werden.");
			Dock.theDockDivPos = _findPos(Dock.theDockDiv);
			Dock.theDockItems = _getDockItems(Dock.theDockDiv);
			Dock.resize();
			_regEvent('click',_makeGenieEffect,false);
		},
		start : function()
		{
			_startMouseCapture(_getMousePosition);
			Dock.active = window.setInterval(function() {if(Dock.theMousePos) _makeDockEffect();},40);
		},
		stop : function()
		{
			window.clearInterval(Dock.active);;
			_stopMouseCapture();
		},
		resize : function()
		{
			_optimizeDockSize();
			_storeDock();
		}
	};// end of Dock-Literal
	
	Dock.initialize(element);
	return Dock;
};//end of initDock

try {
	var Dock = null;
	window.onload = function() {		
		pano(8);
		if(document.getElementById('picturedock')) {
			Dock=initDock('picturedock');
			Dock.start();
		}
	};
	window.onresize = function() {
		if(Dock.active) {
			Dock.stop();
			Dock.resize();
			Dock.start();
		}
	}
}
catch(e)
{
	alert(e);
}
