/* orig from Dynamic Drive.  Major rewrite by Gregory Whitcomb, Feb. 11, 2008 */

var disappeardelay=50;  //menu disappear speed onMouseout (in miliseconds)
var enableanchorlink=0; //Enable or disable the anchor link when clicked on? (1=e, 0=d)
var hidemenu_onclick=1; //hide menu when user clicks within menu? (1=yes, 0=no)
var horizontaloffset=0; //horizontal offset of menu from default location. (0-5 is a good value)

var ie5=document.all;
var ns6=document.getElementById&&!document.all;

function gettopoffset(what)
{
   var totaloffset = what.offsetTop;
//debug('gettopoffset: what.offsetTop=' + what.offsetTop.toString());
   var parentEl=what.offsetParent;
   while (parentEl!=null){
/*      debug('gettopoffset: tag: '+parentEl.tagName+', id='+parentEl.id + ', parentEl.parentEl.offsetTop='+
		 parentEl.offsetTop.toString() + ', class=' + parentEl.className + ', style.top='+parentEl.style.top.toString());*/
      totaloffset += parentEl.offsetTop;
//      debug('gettopoffset: parentEl.offsetTop='+parentEl.offsetTop.toString()+', totaloffset='+totaloffset.toString());
	  parentEl=parentEl.offsetParent;
      }
return totaloffset;
}
	
function getleftoffset(what)
{
   var totaloffset = what.offsetLeft;
//   debug('getleftoffset: what.offsetWidth=' + what.offsetWidth + ', offsetLeft=' + what.offsetLeft.toString());
   var parentEl=what.offsetParent;
   while (parentEl!=null){
/*      debug('getleftoffset: tag: '+parentEl.tagName+', id='+parentEl.id + ', parentEl.offsetLeft='+
		 parentEl.offsetLeft.toString() + ', offsetWidth=' + parentEl.offsetWidth + ', class=' + parentEl.className + 
		    ', style.top='+parentEl.style.left.toString());*/
      totaloffset += parentEl.offsetLeft;
//      debug('getleftoffset: parentEl.offsetLeft='+parentEl.offsetLeft.toString()+', totaloffset='+totaloffset.toString());
	  parentEl=parentEl.offsetParent;
      }
return totaloffset;
}

function showhide(obj, e, visible, hidden){
   if (ie5||ns6)
      dropmenuobj.style.left=dropmenuobj.style.top=-500;
   if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
      obj.visibility=visible;
   else if (e.type=="click")
      obj.visibility=hidden;
}

function iecompattest(){
   return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

function getobjleft(obj)
{
//debug('in getobjleft, obj.offsetWidth='+obj.offsetWidth.toString());
   return obj.offsetWidth;  // always put submenus to the right
}
/*   
debug('in getobjleft');
debug('  ie5='+(ie5?"true":"false"));
   var objleft = obj.offsetLeft;
   debug('obj.offsetLeft='+objleft.toString());
   var windowedge=ie5 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth : window.pageXOffset+
      window.innerWidth;
   debug('windowedge='+windowedge.toString());
   debug('dropmenuobj.offsetWidth='+dropmenuobj.offsetWidth.toString()+', obj.offsetWidth='+obj.offsetWidth.toString());
   dropmenuobj.contentmeasure=dropmenuobj.offsetWidth;
   if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure)
      objleft=dropmenuobj.contentmeasure+obj.offsetWidth+(horizontaloffset*2); 
debug('  edgeoffset='+edgeoffset.toString());
   return edgeoffset;
}
*/

function getobjtop(obj){
   var objtop=obj.offsetTop;
   var topedge=ie5 && !window.opera? iecompattest().scrollTop : window.pageYOffset;
   var windowedge=ie5 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight : window.pageYOffset+
      window.innerHeight;
   dropmenuobj.contentmeasure=dropmenuobj.offsetHeight;
   if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move menu up?
	  var rawoffset = (dropmenuobj.contentmeasure-(windowedge-dropmenuobj.y));
      objtop=obj.offsetTop-Math.ceil(rawoffset/obj.offsetHeight)*obj.offsetHeight;
      if (topedge > dropmenuobj.y-obj.offsetTop) //up no good either? (position at top of viewable window then)
         objtop=obj.offsetTop+Math.ceil((topedge-dropmenuobj.y)/obj.offsetHeight)*obj.offsetHeight;
      }
return objtop;
}

function dropdownmenu(obj, e, dropmenuID)
{
   if (window.event) event.cancelBubble=true;
   else if (e.stopPropagation) 
      e.stopPropagation()
   if (typeof dropmenuobj!="undefined") //hide previous menu
      dropmenuobj.style.visibility="hidden";
   clearhidemenu();
   if (ie5||ns6)
      {
      obj.onmouseout=delayhidemenu;
      dropmenuobj=document.getElementById(dropmenuID);
      if (hidemenu_onclick) dropmenuobj.onclick=
         function()
            {
            dropmenuobj.style.visibility='hidden';
            };
//   debug('obj.tagName='+obj.tagName);
//   debug('dropmenuobj.tagName='+dropmenuobj.tagName);
      dropmenuobj.onmouseover=clearhidemenu;
      dropmenuobj.onmouseout=ie5? function(){ dynamichide(event)} : function(event){ dynamichide(event)}
      showhide(dropmenuobj.style, e, "visible", "hidden");
      dropmenuobj.x=getleftoffset(obj);
      dropmenuobj.y=gettopoffset(obj);
      dropmenuobj.style.left = (getobjleft(obj)+horizontaloffset).toString() + "px";
//   dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+horizontaloffset+"px";
      dropmenuobj.style.top=getobjtop(obj).toString()+"px";
//    debug('at end of dropdownmenu, dropmenuobj.x='+dropmenuobj.x.toString()+', dropmenuobj.style.left='+dropmenuobj.style.left);
      }

return clickreturnvalue();
}

function clickreturnvalue()
{
   if ((ie5||ns6) && !enableanchorlink) return false;
   else return true;
}

function contains_ns6(a, b) 
{
   while (b.parentNode)
   if ((b = b.parentNode) == a)
      return true;
   return false;
}

function dynamichide(e)
{
   if (ie5&&!dropmenuobj.contains(e.toElement))
      delayhidemenu();
   else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget))
      delayhidemenu();
}

function delayhidemenu()
{
   delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay);
}

function clearhidemenu()
{
   if (typeof delayhide!="undefined")
      clearTimeout(delayhide);
}