
window.document.write(
  '<style type="text/css"> ' +
    '*.activeContent { visibility:visible; }\n ' +
    '*.collapsed { display:none; } ' +
  '<\/style>');

(function () {  // wrapper
  window.FLD = { name: 'fld' };
  
  window.FLD.debuglevel = 0;  
  var matches = [];
  if (window.location && window.location.search) {
    matches = /debuglevel=([0-9]+)/.exec(window.location.search);
    if (matches && matches.length > 1) {
      window.FLD.debuglevel = parseInt(matches[1], 10); 
      if (isNaN(window.FLD.debuglevel)) {
        window.FLD.debuglevel = 0;
      }
    }
  }
  
  window.FLD.error = function (what) {
    if (window.FLD.debuglevel >= 1) { 
      window.prompt('Fehler: ' + what, 'IE8 bug');
    }
  };
  window.FLD.warning = function (what) {
    if (window.FLD.debuglevel >= 2) { 
      window.prompt('Hinweis: ' + what, 'IE8 bug');
    }
  };
  window.FLD.log = function (what) {
    if (window.FLD.debuglevel >= 3) { 
      window.prompt('Log: ' + what, 'IE8 bug');
    }
  };
  
  window.FLD.clicked = function (sender) {
    var i;

    if (!this.style) {
      window.FLD.error('FLD.clicked: Zielelement ohne style-property');
      return false;
    }

    if (this.style.display !== 'block') {

      if (this.fldmutexes_) {
        for (i = 0; i < this.fldmutexes_.length; i += 1) {
          this.fldmutexes_[i].style.display = 'none';
        }
      }
      this.style.display = 'block';
    } else {
      this.style.display = 'none';
    }
    return false;
  };

  window.FLD.currentTarget = function (target) {
    //  target ist ein Element INNERHALB eines a-Elementes?
    if (target.nodeName && target.nodeName.toLowerCase() !== 'a' && 
        target.parentNode.nodeName.toLowerCase() === 'a') {
      return target.parentNode;
    }
    return target;
  };
  
  window.FLD.forward = function (event) {
    var e      = event           ||  window.event,  
        target = e.currentTarget ||  window.FLD.currentTarget(e.srcElement),
        pev = {};  

    if (!e || !target || target.fldeventhandler_ !== arguments.callee) {
      window.FLD.error('FLD.forward: Inkonsistenzen');
      return false;
    }  
    
    if (!target.nodeName || target.nodeName.toLowerCase() !== 'a' ||
        !target.fldforward_ || !target.fldforward_.fldeventhandler_) { 
      window.FLD.error('FLD.forward: unzulaessiges target');
      return false;
    }

    if (target.fldforward_.fldeventhandler_ === arguments.callee) {
      window.FLD.error('FLD.forward: Rekursion abgebrochen.');
      return false;
    }
    
    pev.currentTarget = pev.srcName = target.fldforward_;
    pev.cancelBubble = false;
    pev.returnValue = true;
    pev.stopPropagation = function () {
      this.cancelBubble = true; 
    };
    pev.preventDefault = function () { 
      this.returnValue = false;
    };
    pev.fldforwarder_ = target;  

    target.fldforward_.fldeventhandler_(pev);
    
    e.cancelBubble = pev.cancelBubble; 
    e.returnValue = true;
    if (e.cancelBubble && e.stopPropagation) {
      e.stopPropagation();
    }
    return true;
  };
  
  window.FLD.toggle = function (event) {
    
    //  --------  DOM2 ------    || ---- IE ------
    var e      = event           ||  window.event,  
        target = e.currentTarget ||  window.FLD.currentTarget(e.srcElement),
        
        child,        // falls innerhalb des a-Elementes noch Bilder sind ....
        pic,          // swap
        i;
    
    if (!e || !target || target.fldeventhandler_ !== arguments.callee ||
        !target.fldtoggle_) {
      window.FLD.error('FLD.toggle: Inkonsistenzen');
      return false;
    }  

    if (window.document.addEventListener) {
      e.stopPropagation();    
      e.preventDefault();     
    // --- IE
    } else if (window.document.attachEvent) { // IE
      e.cancelBubble = true;  // stop bubbling (IE hat kein 'capture')
      e.returnValue = false;  // false stoppt default action
    }

    if (target.fldtoggle_.style.display === 'block' && e.fldforwarder_) {
      return false;
    }

    if (target.fldtoggle_.clicked_) {
      target.fldtoggle_.clicked_(target);
    }
    
    if (target.fldforwarders_) {
      for (i = 0; i < target.fldforwarders_.length; i += 1) {
        target.fldforwarders_[i].className = 
            (target.fldtoggle_.style.display === 'block')? 
              'forwardoff' : 'forward';
      }
    }
    
    for (child = target.firstChild ; child; child = child.nextSibling) {
      // --- img
      if (child.nodeName && child.nodeName.toLowerCase() === 'img' && 
          child.className && child.className.search(/\btoggle\b/) >= 0) {
        if (child.src && child.alt) {
          pic = child.src;         
          child.src = child.alt;
          child.alt = pic;
        }
      }
    }
    //
    return false;
  };
  
  window.FLD.onLoad = function () {
    var aelems = window.document.getElementsByTagName('a'),
    elem = null,
    idx = -1, address, parts,    // E-Mail
    zielid = null, display = null,
    infoboxes = [],
    i = -1,
    j = -1,
    child = null, pic = null;   // img
    
    for (i = 0; i < aelems.length; i += 1) {
      elem = aelems[i];
      // --- Element nicht relevant ?
      if (!elem.nodeName || elem.nodeName.toLowerCase() !== 'a' ||
          !elem.className || elem.className.search(/email/) < 0) {
        continue;
      }
      if (!elem.href) {
        window.FLD.error('email: keine Adresse (ohne href)');
        continue;
      }
      
      idx = -1; address = 'mailto:'; parts = '';   // aktiv rücksetzen!
      idx = elem.href.lastIndexOf('/');
      idx = (idx >= 0)? idx + 1 : 0;
      parts = elem.href.slice(idx).split(/%20/);
      for (j = 0; j < parts.length; j += 1) {
        if (parts[j] === 'at') {
          address += '@';
        } else if (parts[j] === 'dot') {
          address += '.';
        } else {
          address += parts[j];
        } 
      }
      elem.href = address;
    }
    
    for (i = 0; i < aelems.length ; i += 1) {
      elem = aelems[i];
      // --- Element nicht relevant ?
      if (!elem.nodeName || elem.nodeName.toLowerCase() !== 'a' ||
          !elem.className || elem.className.search(/\bforward\b/) < 0) {
        continue;
      }
      if (!elem.href) {
        window.FLD.error('forward: keine Adresse (ohne href)');
        continue;
      }

      zielid = (elem.href)? elem.href.match(/#([A-Za-z0-9]+)$/) : null;
      if (!zielid || zielid.length < 2) { 
        window.FLD.error('forward: href ohne fragment: ' + elem.href);
        continue;
      }
      elem.fldforward_ = window.document.getElementById(zielid[1]);
      if (!elem.fldforward_) { 
        window.FLD.error('forward: kein Element mit id ' + zielid[1]);
        continue;
      }

      if (!elem.fldforward_.fldforwarders_) {
        elem.fldforward_.fldforwarders_ = [elem];
      } else {
        elem.fldforward_.fldforwarders_.push(elem);
      }

      elem.fldeventhandler_ = window.FLD.forward;
      if (window.document.addEventListener) {
        elem.addEventListener('click', window.FLD.forward, false);
      } else if (window.document.attachEvent) {
        elem.attachEvent('onclick', window.FLD.forward);         
      }
    } 
    
    for (i = 0; i < aelems.length ; i += 1) {
      elem = aelems[i];
      // --- Element nicht relevant ?
      if (!elem.nodeName || elem.nodeName.toLowerCase() !== 'a' ||
          !elem.className || elem.className.search(/\btoggle\b/) < 0) {
        continue;
      }
      if (!elem.href) {
        window.FLD.error('toggle: keine Adresse (ohne href)');
        continue;
      }

      zielid = (elem.href)? elem.href.match(/#([A-Za-z0-9]+)$/) : null;
      if (!zielid || zielid.length < 2) { 
        window.FLD.error('toggle: href ohne fragment: ' + elem.href);
        continue;
      }

      elem.fldtoggle_ = window.document.getElementById(zielid[1]);
      if (!elem.fldtoggle_) { 
        window.FLD.error('toggle: kein Element mit id ' + zielid[1]);
        continue;
      }
      // --- display in Grundzustand im Zielelement -> anchor berücksichtigen
      if (!elem.fldtoggle_.style) {
        window.FLD.error('toggle: target ohne style property');
        continue;
      }
      if (!elem.fldtoggle_.style.display) { // neu
        // display = elem.fldtoggle_.className;
        // display = (display)? display.search(/\bcollapsed\b/) : -1;
        display = window.location && window.location.hash;
        display = (display && elem.fldtoggle_.id) ?
                    display.search(elem.fldtoggle_.id) : -1;
        elem.fldtoggle_.style.display = (display > 0)? 'block' : 'none';
      }

      if (elem.fldtoggle_.style.display === 'block') {
        for (child = elem.firstChild; child; child = child.nextSibling) {
          // --- img
          if (child.nodeName && child.nodeName.toLowerCase() === 'img' && 
              child.className && child.className.search(/\btoggle\b/) >= 0) {
            if (child.src && child.alt) {
              pic = child.src;         // keine swap Funktion in JS möglich??
              child.src = child.alt;
              child.alt = pic;
            }
          }
        }
      }
       
      if (elem.fldtoggle_.style.display === 'block' && elem.fldforwarders_) {
        for (j = 0; j < elem.fldforwarders_.length; j += 1) {
          elem.fldforwarders_[j].className = 'forwardoff';
        }
      }
      if (elem.fldtoggle_.className && 
          elem.fldtoggle_.className.search(/\binfobox\b/) >= 0) {
        infoboxes.push(elem.fldtoggle_);
      }
      
      elem.fldeventhandler_ = window.FLD.toggle;
      if (window.document.addEventListener) {
        elem.addEventListener('click', window.FLD.toggle, false);
      } else if (window.document.attachEvent) {
        elem.attachEvent('onclick', window.FLD.toggle);         
      }
      elem.fldtoggle_.clicked_ = window.FLD.clicked;
      // 
    } 
    
    for (i = 0; i < infoboxes.length; i += 1) {
      infoboxes[i].fldmutexes_ = infoboxes;
    }
    
    for (i = 0; i < aelems.length ; i += 1) {
      elem = aelems[i];
      if (elem.fldtoggle_ && elem.fldtoggle_.style && 
          elem.fldtoggle_.style.display==='block') {
        elem.focus(); elem.blur(); break;
      }
    }
    //
    return false; 
  };
  
 
  if (window.document.addEventListener) {
    window.addEventListener('load', 
      function (event) {  // diese anonyme Funktion ist nur greifbar über callee
        window.removeEventListener('load', arguments.callee, false);
        window.FLD.onLoad();
        if (event) {
          event.stopPropagation();
          event.preventDefault();
        }
        return false;
      }
      ,
      false
    );
  } else if (window.document.attachEvent) {
    window.document.attachEvent('onreadystatechange', 
      function () {
        if (window.document.readyState === 'complete') {
          window.document.detachEvent('onreadystatechange', arguments.callee);
          window.FLD.onLoad();       
        }
        if (window.event) {
          window.event.cancelBubble = true;
          window.event.returnValue = false;
        }
        return false;
      }
    );

  } else {
    window.alert('backend: panic - no event mechanism!');
  }
  //
})();

