	function fade() {

		var basicObject		= eval('({"basic":[{"ident":"layerShadow", "start":0, "current":0, "end":80}]})');

		var activeObject	= null;
		var waitingObject	= null;
		var running			= false;
		var close			= false;

		this.currentObject 	= null;
		this.currentMode	= null;

		this.timerFade		= false;
		this.timerClose		= false;

		// Setzt die Opacity für ein Element neu
		function changeOpacity(__id, __opacity) {

			if (__id) {
				object = document.getElementById(__id).style;
				object.opacity 		= (__opacity / 100);
				object.MozOpacity 	= (__opacity / 100);
				object.KhtmlOpacity = (__opacity / 100);
				document.getElementById(__id).style.filter = "alpha(opacity=" + __opacity + ")";
			}
		}

		// Baut sich ein Objekt aus den zu fadenen Objekten
		function buildObject(__ident, __current) {

			object 				= new Array();
			object[0] 			= new Object();
			object[0].ident 	= __ident;
			object[0].start		= 0;
			object[0].current 	= __current;
			object[0].end 		= 100;

			for(i = 0; i < basicObject.basic.length; i++) {
				object[(i+1)] = basicObject.basic[i];
			}

			return object;
		}

		// Startet das Einblenden
		function fadeIn(__object) {

			// Zuerst alle Elemente auf sichtbar setzen
			for(i = 0; i < __object.length; i++) {
				changeOpacity(__object[i].ident, 0);
				document.getElementById(__object[i].ident).style.display = 'block';
			}

			// Bestimmung der Position des einzublendenen Layers
			offsetTop = document.getElementById(__object[0].ident).offsetTop;

			if ('dummy' == __object[0].ident) {
				
				// Sollte sich der Layer oben befinden, dann andere Position festlegen
				document.getElementById(__object[1].ident).style.top 	= '31px';
				document.getElementById(__object[1].ident).style.height = document.getElementById('navigation').offsetHeight - 34 + 'px';
			}
			else {
			
				if ('layerNavigationSecond' == __object[0].ident) {
					//zusätzlichen Shadowlayer einblenden
					//document.getElementById('layerShadowSecond').style.filter = "alpha(opacity= 0.6)";
					document.getElementById('layerShadowSecond').style.display = 'block';
				
					// Sollte sich der Layer oben befinden, dann andere Position festlegen

					document.getElementById(__object[1].ident).style.top 	= $(document.getElementById(__object[0].ident)).position().top + 'px';
					document.getElementById('layerShadowSecond').style.top 	= '32px';
					document.getElementById('layerShadowSecond').style.height = '29px';
					document.getElementById(__object[1].ident).style.height = $(document.getElementById('navigation')).height() - 78 + 'px';
					
					// Sollte sich der Layer oben befinden, dann andere Position festlegen
				}
				else {
					// Sollte sich der Layer oben befinden, dann andere Position festlegen
					//document.getElementById(__object[1].ident).style.top 	= document.getElementById(__object[0].ident).offsetHeight + 'px';
					document.getElementById(__object[1].ident).style.top 	= '32px';
					document.getElementById(__object[1].ident).style.height = document.getElementById('navigation').offsetHeight - (document.getElementById(__object[0].ident).offsetHeight) + 41 + 'px';
				}

			}

			// Eigentlichte Einblenden starten
			fade(__object, true);
		}

		// Startet das Ausblenden
		function fadeOut(__object) {
			fade(__object, false);
			$('#home').removeClass('activeNav');
			$('.activeNav').removeClass('activeNav');
			document.getElementById('layerShadowSecond').style.display = 'none';
		}

		// Führt das Ein-/Ausblenden anhand des zweiten Parameters durch
		this.fade = function(__object, __mode) {

			// Wird benötigt um zu erkennen, ob alle Elemente vollständig ein-/ausgeblendet sind
			stopCounter = 0;

			for(i = 0; i < __object.length; i++) {

				// Entscheiden, ob ein- oder ausblenden
				if (__mode) {
					if (__object[i].current < __object[i].end) {
						changeOpacity(__object[i].ident, __object[i].current + 10);
						__object[i].current += 10;
					}
					else {
						stopCounter++;
					}

					// Aktives Objekt merken, damit dieses nachher aus wieder ausgeblendet werden kann
					activeObject = __object[0].ident;
				}
				else {
					if (__object[i].current > __object[i].start) {
						changeOpacity(__object[i].ident, __object[i].current - 10);
						__object[i].current -= 10;
					}
					else {
						stopCounter++;
					}
				}
			}

			// Aktuellen Modus und aktuelles Objekt sichern
			this.currentObject 	= __object;
			this.currentMode	= __mode;

			// Nur erneut starten, wenn noch nicht alle Elemente angehalten haben
			if (__object.length != stopCounter) {
				this.timerFade = setTimeout('JungFade.fade(this.currentObject, this.currentMode)', 20);
			}
			// Wenn am Ausblenden und ein Objekt wartet, dann sofort dieses Einblenden
			else if (false == __mode && null != waitingObject) {

				// Vorher noch die alten Objekte unsichtbar machen
				for(i = 0; i < __object.length; i++) {
					document.getElementById(__object[i].ident).style.display = 'none';
				}

				object 			= buildObject(waitingObject, 0);
				waitingObject 	= null;

				fadeIn(object);
			} else {
				waitingObject 	= null;
				running 		= false;

				if (!__mode) {
					activeObject = null;

					for(i = 0; i < __object.length; i++) {
						document.getElementById(__object[i].ident).style.display = 'none';
					}
				}
			}
		}

		// Startet das Einblenden eines neuen Layers
		this.toggle = function(__ident) {

			// Wenn ein aktives Element noch sichtbar ist und derzeit noch kein
			// Prozess läuft, dann erst das alte ausblenden
			if (activeObject != __ident && false == running) {
				// Aktiven Prozess markieren
				running = true;

				// Ganze muss zweimal durchgeführt werden, sonst reagiert es nicht beim
				// ersten Mal mit der Maus
				if (null != activeObject) {
					waitingObject 	= __ident;
					object 			= buildObject(activeObject, 100);
					fadeOut(object);

					object 			= buildObject(activeObject, 100);
					fadeOut(object);
					
				}
				else {
					object = buildObject(__ident, 0);
					fadeIn(object);

					object = buildObject(__ident, 0);
					fadeIn(object);
				}
			}
		}

		// Startet das eigentliche Ausblenden
		this.close = function() {

			// Es muss ein aktives Objekt geben und der Befehl
			// zum schließen muss noch aktuell sein
			if (null != activeObject && close) {
				close 	= false;
				object 	= buildObject(activeObject, 100);
				fadeOut(object);
			}
		}

		// Startet den Timer zum ausblenden der Layer
		this.startTimer = function() {
			close = true;
			this.timerClose = setTimeout('JungFade.close()', 100);
		}

		// Stoppt den Timer zum ausblenden der Layer
		this.stopTimer = function() {
			close = false;
		}
	};

