﻿function showPopupMenu(objEvent)
{
    if (!objEvent)
        objEvent = window.event;

    if (objEvent.stopPropagation)
        objEvent.stopPropagation();
    else
        objEvent.cancelBubble = true;

    var clickedElement;

    if (objEvent.target)
        clickedElement = objEvent.target;
    else
        clickedElement = objEvent.srcElement;

    hidePopupMenuImmediately();

    var popupMenu = document.getElementById(clickedElement.popupMenuId);

    $(popupMenu).repositionAndFadeIn('fast');
    document.currentPopMenu = popupMenu;
    document.currentPopMenuClickedElement = clickedElement;

    // This has to be implemented in the application, not in the common code
    applicationShowPopupMenu(clickedElement, popupMenu);
}

function hidePopupMenuImmediately()
{
    if (document.currentPopMenu)
    {
        $(document.currentPopMenu).css('display','none');

        // This has to be implemented in the application, not in the common code
        applicationHidePopupMenu(document.currentPopMenuClickedElement, document.currentPopMenu);
    }

    document.currentPopMenu = null;
    document.currentPopMenuClickedElement = null;
}

function hidePopupMenu()
{
    if (document.currentPopMenu)
    {
        if ($(document.currentPopMenu).css('display') == 'block')
            $(document.currentPopMenu).fadeOut('fast');

        // This has to be implemented in the application, not in the common code
        applicationHidePopupMenu(document.currentPopMenuClickedElement, document.currentPopMenu);
    }

    document.currentPopMenu = null;
    document.currentPopMenuClickedElement = null;
}

function wireUpPopupMenuById(clickableElementId, popupMenuId)
{
    wireUpPopupMenu(document.getElementById(clickableElementId), popupMenuId);
}

function wireUpPopupMenu(clickableElement, popupMenuId)
{
    clickableElement.popupMenuId = popupMenuId;
    clickableElement.onclick = showPopupMenu;
}
