// page init jQuery(function(){ initTabs(); initMobileNav(); initRetinaCover(); initDot(); }); /* * Browser Detect script */ BrowserDetect = (function() { // script settings var options = { osVersion: true, //Добавить класс с версией операционной системы minorBrowserVersion: true //Добавить класс с полной версией браузера }; // browser data var browserData = { browsers: { edge: uaMatch(/ Edge\/([0-9\.]*)/), chrome: uaMatch(/Chrome\/([0-9\.]*)/), firefox: uaMatch(/Firefox\/([0-9\.]*)/), safari: uaMatch(/Version\/([0-9\.]*).*Safari/), opera: uaMatch(/Opera\/.*Version\/([0-9\.]*)/, /Opera\/([0-9\.]*)/), msie: uaMatch(/MSIE ([0-9\.]*)/, /Trident.*rv:([0-9\.]*)/) }, engines: { edgehtml: uaContains(' Edge\/'), webkit: uaContains('AppleWebKit'), trident: uaMatch(/(MSIE|Trident)/), gecko: uaContains('Gecko'), presto: uaContains('Presto') }, platforms: { win: uaMatch(/Windows NT ([0-9\.]*)/), mac: uaMatch(/Mac OS X ([0-9_\.]*)/), linux: uaContains('X11', 'Linux') } }; // perform detection var ua = navigator.userAgent; var detectData = { platform: detectItem(browserData.platforms), browser: detectItem(browserData.browsers), engine: detectItem(browserData.engines) }; // private functions function uaMatch() { var regs = Array.prototype.slice.apply(arguments); return function() { for (var i = 0, result; i < regs.length; i++) { result = regs[i].exec(ua); if (result) { return result[1]; } } }; } function uaContains(word) { var words = Array.prototype.slice.apply(arguments); return function() { for(var i = 0; i < words.length; i++) { if(ua.indexOf(words[i]) < 0) { return; } } return true; }; } function detectItem(items) { var detectedItem = null, itemName, detectValue; for(itemName in items) { if(items.hasOwnProperty(itemName)) { detectValue = items[itemName](); if(detectValue) { return { name: itemName, value: detectValue }; } } } } // add classes to root element (function() { // helper functions var addClass = function(cls) { var html = document.documentElement; html.className += (html.className ? ' ' : '') + cls; }; var getVersion = function(ver) { return typeof ver === 'string' ? ver.replace(/\./g, '_') : 'unknown'; }; // add classes if(detectData.platform) { addClass(detectData.platform.name); if(options.osVersion) { addClass(detectData.platform.name + '-' + getVersion(detectData.platform.value)); } } if(detectData.engine) { addClass(detectData.engine.name); } if(detectData.browser) { addClass(detectData.browser.name); addClass(detectData.browser.name + '-' + parseInt(detectData.browser.value, 10)); if(options.minorBrowserVersion) { addClass(detectData.browser.name + '-' + getVersion(detectData.browser.value)); } } }()); // export detection information return detectData; }()); $(document).ready(function(){ $('.promo-gallery').slick({ infinite: true, autoplay: true, autoplaySpeed: 5000 }); }); function initDot() { jQuery("#text-wrapper").dotdotdot({ height: 56 }); }; // content tabs init function initTabs() { jQuery('ul.tabset').tabset({ tabLinks: 'a', addToParent: true, defaultTab: false }); } // mobile menu init function initMobileNav() { jQuery('body').mobileNav({ menuActiveClass: 'nav-active', menuOpener: '.nav-opener' }); } function initRetinaCover() { jQuery('.bg-stretch').retinaCover(); } /* * 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))); /* * 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 retina cover plugin */ ;(function($) { 'use strict'; var styleRules = {}; var templates = { '2x': [ '(-webkit-min-device-pixel-ratio: 1.5)', '(min-resolution: 192dpi)', '(min-device-pixel-ratio: 1.5)', '(min-resolution: 1.5dppx)' ], '3x': [ '(-webkit-min-device-pixel-ratio: 3)', '(min-resolution: 384dpi)', '(min-device-pixel-ratio: 3)', '(min-resolution: 3dppx)' ] }; function addSimple(imageSrc, media, id) { var style = buildRule(id, imageSrc); addRule(media, style); } function addRetina(imageData, media, id) { var currentRules = templates[imageData[1]].slice(); var patchedRules = currentRules; var style = buildRule(id, imageData[0]); if (media !== 'default') { patchedRules = $.map(currentRules, function(ele, i) { return ele + ' and ' + media; }); } media = patchedRules.join(','); addRule(media, style); } function buildRule(id, src) { return '#' + id + '{background-image: url("' + src + '");}'; } function addRule(media, rule) { var $styleTag = styleRules[media]; var styleTagData; var rules = ''; if (media === 'default') { rules = rule + ' '; } else { rules = '@media ' + media + '{' + rule + '}'; } if (!$styleTag) { styleRules[media] = $('