/**
 * Dieses JavaScript stellt die Logik zur Verfügung, um die Kategorien korrekt darzustellen.
 * Die Werte, die der Funktion übergeben werden müssen, müssen in 3 zweidimensionalen Arrays
 * angeordnet sein - jeweils eins für die Kategorien, Kategoriebezeichnungen und die Kategorie der 
 * übergeordneten Listbox. Beim Aufruf wird unterschieden zwischen Erstellungsbildschirm(create)
 * und Veränderungsbildschirm(edit). Der entsprechende Wert wird in der Variable updatetype 
 * übergeben. Im Edit-Mode(Werte schon vorhanden) werden dem Script die bisherigen Kategoriewerte 
 * in einem Array catinit(KAtegorie1, Kategorie2,..) übergeben.
 */
function getBox(theBox){
/**
 * Diese Funktion gibt ein SELECTBOX-Objekt des aktuellen Formulars zurück. Eingangswerte
 * können 1-5 sein, worauf Objekt category1 bis category5 zurückgeliefert werden.
 */
	var obj = document.forms[1].elements[0];
	switch(theBox){
		case 1:
			return(obj.form.elements['category1']);
			break;
		case 2:
			return(obj.form.elements['category2']);
			break;
		case 3:
			return(obj.form.elements['category3']);
			break;
		case 4:
			return(obj.form.elements['category4']);
			break;
		case 5:
			return(obj.form.elements['category5']);
			break;
	}
}

function fillSelect(theValue, theBox) {
/**
 * Diese Funktion füllt eine bestimmte SELECTBOX, welche über die Variable theBox spezifiziert 
 * ist, in Abhängigkeit von den dem ausgewählten Wert der SELECTBOX des in der Hierarchie 
 * höherstehenden SELECTBOX.
 */
	var obj = document.forms[1].elements[0];
//SELECTBOX ermitteln
	var theField = getBox(theBox)
	var theOptionCounter = 0;
//SELECTBOX entleeren
	emptySelField(theField);
//neue Werte in die SELECTBOX schreiben
	for (var i = 0; i < cat[theBox].length; i++) {
		if (catparent[theBox][i] == (theValue)){
			var NewOption = new Option(catname[theBox][i], cat[theBox][i])
			theField.options[theOptionCounter]=NewOption
			theOptionCounter++;
		}
	}
//ersten Eintrag der SELECTBOX selektieren	
	if (theOptionCounter > 0){
		theField.options[0].selected = true;
	}
//die hierarchisch unterstellten SELECTBOXEN aktualisieren	
	if (theBox < 2){
		fillSelect(theField.value, theBox + 1);
	}
}

function emptySelField(theField) {
/**
 * Diese Funktion löscht alle eingetragenen Optionen eine bestimmte SELECTBOX.
 */
	for (var i = theField.options.length; i >= 0 ; i--) {
		theField.options[i]=null
	}
}

function initBoxes() {
/**
 * Diese Funktion wird nach dem Laden in den Browser automatisch ausgeführt. 
 * Im Fall, dass der updatemode "create" ist, werden die Selectboxen auf die Neueingabe der 
 * Kategorien vorbereitet. Im Fall von "edit" werden die bisherigen Kategoriewerte des Assets
 * in den Selectboxen eingestellt.
 */
 
 var max_level=2;
 
	if (updatetype == "edit") {
//SELECTBOX category1 füllen	
		fillSelect("", 1);
		var theField;
//Für alle Kategorien ...		
		for (var j=1; j <= max_level ; j++) {
			theField = getBox(j);
//durchsuchen der Listbox nach dem voreinzustellen den Wert und diesen selektieren			
			for (var i = (theField.options.length - 1); i >= 0 ; i--) {
				if (theField.options[i].value == catinit[j-1]) {
					theField.options[i].selected = true;
				}
			}
//untergeordneten Selectbox aktualisieren			
			if (catinit[j-1] != "" && j < max_level) {
				fillSelect(catinit[j-1] , j + 1);
			}
		}
	}
	if (updatetype == "create") {
//SELECTBOX category1 füllen	
		fillSelect("", 1);
	}
}