// some JavaScript routines for oz.stephan-brumme.com
// shortened version of the JavaScript code of www.stephan-brumme.com

// these lines are copyrighted !

// send me a short eMail (mail@stephan-brumme.com) if you like to include some stuff
// in your sites


////////////////////////////////////
// browser settings
var userAgent = navigator.userAgent.toLowerCase();
var ie    = document.all;
var opera = (userAgent.indexOf('opera')>0)?true:false;
var moz   = (document.getElementById && !document.all);
var w3c   = document.documentElement;
var dhtml = true;//(ie || w3c) && !opera;

var ns6 = (document.getElementById)?true:false;
var ie4 = (document.all)?true:false;
var ie5 = false; // includes 5.0, 5.5, 6.0, ...

var ie6 = (userAgent.indexOf('msie 6')>0)?true:false;
// Microsoft Stupidity Check(tm)
if (ie4)
{
   if (userAgent.indexOf('msie')>0 &&
      userAgent.indexOf('msie 4')<0)
      ie5 = true;
   ns6 = false;
}


// --------------------------------------------------------------------------------------
// mouse capture stuff, partially taken from Erik Bosrup's overLIB (+tooltip code below)

var tooltipshown  = false;
var tooltipheight =     0;
var mousex = -100;
var mousey = -100;

// capture mouse movements
function MouseMove(e)
{
   if (!dhtml)
      return;

   // determine mouse cursor position (depends on browser vendor/version)
   if (ie)
   {
      mousex = window.event.clientX;
      mousey = window.event.clientY;
      if (mousey >= document.body.clientHeight-tooltipheight)
         mousey  = document.body.clientHeight-tooltipheight;
      mousex += document.body.scrollLeft;
      mousey += document.body.scrollTop;
   }
   else
   {
      mousex = e.pageX;
      mousey = e.pageY;
   }

   // move tooltip
   if (tooltipshown)
   {
      document.getElementById("tooltipDiv").style.left  = mousex+15;
      document.getElementById("tooltipDiv").style.top   = mousey;
   }
}


// --------------------------------------------------------------------------------------
// change an image (if mouse hovers over it)

function SwitchImage(id, newimage)
{
   if (document.images && dhtml)
      document.images[id].src = eval(newimage+'.src');
}


// --------------------------------------------------------------------------------------
// tranparency helper function
function SetOpacity(element, alpha)
{
   if (ie)
      document.getElementById(element).style.filter = "alpha(opacity="+alpha+
                                                      ", finishopacity="+alpha+")";
   if (moz)
      document.getElementById(element).style.MozOpacity = alpha/100.0;
}


// --------------------------------------------------------------------------------------
// tooltips

var fadeelement   =  null;
var fadeoffset    =     5;
var fadeincrement =     0;
var fadevalue     =     0;
var fadetimeout   =    10;
var fadetimer     =    -1;

var fadeover = 0;
var fadeout  = 0;
function showtooltip(text)
{
   if (!dhtml)
      return;

   with (document.getElementById("tooltipDiv"))
   {
      style.left  = mousex+15;
      style.top   = mousey;
      innerHTML   = text;
      style.visibility = "visible";
   }

   if (ie6 || moz)
   {
      // alpha fade effect
      if (fadeincrement <= 0)
         fadeincrement = fadeoffset;
      else
         fadeincrement *= 2;

      if (fadetimer == -1)
         setTimeout("fadetooltip()", fadetimeout);
   }
   else
   {
      fadevalue = 100;
      fadeincrement = 0;
   }

   tooltipshown = true;
}


// called by IE and Mozilla only
function fadetooltip()
{
   with (document.getElementById("tooltipDiv"))
   {
      // keep on moving !!!
      style.left  = mousex+15;
      style.top   = mousey;
   }

   // clamp to 0..80%
   fadevalue += fadeincrement;

   if (fadevalue >= 100)
   {
      fadevalue = 100;
      fadeincrement = 0;
   }

   // hide tooltip
   if (fadevalue <= 0)
   with (document.getElementById("tooltipDiv").style)
   {
      fadevalue = 0;
      fadeincrement = 0;
      visibility = "hidden";
      left  = -100;
      top   = -100;
   }

   // set alpha
   if (fadevalue >= 0)
      SetOpacity("tooltipDiv", fadevalue*0.8);

   // initiate next fade step
   if (fadeincrement != 0)
      fadetimer = window.setTimeout("fadetooltip()", fadetimeout);
   else
      fadetimer = -1;
}


// generate HTML code for the tooltip
function showinfotooltip(element, info, url, filename, size, date)
{
   // save reference to element
   fadeelement = element;

   // it's a table ...
   var result = '<table border="0" cellspacing="0" cellpadding="0">';

   // text for status bar
   var status = "";

   tooltipheight = 0;

   // info section
   if (info)
   {
      result += '<tr><td class="header" colspan="3">&nbsp;info'+
                '</td></tr><tr><td class="main" colspan="3">'+info+'</td></tr>';
      status = info;
      tooltipheight += 32;

      // multi-line tooltips ...
      zeilen = status.match(/<br>/);
      if (zeilen)
         tooltipheight += zeilen.length*13;
   }

   // URL
   if (url)
   {
      result += '<tr><td class="header" colspan="3">&nbsp;URL'+
                '</td></tr><tr><td class="main" colspan="3">'+url+'</td></tr>';
      if (url.charAt(0) == '/')
         url = 'oz.stephan-brumme.com'+url;
      status = 'go to "'+url+'"';
      tooltipheight += 32;
   }

   // filename (status bar depends on extension !)
   if (filename)
   {
      result += '<tr><td class="header" colspan="3">&nbsp;datei'+
                '</td></tr><tr><td class="main" colspan="3">'+filename+'</td></tr>';
      status = 'download';

      var tempfilename = filename.toLowerCase();
      if (tempfilename.indexOf(".pdf") > 0 ||
         tempfilename.indexOf(".jpg") > 0 ||
         tempfilename.indexOf(".gif") > 0 ||
         tempfilename.indexOf(".chm") > 0)
         status = 'view';
      if (tempfilename.indexOf(".exe") > 0)
         status = 'start';

      status += ' "'+filename+'"';
      tooltipheight += 32;
   }

   // size 'n' date
   if (size && date)
   {
      result += '<tr><td class="header">&nbsp;gr&ouml;&szlig;e</td>'+
                '<td class="header" width="10">&nbsp;</td>'+
                '<td align="right" class="header">datum&nbsp;</td></tr>'+
                '<tr><td class="main">'+size+'</td>'+
                '<td class="main">&nbsp;</td>'+
                '<td align="right" class="main">'+date+'</td></tr>';
      status += " ("+size+", "+date+")";
      tooltipheight += 32;
   }

   // show tooltip
   result += "</table>";
   showtooltip(result);

   // fade out if element loses focus
   element.onmouseout = hidetooltip;

   // show status bar, remove HTML tags
   window.status = status.replace(/<.*>/, ' ');

   // fade the corresponding hyperlink, too
   return true;
}


// well, hide those tooltips ;-)
function hidetooltip()
{
   if (!tooltipshown)
      return;

   // fading works only for IE and Mozilla
   if (!ie6 && !moz)
   {
      fadevalue = 0;
      fadeincrement = 0;
   }

   // fade out much slower than fade in
   fadeincrement = -0.5*fadeoffset;
   if (fadetimer == -1)
      setTimeout("fadetooltip()", fadetimeout);

   // no tooltip visible anymore
   tooltipshown = false;

   // clear status bar
   window.status = "";
}


// --------------------------------------------------------------------------------------
// Debugging code

function alwaysTrue()
{
   return true;
}

function alwaysFalse()
{
   return false;
}


// --------------------------------------------------------------------------------------
function Init()
{
   // capture mouse
   document.onmousemove = MouseMove;

   // default: no status text (overridden by file hyperlinks)
   window.defaultStatus = " ";
   window.status = " ";

   // block errors
   //window.onerror = alwaysTrue;

   // prevent users from selecting text or using drag'n'drop
   document.onselectstart = alwaysFalse;
   document.ondragstart   = alwaysFalse;
}