﻿// JScript File

//static variables
var m_menus;

function LoadMenu(xml)
{
    if ( xml == null )
        return;
    
    var xmlDoc = _createXmlDoc(_unescapeXml(xml));
    if (xmlDoc.childNodes.length > 0)
    {
        // Get the menu nodes from the xml
        var menuNodes = null;
        if ( xmlDoc.firstChild.nodeName == 'MENUS' )
        {
            menuNodes = xmlDoc.firstChild.childNodes;
        }
        else
        {
            menuNodes = xmlDoc.childNodes;
        }
        
        // Ensure the menu array is created
        if ( m_menus == null )
        {
            m_menus = new Array();
        }
        
        for ( var ii = 0; ii < menuNodes.length; ii++ )
        {
            // Create the menu from the xml
            var menuNode = menuNodes[ii];
            var menu = new Menu(menuNode);
            
            // Remove any previously loaded versions of the menu
            _RemoveMenu(menu.ContextMenuType, menu.ContextItemId);
        
            // Add the menu
            m_menus.push( menu );
        }
    }
}

function FindMenu(contextMenuType, contextItemId)
{
    var menu = null;
	if (m_menus != null)
	{
		for (var ii=0;ii<m_menus.length;ii++)
		{
			if ( ( m_menus[ii].ContextMenuType == contextMenuType ) && ( m_menus[ii].ContextItemId == contextItemId ) )
			{
				menu = m_menus[ii];
				break;
			}
		}
	}
	return menu;
}

// Menu class
function Menu( menuNode )
{
    var m_items = new Array();
    
    this.AddItem = function( item ){ m_items.push( item ); }
    
    var menuValue = menuNode.attributes[0].value;
    var menuInfo = menuValue.split("~");
    
    this.ContextMenuType = menuInfo[0];
    this.ContextItemId = menuInfo[1];
    
    var itemNodes = menuNode.childNodes;
    for ( var ii = 0; ii < itemNodes.length; ii++ )
    {
        var itemNode = itemNodes[ii];
        var item = new Item( itemNode );
        this.AddItem( item );
    }
    
    this.GetHtml = function( tableClass, itemTableClass, linkClass, tableHoverClass, linkHoverClass )
    {
        var s = "<table";
        
        if ( ( tableClass != null ) && ( tableClass.length > 0 ) )
        {
            s += " class='" + tableClass + "' ";
        }
        s += " cellspacing='0' cellpadding='0' border='0'>";
        if ( m_items != null )
        {
            for ( var ii = 0; ii < m_items.length; ii++ )
            {
                s += m_items[ii].GetHtml( itemTableClass, linkClass, tableHoverClass, linkHoverClass);
            }
        }
        
        s += "</table>";
        return s;
    }
}

// Item class
function Item( itemNode )
{
    var itemValue = itemNode.attributes[0].value;
    var itemInfo = itemValue.split("~");
    
    this.Label = itemInfo[0];
    this.ClientSideFunction = itemInfo[1];
    
    this.GetHtml = function( itemTableClass, linkClass, tableHoverClass, linkHoverClass )
    {   
        var s = "<tr";
        
        if ( ( tableHoverClass != null ) && ( tableHoverClass.length > 0 ) )
        {
            s += " onmouseover=\"_ItemHover(this,'" + tableHoverClass + "','" + linkHoverClass + "'); \""; 
            s += " onmouseout=\"_EndItemHover(this);\"";
        }
        
        s+= "><td>";
        
        s+= "<table ";
        if ( ( itemTableClass != null ) && ( itemTableClass.length > 0 ) )
        {
            s += " class='" + itemTableClass + "'";
        }
        s+= " width='100%' cellspacing='0' cellpadding='0' border='0'><tr><td>";
        
        s += "<a";
        if ( ( linkClass != null ) && ( linkClass.length > 0 ) )
        {
            s += " class='" + linkClass + "'";
        }
        s += " href='javascript:" + this.ClientSideFunction + "'>" + EscapeXmlSplCharacters( this.Label ) + "</a>";
        
        s += "</td></tr></table>";

        s += "</td></tr>";
        return s;
    }
}

function _RemoveMenu(contextMenuType, contextItemId)
{
	if (m_menus != null)
	{
		for (var ii=0;ii<m_menus.length;ii++)
		{
			if ( ( m_menus[ii].ContextMenuType == contextMenuType ) && ( m_menus[ii].ContextItemId == contextItemId ) )
			{
				m_menus.splice(ii,1);
				break;
			}
		}
	}
}

function _ItemHover( trNode, tableHoverClass, linkHoverClass )
{
    // Apply the table hover class to the item table
    var itemTableNode = trNode.cells[0].childNodes[0];
    itemTableNode.hoverClass = tableHoverClass;
    WebForm_AppendToClassName( itemTableNode, tableHoverClass );
    
    var linkNode = itemTableNode.rows[0].cells[0].childNodes[0];
    linkNode.hoverHyperLinkClass = linkHoverClass;
    WebForm_AppendToClassName( linkNode, linkHoverClass )
}

function _EndItemHover( trNode )
{
    // Remove the table hover class from the item table
    var itemTableNode = trNode.cells[0].childNodes[0];
    if ( itemTableNode.hoverClass )
    {
        WebForm_RemoveClassName( itemTableNode, itemTableNode.hoverClass );
    }
    
    var linkNode = itemTableNode.rows[0].cells[0].childNodes[0];
    if ( linkNode.hoverHyperLinkClass )
    {
        WebForm_RemoveClassName( linkNode, linkNode.hoverHyperLinkClass );
    }
}

function EscapeXmlSplCharacters( input )
{
	input = input.replace(/&/g,"&amp;");
    input = input.replace(/</g,"&lt;");
	input = input.replace(/>/g,"&gt;");
    return input;
}