var name = new Array ();       // Speichert die Ids der Untermenüpunkte
var height = new Array ();     // Speichert die ausgefahrene Höhe der Menüpunkte
var isopen = new Array ();     // Überwacht, ob ein Menü geöffnet oder geschlossen ist
var action = 0;                // Überwacht, ob gerade ein Vorgang ausgeführt wird
var dynamic = 0;               // Gibt an ob das dynamische Menü aktiv ist

var open = 1;                  // Werte die an init() für startopen übergeben werden können
var close = 0;

var item;
var id;
var wait;
var step;

function init (startopen, setwait, setstep) {
//
// Findet alle Listen mit der Klasse "submenu" und sortiert die Informationen
// über sie in die Array ein
//
// startopen = open | close, gibt an ob die Menüs nach laden der Seite offen oder geschlossen sind
// setwait, gibt die Wartezeit in Millisekunden an, die zwischen zwei Größenänderungen liegt
// setstep, gibt die Höhe in Pixeln an, die beim Öffnen oder Schließen jeweils geändert wird
//
///////////////////////////////////////////////////////////////////////////////////////////////////
	if(! document.getElementsByTagName) return false;

	wait = setwait; step = setstep;

	lists = document.getElementsByTagName("ul");
	
	for (i = 0; i < lists.length; i++) {
		if (lists[i].className == "submenu") {
			name.push(lists[i].id);
			height.push(lists[i].offsetHeight);

			if (! startopen) {
				lists[i].style.height = "0px";
				isopen.push(0);
			}
			else {
				lists[i].style.height = lists[i].offsetHeight + "px";
				isopen.push(1);
			}
		}
	}
	
	dynamic = 1;
	return true;
}

function getId (menuname) {
//
// Liefert die Position zurück welche ein Menü in den Arrays name, height, isopen besitzt
//
// menuname, gibt den Wert an, den der betreffende <ul> Tag als id hat
//
///////////////////////////////////////////////////////////////////////////////////////////////////
	id = -1;

	for (i = 0; i < name.length; i++) {
		if (name[i] == menuname) id = i;
	}
	
	return id;
}

function getCurrent (item) {
//
// Erwartet ein Elementobjekt und gibt die aktuelle Höhe zurück
//
// item, Objekt im DOM
//
///////////////////////////////////////////////////////////////////////////////////////////////////

	current = item.style.height;
    if (current.indexOf("px") > 0) {
    	current = current.substring (0, current.indexOf("px"));
    }
    current = current * 1;
    
    return current;
}


function scroll (menuname) {
//
// Öffnet oder schließt ein Menü, je nach seinem momentanen Zustand
//
// menuname, gibt den Wert an, den der betreffende <ul> Tag als id hat
//
///////////////////////////////////////////////////////////////////////////////////////////////////

	if (action) return false;
	if (! dynamic) return false;

	action = 1;

	id = getId (menuname);
	if (id == -1) return false;
	
	item = document.getElementById(menuname);
	
	if (isopen[id])
		closemenu (id, item);
	else
		openmenu (id, item);
	
	return false;
}

function openmenu (id, item) {
//
// Öffnet ein Menü
//
// id, Position der Daten über das Menü in den Arrays name, height, isopen
// item, Objekt im DOM
//
///////////////////////////////////////////////////////////////////////////////////////////////////
    current = getCurrent (item);
    
    current = current + step;

    if (current > height[id]) current = height[id];
    
    item.style.height = current + "px";

    if (current == height[id]) {
    	action = 0;
    	isopen[id] = 1;
    	return true;
    }
    
    setTimeout ("openmenu (id, item);", wait);
}

function closemenu (id, item) {
//
// Schließt ein Menü
//
// id, Position der Daten über das Menü in den Arrays name, height, isopen
// item, Objekt im DOM
//
///////////////////////////////////////////////////////////////////////////////////////////////////
    current = getCurrent (item);
    
    current = current - step;

    if (current < 0) current = 0;

    item.style.height = current + "px";

    if (current == 0) {
    	action = 0;
    	isopen[id] = 0;
    	return true;
    }
    
    setTimeout ("closemenu (id, item);", wait);
}

