
(function($){$.fn.parentsUntil=function(match){var a=[];$(this[0]).parents().each(function(){a.push(this);return!$(this).is(match);});return this.pushStack(a,arguments);};$.fn.jdMenu=function(inSettings){var settings=$.extend({},arguments.callee.defaults,inSettings);return this.each(function(){$(this).addClass('jd_menu_flag_root');this.$settings=$.extend({},settings,{isVerticalMenu:$(this).is('.jd_menu_vertical')});addEvents(this);});};$.fn.jdMenu.defaults={activateDelay:750,showDelay:150,hideDelay:550,onShow:function(){return true;},onHide:function(){return true;},onAnimate:null,offset:2,iframe:$.browser.msie};$.fn.jdMenuHide=function(){return this.each(function(){hideMenu.apply(this);});};$.fn.jdMenuShow=function(){return this.each(function(){showMenu.apply(this);});};function getSettings(el){return $(el).parents('ul.jd_menu_flag_root')[0].$settings;}
function addEvents(ul){removeEvents(ul);$('> li',ul).hover(hoverOver,hoverOut).bind('click',itemClick).find('> a.accessible').bind('click',accessibleClick);};function removeEvents(ul){$('> li',ul).unbind('mouseover').unbind('mouseout').unbind('click').find('> a.accessible').unbind('click');};function addHoverClass(li){var c='jd_menu_hover'+($(li).parent().is('.jd_menu_flag_root')?'_toolbar':'');$(li).addClass(c).find('> a').addClass(c);}
function hoverOver(){addHoverClass(this);if(this.$timer){clearTimeout(this.$timer);}
if($('> ul',this).size()>0){var settings=getSettings(this);var delay=($(this).parents('ul.jd_menu_flag_root').find('ul:visible').size()==0)?settings.activateDelay:settings.showDelay;var t=this;this.$timer=setTimeout(function(){showMenu.apply(t);},delay);}};function hoverOut(){$(this).removeClass('jd_menu_hover').removeClass('jd_menu_hover_toolbar').find('> a').removeClass('jd_menu_hover').removeClass('jd_menu_hover_toolbar');if(this.$timer){clearTimeout(this.$timer);}
if($(this).is(':visible')&&$('> ul',this).size()>0){var settings=getSettings(this);var ul=$('> ul',this)[0];this.$timer=setTimeout(function(){hideMenu.apply(ul);},settings.hideDelay);}};function showMenu(){var ul=$('> ul',this).get(0);if($(ul).is(':visible')){return;}
addHoverClass(this);$(this).parent().find('> li > ul:visible').not(ul).each(function(){hideMenu.apply(this);});var settings=getSettings(this);if(this.$timer){clearTimeout(this.$timer);}
settings.onShow.apply(this);addEvents(ul);$(ul).css({visibility:'hidden',left:0,top:0}).show();var bw=parseInt($(this).parent().css('borderRightWidth'));var offset=bw*settings.offset;var ww=$(window).width();var ow=$(ul).outerWidth();var liOffset=$(this).offset({border:false});var x=0,y=0;if($(this).parentsUntil('ul.jd_menu_flag_root').filter('li').size()==0){if(settings.isVerticalMenu){x=liOffset.left+$(this).outerWidth()-offset;y=liOffset.top;if(ww<(x+ow)){x=liOffset.left+offset;y+=$(this).outerHeight()-offset;}}else{x=liOffset.left;y=liOffset.top+$(this).outerHeight();if(ww<(x+ow)){x=ww-ow;if(x<0){x=0;}}}}else{y=liOffset.top-$(this).parent().offset().top;if((ww<(liOffset.left+$(this).outerWidth()+ow))){x=(-ow)+offset;if((liOffset.left+x)<0){x=offset;y+=$(this).outerHeight()-offset;}}else{x=$(this).outerWidth()-offset;}}
if(settings.iframe){$(ul).bgiframe();}
if(settings.onAnimate){$(ul).hide().css({left:x,top:y,visibility:'visible'});settings.onAnimate.apply(ul);}else{$(ul).css({left:x,top:y,visibility:'visible'});}}
function hideMenu(recurse){if(!$(this).is(':visible')){return;}
$('> li > ul:visible',this).each(function(){hideMenu.apply(this,[false]);});if($(this).is('.jd_menu_flag_root')){return;}
var elms=$('> li',this).add($(this).parent());elms.removeClass('jd_menu_hover').removeClass('jd_menu_hover_toolbar').find('> a').removeClass('jd_menu_hover').removeClass('jd_menu_hover_toolbar');removeEvents(this);$(this).hide().find('> .bgiframe').remove();var settings=getSettings(this);settings.onHide.apply(this);if(recurse==true){$(this).parentsUntil('ul.jd_menu_flag_root').removeClass('jd_menu_hover').removeClass('jd_menu_hover_toolbar').not('.jd_menu_flag_root').filter('ul').each(function(){hideMenu.apply(this,[false]);});}}
function accessibleClick(e){if($(this).is('.accessible')){e.preventDefault();}}
function itemClick(e){e.stopPropagation();if($('> ul',this).size()>0){showMenu.apply(this);}else{if($(e.target).is('li')){if($('> a',e.target).not('.accessible').size()>0){var lnk=$('> a',e.target).not('.accessible').get(0);if(!lnk.onclick){window.open(lnk.href,lnk.target||'_self');}else{$(lnk).click();}}}
hideMenu.apply($(this).parent(),[true]);}}})(jQuery);