(function($){$.mbMenu={name:"mbMenu",author:"Matteo Bicocchi",version:"2.8.5rc5",actualMenuOpener:false,options:{template:"yourMenuVoiceTemplate",additionalData:"",menuSelector:".menuContainer",menuWidth:400,openOnRight:false,containment:"window",iconPath:"ico/",hasImages:true,fadeInTime:100,fadeOutTime:200,menuTop:0,menuLeft:0,submenuTop:0,submenuLeft:4,opacity:1,openOnClick:true,closeOnMouseOut:false,closeAfter:500,minZindex:"auto",hoverIntent:0,submenuHoverIntent:200,onContextualMenu:function(){}},buildMenu:function(options){return this.each(function(){var thisMenu=this;thisMenu.id=!this.id?"menu_"+Math.floor(Math.random()*1e3):this.id;this.options={};$.extend(this.options,$.mbMenu.options);$.extend(this.options,options);$(".mbmenu").hide();thisMenu.clicked=false;thisMenu.rootMenu=false;thisMenu.actualOpenedMenu=false;thisMenu.menuvoice=false;var root=$(this),openOnClick=this.options.openOnClick,closeOnMouseOut=this.options.closeOnMouseOut;$(root).each(function(){if($.metadata){$.metadata.setType("class");thisMenu.menuvoice=$(this).find(".rootVoice");$(thisMenu.menuvoice).each(function(){$(this).metadata().menu&&$(this).attr("menu",$(this).metadata().menu);$(this).metadata().disabled&&$(this).attr("isDisable",$(this).metadata().disabled)})}thisMenu.menuvoice=$(this).find("[menu]").add($(this).filter("[menu]"));thisMenu.menuvoice.filter("[isDisable]").addClass("disabled");$(thisMenu.menuvoice).css("white-space","nowrap");openOnClick&&$(thisMenu.menuvoice).bind("click",function(){$(document).unbind("click.closeMbMenu");if(!$(this).attr("isOpen")){$(this).buildMbMenu(thisMenu,$(this).attr("menu"));$(this).attr("isOpen","true")}else{$(this).removeMbMenu(thisMenu,true);$(this).addClass("selected")}if($(this).attr("menu")=="empty"){thisMenu.actualOpenedMenu&&$("[isOpen]").removeAttr("isOpen");$(this).removeMbMenu(thisMenu)}$(document).unbind("click.closeMbMenu")});var mouseOver=$.browser.msie?"mouseenter":"mouseover",mouseOut=$.browser.msie?"mouseleave":"mouseout";$(thisMenu.menuvoice).mb_hover(this.options.hoverIntent,function(){!$(this).attr("isOpen")&&$("[isOpen]").removeAttr("isOpen");closeOnMouseOut&&clearTimeout($.mbMenu.deleteOnMouseOut);!openOnClick&&$(thisMenu).find(".selected").removeClass("selected");thisMenu.actualOpenedMenu&&$(thisMenu.actualOpenedMenu).removeClass("selected");$(this).addClass("selected");if((thisMenu.clicked||!openOnClick)&&!$(this).attr("isOpen")){$(this).removeMbMenu(thisMenu);$(this).buildMbMenu(thisMenu,$(this).attr("menu"));$(this).attr("menu")=="empty"&&$(this).removeMbMenu(thisMenu);$(this).attr("isOpen","true")}},function(){if(closeOnMouseOut)$.mbMenu.deleteOnMouseOut=setTimeout(function(){$(this).removeMbMenu(thisMenu,true);$(document).unbind("click.closeMbMenu")},$(root)[0].options.closeAfter);$(this).attr("menu")=="empty"&&$(this).removeClass("selected");!thisMenu.clicked&&$(this).removeClass("selected");$(document).one("click.closeMbMenu",function(){$("[isOpen]").removeAttr("isOpen");$(this).removeClass("selected");$(this).removeMbMenu(thisMenu,true);thisMenu.rootMenu=false;thisMenu.clicked=false})})})})},buildContextualMenu:function(options){return this.each(function(){var thisMenu=this;thisMenu.options={};$.extend(thisMenu.options,$.mbMenu.options);$.extend(thisMenu.options,options);$(".mbmenu").hide();thisMenu.clicked=false;thisMenu.rootMenu=false;thisMenu.actualOpenedMenu=false;thisMenu.menuvoice=false;var cMenuEls;if($.metadata){$.metadata.setType("class");cMenuEls=$(this).find(".cmVoice");$(cMenuEls).each(function(){$(this).metadata().cMenu&&$(this).attr("cMenu",$(this).metadata().cMenu)})}cMenuEls=$(this).find("[cMenu]").add($(this).filter("[cMenu]"));$(cMenuEls).each(function(){$(this).css({"-webkit-user-select":"none","-moz-user-select":"none"});var cm=this;cm.id=!cm.id?"menu_"+Math.floor(Math.random()*100):cm.id;$(cm).css({cursor:"default"});$(cm).bind("contextmenu","mousedown",function(event){event.preventDefault();event.stopPropagation();event.cancelBubble=true;$.mbMenu.lastContextMenuEl=cm;$.mbMenu.options.actualMenuOpener&&$(thisMenu).removeMbMenu($.mbMenu.options.actualMenuOpener);thisMenu.options.onContextualMenu(this,event);$(this).buildMbMenu(thisMenu,$(this).attr("cMenu"),"cm",event);$(this).attr("isOpen","true")})})})}};$.fn.extend({buildMbMenu:function(op,m,type,e){var msie6=$.browser.msie&&$.browser.version=="6.0",mouseOver=$.browser.msie?"mouseenter":"mouseover",mouseOut=$.browser.msie?"mouseleave":"mouseout";if(e){this.mouseX=$(this).getMouseX(e);this.mouseY=$(this).getMouseY(e)}$.mbMenu.options.actualMenuOpener&&$.mbMenu.options.actualMenuOpener!=op&&$(op).removeMbMenu($.mbMenu.options.actualMenuOpener);$.mbMenu.options.actualMenuOpener=op;if(!type||type=="cm"){if(op.rootMenu){$(op.rootMenu).removeMbMenu(op);$(op.actualOpenedMenu).removeAttr("isOpen");$("[isOpen]").removeAttr("isOpen")}op.clicked=true;op.actualOpenedMenu=this;$(op.actualOpenedMenu).attr("isOpen","true");$(op.actualOpenedMenu).addClass("selected")}if($(this).attr("menu")=="empty")return;var opener=this,where=!type||type=="cm"?$(document.body):$(this).parent().parent(),menuClass=op.options.menuSelector.replace(".","");if(op.rootMenu)menuClass+=" submenuContainer";if(!op.rootMenu&&$(opener).attr("isDisable"))menuClass+=" disabled";where.append("<div class='menuDiv'><div class='"+menuClass+" '></div></div>");this.menu=where.find(".menuDiv");$(this.menu).css({width:0,height:0});if(op.options.minZindex!="auto")$(this.menu).css({zIndex:op.options.minZindex++});else $(this.menu).mb_bringToFront();this.menuContainer=$(this.menu).find(op.options.menuSelector);$(this.menuContainer).bind(mouseOver,function(){$(opener).addClass("selected")});$(this.menuContainer).css({position:"absolute",opacity:op.options.opacity});!$("#"+m).html()&&$.ajax({type:"POST",url:op.options.template,cache:false,async:false,data:"menuId="+m+(op.options.additionalData!=""?"&"+op.options.additionalData:""),success:function(html){$("body").append(html);$("#"+m).hide()}});$(this.menuContainer).attr("id","mb_"+m).hide();var isBoxmenu=$("#"+m).hasClass("boxMenu");if(isBoxmenu){this.voices=$("#"+m).clone(true);this.voices.css({display:"block"});this.voices.attr("id",m+"_clone")}else this.voices=$("#"+m).find("a").clone(true);if($.metadata){$.metadata.setType("class");$(this.voices).each(function(){$(this).metadata().disabled&&$(this).attr("isdisable",$(this).metadata().disabled);$(this).metadata().img&&$(this).attr("img",$(this).metadata().img);$(this).metadata().menu&&$(this).attr("menu",$(this).metadata().menu);$(this).metadata().action&&$(this).attr("action",$(this).metadata().action)})}$(this.voices).each(function(i){var voice=this,imgPlace="",isText=$(voice).attr("rel")=="text",isTitle=$(voice).attr("rel")=="title",isDisabled=$(voice).is("[isdisable]");if(!op.rootMenu&&$(opener).attr("isDisable"))isDisabled=true;var isSeparator=$(voice).attr("rel")=="separator";if(op.options.hasImages&&!isText&&!isBoxmenu){var imgPath=$(voice).attr("img")?$(voice).attr("img"):"blank.gif";imgPath=imgPath.length>3&&imgPath.indexOf(".")>-1?"<img class='imgLine' src='"+op.options.iconPath+imgPath+"'>":imgPath;imgPlace="<td class='img'>"+imgPath+"</td>"}var line="<table id='"+m+"_"+i+"' class='line"+(isTitle?" title":"")+"' cellspacing='0' cellpadding='0' border='0' style='width:100%;' width='100%'><tr>"+imgPlace+"<td class='voice' nowrap></td></tr></table>";if(isSeparator)line="<p class='separator' style='width:100%;'></p>";if(isText)line="<div style='width:100%; display:table' class='line' id='"+m+"_"+i+"'><div class='voice'></div></div>";if(isBoxmenu)line="<div style='width:100%; display:inline' class='' id='"+m+"_"+i+"'><div class='voice'></div></div>";$(opener.menuContainer).append(line);var menuLine=$(opener.menuContainer).find("#"+m+"_"+i),menuVoice=menuLine.find(".voice");if(!isSeparator){menuVoice.append(this);if($(this).attr("menu")&&!isDisabled){menuLine.find(".voice a").wrap("<div class='menuArrow'></div>");menuLine.find(".menuArrow").addClass("subMenuOpener");menuLine.css({cursor:"default"});this.isOpener=true}if(isText){menuVoice.addClass("textBox");$.browser.msie&&menuVoice.css({maxWidth:op.options.menuWidth});this.isOpener=true}isDisabled&&menuLine.addClass("disabled").css({cursor:"default"});if(!(isText||isTitle||isDisabled||isBoxmenu)){menuLine.css({cursor:"pointer"});menuLine.bind("mouseover",function(){clearTimeout($.mbMenu.deleteOnMouseOut);$(this).addClass("selected")});menuLine.bind("mouseout",function(){$(this).removeClass("selected")});menuLine.mb_hover(op.options.submenuHoverIntent,function(event){if(opener.menuContainer.actualSubmenu&&!$(voice).attr("menu")){$(opener.menu).find(".menuDiv").remove();$(opener.menuContainer.actualSubmenu).removeClass("selected");opener.menuContainer.actualSubmenu=false}if($(voice).attr("menu")){if(opener.menuContainer.actualSubmenu&&opener.menuContainer.actualSubmenu!=this){$(opener.menu).find(".menuDiv").remove();$(opener.menuContainer.actualSubmenu).removeClass("selected");opener.menuContainer.actualSubmenu=false}!$(voice).attr("action")&&$(opener.menuContainer).find("#"+m+"_"+i).css("cursor","default");if(!opener.menuContainer.actualSubmenu||opener.menuContainer.actualSubmenu!=this){$(opener.menu).find(".menuDiv").remove();opener.menuContainer.actualSubmenu=false;$(this).buildMbMenu(op,$(voice).attr("menu"),"sm",event);opener.menuContainer.actualSubmenu=this}$(this).attr("isOpen","true");return false}},function(){})}if(isDisabled||isTitle||isText||isBoxmenu){$(this).removeAttr("href");menuLine.bind(mouseOver,function(){closeOnMouseOut&&clearTimeout($.mbMenu.deleteOnMouseOut);if(opener.menuContainer.actualSubmenu){$(opener.menu).find(".menuDiv").remove();opener.menuContainer.actualSubmenu=false}}).css("cursor","default")}menuLine.bind("click",function(){if(($(voice).attr("action")||$(voice).attr("href"))&&!isDisabled&&!isBoxmenu&&!isText){var target=$(voice).attr("target")?$(voice).attr("target"):"_self";$(voice).attr("href")&&$(voice).attr("href").indexOf("javascript:")>-1&&$(voice).attr("action",$(voice).attr("href").replace("javascript:",""));var link=$(voice).attr("action")?$(voice).attr("action"):"window.open('"+$(voice).attr("href")+"', '"+target+"')";$(voice).removeAttr("href");eval(link);$(this).removeMbMenu(op,true)}else $(document).unbind("click.closeMbMenu")})}});var closeOnMouseOut=$(op)[0].options.closeOnMouseOut;if(closeOnMouseOut){$(opener.menuContainer).bind("mouseenter",function(){clearTimeout($.mbMenu.deleteOnMouseOut)});$(opener.menuContainer).bind("mouseleave",function(){var menuToRemove=$.mbMenu.options.actualMenuOpener;$.mbMenu.deleteOnMouseOut=setTimeout(function(){$(this).removeMbMenu(menuToRemove,true);$(document).unbind("click.closeMbMenu")},$(op)[0].options.closeAfter)})}var t=0,l=0;$(this.menuContainer).css({minWidth:op.options.menuWidth});$.browser.msie&&$(this.menuContainer).css("width",$(this.menuContainer).width()+2);switch(type){case "sm":t=$(this).position().top+op.options.submenuTop;l=$(this).position().left+$(this).width()-op.options.submenuLeft;break;case "cm":t=this.mouseY-5;l=this.mouseX-5;break;default:if(op.options.openOnRight){t=$(this).offset().top-($.browser.msie?2:0)+op.options.menuTop;l=$(this).offset().left+$(this).outerWidth()-op.options.menuLeft-($.browser.msie?2:0)}else{t=$(this).offset().top+$(this).outerHeight()-(!$.browser.mozilla?2:0)+op.options.menuTop;l=$(this).offset().left+op.options.menuLeft}break}$(this.menu).css({position:"absolute",top:t,left:l});if(!type||type=="cm")op.rootMenu=this.menu;$(this.menuContainer).bind(mouseOut,function(){$(document).one("click.closeMbMenu",function(){$(document).removeMbMenu(op,true)})});if(op.options.fadeInTime>0)$(this.menuContainer).fadeIn(op.options.fadeInTime);else $(this.menuContainer).show();var wh=op.options.containment=="window"?$(window).height():$("#"+op.options.containment).offset().top+$("#"+op.options.containment).outerHeight(),ww=op.options.containment=="window"?$(window).width():$("#"+op.options.containment).offset().left+$("#"+op.options.containment).outerWidth(),mh=$(this.menuContainer).outerHeight(),mw=$(this.menuContainer).outerWidth(),actualX=$(where.find(".menuDiv:first")).offset().left-$(window).scrollLeft(),actualY=$(where.find(".menuDiv:first")).offset().top-$(window).scrollTop();switch(type){case "sm":if(actualX+mw>=ww&&mw<ww)l-=op.options.menuWidth*2-op.options.submenuLeft*2;break;case "cm":if(actualX+op.options.menuWidth*1.5>=ww&&mw<ww)l-=op.options.menuWidth-op.options.submenuLeft;break;default:if(actualX+mw>=ww&&mw<ww)l-=$(this.menuContainer).offset().left+mw-ww+18;break}if(actualY+mh>=wh-10&&mh<wh)t-=actualY+mh-wh+10;$(this.menu).css({top:t,left:l})},removeMbMenu:function(op,fade){if(!op)op=$.mbMenu.options.actualMenuOpener;if(!op)return;if(op.rootMenu){$(op.actualOpenedMenu).removeAttr("isOpen").removeClass("selected");$("[isOpen]").removeAttr("isOpen");$(op.rootMenu).css({width:1,height:1});if(fade)$(op.rootMenu).fadeOut(op.options.fadeOutTime,function(){$(this).remove()});else $(op.rootMenu).remove();op.rootMenu=false;op.clicked=false}},getMouseX:function(e){var mouseX;if($.browser.msie)mouseX=e.clientX+document.documentElement.scrollLeft;else mouseX=e.pageX;if(mouseX<0)mouseX=0;return mouseX},getMouseY:function(e){var mouseY;if($.browser.msie)mouseY=e.clientY+document.documentElement.scrollTop;else mouseY=e.pageY;if(mouseY<0)mouseY=0;return mouseY},mb_bringToFront:function(){var zi=10;$("*").each(function(){if($(this).css("position")=="absolute"||$(this).css("position")=="fixed"){var cur=parseInt($(this).css("zIndex"));zi=cur>zi?parseInt($(this).css("zIndex")):zi}});$(this).css("zIndex",zi+=10)},mb_hover:function(hoverIntent,fn1,fn2){if(hoverIntent==0)$(this).hover(fn1,fn2);else $(this).hoverIntent({sensitivity:30,interval:hoverIntent,timeout:0,over:fn1,out:fn2})}});$.fn.buildMenu=$.mbMenu.buildMenu;$.fn.buildContextualMenu=$.mbMenu.buildContextualMenu})(jQuery)
