/********************************************************************
"$VER: DynamicMenu V3.3 (02.09.2002)" : compatible to NS3+ and MSIE4+
Created by Holger Burkarth, proDAD Software GmbH (http://www.prodad.de)

Copyright 2001-2002 by proDAD GmbH
ALL RIGHTS RESERVED -- ALLE RECHTE VORBEHALTEN
Widerrechtliche Verwendung - auch fuer interne Zwecke -
wird ausdruecklich untersagt!

proDAD GmbH
Gauertstr. 2
D-78194 Immendingen (Germany)
Homepage: http://www.prodad.de
Email:    info@prodad.de


Lizenznehmer:

Regionalverband Schwarzwald-Baar-Heuberg,
D-78058 Villingen-Schwenningen
*********************************************************************/


/********************************************************************/
/************** WICHTIG - Bitte beachten ****************************/
/********************************************************************/
/*
 * !! D i e s e s   S k r i p t   n i c h t   v e r ä n d e r n !!
 *
 * Alle benötigten Definitionen können über Funktionen erreicht werden.
 * Nur so können neuere Skript-Versionen ohne Probleme nachträglich
 * auf ihre WebSite kopiert werden.
 * Das unten beschriebene Skript-Interface ist als Zustandsmaschine
 * angelegt und ermöglicht es, vorhandene Features durch Aufruf
 * der entsprechenden Funktionen zu aktivieren. Kommen später weitere
 * Features hinzu, so können diese bei Bedarf aktiviert werden.
 * Durch die Trennung der Funktionen entstehen keine unnötigen
 * Abhängigkeiten, was die Lesbarkeit erhöht.
 * Es wurde bewußt darauf geachtet, daß Neuerungen stehts einfach
 * und sicher nachrüstbar sind.
 *
 * Es besteht kein Geschwindigkeitsnachteil durch diese beschreibende
 * Interface-Form, da diese nur einmal ausgeführt wird. Alle späteren
 * Aktionen werden direkt und ohne Overhead ausgeführt.
 *
 * Bitte dieses Skript nicht verändern, sonst können sie nie
 * wieder ohne Gefahr ein Update verwenden !
 *
 * Erweiterungswünsche bitte an: info@prodad.de
 *
 * Internationalisierung / Lokalisierung / Mehrsprachigkeit der WebSize:
 *
 * Diese Menueleiste ist einfachst mehrsprachig zu halten mit LARA
 * LARA ist eine Software zur Internationalisierung ganzer Webseiten-
 * Projekte. Das Sprachinhaltsmanagment und die Pflege einer multilingualen
 * Webseite werden damit erheblich vereinfacht, Updates/Änderungen der
 * Originalsprache werden automatisch erkannt und zur Bearbeitung in die
 * Zielsprachen angezeigt. Durch eine mit der ersten externen Übersetzung
 * aufgebauten internen Übersetzungsdatenbank werden für künftige Inhalte sogar
 * Übersetzungskosten eingespart. Kosten sparen, schneller sein und
 * gründlicher - mit LARA. Auch für JAVA, JS, ASP etc. und auch zur
 * Lokalisierung von Software-Projekten.
 *
 *
 * Demoversion verhältlich: http://www.prodad-lara.de
 *
 * Schulungen zu diesem Navigationssystem möglich!
 * Anfragen bitte an info@prodad.de
 *
 *
 * Übersicht:
 * ==========================================================
 *
 *   Design / Styles:
 *     - Style_BackgroundColorSelected(color)
 *     - Style_BackgroundColorStd(color)
 *     - Style_BackgroundImageSelected(image)
 *     - Style_BackgroundImageStd(image)
 *     - Style_BodyBackgroundColor(color)
 *     - Style_BodyBackgroundImage(image)
 *     - Style_BodyLeftMargin(pixel)
 *     - Style_BodyTopMargin(pixel)
 *     - Style_EnableCategorySpace(bool)
 *     - Style_FontFamily(ff)
 *     - Style_FontSize(size)
 *     - Style_HoverBackgroundColor(color)
 *     - Style_HoverBackgroundImage(image)
 *     - Style_HoverColor(color)
 *     - Style_HoverIndent(pixel)
 *     - Style_MenuBarHeight(pixel)
 *     - Style_MenuImageSpace(horizontalPixel,verticalPixel)
 *     - Style_SubLevelIndent(pixel)
 *     - Style_TextColor(color)
 *     - Style_TextColorSelected(color)
 *     - Style_TransparentBackground()
 *
 *   Menübaum:
 *     - AppendMenu()
 *     - BeginMainMenu()
 *     - BeginSubMenu()
 *     - DefineMenuAltText(text)
 *     - DefineMenuBackgroundColor(color)
 *     - DefineMenuBackgroundColorSelected(color)
 *     - DefineMenuBackgroundColorStd(color)
 *     - DefineMenuBackgroundImage(image)
 *     - DefineMenuBackgroundImageSelected(image)
 *     - DefineMenuBackgroundImageStd(image)
 *     - DefineMenuBar()
 *     - DefineMenuExternUrl(url)
 *     - DefineMenuID(id)
 *     - DefineMenuImage(image)
 *     - DefineMenuName(name)
 *     - DefineMenuSelectImage(image)
 *     - DefineMenuUnselectImage(image)
 *     - DefineMenuUrl(url)
 *     - EndMainMenu()
 *     - EndSubMenu()
 *
 *   Misc:
 *     - OpenID(id)
 *     - Sync()
 *
 *   Resources:
 *     - Resource_InternalImagePath(path)
 *
 *
 *
 *
 *
 * Historie:
 * ==========================================================
 *
 *
 * V 3.2 (17.07.2002)
 *  - Falls benötigte Frames (main,menu) nicht vorhanden sind,
 *    wird dem 'Programmierer' ein Tipp angezeigt. Somit können
 *    längere Debug-Phasen verhindert werden.
 *
 * V 3.1 (22.03.2002)
 *  - Neue Funktionen:
 *    + DefineMenuBackgroundColor()
 *    + DefineMenuBackgroundColorSelected()
 *    + DefineMenuBackgroundColorStd()
 *    + DefineMenuBackgroundImage()
 *    + DefineMenuBackgroundImageSelected()
 *    + DefineMenuBackgroundImageStd()
 *    + DefineMenuBar()
 *    + DefineMenuID()
 *    + OpenID()
 *    + Style_BackgroundImageSelected()
 *    + Style_BackgroundImageStd()
 *    + Style_BodyLeftMargin()
 *    + Style_BodyTopMargin()
 *    + Style_EnableCategorySpace()
 *    + Style_FontFamily()
 *    + Style_FontSize()
 *    + Style_HoverBackgroundColor()
 *    + Style_HoverBackgroundImage()
 *    + Style_HoverIndent()
 *    + Style_MenuBarHeight()
 *    + Style_TransparentBackground()
 *    + Sync()
 *
 * V 3.0 (16.12.2001)
 */



/********************************************************************/
/************** Dokumentation zu Resources **************************/
/********************************************************************/

/*
 * Funktion: Resource_InternalImagePath(path)
 *
 * Die Variable ist vorbelegt mit: '../menuimages/'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Pfad für folgende Images:
 *  - spacer.gif
 *  - open.gif
 *  - marker.gif
 *
 *
 * Beispiel:
 *  Resource_InternalImagePath('../menuimages/');
 */





/********************************************************************/
/************** Dokumentation zum Design / Styles *******************/
/********************************************************************/

/*
 * Funktion: Style_FontFamily(ff)
 *
 * Die Variable ist vorbelegt mit: 'Arial, Helvetica'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Ausgabe-Font.
 *
 * Beispiele:
 *  Style_FontFamily('Arial, Helvetica');
 */


/*
 * Funktion: Style_FontSize(size)
 *
 * Die Variable ist vorbelegt mit: 8
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert die Größe des Ausgabe-Font.
 *
 * Beispiele:
 *  Style_FontSize(8);
 */


/*
 * Funktion: Style_BodyLeftMargin(pixel)
 *
 * Die Variable ist vorbelegt mit: 0
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Einzug zum linken Rand
 *
 * Siehe auch: Style_BodyTopMargin()
 *
 * Beispiele:
 *  Style_BodyLeftMargin(3);
 */


/*
 * Funktion: Style_BodyTopMargin(pixel)
 *
 * Die Variable ist vorbelegt mit: 0
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Einzug zum oberen Rand
 *
 * Siehe auch: Style_BodyLeftMargin()
 *
 * Beispiele:
 *  Style_BodyTopMargin(3);
 */


/*
 * Funktion: Style_BodyBackgroundColor(color)
 *
 * Die Variable ist vorbelegt mit: 'white'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert die Farbe des freien, nicht bedeckten Hintergrundes.
 * Beachte: Wird via Style_BodyBackgroundImage() ein Image (eine Grafik)
 * als Hintergrund definiert, so wird dieser nach dem Einladen die
 * Farbe ersetzen.
 *
 * Siehe auch: Style_BodyBackgroundImage()
 *
 * Beispiele:
 *  Style_BodyBackgroundColor('white');
 *  ---
 *  Style_BodyBackgroundColor('#ffffff');
 */


/*
 * Funktion: Style_BodyBackgroundImage(image)
 *
 * Die Variable ist NICHT vorbelegt! - ohne
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert ein Image, das den freien nicht bedeckten Hintergrund
 * füllt.
 * Info: Es ist empfehlenswert zusätzlich eine Hintergrundfarbe
 * zu definieren, die in der Farbe dem Image gleicht. Damit wird
 * während der Ladepause für das Image bereits ein passender
 * Hintergrund angezeigt.
 *
 *
 * Siehe auch: Style_BodyBackgroundColor()
 *
 * Beispiel:
 *  Style_BodyBackgroundColor('#8080ff');
 *  Style_BodyBackgroundImage('../images/menu_bg.gif');
 */


/*
 * Funktion: Style_BackgroundColorStd(color)
 *
 * Die Variable ist vorbelegt mit: 'white'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Hintergrund einer inaktiven (Standard) Menüfläche.
 * Beachte: Die Farbe muß mit den Textfarben Style_TextColor() und
 *          Style_HoverColor() abgestimmt werden. Immer auf
 *          ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_TransparentBackground()
 *  Style_BackgroundColorSelected()
 *  Style_BackgroundImageSelected()
 *  Style_TextColor()
 *  Style_HoverColor()
 *
 * Beispiele:
 *  Style_BackgroundColorStd('white');
 *  ---
 *  Style_BackgroundColorStd('#ffffff');
 */


/*
 * Funktion: Style_BackgroundColorSelected(color)
 *
 * Die Variable ist vorbelegt mit: 'gray'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Hintergrund einer aktiven (selektierten) Menüfläche.
 * Beachte: Die Farbe muß mit der Textfarbe Style_TextColorSelected()
 *          abgestimmt werden. Immer auf ausreichend Kontrast der
 *          Schrift achten.
 *
 * Siehe auch:
 *  Style_TransparentBackground()
 *  Style_BackgroundColorStd()
 *  Style_BackgroundImageStd()
 *  Style_TextColorSelected()
 *
 * Beispiele:
 *  Style_BackgroundColorSelected('gray');
 *  ---
 *  Style_BackgroundColorSelected('#808080');
 */


/*
 * Funktion: Style_BackgroundImageStd(image)
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Hintergrund einer inaktiven (Standard) Menüfläche.
 * Beachte: Die Farbe muß mit den Textfarben Style_TextColor() und
 *          Style_HoverColor() abgestimmt werden. Immer auf
 *          ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_TransparentBackground()
 *  Style_BackgroundColorStd()
 *  Style_TextColor()
 *  Style_HoverColor()
 *
 * Beispiele:
 *  Style_BackgroundImageStd('../images/white-blue-hrzline-170.jpg');
 */


/*
 * Funktion: Style_BackgroundImageSelected(image)
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Hintergrund einer aktiven (selektierten) Menüfläche.
 * Beachte: Die Farbe muß mit der Textfarbe Style_TextColorSelected()
 *          abgestimmt werden. Immer auf ausreichend Kontrast der
 *          Schrift achten.
 *
 * Siehe auch:
 *  Style_TransparentBackground()
 *  Style_BackgroundColorSelected()
 *  Style_TextColorSelected()
 *
 * Beispiele:
 *  Style_BackgroundImageSelected('../images/blue-white-hrzline-170.jpg');
 */


/*
 * Funktion: Style_TransparentBackground()
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Hintergrund einer aktiven und inaktiven Menüfläche
 * als transparent. Sodaß der ein Hintergrund (Style_BodyBackgroundImage)
 * durchscheint.
 * Beachte: Die Farbe muß mit den Textfarben Style_TextColor() und
 *          Style_HoverColor() abgestimmt werden. Immer auf
 *          ausreichend Kontrast der Schrift achten.
 *          Nach Style_TransparentBackground() können benötigte
 *          Background-Colors gesetzt werden.
 *
 * Siehe auch:
 *  Style_BackgroundColorSelected()
 *  Style_TextColor()
 *  Style_HoverColor()
 *
 * Beispiele:
 *  Style_TransparentBackground();
 *  Style_BackgroundColorSelected('blue');
 */


/*
 * Funktion: Style_TextColor(color)
 *
 * Die Variable ist vorbelegt mit: 'black'
 *
 * Der Einsatz der Funktion ist optional.
 * Beachte: Die Farbe muß mit der Hintergrundfarben
 *          Style_BackgroundColorStd() abgestimmt werden.
 *          Immer auf ausreichend Kontrast der Schrift achten.
 *
 * Definiert die Textfarbe für normalen Text.
 *
 * Siehe auch:
 *  Style_BackgroundColorStd()
 *
 * Beispiele:
 *  Style_TextColor('black');
 *  ---
 *  Style_TextColor('#000000');
 */


/*
 * Funktion: Style_HoverColor(color)
 *
 * Die Variable ist vorbelegt mit: 'red'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Textfarbe für Texte, auf die die Maus zeigt.
 * Info:    Wird nur von MSIE3+ bzw. NS6+ angezeigt.
 * Beachte: Die Farbe muß mit der Hintergrundfarbe
 *          Style_BackgroundColorStd() abgestimmt werden.
 *          Immer auf ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_BackgroundColorStd()
 *  Style_HoverBackgroundColor()
 *  Style_HoverBackgroundImage()
 *
 * Beispiele:
 *  Style_HoverColor('red');
 *  ---
 *  Style_HoverColor('#ff0000');
 */


/*
 * Funktion: Style_HoverBackgroundColor(color)
 *
 * Die Variable nicht vorbelegt.
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Hintergrundfarbe für Links, auf die die Maus zeigt.
 * Info:    Wird nur von MSIE3+ bzw. NS6+ angezeigt.
 * Beachte: Die Farbe muß mit der Textfarbe
 *          Style_HoverColor() abgestimmt werden.
 *          Immer auf ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_HoverColor()
 *  Style_HoverBackgroundImage()
 *
 * Beispiele:
 *  Style_HoverBackgroundColor('blue');
 */


/*
 * Funktion: Style_HoverBackgroundImage(image)
 *
 * Die Variable nicht vorbelegt.
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Hintergrund für Links, auf die die Maus zeigt.
 * Info:    Wird nur von MSIE3+ bzw. NS6+ angezeigt.
 * Beachte: Die Texture muß mit der Textfarbe
 *          Style_HoverColor() abgestimmt werden.
 *          Immer auf ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_HoverColor()
 *  Style_HoverBackgroundColor()
 *
 * Beispiele:
 *  Style_HoverBackgroundImage('../images/menu_bg.gif');
 */


/*
 * Funktion: Style_HoverIndent(pixel)
 *
 * Die Variable nicht vorbelegt.
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Immer wenn die Maus auf ein Link zeigt, wird dieser
 * um den Abstand versetzt.
 * Info: Wird nur von MSIE5+ bzw. NS6+ angezeigt.
 * Tipp: Ein Wert von 2 ist optimal.
 *
 * Siehe auch:
 *  Style_HoverColor()
 *
 * Beispiele:
 *  Style_HoverIndent(2);
 *
 *
 *  normal:
 *
 *  --------------
 *  | Test
 *  | |
 *  +-+-----------
 *
 *
 *  bei Hover:
 *
 *  --------------
 *  |   Test
 *  |   |
 *  +---+----------
 *   <->
 */


/*
 * Funktion: Style_TextColorSelected(color)
 *
 * Die Variable ist vorbelegt mit: 'white'
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Textfarbe für Texte eines aktiven (selektierten) Menüeintrages.
 * Beachte: Die Farbe muß mit der Hintergrundfarbe
 *          Style_BackgroundColorSelected() abgestimmt werden.
 *          Immer auf ausreichend Kontrast der Schrift achten.
 *
 * Siehe auch:
 *  Style_BackgroundColorSelected()
 *
 * Beispiele:
 *  Style_TextColorSelected('white');
 *  ---
 *  Style_TextColorSelected('#ffffff');
 */


/*
 * Funktion: Style_SubLevelIndent(pixel)
 *
 * Die Variable ist vorbelegt mit: 6
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Einrückabstand der Untermenüs (Sub-Menus) nach rechts.
 * Beachte: Ein zu großer Wert ist Platzverschwendung.
 *
 * Siehe auch:
 *  Style_MenuImageSpace()
 *
 * Beispiel:
 *  Style_SubLevelIndent(6);
 *
 *
 *   * Menu-1
 *   * Menu-2
 *      * Menu-2-1
 *   |  |
 *   |  |
 * ->+--+<- Abstand
 *
 */


/*
 * Funktion: Style_MenuImageSpace(horizontalPixel,verticalPixel)
 *
 * Die Variable ist vorbelegt mit: 2,2
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Definiert den Abstand eines Menü-Images zu anliegenden Texten
 * oder anderen Elementen.
 * Beachte: Ein zu großer Wert ist Platzverschwendung.
 * Beachte: Wird nur verwendet, wenn ein Image definiert ist.
 *
 * Siehe auch:
 *  Style_SubLevelIndent()
 *  DefineMenuImage()
 *  DefineMenuSelectImage()
 *  DefineMenuUnselectImage()
 *
 * Beispiel:
 *  Style_MenuImageSpace(2,2);
 *
 *  (h) -- horizontalPixel
 *  (v) -- verticalPixel
 *
 *
 *         (h)           (h)
 *       |<-->|        |<-->|
 *       |    |        |    |
 *
 *  - - -+----|--------|----|------------------
 *  ^    |
 *  | (v)|    |        |    |************
 *  v    |                   ************
 *  - - -|- - +--------+    |    **
 *       |    |        |         **
 *       |    | Image  |    |    **
 *       |    |        |         **
 *  - - -|- - +--------+    |    **
 *  ^    |                       **
 *  | (v)|                       **
 *  v    |
 *  - - -+-------------------------------------
 */


/*
 * Funktion: Style_EnableCategorySpace(bool)
 *
 * Die Variable ist vorbelegt mit: 1
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Erzeugt autom. einen kleinen Abstand zwischen den Menügruppen.
 *
 * Beispiele:
 *  Style_EnableCategorySpace(0);
 */


/*
 * Funktion: Style_MenuBarHeight(pixel)
 *
 * Die Variable ist vorbelegt mit: 4
 *
 * Der Einsatz der Funktion ist optional.
 *
 * Jede Menü-Bar wird mit dieser Pixel-Höhe erzeugt. Wird jedoch
 * ein Image definiert, so wird die Bar anhand der Grafik erzeugt.
 *
 * Siehe auch:
 *  Style_EnableCategorySpace()
 *
 * Beispiele:
 *  Siehe m4.html bzw. m5.html
 */






/********************************************************************/
/************* Dokumentation Aufbau des Menübaumes ******************/
/********************************************************************/

/*
 * Funktion: BeginMainMenu()
 *
 * Leitet den Aufbau des Menübaumes ein. Jede Menüdefinition
 * muß mit dieser Funktion beginnen.
 *
 * Alle Menüeinträge werden fortlaufend definiert und via Begin/End-
 * Funktionen kontrolliert.
 *
 * WICHTIG:
 *  Diese Funktion darf nur einmal pro menu.html verwendet werden.
 *  Alle Menügliederungen erfolgen durch z.B. BeginSubMenu()
 *
 * Siehe auch:
 *  EndMainMenu()
 *
 * Beispiel:
 *  BeginMainMenu();
 *    DefineMenuName("Menu-1");
 *    AppendMenu();
 *
 *    DefineMenuName("Menu-2");
 *    AppendMenu();
 *  EndMainMenu();
 *
 *
 * Ergebnis:
 *  - Menu-1
 *  - Menu-2
 */


/*
 * Funktion: EndMainMenu()
 *
 * Beendet die Definitions-Phase des Menüaufbaus.
 * Danach können (dürfen) keine weiteren Menüpunkte mehr
 * hinzugefügt werden.
 *
 * Siehe auch:
 *  BeginMainMenu()
 */


/*
 * Funktion: BeginSubMenu()
 *
 * Beginnt mit einem Untermenü.
 * Alle folgenden Definitionen beziehen sich auf dieses
 * neue Untermenü. Am Ende des Untermenüs muß EndSubMenu() aufgerufen
 * werden.
 * Durch geschachteltes Aufrufen von BeginSubMenu() können beliebig
 * viele Untermenüs erzeugt werden.
 *
 * Siehe auch:
 *  EndMainMenu()
 *
 * Beispiel:
 *  BeginMainMenu();
 *    DefineMenuName("Menu-1");            // Menu-1
 *    AppendMenu();
 *    BeginSubMenu();
 *      DefineMenuName("Menu-1-1");        //   Menu-1-1
 *      AppendMenu();
 *
 *      DefineMenuName("Menu-1-2");        //   Menu-1-2
 *      AppendMenu();
 *    EndMainMenu();
 *
 *    DefineMenuName("Menu-2");            // Menu-2
 *    AppendMenu();
 *    BeginSubMenu();
 *      DefineMenuName("Menu-2-1");        //   Menu-2-1
 *      AppendMenu();
 *
 *      DefineMenuName("Menu-2-2");        //   Menu-2-2
 *      AppendMenu();
 *      BeginSubMenu();
 *        DefineMenuName("Menu-2-2-1");    //     Menu-2-2-1
 *        AppendMenu();
 *
 *        DefineMenuName("Menu-2-2-2");    //     Menu-2-2-2
 *        AppendMenu();
 *      EndMainMenu();
 *    EndMainMenu();
 *
 *  EndMainMenu();
 *
 *
 * Ergebnis:
 *  + Menu-1
 *    - Menu-1-1
 *    - Menu-1-2
 *  - Menu-2
 *    - Menu-2-1
 *    + Menu-2-2
 *      - Menu-2-2-1
 *      - Menu-2-2-2
 */


/*
 * Funktion: EndSubMenu()
 *
 * Beendet die Definitions-Phase eines Untermenüs (Sub-Menu).
 *
 * Siehe auch:
 *  BeginSubMenu()
 */


/*
 * Funktion: AppendMenu()
 *
 * Aus zuvor definierten Daten einen Menüeintrag erzeugen.
 *
 * Alle Funktionen mit Namen "Define????()" dienen lediglich
 * dem Definieren von Daten. Erst mit AppendMenu() werden alle
 * definierten Daten als neuen Menüeintrag erzeugt. Danach
 * sind alle "Define????()" beschriebenen Daten wieder
 * neutralisiert.
 *
 * Die "Define????()" - Funktionen können in beliebiger Reihenfolge
 * aufgerufen werden.
 *
 *
 * Siehe auch:
 *  DefineMenuName()
 *  DefineMenuAltText()
 *  DefineMenuUrl()
 *  DefineMenuImage()
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  AppendMenu();
 *
 *  DefineMenuName("Menu-2");
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuName(name)
 *
 * Definiert den sichtbaren Namen (Text) des zu erzeugenden Menüeintrages.
 * Beachte: Jeder zu erzeugende Menüeintrag benötigt einen möglichts
 * kurzen und gut verständlichen Namen. Es ist durchaus auch möglich
 * mehrere Wörter zu verwenden, die dann autom. je nach Platzbedarf
 * in mehrere Zeilen angezeigt werden.
 *
 * Siehe auch:
 *  AppendMenu(), DefineMenuID()
 *  Beispiele zu BeginMenu() bzw BeginSubMenu()
 */


/*
 * Funktion: DefineMenuAltText(text)
 *
 * Definiert einen alternativen Text zum Menüeintrag.
 * Wird die Maus auf einem Menüeintrag bewegt und nicht weiter
 * verschoben, so erscheint dieser Text als Sprechblase.
 *
 * Beachte: Durch alternative Texte sollte der Menüpunkt genauer
 *          beschrieben werden, so, als wäre es eine Hilfestellung.
 *
 * Wichtig: Der Text darf keine Anführungszeichen (") beinhalten.
 *
 * Siehe auch:
 *  AppendMenu()
 */


/*
 * Funktion: DefineMenuID(id)
 *
 * Unabhängig von Sprache und Inhalt wird eine eindeutige
 * Kennung dem Menüpunkt zugeordnet. Damit können später ohne
 * Änderungen die entsprechenden Menüpunkte referenziert werden.
 *
 * Wichtig:
 *  Eine ID muß immer eindeutig sein, also keine doppelte Namen
 *  verwenden. Und damit Lara eine ID nicht zur Übersetzung anbietet,
 *  den Namen IMMER in Hochkommas (') einschließen.
 *  Bitte achten sie darauf, daß zwischen Groß- und Kleinschreibung
 *  unterschieden wird.
 *
 * Siehe auch:
 *  AppendMenu(), DefineMenuName(), OpenID()
 *  Beispiel m4.html, titleM4.html
 */


/*
 * Funktion: DefineMenuUrl(url)
 *
 * Definiert das Link-Ziel des zu erzeugenden Menüeintrages
 *
 * Info:
 *  Wird AppendMenu() aufgerufen, ohne zuvor einen URL zu definieren,
 *  so kann der Menueintrag nicht angeklickt werden. Für eine
 *  Obergruppe einiger Untermenüs kann das sinnvoll sein.
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuExternUrl()
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuUrl('Menu-1.html');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuExternUrl(url)
 *
 * Definiert das Link-Ziel des zu erzeugenden Menüeintrages.
 * Wird der Link angeklickt, öffnet sich das Ziel in einem
 * neuen Fenster.
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuUrl()
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("proDAD");
 *  DefineMenuExternUrl('http://www.prodad.de');
 *  AppendMenu();
 *  ...
 */



/*
 * Funktion: DefineMenuImage(image)
 *
 * Baut ein Image in den Menüeintrag ein
 *
 * Beachte: DefineMenuImage() definiert ein Image für
 *  den aktiven und inaktiven Menüeintrag. Soll jedoch
 *  ein aktiver (selektierter) Menüeintrag ein anderes
 *  Image zeigen, dann muß DefineMenuSelectImage() und
 *  DefineMenuUnselectImage() verwendet werden.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuSelectImage()
 *  DefineMenuUnselectImage()
 *  Style_MenuImageSpace()
 *
 * DefineMenuImage('test.gif') ist vergleichbar mit:
 *  {
 *    DefineMenuUnselectImage('test.gif');
 *    DefineMenuSelectImage('test.gif');
 *  }
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuImage('../icons/users.gif');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuUnselectImage(image)
 *
 * Baut ein Image in den Menüeintrag ein.
 * Definiert das Image für den inaktiven Zustand.
 *
 * Beachte:
 * DefineMenuUnselectImage() muß immer in Verbindung mit
 * DefineMenuSelectImage() eingesetzt werden.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuImage()
 *  Style_MenuImageSpace()
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuUnselectImage('../icons/closed.gif');
 *  DefineMenuSelectImage('../icons/open.gif');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuSelectImage(image)
 *
 * Baut ein Image in den Menüeintrag ein.
 * Definiert das Image für den aktiven (selektierten) Zustand.
 *
 * Beachte:
 * DefineMenuUnselectImage() muß immer in Verbindung mit
 * DefineMenuSelectImage() eingesetzt werden.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuImage()
 *  Style_MenuImageSpace()
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuUnselectImage('../icons/closed.gif');
 *  DefineMenuSelectImage('../icons/open.gif');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: OpenID(id)
 *
 * Menüpunkt öffnen und zugehörige Html-Seite anzeigen.
 *
 * Wichtig:
 *  Die zu öffnende Seite wird mittels der ID identifiziert.
 *  Bitte achten sie darauf, daß zwischen Groß- und Kleinschreibung
 *  unterschieden wird.
 *  Ist keine entsprechende ID definiert, so wird eine Warung
 *  angezeigt. Falls eine falsche Seite oder ein falscher Menüpunkt
 *  angezeigt wird, könnte das darauf hinweisen, daß ID-Namen
 *  doppelt definiert wurden.
 *
 * Siehe auch:
 *  AppendMenu(), DefineMenuName(), DefineMenuID()
 *  Beispiel m4.html, titleM4.html
 */


/*
 * Funktion: DefineMenuBackgroundImage(image)
 *
 * Zeigt ein Hintergrund-Image im Menüeintrag an
 *
 * Beachte: DefineMenuBackgroundImage() definiert ein Image für
 *  den aktiven und inaktiven Menüeintrag. Soll jedoch
 *  ein aktiver (selektierter) Menüeintrag ein anderes
 *  Image zeigen, dann muß DefineMenuBackgroundImageSelected() und
 *  DefineMenuBackgroundImageStd() verwendet werden.
 *
 *  Dies überdeckt eine DefineMenuBackgroundColor() - Definition.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuSelectImage()
 *  DefineMenuUnselectImage()
 *  Style_MenuImageSpace()
 *  DefineMenuBackgroundImageSelected()
 *  DefineMenuBackgroundImageStd()
 *
 * DefineMenuBackgroundImage('test.gif') ist vergleichbar mit:
 *  {
 *    DefineMenuBackgroundImageStd('test.gif');
 *    DefineMenuBackgroundImageSelected('test.gif');
 *  }
 *
 * Beispiel:
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuBackgroundImage('../images/menu_bg.gif');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuBackgroundImageSelected(image)
 *
 * Zeigt ein Hintergrund-Image im Menüeintrag an
 * Definiert das Image für den aktiven (selektierten) Zustand.
 *
 * Beachte:
 *   Dies überdeckt eine DefineMenuBackgroundColorSelected() -
 *   Definition.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuImage()
 *  DefineMenuBackgroundImage()
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 */


/*
 * Funktion: DefineMenuBackgroundImageStd(image)
 *
 * Zeigt ein Hintergrund-Image im Menüeintrag an
 * Definiert das Image für den inaktiven Zustand.
 *
 * Beachte:
 *   Dies überdeckt eine DefineMenuBackgroundColorStd() -
 *   Definition.
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuImage()
 *  DefineMenuBackgroundImage()
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 */


/*
 * Funktion: DefineMenuBackgroundColor(color)
 *
 * Zeigt einen farbigen Hintergrund im Menüeintrag an
 *
 * Beachte: DefineMenuBackgroundColor() definiert ein Farbe für
 *  den aktiven und inaktiven Menüeintrag. Soll jedoch
 *  ein aktiver (selektierter) Menüeintrag ein andere
 *  Farbe zeigen, dann muß DefineMenuBackgroundColorSelected() und
 *  DefineMenuBackgroundColorStd() verwendet werden.
 *
 *  Dies wird durch DefineMenuBackgroundImage() überdeckt.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuBackgroundImage()
 *  DefineMenuBackgroundColorSelected()
 *  DefineMenuBackgroundColorStd()
 *
 * DefineMenuBackgroundColor('white') ist vergleichbar mit:
 *  {
 *    DefineMenuBackgroundColorStd('white');
 *    DefineMenuBackgroundColorSelected('white');
 *  }
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 *  ...
 *  DefineMenuName("Menu-1");
 *  DefineMenuBackgroundColor('lightblue');
 *  AppendMenu();
 *  ...
 */


/*
 * Funktion: DefineMenuBackgroundColorSelected(color)
 *
 * Zeigt einen farbigen Hintergrund im Menüeintrag an
 * Definiert das Image für den aktiven (selektierten) Zustand.
 *
 * Beachte:
 *  Dies wird durch DefineMenuBackgroundImage() überdeckt.
 *
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuBackgroundColor()
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 */


/*
 * Funktion: DefineMenuBackgroundColorStd(color)
 *
 * Zeigt einen farbigen Hintergrund im Menüeintrag an
 * Definiert das Image für den inaktiven Zustand.
 *
 * Beachte:
 *  Dies wird durch DefineMenuBackgroundImage() überdeckt.
 *
 * Siehe auch:
 *  AppendMenu()
 *  DefineMenuBackgroundColor()
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 */


/*
 * Funktion: DefineMenuBar()
 *
 * Definiert den folgenden Menüpunkt als Bar (Trennung)
 *
 * Siehe auch:
 *  AppendMenu()
 *  Style_MenuBarHeight()
 *
 * Beispiel:
 *  m4.html bzw. m5.html
 *  ...
 *  DefineMenuBar();
 *  AppendMenu();
 */








/********************************************************************/
/***************** Dokumentation Misc *******************************/
/********************************************************************/

/*
 * Funktion: Sync()
 *
 * Zeigt den Menübaum passend zum Main-Inhalt an.
 *
 * Immer wenn Querverweise mittels Links innerhalb der gesamten
 * Homepage nötig sind, sollte jede Html-Seite folgenden
 * Body-Tag erhalten:
 *   <BODY onLoad="parent.Sync()">
 * Durch diese Ergänzung synchronisiert sich jede Seite autom.
 * mit dem Menü.
 *
 *
 * Beispiel:
 *  m4.html, Seite2
 */






/********************************************************************/
/****************** ENDE DER BESCHREIBUNG ***************************/
/********************************************************************/




















/********************************************************************/
/************** NICHT VERÄNDERN - DO NOT TOUCH **********************/
/********************************************************************/


/*
 * Bitte nur Funktionen zur Definition von Farben
 * und Images verwenden.
 *
 * [0] --> MenuName
 * [1] --> MenuDeep
 * [2] --> State
 * [3] --> Url
 * [4] --> Nonselected Image
 * [5] --> Selected Image
 * [6] --> Alt/Title - Text
 * [7] --> ID - Kennung
 * [8] --> Design für Select
 *         [0] --> Color
 *         [1] --> Image
 * [9] --> Design für Nonselect
 *         [0] --> Color
 *         [1] --> Image
 * [10] -> Type
 *         0 -- normal
 *         1 -- Bar
 *
 */
var Menu = new Array(1);
var AddMenuState=0;
var AddMenuIdx=0;
var AddMenuName="";
var AddMenuAltText=0;
var AddMenuUrl=0;
var AddMenuNonImage=0;
var AddMenuSelImage=0;
var AddMenuID=0;
var AddMenuType=0;
var AddMenuBgColorUSel=0;
var AddMenuBgColorSel=0;
var AddMenuBgImageUSel=0;
var AddMenuBgImageSel=0;
var SubLevelIndent=6;
var MenuImageHSpace=2;
var MenuImageVSpace=2;

var BodyBackgroundImage     = "";
var BodyBackgroundColor     = "white";
var BackgroundColorStd      = "white";
var BackgroundColorSelected = "gray";
var BackgroundImageStd      = "";
var BackgroundImageSelected = "";
var TextColor               = "black";
var TextColorSelected       = "white";
var AHoverColor             = "red";
var AHoverBgImage           = "";
var AHoverBgColor           = "";
var AHoverIndent            = 0;
var FontFamily              = "Arial, Helvetica";
var FontSize                = 8;
var InternalImagePath       = "../menuimages/";
var BodyLeftMargin          = 0;
var BodyTopMargin           = 0;
var CategorySpace           = 1;
var MenuBarHeight           = 4;


function DefineMenuBackgroundColor(color)
{
  AddMenuBgColorUSel = color;
  AddMenuBgColorSel  = color;
}

function DefineMenuBackgroundColorSelected(color)
{
  AddMenuBgColorSel = color;
}

function DefineMenuBackgroundColorStd(color)
{
  AddMenuBgColorUSel = color;
}


function DefineMenuBackgroundImage(image)
{
  AddMenuBgImageUSel = image;
  AddMenuBgImageSel  = image;
}

function DefineMenuBackgroundImageSelected(image)
{
  AddMenuBgImageSel = image;
}

function DefineMenuBackgroundImageStd(image)
{
  AddMenuBgImageUSel = image;
}


function DefineMenuName(name)
{
  AddMenuName = name;
}

function DefineMenuAltText(txt)
{
  AddMenuAltText = txt;
}

function DefineMenuUrl(url)
{
  AddMenuUrl = url;
}

function DefineMenuExternUrl(url)
{
  AddMenuUrl = '*'+url;
}

function DefineMenuID(id)
{
  AddMenuID = id;
}


function DefineMenuImage(image)
{
  AddMenuNonImage = image;
  AddMenuSelImage = image;
}

function DefineMenuSelectImage(image)
{
  AddMenuSelImage = image;
}

function DefineMenuUnselectImage(image)
{
  AddMenuNonImage = image;
}


function DefineMenuBar()
{
  AddMenuType = 1;
}


function BeginMainMenu()
{
  AddMenuState = 0;
}

function EndMainMenu()
{
}

function BeginSubMenu()
{
  ++AddMenuState;
}

function EndSubMenu()
{
  if(--AddMenuState < 0) AddMenuState=0;
}


function AppendMenu()
{
  Menu[AddMenuIdx] = new Array(10);
  Menu[AddMenuIdx][0]  = AddMenuName;
  Menu[AddMenuIdx][1]  = AddMenuState;
  Menu[AddMenuIdx][3]  = AddMenuUrl;
  Menu[AddMenuIdx][4]  = AddMenuNonImage;
  Menu[AddMenuIdx][5]  = AddMenuSelImage;
  Menu[AddMenuIdx][6]  = AddMenuAltText;
  Menu[AddMenuIdx][7]  = AddMenuID;
  Menu[AddMenuIdx][10] = AddMenuType;

  if(AddMenuBgColorSel || AddMenuBgImageSel)
  {
    var Design = new Array(2);
    Menu[AddMenuIdx][8] = Design;
    Design[0] = AddMenuBgColorSel;
    Design[1] = AddMenuBgImageSel;
  }

  if(AddMenuBgColorUSel || AddMenuBgImageUSel)
  {
    var Design = new Array(2);
    Menu[AddMenuIdx][9] = Design;
    Design[0] = AddMenuBgColorUSel;
    Design[1] = AddMenuBgImageUSel;
  }



  ++AddMenuIdx;
  AddMenuUrl         = 0;
  AddMenuNonImage    = 0;
  AddMenuSelImage    = 0;
  AddMenuAltText     = 0;
  AddMenuID          = 0;
  AddMenuType        = 0;
  AddMenuBgColorUSel = 0;
  AddMenuBgColorSel  = 0;
  AddMenuBgImageUSel = 0;
  AddMenuBgImageSel  = 0;
}






function Style_FontFamily(ff)
{
  FontFamily = ff;
}
function Style_FontSize(size)
{
  FontSize = size;
}


function Style_BodyLeftMargin(pix)
{
  BodyLeftMargin = pix;
}
function Style_BodyTopMargin(pix)
{
  BodyTopMargin = pix;
}


function Style_BodyBackgroundImage(image)
{
  BodyBackgroundImage = image;
}
function Style_BodyBackgroundColor(color)
{
  BodyBackgroundColor = color;
}


function Style_BackgroundColorSelected(color)
{
  BackgroundColorSelected = color;
}

function Style_BackgroundColorStd(color)
{
  BackgroundColorStd = color;
}

function Style_BackgroundImageSelected(image)
{
  BackgroundImageSelected = image;
  BackgroundColorSelected = '';
}

function Style_BackgroundImageStd(image)
{
  BackgroundImageStd = image;
  BackgroundColorStd = '';
}

function Style_TransparentBackground()
{
  BackgroundColorStd = '';
  BackgroundImageStd = '';
  BackgroundColorSelected = '';
  BackgroundImageSelected = '';
}


function Style_HoverColor(color)
{
  AHoverColor = color;
}

function Style_HoverBackgroundColor(color)
{
  AHoverBgColor = color;
}
function Style_HoverBackgroundImage(image)
{
  AHoverBgImage = image;

  /* Bugfix IE5.5
   * Ein Background-Image wird nur dann angezeigt, wenn auch
   * eine Definition für Background-Color vorhanden ist.
   */
  if(AHoverBgColor=='')
   AHoverBgColor = 'black';
}

function Style_HoverIndent(pix)
{
  AHoverIndent = pix;
}


function Style_TextColor(color)
{
  TextColor = color;
}

function Style_TextColorSelected(color)
{
  TextColorSelected = color;
}

function Style_SubLevelIndent(v)
{
  SubLevelIndent = v;
}

function Style_MenuImageSpace(hrz,vrt)
{
  MenuImageHSpace = hrz;
  MenuImageVSpace = vrt;
}


function Style_EnableCategorySpace(set)
{
  CategorySpace = set;
}


function Style_MenuBarHeight(pix)
{
  MenuBarHeight = pix;
}


function Resource_InternalImagePath(path)
{
  InternalImagePath = path+'/';
}






function OpenID(id)
{
  var Idx = FindID(id);
  if(Idx>=0) OpenIndex(Idx);
  else alert("function OpenID(id)\n id: '" + id + "' not defined!");
}


function FindID(id)
{
  var i;
  for(i=0; i<Menu.length; ++i)
  {
    if(Menu[i][7] == id) return i;
  }
  return -1;
}


function FindUrl(url)
{
  var i,Len,BestI,BestLen;

  i = url.indexOf('#');
  if(i>0) url = url.substr(0,i);

  BestI  =-1;
  BestLen= 0;
  for(i=0; i<Menu.length; ++i)
  {
    if(Menu[i][3].length>0 && Menu[i][3].length <= url.length)
    {
      Len = Menu[i][3].length;

      if(   Len > BestLen
         && Menu[i][3] == url.slice(url.length - Menu[i][3].length ))
      {
        BestI   = i;
        BestLen = Len;
      }
    }
  }
  return BestI;
}


function OpenIndex(idx)
{
  if(idx<0 || idx >= Menu.length)
    alert("function OpenIndex(idx)\n idx: '" + idx + "' out of range!");
  else _generate(idx);
}


function Sync()
{
  var Idx;

  if(window.main)
  {
    Idx = FindUrl( window.main.location.href );
    if(Idx>=0)
    {
      if(alte != Menu[Idx][3])
      {
        alte = Menu[Idx][3];
        _generate(Idx);
      }
    }
    else generate(0);
  }
}











// Variable zur Aufnahme des Übergabewertes (geklickter Menüpunkt)
var klick = 0;

// Variable zur Aufnahme des zuvor geklickten Menüpunktes
var prev = 0;
var alte=0;


function generate(idx)
{
  /* Nur einmal, zu Beginn setzen. Sonst gibt es Probleme
   * mit dem Back-Button.
   */
  if(!alte)
  {
    _generate(idx);
  }
}


function _generate(klick)
{
  // Enthält die URL einen Stern an erster Stelle, wird ein neues Fenster geöffnet und die Funktion abgebrochen

  if(Menu[klick][3] && Menu[klick][3].substr(0,1)=="*")
  {
    open(Menu[klick][3].substr(1,Menu[klick][3].length),"extern");
  }
  else
  {
    // Zuerst werden alle Flag-Einträge gelöscht.
    for(x = 0; x < Menu.length; x++) Menu[x][2] = 0;

    // Nun werden die Flags des aktuellen Klicks gesetzt.
    setflags(klick);

    // Wurde durch klick ein Ordner gewählt, der keine direkte Verknüpfung mit einer URL besitzt, so wird der dazu-
    // gehörige Ast aufgeklappt. Der zuvor angezeigte "vollwertige" Menüpunkt (in prev gespeichert) bleibt aber ebenfalls
    // geöffnet, da sich dort die derzeit angezeigte Seite befindet und der Zweig daher nicht eingeklappt werden darf.
    // So wird zu den eigentlichen Flags des aktiven Klicks noch der Pfad des vorher gewählten Ordners hinzugefügt.
    if(!Menu[klick][3]) setflags(prev);

    control(klick);
  }
}


function setflags(k)
{
  // Hier werden, ausgehend vom übergebenen Klick, die Knoten aufsteigend (rückwärts) geflagged.

  lvl = Menu[k][1];
  for(x = k-1; x > -1; --x)
  {
    if(Menu[x][1] < lvl)
    {
      Menu[x][2] = 1;
      --lvl;
    }
  }

  // Der angeklickte Ordner wird geflagged.
  Menu[k][2] = 1;
}


function control(klick)
{
  var FontDef;
  var LinkDef;

  FontDef = 'font-size: '+FontSize+'pt; font-family:' + FontFamily + ';';


  LinkDef  = 'a:link {text-decoration:none;} ';

  LinkDef += 'a:hover {' + 'color:' + AHoverColor +';';
  if(AHoverBgImage)
     LinkDef += 'background-image: url('+ AHoverBgImage +'); ';
  if(AHoverBgColor)
    LinkDef += 'background-color: ' + AHoverBgColor + ';';

  LinkDef += 'text-indent: '+ AHoverIndent +'px ;';
  LinkDef += '} ';

  LinkDef += 'a {text-decoration: none; } ';



  output = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n<HTML>\n<HEAD>\n';
  output = output + '<STYLE type="text/css">\n';
  output = output + '<!-- ' + LinkDef;
  output = output + 'td.space {' + FontDef + '}';

  output = output + 'td.selmenuitem {';
  output = output + FontDef + 'color:' + TextColorSelected +';';
  output = output + '}\n';

  output = output + 'td.uselmenuitem {';
  output = output + FontDef + 'color:' + TextColor +';';
  output = output + '}\n';

  output = output + 'td.menuitem {';
  output = output + FontDef + 'color:' + TextColor +';';
//  if(BackgroundColorStd) output += 'background-color:' + BackgroundColorStd +';';
//  if(BackgroundImageStd) output += 'background-image: url(' + BackgroundImageStd +');';
  output = output + '}\n';

  output = output + '//-->\n</STYLE>\n';
  output = output + '</HEAD>\n\n';
  output = output + '<BODY leftmargin='+BodyLeftMargin+' marginwidth="0" topmargin='+BodyTopMargin+' marginheight="0" ';
  output = output + 'bgcolor="' + BodyBackgroundColor + '" ';
  if(BodyBackgroundImage) output = output + 'background="' + BodyBackgroundImage + '" ';
  output = output + 'link=' + TextColor + ' alink=' + TextColor + ' vlink=' + TextColor + '>\n';
  output = output + '<TABLE width="100%" border=0 cellspacing=0 cellpadding=0>\n';

  zeige(0,klick);

  // Dokument in HTML abschliessen
  output = output + '</TABLE>\n</BODY>\n</HTML>\n';

  // Wenn alles abgeschlossen ist, im Hauptframe die entsprechende Seite aufrufen - es sei denn,
  // die URL lautet "#", dann keinen Aufruf durchführen.
  if((Menu[klick][3]) && (Menu[klick][3] != "#")) anzeige(Menu[klick][3]);

  // Diesen Klick speichern zum Vergleich in "Knoten" beim nächsten Aufruf.
  // WICHTIG: Wert nur übernehmen, wenn Menu[klick][3] eine URL enthält!
  if(Menu[klick][3]) prev = klick;

  // Output-Variable ausgeben -> ENTKOPPLUNG
  setTimeout("Ausgabe()",1);
}


function zeige(x,klick)
{
  lvl = Menu[x][1];
  while( x < Menu.length && Menu[x][1] >= lvl)
  {
    if(Menu[x][1] == lvl)
    {
      Knoten(x,klick);
      if( Menu[x][2] == 1 && x+1 < Menu.length)
      {
        zeige(x+1,klick);
        --lvl;
      }
    }
    ++x;
  }
}


function Knoten(nr,klick)
{
  var i;
  var IsOpen = 0;
  var BeginFontTag = "";
  var EndFontTag = "";
  var SpacerImg = InternalImagePath + 'spacer.gif';
  var BeginATag;
  var BeginTDTag;
  var DesignHelp = new Array(2);

  // Default: Leeres Bild
  bild = "spacer.gif";

  // Wenn dieser Ordner geflaggt ist, handelt es sich entweder um einen Knoten, von dem ein sichtbarer Menüzweig
  // ausgeht, oder um den angeklickten Menüpunkt. In jedem Falle läßt sich bild auf "open" setzen (default
  // ist "blank"), da in der nächsten Abfrage beim angeklickten Punkt bild="marker.gif" gesetzt wird.
  if (Menu[nr][2] == 1)
  {
    bild = "open.gif";
    IsOpen = 1;
  }

  // Der markierte (angeklickte) Menüpunkt bekommt den Marker (horizontaler statt vertikaler Pfeil), außer er ist
  // nicht mit einer URL verbunden (Menu[klick][3] existiert nicht). Dann bleibt es bei bild=open, und der Marker
  // verbleibt auf dem zuvor gewählten Menüpunkt (prev).
  if (((nr == klick) && (Menu[klick][3])) || ((nr == prev) && (!Menu[klick][3])))
  {
    bild = "marker.gif";
    EndFontTag   = "</font>";
    BeginFontTag = '<font color="' + TextColorSelected + '">';
    IsOpen = 2;
    BeginTDTag = '<td class="selmenuitem" ';
    DesignHelp[0] = BackgroundColorSelected;
    DesignHelp[1] = BackgroundImageSelected;
    if(Menu[nr][8])
    {
      for(i=0; i<2; ++i)
      {
        if(Menu[nr][8][i]) DesignHelp[i]=Menu[nr][8][i];
      }
    }
  }
  else
  {
    BeginTDTag = '<td class="uselmenuitem" ';
    DesignHelp[0] = BackgroundColorStd;
    DesignHelp[1] = BackgroundImageStd;
    if(Menu[nr][9])
    {
      for(i=0; i<2; ++i)
      {
        if(Menu[nr][9][i]) DesignHelp[i]=Menu[nr][9][i];
      }
    }
  }

  if(DesignHelp[0]) BeginTDTag += 'bgcolor="' + DesignHelp[0] +'" ';
  if(DesignHelp[1]) BeginTDTag += 'background="' + DesignHelp[1] +'" ';



  // Nach jeder Kategorie eine Lücke lassen
  if(   CategorySpace
     && nr>0 && Menu[nr-1][1]>0 && Menu[nr-1][1] > Menu[nr][1])
  {
    output = output
      + '<tr><td class="space"> </td></tr>'
    ;
  }


  BeginATag =
      '<A HREF="javascript:parent.OpenIndex(' + nr + ')" '
    + (Menu[nr][6] ? 'title="'+Menu[nr][6]+'"' : '')
    + '>'
    ;


  output = output
      + '<TR>'
      + '<td>'
      + '<table width="100%" border=0 cellspacing=0 cellpadding=0>'
      + '<tr>'
      ;

  // Entsprechend der Ebene des Menüpunktes einrücken ("spacer.gif" einsetzen)
  if(Menu[nr][1])
  {
    output = output
      + '<td class="menuitem" nowrap>'
      + '<img src="'+SpacerImg+'" align=top border=0 '
      + 'width=' + (Menu[nr][1]*SubLevelIndent)
      + ' height=1>'
      + '</td>'
    ;
  }


  if(Menu[nr][10]==0) // normal
  {
    // Image einbauen
    if(Menu[nr][4] || Menu[nr][5])
    {
      var Image = IsOpen ? Menu[nr][5] : Menu[nr][4];
      var ImgParam = '';

      if(!Image)
      {
        Image = SpacerImg;
        ImgParam = 'height=1 width=' + SubLevelIndent;
      }

      output = output
        + BeginTDTag + '>'
        + BeginATag
        + '<img src="' + Image + '" ' + ImgParam
        + ' border=0 hspace='+MenuImageHSpace+' vspace='+MenuImageVSpace+' >'
        + '</A>'
        + '</td>'
      ;
      bild =0;
    }


    if(bild)
    {
      output = output
        + BeginTDTag + '>'
        + '<img src="'+ InternalImagePath + bild + '" border=0 align=top width=9 height=9>'
        + '</td>'
      ;
    }

    output +=
        BeginTDTag + ' width="100%">'
      + (IsOpen ? '<b>' : '' )
      + BeginATag
      + BeginFontTag
      + Menu[nr][0]
      + EndFontTag
      + '</A></td>'
    ;
  }
  else if(Menu[nr][10]==1) // Bar
  {
    output += BeginTDTag + ' width="100%">';

    if(Menu[nr][4])
         output += '<img src="' + Menu[nr][4] + '" border=0>';
    else output += '<img src="' + SpacerImg + '" width=2 height="'+MenuBarHeight+'" border=0>';

    output += '</td>';
  }


  output = output
      + '</tr></table>'
      + '</TD></TR>'
  ;

}




var _AusgabeThrowCnt=0;

function Ausgabe()
{
  /* Zur Kompensation der Ladezeitschwankungen wird
   * diese Funktion periodisch aufgerufen.
   */
  try
  {
    if(!window.main) throw "missing Frame 'main'";
    if(!window.menu) throw "missing Frame 'menu'";

    window.menu.document.open();
    window.menu.document.write(output);
    window.menu.document.close();
    output = '';
    _AusgabeThrowCnt = 0;
  }
  catch(a)
  {
    if(++_AusgabeThrowCnt > 20)
    {
      alert(
        "Fatal-Error - " + a
      + "\n\nMögliche Ursachen:\n"
      + " - Frame 'main' existiert nicht\n"
      + " - Frame 'menu' existiert nicht\n"
      );
    }
    else
    {
      setTimeout("Ausgabe()",_AusgabeThrowCnt*10);
    }
  }
}


function anzeige(seite)
{
  if(window.main)
  {
    var Must = 0;

    if(alte != seite) Must = 1;
    else
    {
      var Idx;
      Idx = FindUrl( window.main.location.href );
      if(Idx<0 || Menu[Idx][3] != seite) Must = 1;
    }


    if(Must)
    {
      window.main.location.href = seite;
      alte = seite;
    }
  }
}

function finder(was)
{
  for(x = 0; x < Menu.length; ++x)
  {
    if(was == Menu[x][0]) das = x;
  }
  OpenIndex(das);
}
