/*

================
Anwendung: Menue
================


*/

// === Variablen (global) ===

var        eintraege                = new Array()
var        bildname                = "Bild"

// === Parameter (Vorbelegung) ===

var        body_bgcolor                = "FFFFF0"
var        body_background                = "FFFFF0"
var        body_text                = "CCCCCC"
var        body_link                = "#808000F"
var        body_alink                = "#808000"
var        body_vlink                = "#808000"
var        body_hover                = "#808000"
var        a_underline                = true
var        menue_pre                = "<B><SMALL>"
var        menue_post                = "</SMALL></B>"
var        eintrag_pre                = "<EM><SMALL>"
var        eintrag_post                = "</SMALL></EM>"
var        menue_titel1                = "<FONT COLOR=\"#0080FF\""
var        menue_titel2                = "<FONT COLOR=\"#0080FF\""
var        menue_style                = "font-family: Verdana, Arial, sans-serif;"
var        rand                        = 0
var        cookie_name                = "OpenNodes"
var        bild_leer                = "images/leer.gif"
var        bild_eintrag                = "images/normal.gif"
var        bild_menue_offen        = "images/offen.gif"
var        bild_menue_geschlossen        = "images/geschlossen.gif"
var        bild_breite                = 12
var        bild_hoehe                = 12
var        frame_name                = "menuetree"
var        extra                        = true
var        extra_text_expand        = "Aufbauen"
var        extra_text_collapse        = "Abbauen"
var        extra_pre                = "<SMALL>"
var        extra_post                = "</SMALL>"
var        exclusive                = false
var        copyright                = false

// === Hilfsfunktionen ===

// Cookie lesen
function read_cookie(cookiename)
{
        var cookie_string        = document.cookie
        var cookie_array        = cookie_string.split(";")
        var array_size                = cookie_array.length
        var cookie_teile

        var i        = 0

        for(i = 0; i < array_size; i++)
        {
                cookie_teile        = cookie_array[i].split("=")
                if(cookie_teile[0].substring(0, 1) == " ")
                        cookie_teile[0] = cookie_teile[0].substring(1, cookie_teile[0].length)
                if(cookie_teile[0] == cookiename)
                        return unescape(cookie_teile[1])
        }

        return ""
}


// Cookie schreiben
function write_cookie(cookiename, cookie_wert, gueltigkeitszeitraum)
{
        if(gueltigkeitszeitraum)
        {
                var ablauf_datum        = new Date()

                ablauf_datum.setTime(ablauf_datum.getTime() + gueltigkeitszeitraum)
                document.cookie = cookiename + "=" + escape(cookie_wert) + "; " +
                                        "expires=" + ablauf_datum.toGMTString()
        }
        else
                document.cookie = cookiename + "=" + escape(cookie_wert)
}

// Knoten ermitteln
function set_nodes()
{
        var        i

        for(i = 0; i < (eintraege.length - 1); i++)
                if(eintraege[i + 1].level > eintraege[i].level)
                {
                        eintraege[i].node        =  true
                        eintraege[i].open        =  false
                }
}

// Aufnahme eines neuen Menueeintrags
function neuer_eintrag(level, name, url, target, desc, image, image_open)
{
        this.level                = level
        this.name                = name
        this.url                = url
        this.target                = target
        this.node                = false
        this.open                = false
        this.description        = desc
        this.image                = image
        this.image_open                = image_open
}

// Eintrag vornehmen und Verzweigungsermittlung
function eintrag(level, name, url, target, desc, image, image_open)
{
        var        pos        = eintraege.length

        if(level < 1)
        {
                alert("Level-Werte bitte ab 1 anlegen!")
                return
        }

        if(arguments.length < 2)
        {
                alert("Es muessen mindestens die ersten beiden Argumente angegeben werden.")
                return
        }

        eintraege[pos]        = new neuer_eintrag(level,
                                                name,
                                                (arguments.length > 2) ? url : null,
                                                (arguments.length > 3) ? target : null,
                                                (arguments.length > 4) ? desc : null,
                                                (arguments.length > 5) ? image : null,
                                                (arguments.length > 6) ? image_open : null)
}

// Untermenue oeffnen oder schliessen
function submenue(nr)
{
        // Alle Untermenues schliessen (ausser nr)
        function close_submenues(nr)
        {
                var        i
                for(i = 0; i < eintraege.length; i++)
                        if((i != nr) && eintraege[i].node)
                                eintraege[i].open        = false
        }

        // Untermenue nr exklusiv oeffnen
        function open_submenues(nr)
        {
                function open_super_level(nr, lvl)
                {
                        if((nr == 1) || (lvl < 1))
                                return

                        var        i
                        for(i = nr - 1; i >= 0; i--)
                        {
                                if((eintraege[i].level == lvl) && eintraege[i].node)
                                {
                                        eintraege[i].open        = true
                                        open_super_level(i, lvl - 1)
                                        return
                                }
                        }
                        return
                }

                open_super_level(nr, eintraege[nr].level - 1)
        }

        eintraege[nr].open        = !eintraege[nr].open
        if((eintraege[nr].target != null) && (eintraege[nr].url != null))
                frames[eintraege[nr].target].location.href        = eintraege[nr].url
        if(eintraege[nr].open && exclusive)
        {
                close_submenues(nr)
                open_submenues(nr)
        }
        write_menue()
}

// Alle Untermenues oeffnen
function expand()
{
        var        i

        for(i = 0; i < eintraege.length; i++)
                if(eintraege[i].node)
                        eintraege[i].open        = true
        write_menue()
}

// Alle Untermenues schliessen
function collapse()
{
        var        i

        for(i = 0; i < eintraege.length; i++)
                if(eintraege[i].node)
                        eintraege[i].open        = false
        write_menue()
}

// Kommentar in der Statuszeile anzeigen
function show(comment)
{
        status        = comment
}

// Kommentar aus der Statuszeile entfernen
function hide()
{
        status        = ""
}

// Ausgabe eines Menueeintrags
function ausgabe(nr)
{
        with(self[frame_name].document)
        {
                var        i
                var        tag_a_anfang        = ""
                var        tag_a_ende        = ""
                var        tags_pre        = ""
                var        tags_post        = ""
                var        tag_img                = ""
                var        titel                = ""
                var        bild                = ""

                write("<TABLE CELLSPACING=\"0\" CELLPADDING=\"0\" BORDER=\"0\">\n<TR ALIGN=\"LEFT\" VALIGN=\"CENTER\">\n<TD>")

                // Platzhalter
                if(eintraege[nr].level > 1)
                        write("<IMG SRC=\"" + bild_leer + "\" WIDTH=\"" + String(bild_breite * (eintraege[nr].level - 1)) + "\" HEIGHT=\"" + String(bild_hoehe) + "\" BORDER=\"0\" ALT=\"\">")

                tag_a_ende        = "</A>"

                // Untermenues / normaler Eintrag
                if(eintraege[nr].node)
                {
                        titel        = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name
                        bild        = eintraege[nr].open ?
                                        (eintraege[nr].image_open ? eintraege[nr].image_open : bild_menue_offen) :
                                        (eintraege[nr].image ? eintraege[nr].image : bild_menue_geschlossen)

                        tags_pre        = menue_pre
                        tags_post        = menue_post
                        tag_a_anfang        = "<A " +
                                                "HREF=\"javascript:parent.submenue(" + String(nr) + ")\" " +
                                                "onMouseOver=\"parent.show('" + titel + "'); return true\" " +
                                                "onMouseOut=\"parent.hide()\" " +
                                                "TITLE=\"" + titel + "\"" +
                                                ">"

                }
                else
                {
                        titel        = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name
                        bild        = eintraege[nr].image ? eintraege[nr].image : bild_eintrag

                        tags_pre        = eintrag_pre
                        tags_post        = eintrag_post
                        tag_a_anfang        = "<A " +
                                                "HREF=\"" + eintraege[nr].url + "\" " +
                                                "onMouseOver=\"parent.show('" + titel + "'); return true\" " +
                                                "onMouseOut=\"parent.hide()\" " +
                                                (eintraege[nr].target ? (" TARGET=\"" + eintraege[nr].target + "\" ") : "") +
                                                "TITLE=\"" + titel + "\"" +
                                                ">"

                }

                tag_img        = "<IMG " +
                                "SRC=\"" + bild + "\" " +
                                "WIDTH=\"" + String(bild_breite) + "\" " +
                                "HEIGHT=\"" + String(bild_hoehe) + "\" " +
                                "BORDER=\"0\" " +
                                "NAME=\"" + bildname + String(nr) + "\" " +
                                "ALT=\"" + titel + "\"" +
                                ">"

                write(tag_a_anfang + tag_img + tag_a_ende)
                write("</TD>\n<TD>")
                write(tag_a_anfang + tags_pre + eintraege[nr].name + tags_post + tag_a_ende)

                writeln("</TD>\n</TR>\n</TABLE>")

        }
}

// Ausgabe aller Eintraege eines Levels und eines Untermenues
function ausgabe_eintraege(lvl, start)
{
        var        i

        with(self[frame_name].document)
        {
                for(i = start; i < eintraege.length; i++)
                {
                        if(eintraege[i].level < lvl)
                                return
                        if(eintraege[i].level == lvl)
                        {
                                ausgabe(i)
                                if(eintraege[i].node)
                                        if(eintraege[i].open)
                                                ausgabe_eintraege(lvl + 1, i + 1)
                        }
                }
        }
}

// Menuedokument schreiben (dynamisches Dokument erzeugen)
function write_menue()
{
        with(self[frame_name].document)
        {
                open("text/html", "replace")

                // Kopf
                writeln("<HTML>\n<HEAD>\n<TITLE>AA2001</TITLE>")
                writeln("<META NAME=\"AUTHOR\" CONTENT=\"elephant\">")
                writeln("<META NAME=\"ROBOTS\" CONTENT=\"NONE\">")
                writeln("<META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; CHARSET=iso-8859-1\">")
                writeln("<STYLE TYPE=\"text/css\">\n<!--")
                if(!a_underline)
                        writeln("A {text-decoration: none;}")
                writeln("A:hover {color: #" + body_hover + ";}")
                if(menue_style != "")
                        writeln("BODY, A, P, TD, H1, H2, H3, H4, H5, H6 {" + menue_style + "}")
                writeln("//-->\n</STYLE>")
                writeln("</HEAD>")

                // Koerper
                writeln("<BODY BGCOLOR=\"#" + body_bgcolor + "\" TEXT=\"#" + body_text +
                                "\" LINK=\"#" + body_link + "\" ALINK=\"#" + body_alink +
                                "\" VLINK=\"#" + body_vlink + "\" LEFTMARGIN=\"" + rand +
                                "\" TOPMARGIN=\"" + rand + "\" MARGINWIDTH=\"" + rand +
                                "\" MARGINHEIGHT=\"" + rand + "\"" +
                                (((body_background != "") && (body_background != null)) ? (" BACKGROUND=\"" + body_background + "\"") : "" ) + ">")
                if(menue_titel1 != "")
                        writeln("<P ALIGN=\"CENTER\">" + menue_titel1)
			writeln("<P ALIGN=\"CENTER\">" + menue_titel2)
                write("<P>")
                ausgabe_eintraege(1, 0)
                writeln("</P>")
                if(extra)
                {
                        write("<P ALIGN=\"CENTER\">" + extra_pre)
                        if(!exclusive)
                                write("<NOBR>[ <A HREF=\"javascript:parent.expand()\" TITLE=\"" + extra_text_expand + "\">" + extra_text_expand + "</A> ]<WBR></NOBR> ")
                        write("<NOBR>[ <A HREF=\"javascript:parent.collapse()\" TITLE=\"" + extra_text_collapse + "\">" + extra_text_collapse + "</A> ]<WBR></NOBR>")
                        writeln(extra_post + "</P>")
                }
                if(copyright)
                {
                        write("<HR SIZE=\"2\" WIDTH=\"90%\" ALIGN=\"CENTER\" COLOR=\"" + body_text + "\">\n<P ALIGN=\"CENTER\"><SMALL><SMALL>")

                        writeln("</SMALL></SMALL></P>")
                }
                writeln("</BODY>")
                writeln("</HTML>")

                close()
        }

        // Menues in Cookie merken
        if(rebuild)
        {
                var        s        = ""
                var        i

                for(i = 0; i < eintraege.length; i++)
                        if(eintraege[i].node)
                                if(eintraege[i].open)
                                        s        += ((s == "") ? "" : ",") + String(i)
                write_cookie(cookie_name, s, 1000 * 60 * 60 * 24 * 92)
        }
}

// === Menuefunktionen ==

// Ausgabe des kompletten Menues
function menue()
{
        set_nodes()

        // Menues/Cookie auswerten
        if(rebuild)
        {
                var        s        = read_cookie(cookie_name)
                var        sarr        = s.split(",")
                var        i
                var        nr

                for(i = 0; i < sarr.length; i++)
                {
                        nr        = parseInt(sarr[i])
                        if(!isNaN(nr))
                                if(nr < eintraege.length)
                                        if(eintraege[nr].node)
                                                eintraege[nr].open        = true
                }
        }

        write_menue()
}

// Menue mit IDs oeffnen
function oeffne_menue_pfad(ids)
{
        set_nodes()

        var        sarr        = ids.split(",")
        var        i
        var        nr

        for(i = 0; i < sarr.length; i++)
        {
                nr        = parseInt(sarr[i])
                if(!isNaN(nr))
                        if(eintraege[nr].node)
                                eintraege[nr].open        = true
        }

        write_menue()
}

// === EOF ===