//
// Methoden fuer die Lernkontrolle
//
// benoetigt misc.js fuer split_string();
//




/****************************************************************************/
//
//
// Methoden fuer aufrufende Seiten (Navigationsleiste und Inhaltsverzeichnis)
//									----------------------------------------
//

// Lernzustaende
//
// dieses Array muss von der aufrufenden HTML-Seite mit
// den IDs der auf de Seite vorkommenden Seiten gefuellt werden
//
var statusImgs = new Array (-1, -1);

// dieser Offset muss auf das erste Bild gesetzt werden, dass einen Lernzustand darstellt
var imgOffsetLernzustaende = 0;

// dieser Wert gibt an, wieviele Bilder zwischen den einzelnen Lernzustandsbildern
// liegen und muss auch von der aufrufenden Seite ueberschrieben werden
var imgZyklusLernzustaende = 0;




// aktualisiert die Zustaende aller oder nur einer Seite
// (wenn seiten_id uebergeben)
function zeigeLernzustaende(seite_id) {

	// wenn noch nicht fertig geladen, dann zurueck
	if (top.self_menue == null || top.self_menue.self_menue_inhalt == null ||
		top.self_menue.self_menue_inhalt.bestimme_seiten_zustand_icon == null ||
		document.images == null ) {

		return;
	}

	var testMan = ( arguments.length > 1 ) ? arguments[1] : null;

	if ( arguments.length <= 1 )
	{
		for (var idx=0; idx < statusImgs.length && statusImgs[idx] != -1; idx++) {

			if (seite_id > 0 && statusImgs[idx] != seite_id ) {

				continue;
			}

			/*
			alert ("seite_id: " + seite_id + ", idx: " + idx + ", document.images: " + document.images + "\n" +
				   "document.images[" + (idx * imgZyklusLernzustaende + imgOffsetLernzustaende) + "].src = " +
				   document.images[idx * imgZyklusLernzustaende + imgOffsetLernzustaende].src  + "\n" +
				   "top.self_menue.self_menue_inhalt.bestimme_seiten_zustand_icon(statusImgs["+idx+"]) = " +
				   top.self_menue.self_menue_inhalt.bestimme_seiten_zustand_icon(statusImgs[idx]) );
			*/

			document.images[idx * imgZyklusLernzustaende + imgOffsetLernzustaende].src = top.self_menue.self_menue_inhalt.bestimme_seiten_zustand_icon(statusImgs[idx]);
		}
	}
	else
	{
//alert("zeigeLernzustaende(): testMan wurde übergeben");
		for (var idx=0; idx < statusImgs.length && statusImgs[idx] != -1; idx++)
		{
			if (seite_id > 0 && statusImgs[idx] != seite_id )
				continue;

			var src = ( testMan != null && testMan.enthaeltSeiteTests( statusImgs[idx] ) ) ?
						top.self_menue.self_menue_inhalt.bestimme_test_zustand_icon(statusImgs[idx],testMan)
							:
						top.self_menue.self_menue_inhalt.bestimme_seiten_zustand_icon(statusImgs[idx]);

			document.images[idx * imgZyklusLernzustaende + imgOffsetLernzustaende].src = src;
		}
	}

	return;
}

function toggle_update_seiten_zustand(seite_id) {

	top.self_menue.self_menue_inhalt.toggle_seiten_zustand(seite_id);
	zeigeLernzustaende(seite_id);
}





/****************************************************************************/
//
//
// Methoden fuer die zentrale Verwaltung der Lernzustaende (Menueleiste und Seite (fuer "Abschnitt erarbeitet"))
//															-----------
//


// Lernkontrolle
var SEP_SEITE_ZUSTAND = "<SE>";

// Zustaende
var anzahl_lernzustaende = 3; // 1: unbearbeitet, 2: gelesen, 3: verstanden
var default_lernzustand = 1;			// 1: unbearbeitet
var lernzustand_seite_betrachtet = 2;	// 2: gelesen
var lernzustand_seite_erarbeitet = 3;	// 3: erarbeitet (abgehakt)

// Lernzustaende: dieses Array muss auf der aufrufenden Seite mit den IDs aller Seite initialisiert werden
var lernzustaende_global = new Array ();

// Abschnitte: dieses Array muss fuer alle ersten Seiten von Abschnitten alle IDs der enthaltenen Seiten enthalten
var abschnitte_global = new Array ();


// Bestimmt den Seiten Zustand, beruecksichtigt keine Abschnitte
function bestimme_seiten_zustand_strikt(seite_id) {

	var lernzustand = lernzustaende_global["" + seite_id +""];
	lernzustand = (lernzustand < 1 || lernzustand > anzahl_lernzustaende) ? default_lernzustand : lernzustand;

	// alert ("bestimme_seiten_zustand_strikt(" + seite_id + ") :" + lernzustand);

	return (lernzustand);
}


// Bestimmt den Seiten Zustand, beruecksichtigt auch Abschnitte
function bestimme_seiten_zustand(seite_id) {

	// Seite ist Einzelseite
	if (abschnitte_global["" + seite_id + ""] == null || abschnitte_global["" + seite_id + ""].length <= 1 ) {

		// alert ("bestimme_seiten_zustand(" + seite_id + ") Seite");

		return (bestimme_seiten_zustand_strikt(seite_id));

	// Seite ist Abschnittsbeginn
	} else {

		// alert ("bestimme_seiten_zustand(" + seite_id + ") Abschnitt");

		var minZustand = lernzustand_seite_erarbeitet;
		for (var idx = 0; idx < abschnitte_global[""+seite_id+""].length; idx++ ) {

			minZustand = Math.min( minZustand, bestimme_seiten_zustand_strikt( abschnitte_global[""+seite_id+""][idx] ) ); ;
			// alert ( "Zustand: " + bestimme_seiten_zustand_strikt( abschnitte_global[""+seite_id+""][idx] ) );
		}

		// alert ("Endzustand: " + minZustand);

		return (minZustand);
	}

}


// Schaltet den Seitenzustand um, beruecksichtigt Abschnitte
function toggle_seiten_zustand(seite_id) {

	var neuer_zustand = bestimme_seiten_zustand(seite_id);
	neuer_zustand = (neuer_zustand >= anzahl_lernzustaende) ? 1 : ( neuer_zustand + 1 );


	// Seite ist Einzelseite
	if (abschnitte_global["" + seite_id + ""].length <= 1) {

		lernzustaende_global["" + seite_id +""] = neuer_zustand;

	// Seite ist Abschnittsbeginn
	} else {

		for (var idx = 0; idx < abschnitte_global[""+seite_id+""].length; idx++ ) {

			lernzustaende_global["" + ( abschnitte_global[""+seite_id+""][idx] ) +""] = neuer_zustand;

		}
	}

	return neuer_zustand;
}


function bestimme_seiten_zustand_icon(seite_id) {

	return ("images/status_0" + bestimme_seiten_zustand(seite_id) + ".gif");
}


function bestimme_test_zustand_icon( seite_id, testMan )
{
//alert("bestimme_test_zustand_icon(" + seite_id + ")")
	var zustand = 20 * Math.round( testMan.getSeitenTestProzent( seite_id ) / 20 );
//alert("zustand=" + zustand );
	if ( zustand == 0 )
		zustand = "000";
	else if ( zustand < 100 )
		zustand = "0" + zustand;

	return ("images/statuscheck" + zustand + ".gif");
}


// gibt den Lernstand in 5 Prozent Schritten zurueck
function bestimme_lernstand() {

	var testMan = ( arguments.length != 0 ) ? arguments[0] : null;

	var numAbgearbeiteteSeiten = 0;
	var numSeiten = 0;
	for (var id_seite in lernzustaende_global )
	{
		if ( testMan == null || ! testMan.enthaeltSeiteTests( id_seite ) )
		{
			numAbgearbeiteteSeiten = numAbgearbeiteteSeiten + ( hat_seite_zustand_erarbeitet( id_seite ) ? 1 : 0 );
			numSeiten++;
			//alert ( numSeiten + "(" +id_seite + "): " + numAbgearbeiteteSeiten );
		}
	}

	var lernstand = 0;

	if ( numSeiten != 0 )
	{
		lernstand = Math.round( ( numAbgearbeiteteSeiten / numSeiten ) * 20 ) * 5;
	}

	return lernstand;
}


function bestimme_lernstand_grafik( testMan ) {

	var dest_img = "images/lernstand_" + bestimme_lernstand( testMan ) + ".gif";

	// alert (dest_img);

	return (dest_img);
}


function setze_seiten_zustand_betrachtet(seite_id) {

	var neuer_zustand = bestimme_seiten_zustand_strikt(seite_id);
	neuer_zustand = (neuer_zustand > lernzustand_seite_betrachtet) ? neuer_zustand : lernzustand_seite_betrachtet;
	lernzustaende_global["" + seite_id +""] = neuer_zustand;

	// alert ("setze_seiten_zustand_betrachtet("+seite_id+") : " + (lernzustaende_global["" + seite_id +""]));

	return neuer_zustand;
}


function setze_seiten_zustand_betrachtet_strikt(seite_id) {

	lernzustaende_global["" + seite_id +""] = lernzustand_seite_betrachtet;

	// alert ("setze_seiten_zustand_betrachtet_strikt("+seite_id+") : " + (lernzustaende_global["" + seite_id +""]));

	return lernzustand_seite_betrachtet;
}


function setze_seiten_zustand_erarbeitet(seite_id) {

	lernzustaende_global["" + seite_id +""] = lernzustand_seite_erarbeitet;

	// alert ("setze_seiten_zustand_erarbeitet("+seite_id+") : " + (lernzustaende_global["" + seite_id +""]));

	return lernzustand_seite_erarbeitet;
}


function hat_seite_zustand_erarbeitet(seite_id) {

	return (bestimme_seiten_zustand_strikt(seite_id) == lernzustand_seite_erarbeitet);
}


/****************************************************************************/
//
//
// Methoden zum Speichern der Lernzustaende (Menueleiste)
//											 -----------
//


// Lernzustaende initialisieren
function lernzustaende_init_from_string( daten ) {

	// alte Zustaende zurueck setzen
	for (var seiten_id in lernzustaende_global) {

		lernzustaende_global[seiten_id] = default_lernzustand;
	}

	// Zustaende aus String extrahieren
	var seiten_split = split_string( daten, SEP_SEITE_ZUSTAND );

	// neue Zustaende setzen
	for ( var i=0; i<seiten_split.length; i++ ) {

		var seite_split = split_string( seiten_split[i], ":" );

		// Der Gesamtlernstand wird in der selben Form gespeichert, wie die einzelnen.
		// Daher muss er hier rausgefiltert bzw. ignoriert werden.
		if ( seite_split[0] != "LS" )
		{
			lernzustaende_global["" + seite_split[0] + ""] = seite_split[1];
		}
	}

}


// Lernzustaende in einen String serialisieren
function lernzustaende_to_string( testMan ) {

	var ret = SEP_SEITE_ZUSTAND;

	for (var seiten_id in lernzustaende_global) {

		// Defaultstatus und ungueltige Status nicht speichern
		if ( lernzustaende_global[seiten_id] <= 1 || lernzustaende_global[seiten_id] > anzahl_lernzustaende) {

			continue;
		}

		ret += seiten_id + ":" + lernzustaende_global[seiten_id] + SEP_SEITE_ZUSTAND;
	}


	// Zum Schluss noch Lernzustand abspeichern
	ret += "LS:" + bestimme_lernstand( testMan ) + SEP_SEITE_ZUSTAND;

	return (ret);
}


