//  ---------------------------------------------------------------------------
//  Last Modified : 2007-07-16
//  Author: Dr. Detlef Groth
//  Modified by: Dr. Horst Walther
//  ToolTip-Class 
//  ---------------------------------------------------------------------------

var slashFlag = document.URL.indexOf ('\\') < 0;
var selfURL = document.URL.slice(document.URL.lastIndexOf(slashFlag ? '/' : '\\')+1);
var tipsPath = ''; // 'tips/';
var wordy = false;

//  ---------------------------------------------------------------------------
function lang() { 
  return document.body.lang == 'de' ? 1 : 0;
}

//  ---------------------------------------------------------------------------
function ToolTip (varname, filename, t) {
  var tipId;
  var lastTipId = "null" ;
  var responseHTML = new Array (false, false);
  var vname = varname ;
  var file = filename ;
  var timeout = t ;
  var timeMulti = new Array (2, 2);  // first tooltip might take more time because the document must be downloaded
  if(wordy) traceln (file+'_'+document.body.lang+'.xhtml');

  //  -------------------------------------------------------------------------
  function createResponseHTML (toolTipFile, toolTipContent) { 
    if(wordy) traceln ('createResponseHTML('+toolTipFile+', '+toolTipContent+')');
    var id = toolTipFile+'_'+ document.body.lang ;
    if (document.getElementById(id))
      return document.getElementById(id);
    var toolTag = createToolTag (id);
    toolTag.innerHTML = toolTipContent;
    return toolTag;
  }

  //  -------------------------------------------------------------------------
  function createToolTag (id) { 
    if(wordy) traceln ('createToolTag ('+id+')');
    var toolTag = document.createElement("div");
    toolTag.setAttribute("id", id);
//    toolTag.style.backgroundColor= "white";
//    toolTag.style.border= "1px solid red";
//    toolTag.style.borderBottom= "1px solid aqua";
    toolTag.style.visibility = "hidden" ;
    toolTag.style.display = "none" ;
    document.body.appendChild(toolTag);
    return toolTag;
  }

  //  -------------------------------------------------------------------------
  function getToolTip() { 
    if(wordy) traceln ('getToolTip()');
    var id = arguments[0] ? arguments[0] : "ToolTipBox" ;
    if (document.getElementById(id))
      return document.getElementById(id);
    return createToolTipBox (id)
  }

  //  -------------------------------------------------------------------------
  function createToolTipBox (id) { 
    if(wordy) traceln ('createToolTipBox ('+id+')');
    var tooltip = document.createElement("div");
    tooltip.style.visibility = "hidden" ;
    tooltip.setAttribute("id", id);
    tooltip.onclick =  function () {document.getElementById("ToolTipBox").style.visibility = "hidden"};
    document.body.appendChild(tooltip);
    return tooltip;
  }

  //  -------------------------------------------------------------------------
  function resolveEvent (evt) {
    var e = evt || window.event;
    if (wordy) traceln ('resolveEvent ('+evtGetTarget(e).id+')');
    if (evtGetTarget(e).className == "ToolTip") {
      if (e.stopPropagation) 
        e.stopPropagation();    // at the right place we can stop event propagation
      e.cancelBubble = true;
    }
    return e;
  }

  //  -------------------------------------------------------------------------
  function positionToolTip (e) {  /* tip positioning */
    if(wordy) traceln ('positionToolTip ('+e+')');
    if (!e) return;
    var div = getToolTip() ;
    div.innerHTML = "Loading data ..." ;
    if (window.pageXOffset || window.pageYOffset) {
      x = window.pageXOffset+e.clientX ;
      y = window.pageYOffset+e.clientY ;
    } else if (document.documentElement.scrollTop || document.documentElement.scrollLeft) {
      x = document.documentElement.scrollLeft+e.clientX ;
      y = document.documentElement.scrollTop +e.clientY ;
    } else {      // ie < 6
      x = document.body.scrollLeft+e.clientX ;
      y = document.body.scrollTop +e.clientY ;
    }
    if (x > 500) {  // we put it on the left side of the event otherwise it might went leave the window
      x -= 250 ;
    }
    if (y > 300) {  // like with x
      y -= 30;
    }
    div.style.left = x+"px";
    div.style.top  = y+"px";
//    div.style.visibility = "visible" ;
    window.setTimeout('document.getElementById("ToolTipBox").style.visibility = "visible"', 2000);
  }

  //  -----------------------------------------------------------------------
  function displayTagToolTip (tagList) {
    if(wordy) traceln ('displayTagToolTip ('+tagList+')');
    if (!tagList) return;
    for (var i = 0 ; i < tagList.length ; i++) {
      if (tagList[i].getAttribute('id').search(tipId) >= 0) {
        var div = getToolTip() ;
        if (tagList[i].innerHTML) {
          div.innerHTML = tagList[i].innerHTML;
          div.style.top = Math.min(1.0*div.style.top.slice (0,div.style.top.length-2), (window.innerHeight ? window.innerHeight : document.documentElement.clientHeight)-div.offsetHeight-32)+"px";
        } else if (tagList[i].xml) {
          div.innerHTML = tagList[i].xml ;
        }
        if(wordy) traceln ('at: '+div.style.top+': '+div.innerHTML);
        break;
      }
    }
  }
  //  -----------------------------------------------------------------------
  function displayToolTip (response) {  // parsing of the reponse & loading the right tip
    if(wordy) traceln ('displayToolTip ('+response+')');
    responseHTML[lang ()]= createResponseHTML(selfURL.slice (0, selfURL.lastIndexOf('.')), response);
    displayTagToolTip (responseHTML[lang ()].getElementsByTagName("div"));
    displayTagToolTip (responseHTML[lang ()].getElementsByTagName("input"));
  }

  //  -------------------------------------------------------------------------
  function getTipContent () {
    if(wordy) traceln ('getTipContent ()');
    if (!responseHTML[lang ()]) {
      loadAndDo (getSelfPath ()+file+'_'+document.body.lang+'.xhtml', displayToolTip);
    } else {
      timeMulti[lang ()] = 1 ;
      displayToolTip(responseHTML[lang ()]);
    }
  }

  //  -------------------------------------------------------------------------
  function processToolTip (evt) {  // resolve event & set timeout & position Tip & get content 
    if(wordy) traceln ('processToolTip ('+evt+')');
    var e = resolveEvent (evt); 
    tipId = evtGetTarget(e).getAttribute("id");
    window.setTimeout(''+vname+'.hideToolTip()',timeout);
    if (tipId) {
      positionToolTip (e);
      getTipContent ();
    }
  }

  //  -------------------------------------------------------------------------
  function hideToolTip() {
    if(wordy) traceln ('hideToolTip()');
    if (lastTipId == tipId)
      getToolTip().style.visibility = "hidden" ;
    else 
      window.setTimeout(''+vname+'.hideToolTip()',timeout*timeMulti[lang ()]);
    lastTipId = tipId ;
  }

  //  -------------------------------------------------------------------------
  function addToolTipEvents (tag) {
//    if(wordy) traceln ('addToolTipEvents ('+tag+')');
    var tags = document.getElementsByTagName(tag);
    for (var i = 0 ; i< tags.length;i++) {
      if(tags[i].className.toLowerCase() == "tooltip") {
//        var text01 = 'this is '+tags[i].id+' : '+tags[i].innerHTML;
//        var func = function () {traceln (text01)};
        if (wordy) traceln ('will add mouseover-event to "'+ tags[i].id+'"'+' : '+tags[i].innerHTML);
        evtAdd(tags[i], "mouseover", processToolTip); // func);
      }
    }
  }

  //  -------------------------------------------------------------------------
  function addAllToolTipEvents () {
//    if(wordy) traceln ('addAllToolTipEvents ()');
    addToolTipEvents ("span");
    addToolTipEvents ("input");
    addToolTipEvents ("a");
    addToolTipEvents ("div");
  }

  //  -------------------------------------------------------------------------
  this.hideToolTip = hideToolTip;
  addAllToolTipEvents();
}

  //  -------------------------------------------------------------------------
function getFileName () {
  var fileName = deLocalizeLink (getSelfURL ());
  return fileName.slice (0, fileName.lastIndexOf('.'))
}

//  ---------------------------------------------------------------------------
  var toolTipTimer;    // we need the global variable name for window.setTimeout
  addLoadEvent(function () {toolTipTimer = new ToolTip('toolTipTimer', tipsPath+getFileName ()+'tips',6000)})
//  ---------------------------------------------------------------------------