// Generic Popups JavaScript library.
var curkey=new Array(); // Array of current popups by menuid
var NSMouseOver=true;  // Used for flagging when NS4 is over a layer or not
var curcallout=new Array();
var mouseoverlayer=new Array();
var hilightitem=new Array();
var DHTML = (document.getElementById || document.all || document.layers);
var debugflag=0;
var layerparents=new Array();
var MenuXOffset=0 // $MenuWidth
// var DebugMode=<IF DEBUG>1<ELSE>0</IF>


if (document.layers)
{
   document.captureEvents(Event.MOUSEDOWN);
   document.onmousedown = clickCatcher;
}

function registerPopup(name)
{
// Hack to fix IE collapsed table border bug...
//   var x=new getObj(name);
//   x.style.visibility='visible';
//   setTimeout("visPopup('"+name+"','hidden');",1);
}

function getObj(name)
{
   if (document.getElementById)
   {
//      alert('Using getElementById...');
      this.obj = document.getElementById(name);
      if (this.obj)
         this.style = document.getElementById(name).style;
   }
   else if (document.all)
   {
      this.obj = document.all[name];
      this.style = document.all[name].style;
   }
   else if (document.layers)
   {
      this.obj = document.layers[name];
      this.style = document.layers[name];
   }
//   alert('Done getting Obj!');
}

function getStyle(elmnt,prop)
{
   return document.defaultView.getComputedStyle(elmnt, '').getPropertyValue(prop);
}

function TotalOffset(elmnt,prop)
{
   var val = elmnt[prop];
//   var plist = elmnt+"/"+val+"\n  ";
   while (elmnt.offsetParent)
   {
      elmnt=elmnt.offsetParent;
//      plist += elmnt+"/"+elmnt[prop]+"\n  ";
      val+=elmnt[prop] || 0;
   }
//   alert("plist: "+plist);
   return val;
}

function visPopup(elmnt,vis)
{
   if (!DHTML) return;
   var x=new getObj(elmnt);
   var link=new getObj('SPAN_'+elmnt);
   var ns4link=new getObj('NS4SPAN_'+elmnt);
   if ((link || ns4link) && vis!='hidden')
   {
      if (document.layers && document.layers[elmnt] && ns4link)
      {
// NS4 layer reposition.
// alert("NS4: "+ns4link.obj.pageX+'/'+ns4link.obj.document.height+'/'+ns4link.style.height);
         x.obj.left = ns4link.obj.pageX+MenuXOffset;
         x.obj.top = ns4link.obj.pageY;
      }
      else if (document.getElementById)
      {
// NS6 layer reposition.
//      alert("NS6 Offset: "+TotalOffset(link,"offsetLeft")+"x"+TotalOffset(link,"offsetTop"));
        x.style.left = TotalOffset(link.obj,'offsetLeft')+MenuXOffset; // (TotalOffset(link,"offsetLeft")+MenuXOffset)+"px"; // Was link
         x.style.top = TotalOffset(link.obj,'offsetTop'); // TotalOffset(link,"offsetTop")+"px";
//         x.style.left = link.obj.offsetLeft+MenuXOffset; // (TotalOffset(link,"offsetLeft")+MenuXOffset)+"px"; // Was link
//         x.style.top = link.obj.offsetTop+"px"; // TotalOffset(link,"offsetTop")+"px";
         DebugMsg('Coords: '+(link.obj.offsetLeft+MenuXOffset)+'/'+link.obj.offsetTop+' or '+(TotalOffset(link.obj,"offsetLeft")+MenuXOffset)+'/'+TotalOffset(link.obj,"offsetTop"));
      }
      else if (document.all)
      {
// IE 4/5 layer reposition.
//      alert("IE Offset: "+x.obj.offsetLeft+"x"+x.obj.offsetTop);
         x.style.posLeft = TotalOffset(link.obj,'offsetLeft')+MenuXOffset;
         x.style.posTop = TotalOffset(link.obj,'offsetTop');
      }
   }
   else
   {
//      alert('No object SPAN_'+elmnt);
   }

   x.style.visibility=vis;

//   alert('Style set!');
}

function showPopup(elmnt,mid,menudiv,colorhi,colornorm)
{
   DebugMsg("Showing "+elmnt+" - prev was "+curkey[mid]);
   var st = "";
   for (var i in mouseoverlayer)
   {
      st+=i+"="+mouseoverlayer[i]+"  ";
   }
   DebugMsg(st);
   
   if (curkey[mid] && curkey[mid]!=elmnt)
   {
      hidePopup(curkey[mid],mid);
   }
   curkey[mid]=elmnt;

   mouseoverlayer[elmnt]=true;
   hilightitem[elmnt] = new Array(menudiv,colorhi,colornorm);
   visPopup(elmnt,"visible");
   var x=new getObj(menudiv);
   if (x.obj)
   {
      x.style.backgroundColor = colorhi;
   }
//   x=new getObj(elmnt+'_field');
//   if (x.obj)
//   {
//      x.obj.focus();
//      x.obj.select();
//   }
}

function hidePopup(elmnt,mid)
{
//   alert("Hiding "+elmnt);
//   DebugMsg("Hiding "+elmnt);
   curkey[mid]="";
   visPopup(elmnt,"hidden");
   var x=new getObj(hilightitem[elmnt][0]);
   if (x.obj)
   {
      x.style.backgroundColor = hilightitem[elmnt][2];
   }
   if (curcallout[elmnt]) clearTimeout(curcallout[elmnt]);
}

function slowhidePopup(elmnt)
{
//   alert("Slow Hiding "+elmnt);
   if (curcallout[elmnt])
   {
      clearTimeout(curcallout[elmnt]);
   }
   curcallout[elmnt]=setTimeout("hidePopup('"+elmnt+"');",5000);
}

function cancelhidePopup(elmnt)
{
   if (curcallout[elmnt]) clearTimeout(curcallout[elmnt]);
}

function hidecurrentPopup(mid)
{
   if (curkey[mid]) hidePopup(curkey[mid],mid);
}

function mouseOver(elmnt)
{
//   DebugMsg("Mouse over "+elmnt);
   cancelhidePopup(elmnt);
   mouseoverlayer[elmnt]=true;
}

function mouseOut(elmnt)
{
//   DebugMsg("Mouse out of "+elmnt);
   slowhidePopup(elmnt);
   mouseoverlayer[elmnt]=false;
}

function DebugMsg(msg)
{
   debugflag++;
   window.status=debugflag+": "+msg;
}

function NSMouseChange(status)
{
   DebugMsg("NS Mouse Status - "+status);
   NSMouseOver = status;
}

function clickCatcher(e)
{
   DebugMsg("Something Clicked!");
   for (var eachkey in curkey)
   {
      if (curkey[eachkey] && (!mouseoverlayer[curkey[eachkey]] || !NSMouseOver))
      {
         DebugMsg("Hiding "+curkey[eachkey]+" due to click elsewhere");
         hidePopup(curkey[eachkey]);
      }
   }
}

function MenuHilight(obj,style)
{
   obj.className = style;
   while (obj.tagName!="TD" && obj.parentNode)
   {
      obj = obj.parentNode;
   }
   if (obj.tagName=="TD")
   {
      obj.className = style;
   }
}

function dumpProps(obj, parent) {
   for (var i in obj) {
      if (parent) { msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
      if (!confirm(msg)) { return; }
      if (typeof obj[i] == "object") {
         if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
      }
   }
}

function testit()
{
//   var x = new getObj("IMDB_img");
//   alert("For IMDB img: "+document.images.IMDB_img.left);
}
 // -->
