framework.widget.menu = {
init:function(menuBarId) 
{	
	if (!framework.util.isType(menuBarId, framework.DataType.STRING ))
    {
		return framework.Status.INVALID_ELEMENT_TYPE;
    }
	var menuBar = document.getElementById(menuBarId + "_ul");
   	if (framework.util.isUndefinedOrNull(menuBar))
	{
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	for (var index=0; index < menuBar.childNodes.length; index += 1)
	{
		 var menuItems = false;
		 var elementNode = menuBar.childNodes[index];
		 if (elementNode.nodeName == 'LI')
		 {
			for (var index2=0; index2 < elementNode.childNodes.length; index2 += 1)
			{   
				var node2 = elementNode.childNodes[index2];
				if (node2.nodeName == 'DIV')
				{
				    elementNode.divIndicatorId = node2.id;  
				}
				else if( node2.nodeName == 'UL')
				{    
				    elementNode.menuItemsId = node2.id;
				    var itemCount = 0;
				    for (var index3=0; index3 < node2.childNodes.length; index3 += 1)
					{		
						var node3 = node2.childNodes[index3];		       		   		
						if (node3.nodeName == 'LI')
						{
						    itemCount += 1;
						    if (itemCount == 1 )
						    {
						      node3.first = true;
						    }
							framework.eventmodel.addElementEvent(node3.id, framework.EventType.MOUSEOVER, framework.widget.menu._menuItemMouseOverEventHandler ); 
							framework.eventmodel.addElementEvent(node3.id, framework.EventType.MOUSEOUT, framework.widget.menu._menuItemMouseOutEventHandler );
							menuItems = true;
							node3.itemsMenuWidth = elementNode.getAttribute('itemsMenuWidth'); 
							node3.style.width = node3.itemsMenuWidth + "px";  
						}	
					}
				}
			}
			if (menuItems)
			{
		   		framework.eventmodel.addElementEvent(elementNode.id, framework.EventType.CLICK, framework.widget.menu._menuOnClickEventHandler );
		   		elementNode.visible = false;
			}
			else if (elementNode.getAttribute('selectedMenuTab') == 'false' )
			{
				framework.eventmodel.addElementEvent(elementNode.id, framework.EventType.MOUSEOVER, framework.widget.menu._menuMouseOverEventHandler ); 
				framework.eventmodel.addElementEvent(elementNode.id, framework.EventType.MOUSEOUT, framework.widget.menu._menuMouseOutEventHandler );
			}
			elementNode.tabWidth = elementNode.getAttribute('tabWidth'); 
			elementNode.style.width = elementNode.tabWidth + "px";  	
		}
	}
	framework.widget.menu._matchCellHeightsForRow(menuBar)
	return framework.Status.SUCCESS;
},
closeMenuItemList:function(menuTabElementId)
{ 
    if (!framework.util.isType(menuTabElementId, framework.DataType.STRING ))
    {
		return framework.Status.INVALID_ELEMENT_TYPE;
    }
    var element = document.getElementById(menuTabElementId);
    if (framework.util.isUndefinedOrNull(element))
	{
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	if (framework.util.isUndefinedOrNull(element.menuItemsId))
	{
		return framework.Status.NO_MENU_LIST_TO_CLOSE;
	}
	if ('down' == element.getAttribute('upDown'))
	{
	   return framework.Status.MENU_LIST_IS_NOT_OPEN;
	}  
	element.visible = false;
	framework.util.hideElement(element.menuItemsId); 
	framework.widget.menu._changeArrow(element);
	return framework.Status.SUCCESS;			
},
_menuItemMouseOverEventHandler:function(event)
{
    var element = document.getElementById(this.id);
    if(element.first)
    {
    	element.className = 'firstMenuItemHighlighted';
    }
    else
    {
		element.className = 'menuItemHighlighted';
	}
},
_menuItemMouseOutEventHandler:function(event)
{
	var element = document.getElementById(this.id);
	if (element.first === true)
	{
		element.className = 'firstMenuItem';  
	}
	else
	{
		element.className = 'menuItem';
	}
	element.style.width = element.itemsMenuWidth + "px";  
},
_menuOnClickEventHandler:function(event)
{ 
    var element = document.getElementById(this.id);
	if (element.visible === false)
	{
	    element.visible = true;
	    framework.util.showElement(element.menuItemsId);
	}
	else
	{
	    element.visible = false;
		framework.util.hideElement(element.menuItemsId);
	} 
	framework.widget.menu._changeArrow(element);			
},
_changeArrow:function(element)
{
 	var selectedMenuTab = element.getAttribute('selectedMenuTab');
    var upDown = element.getAttribute('upDown');
    var elementDivIndicator = document.getElementById(element.getAttribute('divIndicatorId'));
    if (upDown == 'up')
    {
       if(selectedMenuTab == 'true')
       {
			elementDivIndicator.className = 'menuCurrentItemDivWithItemsDown';
       }
       else
       {
			elementDivIndicator.className = 'menuItemDivWithItemsDown';
       }
       element.setAttribute('upDown', 'down');
    }
    else if(upDown == 'down')
    {
       if(selectedMenuTab == 'true')
       {
			elementDivIndicator.className = 'menuCurrentItemDivWithItemsUp';
       }
       else
       {
			elementDivIndicator.className = 'menuItemDivWithItemsUp';
       }
       element.setAttribute('upDown', 'up');
    }
},
_menuMouseOverEventHandler:function(event)
{
	 var element = document.getElementById(this.id);
	 element.className = 'mainMenuBarItemHighlighted';
},
_menuMouseOutEventHandler:function(event)
{
	var element = document.getElementById(this.id);
	element.className = 'mainMenuBarItemNoItems';
},
_matchCellHeightsForRow:function(menuBarElement)
{
	var childNodes = new Array();
	var childNode = null;
	var maxCellHeightForRow = 0;
	for (var nodeIndex = 0; nodeIndex < menuBarElement.childNodes.length; nodeIndex += 1)
	{
		childNode = menuBarElement.childNodes[nodeIndex];
		if (childNode.id && childNode.id.indexOf(".menu") != -1)
		{
			childNodes.push(childNode);
			var childNodeHeight = childNode.clientHeight > 0? childNode.clientHeight:childNode.offsetHeight;
			if (childNodeHeight > maxCellHeightForRow)
			{
				maxCellHeightForRow = childNodeHeight;
			}
		}
	}
	var maxCellHeightForRowString = maxCellHeightForRow + "px";
	childNode = childNodes.pop();
	while (!framework.util.isUndefinedOrNull(childNode))
	{
		childNode.style.height = maxCellHeightForRowString;
		if (childNode.divIndicatorId)
		{
			textNode = document.getElementById(childNode.divIndicatorId);
			textNode.style.height = maxCellHeightForRowString;
		}
		childNode = childNodes.pop();
	}
	return framework.Status.SUCCESS;
},
loaded:true
};
//Version 3.4
