// Ein- und Ausblenden des Wireframes &uuml;ber einem Final (Battle-Abstimmung)
// Konfiguration: siehe function fader()

  // Zustand eines jeden Wires
  function faderDataSet()
  {
    this.timer = 0;                 // ID/Handle des Timers, 0: kein Timer eingerichtet
    this.direction = 0;             // +1: einblenden, -1: ausblenden, 0: STOP/noop
    this.opacity = 0;               // aktuelle opacity; Werte: 0..1
  }

  // Kapselt die Faderfunktionen samt Konfig.-Daten
  function fader()
  {
    this.opacMin  = 0;             // minimale und maximale opacity (0..1)
    this.opacMax  = 0.60;
    this.opacStep = 0.05;          // Aenderung bei jedem Timer-Tick (pos. Wert)
    this.interval = 20;            // Timer-Intervall in ms

    this.fadeWire = function (dir, wireID)
    {
      var fd = document.getElementById(wireID).faderData;
      fd.direction = dir;

      this.setOpacity(wireID);

      if(!fd.timer)
        fd.timer = window.setInterval("myFader.doStep('"+wireID+"')", this.interval);
    }

    this.doStep = function (wireID)
    {
      var fd = document.getElementById(wireID).faderData;

      if( !fd.direction) return;    // STOP

      if( (fd.direction>0 && fd.opacity>=this.opacMax)
       || (fd.direction<0 && fd.opacity<=this.opacMin))
      {
        fd.direction = 0;           // STOP-Signal
        window.clearInterval(fd.timer);
        fd.timer = 0;
      }
      else
        fd.opacity += fd.direction*this.opacStep;  // opacityDir: +1 oder -1

      this.setOpacity(wireID);
    }

    this.setOpacity = function (wireID)
    {
      var wire = document.getElementById(wireID);
      wire.style.opacity = wire.faderData.opacity;
      // IE6 (&uuml;ber "filter", opacity 0..100 statt 0..1)
      wire.style.filter = "alpha(opacity="+(100*wire.faderData.opacity)+")";
    }
  }
  
  var myFader = new fader(); // global
  
  // Einbau der Daten und Eventhandler in Links und Wireframes
  // Sucht u.a. die beiden CSS-classes "abgabe" und "wire"
  function prepareLinks()
  {
    var linkliste = document.getElementsByTagName('A');
    for(var i=0; i<linkliste.length; i++)
    {
      if(linkliste[i].className && linkliste[i].className.match(/abgabe/))
      {
        var linkchildren = linkliste[i].childNodes;
        for(var k=0; k<linkchildren.length; k++)
        {
          if(linkchildren[k].className && linkchildren[k].className.match(/wire/))
          {
            linkliste[i].id = 'final_'+i;
            linkchildren[k].id = 'final_'+i+'_wire';

            linkchildren[k].faderData = new faderDataSet(linkchildren[k]);

            linkliste[i].onmousemove = function () { myFader.fadeWire( 1, this.id+'_wire' ) };
            linkliste[i].onmouseout  = function () { myFader.fadeWire(-1, this.id+'_wire' ) };

            break;
          }
        }
      }
    }
  }

  //window.onload = prepareLinks;
  if(window.addEventListener)
    window.addEventListener('load', prepareLinks, false);
  else if(window.attachEvent)
    window.attachEvent('onload',prepareLinks);
