﻿function makeFormClickHidePopupMenu()
{
	document.body.onclick = hidePopupMenu;
	if (document.body.captureEvents)
		document.body.captureEvents(Event.CLICK);
}

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;
	
	var popupMenu = getPopupMenuForClickedElement(clickedElement);
	var currentDisplay = popupMenu.style.display;

	hidePopupMenu();
	
	popupMenu.style.display = 'block';
	document.currentPopMenu = popupMenu;
	document.currentPopMenuClickedElement = clickedElement;
	
	// This has to be implemented in the application, not in the common code
	applicationShowPopupMenu(clickedElement, popupMenu);
}

function hidePopupMenu()
{
	if (document.currentPopMenu)
	{
		document.currentPopMenu.style.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 getPopupMenuForClickedElement(clickedElement)
{
	return document.getElementById(clickedElement.popupMenuId);
}

function wireUpPopupMenuById(clickableElementId, popupMenuId)
{
	wireUpPopupMenu(document.getElementById(clickableElementId), popupMenuId);
}

function wireUpPopupMenu(clickableElement, popupMenuId)
{
	clickableElement.popupMenuId = popupMenuId;
	clickableElement.onclick = showPopupMenu;
}
