/** * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http://flesler.blogspot.com * Licensed under MIT * @author Ariel Flesler * @version 2.1.3 */ ;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1Thanks for signing up!').fadeIn(); }); } } ); }); }); } // clear inputs on focus function initInputs() { PlaceholderInput.replaceByOptions({ // filter options clearInputs: true, clearTextareas: true, clearPasswords: true, skipClass: 'default', // input options wrapWithElement: false, showUntilTyping: true, getParentByClass: false, placeholderAttr: 'placeholder' }); } function initFixedHeader() { var activeClass = 'fixed-position'; var win = jQuery(window); jQuery('#header').each(function () { var header = jQuery(this); var flag = true; function scrollHandler() { if (win.scrollTop() > 0) { if (flag) { header.addClass(activeClass); flag = false; } } else { if (!flag) { header.removeClass(activeClass); flag = true; } } } win.on('scroll', scrollHandler); scrollHandler(); }); } // initialize custom form elements function initCustomForms() { jQuery('.success-msg').hide(); jQuery('#trenta-form').submit(function(ev) { // Prevent the form from actually submitting ev.preventDefault(); jQuery('#emailHolder').val(jQuery('#t4').val()); // Get the post data var data = jQuery(this).serialize(); // Send it to the server jQuery.post('/', data, function(response) { if (response.success) { jQuery.scrollTo( '.demo-form', 1000); jQuery('#trenta-form').fadeOut(function() { jQuery('.success-msg').fadeIn(); }); } else { // response.error will be an object containing any validation errors that occurred, indexed by field name // e.g. response.error.fromName => ['From Name is required'] //alert('An error occurred. Please try again.'); } }); }); jQuery('#search-form').submit(function(e) { e.preventDefault(); jQuery.ajax({ type: "POST", url: '/partners/search-result?q=' + jQuery('#search-input').val(), data: $(".filter-form").serialize(), // serializes the form's elements. success: function(data) { jQuery('.partner-list').fadeOut(function() { // jQuery('.filter-control').val('').blur(); jQuery('.filter-control .type1').attr('selected', 'selected'); jcf.replaceAll(); jQuery(this).html(data).fadeIn(); }); } }); }); jQuery('select.filter').change(function() { var me = jQuery(this); console.log(me) //window.location = "/partners/" + me.val(); jQuery.ajax({ url: '/partners/filter-result?filter=' + me.val() }).done(function( html ) { jQuery('.partner-list').fadeOut(function() { jQuery('#search-input').val('').blur(); jQuery(this).html(html).fadeIn(); history.pushState(null, null, '/partners/' + me.val() ); }); }); }); jcf.setOptions('Select', { wrapNative: false, maxVisibleItems: 7 }); jcf.replaceAll(); } // initialize smooth anchor links function initAnchors() { new SmoothScroll({ anchorLinks: 'a[href^="#"]:not([href="#"]):not([href^="#tab"])', extraOffset: function() { var totalHeight = 0; jQuery('#header').each(function() { var header = jQuery(this); if (header.css('position') === 'fixed') { totalHeight += header.outerHeight(); } }); return totalHeight; }, wheelBehavior: 'none' }); } function initFormValidation() { jQuery('.form-validation').formValidation({ errorClass: 'input-error', errorFormClass: 'form-error', addClassToParent: 'div.box', skipFields: '.skip-field', successClass: 'input-success' }); } function initAjaxFilter() { jQuery('.filter-section').ajaxFilter({ filtersHolder: '.filter-control ul', container: '.filter-results', onInit: function(self) { initLoadMore(self); }, onSuccess: function(self) { initLoadMore(self); } }); function initLoadMore(self) { if (self.container.data('ContentLoader')) { self.container.data('ContentLoader').destroy(); } self.container.loadMore({ scroll: true, linkSelector: '.load-more', additionBottomOffset: -400 }); } } // content tabs init function initTabs() { jQuery('ul.tabset').tabset({ tabLinks: 'a' }); } // accordion menu init function initLayout() { var accordion = jQuery('ul.accordion'); function initAccordion() { accordion.slideAccordion({ allowClickWhenExpanded: true, addClassBeforeAnimation: true, opener: '.opener', slider: '.slide', collapsible: false, event:'mouseenter', autoRotation: true, animSpeed: 0 }); } function destroyAccordion() { if (accordion.data('SlideAccordion')) { accordion.data('SlideAccordion').destroy(); } } // handle layout resize ResponsiveHelper.addRange({ '..767': { on: function() { destroyAccordion(); } }, '768..': { on: function() { initAccordion(); } } }); } // lightbox init function initLightbox() { jQuery('a.lightbox, a[rel*="lightbox"]').fancybox({ helpers: { overlay: { css: { background: '#000', opacity: 0.65 } } }, afterLoad: function(current, previous) { // handle custom close button in inline modal if (current.href.indexOf('#') === 0) { jQuery(current.href).find('a.close').off('click.fb').on('click.fb', function(e) { e.preventDefault(); jQuery.fancybox.close(); }); } }, }); } // mobile menu init function initMobileNav() { jQuery('body').mobileNav({ menuActiveClass: 'nav-active', menuOpener: '.nav-opener' }); } // in view port init function initInViewport() { jQuery('.section').itemInViewport({}); } // handle dropdowns on mobile devices function initTouchNav() { jQuery('#nav').each(function() { new TouchNav({ navBlock: this }); }); } /* * 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(); } }, 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.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'); } }; $.fn.tabset = function(options) { options = $.extend({ activeClass: 'active', addToParent: false, autoHeight: false, checkHash: false, defaultTab: true, animSpeed: 500, tabLinks: 'a', attrib: 'href', event: 'click', tabHiddenClass: 'js-tab-hidden' }, options); options.autoHeight = options.autoHeight && $.support.opacity; return this.each(function() { var $holder = $(this); if (!$holder.data('Tabset')) { $holder.data('Tabset', new Tabset($holder, options)); } }); }; }(jQuery, jQuery(window))); /* * jQuery Accordion plugin */ ;(function($){ function SlideAccordion(options){ this.options = $.extend({ holder: null, addClassBeforeAnimation: false, activeClass:'active', opener:'.opener', slider:'.slide', animSpeed: 300, collapsible:true, event:'click' }, options); this.init(); } SlideAccordion.prototype = { init: function(){ this.findElements(); this.attachEvents(); this.makeCallback('onInit', this); }, findElements: function(){ this.holder = $(this.options.holder); this.items = this.holder.find(':has(' + this.options.slider + ')'); this.openers = this.items.find(this.options.opener); this.sliders = this.items.find(this.options.slider); var activeItem = this.items.filter('.' + this.options.activeClass); this.currentIndex = this.items.index(activeItem); this.autoRotationStopped = false; this.animSpeed = +this.holder.attr('data-autoRotation') || 3000; // set initial styles this.sliders.hide(); activeItem.find(this.options.slider).show(); if (this.options.autoRotation) { this.autoRotate(); } }, attachEvents: function(){ var self = this; this.eventHandler = function(e){ e.preventDefault(); self.pauseRotation(); var item = $(this).closest(':has(' + self.options.slider + ')'); self.currentIndex = self.items.index(item); if (!self.sliders.is(':animated')){ if (item.hasClass(self.options.activeClass)){ if (self.options.collapsible){ self.hideSlides(); } } else { self.showSlide(item); } } }; this.hoverHandler = function() { if(self.options.autoRotation) { self.galleryHover = true; self.pauseRotation(); } }; this.leaveHandler = function() { if(self.options.autoRotation) { self.galleryHover = false; self.autoRotate(); } }; this.openers.on(this.options.event, this.eventHandler); this.holder.on({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler}); }, showSlide: function(slideHolder){ var slide = slideHolder.find(this.options.slider); this.items.removeClass(this.options.activeClass); this.sliders.slideUp(this.options.animSpeed); slideHolder.addClass(this.options.activeClass); slide.slideDown(this.options.animSpeed); if(!this.galleryHover) { this.autoRotate(); } }, pauseRotation:function() { this.galleryHover = true; clearTimeout(this.timer); }, autoRotate: function() { var self = this; ++self.currentIndex; if (self.currentIndex === self.items.length) { self.currentIndex = 0; } clearTimeout(this.timer); if (!this.galleryHover) { this.timer = setTimeout(function(){ self.hideSlides(); self.showSlide(self.items.eq(self.currentIndex)); }, this.animSpeed); } }, hideSlides: function(){ this.items.removeClass(this.options.activeClass); this.sliders.slideUp(this.options.animSpeed); }, makeCallback: function(name) { if(typeof this.options[name] === 'function') { var args = Array.prototype.slice.call(arguments, 1); this.options[name].apply(this, args); } }, destroy: function(){ this.galleryHover = true; clearTimeout(this.timer); this.items.removeClass(this.options.activeClass); this.openers.off(this.options.event, this.eventHandler); this.sliders.css({display: ''}); this.holder.removeData('SlideAccordion'); } }; $.fn.slideAccordion = function(options){ return this.each(function(){ var elem = $(this); if (!elem.data('SlideAccordion')){ elem.data('SlideAccordion', new SlideAccordion($.extend(options, {holder: elem}))); } }); }; })(jQuery); /*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ ;(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
',image:'',iframe:'",error:'

The requested content cannot be loaded.
Please try again later.

',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&&k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d=a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(),y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement;if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}",g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll":"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside?h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"===f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
'+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
').appendTo("body");var e=20===d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); /* * Simple Mobile Navigation */ ;(function($) { function MobileNav(options) { this.options = $.extend({ container: null, hideOnClickOutside: false, menuActiveClass: 'nav-active', menuOpener: '.nav-opener', menuDrop: '.nav-drop', toggleEvent: 'click', outsideClickEvent: 'click touchstart pointerdown MSPointerDown' }, options); this.initStructure(); this.attachEvents(); } MobileNav.prototype = { initStructure: function() { this.page = $('html'); this.container = $(this.options.container); this.opener = this.container.find(this.options.menuOpener); this.drop = this.container.find(this.options.menuDrop); }, attachEvents: function() { var self = this; if(activateResizeHandler) { activateResizeHandler(); activateResizeHandler = null; } this.outsideClickHandler = function(e) { if(self.isOpened()) { var target = $(e.target); if(!target.closest(self.opener).length && !target.closest(self.drop).length) { self.hide(); } } }; this.openerClickHandler = function(e) { e.preventDefault(); self.toggle(); }; this.opener.on(this.options.toggleEvent, this.openerClickHandler); }, isOpened: function() { return this.container.hasClass(this.options.menuActiveClass); }, show: function() { this.container.addClass(this.options.menuActiveClass); if(this.options.hideOnClickOutside) { this.page.on(this.options.outsideClickEvent, this.outsideClickHandler); } }, hide: function() { this.container.removeClass(this.options.menuActiveClass); if(this.options.hideOnClickOutside) { this.page.off(this.options.outsideClickEvent, this.outsideClickHandler); } }, toggle: function() { if(this.isOpened()) { this.hide(); } else { this.show(); } }, destroy: function() { this.container.removeClass(this.options.menuActiveClass); this.opener.off(this.options.toggleEvent, this.clickHandler); this.page.off(this.options.outsideClickEvent, this.outsideClickHandler); } }; var activateResizeHandler = function() { var win = $(window), doc = $('html'), resizeClass = 'resize-active', flag, timer; var removeClassHandler = function() { flag = false; doc.removeClass(resizeClass); }; var resizeHandler = function() { if(!flag) { flag = true; doc.addClass(resizeClass); } clearTimeout(timer); timer = setTimeout(removeClassHandler, 500); }; win.on('resize orientationchange', resizeHandler); }; $.fn.mobileNav = function(options) { return this.each(function() { var params = $.extend({}, options, {container: this}), instance = new MobileNav(params); $.data(this, 'MobileNav', instance); }); }; }(jQuery)); /* * jQuery Load More plugin */ ;(function($, $win) { 'use strict'; var ScrollLoader = { attachEvents: function() { var self = this; $win.on('load.ScrollLoader resize.ScrollLoader orientationchange.ScrollLoader', function() { self.onResizeHandler(); }); $win.on('scroll.ScrollLoader', function() { self.onScrollHandler(); }); this.$holder.on('ContentLoader/loaded.ScrollLoader', function() { self.onResizeHandler(); }); this.winProps = {}; this.holderProps = {}; this.onResizeHandler(); }, onResizeHandler: function() { this.winProps.height = $win.height(); this.holderProps.height = this.$holder.outerHeight(); this.holderProps.offset = this.$holder.offset().top; this.onScrollHandler(); }, onScrollHandler: function() { this.winProps.scroll = $win.scrollTop(); if (this.winProps.scroll + this.winProps.height + Math.min(1, this.options.additionBottomOffset) > this.holderProps.height + this.holderProps.offset) { this.loadInclude(); } }, destroySubEvents: function() { $win.off('.ScrollLoader'); this.$holder.off('.ScrollLoader'); } }; var ClickLoader = { attachEvents: function() { var self = this; this.$holder.on('click.ClickLoader', this.options.linkSelector, function(e) { self.onClickHandler(e); }); }, onClickHandler: function(e) { e.preventDefault(); this.loadInclude(); }, destroySubEvents: function() { this.$holder.off('.ClickLoader'); } }; var ContentLoader = function($holder, options) { this.$holder = $holder; this.options = options; this.init(); }; var ContentLoaderProto = { init: function() { this.$link = this.$holder.find(this.options.linkSelector); this.$newContentTarget = this.options.newContentTarget ? this.$holder.find(this.options.newContentTarget) : this.$holder; if (!this.$link.length) { this.removeInstance(); return; } this.attachEvents(); }, loadInclude: function() { if (this.isBusy) { return; } var self = this; this.toggleBusyMode(true); $.get(self.$link.attr('href'), function(source) { self.successHandler(source); }); }, successHandler: function(include) { var $tmpDiv = jQuery('
').html(include); var $nextIncludeLink = $tmpDiv.find(this.options.linkSelector); if ($nextIncludeLink.length) { this.refreshLink($nextIncludeLink); } else { this.destroy(); } this.appendItems($tmpDiv.children()); }, appendItems: function($newItems) { var self = this; this.$newContentTarget.append($newItems.addClass(this.options.preAppendClass)); setTimeout(function() { // need this timeout coz need some time for css preAppendClass applied to the new items $newItems.removeClass(self.options.preAppendClass); self.$holder.trigger('ContentLoader/loaded'); self.toggleBusyMode(false); }, 100); if (window.picturefill) { window.picturefill(); } }, refreshLink: function($nextIncludeLink) { this.$link.attr('href', $nextIncludeLink.attr('href')); $nextIncludeLink.remove(); }, toggleBusyMode: function(state) { this.$holder.toggleClass(this.options.busyClass, state); this.isBusy = state; }, removeInstance: function() { this.$holder.removeData('ContentLoader'); }, destroy: function() { this.removeInstance(); this.destroySubEvents(); this.$link.remove(); } }; $.fn.loadMore = function(options) { options = $.extend({ scroll: false, linkSelector: '.load-more', newContentTarget: null, busyClass: 'is-busy', additionBottomOffset: 50, preAppendClass: 'new-item' }, options); return this.each(function() { var $holder = $(this); ContentLoader.prototype = $.extend(options.scroll ? ScrollLoader : ClickLoader, ContentLoaderProto); $holder.data('ContentLoader', new ContentLoader($holder, options)); }); }; }(jQuery, jQuery(window))); /* * jQuery In Viewport plugin */ ;(function($, $win) { 'use strict'; var ScrollDetector = (function() { var data = {}; return { init: function() { var self = this; this.addHolder('win', $win); $win.on('load.blockInViewport resize.blockInViewport orientationchange.blockInViewport', function() { $.each(data, function(holderKey, holderData) { self.calcHolderSize(holderData); $.each(holderData.items, function(itemKey, itemData) { self.calcItemSize(itemKey, itemData); }); }); }); }, addHolder: function(holderKey, $holder) { var self = this; var holderData = { holder: $holder, items: {}, props: { height: 0, scroll: 0 } }; data[holderKey] = holderData; $holder.on('scroll.blockInViewport', function() { self.calcHolderScroll(holderData); $.each(holderData.items, function(itemKey, itemData) { self.calcItemScroll(itemKey, itemData); }); }); this.calcHolderSize(data[holderKey]); }, calcHolderSize: function(holderData) { var holderOffset = holderData.holder.offset(); holderData.props.height = holderData.holder.get(0) === window ? (window.innerHeight || document.documentElement.clientHeight) : holderData.holder.outerHeight(); holderData.props.offset = holderOffset ? holderOffset.top : 0; this.calcHolderScroll(holderData); }, calcItemSize: function(itemKey, itemData) { itemData.offset = itemData.$el.offset().top - itemData.holderProps.props.offset; itemData.height = itemData.$el.outerHeight(); this.calcItemScroll(itemKey, itemData); }, calcHolderScroll: function(holderData) { holderData.props.scroll = holderData.holder.scrollTop(); }, calcItemScroll: function(itemKey, itemData) { var itemInViewPortFromUp; var itemInViewPortFromDown; var itemOutViewPort; var holderProps = itemData.holderProps.props; switch (itemData.options.visibleMode) { case 1: itemInViewPortFromDown = itemData.offset < holderProps.scroll + holderProps.height / 2 || itemData.offset + itemData.height < holderProps.scroll + holderProps.height; itemInViewPortFromUp = itemData.offset > holderProps.scroll || itemData.offset + itemData.height > holderProps.scroll + holderProps.height / 2; break; case 2: itemInViewPortFromDown = itemInViewPortFromDown || (itemData.offset < holderProps.scroll + holderProps.height / 2 || itemData.offset + itemData.height / 2 < holderProps.scroll + holderProps.height); itemInViewPortFromUp = itemInViewPortFromUp || (itemData.offset + itemData.height / 2 > holderProps.scroll || itemData.offset + itemData.height > holderProps.scroll + holderProps.height / 2); break; case 3: itemInViewPortFromDown = itemInViewPortFromDown || (itemData.offset < holderProps.scroll + holderProps.height / 2 || itemData.offset < holderProps.scroll + holderProps.height); itemInViewPortFromUp = itemInViewPortFromUp || (itemData.offset + itemData.height > holderProps.scroll || itemData.offset + itemData.height > holderProps.scroll + holderProps.height / 2); break; default: itemInViewPortFromDown = itemInViewPortFromDown || (itemData.offset < holderProps.scroll + holderProps.height / 2 || itemData.offset + Math.min(itemData.options.visibleMode, itemData.height) < holderProps.scroll + holderProps.height); itemInViewPortFromUp = itemInViewPortFromUp || (itemData.offset + itemData.height - Math.min(itemData.options.visibleMode, itemData.height) > holderProps.scroll || itemData.offset + itemData.height > holderProps.scroll + holderProps.height / 2); break; } if (itemInViewPortFromUp && itemInViewPortFromDown) { if (!itemData.state) { itemData.state = true; itemData.$el.addClass(itemData.options.activeClass) .trigger('in-viewport', true); if (itemData.options.once || ($.isFunction(itemData.options.onShow) && itemData.options.onShow(itemData))) { delete itemData.holderProps.items[itemKey]; } } } else { itemOutViewPort = itemData.offset < holderProps.scroll + holderProps.height && itemData.offset + itemData.height > holderProps.scroll; if ((itemData.state || isNaN(itemData.state)) && !itemOutViewPort) { itemData.state = false; itemData.$el.removeClass(itemData.options.activeClass) .trigger('in-viewport', false); } } }, addItem: function(el, options) { var itemKey = 'item' + this.getRandomValue(); var newItem = { $el: $(el), options: options }; var holderKeyDataName = 'in-viewport-holder'; var $holder = newItem.$el.closest(options.holder); var holderKey = $holder.data(holderKeyDataName); if (!$holder.length) { holderKey = 'win'; } else if (!holderKey) { holderKey = 'holder' + this.getRandomValue(); $holder.data(holderKeyDataName, holderKey); this.addHolder(holderKey, $holder); } newItem.holderProps = data[holderKey]; data[holderKey].items[itemKey] = newItem; this.calcItemSize(itemKey, newItem); }, getRandomValue: function() { return (Math.random() * 100000).toFixed(0); }, destroy: function() { $win.off('.blockInViewport'); $.each(data, function(key, value) { value.holder.off('.blockInViewport'); $.each(value.items, function(key, value) { value.$el.removeClass(value.options.activeClass); value.$el.get(0).itemInViewportAdded = null; }); }); data = {}; } }; }()); ScrollDetector.init(); $.fn.itemInViewport = function(options) { options = $.extend({ activeClass: 'in-viewport', once: true, holder: '', visibleMode: 1 // 1 - full block, 2 - half block, 3 - immediate, 4... - custom }, options); return this.each(function() { if (this.itemInViewportAdded) { return; } this.itemInViewportAdded = true; ScrollDetector.addItem(this, options); }); }; }(jQuery, jQuery(window))); // navigation accesibility module function TouchNav(opt) { this.options = { hoverClass: 'hover', menuItems: 'li', menuOpener: 'a', menuDrop: 'ul', navBlock: null }; for (var p in opt) { if (opt.hasOwnProperty(p)) { this.options[p] = opt[p]; } } this.init(); } TouchNav.isActiveOn = function(elem) { return elem && elem.touchNavActive; }; TouchNav.prototype = { init: function() { if (typeof this.options.navBlock === 'string') { this.menu = document.getElementById(this.options.navBlock); } else if (typeof this.options.navBlock === 'object') { this.menu = this.options.navBlock; } if (this.menu) { this.addEvents(); } }, addEvents: function() { // attach event handlers var self = this; var touchEvent = (navigator.pointerEnabled && 'pointerdown') || (navigator.msPointerEnabled && 'MSPointerDown') || (this.isTouchDevice && 'touchstart'); this.menuItems = lib.queryElementsBySelector(this.options.menuItems, this.menu); var initMenuItem = function(item) { var currentDrop = lib.queryElementsBySelector(self.options.menuDrop, item)[0], currentOpener = lib.queryElementsBySelector(self.options.menuOpener, item)[0]; // only for touch input devices if (currentDrop && currentOpener && (self.isTouchDevice || self.isPointerDevice)) { lib.event.add(currentOpener, 'click', lib.bind(self.clickHandler, self)); lib.event.add(currentOpener, 'mousedown', lib.bind(self.mousedownHandler, self)); lib.event.add(currentOpener, touchEvent, function(e) { if (!self.isTouchPointerEvent(e)) { self.preventCurrentClick = false; return; } self.touchFlag = true; self.currentItem = item; self.currentLink = currentOpener; self.pressHandler.apply(self, arguments); }); } // for desktop computers and touch devices jQuery(item) .bind('mouseenter', function() { if (!self.touchFlag) { self.currentItem = item; self.mouseoverHandler(); } }); jQuery(item) .bind('mouseleave', function() { if (!self.touchFlag) { self.currentItem = item; self.mouseoutHandler(); } }); item.touchNavActive = true; }; // addd handlers for all menu items for (var i = 0; i < this.menuItems.length; i++) { initMenuItem(self.menuItems[i]); } // hide dropdowns when clicking outside navigation if (this.isTouchDevice || this.isPointerDevice) { lib.event.add(document.documentElement, 'mousedown', lib.bind(this.clickOutsideHandler, this)); lib.event.add(document.documentElement, touchEvent, lib.bind(this.clickOutsideHandler, this)); } }, mousedownHandler: function(e) { if (this.touchFlag) { e.preventDefault(); this.touchFlag = false; this.preventCurrentClick = false; } }, mouseoverHandler: function() { lib.addClass(this.currentItem, this.options.hoverClass); jQuery(this.currentItem) .trigger('itemhover'); }, mouseoutHandler: function() { lib.removeClass(this.currentItem, this.options.hoverClass); jQuery(this.currentItem) .trigger('itemleave'); }, hideActiveDropdown: function() { for (var i = 0; i < this.menuItems.length; i++) { if (lib.hasClass(this.menuItems[i], this.options.hoverClass)) { lib.removeClass(this.menuItems[i], this.options.hoverClass); jQuery(this.menuItems[i]) .trigger('itemleave'); } } this.activeParent = null; }, pressHandler: function(e) { // hide previous drop (if active) if (this.currentItem !== this.activeParent) { if (this.activeParent && this.currentItem.parentNode === this.activeParent.parentNode) { lib.removeClass(this.activeParent, this.options.hoverClass); } else if (!this.isParent(this.activeParent, this.currentLink)) { this.hideActiveDropdown(); } } // handle current drop this.activeParent = this.currentItem; if (lib.hasClass(this.currentItem, this.options.hoverClass)) { this.preventCurrentClick = false; } else { e.preventDefault(); this.preventCurrentClick = true; lib.addClass(this.currentItem, this.options.hoverClass); jQuery(this.currentItem) .trigger('itemhover'); } }, clickHandler: function(e) { // prevent first click on link if (this.preventCurrentClick) { e.preventDefault(); } }, clickOutsideHandler: function(event) { var e = event.changedTouches ? event.changedTouches[0] : event; if (this.activeParent && !this.isParent(this.menu, e.target)) { this.hideActiveDropdown(); this.touchFlag = false; } }, isParent: function(parent, child) { while (child.parentNode) { if (child.parentNode == parent) { return true; } child = child.parentNode; } return false; }, isTouchPointerEvent: function(e) { return (e.type.indexOf('touch') > -1) || (navigator.pointerEnabled && e.pointerType === 'touch') || (navigator.msPointerEnabled && e.pointerType == e.MSPOINTER_TYPE_TOUCH); }, isPointerDevice: (function() { return !!(navigator.pointerEnabled || navigator.msPointerEnabled); }()), isTouchDevice: (function() { return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); }()) }; /* * Utility module */ lib = { hasClass: function(el,cls) { return el && el.className ? el.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')) : false; }, addClass: function(el,cls) { if (el && !this.hasClass(el,cls)) el.className += " "+cls; }, removeClass: function(el,cls) { if (el && this.hasClass(el,cls)) {el.className=el.className.replace(new RegExp('(\\s|^)'+cls+'(\\s|$)'),' ');} }, extend: function(obj) { for(var i = 1; i < arguments.length; i++) { for(var p in arguments[i]) { if(arguments[i].hasOwnProperty(p)) { obj[p] = arguments[i][p]; } } } return obj; }, each: function(obj, callback) { var property, len; if(typeof obj.length === 'number') { for(property = 0, len = obj.length; property < len; property++) { if(callback.call(obj[property], property, obj[property]) === false) { break; } } } else { for(property in obj) { if(obj.hasOwnProperty(property)) { if(callback.call(obj[property], property, obj[property]) === false) { break; } } } } }, event: (function() { var fixEvent = function(e) { e = e || window.event; if(e.isFixed) return e; else e.isFixed = true; if(!e.target) e.target = e.srcElement; e.preventDefault = e.preventDefault || function() {this.returnValue = false;}; e.stopPropagation = e.stopPropagation || function() {this.cancelBubble = true;}; return e; }; return { add: function(elem, event, handler) { if(!elem.events) { elem.events = {}; elem.handle = function(e) { var ret, handlers = elem.events[e.type]; e = fixEvent(e); for(var i = 0, len = handlers.length; i < len; i++) { if(handlers[i]) { ret = handlers[i].call(elem, e); if(ret === false) { e.preventDefault(); e.stopPropagation(); } } } }; } if(!elem.events[event]) { elem.events[event] = []; if(elem.addEventListener) elem.addEventListener(event, elem.handle, false); else if(elem.attachEvent) elem.attachEvent('on'+event, elem.handle); } elem.events[event].push(handler); }, remove: function(elem, event, handler) { var handlers = elem.events[event]; for(var i = handlers.length - 1; i >= 0; i--) { if(handlers[i] === handler) { handlers.splice(i,1); } } if(!handlers.length) { delete elem.events[event]; if(elem.removeEventListener) elem.removeEventListener(event, elem.handle, false); else if(elem.detachEvent) elem.detachEvent('on'+event, elem.handle); } } }; }()), queryElementsBySelector: function(selector, scope) { scope = scope || document; if(!selector) return []; if(selector === '>*') return scope.children; if(typeof document.querySelectorAll === 'function') { return scope.querySelectorAll(selector); } var selectors = selector.split(','); var resultList = []; for(var s = 0; s < selectors.length; s++) { var currentContext = [scope || document]; var tokens = selectors[s].replace(/^\s+/,'').replace(/\s+$/,'').split(' '); for (var i = 0; i < tokens.length; i++) { token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,''); if (token.indexOf('#') > -1) { var bits = token.split('#'), tagName = bits[0], id = bits[1]; var element = document.getElementById(id); if (element && tagName && element.nodeName.toLowerCase() != tagName) { return []; } currentContext = element ? [element] : []; continue; } if (token.indexOf('.') > -1) { var bits = token.split('.'), tagName = bits[0] || '*', className = bits[1], found = [], foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements; if (tagName == '*') { elements = currentContext[h].getElementsByTagName('*'); } else { elements = currentContext[h].getElementsByTagName(tagName); } for (var j = 0; j < elements.length; j++) { found[foundCount++] = elements[j]; } } currentContext = []; var currentContextIndex = 0; for (var k = 0; k < found.length; k++) { if (found[k].className && found[k].className.match(new RegExp('(\\s|^)'+className+'(\\s|$)'))) { currentContext[currentContextIndex++] = found[k]; } } continue; } if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) { var tagName = RegExp.$1 || '*', attrName = RegExp.$2, attrOperator = RegExp.$3, attrValue = RegExp.$4; if(attrName.toLowerCase() == 'for' && this.browser.msie && this.browser.version < 8) { attrName = 'htmlFor'; } var found = [], foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements; if (tagName == '*') { elements = currentContext[h].getElementsByTagName('*'); } else { elements = currentContext[h].getElementsByTagName(tagName); } for (var j = 0; elements[j]; j++) { found[foundCount++] = elements[j]; } } currentContext = []; var currentContextIndex = 0, checkFunction; switch (attrOperator) { case '=': checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue) }; break; case '~': checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('(\\s|^)'+attrValue+'(\\s|$)'))) }; break; case '|': checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))) }; break; case '^': checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0) }; break; case '$': checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length) }; break; case '*': checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1) }; break; default : checkFunction = function(e) { return e.getAttribute(attrName) }; } currentContext = []; var currentContextIndex = 0; for (var k = 0; k < found.length; k++) { if (checkFunction(found[k])) { currentContext[currentContextIndex++] = found[k]; } } continue; } tagName = token; var found = [], foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements = currentContext[h].getElementsByTagName(tagName); for (var j = 0; j < elements.length; j++) { found[foundCount++] = elements[j]; } } currentContext = found; } resultList = [].concat(resultList,currentContext); } return resultList; }, trim: function (str) { return str.replace(/^\s+/, '').replace(/\s+$/, ''); }, bind: function(f, scope, forceArgs){ return function() {return f.apply(scope, typeof forceArgs !== 'undefined' ? [forceArgs] : arguments);}; } }; /* * Ajax load */ ;(function($){ function AjaxFilter(options){ this.options = $.extend({ filtersHolder: '.link', container: '.js-ajax-container', loadingClass: 'ajax-loading', attrib:'data-action', activeClass: 'active', onInit: null, onSuccess: null },options); this.init(); } AjaxFilter.prototype = { init: function(){ this.findElements(); this.attachEvents(); this.makeCallback('onInit', this); }, findElements: function(){ this.holder = $(this.options.holder); this.container = this.holder.find(this.options.container); this.filtersHolder = this.holder.find(this.options.filtersHolder); this.filterItems = this.filtersHolder.find('li'); }, attachEvents: function(){ var self = this; this.changeHandler = function(e){ e.preventDefault(); self.activeLink = jQuery(this); self.refreshClass(); self.loadItems(); }; this.filtersHolder.on('click', 'a', this.changeHandler); }, refreshClass: function() { this.filterItems.removeClass(this.options.activeClass); this.activeLink.parent().addClass(this.options.activeClass); }, loadItems: function(){ var self = this; if (!self.loading) { self.loading = true; self.holder.addClass(this.options.loadingClass); jQuery.ajax({ url: self.filtersHolder.attr(self.options.attrib), type: 'get', data: self.activeLink.attr('href'), dataType: 'html', success: function(data){ var newItems = jQuery(data); self.container.fadeOut(function() { self.container.empty().html(newItems); self.container.fadeIn(function() { self.holder.removeClass(self.options.loadingClass); self.loading = false; self.makeCallback('onSuccess', self); }); }); } }); } }, makeCallback: function(name) { if(typeof this.options[name] === 'function') { var args = Array.prototype.slice.call(arguments, 1); this.options[name].apply(this, args); } } }; $.fn.ajaxFilter = function(opt){ return this.each(function(){ var elem = $(this); if (!elem.data('AjaxFilter')){ $(this).data('AjaxFilter', new AjaxFilter($.extend(opt, {holder: this}))); } }); }; }(jQuery)); /* * Responsive Layout helper */ ResponsiveHelper = (function($){ // init variables var handlers = [], prevWinWidth, win = $(window), nativeMatchMedia = false; // detect match media support if(window.matchMedia) { if(window.Window && window.matchMedia === Window.prototype.matchMedia) { nativeMatchMedia = true; } else if(window.matchMedia.toString().indexOf('native') > -1) { nativeMatchMedia = true; } } // prepare resize handler function resizeHandler() { var winWidth = win.width(); if(winWidth !== prevWinWidth) { prevWinWidth = winWidth; // loop through range groups $.each(handlers, function(index, rangeObject){ // disable current active area if needed $.each(rangeObject.data, function(property, item) { if(item.currentActive && !matchRange(item.range[0], item.range[1])) { item.currentActive = false; if(typeof item.disableCallback === 'function') { item.disableCallback(); } } }); // enable areas that match current width $.each(rangeObject.data, function(property, item) { if(!item.currentActive && matchRange(item.range[0], item.range[1])) { // make callback item.currentActive = true; if(typeof item.enableCallback === 'function') { item.enableCallback(); } } }); }); } } win.bind('load resize orientationchange', resizeHandler); // test range function matchRange(r1, r2) { var mediaQueryString = ''; if(r1 > 0) { mediaQueryString += '(min-width: ' + r1 + 'px)'; } if(r2 < Infinity) { mediaQueryString += (mediaQueryString ? ' and ' : '') + '(max-width: ' + r2 + 'px)'; } return matchQuery(mediaQueryString, r1, r2); } // media query function function matchQuery(query, r1, r2) { if(window.matchMedia && nativeMatchMedia) { return matchMedia(query).matches; } else if(window.styleMedia) { return styleMedia.matchMedium(query); } else if(window.media) { return media.matchMedium(query); } else { return prevWinWidth >= r1 && prevWinWidth <= r2; } } // range parser function parseRange(rangeStr) { var rangeData = rangeStr.split('..'); var x1 = parseInt(rangeData[0], 10) || -Infinity; var x2 = parseInt(rangeData[1], 10) || Infinity; return [x1, x2].sort(function(a, b){ return a - b; }); } // export public functions return { addRange: function(ranges) { // parse data and add items to collection var result = {data:{}}; $.each(ranges, function(property, data){ result.data[property] = { range: parseRange(property), enableCallback: data.on, disableCallback: data.off }; }); handlers.push(result); // call resizeHandler to recalculate all events prevWinWidth = null; resizeHandler(); } }; }(jQuery)); /*! Picturefill - v3.0.1 - 2015-09-30 * http://scottjehl.github.io/picturefill * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT */ !function(a){var b=navigator.userAgent;a.HTMLPictureElement&&/ecko/.test(b)&&b.match(/rv\:(\d+)/)&&RegExp.$1<41&&addEventListener("resize",function(){var b,c=document.createElement("source"),d=function(a){var b,d,e=a.parentNode;"PICTURE"===e.nodeName.toUpperCase()?(b=c.cloneNode(),e.insertBefore(b,e.firstElementChild),setTimeout(function(){e.removeChild(b)})):(!a._pfLastSize||a.offsetWidth>a._pfLastSize)&&(a._pfLastSize=a.offsetWidth,d=a.sizes,a.sizes+=",100vw",setTimeout(function(){a.sizes=d}))},e=function(){var a,b=document.querySelectorAll("picture > img, img[srcset][sizes]");for(a=0;a2.7?h=c+1:(f=b-c,e=Math.pow(a-.6,1.5),g=f*e,d&&(g+=.1*e),h=a+g):h=c>1?Math.sqrt(a*b):a,h>c}function h(a){var b,c=s.getSet(a),d=!1;"pending"!==c&&(d=r,c&&(b=s.setRes(c),s.applySetCandidate(b,a))),a[s.ns].evaled=d}function i(a,b){return a.res-b.res}function j(a,b,c){var d;return!c&&b&&(c=a[s.ns].sets,c=c&&c[c.length-1]),d=k(b,c),d&&(b=s.makeUrl(b),a[s.ns].curSrc=b,a[s.ns].curCan=d,d.res||_(d,d.set.sizes)),d}function k(a,b){var c,d,e;if(a&&b)for(e=s.parseSet(b),a=s.makeUrl(a),c=0;cc;c++)e=g[c],e[s.ns]=!0,f=e.getAttribute("srcset"),f&&b.push({srcset:f,media:e.getAttribute("media"),type:e.getAttribute("type"),sizes:e.getAttribute("sizes")})}function m(a,b){function c(b){var c,d=b.exec(a.substring(m));return d?(c=d[0],m+=c.length,c):void 0}function e(){var a,c,d,e,f,i,j,k,l,m=!1,o={};for(e=0;el?m=!0:c=l):W.test(j)&&"h"===i?((d||c)&&(m=!0),0===k?m=!0:d=k):m=!0;m||(o.url=g,a&&(o.w=a),c&&(o.d=c),d&&(o.h=d),d||c||a||(o.d=1),1===o.d&&(b.has1x=!0),o.set=b,n.push(o))}function f(){for(c(S),i="",j="in descriptor";;){if(k=a.charAt(m),"in descriptor"===j)if(d(k))i&&(h.push(i),i="",j="after descriptor");else{if(","===k)return m+=1,i&&h.push(i),void e();if("("===k)i+=k,j="in parens";else{if(""===k)return i&&h.push(i),void e();i+=k}}else if("in parens"===j)if(")"===k)i+=k,j="in descriptor";else{if(""===k)return h.push(i),void e();i+=k}else if("after descriptor"===j)if(d(k));else{if(""===k)return void e();j="in descriptor",m-=1}m+=1}}for(var g,h,i,j,k,l=a.length,m=0,n=[];;){if(c(T),m>=l)return n;g=c(U),h=[],","===g.slice(-1)?(g=g.replace(V,""),e()):f()}}function n(a){function b(a){function b(){f&&(g.push(f),f="")}function c(){g[0]&&(h.push(g),g=[])}for(var e,f="",g=[],h=[],i=0,j=0,k=!1;;){if(e=a.charAt(j),""===e)return b(),c(),h;if(k){if("*"===e&&"/"===a[j+1]){k=!1,j+=2,b();continue}j+=1}else{if(d(e)){if(a.charAt(j-1)&&d(a.charAt(j-1))||!f){j+=1;continue}if(0===i){b(),j+=1;continue}e=" "}else if("("===e)i+=1;else if(")"===e)i-=1;else{if(","===e){b(),c(),j+=1;continue}if("/"===e&&"*"===a.charAt(j+1)){k=!0,j+=2;continue}}f+=e,j+=1}}}function c(a){return k.test(a)&&parseFloat(a)>=0?!0:l.test(a)?!0:"0"===a||"-0"===a||"+0"===a?!0:!1}var e,f,g,h,i,j,k=/^(?:[+-]?[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i,l=/^calc\((?:[0-9a-z \.\+\-\*\/\(\)]+)\)$/i;for(f=b(a),g=f.length,e=0;g>e;e++)if(h=f[e],i=h[h.length-1],c(i)){if(j=i,h.pop(),0===h.length)return j;if(h=h.join(" "),s.matchesMedia(h))return j}return"100vw"}b.createElement("picture");var o,p,q,r,s={},t=function(){},u=b.createElement("img"),v=u.getAttribute,w=u.setAttribute,x=u.removeAttribute,y=b.documentElement,z={},A={algorithm:""},B="data-pfsrc",C=B+"set",D=navigator.userAgent,E=/rident/.test(D)||/ecko/.test(D)&&D.match(/rv\:(\d+)/)&&RegExp.$1>35,F="currentSrc",G=/\s+\+?\d+(e\d+)?w/,H=/(\([^)]+\))?\s*(.+)/,I=a.picturefillCFG,J="position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)",K="font-size:100%!important;",L=!0,M={},N={},O=a.devicePixelRatio,P={px:1,"in":96},Q=b.createElement("a"),R=!1,S=/^[ \t\n\r\u000c]+/,T=/^[, \t\n\r\u000c]+/,U=/^[^ \t\n\r\u000c]+/,V=/[,]+$/,W=/^\d+$/,X=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Y=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)},Z=function(a){var b={};return function(c){return c in b||(b[c]=a(c)),b[c]}},$=function(){var a=/^([\d\.]+)(em|vw|px)$/,b=function(){for(var a=arguments,b=0,c=a[0];++b in a;)c=c.replace(a[b],a[++b]);return c},c=Z(function(a){return"return "+b((a||"").toLowerCase(),/\band\b/g,"&&",/,/g,"||",/min-([a-z-\s]+):/g,"e.$1>=",/max-([a-z-\s]+):/g,"e.$1<=",/calc([^)]+)/g,"($1)",/(\d+[\.]*[\d]*)([a-z]+)/g,"($1 * e.$2)",/^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi,"")+";"});return function(b,d){var e;if(!(b in M))if(M[b]=!1,d&&(e=b.match(a)))M[b]=e[1]*P[e[2]];else try{M[b]=new Function("e",c(b))(P)}catch(f){}return M[b]}}(),_=function(a,b){return a.w?(a.cWidth=s.calcListLength(b||"100vw"),a.res=a.w/a.cWidth):a.res=a.d,a},aa=function(a){var c,d,e,f=a||{};if(f.elements&&1===f.elements.nodeType&&("IMG"===f.elements.nodeName.toUpperCase()?f.elements=[f.elements]:(f.context=f.elements,f.elements=null)),c=f.elements||s.qsa(f.context||b,f.reevaluate||f.reselect?s.sel:s.selShort),e=c.length){for(s.setupRun(f),R=!0,d=0;e>d;d++)s.fillImg(c[d],f);s.teardownRun(f)}};o=a.console&&console.warn?function(a){console.warn(a)}:t,F in u||(F="src"),z["image/jpeg"]=!0,z["image/gif"]=!0,z["image/png"]=!0,z["image/svg+xml"]=b.implementation.hasFeature("http://wwwindow.w3.org/TR/SVG11/feature#Image","1.1"),s.ns=("pf"+(new Date).getTime()).substr(0,9),s.supSrcset="srcset"in u,s.supSizes="sizes"in u,s.supPicture=!!a.HTMLPictureElement,s.supSrcset&&s.supPicture&&!s.supSizes&&!function(a){u.srcset="data:,a",a.src="data:,a",s.supSrcset=u.complete===a.complete,s.supPicture=s.supSrcset&&s.supPicture}(b.createElement("img")),s.selShort="picture>img,img[srcset]",s.sel=s.selShort,s.cfg=A,s.supSrcset&&(s.sel+=",img["+C+"]"),s.DPR=O||1,s.u=P,s.types=z,q=s.supSrcset&&!s.supSizes,s.setSize=t,s.makeUrl=Z(function(a){return Q.href=a,Q.href}),s.qsa=function(a,b){return a.querySelectorAll(b)},s.matchesMedia=function(){return a.matchMedia&&(matchMedia("(min-width: 0.1em)")||{}).matches?s.matchesMedia=function(a){return!a||matchMedia(a).matches}:s.matchesMedia=s.mMQ,s.matchesMedia.apply(this,arguments)},s.mMQ=function(a){return a?$(a):!0},s.calcLength=function(a){var b=$(a,!0)||!1;return 0>b&&(b=!1),b},s.supportsType=function(a){return a?z[a]:!0},s.parseSize=Z(function(a){var b=(a||"").match(H);return{media:b&&b[1],length:b&&b[2]}}),s.parseSet=function(a){return a.cands||(a.cands=m(a.srcset,a)),a.cands},s.getEmValue=function(){var a;if(!p&&(a=b.body)){var c=b.createElement("div"),d=y.style.cssText,e=a.style.cssText;c.style.cssText=J,y.style.cssText=K,a.style.cssText=K,a.appendChild(c),p=c.offsetWidth,a.removeChild(c),p=parseFloat(p,10),y.style.cssText=d,a.style.cssText=e}return p||16},s.calcListLength=function(a){if(!(a in N)||A.uT){var b=s.calcLength(n(a));N[a]=b?b:P.width}return N[a]},s.setRes=function(a){var b;if(a){b=s.parseSet(a);for(var c=0,d=b.length;d>c;c++)_(b[c],a.sizes)}return b},s.setRes.res=_,s.applySetCandidate=function(a,b){if(a.length){var c,d,e,f,h,k,l,m,n,o=b[s.ns],p=s.DPR;if(k=o.curSrc||b[F],l=o.curCan||j(b,k,a[0].set),l&&l.set===a[0].set&&(n=E&&!b.complete&&l.res-.1>p,n||(l.cached=!0,l.res>=p&&(h=l))),!h)for(a.sort(i),f=a.length,h=a[f-1],d=0;f>d;d++)if(c=a[d],c.res>=p){e=d-1,h=a[e]&&(n||k!==s.makeUrl(c.url))&&g(a[e].res,c.res,p,a[e].cached)?a[e]:c;break}h&&(m=s.makeUrl(h.url),o.curSrc=m,o.curCan=h,m!==k&&s.setSrc(b,h),s.setSize(b))}},s.setSrc=function(a,b){var c;a.src=b.url,"image/svg+xml"===b.set.type&&(c=a.style.width,a.style.width=a.offsetWidth+1+"px",a.offsetWidth+1&&(a.style.width=c))},s.getSet=function(a){var b,c,d,e=!1,f=a[s.ns].sets;for(b=0;bf?c=setTimeout(e,b-f):(c=null,a())};return function(){d=new Date,c||(c=setTimeout(e,b))}},h=y.clientHeight,i=function(){L=Math.max(a.innerWidth||0,y.clientWidth)!==P.width||y.clientHeight!==h,h=y.clientHeight,L&&s.fillImgs()};Y(a,"resize",g(i,99)),Y(b,"readystatechange",e)}(),s.picturefill=aa,s.fillImgs=aa,s.teardownRun=t,aa._=s,a.picturefillCFG={pf:s,push:function(a){var b=a.shift();"function"==typeof s[b]?s[b].apply(s,a):(A[b]=a[0],R&&s.fillImgs({reselect:!0}))}};for(;I&&I.length;)a.picturefillCFG.push(I.shift());a.picturefill=aa,"object"==typeof module&&"object"==typeof module.exports?module.exports=aa:"function"==typeof define&&define.amd&&define("picturefill",function(){return aa}),s.supPicture||(z["image/webp"]=e("image/webp","data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA=="))}(window,document); /*! * SmoothScroll module */ ;(function($, exports) { // private variables var page, win = $(window), activeBlock, activeWheelHandler, wheelEvents = ('onwheel' in document || document.documentMode >= 9 ? 'wheel' : 'mousewheel DOMMouseScroll'); // animation handlers function scrollTo(offset, options, callback) { // initialize variables var scrollBlock; if (document.body) { if (typeof options === 'number') { options = { duration: options }; } else { options = options || {}; } page = page || $('html, body'); scrollBlock = options.container || page; } else { return; } // treat single number as scrollTop if (typeof offset === 'number') { offset = { top: offset }; } // handle mousewheel/trackpad while animation is active if (activeBlock && activeWheelHandler) { activeBlock.off(wheelEvents, activeWheelHandler); } if (options.wheelBehavior && options.wheelBehavior !== 'none') { activeWheelHandler = function(e) { if (options.wheelBehavior === 'stop') { scrollBlock.off(wheelEvents, activeWheelHandler); scrollBlock.stop(); } else if (options.wheelBehavior === 'ignore') { e.preventDefault(); } }; activeBlock = scrollBlock.on(wheelEvents, activeWheelHandler); } // start scrolling animation scrollBlock.stop().animate({ scrollLeft: offset.left, scrollTop: offset.top }, options.duration, function() { if (activeWheelHandler) { scrollBlock.off(wheelEvents, activeWheelHandler); } if ($.isFunction(callback)) { callback(); } }); } // smooth scroll contstructor function SmoothScroll(options) { this.options = $.extend({ anchorLinks: 'a[href^="#"]', // selector or jQuery object container: null, // specify container for scrolling (default - whole page) extraOffset: null, // function or fixed number activeClasses: null, // null, "link", "parent" easing: 'swing', // easing of scrolling animMode: 'duration', // or "speed" mode animDuration: 800, // total duration for scroll (any distance) animSpeed: 1500, // pixels per second anchorActiveClass: 'anchor-active', sectionActiveClass: 'section-active', wheelBehavior: 'stop', // "stop", "ignore" or "none" useNativeAnchorScrolling: false // do not handle click in devices with native smooth scrolling }, options); this.init(); } SmoothScroll.prototype = { init: function() { this.initStructure(); this.attachEvents(); }, initStructure: function() { var self = this; this.container = this.options.container ? $(this.options.container) : $('html,body'); this.scrollContainer = this.options.container ? this.container : win; this.anchorLinks = jQuery(this.options.anchorLinks).filter(function() { return document.getElementById(this.getAttribute('href').slice(1)); }); }, getAnchorTarget: function(link) { // get target block from link href var targetId = $(link).attr('href'); return $(targetId.length > 1 ? targetId : 'html'); }, getTargetOffset: function(block) { // get target offset var blockOffset = block.offset().top; if (this.options.container) { blockOffset -= this.container.offset().top - this.container.prop('scrollTop'); } // handle extra offset if (typeof this.options.extraOffset === 'number') { blockOffset -= this.options.extraOffset; } else if (typeof this.options.extraOffset === 'function') { blockOffset -= this.options.extraOffset(block); } return { top: blockOffset }; }, attachEvents: function() { var self = this; // handle active classes if (this.options.activeClasses && this.anchorLinks.length) { // cache structure this.anchorData = []; for (var i = 0; i < this.anchorLinks.length; i++) { var link = jQuery(this.anchorLinks[i]), targetBlock = self.getAnchorTarget(link), anchorDataItem; $.each(self.anchorData, function(index, item) { if (item.block[0] === targetBlock[0]) { anchorDataItem = item; } }); if (anchorDataItem) { anchorDataItem.link = anchorDataItem.link.add(link); } else { self.anchorData.push({ link: link, block: targetBlock }); } }; // add additional event handlers this.resizeHandler = function() { self.recalculateOffsets(); }; this.scrollHandler = function() { self.refreshActiveClass(); }; this.recalculateOffsets(); this.scrollContainer.on('scroll', this.scrollHandler); win.on('resize', this.resizeHandler); } // handle click event this.clickHandler = function(e) { self.onClick(e); }; if (!this.options.useNativeAnchorScrolling) { this.anchorLinks.on('click', this.clickHandler); } }, recalculateOffsets: function() { var self = this; $.each(this.anchorData, function(index, data) { data.offset = self.getTargetOffset(data.block); data.height = data.block.outerHeight(); }); this.refreshActiveClass(); }, refreshActiveClass: function() { var self = this, foundFlag = false, containerHeight = this.container.prop('scrollHeight'), viewPortHeight = this.scrollContainer.height(), scrollTop = this.options.container ? this.container.prop('scrollTop') : win.scrollTop(); // user function instead of default handler if (this.options.customScrollHandler) { this.options.customScrollHandler.call(this, scrollTop, this.anchorData); return; } // sort anchor data by offsets this.anchorData.sort(function(a, b) { return a.offset.top - b.offset.top; }); function toggleActiveClass(anchor, block, state) { anchor.toggleClass(self.options.anchorActiveClass, state); block.toggleClass(self.options.sectionActiveClass, state); } // default active class handler $.each(this.anchorData, function(index) { var reverseIndex = self.anchorData.length - index - 1, data = self.anchorData[reverseIndex], anchorElement = (self.options.activeClasses === 'parent' ? data.link.parent() : data.link); if (scrollTop >= containerHeight - viewPortHeight) { // handle last section if (reverseIndex === self.anchorData.length - 1) { toggleActiveClass(anchorElement, data.block, true); } else { toggleActiveClass(anchorElement, data.block, false); } } else { // handle other sections if (!foundFlag && (scrollTop >= data.offset.top - 1 || reverseIndex === 0)) { foundFlag = true; toggleActiveClass(anchorElement, data.block, true); } else { toggleActiveClass(anchorElement, data.block, false); } } }); }, calculateScrollDuration: function(offset) { var distance; if (this.options.animMode === 'speed') { distance = Math.abs(this.scrollContainer.scrollTop() - offset.top); return (distance / this.options.animSpeed) * 1000; } else { return this.options.animDuration; } }, onClick: function(e) { var targetBlock = this.getAnchorTarget(e.currentTarget), targetOffset = this.getTargetOffset(targetBlock); e.preventDefault(); scrollTo(targetOffset, { container: this.container, wheelBehavior: this.options.wheelBehavior, duration: this.calculateScrollDuration(targetOffset) }); }, destroy: function() { if (this.options.activeClasses) { win.off('resize', this.resizeHandler); this.scrollContainer.off('scroll', this.scrollHandler); } this.anchorLinks.off('click', this.clickHandler); } }; // public API $.extend(SmoothScroll, { scrollTo: function(blockOrOffset, durationOrOptions, callback) { scrollTo(blockOrOffset, durationOrOptions, callback); } }); // export module exports.SmoothScroll = SmoothScroll; }(jQuery, this)); /* * jQuery form validation plugin */ ;(function($) { 'use strict'; var FormValidation = (function() { var Validator = function($field, $fields) { this.$field = $field; this.$fields = $fields; }; Validator.prototype = { reg: { email: '^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$', number: '^[0-9]+$' }, checkField: function() { return { state: this.run(), $fields: this.$field.add(this.additionalFields) } }, run: function() { var fieldType; switch (this.$field.get(0).tagName.toUpperCase()) { case 'SELECT': fieldType = 'select'; break; case 'TEXTAREA': fieldType = 'text'; break; default: fieldType = this.$field.data('type') || this.$field.attr('type'); } var functionName = 'check_' + fieldType; var state = true; if ($.isFunction(this[functionName])) { state = this[functionName](); if (state && this.$field.data('confirm')) { state = this.check_confirm(); } } return state; }, check_email: function() { var value = this.getValue(); var required = this.$field.data('required'); var requiredOrValue = required || value.length; if ((requiredOrValue && !this.check_regexp(value, this.reg.email))) { return false; } return requiredOrValue ? true : null; }, check_number: function() { var value = this.getValue(); var required = this.$field.data('required'); var isNumber = this.check_regexp(value, this.reg.number); var requiredOrValue = required || value.length; if (requiredOrValue && !isNumber) { return false; } var min = this.$field.data('min'); var max = this.$field.data('max'); value = +value; if ((min && (value < min || !isNumber)) || (max && (value > max || !isNumber))) { return false; } return (requiredOrValue || min || max) ? true : null; }, check_password: function() { return this.check_text(); }, check_text: function() { var value = this.getValue(); var required = this.$field.data('required'); if (this.$field.data('required') && !value.length) { return false; } var min = +this.$field.data('min'); var max = +this.$field.data('max'); if ((min && value.length < min) || (max && value.length > max)) { return false; } var regExp = this.$field.data('regexp'); if (regExp && !this.check_regexp(value, regExp)) { return false; } return (required || min || max || regExp) ? true : null; }, check_confirm: function() { var value = this.getValue(); var $confirmFields = this.$fields.filter('[data-confirm="' + this.$field.data('confirm') + '"]'); var confirmState = true; for (var i = $confirmFields.length - 1; i >= 0; i--) { if ($confirmFields.eq(i).val() !== value || !value.length) { confirmState = false; break; } } this.additionalFields = $confirmFields; return confirmState; }, check_select: function() { var required = this.$field.data('required'); if (required && this.$field.get(0).selectedIndex === 0) { return false; } return required ? true : null; }, check_radio: function() { var $fields = this.$fields.filter('[name="' + this.$field.attr('name') + '"]'); var required = this.$field.data('required'); if (required && !$fields.filter(':checked').length) { return false; } this.additionalFields = $fields; return required ? true : null; }, check_checkbox: function() { var required = this.$field.data('required'); if (required && !this.$field.prop('checked')) { return false; } return required ? true : null; }, check_at_least_one: function() { var $fields = this.$fields.filter('[data-name="' + this.$field.data('name') + '"]'); if (!$fields.filter(':checked').length) { return false; } this.additionalFields = $fields; return true; }, check_regexp: function(val, exp) { return new RegExp(exp).test(val); }, getValue: function() { if (this.$field.data('trim')) { this.$field.val($.trim(this.$field.val())); } return this.$field.val(); } }; var publicClass = function(form, options) { this.$form = $(form).attr('novalidate', 'novalidate'); this.options = options; }; publicClass.prototype = { buildSelector: function(input) { return ':input:not(' + this.options.skipDefaultFields + (this.options.skipFields ? ',' + this.options.skipFields : '') + ')'; }, init: function() { this.fieldsSelector = this.buildSelector(':input'); this.$form .on('submit', this.submitHandler.bind(this)) .on('keyup blur', this.fieldsSelector, this.changeHandler.bind(this)) .on('change', this.buildSelector('select'), this.changeHandler.bind(this)) .on('focus', this.fieldsSelector, this.focusHandler.bind(this)); }, submitHandler: function(e) { var self = this; var $fields = this.getFormFields(); this.getClassTarget($fields) .removeClass(this.options.errorClass + ' ' + this.options.successClass); this.setFormState(true); $fields.each(function(i, input) { var $field = $(input); var $classTarget = self.getClassTarget($field); // continue iteration if $field has error class already if ($classTarget.hasClass(self.options.errorClass)) { return; } self.setState(new Validator($field, $fields).checkField()); }); return this.checkSuccess($fields, e); }, checkSuccess: function($fields, e) { var self = this; var success = this.getClassTarget($fields || this.getFormFields()) .filter('.' + this.options.errorClass).length === 0; if (e && success && this.options.successSendClass) { e.preventDefault(); $.ajax({ url: this.$form.removeClass(this.options.successSendClass).attr('action') || '/', type: this.$form.attr('method') || 'POST', data: this.$form.serialize(), success: function() { self.$form.addClass(self.options.successSendClass); } }); } this.setFormState(success); return success; }, changeHandler: function(e) { var $field = $(e.target); if ($field.data('interactive')) { this.setState(new Validator($field, this.getFormFields()).checkField()); } this.checkSuccess(); }, focusHandler: function(e) { var $field = $(e.target); this.getClassTarget($field) .removeClass(this.options.errorClass + ' ' + this.options.successClass); this.checkSuccess(); }, setState: function(result) { this.getClassTarget(result.$fields) .toggleClass(this.options.errorClass, result.state !== null && !result.state) .toggleClass(this.options.successClass, result.state !== null && this.options.successClass && !!result.state); }, setFormState: function(state) { if (this.options.errorFormClass) { this.$form.toggleClass(this.options.errorFormClass, !state); } }, getClassTarget: function($input) { return (this.options.addClassToParent ? $input.closest(this.options.addClassToParent) : $input); }, getFormFields: function() { return this.$form.find(this.fieldsSelector); } }; return publicClass; }()); $.fn.formValidation = function(options) { options = $.extend({}, { errorClass: 'input-error', successClass: '', errorFormClass: '', addClassToParent: '', skipDefaultFields: ':button, :submit, :image, :hidden, :reset', skipFields: '', successSendClass: '' }, options); return this.each(function() { new FormValidation(this, options).init(); }); }; }(jQuery)); /*! * JavaScript Custom Forms * * Copyright 2014-2015 PSD2HTML - http://psd2html.com/jcf * Released under the MIT license (LICENSE.txt) * * Version: 1.1.3 */ ;(function(root, factory) { 'use strict'; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if (typeof exports === 'object') { module.exports = factory(require('jquery')); } else { root.jcf = factory(jQuery); } }(this, function($) { 'use strict'; // define version var version = '1.1.3'; // private variables var customInstances = []; // default global options var commonOptions = { optionsKey: 'jcf', dataKey: 'jcf-instance', rtlClass: 'jcf-rtl', focusClass: 'jcf-focus', pressedClass: 'jcf-pressed', disabledClass: 'jcf-disabled', hiddenClass: 'jcf-hidden', resetAppearanceClass: 'jcf-reset-appearance', unselectableClass: 'jcf-unselectable' }; // detect device type var isTouchDevice = ('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch, isWinPhoneDevice = /Windows Phone/.test(navigator.userAgent); commonOptions.isMobileDevice = !!(isTouchDevice || isWinPhoneDevice); var isIOS = /(iPad|iPhone).*OS ([0-9_]*) .*/.exec(navigator.userAgent); if(isIOS) isIOS = parseFloat(isIOS[2].replace(/_/g, '.')); commonOptions.ios = isIOS; // create global stylesheet if custom forms are used var createStyleSheet = function() { var styleTag = $('