(function($){
 /* hoverIntent by Brian Cherne */
 $.fn.hoverIntent = function(f,g) {
 // default configuration options
 var cfg = {
 sensitivity: 7,
 interval: 100,
 timeout: 0
 };
 // override configuration options with user supplied object
 cfg = $.extend(cfg, g ? { over: f, out: g } : f );

 // instantiate variables
 // cX, cY = current X and Y position of mouse, updated by mousemove event
 // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
 var cX, cY, pX, pY;

 // A private function for getting mouse position
 var track = function(ev) {
 cX = ev.pageX;
 cY = ev.pageY;
 };

 // A private function for comparing current and previous mouse position
 var compare = function(ev,ob) {
 ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
 // compare mouse positions to see if they've crossed the threshold
 if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
 $(ob).unbind("mousemove",track);
 // set hoverIntent state to true (so mouseOut can be called)
 ob.hoverIntent_s = 1;
 return cfg.over.apply(ob,[ev]);
 } else {
 // set previous coordinates for next time
 pX = cX; pY = cY;
 // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
 ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
 }
 };

 // A private function for delaying the mouseOut function
 var delay = function(ev,ob) {
 ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
 ob.hoverIntent_s = 0;
 return cfg.out.apply(ob,[ev]);
 };

 // A private function for handling mouse 'hovering'
 var handleHover = function(e) {
 // next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
 var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
 while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
 if ( p == this ) { return false; }

 // copy objects to be passed into t (required for event object to be passed in IE)
 var ev = jQuery.extend({},e);
 var ob = this;

 // cancel hoverIntent timer if it exists
 if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }

 // else e.type == "onmouseover"
 if (e.type == "mouseover") {
 // set "previous" X and Y position based on initial entry point
 pX = ev.pageX; pY = ev.pageY;
 // update "current" X and Y position based on mousemove
 $(ob).bind("mousemove",track);
 // start polling interval (self-calling timeout) to compare mouse coordinates over time
 if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}

 // else e.type == "onmouseout"
 } else {
 // unbind expensive mousemove event
 $(ob).unbind("mousemove",track);
 // if hoverIntent state is true, then call the mouseOut function after the specified delay
 if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
 }
 };

 // bind the function to the two event listeners
 return this.mouseover(handleHover).mouseout(handleHover);
 };
 
})(jQuery);
/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-06-19 20:25:28 -0500 (Tue, 19 Jun 2007) $
 * $Rev: 2111 $
 *
 * Version 2.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&parseInt($.browser.version)<=6){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};if(!$.browser.version)$.browser.version=navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)[1];})(jQuery);

/*
 * Superfish v1.4.8 - jQuery menu widget
 * 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
 *
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
 */

;(function($){
 $.fn.superfish = function(op){

 var sf = $.fn.superfish,
 c = sf.c,
 $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
 over = function(){
 var $$ = $(this), menu = getMenu($$);
 clearTimeout(menu.sfTimer);
 $$.showSuperfishUl().siblings().hideSuperfishUl();
 },
 out = function(){
 var $$ = $(this), menu = getMenu($$), o = sf.op;
 clearTimeout(menu.sfTimer);
 menu.sfTimer=setTimeout(function(){
 o.retainPath=($.inArray($$[0],o.$path)>-1);
 $$.hideSuperfishUl();
 if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
 },o.delay); 
 },
 getMenu = function($menu){
 var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
 sf.op = sf.o[menu.serial];
 return menu;
 },
 addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
 
 return this.each(function() {
 var s = this.serial = sf.o.length;
 var o = $.extend({},sf.defaults,op);
 o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
 $(this).addClass([o.hoverClass,c.bcClass].join(' '))
 .filter('li:has(ul)').removeClass(o.pathClass);
 });
 sf.o[s] = sf.op = o;
 
 $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
 if (o.autoArrows) addArrow( $('>a:first-child',this) );
 })
 .not('.'+c.bcClass)
 .hideSuperfishUl();
 
 var $a = $('a',this);
 $a.each(function(i){
 var $li = $a.eq(i).parents('li');
 $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
 });
 o.onInit.call(this);
 
 }).each(function() {
 menuClasses = [c.menuClass];
 if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
 $(this).addClass(menuClasses.join(' '));
 });
 };

 var sf = $.fn.superfish;
 sf.o = [];
 sf.op = {};
 sf.IE7fix = function(){
 var o = sf.op;
 if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
 this.toggleClass(sf.c.shadowClass+'-off');
 };
 sf.c = {
 bcClass : 'sf-breadcrumb',
 menuClass : 'sf-js-enabled',
 anchorClass : 'sf-with-ul',
 arrowClass : 'sf-sub-indicator',
 shadowClass : 'sf-shadow'
 };
 sf.defaults = {
 hoverClass : 'sfHover',
 pathClass : 'overideThisToUse',
 pathLevels : 1,
 delay : 800,
 animation : {opacity:'show'},
 speed : 'normal',
 autoArrows : true,
 dropShadows : true,
 disableHI : false, // true disables hoverIntent detection
 onInit : function(){}, // callback functions
 onBeforeShow: function(){},
 onShow : function(){},
 onHide : function(){}
 };
 $.fn.extend({
 hideSuperfishUl : function(){
 var o = sf.op,
 not = (o.retainPath===true) ? o.$path : '';
 o.retainPath = false;
 var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
 .find('>ul').hide().css('visibility','hidden');
 o.onHide.call($ul);
 return this;
 },
 showSuperfishUl : function(){
 var o = sf.op,
 sh = sf.c.shadowClass+'-off',
 $ul = this.addClass(o.hoverClass)
 .find('>ul:hidden').css('visibility','visible');
 sf.IE7fix.call($ul);
 o.onBeforeShow.call($ul);
 $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
 return this;
 }
 });

})(jQuery);


/*
 * 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

