var ZoomTimer = null;
var ZoomParam = new Object();
ZoomParam['Aktiv'] = false; 
ZoomParam['Open'] = false; 
ZoomParam['delay'] = 5;
ZoomParam['steps'] = 25;

function ZoomInPreload(masterImgID, src, targetW, targetH)
{
	if (ZoomParam['Aktiv'])	return;
	if (ZoomParam['Open'])	return;
	ZoomParam['Aktiv'] = true;
	
	ZoomReset();
	
	masterImg = document.getElementById(masterImgID);
	
	ZoomParam['masterX'] = 0;
	ZoomParam['masterY'] = 0;
	var masterFind = masterImg;
	do {
		ZoomParam['masterX'] += masterFind.offsetLeft;
		ZoomParam['masterY'] += masterFind.offsetTop;
	} while (masterFind = masterFind.offsetParent)
	
	ZoomParam['masterW'] = masterImg.width;		if (ZoomParam['masterW'] == undefined)	ZoomParam['masterW'] = 50;
	ZoomParam['masterH'] = masterImg.height;	if (ZoomParam['masterH'] == undefined)	ZoomParam['masterH'] = 50;
	
	if (self.innerHeight)	{
		// all except Explorer
		myWidth = self.innerWidth;
    myHeight = self.innerHeight;
    myScrollX = self.pageXOffset;
    myScrollY = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.clientHeight)	{
		// Explorer 6 Strict Mode
		myWidth  = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
    myScrollX = document.documentElement.scrollLeft;
    myScrollY = document.documentElement.scrollTop;
	}
	else if (document.body)	{
		// other Explorers
		myWidth  = document.body.clientWidth;
    myHeight = document.body.clientHeight;
    myScrollX = document.body.scrollLeft;
    myScrollY = document.body.scrollTop;
	}
	else	{
		myWidth  = 800;
    myHeight = 600;
    myScrollX = 0;
    myScrollY = 0;
	}
	
	if (targetW > myWidth-50)	{
		var ratio = (myWidth-50) / targetW;
		targetW *= ratio;
		targetH *= ratio;
	}
	if (targetH > myHeight-50)	{
		var ratio = (myHeight-50) / targetH;
		targetW *= ratio;
		targetH *= ratio;
	}
	
	ZoomParam['targetX'] = (myWidth - targetW) * 0.5 + myScrollX;
	ZoomParam['targetY'] = (myHeight - targetH) * 0.5 + myScrollY;
	ZoomParam['targetW'] = targetW;
	ZoomParam['targetH'] = targetH;
	
	ZoomParam['zoomBox'] = document.getElementById('zoomBox');
	ZoomParam['zoomImg'] = document.getElementById('zoomImg');
	
	FadeObj(ZoomParam['zoomImg'], 0);
	ZoomParam['zoomBox'].style.visibility = "visible";
	
	ZoomParam['current'] = 0;
	ZoomParam['end'] = 100;
	ZoomParam['delta'] = (ZoomParam['end']-ZoomParam['current']) / ZoomParam['steps'];
	
	ZoomParam['currX'] = ZoomParam['masterX'];
	ZoomParam['currY'] = ZoomParam['masterY'];
	ZoomParam['currW'] = ZoomParam['masterW'];
	ZoomParam['currH'] = ZoomParam['masterH'];
	
	ZoomParam['dx'] = (ZoomParam['targetX']-ZoomParam['currX']) / ZoomParam['steps'];
	ZoomParam['dy'] = (ZoomParam['targetY']-ZoomParam['currY']) / ZoomParam['steps'];
	ZoomParam['dw'] = (ZoomParam['targetW']-ZoomParam['currW']) / ZoomParam['steps'];
	ZoomParam['dh'] = (ZoomParam['targetH']-ZoomParam['currH']) / ZoomParam['steps'];
	
	if (ZoomParam['zoomImg'].src.indexOf(src) == -1)	{
		ZoomParam['zoomImg'].onload = PreloadDone;
		ZoomParam['zoomImg'].src = src;
	}
	else	{
		window.setTimeout('ZoomElement()', ZoomParam['delay']);
	}
}

function PreloadDone()
{
	ZoomParam['zoomImg'].onload = null;
	window.setTimeout('ZoomElement()', ZoomParam['delay']);
}

function ZoomOutStart()
{
	if (ZoomParam['Aktiv'])	return;
	if (!ZoomParam['Open'])	return;
	ZoomParam['Aktiv'] = true;
	ZoomParam['Open'] = false;
	
	ZoomReset();
	
	ZoomParam['targetX'] = ZoomParam['masterX'];
	ZoomParam['targetY'] = ZoomParam['masterY'];
	ZoomParam['targetW'] = ZoomParam['masterW'];
	ZoomParam['targetH'] = ZoomParam['masterH'];
	
	ZoomParam['end'] = 0;
	ZoomParam['delta'] = (ZoomParam['end']-ZoomParam['current']) / ZoomParam['steps'];
	
	ZoomParam['dx'] = (ZoomParam['targetX']-ZoomParam['currX']) / ZoomParam['steps'];
	ZoomParam['dy'] = (ZoomParam['targetY']-ZoomParam['currY']) / ZoomParam['steps'];
	ZoomParam['dw'] = (ZoomParam['targetW']-ZoomParam['currW']) / ZoomParam['steps'];
	ZoomParam['dh'] = (ZoomParam['targetH']-ZoomParam['currH']) / ZoomParam['steps'];
	
	window.setTimeout('ZoomElement()', ZoomParam['delay']);
}

function ZoomElement()
{
	var ende = false;
	
	ZoomParam['current'] += ZoomParam['delta'];
	ZoomParam['currX'] += ZoomParam['dx'];
	ZoomParam['currY'] += ZoomParam['dy'];
	ZoomParam['currW'] += ZoomParam['dw'];
	ZoomParam['currH'] += ZoomParam['dh'];
	
	if (ZoomParam['delta'] > 0)	{
		if (ZoomParam['current'] >= ZoomParam['end'])	{
			ende = true;
			ZoomParam['Open'] = true;
		}
	}
	else	{
		if (ZoomParam['current'] <=ZoomParam['end'])	{
			ende = true;
			ZoomParam['zoomBox'].style.visibility = "hidden";
		}
	}
	if (ende)	{
		ZoomParam['current'] = ZoomParam['end'];
		ZoomParam['currX'] = ZoomParam['targetX'];
		ZoomParam['currY'] = ZoomParam['targetY'];
		ZoomParam['currW'] = ZoomParam['targetW'];
		ZoomParam['currH'] = ZoomParam['targetH'];
		
		ZoomParam['Aktiv'] = false;
	}
	
	ZoomParam['zoomBox'].style.left = ZoomParam['currX']+'px';
	ZoomParam['zoomBox'].style.top = ZoomParam['currY']+'px';
	
	ZoomParam['zoomImg'].width = ZoomParam['currW'];
	ZoomParam['zoomImg'].height = ZoomParam['currH'];
	
	FadeObj(ZoomParam['zoomImg'], ZoomParam['current']);
	
	if (!ende) window.setTimeout('ZoomElement()', ZoomParam['delay']);
}

function ZoomReset()
{
	if (!ZoomTimer)	return;
	window.clearTimeout(ZoomTimer);
	ZoomTimer = null;
}

function FadeObj(obj, level)
{
	var s = obj.style;
	
  if (navigator.userAgent.indexOf("Firefox") != -1) {
    if (level == 100) { level = 99.999; }
  }
  
  s.filter = "alpha(opacity="+level+")";
	s.KhtmlOpacity = (level / 100);
  s.MozOpacity = (level / 100);
  s.opacity = (level / 100);
}
