if ((typeof w)) {
	w = new Array();																						// Haupt-Array wird definiert
}

(function($){
	$.fn.wm_bildwechsel = function(o) {
		var z = w.length;																					// Wert für den neuen Index des Haupt-Arrays wird gesetzt
		w[z] = new Object;																					// Neues Objekt für das Haupt-Array
		w[z]['n'] = $(this).attr("id");																		// ID des bildwechsel-DIVs wird in Haupt-Array abgelegt
		var d = {																							// Standard-Optionen für den Bildwechsel
			autoStart: true, 																				// Animation startet automatisch
			delay: 5,																						// Anzeigedauer eines Bildes
			animationSpeed: 1,																				// Geschwindigkeit des Übergangs in Sekunden
			directAccess: false,																			// Ein Zusatzmenü wird eingeblendet, welches die Direktauswahl jedes Bildes ermöglicht
			infos: false,																					// Informationen aus 'alt' und 'title' werden ausgelesen und über das Bild gelegt
			mouseenterStop: false,																			// Animation wird angehalten bei mouseenter
			linkText: "...weitere Informationen", 															// Text des Links innerhalb des Info-Bereichs
			completeLinkText: false																			// Ganzer Text im Info-Bereich wird verlinkt
		};
		w[z]['o'] = $.extend(d, o); 																		// Übergebene Optionen werden in die Standard-Optionen integriert
		w[z]['o'].animationSpeed = w[z]['o'].animationSpeed * 1000; 										// Umwandlung von Sekunden in Millisekunden
		w[z]['o'].infoSpeed = w[z]['o'].animationSpeed; 												// Fade-Zeit der Info-Overlays wird gesetzt
		w[z]['s'] = false;																					// Variable wird später benötigt, wenn es nur ein Bild gibt
		w[z]['f'] = 'wm_bildwechsel_infosOverlay_'+w[z]['n'];												// ID des Info-Overlays wird in Haup-Array zwischengespeichert
		w[z]['g'] = 'wm_bildwechsel_infosLink_'+w[z]['n'];													// ID des Info-Links wird in Haup-Array zwischengespeichert
		w[z]['r'] = 'wm_bildwechsel_controlPause_'+w[z]['n'];												// ID des Pause-Buttons wird in Haup-Array zwischengespeichert
		w[z]['p'] = 'wm_bildwechsel_directAccess_'+w[z]['n'];												// ID des Direct-Access-Menüs wird in Haup-Array zwischengespeichert
		w[z]['q'] = 'wm_bildwechsel_img_'+w[z]['n']															// ID-Teil für die innenliegenden IMGs wird in Hauptarray zwischengespeichert
		
		$('#'+w[z]['n']).addClass("wm_bildwechsel");
		
		$('#'+w[z]['n']).find('img').each(function(i) {														// Funktionen für jedes innenliegende <img>
			$(this).attr("id", w[z]['q']+'_'+i);
			if (w[z]['o'].directAccess) {																	// Wenn das Direkt-Menü aktiviert ist
				if (!$('#'+w[z]['p']).length) {																// Wenn noch kein Direct-Access-Menü vorhanden ist
					$('<ul id="'+w[z]['p']+'" class="wm_directAccess"></ul>').appendTo('#'+w[z]['n']);		// Direct-Access UL einfügen
				}
				var b = i + 1;																				// Aktuelle Index-Zahl wird um 1 erhöht um als Bild-Zahl verwendet zu werden (Beginnend bei 1 und nicht bei 0)
				if (b < 10) {																				// Wenn die Bild-Zahl kleiner als 10 ist
					var b = '0'+b;																			// Führende Null an die Bild-Zahl anfügen
				}
				if (i == 0) {																				// Beim ersten durchlaufenen Bild
					var g = ' class="wm_directAccessHighlight"';											// Wird die CSS-Highlight-Klasse hinzugefügt
				} else {																					// Bei allen anderen Bildern
					var g = '';																				// Wird nichts hinzugefügt
				}
				$('<li'+g+'>'+b+'</li>').appendTo('#'+w[z]['p']);											// Listenpunkt im Direct-Access-Menü wird generiert und eingefügt
				$('#'+w[z]['p']).find('li:last').each(function() {											// Letzter Listenpunkt des Direct-Access-Menüs wird ausgewählt
					$(this).click(function() {																// Klick-Event wird hinzugefügt
						if (!w[z]['fa1'] && !w[z]['fa2'] && w[z]['s']) {									// Wenn kein Fade-Out und kein Fade-In im Gange ist (Variablen werden beim Bildwechsel erzeugt) und mehrere Bilder existieren
							$('#'+w[z]['p']).find('li.wm_directAccessHighlight').each(function() {			// Jeder Listenpunkt mit der CSS-Highlight-Klasse wird ausgewählt
								$(this).removeClass("wm_directAccessHighlight");							// CSS-Highlight-Klasse wird entfernt, wenn gefunden
							});
							$(this).addClass("wm_directAccessHighlight");									// CSS-Highlight-Klasse wird für angeklickten Menüpunkt hinzugefügt
							window.clearInterval(w[z]['t']);												// Intervall für den Bildwechsel wird entfernt
							var a = $(this).html() - 1;														// Index-Zahl wird aus Bild-Zahl erzeugt
							$('#'+w[z]['n']).find('img').each(function(k) {									// Jedes Bild des Bildwechsel-DIVs wird ausgewählt
								if (k == a) {																// Wenn Index des IMG mit dem Index der Bildzahl übereinstimmt
									w[z]['k'] = true;														// Information für den späteren Bildwechsel wird gesetzt, dass manueller Bildwechsel mit bestimmtem Bild stattfindet
									wm_bildwechsel_slide(this, true);										// Bildwechsel wird ausgeführt. Erster Parameter enthält, auf welches Bild gewechselt werden soll. Zweiter Parameter bewirkt, dass das Bildwechsel-Interval nicht gestartet wird
								}
							});
						}
					});
				});
			}
			if (i == 0) {																					// Beim ersten Bild
				$('#'+w[z]['n']).height($(this).height());													// Setze Höhe des Bildwechsel-DIVs gleich der Höhe des ersten Bildes
				$(this).load(function() {																	// Wenn das erste Bild vollständig geladen ist (notwendig für Webkit-Browser)
					$('#'+w[z]['n']).height($(this).height());												// Setze Höhe des Bildwechsel-DIVs gleich der Höhe des ersten Bildes
				});
				wm_bildwechsel_chgA(this);																	// Erstes Bild wird vorbereitet
			} else {																						// Bei allen weiteren Bildern
				w[z]['s'] = true;																			// Wenn es mehrere Bilder gibt, wird diese Variable auf true gesetzt und bestimmt später den Start des Bildwechsels
				$(this).css("display", "none"); 															// Alle weiteren Bilder werden ausgeblendet
			}
		});
		
		$('#'+w[z]['n']).mouseenter(function() {																					// Beim überfahren des bildwechsel-DIVs mit der Maus
			if (w[z]['o'].mouseenterStop) {																							// Wenn die Option zum reagieren bei Mouseover aktiviert ist
				window.clearInterval(w[z]['t']);																					// Interval wird gelöscht
				if (!$('#'+w[z]['r']).length) {																						// Wenn kein DIV mit der entsprechenden ID des Pause-Buttons gefunden wird
					$('<div id="'+w[z]['r']+'" class="wm_controlPause"></div>').appendTo('#'+w[z]['n']).stop().fadeIn("slow");		// Pause-Button generieren und einfaden
				}
			}
		});
		$('#'+w[z]['n']).mouseleave(function() {															// Beim verlassen des bildwechsel-DIVs mit der Maus
			if (w[z]['s']) {																				// Wenn es mehrere Bilder gibt
				window.clearInterval(w[z]['t']);															// Interval wird gelöscht
				wm_bildwechsel_slide(this);																	// Bildwechsel-Funktion wird neu gestartet (als wäre es der erste Aufruf)
				if ($('#'+w[z]['r']).length) {																// Wenn ein DIV mit der entsprechenden ID des Pause-Buttons gefunden wird
					$('#'+w[z]['r']).remove();																// Pause-Button-DIV wird aus dem DOM entfernt
				}
			}
		});
		
		if (w[z]['o'].autoStart && w[z]['s']) {																// Wenn Autostart aktiviert ist und es mehrere Bilder gibt
			wm_bildwechsel_slide(this);																		// Bildwechsel sofort starten
		}
		
		function wm_bildwechsel_chgA(dom) {																	// Funktion zum ändern der Umliegenden A-Tags in Overlay-Links
			var a = $(dom).parent().get(0); 																// Erstes Eltern-Element wird ausgewählt
			var ti = $(dom).attr("title");																	// Titel des Bildes wird zwischengespeichert
			if (a.tagName == 'A') {																			// Wenn erstes Eltern-Element ein A-Tag ist
				var l = ' <a id="'+w[z]['g']+'" href="'+$(a).attr("href")+'">'+w[z]['o'].linkText+'</a>'; 	// Information aus href-Attribut wird gespeichert
				var la = ' <a id="'+w[z]['g']+'" href="'+$(a).attr("href")+'">'+ti+'</a>';					// Alternativ-Variable für kompletten Linktext wird gespeichert
				$(dom).unwrap();																			// A-Tag wird entfernt
			}
			if (w[z]['o'].infos) {																			// Wenn das Info-Fenster angezeigt werden soll
				var s = '<div id="'+w[z]['f']+'" class="wm_infosOverlay" style="display: none;"><span>';	// Erster Overlay-Teil wird in Variable gespeichert
				var t = '</span></div>'																		// Zweiter Overlay-Teil wird in Variable gespeichert
				if (ti) {																					// Wenn ein Titel im IMG Tag existiert
					if (l) {																				// Wenn ein Link vorhanden ist
						if (w[z]['o'].completeLinkText) {													// Wenn die Option für komplette Verlinkung des Textes aktiviert ist
							var x = s+la+t;																	// Zusammenbau des Info-Overlay-Inhalts
						} else {																			// Wenn die Option für komplette Verlinkung des Textes de-aktiviert ist
							var x = s+ti+l+t;																// Zusammenbau des Info-Overlay-Inhalts
						}
					} else {																				// Wenn Kein Link vorhanden ist
						var x = s+ti+t;																		// Zusammenbau des Info-Overlay-Inhalts
					}
					$(x).appendTo('#'+w[z]['n']).stop().fadeIn(w[z]['o'].infoSpeed);						// Info-Fenster zusammenstellen und anfügen
				}
			}
		}
		
		function wm_bildwechsel_slide(d, u) {																// Funktion zum durchfüren des eigentlichen Bildwechsels
			if (!u && w[z]['s']) {																			// Wenn die Funktion das erste mal ohne den zweiten Parameter aufgerufen wird
				w[z]['t'] = window.setInterval(function() {													// Intervall wird gestartet und in Haupt-Array abgelegt
					wm_bildwechsel_slide(d, w[z]['t'])														// Bildwechsel-Funktion wird bei jedem Durchgang mit zweitem Parameter gestartet
				}, (w[z]['o'].delay * 1000));																// Delay wird aus den Optionen geholt und in Millisekunden umgerechnet
			} else {																						// Wenn die Funktion ohne zweiten Parameter gestartet wurde
				$('#'+w[z]['n']).find("img:visible").each(function(r) {										// Alle Bilder innerhalb des bildwechsel-DIVs werden durchlaufen
					if ($(d).attr("id") != $(this).attr("id")) {											// Wenn das aktuelle Bild nicht das nächste Bild sein soll (Kann bei manuellem Wechsel vorkommen)
						$('#'+w[z]['p']).find('li.wm_directAccessHighlight').each(function() {				// Jeder Listenpunkt mit der CSS-Highlight-Klasse wird ausgewählt
							$(this).removeClass("wm_directAccessHighlight");								// CSS-Highlight-Klasse wird entfernt, wenn gefunden
						});
						w[z]['fa1'] = true;																	// Variable wird gesetzt, die verhindern soll dass ein Fade-Vorgang gestartet wird, während er noch läuft
						$(this).fadeOut(w[z]['o'].animationSpeed, function() {								// Das bisherige Angezeigte Bild wird ausgeblendet
							w[z]['fa1'] = false;															// Nach dem ausblenden wird die Variable wieder ungültig gemacht
						});		
						if (w[z]['k']) {																	// Wenn die Variable für einen manuellen Wechsel gesetzt ist
							next = $(d);																	// Variable für das nächste Bild auf den übergebenen Wert setzen
							w[z]['k'] = false;																// Variable die den manuellen Wechsel signalisiert wieder ungütlig machen
						} else {																			// Bei jedem normalen, automatischen Wechselvorgang
							next = $(this).next();															// Nächstes DOM-Element wird in Variable gespeichert
						}
						if (next.is('a')) {																	// Wenn nächstes DOM-Element ein A-Tag ist
							next = next.find('img');														// IMG innerhalb des A-Tags finden
						}
						if (!next.is('img')) {																// Wenn nächstes DOM-Element immernoch kein IMG ist
							$('#'+w[z]['n']).find('img:first').each(function() {							// Jedes IMG innerhalb des DIV-Eltern-Elements durchlaufen
								next = $(this);																// Erstes gefundenes IMG in Variable speichern
							});
						}
						if ($('#'+w[z]['g']).length) {														// Wenn ein A-Tag im Info-Bereich vorhanden ist
							$(this).wrap('<a href="'+$('#'+w[z]['g']).attr("href")+'" />');					// A-Tag wird wieder um altes Bild gelegt
							$('#'+w[z]['g']).remove();														// A-Tag wird aus Info-Overlay entfernt
						}
						if ($('#'+w[z]['f']).length) {														// Wenn ein Info-Overlay in diesem Bereich existiert
							$('#'+w[z]['f']).remove();														// Info-Overlay entfernen
						}
						wm_bildwechsel_chgA(next, w[z]['n']);												// Funktion zum ändern der A-Tags wird gestartet
						w[z]['fa2'] = true;																	// Variable wird gesetzt, die verhindern soll dass ein Fade-Vorgang gestartet wird, während er noch läuft
						var y = next.attr("id").split("_");													// ID des aktuellen Bildes wird aufgesplittet	
						var y = y[(y.length - 1)];															// Index des aktuellen Bildes wird in Variable gespeichert
						$('#'+w[z]['p']).find('li').each(function(i) {										// Jeder Listenpunkt des Direct-Access-Menüs wird durchgegangen
							if (i == y) {																	// Wenn der Index es Listenpunktes mit dem Index des Bildes übereinstimmt
								$(this).addClass("wm_directAccessHighlight");								// CSS-Highlight-Klasse wird hinzugefügt
							}
						});
						next.fadeIn(w[z]['o'].animationSpeed, function() {									// Nächstes Bild einfaden
							w[z]['fa2'] = false;															// Nach dem ausblenden wird die Variable wieder ungültig gemacht
						});
					}
					return false;
				});
			}
		}
	};
})(jQuery);
