﻿/*  */

/* 
* Supersubs v0.2b - jQuery plugin 
* Copyright (c) 2008 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 
* 
* 
* This plugin automatically adjusts submenu widths of suckerfish-style menus to that of 
* their longest list item children. If you use this, please expect bugs and report them 
* to the jQuery Google Group with the word 'Superfish' in the subject line. 
* 
*/ 

;(function($){ // $ will refer to jQuery within this closure 

$.fn.supersubs = function(options){ 
var opts = $.extend({}, $.fn.supersubs.defaults, options); 
// return original object to support chaining 
return this.each(function() { 
// cache selections 
var $$ = $(this); 
// support metadata 
var o = $.meta ? $.extend({}, opts, $$.data()) : opts; 
// get the font size of menu. 
// .css('fontSize') returns various results cross-browser, so measure an em dash instead 
var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({ 
'padding' : 0, 
'position' : 'absolute', 
'top' : '-999em', 
'width' : 'auto' 
}).appendTo($$).width(); //clientWidth is faster, but was incorrect here 
// remove em dash 
$('#menu-fontsize').remove(); 
// cache all ul elements 
$ULs = $$.find('ul'); 
// loop through each ul in menu 
$ULs.each(function(i) { 
// cache this ul 
var $ul = $ULs.eq(i); 
// get all (li) children of this ul 
var $LIs = $ul.children(); 
// get all anchor grand-children 
var $As = $LIs.children('a'); 
// force content to one line and save current float property 
var liFloat = $LIs.css('white-space','nowrap').css('float'); 
// remove width restrictions and floats so elements remain vertically stacked 
var emWidth = $ul.add($LIs).add($As).css({ 
'float' : 'none', 
'width' : 'auto' 
}) 
// this ul will now be shrink-wrapped to longest li due to position:absolute 
// so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer 
.end().end()[0].clientWidth / fontsize; 
// add more width to ensure lines don't turn over at certain sizes in various browsers 
emWidth += o.extraWidth; 
// restrict to at least minWidth and at most maxWidth 
if (emWidth > o.maxWidth) { emWidth = o.maxWidth; } 
else if (emWidth < o.minWidth) { emWidth = o.minWidth; } 
emWidth += 'em'; 
// set ul to width in ems 
$ul.css('width',emWidth); 
// restore li floats to avoid IE bugs 
// set li width to full width of this ul 
// revert white-space to normal 
$LIs.css({ 
'float' : liFloat, 
'width' : '100%', 
'white-space' : 'normal' 
}) 
// update offset position of descendant ul to reflect new width of parent 
.each(function(){ 
var $childUl = $('>ul',this); 
var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right'; 
$childUl.css(offsetDirection,emWidth); 
}); 
}); 

}); 
}; 
// expose defaults 
$.fn.supersubs.defaults = { 
minWidth : 9, // requires em unit. 
maxWidth : 25, // requires em unit. 
extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values 
}; 

})(jQuery); // plugin code ends 
