function ebenenticker(klasse){
  var IE4=document.all&&!document.getElementById;
  var DOM2=document.getElementById;
  var inhaltezaehler=0;
  var uebergangsintervall = uebergangstimeout = false;
  var schritt=0;
  var blendrichtung=1;
  var bewegung=0;
  var ebenenposition = 0;
  var inhaltsmass = ebenenmass = 0;
  var tickerinhalte=new Array();
  
  this.standzeit = 2000; //Standzeit bevor der Ticker zu laufen beginnt (Millisekunden)
  this.schlussstandzeit = 4000; //Standzeit nachdem der Ticker durchgelaufen ist (Millisekunden)
  this.schritte = 30; //Anzahl der Abstufungen zwischen unsichtbar und sichtbar
  this.schrittgroesse = 1; //Abstand in Pixel, in dem die Ebene pro Schritt verschoben wird
  this.schrittabstand = 30; //Zeit zwischen den einzelnen Abstufungswechseln/Verschiebungen (Millisekunden)
  this.einblenden = true; //Inhalte einblenden
  this.ausblenden = true; //Inhalte ausblenden
  this.rausschieben = false; //false: Inhalt nur so weit verschieben, bis das Ende sichtbar ist; true: Inhalt so weit verschieben, bis das Ende wieder aus dem Bild verschwindet (hierbei sollte schlussstandzeit auf 0 und ausblenden auf false gesetzt werden)
  this.vertikal = true; //Inhalte vertikal verschieben (false: horizontal)
  this.inhaltemischen = true; //Inhalte mischen
  this.inhalt = 'tickerdaten'; //Name des Inhaltsarrays (ohne Anführungszeichen) bzw. Klassenname der DIVs (in Anführungszeichen)
  this.ebenenid = 'ticker'; //ID der Tickerebene
  this.ebenenformat = 'class="ticker"'; //Formatierungsanweisung für die Tickerebene
  this.inhaltsformat = 'class="tickerinhalt"'; //Formatierungsanweisung für den Inhalt
  
  
  //Inhalte austauschen
  this.inhaltswechsel=function(ausb){
    if (ausb){
      //ausblenden
      if (!uebergangsintervall)
        uebergangsintervall=setInterval(klasse+".uebergang()", this.schrittabstand);
      return;
    }
    
    if (inhaltezaehler>=tickerinhalte.length)
      inhaltezaehler=0;
    
    //Ebenenhöhe-Merker auf Null setzen, damit beim neuen Inhalt neu ermittelt wird
    inhaltsmass = 0;
    
    //innere Ebene erstellen und Wechsel anstoßen
    if (DOM2){
      this.transparenz(this.ebenenid, 100);
      document.getElementById(this.ebenenid).innerHTML='<div style="position:absolute;left:0;top:0;" id="'+this.ebenenid+'_ticker" '+this.inhaltsformat+'>'+tickerinhalte[inhaltezaehler]+'</div>';
      schritt = 1;
      if (!uebergangsintervall)
        uebergangsintervall=setInterval(klasse+".uebergang()", this.schrittabstand);
    }
    else if (IE4){
      document.all[this.ebenenid].innerHTML='<div style="position:absolute;left:0;top:0;" id="'+this.ebenenid+'_ticker" '+this.inhaltsformat+'>'+tickerinhalte[inhaltezaehler]+'</div>';
      uebergangstimeout = setTimeout(klasse+".inhaltswechsel()", this.standzeit);
    }
    
    inhaltezaehler++;
  }  //Ende function inhaltswechsel
  
  
  //Transparenzübergänge
  this.uebergang=function(){
    //bewegen
    if (bewegung==1){
      this.bewegen();
      return;
    }
    
    //ein- und ausblenden
    if (blendrichtung==1 && !this.einblenden){
      prozentwert = 0;
      schritt = this.schritte;
    }
    else if (blendrichtung == 1){
      var prozentwert = 100 - Math.ceil(100 / this.schritte * schritt);
    }
    if (blendrichtung==2 && !this.ausblenden){
      prozentwert = 100;
      schritt = this.schritte;
    }
    else if (blendrichtung == 2){
      var prozentwert = Math.ceil(100 / this.schritte * schritt);
    }
    
    this.transparenz(this.ebenenid, prozentwert);
    schritt++;
    if(schritt>this.schritte){
      if (blendrichtung == 1){
        bewegung=1;
        blendrichtung=2;
        schritt=1;
        clearInterval(uebergangsintervall);
        uebergangsintervall = false;
        uebergangstimeout = setTimeout(klasse+".inhaltswechsel(1)", this.standzeit);
      }
      else {
        blendrichtung=1;
        schritt=1;
        clearInterval(uebergangsintervall);
        uebergangsintervall = false;
        this.inhaltswechsel();
      }
    } 
  }  //Ende function uebergang
  
  
  //Ebene bewegen
  this.bewegen=function(){
    if (DOM2)
      var objekt=document.getElementById(this.ebenenid+'_ticker');
    else if (IE4)
      var objekt=document.all[this.ebenenid+'_ticker'];
    else
      var objekt=false;
    
    if (objekt){
      var typP = "left";
      var typM = "offsetWidth";
      if (this.vertikal){
        typP = "top";
        typM = "offsetHeight";
      }
      
      //Abmessung der Inhaltsebene ermitteln
      if (inhaltsmass==0)
        inhaltsmass = parseInt(objekt[typM]);
      if (inhaltsmass == 0)
        return;
      
      //verschieben, wenn Inhalt größer als die umschließende Ebene ist
      if (inhaltsmass>ebenenmass || this.rausschieben==true)
        objekt.style[typP] = parseInt(objekt.style[typP]) - this.schrittgroesse + "px";
      
      //weitere Bewegung abbrechen, wenn das Verschieben abgeschlossen ist
      if ( (!this.rausschieben && parseInt(objekt.style[typP]) <= ((inhaltsmass-ebenenmass)*(-1)))
           || (this.rausschieben && parseInt(objekt.style[typP]) <= inhaltsmass*(-1)) ){
        bewegung=0;
        clearInterval(uebergangsintervall);
        uebergangsintervall = false;
        uebergangstimeout = setTimeout(klasse+".inhaltswechsel(1)", this.schlussstandzeit);
      }
    }
  }  //Ende function bewegen
  
  
  //Animation anhalten
  this.anhalten=function(){
    clearInterval(uebergangsintervall);
    clearTimeout(uebergangstimeout);
    uebergangsintervall = false;
  }  //Ende function anhalten
  
  
  //Animation fortsetzen
  this.fortsetzen=function(){
    if(uebergangsintervall)
      return;
    uebergangsintervall=setInterval(klasse+".uebergang()", this.schrittabstand);
  }  //Ende function fortsetzen
  
  
  //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
  
  
  //Arrayinhalte mischen
  function mischen(arr){
    var tmp, zufall;
    for(var i =0; i < arr.length; i++){
      zufall = Math.floor(Math.random() * arr.length);
      tmp = arr[i]; 
      arr[i] = arr[zufall]; 
      arr[zufall] =tmp;
    }
    return arr;
  }  //Ende function mischen
  
  
  //Initialisierung
  this.start=function(){
    if (IE4||DOM2){
      //umschließende Ebene erstellen
      document.write('<div id="'+this.ebenenid+'" '+this.ebenenformat+' style="position:relative;overflow:hidden;" onMouseover="'+klasse+'.anhalten();" onMouseout="'+klasse+'.fortsetzen();"></div>');
      
      //Abmessung der umschließenden Ebene ermitteln
      var typM = "offsetWidth";
      if (this.vertikal)
        typM = "offsetHeight";
      
      if (DOM2)
        ebenenmass = document.getElementById(this.ebenenid)[typM];
      else 
        ebenenmass = document.all[this.ebenenid][typM];
    }
    
    if (typeof(this.inhalt) == "object"){
      tickerinhalte = this.inhalt;
    }
    else {
      var elemente = document.getElementsByTagName("div");
      for (var i=0; i<elemente.length; i++){
        if (elemente[i].className==this.inhalt)
          tickerinhalte.push(elemente[i].innerHTML);
      }
    }
    
    if (tickerinhalte.length < 1)
      return;
    
    if (this.inhaltemischen)
      tickerinhalte = mischen(tickerinhalte);
    
    this.inhaltswechsel();
    
  }  //Ende function start
  
}  //Ende ebenenticker


