function PopupMenu(id, zIndex, dxShadow)
{
var _this = this;
this.menu_id = id;
this.controlDiv = null;
this.zIndex = 100;
this.dxShadow = 3;
this.menuItems = null;
this.submenus = [];
this.bDoHide = false;
this.parentItem = null;
this.parentMenu = null;
this.submenuIndex = null;
this.bHasSubmenus = false;
this.OnClose = null;
if(!isNaN(zIndex))
this.zIndex = zIndex;
if(!isNaN(dxShadow))
this.dxShadow = dxShadow;
this.Create = function(zIndex, dxShadow)
{
if(!isNaN(zIndex))
this.zIndex = zIndex;
if(!isNaN(dxShadow))
this.dxShadow = dxShadow;
var div = document.createElement("DIV");
div.id = this.menu_id;
div.className = "bx-popup-menu";
div.style.position = 'absolute';
div.style.zIndex = this.zIndex;
div.style.left = '-1000px';
div.style.top = '-1000px';
div.style.visibility = 'hidden';
div.onclick = _this.PreventDefault;
document.body.appendChild(div);
div.innerHTML =
'
';
}
this.ClearItemsStyle = function()
{
var tbl = document.getElementById(this.menu_id+'_items');
for(var i=0; i= posLeft && x <= posRight && y >= posTop && y <= posBottom)
return false;
if(_this.controlDiv)
{
var pos = jsUtils.GetRealPos(_this.controlDiv);
if(x >= pos['left'] && x <= pos['right'] && y >= pos['top'] && y <= pos['bottom'])
return false;
}
_this.PopupHide();
return true;
}
this.OnKeyPress = function(e)
{
if(!e) e = window.event
if(!e) return;
if(e.keyCode == 27)
_this.PopupHide();
}
this.PreventDefault = function(e)
{
if(!e) e = window.event;
if(e.stopPropagation)
{
e.preventDefault();
e.stopPropagation();
}
else
{
e.cancelBubble = true;
e.returnValue = false;
}
return false;
}
this.GetItemIndex = function(item)
{
var item_id = _this.menu_id+'_item_';
var item_index = parseInt(item.id.substr(item_id.length));
return item_index;
}
this.ShowSubmenu = function(item, bMouseOver, bDontShow)
{
if(!item)
item = this;
var item_index = _this.GetItemIndex(item);
if(bMouseOver == true)
{
if(!_this.menuItems[item_index]["__time"])
return;
var dxTime = (new Date()).valueOf() - _this.menuItems[item_index]["__time"];
if(dxTime < 500)
return;
}
var menu;
if(!_this.submenus[item_index])
{
menu = new PopupMenu(_this.menu_id+'_sub_'+item_index);
menu.Create(_this.zIndex+10, _this.dxShadow);
menu.SetItems(_this.menuItems[item_index].MENU);
menu.BuildItems();
menu.parentItem = document.getElementById(_this.menu_id+'_item_'+item_index);
menu.parentMenu = _this;
menu.OnClose = function()
{
jsUtils.addEvent(document, "keypress", _this.OnKeyPress);
}
_this.submenus[item_index] = menu;
if(_this.menuItems[item_index].ONMENUPOPUP)
eval(_this.menuItems[item_index].ONMENUPOPUP);
}
else
menu = _this.submenus[item_index];
_this.submenuIndex = item_index;
if(menu.IsVisible() || bDontShow == true)
return;
var item_pos = jsUtils.GetRealPos(item);
var menu_pos = jsUtils.GetRealPos(document.getElementById(_this.menu_id));
var pos = {'left': menu_pos["right"]-1, 'right': menu_pos["left"]+1, 'top': item_pos["bottom"]+1, 'bottom': item_pos["top"]};
jsUtils.removeEvent(document, "keypress", _this.OnKeyPress);
menu.controlDiv = item;
menu.PopupShow(pos);
}
this.OnSubmenuMouseOver = function()
{
_this.OnItemMouseOver(this);
var item_index = _this.GetItemIndex(this);
if(!_this.menuItems[item_index]["__time"])
_this.menuItems[item_index]["__time"] = (new Date()).valueOf();
var div = this;
setTimeout(function(){_this.ShowSubmenu(div, true)}, 550);
}
this.OnItemMouseOver = function(item)
{
if(_this.bHasSubmenus)
_this.ClearItemsStyle();
var div = (item? item:this);
div.className="popupitem popupitemover";
if(_this.parentItem)
{
_this.bDoHide = false;
if(_this.parentItem.className != "popupitem popupitemover")
{
_this.parentMenu.ClearItemsStyle();
_this.parentItem.className = "popupitem popupitemover";
}
}
if(_this.submenuIndex != null)
{
var item_index = _this.GetItemIndex(div);
if(_this.submenuIndex != item_index && _this.submenus[_this.submenuIndex])
{
_this.submenus[_this.submenuIndex].bDoHide = true;
setTimeout(function(){_this.HideSubmenu()}, 500);
}
}
}
this.OnSubmenuMouseOut = function()
{
var item_index = _this.GetItemIndex(this);
_this.menuItems[item_index]["__time"] = null;
}
this.OnItemMouseOut = function()
{
this.className="popupitem";
}
this.HideSubmenu = function()
{
if(_this.submenuIndex == null)
return;
if(_this.submenus[_this.submenuIndex].bDoHide != true)
return;
_this.submenus[_this.submenuIndex].PopupHide();
}
this.SetItems = function(items)
{
this.menuItems = items;
this.submenus = [];
}
this.SetItemIcon = function(item_id, icon)
{
if(typeof(item_id) == 'string' || item_id instanceof String)
{
for(var i in this.menuItems)
{
if(this.menuItems[i].ID && this.menuItems[i].ID == item_id)
{
this.menuItems[i].ICONCLASS = icon;
var item_td = document.getElementById(item_id);
if(item_td)
{
var div = jsUtils.FindChildObject(item_td, "div");
if(div)
div.className = "icon "+icon;
}
break;
}
}
}
else
{
var div = jsUtils.FindChildObject(jsUtils.FindChildObject(item_id, "td", "gutter", true), "div");
if(div)
{
this.menuItems[this.GetItemIndex(item_id)].ICONCLASS = icon;
div.className = "icon "+icon;
}
}
}
this.SetAllItemsIcon = function(icon)
{
for(var i=0, n=this.menuItems.length; i < n; i++)
{
var item = document.getElementById(this.menu_id+'_item_'+i);
var div = jsUtils.FindChildObject(jsUtils.FindChildObject(item, "td", "gutter", true), "div");
if(div)
{
this.menuItems[i].ICONCLASS = icon;
div.className = "icon "+icon;
}
}
}
this.BuildItems = function()
{
var items = this.menuItems;
if(!items || items.length == 0)
return;
var div = document.getElementById(this.menu_id);
if(!div)
{
this.Create();
div = document.getElementById(this.menu_id);
}
div.style.left='-1000px';
div.style.top='-1000px';
div.style.width='auto';
this.bHasSubmenus = false;
var tbl = document.getElementById(this.menu_id+'_items');
while(tbl.rows.length>0)
tbl.deleteRow(0);
var n = items.length;
for(var i=0; i