    //Dyn erzeugten Menu
    
    //MenuData, der konstante Code
    //die klasse MenuData.
    function MenuData()
    {
        var n = null;
        this.root       = directory;
        this.imagePath  = n;
        this.imagePath2 = n;
        
        this.width = 0;
        this.indent = 0;
        
        this.headLine = "";
        this.headLinePaddingTop = 0;
        this.headLinePaddingBottom = 0;

        this.cssHeadLineTable = "";        
        this.cssHeadLineCell = "";        
        this.cssOuterTable = "";
        this.cssInnerTable = "";
        this.cssItemTable  = "";
        this.cssItemImage  = "";
        this.cssItemText   = 'cssMenuItemText';
        this.cssLink       = ""
                
        this.menuPaddingTop    = 1;
        this.menuPaddingBottom = 1;
        this.menuPaddingLeft   = 1;
        this.menuPaddingRight  = 1;
        
        this.addItem = MenuData01_addItem;
        this.addAttr = MenuData01_addAttr;
    
        this.itemDatas = new Array();
        this.itemAttrs = new Array();
        
        this.onMouseOverFuncName = n;
        this.onMouseOutFuncName  = n;
        this.onClickFuncName     = n;
        
        this.itemBorderColor      = n;
        this.itemBackGroundColor  = n;
        this.itemDataVarName      = n; //der Name der Variablen auf die zur Laufzeit zugegriffen wird.
        
        this.selectionColor       = null;
        this.selection            = -1;
        
        this.genData  = n;
        this.genAttrs = n;
        
    }
    
    function MenuData01_addItem(sattrId, simage, stext, surl, ssvrurl, nlevel) 
    {

	    var item = new Object();
	    item.attrId = sattrId;
	    item.image = simage;
	    item.text = stext;
	    item.url = surl;
	    item.level = nlevel;
	    if (ssvrurl) 
	        item.url = ssvrurl + surl;

	    return item;
    }

    function MenuData01_addAttr(scssItem, scssImage, scssText, scssLink)
    {

	    var attr = new Object();
	    attr.cssItem  = scssItem;
	    attr.cssImage = scssImage;
	    attr.cssText  = scssText;
	    attr.cssLink  = scssLink;

	    return attr;
    }
    
       
    //Menu-Generierung

    //einige TabConstanten
    var xT  = "  ";
    var xT2 = "    ";
    var xT3 = "      ";
    var xT4 = "        ";
    var xT5 = "          ";
    var xT6 = "            ";
    var xT7 = "              ";
    var xT8 = "                ";
    var xT9 = "                  ";
    var xT10 = "                   ";
    var xT11 = "                     ";
    var xT12 = "                       ";

    //Die Klasse Menu
    //Uebergeben wird ein objekt der Klasse MenuData. Hier sind alle Daten zur Erzeugung des Menus
    //vorhanden. Aus diesen Daten wird hier das Menu erzeugt.
    function Menu(menuData)
    {
        this.menuData = menuData;
        this.gen = Menu01_genMenu;
        this.genHeadLine = Menu01_genHeadLine;
        this.genOuterTable = Menu01_genOuterTable;
        this.genInnerTable = Menu01_genInnerTable;
        this.genMenuRows   = Menu01_genMenuRows;
        this.genMenuRow    = Menu01_genMenuRow;
        this.genIndentTds  = Menu01_genIndentTds;
        this.genImageTd    = Menu01_genImageTd;
        this.genTextTd     = Menu01_genTextTd;
        this.genHyperLink  = Menu01_genHyperLink;
    }

    //Start-Methode zur Generierung des Menus        
    function Menu01_genMenu(bDoWrite)
    {
        var d  = this.menuData;
        
        var ms = this.genHeadLine(d);
        ms += this.genOuterTable(d);
        
        if(bDoWrite)
        {
            document.write(ms);
        }
        else
            return ms;
        
        ms = '';
        
        return 0;
    }
    
    function Menu01_genHeadLine(d)
    {
    
        var ms = "";  
        
        ms += xT + '<table border="0" cellspacing="0" cellpadding="0" width="100%"';   //start HeadLine-Table
        
        if(d.cssHeadLineTable.length != 0)
            ms += ' class="' + d.cssHeadLineTable + '"';
        ms +=  '>\n';

        //row obendrueber als abstand
        if(d.headLinePaddingTop != 0)
        {

            ms += xT2 + '<tr>\n';                                              
            ms += xT3 + '<td'; 
            
            ms += ' height="' + d.headLinePaddingTop + '"';
                    
            ms += '>';                                             

            ms += '<img src="' + d.imagePath  +'trPt.gif" width="1" height="' + d.headLinePaddingTop  +'">';
           
            ms += '</td>\n';                                                
            
            ms += xT2 + '</tr>\n';                                           
        }

        //row mit Inhalt
        ms += xT2 + '<tr>\n';                                              
                
        ms += xT3 + '<td'; 
        
        if(d.cssHeadLineCell.length != 0)
            ms += ' class="' + d.cssHeadLineCell + '"';
                
        ms += '>';                                             
        ms += d.headLine;
        ms += '</td>\n';                                                
        
        ms += xT2 + '</tr>\n';                                             
        
        
        //row unten drunter als abstand
                
        if(d.headLinePaddingBottom != 0)
        {
            ms += xT2 + '<tr>\n';                                              
            ms += xT3 + '<td'; 
            
            ms += ' height="' + d.headLinePaddingBottom + '"';
                    
            ms += '>';                                             

            ms += '<img src="' + d.imagePath  +'trPt.gif" width="1" height="' + d.headLinePaddingBottom  +'">';
           
            ms += '</td>\n';                                                
            
            ms += xT2 + '</tr>\n';                                           
        }
        
        
        ms += xT + '</table>\n';                                           
        

        
        return ms;
    }

    //erzeugen der aeusseren Table des Menus      
    function Menu01_genOuterTable(d)
    {
        var ms = "";  
        
        ms += xT + '<table border="0" cellspacing="0" cellpadding="0"';   //start aessere Table
        
        if(d.width != 0)
            ms += ' width="' + d.width + '"';
            
        if(d.cssOuterTable.length != 0)
            ms += ' class="' + d.cssOuterTable + '"';
                  
        ms +=  '>\n';
                       
        ms += xT2 + '<tr>\n';                                              //start, die Row in der outer Table, die Daten haelt
                
        ms += xT3 + '<td>';                                             //start din der outer Table, kein cr, wegen ie-fehler
        ms += this.genInnerTable(d);                                           //erzeugen der inneren Table
        ms += '</td>\n';                                                //ende der einen Zelle in der outer Table
        
        ms += xT2 + '</tr>\n';                                             //ende , der einen row in der outer Table
        
        ms += xT + '</table>\n';                                           //end aeussere Table

        
        return ms;
    }

    //erzeugen der inneren Table des menus
    function Menu01_genInnerTable(d)
    {
        var ms = "";        

        ms += '<table border="0" cellspacing="0" cellpadding="0" width="100%"';   //start innere Table
        
        if(d.cssInnerTable.length != 0)
            ms += ' class="' + d.cssInnerTable + '"';
        ms +=  '>\n';

        //row fuer oberen Rand
        ms += xT5 + '<tr>\n';
        ms += xT6 + '<td columnspan="3" width="1" height="' 
                       + d.menuPaddingTop +'"><img src="' + d.imagePath  +'trPt.gif" width="1" height="' + d.menuPaddingTop  +'" ></td>\n';
                       
        ms += xT5 + '</tr>\n';
        
        ms += this.genMenuRows(d);

        //row fuer unteren Rand
        ms += xT5 + '<tr>\n';
        ms += xT6 + '<td columnspan="3" width="1" height="' 
                       + d.menuPaddingBottom +'"><img src="' + d.imagePath  +'trPt.gif" width="1" height="' + d.menuPaddingBottom  +'" ></td>\n';
        ms += xT5 + '</tr>\n';
        
        
        
        ms += xT4 + '</table>';                                           //end innere Table ende
    
        return ms;
    }

    //hier werden alle MenuRows erzeugt
    function Menu01_genMenuRows(d)
    {
        var ms = "";
        
        for(i = 0; i < d.itemDatas.length; i++)
        {
            ms += xT5 + '<tr>\n';                       //start row
            
            //linke rand-zelle
            ms += xT6 + '<td height="1" width="' + d.menuPaddingLeft +'"><img src="' + d.imagePath  +'trPt.gif" height="1" width="' + d.menuPaddingLeft  +'" ></td>\n';
  
            var itemBkColor = -1; //wir im allg. fuer mouseOut nicht gebraucht
            
            if(d.selection != -1 && d.selection == i)
                itemBkColor = d.selectionColor;
            
            
            //hauptzelle der Zeile, mit den eventHandlern.
            var mover  = ' onMouseOver="javascript:' + d.onMouseOverFuncName +  '(this,\'' + d.itemBackGroundColor + '\',\'' + d.itemBorderColor + '\'); return true"';
            var mout   = ' onMouseOut="javascript:' + d.onMouseOutFuncName +  '(this,\'' + itemBkColor + '\',\'' + d.itemBorderColor + '\'); return true"';
            var mclk   = ' onClick="javascript:' + d.onClickFuncName +  '(' + i + "," + d.itemDataVarName + '); return true"';
     
            if(isIE())  //IE kann keine transparent Rahmen, daher hier padding
            {
                var style   = ' style="padding-right:1px; padding-left:1px; padding-bottom:1px; padding-top:1px';
                
                //wenn selectedIndex, dann SelectedColor setzen
                if(d.selection != -1 && d.selection == i)
                    style += '; background-color:' + d.selectionColor + '"';
                else
                    style += '"';
                
                
                ms += xT6 + '<td' + mover + mout + mclk + style + '>';
            }
            else //NS
            {
                //wenn selectedIndex, dann SelectedColor setzen
                if(d.selection != -1 && d.selection == i)
                {
                    var style   = ' style="background-color:' + d.selectionColor + '"';
                    ms += xT6 + '<td' + mover + mout + mclk + style + '>';

                }
                else
                    ms += xT6 + '<td' + mover + mout + mclk + '>';
            }
            
            
            ms += this.genMenuRow(d, i);
            ms += '</td>\n';
            
  
            //rechte rand-zelle
            ms += xT6 + '<td height="1" width="' + d.menuPaddingRight +'"><img src="' + d.imagePath  +'trPt.gif" height="1" width="' + d.menuPaddingRight  +'" ></td>\n';

            ms += xT5 + '</tr>\n';                     //end row
        }
        return ms;
    }
    
    //erzeugen einer einzelnen MenuRow
    function Menu01_genMenuRow(d, ind)
    {
        var ms = "";
        
            ms += '<div';          //umschliessendes div start

            if(!isIE())  //NS,  IE kann keine transparent Rahmen, aber NS, wenn NS hier transparenten Rahmen
            {
                var style     = ' style="border:solid 1px transparent"';

                ms += style;
            }
            //IE nichts
                        
            ms += '>\n';           

            ms += xT8 + '<table border="0" cellspacing="0" cellpadding="0" width="100%"';   //start item-Table
            
            
            var cssItem = d.cssItemTable;
            
            var attrId = d.itemDatas[ind].attrId;
            
            if(attrId.length != 0)
            {
                if(d.itemAttrs[attrId].cssItem.length != 0)
                    cssItem = d.itemAttrs[attrId].cssItem;

            }
            if(cssItem.length != 0)
                ms += ' class="' + cssItem + '"';
            
            ms +=  '>\n';

            ms += xT9  + '<tr>\n';
            ms += this.genIndentTds(d, ind);
            ms += this.genImageTd(d, ind);
            ms += this.genTextTd(d, ind);
            ms += xT9  +'</tr>\n';

            ms += xT8 + '</table>';                                           //end item Table ende

            ms += xT6 + '</div>';          //umschliessendes div end
            
        return ms;
    }
    
    //erzeugen der linken zelle im menuitem, als indent
    function Menu01_genIndentTds(d, ind)
    {
        var ms = "";
        
        //ueber leere Zelle eine Indent erzeugen height = 5, mind. hoehe, ist aber im allg erzwungen hoeher
        var level = d.itemDatas[ind].level;
        var dist  = level * d.indent;
        if(dist == 0)
            dist = 1;  //mind. 1 pixel
        ms += xT10 + '<td height="5" width="' + dist + '"><img src="' + d.imagePath  +'trPt.gif" height="5" width="' + dist  + '"></td>\n';

        return ms;
    }
    
    //erzeugen der Imagezelle
    function Menu01_genImageTd(d, ind)
    {
        var ms = "";
        var img = d.itemDatas[ind].image;
        ms += xT10 + '<td width="5" align="left" valign="top"';
        
        var attrId = d.itemDatas[ind].attrId;

        var cssImage = d.cssItemImage;
        
        if(attrId.length != 0)
        {
            if(d.itemAttrs[attrId].cssImage.length != 0)
                cssImage = d.itemAttrs[attrId].cssImage;

        }
            if(cssImage.length != 0)
                ms += ' class="' + cssImage + '"';
        
        
        ms += '><img src="' + d.imagePath2 + img + '"></td>\n';
        return ms;
    }
    
    //erzeugen der Textzelle
    function Menu01_genTextTd(d, ind)
    {
        var ms = "";
        var text = d.itemDatas[ind].text;
        ms += xT10 + '<td align="left" valign="top"';
        
        var attrId = d.itemDatas[ind].attrId;
        
        var cssText = d.cssItemText;
                
        if(attrId.length != 0)
        {
            if(d.itemAttrs[attrId].cssText.length != 0)
                cssText = d.itemAttrs[attrId].cssText;
        }

        if(cssText.length != 0)
                ms += ' class="' + cssText + '"';
        
        ms += '>' + this.genHyperLink(d, ind) + '</td>\n';
        return ms;
    }

    //erzeugen des Hyperlinks in der Textzelle
    function Menu01_genHyperLink(d, ind)
    {
        var ms = "";
        var text = d.itemDatas[ind].text;
        var lnk  = "javascript:" + d.onClickFuncName + "(" + ind + "," + d.itemDataVarName + ")";
        ms += '<a href="' + lnk + '"';

        var cssLink = "";        
        
        //wenn fuer alle links css vorhanden, dann setzen
        if(d.cssLink.length != 0)
            cssLink = d.cssLink;
            
        //wenn fuer indiv. item cssLink vorhanden ist, dann dieses nehmen            
        var attrId = d.itemDatas[ind].attrId;
        
        if(attrId.length != 0 && d.itemAttrs[attrId].cssLink.length != 0)
        {
            cssLink = d.itemAttrs[attrId].cssLink;
        }
                    
        if(cssLink.length != 0)
            ms += ' class="' + cssLink + '"';
        
        ms += '>' + text + '</a>';
        return ms;
    }


