var tt = new Tooltip( function(){ return document.getElementById('link').getElementsByTagName('*');  });

function Tooltip(collectDOMfunction)
{
  // Simple JavaScript Tooltip
  // (c) endo.ch 2007, 2009 Christoph Berger, www.endo.ch

  var toolObj = this;
  this.tooltip = null; // DOM <div>-objekt des Tooltips
  this.ttactive = false; // true sobald Tooltip angezeigt wird
  this.collectDOMfunction = collectDOMfunction;
  
  this.updateTT = function(e) {
    if (toolObj.ttactive) {
      x = (document.all) ? e.clientX + (document.documentElement.scrollLeft | document.body.scrollLeft) : e.pageX;
      y = (document.all) ? e.clientY + (document.documentElement.scrollTop  | document.body.scrollTop)  : e.pageY;

      toolObj.tooltip.style.left = (x - 20) + 'px';
      toolObj.tooltip.style.top   = (y + 22) + 'px';
      toolObj.tooltip.style.display = 'block';
    }
  }
  
  this.showTT = function(element) {
    if (!element.tooltip)
      return;
    title = element.tooltip;
    toolObj.tooltip.innerHTML = '<p>'+title+'</p>';
    toolObj.ttactive = true;
    //toolObj.updateTT(window.event);
  }
  
  this.hideTT = function(element) {
    toolObj.tooltip.style.display = 'none';
    toolObj.ttactive = false;
  }
  
  this.init = function(){
    // an Stelle von  <div id="tooltip"></div>
    // im HTML Quellcode
    toolObj.tooltip = document.createElement('div');
    toolObj.tooltip.setAttribute('id','link_tooltip');
    toolObj.tooltip.style.position = 'absolute';
    toolObj.tooltip.style.display = 'none';
    document.getElementsByTagName('body')[0].appendChild(toolObj.tooltip);
    
    // an Stelle von  <img src=".." title="xyz" onmouseover="showTT(this)" onmouseout="hideTT(this)">
    // im HTML Quellcode
    var objArr = toolObj.collectDOMfunction();
    for(var i=0; i<objArr.length; i++){
      if (objArr[i].title){
        objArr[i].tooltip =  objArr[i].title;
        objArr[i].title = '';
        toolObj.addListener(objArr[i], 'mouseover', function(e){ toolObj.showTT(e.srcElement||this)});
        toolObj.addListener(objArr[i], 'mouseout', function(e){ toolObj.hideTT(e.srcElement||this)});
      }
    }
    toolObj.addListener(document, 'mousemove', toolObj.updateTT);
  }
  
  this.unload = function() {
    // Safari Problem mit Back Button beheben, indem die Änderungen
    // beim Verlassen der Seite rückgängig gemacht werden
    try{
      if (navigator.vendor && navigator.vendor.match(/Apple/)){
        var objArr = toolObj.collectDOMfunction();
        for(var i=0; i<objArr.length; i++){
          if (objArr[i].tooltip){
            objArr[i].title = objArr[i].tooltip;
          }
        }
      }
    }
    catch(e) {}
  }
  
  this.addListener = function(element, event, listener, bubble) {
    if(element.addEventListener) {
      if(typeof(bubble) == 'undefined'){
        bubble = false;
      }
      element.addEventListener(event, listener, bubble);
    } else if(document.attachEvent) {
      element.attachEvent("on" + event, listener);
    }
  }
  
  // init nach Ende des Ladevorgangs aufrufen
  this.addListener(window, 'load', this.init);
  this.addListener(window, 'unload', this.unload);
}
