/* * Superfish v1.3 - jQuery menu widget * * Copyright (c) 2007 Joel Birch * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * YOU MAY DELETE THIS CHANGELOG: * v1.2.1 altered: 2nd July 07. added hide() before animate to make work for jQuery 1.1.3. See comment in 'over' function. * v1.2.2 altered: 2nd August 07. changed over function .find('ul') to .find('>ul') for smoother animations * Also deleted the iframe removal lines - not necessary it turns out * v1.2.3 altered: jquery 1.1.3.1 broke keyboard access - had to change quite a few things and set display:none on the * .superfish rule in CSS instead of top:-999em * v1.3 : Pretty much a complete overhaul to make all original features work in 1.1.3.1 and above. * .superfish rule reverted back to top:-999em (which is better) */ (function($){ $.fn.superfish = function(o){ var $sf = this, defaults = { hoverClass : 'sfHover', pathClass : 'overideThisToUse', delay : 800, animation : {opacity:'show'}, speed : 'normal' }, over = function(){ clearTimeout(this.sfTimer); clearTimeout($sf[0].sfTimer); $(this) .showSuperfishUl() .siblings() .hideSuperfishUl(); }, out = function(){ var $$ = $(this); if ( !$$.is('.'+o.bcClass) ) { this.sfTimer=setTimeout(function(){ $$.hideSuperfishUl(); if (!$('.'+o.hoverClass,$sf).length) { over.call($currents.hideSuperfishUl()); } },o.delay); } }; $.fn.extend({ hideSuperfishUl : function(){ return this .removeClass(o.hoverClass) .find('ul:visible') .hide() .end(); }, showSuperfishUl : function(){ return this .addClass(o.hoverClass) .find('>ul:hidden') .animate(o.animation,o.speed,function(){ $(this).removeAttr('style'); }) .end(); }, applySuperfishHovers : function(){ return this[($.fn.hoverIntent) ? 'hoverIntent' : 'hover'](over,out); } }); o = $.extend({bcClass:'sfbreadcrumb'},defaults,o || {}); var $currents = $('.'+o.pathClass,this).filter('li[ul]'); if ($currents.length) { $currents.each(function(){ $(this).removeClass(o.pathClass).addClass(o.hoverClass+' '+o.bcClass); }); } var $sfHovAr=$('li[ul]',this).applySuperfishHovers(over,out) .find('a').each(function(){ var $a = $(this), $li = $a.parents('li'); $a.focus(function(){ over.call($li); return false; }).blur(function(){ $li.removeClass(o.hoverClass); }); }) .end() .not('.'+o.bcClass) .hideSuperfishUl() .end(); $(window).unload(function(){ $sfHovAr.unbind('mouseover').unbind('mouseout'); }); return this.addClass('superfish').blur(function(){ out.call(this); }); }; })(jQuery);