function schiebenavigation(klasse){
  var navebenen;
  var bewegungsintervall = false;
  var startpositionstimeout = false;
  var DOM2=document.getElementById;
  
  this.posx = 10; //linke Kante der Navigation
  this.posy = 10; //obere Kante der Navigation
  this.begrenzung = 11; //maximale Bewegungsdistanz pro Zeitintervall
  this.schrittabstand = 30; //Zeit zwischen den einzelnen Bewegungen (Millisekunden)
  this.zieltoleranz = 5; //Toleranzbereich für das Erkennen der erreichten Zielposition
  this.idbez = klasse; //Bezeichnung der Tag-IDs
  this.css = "schiebenav"; //Bezeichnung der CSS-Klasse
  this.vorgabeerhalt = true; //true: vorausgewählte Aktiv-Markierung bei Interaktion beibehalten; false: Markierung bei Interaktion verwerfen
  this.display = true; //true: Sichtbarkeit mittels "display" steuern, false: mittels "visibility"
  this.blockpos = true; //true: Ausrichtungspunkt für Ebenenpositionierung ist das übergeordnete Blockelement, false: der Seitenrand
  this.einblenden = true; //true: Transparenzeffekt beim Bewegen der Ebenen
  this.startposverzoegerung = 500; //Zeit die vergeht, bis das Menü nach dem Verlassen wieder die Startposition einnimmt (Millisekunden)
  
  
  
  //Navigationseintrag angeklickt
  this.auswahl=function(ausw){
    this.startposition_verzoegert(1);
    
    if (!bewegungsintervall)
      bewegungsintervall = window.setInterval(klasse+".bewegen()", this.schrittabstand);
    
    this.zuruecksetzen();
    
    if (!objekt(ausw))
      return;
    
    var tiefe = ausw.split("_");
    var navid = this.idbez;
    var naveid = this.idbez+"_e";
    
    for (var i=0; i<tiefe.length; i++){
      if (i < 1)
        continue;
      
      navid = navid + "_" + tiefe[i];
      naveid = naveid + "_" + tiefe[i];
      objekt(naveid).className = this.css+"_link tmpaktiv umenue";
      objekt(navid).bewegen = "ziel";
    }
    
  }  //Ende function auswaehlen
  
  
  
  //Alle Elemente zurücksetzen
  this.zuruecksetzen=function(){
    //Ebenen
    for(var i=0; i<navebenen.length; i++){
      navebenen[i].bewegen = "start";
    }
    
    //Links
    var links = document.getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
      var suche = new RegExp(this.css+"_link", "g");
      if (suche.test(links[i].className)){
        if (this.vorgabeerhalt)
          links[i].className = links[i].org_css;
        else {
          var msuche = new RegExp("umenue", "g");
          if (msuche.test(links[i].org_css))
            links[i].className = this.css+"_link umenue";
          else
            links[i].className = this.css+"_link";
        }
      }
    }
  }  //Ende function zuruecksetzen
  
  
  
  //Alle Elemente in Startposition bringen
  this.startposition=function(){
    //alle Ebenen zurücksetzen
    this.zuruecksetzen();
    
    //Links nach Aktiv-Markierung durchsuchen und entsprechende Ebenen einblenden
    var links = document.getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
      //nach aktiven Links suchen und Ebene zur Einblendung kennzeichnen
      var suche = new RegExp(this.css+"_link aktiv umenue", "g");
      if (suche.test(links[i].className)){
        aktid = links[i].id.split("_e_", 2);
        objekt(this.idbez+"_"+aktid[1]).bewegen = "ziel";
      }
    }
    
    if (!bewegungsintervall)
      bewegungsintervall = window.setInterval(klasse+".bewegen()", this.schrittabstand);
  }  //Ende function startposition
  
  
  
  //Alle Elemente mit Zeitverzögerung in Startposition bringen bzw. Aktion abbrechen
  this.startposition_verzoegert=function(abbruch){
    if (startpositionstimeout)
      window.clearTimeout(startpositionstimeout);
    
    if (abbruch)
      return;
    
    startpositionstimeout = window.setTimeout(klasse+".startposition()", this.startposverzoegerung);
  }
  
  
  
  //Elemente bewegen
  this.bewegen=function(){
    var pos, strecke, teilstrecke;
    var inbewegung = 0;
    
    for(var i=0; i<navebenen.length; i++){
      var id = navebenen[i];
      if (id){
        if (id.bewegen != ""){
          inbewegung++;
          
          if (id.bewegen == "ziel") pos = id.pos_zx;
          if (id.bewegen == "start") pos = id.pos_sx;
          if (this.blockpos)
            strecke = parseInt(id.style.marginLeft) - pos;
          else
            strecke = parseInt(id.style.left) - pos;
          teilstrecke = parseInt(-strecke / 2);
          if (strecke >= -this.zieltoleranz && strecke <= this.zieltoleranz){
            //Zielposition erreicht
            if (this.blockpos)
              id.style.marginLeft = pos+"px";
            else
              id.style.left = pos+"px";
            id.bewegen = '';
            inbewegung--;
          }
          else {
            //Ziel noch nicht erreicht
            if (teilstrecke < -this.begrenzung) teilstrecke = -this.begrenzung;
            if (teilstrecke > this.begrenzung) teilstrecke = this.begrenzung;
            if (teilstrecke >= 0 && teilstrecke < 1) teilstrecke = 1;
            if (teilstrecke <= 0 && teilstrecke > -1) teilstrecke = -1;
            if (this.einblenden){
              gesamtstrecke = id.pos_zx - id.pos_sx;
              if (this.blockpos)
                zurueckgelegt = parseInt(id.style.marginLeft) - id.pos_sx;
              else
                zurueckgelegt = parseInt(id.style.left) - id.pos_sx;
              prozentwert = 100 - Math.ceil(zurueckgelegt * 100 / gesamtstrecke);
              this.transparenz(id, prozentwert);
            }
            if (this.blockpos){
              id.style.marginLeft = (parseInt(id.style.marginLeft) + teilstrecke)+"px";
            }
            else
              id.style.left = (parseInt(id.style.left) + teilstrecke)+"px";
          }
        }
      }
    }  //Ende for
    
    //Intervall löschen, wenn keine Bewegung mehr stattfindet
    if (inbewegung < 1){
      window.clearInterval(bewegungsintervall);
      bewegungsintervall = false;
    }
    
  }  //Ende function bewegen
  
  
  
  //Transparenzgrad ändern
  this.transparenz=function(element,prozentwert){
    // Lokale Variablen definieren
    var objekt, i, anzahl, stil, filterwert, tranparenzwert;
    
    // Browser unterstuetzt (W3C-)DHTML?
    if(DOM2){
      
      // Wurde Objekt uebergeben und existiert es?
      if(typeof(element)=="object" && element) { objekt=element; }
      // Ansonsten: Existiert (mindestens) ein HTML-Element mit passendem NAME-Attribut?
      else if (document.getElementsByName(element) && document.getElementsByName(element)[0]) { objekt=document.getElementsByName(element); }
      // Ansonsten: Existiert ein HTML-Element mit passendem ID-Attribut?
      else if (document.getElementById(element)) { objekt=document.getElementById(element); }
      // Ansonsten: Existiert (mindestens) ein passendes HTML-Element?
      else if (document.getElementsByTagName && document.getElementsByTagName(element) && document.getElementsByTagName(element)[0]) { objekt=document.getElementsByTagName(element); }
      // Ansonsten: Kein passendes Objekt gefunden
      else { objekt=false; }
      
      // Wenn ein Objekt existiert
      if(objekt) {
        // Gueltigen Prozentwert definieren (Deckungswert)
        prozentwert=(typeof(prozentwert)=="undefined")?50:100-prozentwert;
        // Wert fuer (IE-)Filter
        filterwert="Alpha(opacity="+prozentwert+")";
        // Wert fuer CSS opacity
        tranparenzwert=""+prozentwert/100;
        // Anzahl der passenden Elemente bestimmen
        anzahl=(objekt.length)?objekt.length:1;
        // Diese Elemente durchgehen
        for(i=0;i<anzahl;i++) {
          // (Arbeits-)Stylesheet-Objekt definieren
          stil=(objekt.length)?objekt[i].style:objekt.style;
          // "filter(Alpha)"-Style setzen (fuer IE)
          stil.filter=filterwert;
          // "-moz-opacity"-Style setzen (fuer Mozilla)
          stil.MozOpacity=tranparenzwert;
          // "-khtml-opacity"-Style setzen (fuer Konqueror/Safari)
          stil.KhtmlOpacity=tranparenzwert;
          // "opacity"-Style setzen (fuer CSS-3-Browser)
          stil.opacity=tranparenzwert;
        }
      }
    }
  }  //Ende function transparenz
  
  
  
  //Navigation initialisieren
  this.start=function(){
    //Speicher für Ebenenliste
    if (typeof navebenen == "undefined"){
      navebenen = new Array();
    }
    
    //Alle Ebenen durchlaufen um die Navigationsebenen zu finden
    var ebenen = document.getElementsByTagName("div");
    for(var i=0; i<ebenen.length; i++){
      var suche = new RegExp(this.css, "g");
      if (suche.test(ebenen[i].className)){
        //Ebene vermerken und Tiefe ermitteln
        navebenen[navebenen.length] = ebenen[i];
        var tiefe = ebenen[i].id.split("_");
        
        //Ebene positionieren
        if (this.display)
          ebenen[i].style.display = "block";
        else
          ebenen[i].style.visibility = "visible";
        if (this.blockpos){
          ebenen[i].style.marginLeft = this.posx+"px";
          ebenen[i].style.marginTop = this.posy+"px";
        }
        else {
          ebenen[i].style.left = this.posx+"px";
          ebenen[i].style.top = this.posy+"px";
        }
        
        //bei Transparenzeffekt
        if (this.einblenden && ebenen[i].id!=this.idbez)
          this.transparenz(ebenen[i].id, 100);
        
        //Ebenenparameter vermerken
        ebenen[i].pos_sx = this.posx;
        ebenen[i].pos_sy = this.posy;
        ebenen[i].pos_zx = this.posx + (ebenen[i].offsetWidth * (tiefe.length-1));
        ebenen[i].pos_zy = this.posy;
        ebenen[i].bewegen = "";
      }
    }  //Ende for
    
    //ursprüngliche CSS-Klassen der Links speichern sowie nach Aktiv-Markierung
    //durchsuchen und entsprechende Ebenen einblenden
    var links = document.getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
      //ursprüngliche CSS-Klassen vermerken
      var suche = new RegExp(this.css+"_link", "g");
      if (suche.test(links[i].className)){
        links[i].org_css = links[i].className;
      }
      //nach aktiven Links suchen und Ebene zur Einblendung kennzeichnen
      var suche = new RegExp(this.css+"_link aktiv umenue", "g");
      if (suche.test(links[i].className)){
        aktid = links[i].id.split("_e_", 2);
        objekt(this.idbez+"_"+aktid[1]).bewegen = "ziel";
      }
    }
    
    bewegungsintervall = window.setInterval(klasse+".bewegen()", this.schrittabstand);
  }  //Ende function start
  
  
  
  //Objekt ermitteln
  function objekt(bez){
    if (document.all)
      return eval("document.all."+bez);
    else
      return document.getElementById(bez);
  }  //Ende function objekt
  
  
  //prüfen, ob die Maus ein Element mit Kind-Elementen passiert oder verlassen hat
  this.checkMouseOver=function(element, event, funktion, parameter){
    var treffer = false;
    
    if (element.contains && event.fromElement){
      if (!element.contains(event.fromElement))
        treffer = true;
    }
    else if (event.relatedTarget){
      if (!containsDOM(element, event.relatedTarget))
        treffer = true;
    }
    
    //if (treffer && typeof funktion == 'function')
    //  funktion(parameter);
    if (treffer && funktion)
      window.setTimeout(funktion, 0);
    
    return treffer;
  }  //Ende function checkMouseOver
  
  this.checkMouseOut=function(element, event, funktion, parameter){
    var treffer = false;
    
    if (element.contains && event.toElement){
      if (!element.contains(event.toElement))
        treffer = true;
    }
    else if (event.relatedTarget){
      if (!containsDOM(element, event.relatedTarget))
        treffer = true;
    }
    
    //if (treffer && typeof funktion == 'function')
    //  funktion(parameter);
    if (treffer && funktion)
      window.setTimeout(funktion, 0);
    
    return treffer;
  }  //Ende function checkMouseOut
  
  function containsDOM(container, inhalt){
    var isParent = false;
    do {
      if ((isParent = container == inhalt))
        break;
      inhalt = inhalt.parentNode;
    }
    while (inhalt != null);
    return isParent;
  }  //Ende function containsDOM
  
}  //Ende schiebenavigation

