/* service_nav.js - Version 2.8.5 */
/* jn: 03.06.2003 */
/* gs: 06.06.2003 - Neuformatierung des Quellcodes (version 2.4.1) */
/* gs: 06.06.2003 - Umbenennung der Variablen t0 und t1,  Kommentare (version 2.4.2) */
/* gs: 06.06.2003 - Modifizierung init(), init_n(), korrekte Darstellung NS 4.x, debug-version (version 2.4.3) */
/* gs: 06.06.2003 - non-debug-version, Modifizierung init_n(), Probleme bei schnellem Navigieren im IEE 6.0 (version 2.5) */
/* gs: 06.06.2003 - Code-Refactoring (version 2.5.1) */
/* gs: 10.06.2003 - navimgpre-Aufruf nicht in init(), da dieser Aufruf nur einmal beim Laden der service_nav.js
                    notwendig ist, Einbeziehung aller images, also auch der images s[98-123] in den
                    navimgpre()-Aufruf, Code-Refactoring (version 2.5.2) */
/* gs: 10.06.2003 - s[98-123] in s[61-70] umbenannt (version 2.5.3) */
/* gs: 10.06.2003 - variable imagepath entfernt (version 2.5.4) */
/* gs: 10.06.2003 - Bedingungen für Navigation ab 2. Ebene geändert (version 2.6) */
/* gs: 10.06.2003 - Bugfix Pfeildarstellung 3. u. 4. Ebene (version 2.7) */
/* gs: 11.06.2003 - Code-refactoring init_n() (version 2.7.1) */
/* gs: 11.06.2003 - mouseover von s[60] auf s[80] gelegt, da es sich hierbei um kein image handelt und
                    die images in einer for-Schleife von 40-70 mit navimgpre preloaded werden (version 2.7.2) */
/* gs: 11.06.2003 - Eliminierung des Mehrfachladens von identischen images s[40-70]
                    die images werden sowohl über hart kodierte Aufrufe, z.B. s[40] als auch über die
                    Variable ind aufgerufen (s[ind]), für ind sind in dieser Version nur die Werte
                    45, 47 und 55 möglich. Somit sind alle nach Berücksichtigung der hart kodierten s[]-Aufrufe
                    eine Vielzahl mehrfach definierten images nicht mehr notwendig
                    Zur Zeit werden folgende s[]-Einträge benötigt: 40, 45, 47, 50, 52, 55, 57 (version 2.8) */
/* gs: 11.06.2003 - image-name wird nicht zugewiesen, stattdessen wird die Bildgröße ergänzt  (version 2.8.1) */
/* gs: 11.06.2003 - showtimer deaktiviert (version 2.8.3) */
/* gs: 12.06.2003 - Testversion mit images[i].complete (version 2.8.3.1) */
/* gs: 12.06.2003 - navimgpre-Aufruf in init() zurückgelegt, da beim Laden der service_nav nicht erfolgreich (version 2.8.4) */
/* gs: 12.06.2003 - setTimeout wieder aktiviert, da bei langsamer Internet-Verbindung der neue Layer deutlich vor
                    den Navigationspfeilen dargestellt wird, online-Version mit korrekter Darstellung in
                    Netscape 4.x und 7 (version 2.8.5) */

function navimgpre(name, src)
{
    //alert("navimgpre() - name: " + name + "\nsrc: " + src);
    navpimg[name] = new Image
    navpimg[name].src = src;
}
function onmouse(LinkObject, which, state)
{
     //alert("which: " + which);
    // onmouseover
    if (state == 1)
        LinkObject.style.background='#999999';
    // onmouseout
    if (state == 0 && which != "42" && which != "47" && which != "57" && which != "61")
        LinkObject.style.background='#E7E7EF';
}
function getline(num, m_path)
{
    if (m[num][3] != 1)
    {
        return "";
    }
    //haupt oder unterebene
    lvl = (m[num][2] == 1) ? 0: 1;
    // abfrage ob aktiv
    akt = (String(m_path).match('^' + String(m[num][5]) + '$')) ? 1 : 0;
    // gesamtstring holen
    retval = s[lvl];
    // ab hier kommt der boebbel rein
    ind = 40 + lvl * 10;    // Haupt oder Unter-Menüpunkt
    ind += (m[num][0] == '' && m[num][4] == 0) ? 0 : 5; //link oder menu
    ind += akt * 2; //aktiv?
    menuItemPositionArray = m[num][5];
    activeMenuItemPositionArray = m_path;
    activeMenuItemPositionString = String(m_path);
    //alert("menuItemPositionArray: " + menuItemPositionArray + "\nind: " + ind);
    //alert("ind: " + ind);
 // Pfeile bis zum aktiven Menüpunkt zeigen nach unten
 if (ind != 42 && ind != 57)
 {
  menuItemPositionString = String(m[num][5]);
  if ((activeMenuItemPositionString + ',').match('^' + menuItemPositionString + ','))
        {
            if (menuItemPositionArray.length == 1)
                ind = 47;
            if (menuItemPositionArray.length == 2)
                ind = 52;
            if (menuItemPositionArray.length == 3)
                ind = 57;
            if (menuItemPositionArray.length == 4)
                ind = 57;
        }
 }
    // Pfeil nach rechts, wenn keine Kinder vorhanden sind
    if (akt == 1)
    {
        hasChildren = null;
        menuItemPositionString = String(m[num][5]);
        if (m[num+1] != null)
        {
            nextMenuItemPositionString = String(m[num+1][5]);
            hasChildren = nextMenuItemPositionString.match('^'+menuItemPositionString);
        }
        if(!hasChildren)
        {
            if (menuItemPositionArray.length == 1)
                ind = 40;
            if (menuItemPositionArray.length == 2)
                ind = 55;
            if (menuItemPositionArray.length == 3)
                ind = 55;
            if (menuItemPositionArray.length == 4)
                ind = 55;
        }
    }
    str = s[30 + lvl];
    if (s[ind] != '')
    {
        str = str.replace(/src/, 'src="' + s[ind] + '"');
        //str = str.replace(/name/, 'name="pfeil_' + num + '"');
        // gs: 11.06.03 - image-name wird nicht zugewiesen, stattdessen wird die Bildgröße ergänzt
        if (s[ind].indexOf("pfeil.gif") != -1 )
            str = str.replace(/name/, 'width="22" hight="17"');
        else if (s[ind].indexOf("pfeilu.gif") != -1 )
            str = str.replace(/name/, 'width="22" hight="17"');
        else if (s[ind].indexOf("pfeil2r.gif") != -1 )
            str = str.replace(/name/, 'width="9" hight="15"');
        else if (s[ind].indexOf("pfeil2u.gif") != -1 )
            str = str.replace(/name/, 'width="9" hight="15"');
        else if (s[ind].indexOf("pfeil3r.gif") != -1 )
            str = str.replace(/name/, 'width="8" hight="13"');
        else if (s[ind].indexOf("pfeil3u.gif") != -1 )
            str = str.replace(/name/, 'width="8" hight="13"');
    }
    else
    {
        str = '&nbsp;';
    }
    retval = retval.replace(/boebbl/, str);
    // mouseoveraction
    if (s[80] != '' && s[ind] != '' && s[ind+1] != '')
    {
        mostr = s[80];
        mostr = mostr.replace(/which/g, ind);
        retval = retval.replace(/mouseover/,mostr);
    }
    else
    {
        retval = retval.replace(/mouseover/,'');
    }
    // hier wird der link zusammengebaut
    str = '';
    if (m[num][0] == '' && m[num][4]==0)
    {
        str += 'javascript:';
        str += (akt == 1) ? 'c' : 'o';
        str += "m('" + m[num][5] + "')";
    }
    else
    {
        str += (m[num][0]=='') ? m[m[num][4]][5] : m[num][0];
    }
    retval = retval.replace(/linkziel/, str);
    // hier kommt der linkname rein kann noch erweitert werden, um lange sachen speziell umzubrechen
    str = m[num][1];
    retval = retval.replace(/linkname/, str);
    //alert("retval: " + retval);
    // das target fuer externe links setzen
    retval = retval.replace(/actualPosition/, 'onclick=\"om(\'' + m[num][5] + '\')\"');
    // das highlight fuer die zelle und den text
    retval = retval.replace(/zelle/g, (lvl==0)? (akt==0)? 'zellemain':'hlzellemain':(akt==0)? 'zellesub':'hlzellesub' );
    //die pixelgifs anpassen
    // gs: 11.06.03 - Sinn des eval()-Befehls nicht erkennbar
    //eval( 'retval=retval.replace(/pixelgif/g,"' + s[10] + '")');
    // und jetzt noch die colspans..
    if (lvl == 0)
    {
        retval = retval.replace(/colspan1/,'');
        retval = retval.replace(/colspan2/, 'colspan="' + (pxls['mxLvl']) + '"');
        retval = retval.replace(/colspan3/, 'colspan="' + (pxls['mxLvl']+1) + '"');
    }
    else
    {
        retval = retval.replace(/colspan1/,'colspan="'+(m[num][2])+'"');
        retval = retval.replace(/colspan2/,'colspan="'+(pxls['mxLvl']-m[num][2]+1)+'"');
        retval = retval.replace(/colspan3/,'colspan="'+(m[num][2])+'"');
        retval = retval.replace(/colspan4/,'colspan="'+(pxls['mxLvl']-m[num][2]+1)+'"');
    }
    //alert("retval: " + retval);
    return retval;
}
function getmenu(path)
{
    path = String(path).split(',');
    navPath_temp = new Array(0,0,0,0,0,0,0,0,0);
    html = '<table border="0" cellspacing="0" cellpadding="0" bgcolor="#E7E7EF" width="'+pxls['tblWidth']+'" >\n';
    html += '<tr><td class="txtblack11px"><img src="../images/xxx.gif" width="'+pxls['allIndent']+'" height="1"></td>\n\t'; // das macht den gesamtabstand v.l.
    // das ist die level-abhaengige einrueckung
    for (z1=1; z1<pxls['mxLvl']; z1++)
    {
        html += '<td class="gntd"><img src="../images/xxx.gif" width="'+pxls['lvlIndent']+'" height="1"></td>\n\t';
    }
    // das ist die content-spalte
    html += '<td class="gntd"><img src="../images/xxx.gif" width="'+(pxls['tblWidth']-pxls['allIndent']-(pxls['mxLvl']*pxls['lvlIndent']-pxls['lvlIndent']))+'" height="1"></td>\n</tr>\n';
    for (z1=0; z1<m.length; z1++)
    {
        navPath = String(path);
        t2 = String(m[z1][5]);
        activeMenuItemPositionString = String(path);
        activeMenuItemPositionArray = new Array();
        activeMenuItemPositionArray = path;
        menuItemPositionString = String(m[z1][5]);
        menuItemPositionArray = new Array();
        menuItemPositionArray = m[z1][5];
        mainLevel = m[z1][5][0];
        activeMainLevel = path[0];
        level = m[z1][2];
        activeParentLevel = "";
        for(i=0; i<activeMenuItemPositionArray.length-1; i++)
        {
            activeParentLevel += path[i] + ",";
        }
        activeParentLevel = activeParentLevel.substring(0, activeParentLevel.length-1)
        if (activeParentLevel == "")
            activeParentLevel = "0";
        // Hauptebene - wird immer dargestellt
        if (menuItemPositionArray.length == 1)
            html += getline(z1, path);
  // Bedingungen für Navigation ab 2. Ebene
  else
  {
   // Nur Darstellung von Menüpunkten ab und unterhalb des angeklickten Menüpunktes
   //alert("path: " + path + "\nactiveMainLevel: " + activeMainLevel + "\nmainLevel: " + mainLevel);
   if (activeMainLevel == mainLevel)
   {
    // 2. Ebene wird immer dargestellt
    if (menuItemPositionArray.length == 2)
      html += getline(z1, path);
    else
    {
     if (activeParentLevel != '0')
     {
      shortMenuItemPosition = menuItemPositionString.substring(0,menuItemPositionString.lastIndexOf(','));
      if ((activeMenuItemPositionString + ',').match( '^' + shortMenuItemPosition + ','))
       html += getline(z1,path);
     }
    }
   }
  }
    }
    navOBJ[ navOBJ[2] ].write(html+'</table>\n');
    //alert("getmenu().html: " + html);
    html='';
    return true;
}
function om(aktnav)
{
    navOBJ[2] = 1 - navOBJ[2];
    //alert ("om aktnav: " + aktnav);
    foo = getmenu(aktnav);
    showtimer = setTimeout("clearTimeout(showtimer);navOBJ[navOBJ[2]].show();navOBJ[1-navOBJ[2]].hide();",500);
    //navOBJ[navOBJ[2]].show();
    //navOBJ[1-navOBJ[2]].hide();
}
function cm(arg1)
{
    if (arg1.match(','))
    {
        arg1 = arg1.split(',');
        arg1.length--;
    }
    else
    {
        arg1='0';
    }
    om(arg1);
}
/*
    ergänzt den navPath um das letzte level,
    so wird z.B. aus navPath_temp = 0,1,0,0,0,0,0,0,0 und level = 2     0,1,1,0,0,0,0,0,0
    aus 0,1,1,0,0,0,0,0,0 und level = 2 wird 0,1,2,0,0,0,0,0,0
    aus 0,1,2,0,0,0,0,0,0 level = 1 wird 0,2,0,0,0,0,0,0,0
*/
function lvlcnt(navPath_temp, level)
{
    navPath_temp[level]++;
    for (++level; level<navPath_temp.length; level++ )
    {
        navPath_temp[level] = 0;
    }
    return navPath_temp;
}
var nid = "";          //JN Variable soll die jew. nav_id speichern
function init(nav_id)
{
    //alert("init(nav_id) - start");
    nid = nav_id;           // JN TEST
    //alert("init nid: " + nid); // JN TEST 1
    aktnav = new Array();
    //alert("init aktnav: " + aktnav);
    aktnav[0] = 0;
    //alert("init aktnav[0]: " + aktnav[0]);
    navPath_temp = new Array(0,0,0,0,0,0,0,0,0);
    //alert("init navPath_temp: " + navPath_temp);
    //das array initialisieren und die aktive seite herausfinden
    for (z1=0; z1<m.length; z1++)
    {
        // gs: 06.06.03 das parseInt dieser Werte dürfte überflüssig sein
        m[z1][2] = parseInt(m[z1][2]);    // level
        m[z1][3] = parseInt(m[z1][3]);    // sichtbar
        m[z1][4] = parseInt(m[z1][4]);    // defaultseite
        /* gs: 06.06.03: in navPath_temp wird für jeden Menüpunkt die Menüposition gespeichert, z.B. 0,1,2,0,0,0,0,0,0 für den
           zweiten Untermenüpunkt des Hauptmenüpunktes 1, die führende 0 ist überflüssig */
        navPath_temp = lvlcnt(navPath_temp, m[z1][2]);
        if ( m[z1][2] > pxls['mxLvl'])
            pxls['mxLvl'] = m[z1][2];
        navPath = String(navPath_temp);
  // die führende '0,' in navPath_temp ist wohl ein bug und wird mit nachfolgendem Befehl entfernt
  // d.h. navPath ist navPath_temp ohne das führende '0,'
        navPath = navPath.substring(navPath.indexOf(',')+1).split(',');
  // mit 0 belegte Array-Werte am Ende entfernen, so wird z.B. aus 1,2,0,0,0,0,0,0,0 -> 1,2
        navPath.length = m[z1][2];
        if (m[z1][5] == nav_id && nav_id != '')
            aktnav = navPath;
        //alert("init navPath: " + navPath);
  // neuen 6. Array-Wert erzeugen, der den Navigationspfad enthält, z.B. 1,2 oder 1,2,2 ...
        m[z1][5] = navPath;
    }
    //layer initialisieren
    //alert("init aktnav: " + aktnav);
    navOBJ = new Array(new Layer('nav0DIV'), new Layer('nav1DIV'), 0);
    // preload images
    for (z1=40; z1<=57; z1++)
    {
        if (s[z1])
            if (s[z1]!='')
                navimgpre('' + z1, s[z1])
    }
    om(aktnav);
}
function init_n2()            // JN: nur N4
{
    //alert("init_n2:" + nid);
    aktnav = new Array();
    aktnav[0] = 0;
    navPath_temp = new Array(0,0,0,0,0,0,0,0,0);
    //alert("init_n2().navPath_temp: " + navPath_temp);
    //alert("m: " + m + "\nz1: " + z1 );
    //alert("m: " + m);
    //das array initialisieren und die aktive seite herausfinden
    for (z1=0; z1<m.length; z1++)
    {
        // gs: 06.06.03 das parseInt dieser Werte dürfte überflüssig sein
        m[z1][2] = parseInt(m[z1][2]);    // level
        m[z1][3] = parseInt(m[z1][3]);    // sichtbar
        m[z1][4] = parseInt(m[z1][4]);    // defaultseite
        /* gs: 06.06.03: in navPath_temp wird für jeden Menüpunkt die Menüposition gespeichert, z.B. 0,1,2,0,0,0,0,0,0
           für den zweiten Untermenüpunkt des Hauptmenüpunktes 1, die führende 0 ist überflüssig */
        navPath_temp = lvlcnt(navPath_temp, m[z1][2]);
        if ( m[z1][2] > pxls['mxLvl'])
            pxls['mxLvl'] = m[z1][2];
        navPath = String(navPath_temp);
  // die führende '0,' in navPath_temp ist wohl ein bug und wird mit nachfolgendem Befehl entfernt
  // d.h. navPath ist navPath_temp ohne das führende '0,'
        navPath = navPath.substring(navPath.indexOf(',')+1).split(',');
  // mit 0 belegte Array-Werte am Ende entfernen, so wird z.B. aus 1,2,0,0,0,0,0,0,0 -> 1,2
        navPath.length = m[z1][2];
        // gs: 06.06.03 - nicht in Original enthalten, prüfen, ob sinnvoll
        /*
        if (m[z1][5] == nid && nid != '')
            aktnav = navPath;
        */
  // neuen 6. Array-Wert erzeugen, der den Navigationspfad enthält, z.B. 1,2 oder 1,2,2 ...
        m[z1][5] = navPath;
    }
    //layer initialisieren
    navOBJ = new Array(new Layer('nav0DIV'), new Layer('nav1DIV'), 0);
    // preload images
    for (z1=40; z1<=57; z1++)
    {
        if (s[z1])
            if (s[z1] != '')
                navimgpre('' + z1, s[z1])
    }
    //die navigation erzeugen
    om(aktnav);
}
function init_n()      // JN: nur N4, Aufruf via onload im Body-Tag
{
    //alert ("init_n start - nid: " + nid);
    if (document.layers)
    {
        if (nid == '')
        {
            //alert ("init_n - nid: " + nid);
            init_n2();
        }
        else
        {
            //alert ("init_n - nid: " + nid + "\naktnav: " + aktnav);
            init(aktnav);
        }
    }
}
//startvars
var navOBJ; // speichert die 2 nav-layer und als drittes element 0 od 1 fuer den index des sichtbaren navlayers
var showtimer;
var navpimg = new Array();
var pxls = new Array();
var s = new Array();
/////////////////////// ab hier PFLEGEBEREICH ////////////////////
pxls['tblWidth'] = 154; // die breite der tabelle fuer die navigation (149)
pxls['lvlIndent'] = 4; // die einrueckung pro level (8)
pxls['mxLvl'] = 0;  // tiefster level wird automatisch gesetzt!!!!
pxls['allIndent'] = 5; // abstand von links fuer alle (5)
// die strings fuer haupt und unterlevel
s[0]  = '<tr class="menu" mouseover>\n\t';
// s[0]  = '<tr class="zelle"  mouseover>\n\t';
s[0] += '<td valign="top" colspan1 align="right" valign="baseline">boebbl</td>\n\t';
s[0] += '<td colspan2 ><a href="linkziel" class="text" actualPosition>linkname</a></td>\n';
s[0] += '</tr>\n' // <tr><!-- Linie unter Ebene1 menues <td colspan3 class="trenner"><img src="pixelgif" height="1" width="1"></td> --></tr>\n';
s[1]  = '<tr class="menu" mouseover>\n\t';
//s[1]  = '<tr class="zelle" mouseover>\n\t';
s[1] += '<td valign="top" colspan1 align="right" valign="baseline">boebbl</td>\n\t';
s[1] += '<td colspan2><a href="linkziel" class="text" actualPosition>linkname</a></td></tr>\n';
//s[1] += '<tr><td colspan3 class="zelle"><img src="pixelgif" height="1" width="1"></td><td colspan4 class="trenner"><img src="pixelgif"></td></tr>\n';
//src fuer pixelgif
s[10] = '../images/xxx.gif';
//ALLE BOEBBLES ; LEERSTRING WENN KEIN ENTSPRECHENDER VORGESEHEN IST!!!
//imagetag fuer boebbles hauptnav
//s[30] = '<img src height="17" width="27" name>';
s[30] = '<img src name>';
//imagetag fuer boebbles unternav
//s[31] = '<img src height="9" width="9" name>';
s[31] = '<img src name>';
//alert("lade Pfeilnamen");
// Navigationspfeile
s[40] = '../images/navi/pfeil.gif';
s[45] = '../images/navi/pfeil.gif';
s[47] = '../images/navi/pfeilu.gif';
s[50] = '../images/navi/pfeil2r.gif';
s[52] = '../images/navi/pfeil2u.gif';
s[55] = '../images/navi/pfeil3r.gif';
s[57] = '../images/navi/pfeil3u.gif';
//alert("Pfeilnamen geladen");
//mouseoveraction
//s[80] = 'onmouseover=""'; // onmouse(this,which,1)" onmouseout="onmouse(this,which,0)"';
s[80] = '';
