﻿function GetPosition(obj)
{
  var x = obj.offsetLeft;
  var y = obj.offsetTop;
  while((obj = obj.offsetParent) != null)
  {
  	if(obj.tagName!='HTML')
  	{
  	  x += obj.offsetLeft;
  	  y += obj.offsetTop;
    }
  }
  return {x: x, y: y};
}
var SubMenuVars = {
  SubMenuBind : [],
  TimerId : -1,
  MenuTimeOut : 300,
  paddingTop: 41, //can be negative
  paddingLeft: 0 //can be negative
};

var mousePos = {x: 0, y: 0};

function InitPopup(SubMenuObj, Item, position)
{
  SubMenuVars.SubMenuBind[SubMenuVars.SubMenuBind.length] = {SubMenu: SubMenuObj, ItemTrigger: Item};
  SubMenuObj.hide();
  Item.hover(//On mouse over:
    function()
    {
      ShowPopup(position);
    },//On mouse out:
    function()
    {
      HidePopup(position)
    }
  );
  SubMenuObj.mouseout(
    function()
    {
	    if (SubMenuVars.TimerId != -1)
		    clearTimeout(SubMenuVars.TimerId);
	    SubMenuVars.TimerId = setTimeout('HideMe(' + position + ')', SubMenuVars.MenuTimeOut);
    }
  );
}

function ShowPopup(SubMenuIndex){
			if (SubMenuVars.TimerId != -1)
			{
				clearTimeout (SubMenuVars.TimerId);
				HideAll();
		  }
			var ElementPos = GetPosition(SubMenuVars.SubMenuBind[SubMenuIndex].ItemTrigger[0]);

			SubMenuVars.SubMenuBind[SubMenuIndex].SubMenu[0].style.left = (ElementPos.x + SubMenuVars.paddingLeft) + 'px';
			SubMenuVars.SubMenuBind[SubMenuIndex].SubMenu[0].style.top = (ElementPos.y + SubMenuVars.SubMenuBind[SubMenuIndex].ItemTrigger.parent()[0].clientHeight + SubMenuVars.paddingTop) + 'px';
			SubMenuVars.SubMenuBind[SubMenuIndex].SubMenu.show();
}

function HideAll()
{
  jQuery(".SubMenu").hide();
}

function HidePopup(SubMenuIndex)
{
	if (SubMenuVars.TimerId != -1)
		clearTimeout(SubMenuVars.TimerId);
	SubMenuVars.TimerId = setTimeout('HideMe(' + SubMenuIndex+ ')', SubMenuVars.MenuTimeOut);
}

function HideMe(SubMenuIndex)
{
  var SubMenuObj = SubMenuVars.SubMenuBind[SubMenuIndex].SubMenu;
	if ((mousePos.x < SubMenuObj[0].offsetLeft || mousePos.x > SubMenuObj[0].offsetLeft + SubMenuObj[0].clientWidth)
	  || (mousePos.y < SubMenuObj[0].offsetTop || mousePos.y > SubMenuObj[0].offsetTop + SubMenuObj[0].clientHeight)){
	  SubMenuVars.TimerId = -1;
    SubMenuVars.SubMenuBind[SubMenuIndex].SubMenu.hide();
  }
}

function InitMenu()
{
  var  PopupCount = 0;
  jQuery("div.SubMenu").each(
    function()
    {
      InitPopup(jQuery(this), jQuery("div#topMenu li#" + this.getAttribute("for")), PopupCount++);
    }
  );
  jQuery().mousemove(
		  function(e){
			  mousePos.x = e.pageX;
			  mousePos.y = e.pageY;
		  }
	  );
	  jQuery(document).bind("click",
	    function(){
	      for (var i; i < SubMenuVars.SubMenuBind.length; i++)
	      {
	        HideMe(i);
	      }
	    }
	  );
}

jQuery(InitMenu());