// Variables
var objCurrentRegion;
var objDelayHide;
var objRegions=new Object;
var intDelay=0;



// Management Functions
function CreateRegion(strCode, intDelay, intTop, intLeft, blnUseOffset, intFrameOffset)
{
   var objTemp=new Object();

   objTemp.Delay=intDelay
   objTemp.Top=intTop
   objTemp.Left=intLeft
   objTemp.UseOffset=blnUseOffset
   objTemp.FrameOffset=intFrameOffset

   objRegions[strCode]=objTemp;

   WriteRegion(strCode);
}


function GetRegionObjectProp(strProp)
{
   return objRegions[strProp];
}


function GetRegionProp(strCode, strProp)
{
   return objRegions[strCode][strProp];
}


function SetRegionObjectProp(strProp, varValue)
{
   var varReturnValue=GetRegionObjectProp(strProp);

   objRegions[strProp]=varValue;
   return varReturnValue;
}


function SetRegionProp(strCode, strProp, varValue)
{
   var varReturnValue=GetRegionProp(strCode, strProp);

   objRegions[strCode][strProp]=varValue;
   return varReturnValue;
}



// Display Functions
function WriteRegion(strRegion)
{
   document.write('<div id="'+strRegion+'" style="visibility:hidden;" onMouseover="ClearHideRegion()" onMouseout="DelayHideRegion()"></div>');
}

function ShowRegion(strRegion, strRegionContents, objLink, objEvent)
{
   if (window.event)
      event.cancelBubble=true;
   else if (objEvent.stopPropagation)
      objEvent.stopPropagation();

   if (typeof objCurrentRegion!="undefined")
      HideRegion();

   ClearHideRegion();

   intDelay=GetRegionProp(strRegion, "Delay");

   objCurrentRegion=document.getElementById? document.getElementById(strRegion) : eval(strRegion);

   objCurrentRegion.innerHTML=strRegionContents.join("");
   objCurrentRegion.style.visibility="visible";
   objCurrentRegion.style.top=GetRegionProp(strRegion, "Top")+document.body.scrollTop+"px";

   if (GetRegionProp(strRegion, "UseOffset"))
      objCurrentRegion.style.left=(GetPosOffset(objLink, "left")+GetRegionProp(strRegion, "FrameOffset"))-ClearBrowserEdge(objLink, "rightedge")+"px";
   else
      objCurrentRegion.style.left=GetRegionProp(strRegion, "Left");

   return true;
}

function HideRegion()
{
   if (typeof objCurrentRegion!="undefined")
      objCurrentRegion.style.visibility="hidden";
}

function DelayHideRegion()
{
   objDelayHide=setTimeout("HideRegion()",intDelay);
}

function ClearHideRegion()
{
   if (typeof objDelayHide!="undefined")
      clearTimeout(objDelayHide);
}



// Positioning Functions
function GetPosOffset(objLink, strOffsetType)
{
   var intTotalOffset=(strOffsetType=="left")? objLink.offsetLeft : objLink.offsetTop;
   var objParent=objLink.offsetParent;

   while (objParent!=null)
   {
      intTotalOffset=(strOffsetType=="left")? intTotalOffset+objParent.offsetLeft : intTotalOffset+objParent.offsetTop;
      objParent=objParent.offsetParent;
   }

   return intTotalOffset;
}

function ClearBrowserEdge(objLink, strEdge)
{
   var intEdgeOffset=0;
   var intWindowEdge;

   if (strEdge=="rightedge")
   {
      intWindowEdge=document.all && !window.opera? IECompatTest().scrollLeft+IECompatTest().clientWidth-15 : window.pageXOffset+window.innerWidth-15;

      objCurrentRegion.contentmeasure=objCurrentRegion.offsetWidth;
      if (intWindowEdge-objCurrentRegion.x < objCurrentRegion.contentmeasure)
         intEdgeOffset=objCurrentRegion.contentmeasure-objLink.offsetWidth;
   }
   else
   {
      var intTopEdge=document.all && !window.opera? IECompatTest().scrollTop : window.pageYOffset;

      intWindowEdge=document.all && !window.opera? IECompatTest().scrollTop+IECompatTest().clientHeight-15 : window.pageYOffset+window.innerHeight-18;

      objCurrentRegion.contentmeasure=objCurrentRegion.offsetHeight;
      if (intWindowEdge-objCurrentRegion.y < objCurrentRegion.contentmeasure)
      {
         intEdgeOffset=objCurrentRegion.contentmeasure+objLink.offsetHeight;
         if ((objCurrentRegion.y-intTopEdge)<objCurrentRegion.contentmeasure)
           intEdgeOffset=objCurrentRegion.y+objLink.offsetHeight-intTopEdge;
      }
   }

   return intEdgeOffset;
}

function IECompatTest()
{
   return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}
