/*
 * button (c) 2009 by fabian fronhofer


 
 /* Rufe Funktion auf, sobald JavaScript-Zugriff auf das komplette Dokument möglich ist */
$(document).ready(function () {


/*
      $('#options').ajaxify({
  
             link:'fileadmin/php/test.php',

              target: '#bild',

              loading_img:'images/orange_loading.gif',

              title:'Werbeagentur Ulm', // change page title. Since v2.0

              method:'POST'

      });







	Erzeuge eine Variable, die die folgenden verschachtelten Funktionen einschließen. Das nennt sich Closure und ist hier erklärt: http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#closures
	Initialisiere die Variable null, d.h. es ist kein Element gerade aufgeklappt
	*/
	var aktiverKommentar = null;
	/* Vergebe allen a-Elementen einen click-Handler */
	$("#sub a.link1").click(function (e) {
		/*
		Diese verschachtelte Funktion schließt wie gesagt die Variable aktiverKommentar ein. Die Funktion wird an vielen Elementen als Handler verwendet, alle haben Zurgriff auf ein und dieselbe Variable aktiverKommentar.
		
		/* Variablen-Deklarationen */
		
		/*
		Zuerst suchen wird das zugehörige li-Element. Angeklickt wurde ja ein a-Element. Daher greifen wir zunächst auf dieses mit this zu und machen ein jQuery-Objekt daraus, indem wir es mit dem $-Aufruf wrappen: $(this)
		Siehe http://docs.jquery.com/Core/jQuery#elements
		
		Jetzt haben wir ein jQuery-Objekt mit dem angeklickten a-Element drin. Von dort aus steigen wir mithilfe der parents-Funktion nach oben auf und suchen alle li-Elemente, die Elternelemente des a-Elements sind: .parents("li")
		Siehe http://docs.jquery.com/Traversing/parents#expr
		
		Das liefert jetzt wieder ein jQuery-Objekt möglicherweise mit mehreren li-Elementen drin. Uns interessiert aber nur das erste, also rufen wir eq(0) auf.
		Siehe http://docs.jquery.com/Traversing/eq#index
		
		Heraus kommt:
		*/
		var li = $(this).parents("li").eq(0);
		/* So jetzt haben wir ein jQuery-Element mit dem zugehörigen li-Elternelement. */
		
		/*
		Nun erstellen wir ein jQuery-Objekt, das sowohl dieses neue li-Element als auch das alte aktive (aufgeklappte) li-Element enthält. Wir fragen also ab, ob aktiverKommentar bereits gesetzt wurde. Wenn ja, dann nehmen nutzen wir add, um beide lis in einem jQuery-Objekt zu vereinigen, siehe http://docs.jquery.com/Traversing/add#expr
		Wenn aktiverKommentar noch null ist, dann nehmen wir einfach das neue li-Element und legen eine Referenz auf li an.
		Die Kurzschrebiweise x ? y : z ist hier erklärt: http://de.selfhtml.org/javascript/sprache/bedingt.htm#entweder_oder
		Man könnte auch eine if-Anweisung verwenden, die aktiverKommentar abfragt, nur so ist es kompakter.
		*/
		var lis = aktiverKommentar ? li.add(aktiverKommentar) : li;
		/* Jetzt haben wir ein jQuery-Objekt mit einem oder zwei li-elementen */
		
		/* Toggle die Klasse bei beiden Elementen. Dem alten wird die Klasse weggenommen, dem neuen hinzugefügt. */
		lis.toggleClass("aktiv");

		/*
		Jetzt wird der Fehler ausgemerzt, den du beschrieben hast. Und zwar kommt der daher: Wenn altes und neues li-Element identisch sind, dann bedeutet das, dass alle li-Elemente nun eingeklappt sind und kein Element mehr aktiv ist. Also müssen wir aktiverKommentar zurück auf null setzen, sonst passiert der besagte Fehler.
		
		Wir könnten jetzt prüfen, ob das Element im jQuery-Wrapper li identisch mit dem Element im jQuery-Wrapper aktiverKommentar ist. Aber jQuery hat diese Prüfung schon vorgenommen, nämlich oben, wo wir li.add(aktiverKommentar) ausgeführt haben. Wenn li und aktiverKommentar dasselbe Element enthalten, dann wird es nicht ein zweites Mal hinzugefügt. Sprich, die Anzahl der Elemente im jQuery-Wrapper bleibt 1. jQuery führt nämlich intern eine Unique-Prüfung aus, damit jedes Element nur einmal in der Liste vorkommt.
		
		Das macht es uns nun sehr einfach. Wir prüfen, ob ein Kommentar aktiv ist. Wenn das der  Fall ist, erwarten wir zwei Elemente in lis. Wenn aber neuer und alter Kommentar identisch sind, steht nur ein Element in lis.
		
		Beim Aktualisieren von aktiverKommentar fragen wir also das ab (wieder mit einer Entweder-Oder-Abfrage) und setzen aktiverKommentar entsprechen zurück auf null bzw. speichern das neue li darin:
		*/
		aktiverKommentar = (aktiverKommentar && lis.length == 1) ? null : li;
		
		/* Letztlich unterdrücken wir die Standardbehandlung des Klicks auf das a-Element: */

		/* Das ist genau dasselbe wie return false, es ist lediglich die DOM-Standard definiert Methode. Wenn man jQuery einsetzt, macht es keinen Unterschied, welche Möglichkeit du nimmst. */
	});
});
