  /*
  ************************************************************
    baum.js
    (c) 2007 xaran.de - Alle Rechte vorbehalten
    erstellt:    Januar 2007
    modifiziert: 20.09.2007
  ************************************************************
  */


      function knoten(id, selbstreferenz, text, url)
      {
        this.id = id;
        this.selbstreferenz = selbstreferenz;
        this.text = text;
        this.url = url;
        this.status = false;
        this.hatkinder = false;
        this.istselektiert = false;
        this.istzwilling = false;
        this.istletzterzwilling = false;
        return this;
      }



      function baum(instanz)
      {
        this.symbol = { symbol_plus       : 'rubrikgrafiken/rubrik_14_01.png',
                        symbol_minus      : 'rubrikgrafiken/rubrik_14_02.png',
                        symbol_plusunten  : 'rubrikgrafiken/rubrik_14_03.png',
                        symbol_minusunten : 'rubrikgrafiken/rubrik_14_04.png',
                        symbol_linie      : 'rubrikgrafiken/rubrik_14_05.png',
                        symbol_liniemitte : 'rubrikgrafiken/rubrik_14_06.png',
                        symbol_linieunten : 'rubrikgrafiken/rubrik_14_07.png',
                        symbol_leer       : 'rubrikgrafiken/rubrik_14_08.png',
                        symbol_ordnerauf  : 'rubrikgrafiken/rubrik_14_09.png',
                        symbol_ordnerzu   : 'rubrikgrafiken/rubrik_14_10.png'}

        this.konfiguration = { verwende_cookies         : true,
                               verwende_symbole         : true,
                               verwende_statustext      : true,
                               verwende_highlight       : false,
                               verwende_adminwerkzeuge  : false,
                               verwende_ordnerlinks     : true}
        this.instanz = instanz;
        this.alle = [];
        this.einzug = [];

        this.zweig = function(id, selbstreferenz, text, url)
        {
          this.alle[this.alle.length] = new knoten(id, selbstreferenz, text, url);
        }



        this.knoten_rekursiv = function(vid)
        {
          var html = '';
          for(var i=0;i<this.alle.length;i++)
          {
            if(this.alle[i].selbstreferenz == vid)
            {
              var k = this.alle[i];

              var tmpid;
              for(var kk=0;kk<this.alle.length;kk++)
              {
                if(this.alle[kk].selbstreferenz == k.id) k.hatkinder = true;
                if(this.alle[kk].selbstreferenz == k.selbstreferenz) tmpid = this.alle[kk].id;
              }
              if(tmpid == k.id) k.istletzterzwilling = true;

              if(k.hatkinder && !k.status && this.konfiguration.verwende_cookies) k.status = this.ist_offen(k.id);
              if(!this.konfiguration.verwende_ordnerlinks && k.hatkinder) k.url = null;
              if(this.konfiguration.verwende_highlight) k.istselektiert = this.ist_selektiert(k.id);
              html+= this.knoten_html(k, i);
              if(k.istletzterzwilling) break;
            }
          }
          return html;
        }



        this.knoten_html = function(knoten, knoten_id)
        {
          var html = '<div class="baum">' + this.einrueckung(knoten, knoten_id);
          if(this.konfiguration.verwende_symbole)
          {
            if(!knoten.symbol_zu)  knoten.symbol_zu  = this.symbol.symbol_ordnerzu;
            if(!knoten.symbol_auf) knoten.symbol_auf = this.symbol.symbol_ordnerauf;
            html+= '<img id="symbol_' + this.instanz + knoten_id + '" src="' + ((knoten.istselektiert) ? knoten.symbol_auf : knoten.symbol_zu) + '">';
          }
          if(knoten.url)
          {
            html+= '<a class="knoten" href="' + knoten.url + '"';
            if(this.konfiguration.verwende_statustext)
            {
              html+= ' onmouseover="window.status=\'' + knoten.text + '\';return true;"';
              html+= ' onmouseout="window.status=\'\';return true;"';
            }
            html+= ' onclick="javascript:' + this.instanz + '.selektieren(' + knoten_id + ');">';
            html+= knoten.text;   //  html+= '[this.einzug:' + this.einzug + ']';
            html+= '</a>';
          }
          else
          {
            if((!this.konfiguration.verwende_ordnerlinks || !knoten.url) && knoten.hatkinder)
            {
              html+= '<a class="knoten" href="javascript:' + this.instanz + '.klappen(' + knoten_id + ');">';
              html+= knoten.text;   //  html+= '[this.einzug:' + this.einzug + ']';
              html+= '</a>';
            }
            else
            {
              html+= knoten.text;   //  html+= '[this.einzug:' + this.einzug + ']';
            }
          }
          if(this.konfiguration.verwende_adminwerkzeuge)
          {
            html+= '<a href="javascript:rubrik_loeschen('+knoten.id+')"><img src="grafiken/befehl_loeschen.png"></a>';
            html+= '<a href="admin_rubrik.php?aktion=neu&id='+knoten.id+'"><img src="grafiken/befehl_plus.png"></a>';

            html+= '<a href="admin_rubrik.php?aktion=verschieben&wohin=nachoben&id='+knoten.id+'"><img src="grafiken/befehl_pfeilnachoben.png"></a>';
            html+= '<a href="admin_rubrik.php?aktion=verschieben&wohin=nachunten&id='+knoten.id+'"><img src="grafiken/befehl_pfeilnachunten.png"></a>';

          }


  //        if(knoten.url || ((!this.konfiguration.verwende_ordnerlinks || !knoten.url) && knoten.hatkinder))
          html+= '</div>\n';
          if(knoten.hatkinder)
          {
            html+= '<div id="d' + this.instanz + knoten_id + '"  style="display:' + ((knoten.status) ? 'block' : 'none') + ';">';
            html+= this.knoten_rekursiv(knoten.id);
            html+= '</div>\n';
          }
          this.einzug.pop();
          return html;
        }



        this.toString = function()  // Überladen der Standard toString- Funktion, siehe http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object:toString
        {
          var html = '<div class="baum">\n' + this.knoten_rekursiv(0) + '</div>\n';
          return html;
        }



        this.einrueckung = function(knoten, knoten_id)
        {
          var html = '';
          for(var i=0;i<this.einzug.length;i++)
          {
            html+= '<img src="' + ((this.einzug[i] == 1) ? this.symbol.symbol_linie : this.symbol.symbol_leer) + '">';
          }
          (knoten.istletzterzwilling) ? this.einzug.push(0) : this.einzug.push(1);

          if(knoten.hatkinder)
          {
            html+= '<a href="javascript:' + this.instanz + '.klappen(' + knoten_id + ');"><img id="j' + this.instanz + knoten_id + '" src="';
            html+= ((knoten.status) ? ((knoten.istletzterzwilling) ? this.symbol.symbol_minusunten : this.symbol.symbol_minus) : ((knoten.istletzterzwilling) ? this.symbol.symbol_plusunten : this.symbol.symbol_plus ));
            html+= '"></a>';
          }
          else
          {
            html+= '<img src="' + ((knoten.istletzterzwilling) ? this.symbol.symbol_linieunten : this.symbol.symbol_liniemitte) + '">';
          }
          return html;
        }



        this.klappen = function(id)
        {
          var k = this.alle[id];
          this.knoten_einausblenden(!k.status, id, k.istletzterzwilling);
          k.status = !k.status;
          if(this.konfiguration.verwende_cookies) this.aktualisiere_cookie();
        }



        this.selektieren = function(id)
        {
          for(var i=0;i<this.alle.length;i++)
          {
            element = document.getElementById('symbol_' + this.instanz + i);
            element.src = this.alle[i].symbol_zu;
            this.alle[i].istselektiert = false;
          }
          element = document.getElementById('symbol_' + this.instanz + id);
          element.src = this.alle[id].symbol_auf;
          this.alle[id].istselektiert = true;
          if(this.konfiguration.verwende_cookies) this.aktualisiere_cookie();
        }



        this.knoten_einausblenden = function(status, id, unten)
        {
          element = document.getElementById('j' + this.instanz + id);
          element.src = ((status) ? ((unten) ? this.symbol.symbol_minusunten : this.symbol.symbol_minus) : ((unten) ? this.symbol.symbol_plusunten : this.symbol.symbol_plus));
          element = document.getElementById('d' + this.instanz + id);
          element.style.display = (status) ? 'block':'none';
        }



        this.alleauf = function() { this.alles(true);  }
        this.allezu  = function() { this.alles(false); }
        this.alles = function(status)
        {
          for(var i=0;i<this.alle.length;i++)
          {
            if(this.alle[i].hatkinder)
            {
              this.knoten_einausblenden(status, i, this.alle[i].istletzterzwilling);
              this.alle[i].status = status;
            }
          }
          if(this.konfiguration.verwende_cookies) this.aktualisiere_cookie();
        }



        this.setze_cookie = function(schluessel, wert, verfallsdatum)
        {
          var tmp = '';
          tmp+= escape(schluessel) + '=' + escape(wert)
          tmp+= (verfallsdatum ? '; expires=' + verfallsdatum.toGMTString() : '')
          document.cookie = tmp;
        }



        this.lese_cookie = function(schluessel)
        {
          var wert = '';
          var pos = document.cookie.indexOf(escape(schluessel) + '=');
          if(pos != -1)
          {
            var pos_a = pos + (escape(schluessel) + '=').length;
            var pos_e = document.cookie.indexOf(';', pos_a);
            if(pos_e != -1)
            {
              wert = unescape(document.cookie.substring(pos_a, pos_e));
            }
            else
            {
              wert = unescape(document.cookie.substring(pos_a));
            }
          }
          return (wert);
        }



        this.aktualisiere_cookie = function()
        {
          var tmp1 = '';
          var tmp2 = '';
          for(var i=0;i<this.alle.length;i++)
          {
            if(this.alle[i].status)
            {
              if(tmp1) tmp1+= '_';
              tmp1+= this.alle[i].id;
            }
            if(this.alle[i].istselektiert)
            {
              if(tmp2) tmp2+= '_';
              tmp2+= this.alle[i].id;
            }
          }
          this.setze_cookie('baum_' + this.instanz + '_offen', tmp1);
          this.setze_cookie('baum_' + this.instanz + '_selektiert', tmp2);
        }



        this.ist_offen = function(id)
        {
          var tmp = this.lese_cookie('baum_' + this.instanz + '_offen').split('_');
          for(var i=0;i<tmp.length;i++)
          {
            if(tmp[i] == id) return true;
          }
          return false;
        }



        this.ist_selektiert = function(id)
        {
          var tmp = this.lese_cookie('baum_' + this.instanz + '_selektiert').split('_');
          for(var i=0;i<tmp.length;i++)
          {
            if(tmp[i] == id) return true;
          }
          return false;
        }


     }
