// yui nav without the yui to help with memory leak.
var nav =
{       
	menuTimeout : null,	
	currentMenu : null,
	state : "idle",	
	    
    handler : function(ev, item)
    {
        switch(nav.state)
        {
            case "idle":
                if(ev == "mouseover")
                {
                    nav.menuTimeout = setTimeout( function(){ nav.handler("showmenu",item) }, 200);
                    nav.state = "showing";
                }
                break;
                
            case "showing":
                if(ev == "mouseout")
                {
                    clearTimeout(nav.menuTimeout);
                    nav.state = "idle";
                }
                else if (ev == "showmenu")
                {
                    nav.currentMenu = item;                    
                    nav.showMenu(item);
                    nav.state = "shown";                    
                }
                break;
                
            case "shown":
                if(ev == "mouseout")
                {
                    nav.menuTimeout = setTimeout( function(){ nav.handler("hidemenu",item) }, 200);
                    nav.state = "hiding";
                }
                break;
            
            case "hiding":
                if(ev == "mouseover")
                {
                    if(item == nav.currentMenu)
                    {
                        clearTimeout(nav.menuTimeout);
                        nav.state = "shown";
                    }
                    else
                    {
                        clearTimeout(nav.menuTimeout);
                        nav.hideMenu(nav.currentMenu);
                        nav.showMenu(item);
                        nav.currentMenu = item;  
                        nav.state = "shown"; 
                    }                    
                }
                else if (ev == "hidemenu")
                {
                    nav.currentMenu = null;  
                    nav.hideMenu(item);
                    nav.state = "idle";                    
                }
                break;
        }      
    },
        
    popup : function(item)
    {
       nav.handler("mouseover",item);
    },
    
    hide : function(item)
	{
	    nav.handler("mouseout",item);
    },
    
    elementPosition : function(obj) {
        var curleft = 0, curtop = 0;

        if (obj.offsetParent) {
            curleft = obj.offsetLeft;
            curtop = obj.offsetTop;

            while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft;
                curtop += obj.offsetTop;
            }
        }

        return { x: curleft, y: curtop };
    },
    
	showMenu : function(item)
	{
	    try
	    {			    	       	   
		    for(var i=0;i<item.childNodes.length;i++)
	        {
	            var el = item.childNodes[i];
	            if(!el.tagName) return;
	            var tag = el.tagName.toLowerCase();
	            if(tag == "div")
	            {
	                if(el && el.style) 
                    {                                            
                        el.style["z-index"] = "10000";
                        el.style["position"] = "absolute";                
                        
                        // item.offsetTop wrong in IE, have to calculate manually
                        var elPos = nav.elementPosition(item);
                        el.style.left = (item.offsetLeft) + "px";
                        el.style.top = (elPos.y + item.clientHeight) + "px";
						el.style.display = "block";   
                    }
	            }	
	            else if(tag == "a")
	            {
	                el.className += " yuimenubaritemlabel-selected";
	            }	          
	        }
	        item.className += " yuimenubaritem-selected";
	    }
		catch(ex) { }
	},	
	    
    hideMenu : function(item)
    {
	    try
	    {	        
	        if(item) item.className = item.className.replace(/ yuimenubaritem-selected/,"");
	        
		    for(var i=0;i<item.childNodes.length;i++)
	        {
	            var el = item.childNodes[i];
	            if(!el.tagName) return;
	            var tag = el.tagName.toLowerCase();
	            if(tag == "div")
	            {
	                if(el && el.style) 
                    {                        
                        el.style.display = "none";
                    }
	            }	 
	            else if(tag == "a")
	            {
	                el.className = el.className.replace(/ yuimenubaritemlabel-selected/,"");
	            }	           
	        }
	    }
		catch(ex) {}
	},	
	
	setChildClass : function(el, tag, newClass)
	{
	    for(var i=0;i<el.childNodes.length;i++)
	    {
            var child = el.childNodes[i];
            var childTag = child.tagName;
            if(childTag && childTag.toLowerCase() == tag)
            {
                child.className = newClass;
                break;       
            }
        }            
	},
	
	menuover : function(el)
	{
	    if(el) el.className = "yuimenuitem yuimenuitem-selected";	    
	    nav.setChildClass(el,"a","yuimenuitemlabel yuimenuitemlabel-selected");
	},
	
	menuout : function(el)
	{
	    if(el) el.className = "yuimenuitem";
	    nav.setChildClass(el,"a","yuimenuitemlabel");
	}
};
  
