function Menu(caller,settings){var settings=jQuery.extend({content:null,positionOpts:null,width:180,maxHeight:330,showSpeed:500,callerOnState:'btnMenuOn',itemHover:'hover',altClasses:null,crossSpeed:300,selectCategories:false,nextMenuLink:'nextLevel',topLinkText:'All'},settings);var menuLink=$(caller);var menu=$('<div class="menuContainer">'+settings.content+'</div>');var menuOpen=false;if(settings.selectCategories){menu.find('li:has(ul)').each(function(){$(this).find('a:first').after('<a href="#" class="'+settings.nextMenuLink+'">View next level &gt;</a>')})};this.create=function(){if(settings.content){menu.css({position:'absolute',top:0,left:'-9999px'});if(settings.altClasses){menu.addClass(settings.altClasses)};if(menuLink.width()>menu.width()){menu.css({width:menuLink.width()})};menu.appendTo('body').setRandomId({attribute:'menuid'}).css({width:settings.width}).find('ul:first').addClass('menu').css({position:'relative'});$('*[menuid]').parent().trigger('click');if(settings.callerOnState){menuLink.addClass(settings.callerOnState)};if(menu.children('ul').size()>0){this.drilldown(menu,settings)};menu.positionObject(menuLink,settings.positionOpts).hide().slideDown(settings.showSpeed).find('.menu:eq(0)').css({visibility:'visible'});menuOpen=true;menu.parent().click(this.kill);$(document).click(this.kill);if(settings.itemHover){menu.find('li').hover(function(){$(this).siblings().removeClass(settings.itemHover);$(this).addClass(settings.itemHover)},function(){$(this).removeClass(settings.itemHover)})};var that=this;if(settings.selectCategories){$('.ddMenu li a').not('.'+settings.nextMenuLink).click(function(){document.location=$(this).attr("href");that.kill();return false})}else{$('.ddMenu li a').not('.menuIndicator').click(function(){document.location=$(this).attr("href");that.kill();return false})}}};this.kill=function(){menu.parent().remove();if(menuLink.is('.'+settings.callerOnState)){menuLink.removeClass(settings.callerOnState)};menuOpen=false};return this};Menu.prototype.drilldown=function(menu,settings){var breadcrumb=$('<ul class="ddBreadcrumb clearfix" style="display: none;"></ul>');var ddmenu=$('<div class="ddMenu"></div>');menu.css({overflow:'hidden'}).children().eq(0).wrap(ddmenu);menu.prepend(breadcrumb);var listHeights=[];menu.find('.ddMenu').find('ul').each(function(i){listHeights[i]=$(this).height()});listHeights.sort(sortBigToSmall);menu.find('.ddMenu').find('ul').css({height:listHeights[0]});if(listHeights[0]>settings.maxHeight){menu.find('.ddMenu').addClass('scrollNeeded').css({height:(settings.maxHeight+30),overflow:'auto','overflow-x':'hidden'}).find('ul').css({width:(settings.width+2).pxToEm()})}else{menu.find('.ddMenu').css({height:listHeights[0]}).find('ul').css({width:settings.width})};menu.find('.ddMenu li a').each(function(){if(!$(this).next().is('.'+settings.nextMenuLink)){$(this).addClass('singleLink')}});var showNextLevel=function(el){var thisLink=$(el);var thisList=$(el).parents('ul:eq(0)');var nextList=$(el).next();var thisListId=thisList.attr('id');var addNewCrumb=function(){var crumbText;if(thisLink.prev().is('a')){crumbText=thisLink.prev().html()}else{crumbText=thisLink.html()};var newCrumb=$('<li class="currentCrumb" style="display: none;"><a href="javascript://" class="crumb">'+crumbText+'</a></li>');$('.currentCrumb').removeClass('currentCrumb');breadcrumb.append(newCrumb);newCrumb.show();newCrumb.find('a').click(function(){if($(this).parent().is('.currentCrumb')){document.location=$(this).attr("href");menu.kill();return false}else{nextList.find('ul').css({visibility:'hidden'});$(this).parent().nextAll().css({visibility:'hidden'}).slideUp(settings.crossSpeed,function(){$(this).remove()});$(this).parent().addClass('currentCrumb');return false}})};if(breadcrumb.css('display')=='none'){breadcrumb.slideDown();addNewCrumb()}else{addNewCrumb()};nextList.css({visibility:'visible',left:settings.width}).animate({left:0},settings.crossSpeed)};if(!settings.selectCategories){menu.find('.ddMenu li a').each(function(){if($(this).next().is('ul')){$(this).addClass('menuIndicator').click(function(){showNextLevel(this);return false})}})};menu.find('.'+settings.nextMenuLink).click(function(){showNextLevel(this);return false})};$.fn.equalHeights=function(px){$(this).each(function(){var currentTallest=0;$(this).children().each(function(i){if($(this).height()>currentTallest){currentTallest=$(this).height()}});if(!px||!Number.prototype.pxToEm)currentTallest=currentTallest.pxToEm($(this));var ie6=(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)==4&&navigator.appVersion.indexOf("MSIE 6.0")!=-1);if($.browser.msie&&(ie6)){$(this).children().css({'height':currentTallest})}$(this).children().css({'min-height':currentTallest})});return $(this)};$.fn.equalWidths=function(px){$(this).each(function(){var currentWidest=0;$(this).children().each(function(i){if($(this).width()>currentWidest){currentWidest=$(this).width()}});if(!px||!Number.prototype.pxToEm)currentWidest=currentWidest.pxToEm($(this));var ie6=(navigator.appName=="Microsoft Internet Explorer"&&parseInt(navigator.appVersion)==4&&navigator.appVersion.indexOf("MSIE 6.0")!=-1);if($.browser.msie&&(ie6)){$(this).children().css({'width':currentWidest})}$(this).children().css({'min-width':currentWidest})});return $(this)};Number.prototype.pxToEm=String.prototype.pxToEm=function(settings){settings=jQuery.extend({scope:'body',reverse:false},settings);var pxVal=(this=='')?0:parseFloat(this);var scopeVal;var getWindowWidth=function(){var de=document.documentElement;return self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth};if(settings.scope=='body'&&$.browser.msie&&(parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(1)>0.0){var calcFontSize=function(){return(parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(3)*16};scopeVal=calcFontSize()}else{scopeVal=parseFloat(jQuery(settings.scope).css("font-size"))};var result=(settings.reverse==true)?(pxVal*scopeVal).toFixed(2)+'px':(pxVal/scopeVal).toFixed(2)+'em';return result};function sortBigToSmall(a,b){return b-a};function getScrollTop(){return self.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop};function getScrollLeft(){return self.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft};function getWindowHeight(){var de=document.documentElement;return self.innerHeight||(de&&de.clientHeight)||document.body.clientHeight};function getWindowWidth(){var de=document.documentElement;return self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth};jQuery.fn.getTotalWidth=function(){return $(this).width()+parseInt($(this).css('paddingRight'))+parseInt($(this).css('paddingLeft'))};jQuery.fn.getTotalHeight=function(){return $(this).height()+parseInt($(this).css('paddingTop'))+parseInt($(this).css('paddingBottom'))};jQuery.fn.setRandomId=function(settings){var settings=jQuery.extend({children:null,attribute:null},settings);var thisAttr=settings.attribute||'id';var setId=function(el){var newId='id_'+Math.floor(Math.random()*9999);el.attr(thisAttr,newId)};if(settings.children){$(this).find(settings.children).each(setId($(this)))}else{setId($(this))}return $(this)};function fitHorizontal(el,leftOffset){var leftVal=parseInt(leftOffset)||$(el).offset().left;return(leftVal+$(el).width()<=getWindowWidth()+getScrollLeft()&&leftVal-getScrollLeft()>=0)};function fitVertical(el,topOffset){var topVal=parseInt(topOffset)||$(el).offset().top;return(topVal+$(el).height()<=getWindowHeight()+getScrollTop()&&topVal-getScrollTop()>=0)};jQuery.fn.positionObject=function(referrer,settings){var settings=jQuery.extend({posX:'left',posY:'bottom',offsetX:0,offsetY:0,directionH:'right',directionV:'down',detectH:true,detectV:true,linkToFront:false},settings);var el=$(this);var referrer=referrer;var dims={elW:el.width(),elH:el.height(),refX:referrer.offset().left,refY:referrer.offset().top,refW:referrer.getTotalWidth(),refH:referrer.getTotalHeight()};var xVal,yVal;el.insertPositionHelper(dims);switch(settings.posX){case'left':xVal=0;break;case'center':xVal=dims.refW/2;break;case'right':xVal=dims.refW;break};switch(settings.posY){case'top':yVal=0;break;case'center':yVal=dims.refH/2;break;case'bottom':yVal=dims.refH;break};xVal+=settings.offsetX;yVal+=settings.offsetY;if(settings.directionV=='up'){el.css({top:'auto',bottom:yVal});if(settings.detectV&&!fitVertical(el)){el.css({bottom:'auto',top:yVal})}}else{el.css({bottom:'auto',top:yVal});if(settings.detectV&&!fitVertical(el)){el.css({top:'auto',bottom:yVal})}};if(settings.directionH=='left'){el.css({left:'auto',right:xVal});if(settings.detectH&&!fitHorizontal(el)){el.css({right:'auto',left:xVal})}}else{el.css({right:'auto',left:xVal});if(settings.detectH&&!fitHorizontal(el)){el.css({left:'auto',right:xVal})}};if(settings.linkToFront){referrer.clone().addClass('linkClone').css({position:'absolute',top:0,right:'auto',bottom:'auto',left:0,width:referrer.width(),height:referrer.height()}).insertAfter(el)};return $(this)};jQuery.fn.insertPositionHelper=function(dims){var el=$(this);var dims=dims;var helper=$('<div class="positionHelper" style="width: 180px;"></div>');helper.css({left:dims.refX,top:dims.refY,height:dims.refH});el.wrap(helper);return $(this)};