function animatedock()
{
	var base = document.getElementById('dockbase');
	var dock = document.getElementById('dock');
	dock.style.width='100px';
	if (base.dockleft == base.docktarget)
	{
		clearInterval(base.interval);
		base.interval=0;
		return;	//cancel;
	}
	else if (base.docktarget>base.dockleft)	//we're becoming visible
	{
		base.dockleft+=10;
		if (base.dockleft>=base.docktarget)
		{
			base.dockleft = base.docktarget;
			clearInterval(base.interval);
			base.interval=0;
		}
		base.style.left = ''+base.dockleft+'px';
		return;
	}
	else if (base.docktarget<base.dockleft)	//we're hiding
	{
		base.dockleft-=3;
		if (base.dockleft<=base.docktarget)
		{
			base.dockleft = base.docktarget;
			clearInterval(base.interval);
			base.interval=0;
			dock.style.width='50px';
		}
		base.style.left = ''+base.dockleft+'px';
		return;
	}
}
		
function showdock()
{
	var base = document.getElementById('dockbase');
	//Set a new timeout
	if (base.timeout) clearTimeout(base.timeout);
	base.timeout = setTimeout('hidedock()', 3000);
	
	if (base.dockleft==0) return;

	if (base.interval)
	{
		if (base.docktarget==0) return;	//already coming
		base.docktarget=0;	//set.
		return;
	}
	//start 
	base.dockleft = -40;
	base.docktarget = 0;
	base.interval = setInterval('animatedock()', 40);
	base.dockvisible = true;
}

function hidedock()
{
	var base = document.getElementById('dockbase');
	if (base.timeout){
		clearTimeout(base.timeout);
		base.timeout = 0;
	}
	if (base.interval)
	{
		base.docktarget=-40;
		return;
	}
	//start
	base.docktarget = -40;
	base.interval = setInterval('animatedock()', 40);
	mouseover(null);
	base.dockvisible = false;
}

function mouseX(evt) {
	if (evt.pageX) return evt.pageX;
	else if (evt.clientX)
	   return evt.clientX + (document.documentElement.scrollLeft ?
	   document.documentElement.scrollLeft :
	   document.body.scrollLeft);
	else return null;
}
function mouseY(evt) {
	if (evt.pageY) return evt.pageY;
	else if (evt.clientY)
	   return evt.clientY + (document.documentElement.scrollTop ?
	   document.documentElement.scrollTop :
	   document.body.scrollTop);
	else return null;
}		

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function mouseover(evt)
{
	var dock = document.getElementById('dock');
	var dockbase = document.getElementById('dockbase');
	
	if (!evt) evt = window.event;

	var e;
	if (evt)
	{
		e = new Object();
		e.y=mouseY(evt);
		e.x=mouseX(evt);
	}

	if (!dockbase.dockvisible && e) showdock();

	
	if (!dock.inited && dock.dockItems)
	{
		//Set original values.
		for (var i=0; i<dock.dockItems.length; i++)
		{
			dock.dockItems[i].originalHeight = findPos(dock.dockItems[i])[1];
			dock.dockItems[i].originalLeft = findPos(dock.dockItems[i])[0];
		}
		dockbase.originalHeight = findPos(dockbase)[1];
		dock.inited=1;
	}
	
	if (!dock.dockItems)
	{
		return;
	}
	
	//Are we in an item ?
	
	var initem = -1;
	if (e)
	{
		for (var i=0; i<dock.dockItems.length; i++)
		{
			if (((dock.dockItems[i].originalHeight - 3 ) <=e.y) && 
				((dock.dockItems[i].originalHeight +64 +3))>e.y && 
				(findPos(dock.dockItems[i])[0] < e.x ) && 
				(findPos(dock.dockItems[i])[0]+dock.dockItems[i].width)>e.x)
			{
				initem = i;
				break;
			}
		}
	}
	
	if (initem>-1)
	{
		var dockmove = 0;
		
		for (var i=0; i<dock.dockItems.length; i++)
		{
			if (initem==i)
			{
				dock.dockItems[i].style.width='96px';
				dock.dockItems[i].style.height='96px';
				var lm = (e.y-(dock.dockItems[i].originalHeight));
				dockmove+=dockbase.originalHeight-lm/2;	//(32/2);
			}
			else
			{
				//Calculate distance 
				var itemCenter = dock.dockItems[i].originalHeight + 32;
				var distance = 40 - Math.abs(e.y - itemCenter)/4;
				if (distance<0) distance = 0;
				if (distance>=32) distance = 32;
				dock.dockItems[i].style.width=''+(64+distance)+'px';
				dock.dockItems[i].style.height=''+(64+distance)+'px';
				if (i<initem)
				{
					dockmove-=distance;
				}
			}
		}
		dockbase.style.top=''+(dockmove - findPos(dock)[1])+'px';
	}
	else
	{
		for (var i=0; i<dock.dockItems.length; i++)
		{
			dock.dockItems[i].style.width='64px';
			dock.dockItems[i].style.height='64px';
		}
		dockbase.style.top=''+(dockbase.originalHeight-findPos(dock)[1])+'px';
	}

	var hh = 0;
	for (var i=0; i<dock.dockItems.length; i++)
	{
		hh = hh + dock.dockItems[i].height+4;
	}
	hh = Math.floor(hh);
	
//	if (dockmove) dock.style.height=''+(hh+dockmove-32)+'px';
//	else dock.style.height=''+(hh + dockbase.originalHeight-32)+'px';
	dockbase.style.height=''+(hh)+'px';
}

function prepareDock(elements)
{
	var dock = document.getElementById('dock');
	var base = document.getElementById('dockbase');
	var contents = document.getElementById('dockcontents');
	for (var i=0; i<elements.length; i+=2)
	{
		var icon = elements[i];
		var url = elements[i+1];
		var linkje = document.createElement("a");
		linkje.setAttribute('href', url);
		var image = document.createElement("img");
		image.setAttribute('border', '0');
		image.setAttribute('id', 'dockimage'+(i/2));
		image.setAttribute('src', icon);
		image.setAttribute('onmouseout', mouseover(null));
		image.setAttribute('onmousemove', mouseover(null));
		image.setAttribute('width', 64);
		image.setAttribute('height', 64);
		image.setAttribute('num', i/2);
		linkje.appendChild(image);
		contents.appendChild(linkje);
	}
	var dockItems = new Array();
	for (var i=0; i<elements.length; i+=2)
	{
		var dockItem = document.getElementById('dockimage'+(i/2));
		dockItem.originalHeight = dockItem.y;
		dockItems[i/2] = dockItem;
	}
	dock.dockItems = dockItems;
	dock.style.height = ''+(68*dockItems.length+48+42+32)+'px';
}
