var tooltipTitleTemp;

function getEventTarget(e)
{
  if( !e ) return null;
  
  var targ;
  if( e.target ) targ = e.target;
  else if( e.srcElement ) targ = e.srcElement;
  if( targ.nodeType == 3 ) // defeat Safari bug
    targ = targ.parentNode;
  else if( targ.nodeType == 1 && targ.tagName == "IMG" ) // want the link surrounding the image
    targ = targ.parentNode;
  
  return targ;
}

function tooltipSetup(e)
{
  if( document.getElementById && document.getElementsByName ) {
    if( list = document.getElementsByName("thumbnail") ) {
      var item;
      for( var i = 0; i < list.length; i++ ) {
        item = list.item(i);
        item.onmouseover = tooltipShow;
        item.onmouseout  = tooltipHide;
      }
    }
  }
}

function tooltipShow(e)
{
  var tip;
  var targ;
  if( !(tip = document.getElementById("imgtooltip")) ) return;
  if( !e ) var e = window.event;

  if( targ = getEventTarget(e) ) {
    tooltipTitleTemp = targ.title;
    targ.title = "";
    if( targ.hasChildNodes )
      for( var i = 0; i < targ.childNodes.length; i++ )
        if( targ.childNodes.item(i).nodeType == 8 ) { // COMMENT_NODE
          tooltipSetText(tip,targ.childNodes.item(i).data);
          break;
        }
  }
  
  tip.style.display = "block";
  if( e ) {
    tooltipUpdatePos(e);
  }
  else {
    tip.style.top = "200px";
    tip.style.left = "200px";
  }
  document.onmousemove = tooltipUpdatePos;
}

function tooltipHide(e)
{
  var tip;
  if( !(tip = document.getElementById("imgtooltip")) ) return;

  if( targ = getEventTarget(e) ) {
    targ.title = tooltipTitleTemp;
    tooltipTitleTemp = "";
  }
  
  tip.style.display = "none";
  document.onmousemove = null;
}

function tooltipUpdatePos(e)
{
  var posx = 0;
  var posy = 0;
  var padx = 15;
  var pady = 5;
  var tip;
  if( !(tip = document.getElementById("imgtooltip")) ) return;
  if( !e ) var e = window.event;
  if( e.pageX || e.pageY ) {
    posx = e.pageX;
    posy = e.pageY;
  }
  else if (e.clientX || e.clientY) {
    posx = e.clientX + document.body.scrollLeft;
    posy = e.clientY + document.body.scrollTop;
  }
  
  // posx and posy contain the mouse position relative to the document
  tip.style.top = (posy + pady) + "px";
  tip.style.left = (posx + padx) + "px";
  //tooltipSetText(tip,"x = " + posx + "<br>y = " + posy);
}

function tooltipSetText(tip,text)
{
  while( tip.hasChildNodes() )
    tip.removeChild(tip.firstChild);
  if( !text ) return;
  
  var re = new RegExp("(<br[^>]*>|\\n|\n)","igm");
  var pieces = text.split(re);
  var node;
  for( var i = 0; i < pieces.length; i++ ) {
    if( !re.test(pieces[i]) ) {
      node = document.createTextNode(pieces[i]);
      tip.appendChild(node);
      node = document.createElement("br");
      tip.appendChild(node);
    }
  }
}

