jQuery.noConflict();var allUIMenus = [];jQuery.fn.menu = function(options){var caller = this;var options = options;var m = new Menu(caller, options);allUIMenus.push(m);jQuery(this).mousedown(function(){if (!m.menuOpen){m.showLoading();};}).click(function(){if (m.menuOpen == false) { m.showMenu(); }else { m.kill();};return false; }); };  function Menu(caller, options){ var menu = this; var caller = jQuery(caller);var container = jQuery('<div class="fg-menu-container ui-widget ui-widget-content ui-corner-all">'+options.content+'</div>');this.menuOpen = false;this.menuExists = false;var options = jQuery.extend({content: null,width: 180,maxHeight: 180,positionOpts: {posX: 'left',posY: 'bottom',offsetX: 0,offsetY: 0,directionH: 'right', directionV: 'down',detectH: true,detectV: true,linkToFront: false},showSpeed: 200,callerOnState: 'ui-state-active',loadingState: 'ui-state-loading', linkHover: 'ui-state-hover',linkHoverSecondary: 'li-hover',crossSpeed: 200,crumbDefaultText: 'Choose an option:',backLink: true,backLinkText: 'Back', flyOut: false,flyOutOnState: 'ui-state-default',nextMenuLink: 'ui-icon-triangle-1-e',topLinkText: 'All',nextCrumbLink: 'ui-icon-carat-1-e'}, options);var killAllMenus = function(){jQuery.each(allUIMenus, function(i){if (allUIMenus[i].menuOpen) { allUIMenus[i].kill(); };});};this.kill = function(){caller.removeClass(options.loadingState).removeClass('fg-menu-open').removeClass(options.callerOnState);container.find('li').removeClass(options.linkHoverSecondary).find('a').removeClass(options.linkHover);if (options.flyOutOnState) { container.find('li a').removeClass(options.flyOutOnState); };if (options.callerOnState) { caller.removeClass(options.callerOnState); };if (container.is('.fg-menu-ipod')) { menu.resetDrilldownMenu(); }; if (container.is('.fg-menu-flyout')) { menu.resetFlyoutMenu(); };container.parent().hide();menu.menuOpen = false;jQuery(document).unbind('click', killAllMenus); jQuery(document).unbind('keydown'); };  this.showLoading = function(){caller.addClass(options.loadingState); };  this.showMenu = function(){ killAllMenus(); if (!menu.menuExists) { menu.create() }; caller .addClass('fg-menu-open') .addClass(options.callerOnState); container.parent().show().click(function(){ menu.kill(); return false; }); container.hide().slideDown(options.showSpeed).find('.fg-menu:eq(0)'); menu.menuOpen = true; caller.removeClass(options.loadingState); jQuery(document).click(killAllMenus); jQuery(document).keydown(function(event){ var e; if (event.which !="") { e = event.which; } else if (event.charCode != "") { e = event.charCode; } else if (event.keyCode != "") { e = event.keyCode; }  var menuType = (jQuery(event.target).parents('div').is('.fg-menu-flyout')) ? 'flyout' : 'ipod' ;  switch(e) { case 37: if (menuType == 'flyout') { jQuery(event.target).trigger('mouseout'); if (jQuery('.'+options.flyOutOnState).size() > 0) { jQuery('.'+options.flyOutOnState).trigger('mouseover'); }; };  if (menuType == 'ipod') { jQuery(event.target).trigger('mouseout'); if (jQuery('.fg-menu-footer').find('a').size() > 0) { jQuery('.fg-menu-footer').find('a').trigger('click'); }; if (jQuery('.fg-menu-header').find('a').size() > 0) { jQuery('.fg-menu-current-crumb').prev().find('a').trigger('click'); }; if (jQuery('.fg-menu-current').prev().is('.fg-menu-indicator')) { jQuery('.fg-menu-current').prev().trigger('mouseover'); }; }; return false; break;  case 38: if (jQuery(event.target).is('.' + options.linkHover)) { var prevLink = jQuery(event.target).parent().prev().find('a:eq(0)'); if (prevLink.size() > 0) { jQuery(event.target).trigger('mouseout'); prevLink.trigger('mouseover'); }; } else { container.find('a:eq(0)').trigger('mouseover'); } return false; break;  case 39: if (jQuery(event.target).is('.fg-menu-indicator')) { if (menuType == 'flyout') { jQuery(event.target).next().find('a:eq(0)').trigger('mouseover'); } else if (menuType == 'ipod') { jQuery(event.target).trigger('click'); setTimeout(function(){ jQuery(event.target).next().find('a:eq(0)').trigger('mouseover'); }, options.crossSpeed); }; }; return false; break;  case 40: if (jQuery(event.target).is('.' + options.linkHover)) { var nextLink = jQuery(event.target).parent().next().find('a:eq(0)'); if (nextLink.size() > 0) { jQuery(event.target).trigger('mouseout'); nextLink.trigger('mouseover'); }; } else { container.find('a:eq(0)').trigger('mouseover'); } return false; break;  case 27: killAllMenus(); break;  case 13: if (jQuery(event.target).is('.fg-menu-indicator') && menuType == 'ipod') { jQuery(event.target).trigger('click'); setTimeout(function(){ jQuery(event.target).next().find('a:eq(0)').trigger('mouseover'); }, options.crossSpeed); }; break; }; }); };  this.create = function(){ container.css({ width: options.width }).appendTo('body').find('ul:first').not('.fg-menu-breadcrumb').addClass('fg-menu'); container.find('ul, li a').addClass('ui-corner-all'); container.find('ul').attr('role', 'menu').eq(0).attr('aria-activedescendant','active-menuitem').attr('aria-labelledby', caller.attr('id')); container.find('li').attr('role', 'menuitem'); container.find('li:has(ul)').attr('aria-haspopup', 'true').find('ul').attr('aria-expanded', 'false'); container.find('a').attr('tabindex', '-1'); if (container.find('ul').size() > 1) { if (options.flyOut) { menu.flyout(container, options); } else { menu.drilldown(container, options); } } else { container.find('a').click(function(){ menu.chooseItem(this); return false; }); };  if (options.linkHover) { var allLinks = container.find('.fg-menu li a'); allLinks.hover( function(){ var menuitem = jQuery(this); jQuery('.'+options.linkHover).removeClass(options.linkHover).blur().parent().removeAttr('id'); jQuery(this).addClass(options.linkHover).focus().parent().attr('id','active-menuitem'); }, function(){ jQuery(this).removeClass(options.linkHover).blur().parent().removeAttr('id'); } ); };  if (options.linkHoverSecondary) { container.find('.fg-menu li').hover( function(){ jQuery(this).siblings('li').removeClass(options.linkHoverSecondary); if (options.flyOutOnState) { jQuery(this).siblings('li').find('a').removeClass(options.flyOutOnState); } jQuery(this).addClass(options.linkHoverSecondary); }, function(){ jQuery(this).removeClass(options.linkHoverSecondary); } ); };  menu.setPosition(container, caller, options); menu.menuExists = true; };  this.chooseItem = function(item){ menu.kill();location.href = jQuery(item).attr('href'); };   };  Menu.prototype.flyout = function(container, options) { var menu = this;  this.resetFlyoutMenu = function(){ var allLists = container.find('ul ul'); allLists.removeClass('ui-widget-content').hide(); };  container.addClass('fg-menu-flyout').find('li:has(ul)').each(function(){ var linkWidth = container.width(); var showTimer, hideTimer; var allSubLists = jQuery(this).find('ul');  allSubLists.css({ left: linkWidth, width: linkWidth }).hide();  jQuery(this).find('a:eq(0)').addClass('fg-menu-indicator').html('<span>' + jQuery(this).find('a:eq(0)').text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>').hover( function(){ clearTimeout(hideTimer); var subList = jQuery(this).next(); if (!fitVertical(subList, jQuery(this).offset().top)) { subList.css({ top: 'auto', bottom: 0 }); }; if (!fitHorizontal(subList, jQuery(this).offset().left + 100)) { subList.css({ left: 'auto', right: linkWidth, 'z-index': 999 }); }; showTimer = setTimeout(function(){ subList.addClass('ui-widget-content').show(options.showSpeed).attr('aria-expanded', 'true'); }, 300); }, function(){ clearTimeout(showTimer); var subList = jQuery(this).next(); hideTimer = setTimeout(function(){ subList.removeClass('ui-widget-content').hide(options.showSpeed).attr('aria-expanded', 'false'); }, 400); } );  jQuery(this).find('ul a').hover( function(){ clearTimeout(hideTimer); if (jQuery(this).parents('ul').prev().is('a.fg-menu-indicator')) { jQuery(this).parents('ul').prev().addClass(options.flyOutOnState); } }, function(){ hideTimer = setTimeout(function(){ allSubLists.hide(options.showSpeed); container.find(options.flyOutOnState).removeClass(options.flyOutOnState); }, 500); } ); });  container.find('a').click(function(){ menu.chooseItem(this); return false; }); };   Menu.prototype.drilldown = function(container, options) { var menu = this; var topList = container.find('.fg-menu'); var breadcrumb = jQuery('<ul class="fg-menu-breadcrumb ui-widget-header ui-corner-all ui-helper-clearfix"></ul>'); var crumbDefaultHeader = jQuery('<li class="fg-menu-breadcrumb-text">'+options.crumbDefaultText+'</li>'); var firstCrumbText = (options.backLink) ? options.backLinkText : options.topLinkText; var firstCrumbClass = (options.backLink) ? 'fg-menu-prev-list' : 'fg-menu-all-lists'; var firstCrumbLinkClass = (options.backLink) ? 'ui-state-default ui-corner-all' : ''; var firstCrumbIcon = (options.backLink) ? '<span class="ui-icon ui-icon-triangle-1-w"></span>' : ''; var firstCrumb = jQuery('<li class="'+firstCrumbClass+'"><a href="#" class="'+firstCrumbLinkClass+'">'+firstCrumbIcon+firstCrumbText+'</a></li>');  container.addClass('fg-menu-ipod');  if (options.backLink) { breadcrumb.addClass('fg-menu-footer').appendTo(container).hide(); } else { breadcrumb.addClass('fg-menu-header').prependTo(container); }; breadcrumb.append(crumbDefaultHeader);  var checkMenuHeight = function(el){ if (el.height() > options.maxHeight) { el.addClass('fg-menu-scroll') }; el.css({ height: options.maxHeight }); };  var resetChildMenu = function(el){ el.removeClass('fg-menu-scroll').removeClass('fg-menu-current').height('auto'); };  this.resetDrilldownMenu = function(){ jQuery('.fg-menu-current').removeClass('fg-menu-current'); topList.animate({ left: 0 }, options.crossSpeed, function(){ jQuery(this).find('ul').each(function(){ jQuery(this).hide(); resetChildMenu(jQuery(this)); }); topList.addClass('fg-menu-current'); }); jQuery('.fg-menu-all-lists').find('span').remove(); breadcrumb.empty().append(crumbDefaultHeader); jQuery('.fg-menu-footer').empty().hide(); checkMenuHeight(topList); };  topList .addClass('fg-menu-content fg-menu-current ui-widget-content ui-helper-clearfix') .css({ width: container.width() }) .find('ul') .css({ width: container.width(), left: container.width() }) .addClass('ui-widget-content') .hide(); checkMenuHeight(topList);  topList.find('a').each(function(){ if (jQuery(this).next().is('ul')) { jQuery(this) .addClass('fg-menu-indicator') .each(function(){ jQuery(this).html('<span>' + jQuery(this).text() + '</span><span class="ui-icon '+options.nextMenuLink+'"></span>'); }) .click(function(){ var nextList = jQuery(this).next();     var parentUl = jQuery(this).parents('ul:eq(0)');        var parentLeft = (parentUl.is('.fg-menu-content')) ? 0 : parseFloat(topList.css('left'));         var nextLeftVal = Math.round(parentLeft - parseFloat(container.width()));     var footer = jQuery('.fg-menu-footer');     resetChildMenu(parentUl);     checkMenuHeight(nextList); topList.animate({ left: nextLeftVal }, options.crossSpeed);     nextList.show().addClass('fg-menu-current').attr('aria-expanded', 'true');             var setPrevMenu = function(backlink){     var b = backlink;     var c = jQuery('.fg-menu-current');     var prevList = c.parents('ul:eq(0)');     c.hide().attr('aria-expanded', 'false');     resetChildMenu(c);     checkMenuHeight(prevList);     prevList.addClass('fg-menu-current').attr('aria-expanded', 'true');     if (prevList.hasClass('fg-menu-content')) { b.remove(); footer.hide(); };     }; if (options.backLink) { if (footer.find('a').size() == 0) { footer.show(); jQuery('<a href="#"><span class="ui-icon ui-icon-triangle-1-w"></span> <span>Back</span></a>') .appendTo(footer) .click(function(){ var b = jQuery(this);     var prevLeftVal = parseFloat(topList.css('left')) + container.width();             topList.animate({ left: prevLeftVal },  options.crossSpeed, function(){     setPrevMenu(b);     }); return false; }); } }     else {     if (breadcrumb.find('li').size() == 1){ breadcrumb.empty().append(firstCrumb); firstCrumb.find('a').click(function(){ menu.resetDrilldownMenu(); return false; }); } jQuery('.fg-menu-current-crumb').removeClass('fg-menu-current-crumb'); var crumbText = jQuery(this).find('span:eq(0)').text(); var newCrumb = jQuery('<li class="fg-menu-current-crumb"><a href="javascript://" class="fg-menu-crumb">'+crumbText+'</a></li>'); newCrumb .appendTo(breadcrumb) .find('a').click(function(){ if (jQuery(this).parent().is('.fg-menu-current-crumb')){ menu.chooseItem(this); } else { var newLeftVal = - (jQuery('.fg-menu-current').parents('ul').size() - 1) * 180; topList.animate({ left: newLeftVal }, options.crossSpeed, function(){ setPrevMenu(); }); jQuery(this).parent().addClass('fg-menu-current-crumb').find('span').remove(); jQuery(this).parent().nextAll().remove(); }; return false; }); newCrumb.prev().append(' <span class="ui-icon '+options.nextCrumbLink+'"></span>');     };     return false;         }); } else { jQuery(this).click(function(){ menu.chooseItem(this); return false; }); }; }); }; Menu.prototype.setPosition = function(widget, caller, options) { var el = widget; var referrer = caller; var dims = { refX: referrer.offset().left, refY: referrer.offset().top, refW: referrer.getTotalWidth(), refH: referrer.getTotalHeight() }; var options = options; var xVal, yVal;  var helper = jQuery('<div class="positionHelper"></div>'); helper.css({ position: 'absolute', left: dims.refX, top: dims.refY, width: dims.refW, height: dims.refH }); el.wrap(helper); switch(options.positionOpts.posX) { case 'left': xVal = 0; break; case 'center': xVal = dims.refW / 2; break; case 'right': xVal = dims.refW; break; }; switch(options.positionOpts.posY) { case 'top': yVal = 0; break; case 'center': yVal = dims.refH / 2; break; case 'bottom': yVal = dims.refH; break; }; xVal += options.positionOpts.offsetX; yVal += options.positionOpts.offsetY; if (options.positionOpts.directionV == 'up') { el.css({ top: 'auto', bottom: yVal }); if (options.positionOpts.detectV && !fitVertical(el)) { el.css({ bottom: 'auto', top: yVal }); } } else { el.css({ bottom: 'auto', top: yVal }); if (options.positionOpts.detectV && !fitVertical(el)) { el.css({ top: 'auto', bottom: yVal }); } }; if (options.positionOpts.directionH == 'left') { el.css({ left: 'auto', right: xVal }); if (options.positionOpts.detectH && !fitHorizontal(el)) { el.css({ right: 'auto', left: xVal }); } } else { el.css({ right: 'auto', left: xVal }); if (options.positionOpts.detectH && !fitHorizontal(el)) { el.css({ left: 'auto', right: xVal }); } }; if (options.positionOpts.linkToFront) { referrer.clone().addClass('linkClone').css({ position: 'absolute', top: 0, right: 'auto', bottom: 'auto', left: 0, width: referrer.width(), height: referrer.height() }).insertAfter(el); }; }; function sortBigToSmall(a, b) { return b - a; };  jQuery.fn.getTotalWidth = function(){ return jQuery(this).width() + parseInt(jQuery(this).css('paddingRight')) + parseInt(jQuery(this).css('paddingLeft')) + parseInt(jQuery(this).css('borderRightWidth')) + parseInt(jQuery(this).css('borderLeftWidth')); };  jQuery.fn.getTotalHeight = function(){ return jQuery(this).height() + parseInt(jQuery(this).css('paddingTop')) + parseInt(jQuery(this).css('paddingBottom')) + parseInt(jQuery(this).css('borderTopWidth')) + parseInt(jQuery(this).css('borderBottomWidth')); };  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; }; function fitHorizontal(el, leftOffset){ var leftVal = parseInt(leftOffset) || jQuery(el).offset().left; return (leftVal + jQuery(el).width() <= getWindowWidth() + getScrollLeft() && leftVal - getScrollLeft() >= 0); };  function fitVertical(el, topOffset){ var topVal = parseInt(topOffset) || jQuery(el).offset().top; return (topVal + jQuery(el).height() <= getWindowHeight() + getScrollTop() && topVal - getScrollTop() >= 0); }; 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' && jQuery.browser.msie && (parseFloat(jQuery('body').css('font-size')) / getWindowWidth()).toFixed(1) > 0.0) { var calcFontSize = function(){ return (parseFloat(jQuery('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; }; 
