//

// Bubblehelp infoboxes, (C) 2002 Klaus Knopper <infobox@knopper.net>

// You can copy/modify and distribute this code under the conditions

// of the GNU GENERAL PUBLIC LICENSE Version 2.

//

var IWIDTH=250  // Tip box width

var IHEIGHT = 300;// Tip box height (approx)

var ns6         // Arw we using Netscape6? // Knito
var ns4         // Are we using Netscape4?
var ie4         // Are we using Internet Explorer Version 4?
var ie5         // Are we using Internet Explorer Version 5 and up?
var kon         // Are we using KDE Konqueror?
var opera       // Are we using Opera?

var x,y,winW,winH  // Current help position and main window size
var idiv=null   // Pointer to infodiv container
var idiv1=null  // helper for iframe-hack
var px="px"     // position suffix with "px" in some cases
var aDaten = new Array();
var idivTitle=null
var idivText=null

function nsfix(){setTimeout("window.onresize = rebrowse", 2000);}

function rebrowse(){window.location.reload();}

function hascss(){ return gettip('infodiv')?true:false }

function infoinit(){
 
 ns6=(document.getElementById && !document.all)?true:false;
 ns4=(document.layers)?true:false;
 ie4=(document.all)?true:false;
 ie5=((ie4)&&((navigator.userAgent.indexOf('MSIE 5')>0)||(navigator.userAgent.indexOf('MSIE 6')>0)))?true:false;
 kon=(navigator.userAgent.indexOf('konqueror')>0)?true:false;
 
 opera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; 
 
 x=0;y=0;winW=800;winH=600;
 idiv=null;
 addMouseMove(mousemove);
 //document.onmousemove = mousemove;
 if(ns4&&document.captureEvents) document.captureEvents(Event.MOUSEMOVE);
 // Workaround for just another netscape bug: Fix browser confusion on resize
 // obviously conqueror has a similar problem :-(
 if(ns4||kon||opera){ nsfix() }
 if(ns4) { px=""; }
}

function untip(){
 if(idiv) idiv.visibility=ns4?"hide":"hidden";
 if(idiv) idiv.display="none";
 idiv=null;
}

function gettip(name){return (document.layers&&document.layers[name])?document.layers[name]:(document.all&&document.all[name]&&document.all[name].style)?document.all[name].style:document[name]?document[name]:(document.getElementById(name)?document.getElementById(name).style:0);}

// Prepare tip boxes, but don't show them yet
function maketip(name,title,text){
    aDaten[name] = new Array();
    aDaten[name]['title'] = title;
    aDaten[name]['text']  = text;
 //if(hascss()) document.write('<div id="'+name+'" name="'+name+'" style="position:absolute; visibility:hidden; z-index:20; top:0'+px+'; left:0'+px+';"><div class="overLayInfoBox"><div class="overLayInfoBoxHeading">'+title+'</div><div class="overLayInfoBoxText">'+text+'</div></div></div>'+"\n");
}

function tip(name){
 if(hascss()){
  //if(idiv) untip();

  idiv=gettip('infodiv');
  idivTitle = document.getElementById('infoDivTitle');
  idivText  = document.getElementById('infoDivText');
  idivTitle.innerHTML = aDaten[name]['title'];
  idivText.innerHTML = aDaten[name]['text'];
  if(idiv){
   winW=(window.innerWidth)? window.innerWidth+window.pageXOffset-16:document.body.offsetWidth-20;
   winH=(window.innerHeight)?window.innerHeight+window.pageYOffset  :document.body.offsetHeight;
   if(x<=0||y<=0){ // konqueror can't get mouse position
    x=(winW-IWIDTH)/2+(window.pageXOffset?window.pageXOffset:0); y=(winH-50)/2+(window.pageYOffset?window.pageYOffset:0); // middle of window
   }
   showtip(name);
  }
 }
}

function showtip_orig(){
  idiv.left = (((x+520) < winW) ? x+12 : x - 520 -12)+px; 
  idiv.top = (((y+300)<winH)?y+12:y-300-12)+px;  
  //idiv.left=00;//(((x+260)<winW)?x+12:x-255)+px; 
  //idiv.top=00;//(((y+90)<winH)?y+12:y-90)+px;
  idivText  = document.getElementById('infoDivText');
  //idivText.innerHTML = idivText.innerHTML + '<br />' + x + '  ' +winW + '  ' +  (((x+280) < winW) ? x+12 : x-280)+px + '<br />' + x + '  ' +winH + '   ' + (((y+300)<winH)?y+12:y-300)+px;
  idiv.visibility=ns4?"show":"visible";
  idiv.display="block";
//  window.status="idiv="+idiv+"X:"+(idiv.left?idiv.left:"NAN")+", Y:"+(idiv.top?idiv.top:"NAN")+", x:"+x+", y:"+y;
}

function setTipHeight(h){
     IHEIGHT=h;  
}

function showtip(name){
  // this function replaces the original infobox.js::showtip() which was loaded before
  // using getScrollXY() it is capable of respecting scrolled positions
  // knito - at - knito - dot - de 2005-03-03 http://www.ingoknito.de

  var xy;
  xy = getScrollXY();
  //alert(IWIDTH +'-'+ x +'-'+ winW +'-'+ px );

  var l = (((x+IWIDTH+20)<winW)?x+12:x-IWIDTH-5)+ xy[0]+px;

  idiv.left=l;
  
  //ermittlung der ebötigten Höhe
  var tipImg = el('img-'+name);
  if(tipImg && tipImg.height>IHEIGHT){
      IHEIGHT = tipImg.height+50;
      //alert(IHEIGHT);
  }  
  
  var rest = winH-IHEIGHT-y;
  idiv.top=(((y+IHEIGHT)<winH)?y+12: y+rest)+xy[1]+px;
  idiv.visibility=ns4?"show":"visible";
  idiv.display="block";
}

// getScrollXY() 
// found at http://www.howtocreate.co.uk/tutorials/index.php?tut=0&part=16 on 2005-03-02
// JavaScript tutorial 
// Part 16 of 29; Obtaining the browser window size

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( opera || typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = 0; // window.pageYOffset;
    scrOfX = 0; // window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement &&
      ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function mousemove(e){
 if(e)   {x=e.pageX?e.pageX:e.clientX?e.clientX:0; y=e.pageY?e.pageY:e.clientY?e.clientY:0;}
 else if(event) {x=event.clientX; y=event.clientY;}
 else {x=0; y=0;}
 if((ie4||ie5) && document.documentElement) // Workaround for scroll offset of IE
  {
    x+=document.documentElement.scrollLeft;
    y+=document.documentElement.scrollTop;
  }
 if(idiv) showtip();
}

// Initialize after loading the page

//window.onload=infoinit;
addLoadEvent(infoinit);

// EOF infobox.js
