//A couple of offsets		
TopOff = -3; //Fixes the menu being too low
LeftOff = -5; //Fixes the menu being too far right
var divSizes = new Array();

gtimeoutID = new Array();
stimeoutID = new Array();
growTime = .17;	//How many seconds it should take to grow
intervalTime = 15; //How many milliseconds will we call the interval at?

// IE8?
if (navigator.appVersion.indexOf("MSIE 8") != -1)
	growTime = .01;

var timesToCall = Math.ceil(growTime * 1000 / intervalTime);



//IE? Add another 1
if(document.all)
 LeftOff += 3;
	
//Call this function onLoad
function getOriginalDivSizes()
{
	allDivs = document.getElementsByTagName('div');
	for(i=0;i<allDivs.length;i++)
	{
		if(allDivs[i].className == "menuContent")
		{
			divSizes[allDivs[i].id] = allDivs[i].offsetHeight;
		}
	}
}

function showMenu(myEvent,toShow)
{
    clearTimeout(stimeoutID[toShow]);
    clearTimeout(gtimeoutID[toShow]);
    e=document.getElementById(toShow);
    e.style.top="32px";
    
    fromLeft=0;
    fromTop =0;
    if(document.all)
 	tempElemt = myEvent.srcElement;
    else
	tempElemt = myEvent.target;
   	
    while(tempElemt.offsetParent)
    {
	fromLeft += tempElemt.offsetLeft;
      fromTop += tempElemt.offsetTop;
	tempElemt = tempElemt.offsetParent;
    }
    e.style.left = fromLeft + LeftOff +"px";
    e.style.top = fromTop + ((myEvent.srcElement)?myEvent.srcElement:myEvent.target).offsetHeight + TopOff + "px";
    
    //The offset from the left because of an oddly sized window
    //var off=(document.body.clientWidth - 842);
    //off = (off > 0)? Math.floor(off/2) : 0;
    //e.style.left=(559 + off) + "px";
    //e.style.visibility="visible";'
	e.style.height = '0px';
	e.style.visibility = "visible";
	growMenu(e);
}


function hideMenu(myEvent, elemname)
{
	hideMenu(myEvent, elemname,false);
}

function hideMenu(myEvent,elemName, skipCheck)
{
    clearTimeout(stimeoutID[elemName]);
    clearTimeout(gtimeoutID[elemName]);
   // clearTimeout(timeoutID);
    e=document.getElementById(elemName);
    //alert(event.toElement.contains(document.getElementById('menu'));
    //if(event.toElement.id == "menu")
    if(!myEvent)
        myEvent=event;
    if(document.all && !skipCheck)
    {
	  lookFor = document.getElementById(elemName);
//	  alert(myEvent.toElement.innerHTML);
        if(containsRecurse(lookFor,myEvent.toElement))
         return;
    }
    else if(!skipCheck)
    {
        if(amIAChildOf(elemName,myEvent.relatedTarget))
         return;
    }
    //    e.style.visibility="hidden";
	shrinkMenu(e);
}

function growMenu(element)
{
	var targetHeight = divSizes[element.id];	
	var increment = Math.ceil((targetHeight - element.offsetHeight)/timesToCall);
//	alert(increment);
	gtimeoutID[element.id] = setInterval("doGrow('" + element.id + "'," + targetHeight + "," + increment + ")",intervalTime);
}

function doGrow(element,targetHeight,increment)
{
	e = document.getElementById(element);
	var curHeight = e.offsetHeight;
	if(curHeight < targetHeight)
	{
		var newHeight = e.offsetHeight + increment;
		newHeight = (newHeight > divSizes[element])?divSizes[element]:newHeight;
		e.style.height = newHeight + 'px';
	}
	else
	{
		clearTimeout(gtimeoutID[element]);
	}
}

function shrinkMenu(element)
{
	//var targetHeight = divSizes[element.id];	
	var increment = Math.ceil((element.offsetHeight)/timesToCall);
	var targetHeight = 0;
//	alert(increment);
	stimeoutID[element.id] = setInterval("doShrink('" + element.id + "'," + targetHeight + "," + increment + ")",intervalTime);
}

function doShrink(element,targetHeight,increment)
{
	e = document.getElementById(element);
	var curHeight = e.offsetHeight;
	if(curHeight > 0)
	{
		var newHeight = e.offsetHeight - increment;
		newHeight = (newHeight < 0)? 0 : newHeight;
		e.style.height = newHeight + 'px';
	}
	else
	{
		clearTimeout(stimeoutID[element]);
	}
}


function containsRecurse(elem,toFind)
{
   if(elem.contains && elem.contains(toFind))
     return true;

   for(i=0;i<elem.childNodes.length;i++)
   {
      if(elem.childNodes[i])
         return containsRecurse(elem.childNodes[i],toFind);
   }
   return false;
}

function amIAChildOf(name,base)
{
  if(name == base.id)
   return true;
  else
  {
    if(base.parentNode)
      return amIAChildOf(name,base.parentNode);
    else
      return false; //No more parents
  }
}

function changeMenuColor()
{
	var resp = prompt("Enter an HTML color code","");
	var styleSheet;
	if(document.all)
		styleSheet = document.styleSheets[0].rules;
	else
		styleSheet = document.styleSheets[0].cssRules;
	if(document.all)
	{
		styleSheet.item(26).style.backgroundColor = resp;
		styleSheet.item(27).style.backgroundColor = resp;
	}
	else
	{
		styleSheet.item(18).style.backgroundColor = resp;
		styleSheet.item(19).style.backgroundColor = resp;
	}

}

