jQuery(function() { initTabs(); initOpenClose(); initAccordion(); initCustomForms(); initMobileNav(); initStickyScrollBlock(); initDropDownClasses(); initDropDown(); }); // content tabs init function initTabs() { jQuery('.tabset').tabset({ tabLinks: 'a' }); } // open-close init function initOpenClose() { jQuery('.open-close').openClose({ activeClass: 'active', opener: '.opener', slider: '.slide', animSpeed: 400, effect: 'slide' }); } // accordion menu init function initAccordion() { jQuery('.accordion').slideAccordion({ opener: '.opener', slider: '.slide', animSpeed: 300 }); } // initialize custom form elements function initCustomForms() { jcf.setOptions('Select', { wrapNative: false, wrapNativeOnMobile: false, }); jcf.replaceAll(); } // mobile menu init function initMobileNav() { jQuery('body').mobileNav({ menuActiveClass: 'nav-open', menuOpener: '.nav-icon' }); } // initialize fixed blocks on scroll function initStickyScrollBlock() { jQuery('#header').stickyScrollBlock({ setBoxHeight: false, activeClass: 'fixed-position', positionType: 'fixed', extraTop: function() { var totalHeight = 0; jQuery('0').each(function() { totalHeight += jQuery(this).outerHeight(); }); return totalHeight; } }); } // add classes if item has dropdown function initDropDownClasses() { jQuery('#nav li').each(function() { var item = jQuery(this); var drop = item.find('ul'); var link = item.find('a').eq(0); if (drop.length) { item.addClass('has-drop-down'); if (link.length) link.addClass('has-drop-down-a'); } }); } // animated navigation init function initDropDown() { jQuery('#header').animDropdown({ effect: 'fade', drop: 'div.drop-down', animSpeed: 400 }); } /* * jQuery Tabs plugin */ ;(function($, $win) { 'use strict'; function Tabset($holder, options) { this.$holder = $holder; this.options = options; this.init(); } Tabset.prototype = { init: function() { this.$tabLinks = this.$holder.find(this.options.tabLinks); this.setStartActiveIndex(); this.setActiveTab(); if (this.options.autoHeight) { this.$tabHolder = $(this.$tabLinks.eq(0).attr(this.options.attrib)).parent(); } this.makeCallback('onInit', this); }, setStartActiveIndex: function() { var $classTargets = this.getClassTarget(this.$tabLinks); var $activeLink = $classTargets.filter('.' + this.options.activeClass); var $hashLink = this.$tabLinks.filter('[' + this.options.attrib + '="' + location.hash + '"]'); var activeIndex; if (this.options.checkHash && $hashLink.length) { $activeLink = $hashLink; } activeIndex = $classTargets.index($activeLink); this.activeTabIndex = this.prevTabIndex = (activeIndex === -1 ? (this.options.defaultTab ? 0 : null) : activeIndex); }, setActiveTab: function() { var self = this; this.$tabLinks.each(function(i, link) { var $link = $(link); var $classTarget = self.getClassTarget($link); var $tab = $($link.attr(self.options.attrib)); if (i !== self.activeTabIndex) { $classTarget.removeClass(self.options.activeClass); $tab.addClass(self.options.tabHiddenClass).removeClass(self.options.activeClass); } else { $classTarget.addClass(self.options.activeClass); $tab.removeClass(self.options.tabHiddenClass).addClass(self.options.activeClass); } self.attachTabLink($link, i); }); }, attachTabLink: function($link, i) { var self = this; $link.on(this.options.event + '.tabset', function(e) { e.preventDefault(); if (self.activeTabIndex === self.prevTabIndex && self.activeTabIndex !== i) { self.activeTabIndex = i; self.switchTabs(); } }); }, resizeHolder: function(height) { var self = this; if (height) { this.$tabHolder.height(height); setTimeout(function() { self.$tabHolder.addClass('transition'); }, 10); } else { self.$tabHolder.removeClass('transition').height(''); } }, switchTabs: function() { var self = this; var $prevLink = this.$tabLinks.eq(this.prevTabIndex); var $nextLink = this.$tabLinks.eq(this.activeTabIndex); var $prevTab = this.getTab($prevLink); var $nextTab = this.getTab($nextLink); $prevTab.removeClass(this.options.activeClass); if (self.haveTabHolder()) { this.resizeHolder($prevTab.outerHeight()); } setTimeout(function() { self.getClassTarget($prevLink).removeClass(self.options.activeClass); $prevTab.addClass(self.options.tabHiddenClass); $nextTab.removeClass(self.options.tabHiddenClass).addClass(self.options.activeClass); self.getClassTarget($nextLink).addClass(self.options.activeClass); if (self.haveTabHolder()) { self.resizeHolder($nextTab.outerHeight()); setTimeout(function() { self.resizeHolder(); self.prevTabIndex = self.activeTabIndex; self.makeCallback('onChange', self); }, self.options.animSpeed); } else { self.prevTabIndex = self.activeTabIndex; } }, this.options.autoHeight ? this.options.animSpeed : 1); }, getClassTarget: function($link) { return this.options.addToParent ? $link.parent() : $link; }, getActiveTab: function() { return this.getTab(this.$tabLinks.eq(this.activeTabIndex)); }, getTab: function($link) { return $($link.attr(this.options.attrib)); }, haveTabHolder: function() { return this.$tabHolder && this.$tabHolder.length; }, destroy: function() { var self = this; this.$tabLinks.off('.tabset').each(function() { var $link = $(this); self.getClassTarget($link).removeClass(self.options.activeClass); $($link.attr(self.options.attrib)).removeClass(self.options.activeClass + ' ' + self.options.tabHiddenClass); }); this.$holder.removeData('Tabset'); }, makeCallback: function(name) { if (typeof this.options[name] === 'function') { var args = Array.prototype.slice.call(arguments); args.shift(); this.options[name].apply(this, args); } } }; $.fn.tabset = function(opt) { var args = Array.prototype.slice.call(arguments); var method = args[0]; var options = $.extend({ activeClass: 'active', addToParent: false, autoHeight: false, checkHash: false, defaultTab: true, animSpeed: 500, tabLinks: 'a', attrib: 'href', event: 'click', tabHiddenClass: 'js-tab-hidden' }, opt); options.autoHeight = options.autoHeight && $.support.opacity; return this.each(function() { var $holder = jQuery(this); var instance = $holder.data('Tabset'); if (typeof opt === 'object' || typeof opt === 'undefined') { $holder.data('Tabset', new Tabset($holder, options)); } else if (typeof method === 'string' && instance) { if (typeof instance[method] === 'function') { args.shift(); instance[method].apply(instance, args); } } }); }; }(jQuery, jQuery(window))); /* * jQuery Open/Close plugin */ ;(function($) { function OpenClose(options) { this.options = $.extend({ addClassBeforeAnimation: true, hideOnClickOutside: false, activeClass: 'active', opener: '.opener', slider: '.slide', animSpeed: 400, effect: 'fade', event: 'click' }, options); this.init(); } OpenClose.prototype = { init: function() { if (this.options.holder) { this.findElements(); this.attachEvents(); this.makeCallback('onInit', this); } }, findElements: function() { this.holder = $(this.options.holder); this.opener = this.holder.find(this.options.opener); this.slider = this.holder.find(this.options.slider); }, attachEvents: function() { // add handler var self = this; this.eventHandler = function(e) { e.preventDefault(); if (self.slider.hasClass(slideHiddenClass)) { self.showSlide(); } else { self.hideSlide(); } }; self.opener.on(self.options.event, this.eventHandler); // hover mode handler if (self.options.event === 'hover') { self.opener.on('mouseenter', function() { if (!self.holder.hasClass(self.options.activeClass)) { self.showSlide(); } }); self.holder.on('mouseleave', function() { self.hideSlide(); }); } // outside click handler self.outsideClickHandler = function(e) { if (self.options.hideOnClickOutside) { var target = $(e.target); if (!target.is(self.holder) && !target.closest(self.holder).length) { self.hideSlide(); } } }; // set initial styles if (this.holder.hasClass(this.options.activeClass)) { $(document).on('click touchstart', self.outsideClickHandler); } else { this.slider.addClass(slideHiddenClass); } }, showSlide: function() { var self = this; if (self.options.addClassBeforeAnimation) { self.holder.addClass(self.options.activeClass); } self.slider.removeClass(slideHiddenClass); $(document).on('click touchstart', self.outsideClickHandler); self.makeCallback('animStart', true); toggleEffects[self.options.effect].show({ box: self.slider, speed: self.options.animSpeed, complete: function() { if (!self.options.addClassBeforeAnimation) { self.holder.addClass(self.options.activeClass); } self.makeCallback('animEnd', true); } }); }, hideSlide: function() { var self = this; if (self.options.addClassBeforeAnimation) { self.holder.removeClass(self.options.activeClass); } $(document).off('click touchstart', self.outsideClickHandler); self.makeCallback('animStart', false); toggleEffects[self.options.effect].hide({ box: self.slider, speed: self.options.animSpeed, complete: function() { if (!self.options.addClassBeforeAnimation) { self.holder.removeClass(self.options.activeClass); } self.slider.addClass(slideHiddenClass); self.makeCallback('animEnd', false); } }); }, destroy: function() { this.slider.removeClass(slideHiddenClass).css({ display: '' }); this.opener.off(this.options.event, this.eventHandler); this.holder.removeClass(this.options.activeClass).removeData('OpenClose'); $(document).off('click touchstart', this.outsideClickHandler); }, makeCallback: function(name) { if (typeof this.options[name] === 'function') { var args = Array.prototype.slice.call(arguments); args.shift(); this.options[name].apply(this, args); } } }; // add stylesheet for slide on DOMReady var slideHiddenClass = 'js-slide-hidden'; (function() { var tabStyleSheet = $('