var ie = (document.all);			// ist es der Internetexplorer??

firstMouse = true;					// Flag: ist das gerade die erste eingehende Mauskoordinate?
firstX = 0;								// Erste Koordinaten der Mausbewegung
firstY = 0;								// ...
bigobj = null;							// Das verdeckte, zu scrollende Objekt (Vergrößerung)
smallobj = null;						// Das darüberliegende Objekt	(Übersichtsbild)

Width = 0;								// Breite des großen Objektes
Height = 0;								// Höhe ...
FrameWidth = 0;						// Breite des Rahmens in dem sich alles Abspielt
FrameHeight = 0;						// Höhe ...

Animation = null;						// Interval für Garagentoranimation
AnimationDirection = 0;				// Bewegt es sich rauf oder runter? (zB -10px)
animobj = null;						// Dieses Objekt wird gerade animiert
slider = null;							// Welches verdeckende Bild wurde zuletzt bewegt?


// Beginn des Verschiebens
function drag(who)
	{
	bigobj = who;																	// Objektzeiger kopieren, auf dieses Objekt wurde geklickt
	smallobj = bigobj.nextSibling;											// Das verdeckte Objekt suchen.
	while(smallobj.nodeName=="#text")										// Dabei kann es sich um alles außer Text handeln
		{smallobj = smallobj.previousSibling;}								// Falls nicht gefunden, eins weiter vor
	
	Width			= parseInt(bigobj.style.width);							// Breite und Höhe von großem Objekt und Rahmen
	Height		= parseInt(bigobj.style.height);							// stehen in den Stylesheets.
	FrameWidth	= parseInt(who.parentNode.style.width);				// ...
	FrameHeight	= parseInt(who.parentNode.style.height);				// ...

	document.onmouseup = undrag;												// Geht der Mausknopf irgendwo hoch, Verschieben beenden.
	document.onmousemove = move;												// Bewegt sich die Maus, Objekt verschieben.

	return false;
	}

// Verschieben beendet
function undrag()
	{
	document.onmousemove = null;												// Mausbewegung nicht mehr überwachen.
	firstMouse = true;															// Der nächste Klick wird wieder neue Startkoordinaten setzen.
	}

// Objekt mit drag&drop bewegen
function move(e)
	{
	x=0;															// Hier stehen gleich die aktuellen Mauskoordinaten drin
	y=0;															// ...
	if(ie)
		{
		e = window.event;										// So geht's beim Explorer
		x = e.x;													// ...
		y = e.y;													// ...
		}
	else
		{
		x = e.pageX;											// So bei allen anderen
		y = e.pageY;											// ...
		}

	if(firstMouse)												// Sind die einkommenden Koordinaten die ersten?
		{															// Das Objekt soll ja nur relativ bewegt werden.
		firstX = x-parseInt(bigobj.style.left);		// Dann jetzt die Position des zu verschiebenden Objektes
		firstY = y-parseInt(bigobj.style.top);			// speichern
		firstMouse = false;
		}

	putX = Math.min( (x - firstX), 0);					// Berechnen, wohin das Objekt nun tatsächlich geschoben wird,
	putX = Math.max( putX, (FrameWidth-Width));		//	Verrechnung der aktuellen Mausposition und der ursprünglichen
																	// Objektposition ...
	putY = Math.min( (y - firstY), 0);					// ...
	putY = Math.max( putY, (FrameHeight-Height));	// ...

	bigobj.style.left =	putX +"px";						// Und rein damit.
	bigobj.style.top =	putY +"px";

	return false;
	}

// Verdeckendes Objekt wegschieben
function gateOpen(who)
	{
	FrameWidth	= parseInt(who.parentNode.style.width);	// Schnell benötigte Rahmendaten rausfinden ...
	FrameHeight	= parseInt(who.parentNode.style.height);	// ...
	startAnimation(who,-(Math.round(FrameHeight/16)));		// Das verdeckende Objekt wird in 16 Schritten weggeschoben.
	slider = who;
	return false;
	}

// Verdeckendes Objekt wieder hinschieben
function gateClose()
	{
	startAnimation(slider,(Math.round(FrameHeight/3)));	// Das verdeckende Objekt wird in 3 Schritten zurückgeschoben.
																			// Benötigte Rahmendaten wurden bereits beim Aufgehen ermittelt.
	return false;
	}

// Animationsverwaltung sozusagen
function startAnimation(obj, direction)
	{
	if(Animation)													// Läuft schon eine Animation?
		{
		if(obj!=animobj)											// Und ist das neue zu bewegende Objekt nicht das,
			{															// welches sich sowieso gerade bewegt?
			animobj.style.top		= "0px";						// Dann schnell das alte wieder an die Ausgangsposition zurück.
			}
		}
	else
		{
		Animation = setInterval("gate()",25);				// Läuft noch keine Animation, muss sie gestartet werden.
		}
	animobj = obj;													// Das neue zu bewegende Objekt.
	AnimationDirection = direction;							// Die neue Bewegungsrichtung.
	}

// Bewegung des verdeckenden Bildes
function gate()
	{
	currentY = parseInt(animobj.style.top);				// Da befindet sich das Ding gerade.
	newY = Math.min(0, currentY+AnimationDirection);	// Weiter runter als 0 sollte es nicht gehen
	newY = Math.max(-FrameHeight, newY);					// und auch nicht höher als gerade nicht mehr sichtbar.
	animobj.style.top = newY + "px";							// Und hin damit!

	if( (newY==-FrameHeight) || (newY==0) )				// Ist es am Ziel angekommen?
		{
		clearInterval(Animation);								// Animation beenden.
		Animation = null;											// ...
		}
	}
