﻿var shownMenu;

function FormatAndShowMenu(e, element, menu, itemValues, itemTexts, itemsVisibility, topMenuOffset)
{
    ApplyItemValues(menu, itemValues);
    ApplyItemTexts(menu, itemTexts);
    ApplyItemVisibility(menu, itemsVisibility);
    ShowMenu(e, element, menu, topMenuOffset);
}

function ApplyItemValues(menu, itemValues)
{
    if (menu.Items.length != itemValues.length)
        alert('Please check item values');
        
    for (i=0;i<itemValues.length;i++)
    {
        var values = itemValues[i].split('|');
        for (j=0;j<values.length;j++)
        {
            ReplaceParameter(values[j], menu.Items[i], j);
        }
    }
}

function ApplyItemTexts(menu, itemTexts)
{
    if (menu.Items.length != itemTexts.length)
        alert('Please check item texts');

    for (i=0;i<itemTexts.length;i++)
    {
        menu.Items[i].SetText(itemTexts[i]);
    }
}

function ApplyItemVisibility(menu, itemsVisibility)
{
    if (menu.Items.length != itemsVisibility.length)
        alert('Please check items visibilities');
    for (i=0;i<itemsVisibility.length;i++)
    {
        if (itemsVisibility[i] == 1)
            menu.Items[i].Show();
        else
            menu.Items[i].Hide();
    }
}

function ReplaceParameter(value, item, keyIndex)
{
    if (item.Value == null)
        return;
        
    var keys = item.Value.split("|");
    var href = item.TextElement.parentNode.getAttribute('href');
    var isJavascript = href.indexOf("javascript") != -1;
    
    if (!isJavascript)
    {
        var parameterIndex = href.indexOf(keys[keyIndex]) + keys[keyIndex].length + 1;
        var hrefEmptyParameter = href.substr(0, parameterIndex);
        var remainingHref = href.substr(parameterIndex);
        
        if (remainingHref.indexOf("&") != -1)
            remainingHref = remainingHref.substr(remainingHref.indexOf("&"));
        else
            remainingHref = "";
        
        item.TextElement.parentNode.setAttribute('href', hrefEmptyParameter + value + remainingHref);
    }
    else
    {
        var firstQuoteIndex = keyIndex * 2 + 1;
        var parameters = href.split("'");
        var hrefEmptyParameter = "";
        
        for (k=0;k<parameters.length;k++)
        {
            if (k != firstQuoteIndex)
                hrefEmptyParameter += parameters[k];
            else
                hrefEmptyParameter += value;
            
            if (k < parameters.length - 1)
                hrefEmptyParameter += "'";
        }
        item.TextElement.parentNode.setAttribute('href', hrefEmptyParameter);
    }
}

function ShowMenu(e, element, menu, height)
{
    if (shownMenu != null)
        shownMenu.Hide();
    
    shownMenu = menu;
    var coordinates = FindCoordinates(element);
    if ( (!e.relatedTarget) || (!menu.IsChildOf(menu.DomElement, e.relatedTarget)) )
    {
        if (height == 0)
            height = element.height;
        menu.ShowAt(coordinates[0], coordinates[1] + height);
    }

    e.cancelBubble = true; //prevents IE from closing the menu
    if (e.stopPropagation)
        e.stopPropagation(); //prevents Firefox/Modzilla/Opera from closing the menu
}
