var highlightDiv = document.getElementById("highlightDiv");
var highlightDivsRegion = document.getElementById("highlightDivsRegion");
var highlightTimeout = null;

if ( !highlightDiv ){
  document.write("<div id='highlightDiv' style='position:absolute;top:0;left:0;visibility:hidden;z-index:1;'></div>");
  highlightDiv = document.getElementById("highlightDiv");
}
if ( !highlightDivsRegion ){
  document.write("<div id='highlightDivsRegion' style='position:absolute;top:0;left:0;visibility:hidden;z-index:2;'></div>");
  highlightDivsRegion = document.getElementById("highlightDivsRegion");
}


function Browser() {
  var b = navigator.appName;
  if ( b.indexOf('Netscape') != -1 ) 
    this.b = "ns";
  else if ( ( b == "Opera" ) || ( navigator.userAgent.indexOf("Opera") > 0 ) ) 
    this.b = "opera";
  else if ( b == "Microsoft Internet Explorer" ) 
    this.b = "ie";
  if ( !b ) {
    this.b = "invalid"; 
    this.invalid=true;
  }
  this.version = navigator.appVersion;
  this.v = parseInt(this.version);
  this.ns = (this.b == "ns" && this.v >= 4);
  this.ns4 = (this.b == "ns" && this.v == 4);
  this.ns6 = (this.b == "ns" && this.v == 5);
  this.ie = (this.b == "ie" && this.v >= 4);
  this.ie4 = this.version.indexOf('MSIE 4') > 0;
  this.ie5 = this.version.indexOf('MSIE 5') > 0;
  this.ie55 = this.version.indexOf('MSIE 5.5') > 0;
  this.ie6= this.version.indexOf('MSIE 6') > 0;
  this.ie7= this.version.indexOf('MSIE 7') > 0;
  this.opera = (this.b == "opera");
  this.dom = (document.createElement && document.appendChild && document.getElementsByTagName) ? true:false;
  this.def = (this.ie || this.dom); // most used browsers, for faster if loops
  var ua = navigator.userAgent.toLowerCase();
  if ( ua.indexOf("win") > -1) 
    this.platform="win32";
  else if ( ua.indexOf("mac") > -1) 
    this.platform="mac";
  else 
    this.platform="other";
}
is = new Browser();

function empty(){}

var stdMouseX = -1, stdMouseY = -1;
var mouseMove = empty;

function stdMouseMove(e){
  if ( !isHighlightActive )
    return;
  if ( !e ) 
    e = window.event;
  if ( e.pageX || e.pageY ) {
    stdMouseX = e.pageX;
    stdMouseY = e.pageY;
  }
  else if ( e.clientX || e.clientY ) {
    stdMouseX = e.clientX + document.body.scrollLeft;
    stdMouseY = e.clientY + document.body.scrollTop;
  }
  mouseMove(e);
}

if ( window.addEventListener )
  window.addEventListener("mousemove", stdMouseMove, true)
else if ( document.captureEvents )
  document.captureEvents(Event.MOUSEMOVE);

var highlightDivs = new Array();
var isHighlightActive = false;

function clearHighlights(){
  prepareHighlightDivsRegion();
}

function addHighlightDiv(highlightId, highlightContent){
  if ( highlightContent )
    highlightDivs[highlightId] = highlightContent;
}

function removeHighlight(highlightId){
  highlightDivs[highlightId] = null;
}

function showHighlight(highlightId, hideItems){
  if ( !highlightDivs[highlightId] )
    return;
  if ( isHighlightActive )
	return;
  highlightDivsRegion.innerHTML = highlightDivs[highlightId];
  isHighlightActive = true;
  document.onmousemove = stdMouseMove;
  //refreshHighlightPosition(hideItems);
  highlightTimeout = setTimeout("refreshHighlightPosition("+hideItems+")", 10);
}

function refreshHighlightPosition(hideItems){
  if ( !isHighlightActive ){
    hideHighlight();
    return;
  }
  getCurrentWindowSize();
  var leftPos = stdMouseX+15;
  var topPos = stdMouseY-(highlightDivsRegion.offsetHeight)/2;
  if ( leftPos+highlightDivsRegion.offsetWidth >= winW-20 )
    leftPos = stdMouseX-15-highlightDivsRegion.offsetWidth;
  if ( topPos < document.body.scrollTop )
    topPos = document.body.scrollTop;
  else if ( topPos+highlightDivsRegion.offsetHeight > document.body.offsetHeight+document.body.scrollTop )
    topPos = document.body.offsetHeight+document.body.scrollTop-highlightDivsRegion.offsetHeight;
  highlightDivsRegion.style.left = leftPos;
  highlightDivsRegion.style.top = topPos;
  highlightDivsRegion.style.visibility = "visible";
  if ( hideItems )
    hideElementsIfNeeded(highlightDivsRegion);
  highlightTimeout = setTimeout("refreshHighlightPosition("+hideItems+")", 500);
}

function hideHighlight(){
  if ( isHighlightActive ){
    isHighlightActive = false;
    clearTimeout(highlightTimeout);
    highlightDivsRegion.innerHTML = "";
    highlightDivsRegion.style.position = "absolute";
    highlightDivsRegion.style.top = 0;
    highlightDivsRegion.style.left = 0;
    highlightDivsRegion.style.visibility = "hidden";
    unhideElements();
    document.onmousemove = null;
  }
}

function addCustomHighlightDivProperties(customHighlightDivName){
   var customHighlightDiv = document.getElementById(customHighlightDivName);
   customHighlightDiv.style.position = "absolute";
   customHighlightDiv.style.top = 0;
   customHighlightDiv.style.left = 0;
   customHighlightDiv.style.visibility = "hidden";
   customHighlightDiv.style.zIndex = 3;
   return customHighlightDiv;
}