function lightbox(contentId) {
	// Icons definieren
	var iconExit = "typo3conf/ext/t3moomoo/images/coolclose.gif";
	var iconNext = "typo3conf/ext/t3moomoo/images/coolnext.gif";
	var iconPrev = "typo3conf/ext/t3moomoo/images/coolprev.gif";
	var clearGif = "clear.gif";
	
	// Hook zum Body-Tag holen
	var body	= $$('body')[0];
	var bodySize	= body.getSize();
	var bodyScroll	= body.getScroll();
	
	// Media Hilfsvariablen bereitstellen
	var mediaElements = t3moomoo_elements[contentId];
	var mediaIndex	= 0;
	var mediaMargin = 10;
	var mediaDescriptionHeightMin = 50;
	var mediaDescriptionHeight = mediaDescriptionHeightMin;
	
	// Flags bereitstellen
	var tweenActive = false;
	
	/* Effekte definieren. Wird später noch ausgelagert. */
	var curtainEffects = {
		"fadeIn" : {
			backgroundColor:['#000',	'#000'],
			opacity:	[0,		0.75],
			width:		[bodySize.x,	bodySize.x],
			height:		[bodySize.y,	bodySize.y],
			top:		[0,		0],
			left:		[0,		0],
			position:	'absolute'
		},
		"fadeOut" : {
			opacity:	[1,		0]
		}
	};
	
	var effectModes = {
		"shortLinear"	: { duration: 'short',	transition: Fx.Transitions.linear },
		"normalLinear"	: { duration: 'normal',	transition: Fx.Transitions.linear }
	}
	
	// Anzeige-Funktion
	var showMedia = function(mIndex) {
		var imgWidth = parseInt(mediaElements[mIndex]["getimagesize"]["0"]);
		var imgHeight = parseInt(mediaElements[mIndex]["getimagesize"]["1"]);
		var imgSizeRatio = imgWidth / imgHeight;
//		if (imgWidth > 500) { imgWidth = 500; imgHeight = imgWidth / imgSizeRatio; }
//		if (imgHeight > 500) { imgHeight = 500; imgWidth = imgHeight * imgSizeRatio; }
		
		var imageCaption = mediaElements[mIndex]["description"]["imagecaption"];
		
		var elementsFadeOut = function() {
			var spotActiveFlag = false;
			// Alle Bilder ausblenden, falls eines eingeblendet war
			for (var i=0; i < mediaElements.length; i++) {
				if (mediaElements[i]["image"].getStyle("opacity") > 0) {
					mediaElements[i]["image"].fade('out');
					var myImage = new Fx.Morph(mediaElements[i]["image"], effectModes["normalLinear"]).start({
						opacity: [1,0]
					});
					
					myImage.addEvent('complete', function() { myTodoList.callChain(); } );
					spotActiveFlag = true;
				}
			}
			// Buttons und Anzeigeflächen ausblenden
			displayPos.fade('hide');
			description.fade('hide');
			prevButton.fade('hide');
			nextButton.fade('hide');
			exitButton.fade('hide');
			
			if (spotActiveFlag == false) {
				myTodoList.callChain(); 
			}
		}

		var elementsFadeIn = function() {
			// Bild einblenden
			mediaElements[mIndex]["image"].fade('in');
			// Buttons und Anzeigeflächen ausblenden
			displayPos.fade('in');
			description.fade('in');
			prevButton.fade('in');
			nextButton.fade('in');
			exitButton.fade('in');
		}
		
		var setDescription = function() {
			description.setStyles({
				position:		'absolute',
				bottom:			mediaMargin,
				width:			imgWidth - (parseInt(exitButton.getStyle("width")) + mediaMargin)
			});
			description.set('text', imageCaption);
			mediaDescriptionHeight = 
				parseInt(description.getStyle('height'))
				+
				mediaMargin
				+
				parseInt(description.getStyle('font-size'));
			
			if (mediaDescriptionHeight < mediaDescriptionHeightMin) {
				mediaDescriptionHeight = mediaDescriptionHeightMin;
			}
						
// 			document.body.appendChild(prettyPrint(mediaDescriptionHeight));
		}
		
		var elementsRepos = function() {
			setDescription();

			mediaElements[mIndex]["image"].setStyles({
				position:	'absolute',
				top:		(bodySize.y-imgHeight-mediaDescriptionHeight) / 2,
				left:		(bodySize.x-imgWidth) / 2,
				width:		imgWidth,
				height:		imgHeight
			});
		
			// Displays		
			displayPos.setStyles({
				position:		'absolute',
				left:			mediaMargin,
				bottom:			mediaDescriptionHeight - mediaMargin
			});
			displayPos.set('text', (parseInt(mIndex)+1) + " / " + mediaElements.length);
	
			description.setStyles({
				position:		'absolute',
				left:			mediaMargin,
				right:			mediaMargin + parseInt(exitButton.getStyle("width"))
			});

			// Buttons 
			prevButton.setStyles({
				background:		'url(' + clearGif + ')',
				position:		'absolute',
				width:			imgWidth / 3 +(mediaMargin * 2),
				height:			imgHeight+(mediaMargin * 2),
				left:			(bodySize.x-imgWidth) / 2 - mediaMargin,
				top:			(bodySize.y-imgHeight-mediaDescriptionHeight) / 2 - mediaMargin
			});

			nextButton.setStyles({
				background:		'url(' + clearGif + ')',
				position:		'absolute',
				width:			imgWidth / 3 +(mediaMargin * 2),
				height:			imgHeight+(mediaMargin * 2),
				right:			(bodySize.x-imgWidth) / 2 - mediaMargin,
				top:			(bodySize.y-imgHeight-mediaDescriptionHeight) / 2 - mediaMargin
			});

			exitButton.setStyles({
				position:		'absolute',
				right:			mediaMargin,
				bottom:			(mediaDescriptionHeight - parseInt(exitButton.getStyle("height"))) / 2
			});		
		}
		
		var spotRepos = function() {
			setDescription();
			
			var spotdata = {
				width:		imgWidth+(mediaMargin * 2),
				height:		imgHeight+(mediaMargin * 2) + mediaDescriptionHeight,
				top:		(bodySize.y - imgHeight - mediaDescriptionHeight) / 2 - mediaMargin,
				left:		(bodySize.x - imgWidth) / 2 - mediaMargin
			}
		
			var mySpot = new Fx.Morph(spot, effectModes["normalLinear"]).start(spotdata);
			mySpot.addEvent('complete', function() {
				myTodoList.callChain();
			});
		}
		
		var Todo = new Class({
			Implements: Chain,
			initialize: function(){
				this.chain.apply(this, arguments);
			}
		});

		var myTodoList = new Todo(
			function(){ if (tweenActive == false) { tweenActive = true; elementsFadeOut();} },
			function(){ spotRepos(); },
			function(){ elementsRepos (); elementsFadeIn(); tweenActive = false; }
		);
		
		myTodoList.callChain();
	}

	// Langsam Reiten!
	// Sind Daten übergeben worden?
	if (mediaElements.length > 0) {
		// Ja:

		// Dom-Nodes erstellen						/* body			*/
		var stage	= new Element('div'); stage.inject(body);	/* +stage		*/
		var curtain  	= new Element('div'); curtain.inject(stage);	/*  +curtain		*/
		var spot	= new Element('div'); spot.inject(stage);	/*  +spot		*/
		var exitButton	= new Element('img'); exitButton.inject(spot);	/*   +exitButton	*/
		var displayPos	= new Element('div'); displayPos.inject(spot);	/*   +displayPos	*/
		var description	= new Element('div'); description.inject(spot);	/*   +description	*/
		var media	= new Element('div'); media.inject(stage);	/*  +media		*/
		var prevButton	= new Element('div'); prevButton.inject(stage);	/*  +prevButton		*/
		var nextButton	= new Element('div'); nextButton.inject(stage);	/*  +nextButton		*/

		// Dom-Nodes Klassen setzen
		stage.setProperty	("class", "stage");
	
		curtain.setProperty	("class", "curtain");
		spot.setProperty	("class", "spot");
		media.setProperty	("class", "media");
	
		displayPos.setProperty	("class", "displayPos");
		description.setProperty	("class", "description");
	
		prevButton.setProperty	("class", "prevButton");
		nextButton.setProperty	("class", "nextButton");
	
		exitButton.setProperty	("class", "exitButton");
		exitButton.setProperty	("src",	iconExit);
	
		// Funktionen für Navigationelemente
		var gotoPrevImage = function () {
			if (mediaIndex > 0) {
				mediaIndex--;
				showMedia(mediaIndex);
			}	
		}

		var gotoNextImage = function () {
			if (mediaElements[mediaIndex+1]) {
				mediaIndex++;
				showMedia(mediaIndex);
			}
		}
	
		var prevImageIcon = function () {
			if (mediaIndex > 0) {
				prevButton.setStyles({background: 'transparent url(' + iconPrev + ') no-repeat scroll 0% 97%'});
			}				
		}

		var nextImageIcon = function () {
			if (mediaElements[mediaIndex+1]) {
				nextButton.setStyles({background: 'transparent url(' + iconNext + ') no-repeat scroll 100% 97%'});
			}				
		}
	
		var clearIcon = function() {
			this.setStyles({background: 'url(' + clearGif + ')'})
		}	

		var exitLightbox = function() {
			var myFx = new Fx.Morph(stage, effectModes["shortLinear"]).start(curtainEffects["fadeOut"]);	
			myFx.addEvent('complete', function () {
				myFx.removeEvents();
				curtain.removeEvents();
				prevButton.removeEvents();
				nextButton.removeEvents();
				exitButton.removeEvents();
				stage.destroy()
			});
		}
	
		// Navigation Event-Handler setzen
		prevButton.addEvent('mouseover', prevImageIcon);
		nextButton.addEvent('mouseover', nextImageIcon);
	
		prevButton.addEvent('click', 	gotoPrevImage);
		nextButton.addEvent('click', 	gotoNextImage);	
	
		prevButton.addEvent('mouseout', clearIcon);
		nextButton.addEvent('mouseout', clearIcon);

		exitButton.addEvent('click', exitLightbox);
		curtain.addEvent('mousedown', exitLightbox);
		
		// Bilder laden, in den DOM-Tree einbinden, aber verstecken und positionieren
		for (var i=0; i < mediaElements.length; i++) {
			mediaElements[i]["image"] = new Element('img');

			with (mediaElements[i]["image"]) {
		
				setProperty(
					"src",
					mediaElements[i]["pathinfo"]["dirname"] + "/" +
					mediaElements[i]["pathinfo"]["basename"]
				);
			
				setProperty(
					"alt",
					mediaElements[i]["description"]["altText"]
				);

				setProperty(
					"title",
					mediaElements[i]["description"]["titleText"]
				);
			
				fade('hide');
			
				inject(media);
			}
		}

		// Los geht es!
		// Letzte INIT-Anweisung: Stage positionieren, Vorhang aufziehen & Spot init
	
		// Stage
		stage.setStyles({
			position:	'absolute',
			top:		bodyScroll.y,
			left:		bodyScroll.x,
			width:		bodySize.x,
			height:		bodySize.y,
			zIndex:		7000
		});
	
		// Vorhang
		new Fx.Morph(curtain, effectModes["normalLinear"]).start(curtainEffects["fadeIn"]);
	
		// Spot
		spot.setStyles({
			position:		'absolute',
			backgroundColor:	'#fff',
			width:			0,
			height:			0,
			top:			bodySize.y / 2,
			left:			bodySize.x / 2
		});		
		
		// erstes Bild anzeigen;
		showMedia(mediaIndex);
	} else {
		// Nein, es wurden keine Daten übergeben:
		// Abbrechen;
	}
}

