/*******************************************************
/
/   Created by 21TORR Interactive GmbH
/
*******************************************************/

/*******************************************************
/
/ BugReport:
/
/ - NS-Problem gefixt, dass Bilder mit gleichen Positionen in Layers nicht korrekt gehilitet werden
/ - Mozilla-Korrekturen
/
*******************************************************/




<!--
  imgArray = new Array();                               // enthaelt die Bilder im Dokument
  bilder_Anzahl = 0;                                    // enthaelt die Anzahl aller Bilder im Dokument
  dontTurnOff = [];
  base2 = "";
  oldHeadlineSrc = "";

// Variablen nur wichtig fuer Debugging...
  debug = false;                                         // debugging einschalten?
  anzahl_der_Durchlaeufe = 0;                           // Anzahl der Durchlaeufe der Updatefunktion
  rekursion_erlauben = true;                            // neuer Aufruf der Updatefunktion erlauben?
  debug_Text = "";                                      // Initialisierung der Text-Variablen
  preLoad_done = false;                                 // enthaelt "true" wenn der PreLoad abgeschlossen ist

  // Funktion cancelPreLoad()
  //
  // Funktion: Bricht die Updatefunktion ab (nur wichtig fuer Debugging)
  // Parameter: keine
  // Rueckgabe: keine
  function cancelPreLoad()
    {
      rekursion_erlauben = false;
  }
  
  // Funktion entry()
  //
  // Funktion: erstellt ein neues Objekt, das zwei Bildobjekte enthaelt; eines fuer den Normalzustand
  //            und eins fuer den Hilitezustand, die durch dir Funktion imgOn / imgOff je nach mouse
  //            event ausgetauscht werden.
  // Parameter: layer (string): Name der Layer, in der sich das Bild befindet
  //            name (string): Name des Bildes; muss mit dem Namen aus dem HTML-Dokument uebereinstimmen
  //            src1 (string): Quelle des Bildes im Normalzustand
  //            src2 (string): Quelle des Bildes im Hilitezustand
  // Rueckgabe: (Objekt): ein Objekt mit zwei Imageobjekten und der passenden Layerangabe
  function entry(layer, name, src1, src2, x, y)
    {
      this.layer = layer;           // Name der Layer speichern
      this.name = name;
      this.normal = new Image();     // neues Bildobjekt fuer den Normalzustand erzeugen
      this.normal.src = src1;       // die Quelle eintragen
      this.hilite = new Image();    // neues Bildobjekt fuer den Hilitezustand erzeugen
      this.hilite.src = src2;       // und noch die zweite Quelle eintragen
      this.x = x;
      this.y = y;
      return (this);
  }
  
  // Funktion isValidImage()
  //
  // Funktion: ueberprueft, ob es sich bei einem angegebenen Dateinamen eines Bildes um ein Bild handelt,
  //            das auch gehilitet werden kann.
  // Parameter: name (string): Name des zu ueberpruefenden Bildes
  // Rueckgabe: (boolean): wahr oder falsch ;)
  function isValidImage(src)
    {
      var ok = src.indexOf("_off.") > 0;
      return(ok);
  }
  
  // Funktion convertToHilite()
  //
  // Funktion: Konvertiert eine Quelle eines Bildes im Normalzustand in die Quelle fuer das gleiche
  //            Bild im Hilitezustand. Dabei wird die Namensvergebung verwendet wie sie bei 21TORR
  //            ueblich ist.
  // Parameter: src (string): Quelle des Bildes im Normalzustand
  // Rueckgabe: (string): Quelle des Bildes im Hilitezustand
    function convertToHilite(src)
    {
      var fileType = src.substring(src.lastIndexOf("."), src.length); // Dateiendung speichern
      var endOfPath = src.lastIndexOf("/") + 1;                       // letzten Slash suchen
      var path = src.substring(0, endOfPath);                         // Pfad extrahieren
      var fileName = src.substring(endOfPath, src.length);            // Dateinamen extrahieren
      var fileName2 = fileName;
      var endOfFileName = fileName.lastIndexOf("_");                  // Dateinamen aufsplitten
      fileName = fileName.substring(0, endOfFileName);                // "richtiger" Dateiname
      fileName = path + fileName + "_on" + fileType;                  // "_on" und Dateiendung anhaengen
      return (fileName);
  }
  
  // Funktion searchImages()
  //
  // Funktion: sucht alle Bilder aus dem HTML-Dokument und erstellt fuer jedes ein newImage-Objekt fuer
  //            den RollOver-Effekt. Dabei werden auch die Layers im Netscape (auch in der Version 6)
  //            beruecksichtigt.
  // Parameter: keine
  // Rueckgabe: keine
  function searchImages()
    {
      var anzahl_der_Bilder = document.images.length;
      if (debug) debug_Text += "<table width = '100%' border = '1'>\n<tr><td>pos</td><td>Layer</td><td>Name</td><td>low Quelle</td><td>hi Quelle</td><td colspan = '2'>preLoaded</td></tr>\n";
      for (var img = 0; img < anzahl_der_Bilder; img++)
        {//alert(img);
          var name = document.images[img].name;             // Name des Bildes speichern
          var nsrc = document.images[img].src;              // Quelle des Bildes speichern
          var hsrc = convertToHilite(nsrc);                 // Quelle des Hilite-Bildes speichern
          if (is_nav) { var x = document.images[img].x; var y = document.images[img].y; }
          else { var x = document.images[img].sourceIndex; var y = 0; }
          if (name == "") name = img;         // falls das Bild keinen Namen haben sollte, einfach einen erstellen :=)
          if (isValidImage(nsrc))
            {
              imgArray[bilder_Anzahl] = new entry("", name, nsrc, hsrc, x, y);  // das gefundene Bild in das Array eintragen
              if (debug) if (name != "") debug_Text += "<tr><td align = 'center' bgColor = '#22ff22'>" + bilder_Anzahl + ". </td><td align = 'center' bgColor = '#22ff22'>&nbsp;</td><td bgColor = '#22ff22'>" + name + "</td><td bgColor = '#22ff22'>" + nsrc + "</td><td bgColor = '#22ff22'>" + hsrc + "</td><td bgColor = '#22ff22'><input type = 'Text' value = 'no' size = '3' name = '" + imgArray[bilder_Anzahl].name + "l' /></td><td bgColor = '#22ff22'><input type = 'Text' size = '3' value = 'no' name = '" + imgArray[bilder_Anzahl].name + "h' /></tr>\n";
              bilder_Anzahl++;
          }
          else
            {
              if (debug) debug_Text += "<tr><td colspan = '7'>Not valid: name = " + name + ", src = " + nsrc + "</td></tr>";
          }
      }
      if ((is_nav) && (!is_dom)) searchImagesInLayers();
      if (debug) debug_Text += "<tr><td colspan = '7'>Anzahl der gefundenen Bilder: " + bilder_Anzahl + "</td></tr>\n</table>\n";
  }
  
  // Funktion searchImagesInLayers()
  // 
  // Funktion: sucht alle Bilder aus dem HTML-Dokument in Layers und erstellt fuer jedes ein newImage-Objekt fuer
  //            den RollOver-Effekt.
  // Parameter: keine
  // Rueckgabe: keine
  function searchImagesInLayers()
    {
      var layers = document.layers;
      for (var l = 0; l < layers.length; l++)
        {
          doc2 = layers[l].document;
          if (debug) debug_Text += "<tr><td bgColor = '#ffff00' colspan = '7'>Suche in Layer " + layers[l].name + " (max. " + doc2.images.length + " Bilder)</td></tr>\n";
          for (var d = 0; d < doc2.images.length; d++)
            {
              var name = doc2.images[d].name;
              var nsrc = doc2.images[d].src;
              var hsrc = convertToHilite(nsrc);
              if (is_nav) { x = doc2.images[d].x; y = doc2.images[d].y; }
              if (isValidImage(nsrc))
                {
                  imgArray[bilder_Anzahl] = new entry(layers[l].name, name, nsrc, hsrc, x, y);
                  if (debug) if (name != "") debug_Text += "<tr><td align = 'center' bgColor = '#22ff22'>" + bilder_Anzahl + ". </td><td align = 'center' bgColor = '#ffff22'>" + layers[l].name + "</td><td bgColor = '#22ff22'>" + name + "</td><td bgColor = '#22ff22'>" + nsrc + "</td><td bgColor = '#22ff22'>" + hsrc + "</td><td bgColor = '#22ff22'><input type = 'Text' value = 'no' size = '3' name = '" + imgArray[bilder_Anzahl].name + "l' /></td><td bgColor = '#22ff22'><input type = 'Text' size = '3' value = 'no' name = '" + imgArray[bilder_Anzahl].name + "h' /></tr>\n";
                  bilder_Anzahl++;
              }
          }
      }
  }

  // Funktion getPos()
  //
  // Funktion: Ermittelt die Position eines Bildes im imgArray anhand des Namens und liefert dessen Position zurueck.
  //            Wird das Bild nicht gefunden, liefert die Funktion -1 zurueck.
  // Parameter: name (string): Name des zu suchenden Bildes.
  // Rueckgabe: (int): Position des Bildes.
  function getPos(name)
    {
      var retValue = -1;
      for (var p = 0; p < imgArray.length; p++)
        {
          if (imgArray[p].name == name) retValue = p;
      }
      return (retValue);
  }

  function imgIsOn(name)
    {
      retValue = false;
      var nr = getPos(name);
      if (nr != -1)
        {
          var bild = imgArray[nr];
          if ((is_nav) && (bild.layer != "")) retValue = (document.layers[bild.layer].document.images[name].src.indexOf('_on') != -1);
            else retvalue = (document.images[name].src = bild.hilite.src.indexOf('_on') != -1);
      }
      alert(retValue);
      return(retValue);
  }

  // Funktion imgOn()
  //
  // Funktion: schaltet ein bestimmtes Bild in den Hi-Zustand. Wird ein ungueltiger Name angegeben, so erscheint
  //            keine Fehlermeldung.
  // Parameter: name (string): der Name des zu hilitenden Bildes
  // Rueckgabe: keine
  function imgOn(name, nrec)
    {
      var nr = getPos(name);
      if (nr != -1)
        {
          var bild = imgArray[nr];
          if ((is_nav) && (bild.layer != ""))
            document.layers[bild.layer].document.images[name].src = bild.hilite.src;
          else
            document.images[name].src = bild.hilite.src;
      }
  }

  // Funktion imgOff()
  //
  // Funktion: schaltet ein bestimmtes Bild in den Lo-Zustand. Wird ein ungueltiger Name angegeben, so erscheint
  //            keine Fehlermeldung.
  // Parameter: name (string): der Name des zu normalisierenden Bildes
  // Rueckgabe: keine
  function imgOff(name)
  {
          var nr = getPos(name);
          if (nr != -1)
          {
              var bild = imgArray[nr];
              if ((is_nav) && (bild.layer != ""))
                document.layers[bild.layer].document.images[name].src = bild.normal.src;
              else
                document.images[name].src = bild.normal.src;
          }
  }



  function registerMouseEvents()
    {
      if ((is_nav) && (!is_dom))
        {
          document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
      }
      document.onmouseover = checkForHilite;
      document.onmouseout = checkForHilite;
  }
  
  function isIn(arr, el)
    {
      var retValue = false;
      for (var e in arr) if (arr[e] == el) retValue = true;
      return (retValue);
  }

  function NS_is_visible(divName)
    {
      retValue = false;
      if (divName == '') return(true);
      if ((document.layers) && (document.layers[divName]) && (document.layers[divName].visibility == 'show')) retValue = true;
      return(retValue);
  }

  function getImageFromLink(obj)
    {
      retValue = -1;
      if (is_nav)
        {
          if (((obj.x) || (obj.x == 0)) && ((obj.y) || (obj.y == 0)))
            for (var pic in imgArray)
              if ((obj.x == imgArray[pic].x) && (obj.y == imgArray[pic].y) && (NS_is_visible(imgArray[pic].layer))) return(imgArray[pic]);
      }
      else
        if (obj.sourceIndex)
          for (var pic in imgArray)
            if (obj.sourceIndex == imgArray[pic].x) retValue = imgArray[pic];
      return (retValue);
  }

  function showProps(obj, to_window)  {
    if (typeof obj != 'object')
      alert(obj);
    else {
		alert('ok');
        text = '';
        if (to_window)  {
            text = '<pre>';
            for (i in obj) {
              text += '[' + i + '] =&gt; ' + obj[i] + '<br />';
            }
            text += '</pre>';
            doc = window.open('', '', '');
            doc = doc.document;
            doc.open();
            doc.write(text);
            doc.close();
        }
        else  {
            c = 0;
            for (i in obj)
              {
                c++;
                text += i + ' = ' + obj[i] + '\r\n';
                if (c == 15) 
                  {
                    alert(text);
                    c = 0;
                    text = '';
                }
            }
            alert(text);
        }
    }
  }
  
  function checkForHilite(e)
    {
      if (is_nav) { event = e; }

      quelle = -1;
      if ((is_nav) && (is_dom))
        if (event.target.localName == 'IMG')
          quelle = event.target.id;
      
      if ((is_nav) && (!is_dom))
        if ((event.target.src) || (event.target.href))
          {
            quelle = getImageFromLink(event.target);
            /*if (quelle == -1) */routeEvent(event);
        }
      if (is_ie)
        if (event.srcElement.src)
          {
            var img = event.srcElement;
            quelle = getImageFromLink(event.srcElement);
        }
      if (quelle != -1) 
        {
          action = (event.type.indexOf("ver") != -1) ? "over" : "out";
          if (quelle.name) quelle = quelle.name;
          if (action == "over") imgOn(quelle)
          else imgOff(quelle);
      }
  }
        
  
  // Funktion waitForPreload()
  //
  // Funktion: mit dieser Funktion kann ueberwacht werden, ob der PreLoad abgeschlossen ist.
  //            enthaelt die Variable preLoad_done den Wert "true", sind die mouseOver- und mouseOut-Bilder
  //            vorgeladen.
  //            VORSICHT: Bei Netscape kommt es manchmal vor, dass manche Bilder trotz Anweisung NICHT
  //                      vorgeladen werden!!
  //            Die Funktion benutzt die Timer-Funktion
  // Parameter: keine
  // Rueckgabe: keine
  function waitForPreLoad()
    {
      var per = 0;
      var count = 2 * bilder_Anzahl;
      var interleave = 100;
      anzahl_der_Durchlaeufe++;
      for (var b = 0; b < bilder_Anzahl; b++)
        {
          if (imgArray[b].normal.complete) 
            {
              per++;
              if (debug) debug_win.document.Display.elements[imgArray[b].name + "l"].value = "yes";
          }
          if (imgArray[b].hilite.complete)
            {
              per++;
              if (debug) debug_win.document.Display.elements[imgArray[b].name + "h"].value = "yes";
          }
      }
      if (debug)
        {
          debug_win.document.Display.D.value = Math.floor(100 * per / count) + " % preloaded (" + anzahl_der_Durchlaeufe * interleave + " msec)";
          debug_win.focus();
      }
      if ((per < count) && (rekursion_erlauben)) window.setTimeout("waitForPreLoad();", interleave);
      if (per == count) preLoad_done = true;
  }

  // Funktion mystic()   (Hauptfunktion)
  //
  // Funktion: Diese Funktion muss im body-Tag mit dem onLoad-Event aufgerufen werden. Sie veranlasst, dass das
  //            Dokument nach Bildern durchsucht wird, die fuer einen RollOver-Effekt verwendet werden. Die Funktion
  //            erkennt diese Bilder daran, dass ihre Quelle den Substring "_off." enthaelt. Aus der Quelle wird dann
  //            nach der Namenskonvention fuer Bilder dei 21TORR die Quelle fuer das Hilite-Bild errechnet und das
  //            dann ebenfalls vorausgeladen. Mithilfe der Variablen preLoad_done kann festgestellt werden, wann der
  //            Preload fuer die erkannten Bilder abgeschlossen ist.
  //            Die gefundenen Bilder koennen dann ueber die Funktionen imgOn() und imgOff() in die verschiedenen
  //            Zustaende versetzt werden, wobei nur noch der Name des Bildes uebergeben werden muss. Layers in
  //            Netscape werden selbst erkannt und muessen somit nicht angegeben werden.
  // Parameter: keine
  // Rueckgabe: keine
  function mystic()
    {
      if (debug)
        {
          debug_win = window.open("", "", "width=900,height=600,scrollbars=1,resizable=1");
          debug_win.document.open();
          debug_Text += "<html><head><title>Debugger-Fenster f&uuml;r mystic</title></head><body><form name = 'Display'><input type = 'Text' name = 'D' size = '30'/><input type = 'Button' value = 'preLoad abbrechen' onClick = 'window.opener.cancelPreLoad();' /><br />Vor dem Laden:<br />";
      }

      searchImages();
    
      if (debug)
        {
          debug_Text += "</form></body></html>";
          debug_win.document.write(debug_Text);
          debug_win.document.close();
      }
//      waitForPreLoad();
      registerMouseEvents(); 
    
    }
  
  function help_me()
    {
      var text = "";
      for (var i in dontTurnOff)
        text += "; " + dontTurnOff[i];
      window.status = text;
      window.setTimeout("help_me();", 200);
  }
  
//  window.setTimeout("help_me();", 100);
  
//-->
