(function($){$.fn.ddMenu=function(options){DDMenu(this,options);};function DDMenu(root,opts){opts=options(opts);var self=$(root);function object(parent){function F(){}
F.prototype=parent;return new F();}
function options(opts){var that=object($.fn.ddMenu.defaults);for(var i in opts){that[i]=opts[i];}
return that;}
function setUp(){if($.browser.msie){removeComments(self.get(0));}
var menuTag=self.get(0).tagName;var itemTag=self.children().get(0).tagName;self.wrap('<div class="'+opts.menuClass+'"><div class="'+opts.menuPanelClass+'"></div></div>');self.addClass(opts.subMenuClass);self.find(menuTag).addClass(opts.subMenuClass);self.find(itemTag).addClass(opts.itemClass);self.find(itemTag+' > *:first-child').wrap('<div class="'+opts.labelClass+'"></div>').addClass(opts.textClass);self.find(itemTag+':has('+menuTag+') > div.'+opts.labelClass).each(function(){var label=$(this);var height=label.height();label.prepend('<div class="'+opts.iconClass+'">&nbsp;</div>');label.height(height);var iconDiv=label.children('.'+opts.iconClass);setOuterHeight(iconDiv,height);setOuterWidth(label.children('.'+opts.textClass),label.outerWidth()-iconDiv.outerWidth(true));});self.find('.'+opts.labelClass).each(function(){var element=$(this);if(element.children().size()==1){element.hover(function(){replaceClass($(this),opts.labelClass,opts.labelHoverClass);},function(){replaceClass($(this),opts.labelHoverClass,opts.labelClass);});}
else{var links=element.find('a[href]:last-child');if(links.size()==1){links.hover(function(){replaceClass($(this),opts.textClass,opts.textHoverClass)},function(){replaceClass($(this),opts.textHoverClass,opts.textClass);});element.find('div:first-child').hover(function(){replaceClass($(this),opts.iconClass,opts.iconHoverClass);},function(){replaceClass($(this),opts.iconHoverClass,opts.iconClass);}).click(function(){drillDown(element.parent());});}
else{element.hover(function(){replaceClass($(this),opts.labelClass,opts.labelHoverClass);},function(){replaceClass($(this),opts.labelHoverClass,opts.labelClass);}).click(function(){drillDown(element.parent());});}}});self.find(menuTag).hide();addTitle(self.parent(),opts.rootTitle,true);choosePanel(self.parents('.'+opts.menuClass));highlight(self.parents('.'+opts.menuClass));}
function drillDown(element){var div=cloneSubmenu(element);var title=element.children(':first').children(':last').text();var menu=element.parents('.'+opts.menuClass).append(div);var left,top;var dir=opts.inDirection?opts.inDirection:opts.direction;switch(dir){case'west':left=-div.outerWidth();top=-menu.innerHeight();break;case'north':left=0;top=-(menu.outerHeight()+div.outerHeight());break;case'south':left=0;top=0;break;default:left=menu.outerWidth();top=-menu.innerHeight();break;}
div.css({marginLeft:left,marginTop:top});div.show();addTitle(div,title,false);highlight(element.parents('.'+opts.menuClass));div.animate({marginLeft:0,marginTop:-menu.innerHeight()-parseInt(div.css('padding-top').replace(/\D/g,''),10)},opts.inDuration?opts.inDuration:opts.duration,opts.inEasing?opts.inEasing:opts.easing);}
function drillUp(element){var wrapper=element.parent();var left,top;var dir=opts.outDirection?opts.outDirection:opts.direction;switch(dir){case'west':left=-element.outerWidth();top=-wrapper.innerHeight();break;case'north':left=0;top=-(wrapper.outerHeight()+element.outerHeight());break;case'south':left=0;top=0;break;default:left=wrapper.outerWidth();top=-wrapper.innerHeight();break;}
element.animate({marginLeft:left,marginTop:top},opts.outDuration?opts.outDuration:opts.duration,opts.outEasing?opts.outEasing:opts.easing,function(){element.remove();});}
function choosePanel(element){if(opts.initial!=null){var parts=opts.initial.split(opts.separator);var current=element.children(':first');for(var i in parts){if(i<parts.length-1){var label=current.find('.'+opts.labelClass+' .'+opts.textClass+":contains('"+parts[i]+"')");if(label){var menu=label.parents('.'+opts.itemClass).children('.'+opts.subMenuClass);if(menu){var div=cloneSubmenu(menu.parent());element.append(div);div.css({marginTop:-element.innerHeight()-parseInt(div.css('padding-top').replace(/\D/g,''),10)});div.show();addTitle(div,parts[i],false);current=div;}}}}}}
function highlight(element){if(opts.initial!=null&&element.find('.'+opts.labelInitialClass).size()==0){var parts=opts.initial.split(opts.separator);var current=element.children(':first');for(var i=0,count=parts.length;i<count;i++){if(i==count-1){current.children('.'+opts.subMenuClass).children('.'+opts.itemClass).children('.'+opts.labelClass).each(function(){if($(this).find('.'+opts.textClass).text()==parts[i]){replaceClass($(this),opts.labelClass,opts.labelInitialClass);$(this).hover(function(){replaceClass($(this),opts.labelInitialClass,opts.labelInitialHoverClass);},function(){replaceClass($(this),opts.labelInitialHoverClass,opts.labelInitialClass);});}});}
else{var next=current.next();if(!next)
return;var present=false;next.children('.'+opts.titleClass).find('.'+opts.titleLabelClass).each(function(){if($(this).text()==parts[i]){present=true;return false;}});if(!present)
return;else
current=next;}}}}
function cloneSubmenu(element){var div=$('<div class="'+opts.menuPanelClass+'"></div>');var menu=element.children(':last').clone(true).show();div.append(menu);return div;}
function addTitle(element,title,root){var markup='<div class="'+opts.titleClass+'">';if(!root){markup+='<div class="'+opts.titleIconClass+'">&nbsp;</div>';}
markup+='<div class="'+opts.titleLabelClass+'">'+"&lt; "+title+'</div></div>';element.prepend(markup);var titleDiv=element.find('.'+opts.titleClass);if(root){replaceClass(titleDiv,opts.titleClass,opts.titleRootClass);titleDiv.hover(function(){replaceClass($(this),opts.titleRootClass,opts.titleRootHoverClass);},function(){replaceClass($(this),opts.titleRootHoverClass,opts.titleRootClass);});}
else{var label=titleDiv.find('.'+opts.titleLabelClass);var icon=titleDiv.find('.'+opts.titleIconClass);titleDiv.hover(function(){replaceClass($(this),opts.titleClass,opts.titleHoverClass);},function(){replaceClass($(this),opts.titleHoverClass,opts.titleClass);}).click(function(){drillUp(element);});setOuterHeight(icon,label.outerHeight());setOuterWidth(label,titleDiv.outerWidth()-(icon.size()==0?0:icon.outerWidth(true)));label.css('margin-right',icon.outerWidth({margin:true}));}}
function setOuterHeight(elements,height){elements.each(function(){var element=$(this);var outside=0;var props=['border-top-width','border-bottom-width','padding-top','padding-bottom','margin-top','margin-bottom'];for(var i in props){var value=element.css(props[i]).replace(/\D/g,'');if(value!=NaN&&value!=''){outside+=parseInt(value,10);}}
element.height(height-outside);});}
function setOuterWidth(elements,width){elements.each(function(){var element=$(this);var outside=0;var props=['border-left-width','border-right-width','padding-left','padding-right'];for(var i in props){var value=element.css(props[i]).replace(/\D/g,'');if(value!=NaN&&value!=''){outside+=parseInt(value,10);}}
element.width(width-outside);});}
function removeComments(node){var i=0;var children=node.childNodes;var x;while((x=children[i++])){switch(x.nodeType){case 1:removeComments(x);break;case 8:node.removeChild(x);i--;break;}}}
function replaceClass(element,oldClass,newClass){if(element.hasClass(oldClass)){element.removeClass(oldClass);element.addClass(newClass);}}
setUp();return this;}
$.fn.ddMenu.defaults={rootTitle:'Menu',initial:null,separator:'|',duration:500,inDuration:null,outDuration:null,easing:'swing',inEasing:null,outEasing:null,direction:'east',inDirection:null,outDirection:null,menuClass:'bdc-dd-menu',menuPanelClass:'bdc-dd-menu-panel',subMenuClass:'bdc-dd-sub-menu',itemClass:'bdc-dd-item',labelClass:'bdc-dd-label',labelHoverClass:'bdc-dd-label-hover',labelInitialClass:'bdc-dd-label-initial',labelInitialHoverClass:'bdc-dd-label-initial-hover',textClass:'bdc-dd-text',textHoverClass:'bdc-dd-text-hover',iconClass:'bdc-dd-icon',iconHoverClass:'bdc-dd-icon-hover',titleClass:'bdc-dd-title',titleRootClass:'bdc-dd-title-root',titleHoverClass:'bdc-dd-title-hover',titleRootHoverClass:'bdc-dd-title-root-hover',titleLabelClass:'bdc-dd-title-label',titleIconClass:'bdc-dd-title-icon'};})(jQuery);