
function menu_popup_create(m,opts)
{
	var mm = document.popup_menus[m]
	
	var s = $N.New("div", {'class':opts['class']+'_item',style:'position:absolute;z-index:999'})
	var max_ln = 0
	for (var x in mm)
	{
		var dv = $N.New("div", {'class':opts['class']+'_row'})
		if ( mm[x].icon ){
			var i = $N.New("img", {src:mm[x].icon})
			dv.appendChild(i)
		}
		var t = $N.NewText(mm[x].title)
		if ( mm[x].link!="" ){
			var a = $N.New("a", {href:mm[x].link})
			a.appendChild(t)
			dv.appendChild(a)
		}
		else
			dv.appendChild(t)
		s.appendChild(dv)
		if ( opts.onselect != false )
			$E.Register(dv, "click", function(e){
										$exec(opts.onselect)
										return false
									})

		var r = $S.ObjRect(dv)
		if ( r.width > max_ln )
			max_ln = r.width
	}
	s.Css("width", max_ln+"px")
	s.Show(false)
	return s
}

function menu_bind(h,m,opts)
{
	if ( !(document.popup_menus && document.popup_menus[m]) )
		return
	h = $(h)
	if ( !h )
		return

	var ShowMenu = function(){
						if ( ShowMenu.menu == false )
						{
							ShowMenu.menu =  menu_popup_create(m, ShowMenu.opts)
							var men = function(e){
											ShowMenu.menu.hide_menu = false
										}
							var mex = function(e){
											ShowMenu.menu.hide_menu = true
											setTimeout( function(){if(ShowMenu.menu.hide_menu)ShowMenu.menu.Show(false)},100 )
										}
							$E.Register(ShowMenu.menu, "mouseenter", men )
							$E.Register(ShowMenu.menu, "mouseexit", mex )
						}
						ShowMenu.handle.appendChild(ShowMenu.menu)
						ShowMenu.menu.Show(true)
						var rh = ShowMenu.handle.Rect()
						var rm = ShowMenu.menu.Rect()
						switch(ShowMenu.opts.align)
						{
						case "normal":
							rm.left = rh.left
							rm.top = rh.bottom
							break;
						case "center":
							rm.left = rh.left+(rh.width-rm.width)/2
							rm.top = rh.bottom
							break;
						case "over":
							rm.left = rh.left+(rh.width-rm.width)/2
							rm.top = rh.top+(rh.height-rm.height)/2
							break;
						}
						if ( ShowMenu.opts.overflow == "auto" )
						{
							var rs=$S.ViewRect()

							if ( rm.left < rs.left )
								rm.left = rs.left
							if ( rm.top < rs.top )
								rm.top = rs.top

							if ( (rm.left+rm.width)>rs.right )
								rm.left = rs.right-rm.width
							if ( (rm.top+rm.height)>rs.bottom )
								rm.top = rs.bottom-rm.height
						}

						ShowMenu.menu.Pos( rm )
						if ( ShowMenu.opts.on_show != false )
							$exec(ShowMenu.opts.on_show)
					}
	ShowMenu.menu = false
	ShowMenu.handle = h
	ShowMenu.opts = opts

	if ( opts.open_click )
	{
		var oc = function(e){
					if ( (ShowMenu.menu == false) || !ShowMenu.menu.Shown() )
						ShowMenu()
					else
						ShowMenu.menu.Show(false)
				}
		$E.Register(h, "click", oc )
	}
	if ( opts.open_over )
	{
		var omen = function(e){
						if ( (ShowMenu.menu == false) || !ShowMenu.menu.Shown() )
							ShowMenu()
						ShowMenu.menu.hide_menu = false
					}
		var omex = function(e){
						ShowMenu.menu.hide_menu = true
						setTimeout( function(){if(ShowMenu.menu.hide_menu)ShowMenu.menu.Show(false)}, 100 )
					}
		$E.Register(h, "mouseenter", omen )
		$E.Register(h, "mouseexit", omex )
	}
}
