/***********************************************************/
/*  Nutzung oder Veroeffentlichung dieser Programme ist    */
/*  nicht ohne Genehmigung gestattet!                      */
/*  Dieses Programm unterliegt dem Urheberschutzrecht.     */
/***********************************************************/


/////////////////////////////////////////////////////////////
// 
//  BTH5 
//  Programm zum Bildertausch
//  Version 5.2.8
//  Autor:             Markus Haeger
//  Kontakt:           haeger@netwood.de
//  Start BTH1:        07.08.2000
//  letzte Aenderung:  01.12.2003
//  Kunde:             
//
//
/////////////////////////////////////////////////////////////


var _BTH5 = { 
// Das Feld der betreffenden A-Tags
  AObj:[],
// Schlüsselworte im Bildnamen 
  key_off:"_off",
  key_on:"_on",
// Mr.Block
  B:[],
// Kontrolle
  Stopp:0,
// ms des Intervals der A-Suche  
  ScIv:200,
// soll auch gescannt werden?
  scan_off:1,
  scan_on:1,
  VERSION:"5.2.74"
};
/* Der A-Objekt-Creator
   Parameter: Feld mit den Werten für
      pfad, name, serie, typ (Bild)
      ref (Zeiger auf das A-Element)
      id (ID des A-Elementes)          
      img (Zeiger auf das IMG-Element)        
   Rückgabe: -
*/   
_BTH5.AObjC = function (arr) {
   this.id    = arr.id;  
   this.img   = arr.img;   
   this.pfad  = arr.pfad;
   this.name  = arr.name;
   this.serie = arr.serie;
   this.typ   = arr.typ;   
   this.ref   = arr.ref;   
   this.over     = new Image();
   this.over.src = this.pfad + "/" + this.name + _BTH5.key_on 
                 + ((this.serie!="INTERN") ? ("_"+this.serie) : "")
                 + "." + this.typ;    
   this.out      = new Image();
   this.out.src  = this.pfad + "/" + this.name + _BTH5.key_off 
                 + ((this.serie!="INTERN") ? ("_"+this.serie) : "")
                 + "." + this.typ;   
   this.blocked  = 0;   
   this.cover    = this.cout = this.cclick = null;   
   this.Zustand  = null;   
 };

/* Die Scanfunktion des Bild.src-Wertes
 *   Parameter: der SRC-Wert des zu testenden Bildes
 *   Rückgabe: ein Feld mit den Werten für
 *     pfad, name, serie, typ (Bild)
 *     SCAN (1:positiv - 0:negativ)
 *     on (handelt es sich um ein zu blockendes Bild?
*/   
_BTH5.SRCAnalyse = function (SRC) {
  function icheck(K) {
    var i = r.lastIndexOf(K);
    if ( i < 0 ) { return; }
    // Key am Namensende? => Scan erfolgreich, keine Serie
    if ( K.length + i == r.length )
      {
        back.name  = r.substring(0,i);
        back.serie = "INTERN";      
        back.SCAN  = 1;
      }
    // folgt aber ein _ könnte es sich um eine Serie handeln
    else if ( r.charAt(K.length + i) == "_" )
      {
        serie = r.substring(K.length+i+1);
        // Serie verifizieren: kein _ mehr!
        if ( serie.indexOf("_") < 0 )
          {
            back.name  = r.substring(0,i);
            back.serie = serie;      
            back.SCAN  = 1;
          }
      }    
   }
  var i,r,serie;
  // Rückgabefeld definieren
  var back = [];
  // SCAN erstmal als negativ formulieren
  back.SCAN = 0;
  // Pfad extrahieren
  i = SRC.lastIndexOf("/");
  if ( i < 0 ) // kein Pfad
    {
      back.pfad = "";
      i=0;
    }
  else
    {
      back.pfad = SRC.substring(0,i);
      i++;
    }
  // den Rest ansehen
  r = SRC.substring(i);
  // Trennung von Name und Typ
  i = r.lastIndexOf(".");
  // etwas seltsames?
  if ( i < 0 ) { return back; }
  // Typ speichern
  back.typ = r.substring(i+1);
  // Namen anlysieren
  r=r.substring(0,i);   
  if ( _BTH5.scan_off )
    { icheck(_BTH5.key_off); back.on = 0; }    
  if ( _BTH5.scan_on && !back.SCAN )
    { icheck(_BTH5.key_on ); back.on = 1; }
  return back;   
 };

/* Die Suche nach "markierten" A-Tags */
_BTH5.AScan = function () {
  if ( !document.getElementsByTagName ) { return; }
  var a = document.getElementsByTagName("a");
  var id = "";
  var f = [];
  var i,j,k,w;
  for ( i=0; i<a.length; i++)
    {
      if ( !a[i].id )
        {
           id = "AO" + _BTH5.AScan.IDC++;
           a[i].id = id; 
        }
      else { id = a[i].id; }
      if( _BTH5.AObj[id] ) { continue; }
      if( a[i].hasChildNodes() )
        {
           for ( j=0; j<a[i].childNodes.length; j++)
             {
                if ( a[i].childNodes[j].tagName != "IMG" ) { continue; }
                if (!a[i].childNodes[j].src ) { continue; }
                f = _BTH5.SRCAnalyse(a[i].childNodes[j].src);
                if (!f.SCAN) { continue; }
                f.ref = a[i];
                f.id = id;             
                f.img = a[i].childNodes[j];            
                _BTH5.AObj[id] = new _BTH5.AObjC(f);
                if ( f.on )
                  { 
                    _BTH5.AObj[id].blocked = 1;
                    _BTH5.AObj[id].Zustand = 1;
                    _BTH5.B[f.serie] = id;
                  }
                // schöner addEventListener wenn M$ mal hinterherkommt
                if ( typeof(a[i].onmouseover) != "function" )
                  { a[i].onmouseover = _BTH5.mOver; }
                else
                  {
                    _BTH5.AObj[id].cover = a[i].onmouseover;
                    a[i].onmouseover = _BTH5.mOver; 
                  }
                if ( typeof(a[i].onmouseout) != "function" )
                  { a[i].onmouseout = _BTH5.mOut; }
                else
                  {
                    _BTH5.AObj[id].cout = a[i].onmouseout;
                    a[i].onmouseout = _BTH5.mOut; 
                  }
                if ( typeof(a[i].onclick) != "function" )
                  { a[i].onclick = _BTH5.mClick; }
                else
                  {
                    _BTH5.AObj[id].cclick = a[i].onclick;
                    a[i].onclick = _BTH5.mClick; 
                  }
             } // for(j=0;j<a[i].childNodes.length;j++)
        } // if(a[i].hasChildNodes())
    } // for(i=0;i<a.length;i++)
 };
_BTH5.AScan.IDC = 0;
//****************************************************


_BTH5.mOver = function () { 
  if ( !_BTH5.AObj[this.id] || _BTH5.Stopp ) { return; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[this.id] )
    {
      if ( cover )  { cover(); }
      if ( blocked ){ _BTH5.Stopp = 0; return; }
      if (!over.src){ _BTH5.Stopp = 0; return; }
      img.src = over.src;
    }
  _BTH5.Stopp = 0;
};
_BTH5.mOut = function () { 
  if ( !_BTH5.AObj[this.id] || _BTH5.Stopp ) { return; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[this.id] )
    {
      if ( cout ) { cout(); }
      if ( blocked ) { _BTH5.Stopp = 0; return; }
      if (!out.src ) { _BTH5.Stopp = 0; return; }
      img.src = out.src;
    }
  _BTH5.Stopp = 0;
};
_BTH5.mClick = function () { 
  if ( !_BTH5.AObj[this.id] || _BTH5.Stopp ) { return; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[this.id] )
    {
      if ( cclick ) { cclick(); }
      // Block
      if( _BTH5.B[serie] && _BTH5.B[serie]!=this.id ) // ? alter Block?
        {
           _BTH5.AObj[_BTH5.B[serie]].blocked = 0;
           _BTH5.AObj[_BTH5.B[serie]].img.src = _BTH5.AObj[_BTH5.B[serie]].out.src;
        }      
      _BTH5.B[serie] = this.id;
      blocked = 1;
    }
  _BTH5.Stopp=0;
};

/* Start Scanning & PreCaching */
_BTH5.TOH = setInterval('_BTH5.AScan()',_BTH5.ScIv);

/* Nach abgeschlossenem Ladevorgang */
_BTH5.onLoad = function () {
  clearInterval(_BTH5.TOH);
  _BTH5.TOH = null;
  _BTH5.AScan();
};
 
if ( typeof(window.onload) != 'function' ) { window.onload = _BTH5.onLoad; }
else
  {
    _BTH5.onLoad.onLoader = window.onload;
    window.onload = function(){_BTH5.onLoad.onLoader();_BTH5.onLoad();};
  }

/* Die Fernsteuerung für BTH5 (1): Nur Highlighting mit Block auf übergebenen Bildnamen!
 *   Parameter: der Bildname (z.B. 'maus' aus <img src="pics/maus_off.gif">
                [, Serienname] (z.B. 'UN' aus <img src="pics/maus_off_UN.gif">
 *   Rückgabe: 1:alles ok 0:Fehler
 */   
_BTH5.FS = function (bn) {
  var i;
  var se = arguments[1] ? arguments[1] : 0;
  var id = "";
  for ( i in _BTH5.AObj )
    {
      if ( _BTH5.AObj[i].name == bn )
        {
           if ( se && se!=_BTH5.AObj[i].serie ) { continue; }
           id = _BTH5.AObj[i].id;
           se = _BTH5.AObj[i].serie;
           break;
        }
    }
  if ( !_BTH5.AObj[id] || _BTH5.Stopp ) { return 0; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[id] )
    {
       var bl = _BTH5.B[se];
       if ( bl && bl!=id && _BTH5.AObj[bl] ) 
         {
           _BTH5.AObj[bl].blocked = 0;
           _BTH5.AObj[bl].img.src = _BTH5.AObj[bl].out.src;         
         }
       _BTH5.B[se] = id;        
       img.src = over.src;
       blocked = 1;          
    }
  _BTH5.Stopp = 0;
  return 1;
};

/* Die Fernsteuerung für BTH5 (2) : Nur Highlighting mit Block auf übergebene ID!
 *   Parameter: die id des A-Tags [,serie] 
 *   Rückgabe: 1:alles ok 0:Fehler
 */   
_BTH5.FSA = function () {
  var id = arguments[0] ? arguments[0] : "";
  if ( !_BTH5.AObj[id] || _BTH5.Stopp ) { return 0; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[id] )
    {
      var se = arguments[1] ? arguments[1] : serie;
      var bl = _BTH5.B[se];
      if ( bl && bl!=id && _BTH5.AObj[bl] )
        {
           _BTH5.AObj[bl].blocked = 0;
           _BTH5.AObj[bl].img.src = _BTH5.AObj[bl].out.src;         
        }
      _BTH5.B[se] = id;        
      img.src = over.src;
      blocked = 1;          
    }
  _BTH5.Stopp = 0;
  return 1;
};

/* Die Fernsteuerung für BTH5 (3): Highlighting und Block für übergebenen Bildnamen entfernen!
 *   Parameter: der Bildname (z.B. 'maus' aus <img src="pics/maus_off.gif">
                [, Serienname] (z.B. 'UN' aus <img src="pics/maus_off_UN.gif">
 *   Rückgabe: 1:alles ok 0:Fehler
 */   
_BTH5.RB = function (bn) {
  var i;
  var se = arguments[1] ? arguments[1] : 0;
  var id = "";
  for ( i in _BTH5.AObj )
    {
      if ( _BTH5.AObj[i].name == bn )
        {
           if ( se && se!=_BTH5.AObj[i].serie ) { continue; }
           id = _BTH5.AObj[i].id;
           se = _BTH5.AObj[i].serie;
           break;
        }
    }
  if ( !_BTH5.AObj[id] || _BTH5.Stopp ) { return 0; }
  _BTH5.Stopp = 1;
  with ( _BTH5.AObj[id] )
    {
      // Block entfernen
      if( _BTH5.B[serie] && _BTH5.B[serie]==id ) // ? wirklich ein Block?
        {
           blocked = 0;
           _BTH5.AObj[id].img.src = _BTH5.AObj[id].out.src;
           _BTH5.B[serie] = "";
        }      
    }
  _BTH5.Stopp = 0;
  return 1;
};


