/*
  *
  *20.11.2001
  * Modifikationen für Posaunenwerk W. Becker
  *
   * sitemap.js 1.31 05/02/2000
   *  - Opera 5
   *
   * sitemap.js 1.3 27/11/2000
   *  - Netscape 6
   *
   * sitemap.js 1.2 20/05/2000
   *  - split array tree into arrays for each element old tree
   *  - no mory type flag, an folder is an entry which has sons
   *  - a folder can have an link
   *  - while initing an default layers is shown 
   *
   * sitemap.js 1.1 20/10/1999
   *  - showTree only updates and init layers new which have been really changed
   *  - add deep to knot entry
   *  - substitute knotDeep[ id ] w/ tree[ id2treeIndex[ id ] ].deep
   *  - add alignment to img and a &nbsp; at the beginning of eyery line
   *  - add a fake img for bookmarks on top panel
   *
   * sitemap.js 1.02 14/10/1999
   *  - fix bug in initStyles
   *
   * sitemap.js 1.01 06/10/1999
   *  - fix bug in knotDeep for Netscape 4.00-4.0.5
   *
   * sitemap.js 1.0 20/09/1999
   *
   * Javascript function for displaying hierarchic directory structures with
   * the ability to collapse and expand directories.
   *
   * Copyright (c) 1999 Polzin GmbH, Duesseldorf. All Rights Reserved.
   * Author: Lutz Eymers <ixtab@polzin.com>
   * Download: http://www.polzin.com/inet/fset_inet.phtml?w=goodies
   *
   * Permission to use, copy, modify, and distribute this software
   * and its documentation for any purposes and without fee
   * is hereby granted provided that this copyright notice
   * appears in all copies. 
   *
   * Of course, this software is provided "as is" without express or implied
   * warranty of any kind.
   *
   */

  window.onError=null;

  var idx=0
  var treeId = new Array();
  var treeP_id = new Array();
  var treeIsOn = new Array();
  var treeTyp = new Array();
  var treeName = new Array();
  var treeUrl = new Array();
  var treeWasOn = new Array();
  var treeDeep = new Array();
  var treeLastY = new Array();
  var treeIsShown = new Array();

  function Note( id,p_id,name,url ) {
    treeId[ idx ] = id
    treeP_id[ idx ] = p_id
    treeIsOn[ idx ] = false
    treeTyp[ idx ] = 'f'
    treeName[ idx ] = name
    treeUrl[ idx ] = url 
    treeWasOn[ idx ] = false
    treeDeep[ idx ] = 0
    treeLastY[ idx ] = 0
    treeIsShown[ idx ] = false
    idx++
  }

  function initDiv ( )
  {
         if ( w3dom || ie4||ie5 )
       {
      divPrefix='<DIV CLASS="sitemap" style="position:absolute; text-decoration:none;  color:#4444aa; FONT-FAMILY:  Helvetica, Arial, Verdana,  sans-serif;  FONT-SIZE: 12px;   z-index:20; left:'+x0+'px; top:0; visibility:hidden;" ID="sitemap'
      divInfo='<DIV CLASS="sitemap" style="position:absolute; visibility:visible; left:'+x0+'px; top:0;" ID="sitemap'
         }
       else
       {
        divPrefix='<DIV CLASS="sitemap" ID="sitemap'
      divInfo='<DIV CLASS="sitemap" ID="sitemap'
      }
    document.writeln( divInfo +  'info">Bitte haben Sie etwas Geduld.<BR>&nbsp;<BR>Es werden die Eintr&auml;ge aus<BR>&nbsp;<BR>der Datenbank initialisiert.</DIV> ' );

    for ( var i=1; i<idx; i++ )
    {                                                                           
      // linked Name ? 
      if ( treeUrl[i] != '' )
        
        linkedName = '<A HREF="' + treeUrl[i] + '" > ' + treeName[i] + '</A>'
      else
        linkedName =  '<IMG SRC="img/1w.gif" BORDER="0" WIDTH="1">' + treeName[i]
      // don't link folder icon if node has no sons
      if ( i == idx-1 || treeP_id[i+1] != treeId[i] ) {
        if ( treeDeep[ i ] == 0 )
          folderImg = '<IMG ALIGN="center" SRC="img/file_empty.gif" BORDER="0" HEIGHT="16" WIDTH="1" HSPACE="0">'
        else
          folderImg = ''
      } else {
        folderImg = '<A HREF="javascript:sitemapClick(' + treeId[i] + ')"><IMG ALIGN="center" SRC="img/folder_off.gif" BORDER="0" NAME="folder' + treeId[i] + '" HEIGHT="24" WIDTH="16" HSPACE="0"></A>'
      }
      // which type of file icon should be displayed?
      if ( treeP_id[i] != 0 )
      {
        if ( lastEntryInFolder( treeId[i] ) )
          fileImg = '<IMG ALIGN="center" SRC="img/file_last.gif" BORDER="0" NAME="file'
            + treeId[i] + '" HEIGHT="24" WIDTH="22" HSPACE="0">'  
        else    
          fileImg = '<IMG ALIGN="center" SRC="img/file.gif" BORDER="0" NAME="file'
            + treeId[i] + '" HEIGHT="24" WIDTH="22" HSPACE="0">'  
      }
      else
        fileImg = ''
      // traverse parents up to root and show vertical lines if parent 
      // is not the last entry on this layer
      verticales = ''
      for( var act_id=treeId[i] ; treeDeep[ id2treeIndex[ act_id ] ] > 1;  )
      {  
        act_id = treeP_id[ id2treeIndex[ act_id ]]
        if ( lastEntryInFolder( act_id ) )
        {
          verticales = '<IMG ALIGN="center" SRC="img/file_empty.gif" BORDER="0" HEIGHT="24" WIDTH="22" HSPACE="0">' + verticales
        }
        else
        {
          verticales = '<IMG ALIGN="center" SRC="img/file_vert.gif" BORDER="0" HEIGHT="24" WIDTH="22" HSPACE="0">' + verticales
        }
      }

    


      document.writeln( divPrefix + treeId[i] + '"><NOBR>&nbsp;' + verticales + fileImg + folderImg + linkedName + '</NOBR></DIV><BR>'
      )  
    }
  }

  function initStyles ( )
  {
    document.writeln( '<STYLE TYPE="text/css">' + "\n" + '<!--' )
    for ( var i=1,y=y0; i<idx; i++ )
    {  
      document.writeln( '#sitemap' + treeId[i] + ' {POSITION: absolute;   VISIBILITY: hidden; LEFT: '+x0+'px}' )
      if ( treeIsOn[ id2treeIndex[ treeP_id[i] ] ] )
        y +=y0;
    }
    document.writeln( '#sitemapinfo {POSITION: absolute; VISIBILITY: visible; LEFT: '+x0+'px; TOP: '+y0+'px}' )
    document.writeln( '//-->' + "\n" + '</STYLE>' )
  }



  function sitemapClick( id )
  {
    var i = id2treeIndex[ id ]

    if ( treeIsOn[ i ] )
    // close directory
    {
      // mark node as invisible
      treeIsOn[ i ]=false
      // mark all sons as invisible
      actDeep = treeDeep[ i ]
      for( var j=i+1; j<idx && treeDeep[j] > actDeep; j++ )
      {
        treeWasOn[ j ] = treeIsOn[ j ]
        treeIsOn[ j ]=false
      }
      gif_off( id )
    }
    else
    // open directory
    { 
      treeIsOn[ i ]=true
      // remember and restore old status
      actDeep = treeDeep[ i ]
      for( var j=i+1; j<idx && treeDeep[j] > actDeep; j++ )
      {
        treeIsOn[ j ] = treeWasOn[ j ]
      }
      gif_on( id )
    }
    showTree()
  }

  function knotDeep( id )
  {
    var deep=0
    while ( true )
      if ( treeP_id[ id2treeIndex[id] ] == 0 )
        return deep
      else
      {
        ++deep
        id = treeP_id[ id2treeIndex[id] ]
      }
    return deep  
  }

  function initTree( id )
  {
    treeIsOn[ id2treeIndex[id] ] = true
    if ( treeTyp[ id2treeIndex[id] ] != 'b' )
      gif_on( id ) 
    while ( treeP_id[ id2treeIndex[id] ] != 0 )
    {
      id = treeP_id[ id2treeIndex[id] ]
      treeIsOn[ id2treeIndex[id] ] = true
      if ( treeTyp[ id2treeIndex[id] ] != 'b' )
        gif_on( id ) 
    }
  }

  function lastEntryInFolder( id )
  {
    var i = id2treeIndex[id]
    if ( i == idx-1 )
      return true
    if ( treeTyp[i] == 'b' )
    {
      if ( treeP_id[i+1] != treeP_id[i] )
        return true
      else 
        return false
    }
    else
    {
      var actDeep = treeDeep[i]
      for( var j=i+1; j<idx && treeDeep[j] > actDeep ; j++ )
      ;
      if ( j<idx && treeDeep[j] == actDeep )
        return false
      else
        return true
    }
  }

  function showTree()
  {
    for( var i=1, y=y0, x=x0; i<idx; i++ )
    {
      if ( treeIsOn[ id2treeIndex[ treeP_id[i] ] ] )
      {
        // show current node
        if ( !(y == treeLastY[i] && treeIsShown[i] ) )
        {
          showLayer( "sitemap"+ treeId[i] ) 
          setyLayer( "sitemap"+ treeId[i], y )
          treeIsShown[i] = true
        } 
        treeLastY[i] = y
        y += deltaY
      }
      else
      {
        // hide current node and all sons
        if ( treeIsShown[ i ] )
        {
          hideLayer( "sitemap"+ treeId[i] ) 
          treeIsShown[i] = false
        }
      }
    }
  }

  function initIndex() {
    for( var i=0; i<idx; i++ )
      id2treeIndex[ treeId[i] ] = i
  }

  function gif_name (name, width, height) {
    this.on = new Image (width, height);
    this.on.src ="img/"+ name + "_on.gif"
    this.off = new Image (width, height);
    this.off.src ="img/"+name + "_off.gif"
  }

  function load_gif (name, width, height) {
    gif_name [name] = new gif_name (name,width,height);
  }

  function load_all () {
    load_gif ('folder',16,16)
    file_last = new Image(22,24 )
    file_last.src = "img/file_last.gif"
    file_middle = new Image( 22,24 )
    file_middle.src = "img/file.gif"
    file_vert = new Image(22,24 )
    file_vert.src = "img/file_vert.gif"
    file_empty = new Image(22,24 )
    file_empty = "img/file_empty.gif"
  }

  function gif_on ( id ) {
    eval("document['folder" + id + "'].src = gif_name['folder'].on.src")
  }

  function gif_off ( id ) {
    eval("document['folder" + id + "'].src = gif_name['folder'].off.src")
  }