
	/**
	 * Wert, mit dem der z-index eines Inhalte-Divs belegt wird, um
	 * kenntlich zu machen, dass dieses Div sichtbar war.
	 * Wird benötigt, wenn ein Div eingeklappt wird, dass weitere 
	 * Untermenüs beinhaltet. Diese werden nicht unsichtbar, wenn das
	 * darüberliehende Element unsichtbar wird. Deshalb müssen Unter-
	 * Divs separat auf unsichtbar gestellt werden. Nun kann es aber
	 * sein, dass ein Untermenü ein- oder ausgeklappt ist. Würde dies
	 * nicht beachtet, wären alle Untermenüs nach dem Wiederaufklappen
	 * des übergeordneten Menüs sichtbar. Deswegen wird der z-index eines
	 * Objektes herangezogen ("missbraucht"), um sich zu merken, ob das
	 * betreffende Untermenü aus oder eingeklappt war.
	 */
	var VISIBLE_INDEX = 98;
	/**
	 * Wert, mit dem der z-index eines Inhalte-Divs belegt wird, um
	 * kenntlich zu machen, dass dieses Div unsichtbar war.
	 */
	var HIDDEN_INDEX = 99;		
	
	/**
	 * Das Element mit dem Namen div_name muss als erstes
	 * Unterelement die Titelleiste und als zweites Unterelement
	 * das Inhalteelement enthalten. Das erste Unterelement der
	 * Titelleiste muss ein Bild sein (Pfeil).
	 * Der Sichtbarkeitsszustand des Inhalteelements wird geändert
	 * und das Pfeilbild angepasst (nach rechts oder nach unten).
	 *
	 * @param div_name ID des zu ändernden Elements
	 * @param has_subdivs Falls True angegeben wird, werden auch alle 
	 * Kindelemente und deren Kindelemente sichtbar bzw. unsichtbar
	 * gemacht (für Untermenüs).
	 */
	function change_div(div_name, has_subdivs) {
		/*
		 * Hinweis:
		 * Netscape interpretiert schon einfache Zeilenumbrüche als
		 * Kindknoten, die den Typ 3 haben. Deswegen sind Schleifen
		 * notwendig, die solche Knoten ignorieren und weitersuchen,
		 * bis sie ein "richtiges" Element gefunden haben.
		 */
			
		// Hauptcontainer
		var main_div = document.getElementById(div_name);
		var current_main_div_child = 0;
		// Titelleiste
		do {
			var title_div = main_div.childNodes[current_main_div_child];
			current_main_div_child++;
		} while(title_div.nodeType == 3 && current_main_div_child < main_div.childNodes.length);

		// Inhalteelement
		do {
			var content_div = main_div.childNodes[current_main_div_child];
			current_main_div_child++;
		} while(content_div.nodeType == 3 && current_main_div_child < main_div.childNodes.length);
			
				
		// Pfeilbild
		var current_title_div_child = 0;
		do {
			var arrow_img = title_div.childNodes[current_title_div_child];
			current_title_div_child++;
		} while(arrow_img.nodeType == 3 && current_title_div_child < title_div.childNodes.length);
				
		// Sichtbarkeitszustand des Inhalteelements
		var visibility = content_div.style.visibility;

		
		// Falls sichtbar: verstecken und Pfeil nach rechts
		if(visibility == "" || visibility == "visible") {
			set_right_arrow(arrow_img);
			hide_div(content_div, has_subdivs);
		}
		// Falls unsichtbar: anzeigen und Pfeil nach unten
		else {
			set_down_arrow(arrow_img);
			show_div(content_div, has_subdivs);					
		}
	}
		
	/**
	 * Versteckt das Element div, in dem es zum
	 * einen unsichtbar gemacht wird und zum anderen die Positionierungs-
	 * art auf absolut gesetzt wird, was bewirkt, das nachfolgende
	 * Elemente "aufrücken" können.
	 *
	 * @param div Zu ändernden Elements
	 * @param check_subdivs Falls True angegeben wurde, werden sämtliche
	 * Kindelemente und deren Kindelemente ebenfalls unsichtbar gemacht (für Untermenüs).
	 */
 	function hide_div(div, check_subdivs) {				
		div.style.visibility = "hidden";
		div.style.position = "absolute";
		/*
		 * Marker, ob Menü auf- oder eingeklappt ist, s. o.
		 */
		div.style.zIndex = HIDDEN_INDEX;
		
		/*
		 * Behandlung von Untermenüs.
		 */
		if(check_subdivs) {			
			for(var i = 0; i < div.childNodes.length; i++) {								
				for(var j = 0; j < div.childNodes[i].childNodes.length; j++) {
					div.childNodes[i].childNodes[j].style.visibility = "hidden";
					div.childNodes[i].childNodes[j].style.position = "absolute";								
				}
			}
		}
	}
	
	/**
	 * Macht das Element mit div wieder sichtbar. Zudem
	 * wird die Positionierungsart wieder zurück auf static gesetzt,
	 * um zu gewährleisten, dass nachfolgende Elemente nicht überlappen.
	 *
	 * @param div Zu ändernden Elements
	 * @param check_subdivs Falls True angegeben wurde, werden sämtliche
	 * Kindelemente und deren Kindelemente ebenfalls sichtbar gemacht (für Untermenüs).
	 */
	function show_div(div, check_subdivs) {				
		div.style.visibility = "visible";
		div.style.position = "static";
		/*
		 * Marker, ob Menü auf- oder eingeklappt ist, s. o.
		 */
		div.style.zIndex = VISIBLE_INDEX;
		
		/*
		 * Behandlung von Untermenüs.
		 */
		if(check_subdivs) {
			for(var i = 0; i < div.childNodes.length; i++) {				
				for(var j = 0; j < div.childNodes[i].childNodes.length; j++) {					
					if(div.childNodes[i].childNodes[j].style.zIndex != HIDDEN_INDEX) {										
						div.childNodes[i].childNodes[j].style.visibility = "visible";
						div.childNodes[i].childNodes[j].style.position = "static";
					}				
					
				}						
			}
		}		
	}
	
	/**
	 * Setzt das Bild img auf Pfeil nach rechts.
	 *
	 * @param img Objekt, dessen Bild geändert wird
	 */
	function set_right_arrow(img) {
		var RIGHT_ARROW = "/images/pf.gif";
		set_image(img, RIGHT_ARROW);
	}
	
	/**
	 * Setzt das Bild img auf Pfeil nach unten.
	 *
	 * @param img Objekt, dessen Bild geändert wird
	 */
	function set_down_arrow(img) {
		var DOWN_ARROW = "/images/pf4.gif";
		set_image(img, DOWN_ARROW);
	}
	
	/**
	 * Setzt die Quelle des Bildes img auf file.
	 *
	 * @param img Bild, dessen Quelle geändert wird
	 * @param file Quelldatei
	 */
	function set_image(img, file) {
		img.src = file;
	}
	
	
	
		
	/*
	 * Name of div that is currently opened
	 */
	var last_div_name = '';
	
	/*
	 * Invoke to initialize.
	 *
	 * @param div_name Name of currently opened div
	 */
	function set_last_div(div_name) {
		last_div_name = div_name;
	}
	
	/*
	 * Closes currently opened div and opens specified div.
	 * Only one div is opened at the same time.
	 *
	 * @param div_name Name of div to be opened
	 */
	function change_and_close_div(div_name) {
		// Bei der ersten Verwendung oder nach dem
		// schließen eines geöffneten Divs ist last_div_name
		// noch nicht belegt.
		if(last_div_name != "")		
			change_div(last_div_name);
							
		// Der Benutzer schließt das gerade offene 
		// Div. Da in diesem Fall last_div_name
		// gleich div_name ist, darf change_div
		// nicht zwei Mal aufgerufen werden.
		// Des Weiteren wird last_div_name zurück
		// gesetzt, damit beim nächsten Klick nicht
		// zwei Divs aufgehen.
		//alert("Last: " + last_div_name + ", Neu: " + div_name);
		if(last_div_name == div_name) {
			set_last_div("");
		}
		else {
			change_div(div_name);
			set_last_div(div_name);			
		}
		
		
	}
			
	
