var Mad = (function($){ 'use strict'; var App = {}, DOMDfd = $.Deferred(), $body = $('body'), $doc = $(document); App.modules = {}; App.helpers = {}; App._localCache = {}; App.ISTOUCH = Modernizr.touchevents; App.ANIMATIONDURATION = 500; App.ANIMATIONEASING = 'easeOutQuart'; App.ANIMATIONSUPPORTED = Modernizr.cssanimations; App.ANIMATIONEND = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend"; App.RTL = getComputedStyle(document.body).direction === 'rtl'; App.ISLEGACYBROWSER = !Modernizr.flexbox; App.ISFIREFOX = window.navigator.userAgent.indexOf('Firefox') != -1; App.afterDOMReady = function() { var self = this; if (this.ISFIREFOX) window.onunload = function(){}; // Show message to update legacy browser if(this.ISLEGACYBROWSER) { if(this.helpers.showCriticalFullScreenMessage) { this.helpers.showCriticalFullScreenMessage({ before: '', content: 'Your browser does not support some technologies this site use. Please update your browser or visit the site using more modern browser.' }); } // Anyway preloader must be used if(this.modules.preloader) this.modules.preloader(); return; } if(this.modules.backToTop) { this.modules.backToTop({ easing: 'easeOutQuint', speed: 550, cssPrefix: 'mad-' }); } if(this.helpers.toggledFields) this.helpers.toggledFields(); if(window.MadEventsCalendar) window.MadEventsCalendar.init($('.mad-events-calendar'), { isTouch: self.ISTOUCH, cssPrefix: 'mad-', breakpoint: 768 }); if(window.MadSidebarHidden) { new window.MadSidebarHidden({ cssPrefix: 'mad-' }); } if(window.MadStickyHeaderSection) { var $stickySections = $('[class*="mad-header-section--sticky"]:not([class*="mad-header-section--sticky-hidden"])'); if($stickySections.length) { new window.MadStickyHeaderSection($stickySections, { animationEasing: self.ANIMATIONEASING, animationDuration: self.ANIMATIONDURATION }); } } if(this.modules.dropdown) this.modules.dropdown.init(); if(this.modules.closeBtn) this.modules.closeBtn(); if(this.modules.hiddenSections) this.modules.hiddenSections(); if(this.modules.viewTypes) this.modules.viewTypes(); if(this.helpers.calendarWidget) this.helpers.calendarWidget(); /* ------------------------------------------------ Range Slider ------------------------------------------------ */ var $rangeSliders = $('.mad-range-slider'); if ($.fn.slider && $rangeSliders.length) { $rangeSliders.slider({ range: "min" }); } var $rangeSliders2 = $('.mad-range-slider.range-scale.range-2'); if ($.fn.slider && $rangeSliders2.length) { $rangeSliders2.slider({ min: 0, max: 7, value: 3, slide: function (event, ui) { var $range = $(ui.handle).closest('.mad-range-slider'), $input = $range.siblings('.mad-range-slider-input'); if ($range.length && $input.length) { $input.attr('value', + $range.slider('values', 1) + ' - ' + '$' + $range.slider('values', 0)) .val('$' + $range.slider('values', 1) + ',999,000'); } } }); } var $rangeSliders3 = $('.mad-range-slider.range-scale.range-3'); if ($.fn.slider && $rangeSliders3.length) { $rangeSliders3.slider({ min: 100, max: 600, value: 300, slide: function (event, ui) { var $range = $(ui.handle).closest('.mad-range-slider'), $input = $range.siblings('.mad-range-slider-input'); if ($range.length && $input.length) { $input.attr('value', + $range.slider('values', 1) + ' - ' + '$' + $range.slider('values', 0)) .val('$' + $range.slider('values', 1) + ',880'); } } }); } var $rangeSliders4 = $('.mad-range-slider.range-scale.range-4'); if ($.fn.slider && $rangeSliders4.length) { $rangeSliders4.slider({ min: 0, max: 6, value: 4, slide: function (event, ui) { var $range = $(ui.handle).closest('.mad-range-slider'), $input = $range.siblings('.mad-range-slider-input'); if ($range.length && $input.length) { $input.attr('value', + $range.slider('values', 1) + ' - ' + 'km' + $range.slider('values', 0)) .val($range.slider('values', 1) + '%'); } } }); } /* ------------------------------------------------ End of Range Slider ------------------------------------------------ */ /* ------------------------------------------------ Twitter ------------------------------------------------ */ var $twitterFeed = $('.mad-twitter-feed'); if ($twitterFeed.length && $.fn.tweetie) { $twitterFeed.tweetie({ url: 'http://velikorodnov.com/html/lemar/vendors/tweetie/api/php/server.php', type: 'timeline', template: '
  • \
    \
    {{tweet.text}}
    \ \
    \
  • ', dateFormat: '%B %d, %Y', params: { count: 2, screen_name: null, list_id: null, slug: null, q: null, exclude_replies: false, include_rts: false } }) } /* ------------------------------------------------ End of Twitter ------------------------------------------------ */ /* ------------------------------------------------ Custom Select ------------------------------------------------ */ var $selects = $('.mad-custom-select'); if($selects.length){ $selects.MadCustomSelect({ cssPrefix: 'mad-' }); } /* ------------------------------------------------ End of Custom Select ------------------------------------------------ */ /* ------------------------------------------------ Newsletter Form ------------------------------------------------ */ var newsletterForm = $('.mad-newsletter-form'); if(newsletterForm.length && window.MadNewsletter) { window.MadNewsletter(newsletterForm); } /* ------------------------------------------------ End of Newsletter Form ------------------------------------------------ */ /* ------------------------------------------------ Contact Form ------------------------------------------------ */ var contactForm = $('.mad-contact-form'); if(contactForm.length && window.MadContactForm) { MadContactForm.init(contactForm); } /* ------------------------------------------------ End of Contact Form ------------------------------------------------ */ /* ---------------------------------------- Fancybox ---------------------------------------- */ if($.fancybox && $.fancybox.defaults) { $.extend($.fancybox.defaults, { transitionEffect: "slide", transitionDuration: self.ANIMATIONDURATION, animationDuration: self.ANIMATIONDURATION }); } /* ---------------------------------------- End of Fancybox ---------------------------------------- */ if(this.modules.arcticModals) this.modules.arcticModals.init( $('[data-arctic-modal]') ); /* ------------------------------------------------ Navigation ------------------------------------------------ */ var $nav = $('.mad-navigation'), $verticalNav = $('.mad-navigation-vertical'); if($nav.length){ $nav.MonkeysanNav({ cssPrefix: 'mad-', mobileBreakpoint: 769 }); } if($verticalNav.length){ $verticalNav.MonkeysanNav({ cssPrefix: 'mad-', mobileBreakpoint: 10000 }); } $('.mad-navigation > li > a').on('click', function (e) { e.preventDefault; }) /* ------------------------------------------------ End of Navigation ------------------------------------------------ */ /* ------------------------------------------------ Countdown ------------------------------------------------ */ var $countdown = $('.mad-countdown'); if($countdown.length){ $countdown.each(function(){ var $this = $(this), endDate = $this.data(), until = new Date( endDate.year, endDate.month || 0, endDate.day || 1, endDate.hours || 0, endDate.minutes || 0, endDate.seconds || 0 ); $this.countdown({ until : until, padZeroes: true, format : 'dHMS', labels : ['Years', 'Month', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'], labels1 : ['Years', 'Month', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds'] }); }); } /* ------------------------------------------------ End countdown ------------------------------------------------ */ /* ------------------------------------------------ Instagram ------------------------------------------------ */ if (window.InstafeedWrapper) { var instafeeds = document.querySelectorAll('.mad-instafeed > .mad-grid'), galleryInstafeeds = document.querySelectorAll('.mad-instafeed-gallery'); InstafeedWrapper.setUsersSecureOptions({ 'customer': { userId: 8253949243, accessToken: '8253949243.1677ed0.92a1c427f7274134a812ee9b13038e10', clientId: 'a17ccf850aae43a0805c00ac4792a3b9' } }); if (instafeeds) { InstafeedWrapper.init(instafeeds, { resolution: 'standard_resolution', template: '
    ', after: function () { var $target = $('#' + this.options.target), size = $target.data('images-y-size'), posX = $target.data('images-pos-x') || 'center', posY = $target.data('images-pos-y') || 'center', $items = $target.find('.mad-square-image'); if ($items.length) { $items.addClass('mad-square-image--position-' + posX + '-' + posY); if (size) $items.addClass('mad-square-image--size-' + size); } self.helpers.dynamicBgImage($target.find('[data-bg-image-src]')); } }); } }; /* ------------------------------------------------ End of Instagram ------------------------------------------------ */ /* ------------------------------------------------ Revolution slider ------------------------------------------------ */ var $revSlider1 = $('#rev-slider-1'), $revSlider2 = $('#rev-slider-2'), revApi1, revApi2; if($revSlider1.length && $.fn.revolution) { revApi1 = $revSlider1.show().revolution({ dottedOverlay: 'mad', disableProgressBar: "on", spinner: 'spinner3', gridwidth: [1440, 1024, 1024, 580], gridheight: [1080, 1080, 1080, 1080], responsiveLevels: [1440, 1024, 813, 580], navigation: { keyboardNavigation: 'on', keyboard_direction: 'horizontal', onHoverStop: 'false', arrows: { enable: false, }, bullets: { enable: true, style: 'mad', hide_onleave: false, h_align: 'center', v_align: 'bottom', direction: 'horisontal', h_offset: 0, v_offset: 64 } } }); } if ($revSlider2.length && $.fn.revolution) { revApi2 = $revSlider2.show().revolution({ dottedOverlay: 'mad', disableProgressBar: "on", spinner: 'spinner3', gridheight: [1080, 1080, 980, 980], gridwidth: [1580, 1025, 1024, 520], responsiveLevels: [1440, 1025, 813, 520], navigation: { keyboardNavigation: 'on', keyboard_direction: 'horizontal', onHoverStop: 'false', arrows: { enable: false, }, bullets: { enable: true, style: 'mad', hide_onleave: false, h_align: 'left', v_align: 'bottom', direction: 'horisontal', h_offset: 182, v_offset: 64 } } }); } if(this.helpers.revArrowsOutside) this.helpers.revArrowsOutside(); /* ------------------------------------------------ End of Revolution slider ------------------------------------------------ */ /* ------------------------------------------------ Accordions & Toggles ------------------------------------------------ */ var $accordions = $('.mad-panels--accordion'), $toggles = $('.mad-panels--toggles'); if($accordions.length) { $accordions.MonkeysanAccordion({ easing: self.ANIMATIONEASING, speed: self.ANIMATIONDURATION, cssPrefix: 'mad-' }); } if($toggles.length) { $toggles.MonkeysanAccordion({ easing: self.ANIMATIONEASING, speed: self.ANIMATIONDURATION, toggle: true, cssPrefix: 'mad-' }); } /* ------------------------------------------------ End of Accordions & Toggles ------------------------------------------------ */ /* ---------------------------------------- Alert Boxes ---------------------------------------- */ var $alertBoxes = $('.mad-alert-box'); if($alertBoxes.filter('.mad-alert-box--success').length) { MadAlertBox.init($alertBoxes.filter('.mad-alert-box--success'), { duration: self.ANIMATIONDURATION, cssPrefix: 'mad-', easing: self.ANIMATIONEASING, type: 'success' }); } if($alertBoxes.filter('.mad-alert-box--warning').length) { MadAlertBox.init($alertBoxes.filter('.mad-alert-box--warning'), { duration: self.ANIMATIONDURATION, cssPrefix: 'mad-', easing: self.ANIMATIONEASING, type: 'warning' }); } if($alertBoxes.filter('.mad-alert-box--info').length) { MadAlertBox.init($alertBoxes.filter('.mad-alert-box--info'), { duration: self.ANIMATIONDURATION, cssPrefix: 'mad-', easing: self.ANIMATIONEASING, type: 'info' }); } if($alertBoxes.filter('.mad-alert-box--error').length) { MadAlertBox.init($alertBoxes.filter('.mad-alert-box--error'), { duration: self.ANIMATIONDURATION, cssPrefix: 'mad-', easing: self.ANIMATIONEASING, type: 'error' }); } /* ---------------------------------------- End of Alert Boxes ---------------------------------------- */ /* ---------------------------------------- Tooltips ---------------------------------------- */ if( $('[data-tooltip]').length && $.fn.MonkeysanTooltip ) { $('[data-tooltip]').MonkeysanTooltip({ animationIn: 'fadeInDown', animationOut: 'fadeOutUp', tooltipPosition: 'top', jQueryAnimationEasing: self.ANIMATIONEASING, jQueryAnimationDuration: self.ANIMATIONDURATION, skin: 'mad' }); } /* ---------------------------------------- End of Tooltips ---------------------------------------- */ /* ---------------------------------------- IsotopeWrapper ---------------------------------------- */ $(window).on('load resize', function () { var $isotope = $('.mad-grid--isotope:not(.mad-sponsors)'); if ($isotope.length && window.MadIsotopeWrapper) { $isotope.each(function (index, container) { var $container = $(container), $stretchedSection = $container.closest('.mad-section--stretched-content, .mad-section--stretched-content-no-px'); if ($stretchedSection.length) { $stretchedSection.on('stretched.mad.Section', function () { if ($container.data('IsotopeWrapper')) return; MadIsotopeWrapper.init($container, { itemSelector: '.mad-grid-item', transitionDuration: self.ANIMATIONDURATION }); }); } else { MadIsotopeWrapper.init($container, { itemSelector: '.mad-grid-item', transitionDuration: self.ANIMATIONDURATION }); } }); } if ($isotope.length && window.MadIsotopeWrapper) { $isotope.each(function (index, container) { var $container = $(container), $stretchedSection = $container.closest('.mad-section--stretched-content, .mad-section--stretched-content-no-px'); if ($stretchedSection.length) { $stretchedSection.on('stretched.mad.Section', function () { if ($container.data('IsotopeWrapper')) return; MadIsotopeWrapper.init($container, { itemSelector: '.mad-grid-item', transitionDuration: self.ANIMATIONDURATION }); }); } else { MadIsotopeWrapper.init($container, { itemSelector: '.mad-grid-item', transitionDuration: self.ANIMATIONDURATION }); } }); } }); /* ---------------------------------------- End of IsotopeWrapper ---------------------------------------- */ /* ---------------------------------------- Dynamic background image ---------------------------------------- */ var $backgrounds = $('[data-bg-image-src]:not([class*="mad-colorizer--scheme-"])'); if($backgrounds.length && this.helpers.dynamicBgImage) { this.helpers.dynamicBgImage($backgrounds); } /* ---------------------------------------- End of Dynamic background image ---------------------------------------- */ /* ---------------------------------------- Owl Carousel ---------------------------------------- */ // owl carousel adaptive if($('.owl-carousel').length) this.helpers.owlAdaptive(); var $simpleSlideshow = $('.mad-simple-slideshow'), $testimonialsCarousel = $('.mad-testimonials-inner.owl-carousel'); if($simpleSlideshow.length && $.fn.owlCarousel) { $simpleSlideshow.each(function(index, carousel){ var $carousel = $(carousel), $stretchedSection = $carousel.closest('.mad-section--stretched-content, .mad-section--stretched-content-no-px'); if($stretchedSection.length) { $stretchedSection.each(function(scindex, scelement){ $(scelement).on('stretched.mad.Section', function() { $carousel.owlCarousel(self.helpers.owlSettings({ margin: 1, loop: true, autoplay: $carousel.hasClass('mad-simple-slideshow--autoplay') })); }); }); } else { $carousel.owlCarousel(self.helpers.owlSettings({ margin: 1, animateOut: 'fadeOut', loop: true, autoplay: $carousel.hasClass('mad-simple-slideshow--autoplay') })); } }); } if($testimonialsCarousel.length && $.fn.owlCarousel) { $testimonialsCarousel.each(function(index, carousel) { var $carousel = $(carousel), $stretchedSection = $carousel.closest('.mad-section--stretched-content, .mad-section--stretched-content-no-px'); if($stretchedSection.length) { $stretchedSection.on('stretched.mad.Section', function() { if($carousel.data('owl.carousel')) return; $carousel.owlCarousel(self.helpers.owlSettings({ margin: 0, loop: true, nav: true, dots: true })); }); } else { $carousel.owlCarousel(self.helpers.owlSettings({ margin: 0, loop: true, nav: true, dots: true })); } }); } this.helpers.gridOwl.extendConfigFor('.with-nav-2', { nav: true, dots: false, startPosition: 0, margin:8, loop: true, animateIn: 'fadeIn', animateOut: 'fadeOut' }); this.helpers.gridOwl.extendConfigFor('.mad-tabbed-bottom .with-nav-2', { margin: 4 }); this.helpers.gridOwl.extendConfigFor('.tabs-nav.with-nav-2', { margin: 24, loop: false }); this.helpers.gridOwl.extendConfigFor('.mad-products.mad-grid--cols-4', { responsive: { 0: { items: 1 }, 992: { items: 1 }, 1200: { items: 3 }, 1440: { items: 4 } } }); this.helpers.gridOwl.extendConfigFor('.full-scr', { margin: 16, loop: true }); this.helpers.gridOwl.extendConfigFor('.mad-small-gap', { nav: true, dots: false, margin: 15.9 }); this.helpers.gridOwl.extendConfigFor('.with-dots', { nav: false, dots: true, startPosition: 0, loop: true, animateIn: 'fadeIn', animateOut: 'fadeOut' }); this.helpers.gridOwl.extendConfigFor('.mad-testimonials', { nav: true, dots: true, startPosition: 1, autoplay: true, loop: true }); this.helpers.gridOwl.extendConfigFor('.mad-product-thumbs', { responsive: { 0: { items: 2 }, 480: { items: 3 }, 1200: { items: 3 }, 1300: { items: 3 } }, }); this.helpers.gridOwl.extendConfigFor('.mad-tabbed-carousel-thumbs', { nav: true, dots: true, margin: 0, loop: false, // !important autoplay: false, responsive: { 0: { items: 1 }, 480: { items: 2 }, 1200: { items: 3 }, 1300: { items: 4 } }, responsiveWithSidebar: { 0: { items: 1 }, 480: { items: 2 }, 1350: { items: 3 } } }); // Initialization owl carousels placed in the stretched sections $('[class*="mad-section--stretched-content"]').on('stretched.mad.Section', function(event, $section) { var $gridOwlCarousels = $section.find('.mad-grid.owl-carousel'), $simpleThumbs = $section.find('.mad-simple-slideshow-thumbs.owl-carousel'); if($gridOwlCarousels.length) self.helpers.gridOwl.add($gridOwlCarousels); if($simpleThumbs.length) { $simpleThumbs.owlCarousel(self.helpers.owlSettings({ responsive: { 0: { items: 2 }, 380: { items: 3 }, 992: { items: 4 }, 1200: { items: 6 } }, margin: 10, loop: false })); } }); // Initialization owl carousels placed in the normal sections var $simpleThumbs = $('.mad-simple-slideshow-thumbs.owl-carousel').filter(function(index, element){ return !$(element).closest('[class*="mad-section--stretched-content"]').length; }); if($simpleThumbs.length) { $simpleThumbs.owlCarousel(self.helpers.owlSettings({ responsive: { 0: { items: 2 }, 380: { items: 3 }, 992: { items: 4 }, 1200: { items: 6 } }, margin: 10, dots: true, loop: false })); } this.helpers.gridOwl.add($('.mad-grid.owl-carousel').filter(function(index, element){ return !$(element).closest('[class*="mad-section--stretched-content"]').length; })); this.helpers.owlSync.init(); /* ---------------------------------------- End of Owl Carousel ---------------------------------------- */ /* ---------------------------------------- Rating ---------------------------------------- */ var $ratingFields = $('.mad-rating-field'), $ratings; if($ratingFields.length) { $ratings = $ratingFields.find('.mad-rating'); if($ratings.length) { $ratings.on('built.mad.Rating', function(event, $rating) { var $tabs = $rating.closest('.mad-tabs'), Tabs; if($tabs.length) { Tabs = $tabs.data('tabs'); if(Tabs) Tabs.updateContainer(); } }); } } if (this.helpers.rating) this.helpers.rating($('.mad-rating:not(.mad-rating--independent)'), { topLevelElements: 'star', bottomLevelElements: 'star_border' }); if (this.helpers.rating) this.helpers.rating($('.mad-rating--independent'), { topLevelElements: 'star', bottomLevelElements: 'star_border' }); if (this.helpers.ratingField) this.helpers.ratingField($('.mad-rating-field')); /* ---------------------------------------- End of Rating ---------------------------------------- */ DOMDfd.resolve(); }; App.afterOuterResourcesLoaded = function() { var self = this; // Stop initializing any modules in case legacy browser is using if(this.ISLEGACYBROWSER) return; var $sections = $('.mad-section'); if(this.helpers.Colorizer) this.helpers.Colorizer.init($('[class*="mad-colorizer--scheme-"]')); if(this.modules.Section && $sections.length) { this.modules.Section.init($sections); } if(this.helpers.Breadcrumb) this.helpers.Breadcrumb.init($('.mad-header--transparent + .mad-breadcrumb[data-bg-image-src]')); if(this.helpers.fullScreenArea) this.helpers.fullScreenArea.init({ except: $('#mad-header:not(.mad-header--transparent)').add($('#mad-footer')) }); /* ---------------------------------------- Tabs & Tour Sections ---------------------------------------- */ var $tabs = $('.mad-tabs'); if($tabs.length) { $tabs.MonkeysanTabs({ speed: self.ANIMATIONDURATION, easing: self.ANIMATIONEASING, cssPrefix: 'mad-' }); $('.mad-tabs-nav .mad-tab-link').on('click', function () { $('.owl-carousel').trigger('refresh.owl.carousel'); $('.inner-container').css({ 'height': ($(".inner-container .mad-tab.mad-active").height() + 'px') }); }); var $utabs = $('.mad-tabs').data('tabs'); $('.mad-iso-tabs .mad-tabs-nav .mad-tab-link').on('click', function () { setTimeout(function () { $utabs.updateContainer(); }, 300); }); } var tabs = $('.tabs-section'); if (tabs.length) { tabs.tabs({ active: 0, beforeActivate: function (event, ui) { var hash = ui.newTab.find("li a").attr("href"); }, hide: { effect: "fadeOut", duration: 450 }, show: { effect: "fadeIn", duration: 450 }, updateHash: false }); } /* ---------------------------------------- End of Tabs & Tour Sections ---------------------------------------- */ if(this.modules.preloader) this.modules.preloader(); var $parallaxSections = $('.mad-colorizer--parallax .mad-colorizer-bg-image'); if($parallaxSections.length) { $parallaxSections.parallax("50%",.4); } }; /* ---------------------------------------- Back to top ---------------------------------------- */ App.modules.backToTop = function(config) { var backToTop = { init: function(config){ var self = this; if(config) this.config = $.extend(this.config, config); this.btn = $('', { class: self.config.cssPrefix+'back-to-top animated stealthy', html: 'expand_less' }); this.bindEvents(); $body.append(this.btn); }, config: { breakpoint: 700, showClass: 'zoomIn', hideClass: 'zoomOut', easing: 'linear', speed: 500, cssPrefix: '' }, bindEvents: function(){ var page = $('html, body'), self = this; this.btn.on('click', function(e){ page.stop().animate({ scrollTop: 0 }, { easing: self.config.easing, duration: self.config.speed }); }); this.btn.on(App.ANIMATIONEND, function(e){ e.preventDefault(); var $this = $(this); if($this.hasClass(self.config.hideClass)){ $this .addClass('stealthy') .removeClass(self.config.hideClass + " " + self.config.cssPrefix + "inview"); } }); $(window).on('scroll.backtotop', { self: this}, this.toggleBtn); }, toggleBtn: function(e){ var $this = $(this), self = e.data.self; if($this.scrollTop() > self.config.breakpoint && !self.btn.hasClass(self.config.cssPrefix + 'inview')){ self.btn .addClass(self.config.cssPrefix + 'inview') .removeClass('stealthy'); if(App.ANIMATIONSUPPORTED){ self.btn.addClass(self.config.showClass); } } else if($this.scrollTop() < self.config.breakpoint && self.btn.hasClass(self.config.cssPrefix + 'inview')){ self.btn.removeClass(self.config.cssPrefix + 'inview'); if(!App.ANIMATIONSUPPORTED){ self.btn.addClass('stealthy'); } else{ self.btn.removeClass(self.config.showClass) .addClass(self.config.hideClass); } } } }; backToTop.init(config); return this; }; /* ---------------------------------------- End of Back to top ---------------------------------------- */ /* ---------------------------------------- Preloader ---------------------------------------- */ App.modules.preloader = function() { var $preloader = $('.mad-preloader'), leftPos = parseInt($preloader.css('margin-left'), 10), topPos = parseInt($preloader.css('margin-top'), 10), $w = $(window), $nav = $('.mad-navigation, .mad-navigation-vertical'); if($nav.length) { $nav.off('click.MadPreloader').on('click.MadPreloader', 'a', function(event){ var $this = $(this), $circle = $('
    ', { style: 'left: '+ event.clientX +'px; top: '+ event.clientY +'px;', class: 'mad-preloader-circle' }); if($body.hasClass('mad-body--moving-to-another-page')) { $circle.appendTo($body); setTimeout(function(){ $circle.addClass('mad-preloader-circle--appearing'); }, 20); } }); } if(!$preloader.length) return; $body.off('mousemove.MadPreloader').on('mousemove.MadPreloader', function(event) { $preloader.css({ 'margin-left': leftPos - ($w.width() / 2 - event.pageX), 'margin-top': topPos - ($w.height() / 2 - (event.pageY - $w.scrollTop())), }); }).jQueryImagesLoaded().then(function(){ $preloader.addClass('mad-preloader--disappearing'); setTimeout(function() { $preloader.remove(); $body.off('mousemove.MadPreloader'); }, 700); // can be removed in production (demo only): if(window.location.hash == '#mad-footer') { $('html, body').stop().animate({ scrollTop: $doc.height() }, { duration: self.ANIMATIONDURATION, easing: self.ANIMATIONEASING }); } }); }; /* ---------------------------------------- End of Preloader ---------------------------------------- */ /* ---------------------------------------- Dropdown ---------------------------------------- */ App.modules.dropdown = {}; App.modules.dropdown.config = { uncloseable: '.mad-dropdown, .select2-container--mad', cssPrefix: 'mad-', availableError: 30, rtl: App.RTL, classMap: { active: 'dropdown--opened', container: 'dropdown', title: 'dropdown-title', element: 'dropdown-element', leftPlaced: 'dropdown-element--x-left', rightPlaced: 'dropdown-element--x-right', topPlaced: 'dropdown-element--y-top' } }; App.modules.dropdown.init = function(config) { if(this._initialized) return; if($.isPlainObject(config)) $.extend(true, this.config, config); Object.defineProperties(this, { activeClass: { get: function() { return this.config.cssPrefix + this.config.classMap.active; } }, containerClass: { get: function() { return this.config.cssPrefix + this.config.classMap.container; } }, titleClass: { get: function() { return this.config.cssPrefix + this.config.classMap.title; } }, elementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.element; } }, rightPlacedClass: { get: function() { return this.config.cssPrefix + this.config.classMap.rightPlaced; } }, leftPlacedClass: { get: function() { return this.config.cssPrefix + this.config.classMap.leftPlaced; } }, topPlacedClass: { get: function() { return this.config.cssPrefix + this.config.classMap.topPlaced; } }, $dropdowns: { get: function() { return $('.' + this.containerClass); } } }); this._bindEvents(); }; App.modules.dropdown._bindEvents = function() { var self = this; $doc.off('click.MadDropdown').on('click.MadDropdown', function(e) { var $target = $(e.target); if(!$target.closest(self.config.uncloseable).length) { self.close(self.$dropdowns); } }).on('keydown.MadDropdown', function(event) { if(event.keyCode && event.keyCode == 27) { self.close(self.$dropdowns); } }); $body.off('click.MadDropdown').on('click.MadDropdown', '.' + self.titleClass, function(e) { var $dropdown = $(this).closest('.' + self.containerClass), $others = self.$dropdowns.not($dropdown); if($dropdown.length) { self.toggle($dropdown); e.preventDefault(); } self.close($others); }); this._initialized = true; }; App.modules.dropdown.close = function($dropdowns) { if(!$.isjQuery($dropdowns, true)) return; $dropdowns.removeClass(this.activeClass) .find('.' + this.elementClass) .attr('aria-hidden', 'true') .end() .find('.' + this.titleClass) .attr('aria-expanded', 'false'); }; App.modules.dropdown.open = function($dropdowns) { if(!$.isjQuery($dropdowns, true)) return; this.fixPosition($dropdowns); $dropdowns.addClass(this.activeClass) .find('.' + this.elementClass) .attr('aria-hidden', 'false') .end() .find('.' + this.titleClass) .attr('aria-expanded', 'true'); }; App.modules.dropdown.fixPosition = function($dropdowns) { var self = this, $w = $(window); if(!$.isjQuery($dropdowns, true)) return; return $dropdowns.each(function(index, dropdown) { var $dropdown = $(dropdown), $element = $dropdown.find('.' + self.elementClass), dOffset; $element.removeClass(self.leftPlacedClass) .removeClass(self.rightPlacedClass) .removeClass(self.topPlacedClass); dOffset = $element.offset(); // x if(dOffset.left - self.config.availableError < 0) { $element.addClass(self.leftPlacedClass); } else if(dOffset.left + $element.outerWidth() + self.config.availableError > $w.width()) { $element.addClass(self.rightPlacedClass); } // y if(dOffset.top + $element.outerHeight() + self.config.availableError > $w.scrollTop() + $w.height()) { $element.addClass(self.topPlacedClass); } }); }; App.modules.dropdown.toggle = function($dropdowns) { if(!$.isjQuery($dropdowns, true)) return; var self = this; return $dropdowns.each(function(index, dropdown){ var $dropdown = $(dropdown); if($dropdown.hasClass(self.activeClass)) self.close($dropdown); else self.open($dropdown); }); }; /* ---------------------------------------- End of Dropdown ---------------------------------------- */ /* ---------------------------------------- Arctic Modal ---------------------------------------- */ App.modules.arcticModals = { _config: { type: 'html', closeOnOverlayClick: true, overlay: { css: { backgroundColor: '#000000' } }, clickableElements: null }, _collection: $(), init: function( collection, config ) { if( !collection || !collection.length ) return; config = $.isPlainObject( config ) ? $.extend(true, {}, this._config, config) : this._config; config = this._prepareCallbacks( config ); if( config && config.clickableElements ) { $body.on('click.MadArcticModals', '.arcticmodal-container', function(e){ var $target = $(e.target); if( !$target.closest( config.clickableElements ).length ) { $.arcticmodal('close'); } }); } collection.on('click.MadArcticModals', function(e) { var $this = $(this); if( $this.data('arctic-modal-type') == 'ajax' ) { if(!$this.data('arctic-modal-ajax-action')) { return; } $.arcticmodal($.extend(true, {}, config, { type: 'ajax', url: MadAJAXData.url, ajax: { cache: false, dataType: 'html', data: { action: $this.data('arctic-modal-ajax-action'), data: $this.data('arctic-modal-ajax-data'), AJAX_token: MadAJAXData.AJAX_token }, success: function(data, el, response) { data.body.html( response ); } } })); } else { $($this.data('arctic-modal')).arcticmodal(config); } e.preventDefault(); }); }, _prepareCallbacks: function(config) { var beforeOpenCallback = config.beforeOpen || function(){}, beforeCloseCallback = config.beforeClose || function(){}, afterOpenCallback = config.afterOpen || function(){}, afterCloseCallback = config.afterClose || function(){}; config.beforeOpen = function() { beforeOpenCallback.apply(this, Array.prototype.slice(arguments, 0)); }; config.afterOpen = function () { afterOpenCallback.apply(this, Array.prototype.slice(arguments, 0)); }; config.beforeClose = function(event) { beforeCloseCallback.apply(this, Array.prototype.slice(arguments, 0)); }; config.afterClose = function(event) { $body.css('overflow', ''); afterCloseCallback.apply(this, Array.prototype.slice(arguments, 0)); }; return config; } }; /* ---------------------------------------- End of Arctic Modal ---------------------------------------- */ /* ---------------------------------------- Alert Message Module ---------------------------------------- */ App.modules.alertMessage = function(options) { if(!('Handlebars' in window)) return; var config = { target: $body.children().last(), type: 'info', timeout: 4000 }; config = options && $.isPlainObject(options) ? $.extend(true, {}, config, options) : config; var template = ''; var messageBox = $(Handlebars.compile(template)(config)); messageBox.data('timeOut', setTimeout(function(){ messageBox.stop().slideUp({ duration: 350, easing: 'linear', complete: function() { $(this).remove(); } }); }, config.timeout)).insertAfter(config.target).stop().slideDown({ duration: 350, easing: 'linear' }); }; /* ---------------------------------------- End of Alert Message Module ---------------------------------------- */ /* ---------------------------------------- Section Module ---------------------------------------- */ App.modules.Section = {}; App.modules.Section._$collection = $(); App.modules.Section.config = { cssPrefix: 'mad-', resizeDelay: 10, boddyPaddings: false, classMap: { loading: 'section--loading', stretched: 'section--stretched', stretchedContent: 'section--stretched-content', stretchedContentNoPadding: 'section--stretched-content-no-px', bgColorElementClass: 'colorizer-bg-color', bgImageElementClass: 'colorizer-bg-image' } }; Object.defineProperties(App.modules.Section, { bgColorElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgColorElementClass; } }, bgImageElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgImageElementClass; } }, stretchedClass: { get: function() { return this.config.cssPrefix + this.config.classMap.stretched; } }, stretchedContentClass: { get: function() { return this.config.cssPrefix + this.config.classMap.stretchedContent; } }, stretchedContentNoPaddingClass: { get: function() { return this.config.cssPrefix + this.config.classMap.stretchedContentNoPadding; } }, loadingClass: { get: function() { return this.config.cssPrefix + this.config.classMap.loading; } } }); App.modules.Section.changeConfig = function(config) { return $.extend(true, this.config, config); }; App.modules.Section.init = function($collection) { var self = this; if(!$.isjQuery($collection, true)) return; if(!this._bindedGlobalEvents) this._bindGlobalEvents(); return $collection.each(function(index, section){ var $section = $(section); if(self._$collection.filter($section).length) return; self.build($section); self._$collection = self._$collection.add($section); }); }; App.modules.Section._bindGlobalEvents = function () { var self = this; $(window).on('resize.App.modules.Section', function() { if(self._resizeTimeOutId) clearTimeout(self._resizeTimeOutId); self._resizeTimeOutId = setTimeout(function(){ self.rebuild(); }, self.config.resizeDelay); }); }; App.modules.Section.rebuild = function() { var self = this; return this._$collection.each(function(index, section){ var $section = $(section); self.reset($section).build($section); }); }; App.modules.Section.reset = function($section) { if(!$.isjQuery($section, true)) return; $section.css({ 'margin-left': '', 'margin-right': '' }); return this; }; App.modules.Section.build = function($section) { if(!$.isjQuery($section, true)) return; if($section.hasClass(this.stretchedClass)) { this.stretch($section); } else if($section.hasClass(this.stretchedContentClass) || $section.hasClass(this.stretchedContentNoPaddingClass)) { this.stretchContent($section); } return this; }; App.modules.Section.getDocumentGeometry = function() { return { 'padding-left': parseInt($body.css('padding-left'), 10), 'padding-right': parseInt($body.css('padding-right'), 10) }; }; App.modules.Section.stretch = function($section) { var $bgs, xOffsetDiff, documentGeometry; if(!$.isjQuery($section, true)) return; $bgs = $section.find('.' + this.bgColorElementClass + ', .' + this.bgImageElementClass); if(!$bgs.length) return; xOffsetDiff = $section.offset().left; documentGeometry = this.getDocumentGeometry(); if(xOffsetDiff > 0) { $bgs.css({ left: (xOffsetDiff - documentGeometry['padding-left']) / -1, right: (xOffsetDiff - documentGeometry['padding-right']) / -1 }); } $section.removeClass(this.loadingClass).trigger('stretched.mad.Section', [$section]); return $section; }; App.modules.Section.stretchContent = function($section) { var xOffsetDiff, documentGeometry; if(!$.isjQuery($section) || !$section.length) return; xOffsetDiff = $section.offset().left; documentGeometry = this.getDocumentGeometry(); if(xOffsetDiff > 0) { $section.css({ 'margin-left': (xOffsetDiff - documentGeometry['padding-left']) / -1, 'margin-right': (xOffsetDiff - documentGeometry['padding-right']) / -1 }); } $section.removeClass(this.loadingClass).trigger('stretched.mad.Section', [$section]); return $section; }; /* ---------------------------------------- End of Section Module ---------------------------------------- */ /* ---------------------------------------- Colorizer ---------------------------------------- */ App.helpers.Colorizer = {}; App.helpers.Colorizer.config = { cssPrefix: 'mad-', classMap: { bgColorElement: 'colorizer-bg-color', bgImageElement: 'colorizer-bg-image', parallax: 'colorizer--parallax' }, afterInit: function() {} }; Object.defineProperties(App.helpers.Colorizer, { bgColorElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgColorElement; } }, bgImageElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgImageElement; } }, parallaxClass: { get: function() { return this.config.cssPrefix + this.config.classMap.parallax; } } }); /** * * @param {jQuery} $collection - collection of elements to colorize * @returns {jQuery} $collection */ App.helpers.Colorizer.init = function($collection, config) { var self = this; if(!$.isjQuery($collection, true)) return $collection; this.config = $.extend(true, {}, this.config, config); $collection.each(function(index, element) { var $element = $(element); if(!self.hasBGColorElement($element)) { self.appendBGColorElement($element); } if(!self.hasBGImageElement($element) && $element.data('bg-image-src')) { self.appendBGImageElement($element); } }); this.config.afterInit.call(this); return $collection; }; /** * * @param {jQuery} $element * @returns {Boolean} */ App.helpers.Colorizer.hasBGColorElement = function($element) { return $element.children('.' + this.bgColorElementClass).length; }; /** * * @param {jQuery} $element * @returns {Boolean} */ App.helpers.Colorizer.hasBGImageElement = function($element) { return $element.children('.' + this.bgImageElementClass).length; }; /** * * @param {jQuery} $element * @returns {jQuery} */ App.helpers.Colorizer.appendBGColorElement = function($element) { var self = this, $bgColorElement = $('
    ', { class: self.bgColorElementClass }); return $element.prepend($bgColorElement); }; /** * * @param {jQuery} $element * @returns {jQuery} */ App.helpers.Colorizer.appendBGImageElement = function($element) { var self = this, src = $element.data('bg-image-src'), $bgImageElement = $('
    ', { class: self.bgImageElementClass }); $bgImageElement.css('background-image', 'url("'+src+'")'); $element.prepend($bgImageElement); return $element; }; /* ---------------------------------------- End of Colorizer ---------------------------------------- */ /* ---------------------------------------- Breadcrumb ---------------------------------------- */ App.helpers.Breadcrumb = {}; App.helpers.Breadcrumb.$collection = $(); App.helpers.Breadcrumb.$w = $(window); App.helpers.Breadcrumb.config = { until: 767, cssPrefix: 'mad-', resizeTimeoutDelay: 10, classMap: { bgColorElement: 'colorizer-bg-color', bgImageElement: 'colorizer-bg-image' } }; Object.defineProperties(App.helpers.Breadcrumb, { bgColorElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgColorElement; } }, bgImageElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bgImageElement; } }, bgsSelectors: { get: function() { return '.' + this.bgColorElementClass + ', .' + this.bgImageElementClass; } } }); App.helpers.Breadcrumb.init = function($breadcrumbs) { var self = this; if(!$.isjQuery($breadcrumbs, true)) return; this._bindEvents(); $breadcrumbs.each(function(index, element) { var $element = $(element); if(self.$collection.filter($element).length) return; self.initCertainElement($element); }); }; App.helpers.Breadcrumb._bindEvents = function() { var self = this; if(!this._eventsBinded) { $body.on('spaceremoved.mad.stickysection', function() { self.$collection.each(function(index, element){ self.stretch($(element)); }); }); this.$w.on('resize', function() { if(self._resizeTimeOutId) clearTimeout(self._resizeTimeOutId); self._resizeTimeOutId = setTimeout(function(){ self.$collection.each(function(index, element){ self.stretch($(element)); }); }, self.config.resizeTimeoutDelay); }); } }; App.helpers.Breadcrumb.initCertainElement = function($breadcrumb) { this.$collection = this.$collection.add($breadcrumb); this.stretch($breadcrumb); }; App.helpers.Breadcrumb.stretch = function($breadcrumb) { var $prev = $breadcrumb.prev(), prevOH, $bgs, $stickedSections; if($.isjQuery($prev, true)) { prevOH = $prev.outerHeight(); $bgs = $breadcrumb.find(this.bgsSelectors); $stickedSections = $('.mad-header-section--sticked'); if($bgs.length) { $bgs.css({ top: -prevOH }); } if($stickedSections.length) { $bgs.css({ top: $stickedSections.outerHeight() * -1 }); } } return $breadcrumb; }; /* ---------------------------------------- End of Breadcrumb ---------------------------------------- */ /* ---------------------------------------- Critical Error ---------------------------------------- */ App.helpers.showCriticalFullScreenMessage = function(config) { var _config = { after: '', before: '', content: '', cssPrefix: 'mad-', cssClass: '' }, template = '
    \
    \
    \
    %before%
    \
    %content%
    \
    %after%
    \
    \
    \
    '; config = $.extend(_config, config); for(var option in config) { template = template.replace(new RegExp('%' + option + '%', 'g'), config[option]); } $body.html('').addClass(config.cssPrefix + 'body--has-critical-fullscreen-message').append(template); }; /* ---------------------------------------- End of Critical Error ---------------------------------------- */ /* ---------------------------------------- Dynamic background image ---------------------------------------- */ App.helpers.dynamicBgImage = function(collection) { collection = $.isjQuery(collection) ? collection : $('[data-bg-image-src]'); if(!collection.length) return; return collection.each(function(i, el){ var $this = $(el); if( !$this.data('bg-image-src') ) return; $this.css('background-image', 'url("'+ $this.data('bg-image-src') +'")'); }); }, /* ---------------------------------------- End of Dynamic background image ---------------------------------------- */ /* ---------------------------------------- Toggled fields ---------------------------------------- */ App.helpers.toggledFields = function() { $body.off('click.MadToggledFields').on('click.MadToggledFields', '.mad-toggled-fields-invoker', function(event) { var $this = $(this), $fields = $this.siblings('.mad-toggled-fields'); $this.toggleClass('mad-toggled-fields-invoker--opened'); if($fields.length) { $fields.stop().slideToggle({ duration: App.ANIMATIONDURATION, easing: App.ANIMATIONEASING, }); } }); }; /* ---------------------------------------- End of Toggled fields ---------------------------------------- */ /* ---------------------------------------- Calendar Widget ---------------------------------------- */ App.helpers.calendarWidget = function() { var $calendar = $('.calendar_wrap'), $caption, $prev, $next; if(!$calendar.length || $calendar.hasClass('mad-calendar-rendered')) return; $caption = $calendar.find('caption'); if(!$caption.length) return; $prev = $calendar.find('#prev > a'); $next = $calendar.find('#next > a'); if($prev.length) { $('', { class: 'calendar-caption-prev mad-ln--independent', html: App.RTL ? '' : '', href: $prev.attr('href') }).appendTo($caption); } if($next.length) { $('', { class: 'calendar-caption-next mad-ln--independent', html: App.RTL ? '' : '', href: $next.attr('href') }).appendTo($caption); } $calendar.addClass('mad-calendar-rendered'); }; /* ---------------------------------------- End of Calendar Widget ---------------------------------------- */ /* ---------------------------------------- Owl Carousel helpers ---------------------------------------- */ App.baseOwlSettings = { items: 1, margin: 32, nav: true, rtl: App.RTL, navText: App.RTL ? ['', ''] : ['', ''], dots: false, autoplayHoverPause: true, smartSpeed: App.ANIMATIONDURATION, fluidSpeed: App.ANIMATIONDURATION, autoplaySpeed: App.ANIMATIONDURATION, navSpeed: App.ANIMATIONDURATION, dotsSpeed: App.ANIMATIONDURATION, dragEndSpeed: App.ANIMATIONDURATION }; App.helpers.owlAdaptive = function(collection) { collection = collection ? collection : $('.owl-carousel'); if(!collection.length) return; }; App.helpers.owlContainerHeight = function(owl, resized) { if(owl.hasClass('owl-carousel--vadaptive')) return; setTimeout(function(){ var max = 0, items = owl.find('.owl-item'), activeItems = items.filter('.active').children(); items.children().css('height', 'auto'); activeItems.each(function(i, el){ var $this = $(el), height = $this.outerHeight(); if(height > max) max = height; }); owl.find('.owl-stage-outer').stop().animate({ height: max }, { duration: 150, complete: function() { if(!resized) return; App.helpers.owlUpdateIsotopeParent($(this)); } }); }, 1); }; App.helpers.owlUpdateIsotopeParent = function($owl) { var $isotope = $owl.closest('.mad-grid--isotope'); if($isotope.length) $isotope.isotope('layout'); }; App.helpers.owlNav = function(owl) { setTimeout(function(){ var settings = owl.data('owl.carousel').settings; if(settings.autoplay || settings.loop) return; var prev = owl.find('.owl-prev'), next = owl.find('.owl-next'); if(owl.find('.owl-item').first().hasClass('active')) prev.addClass('mad-disabled'); else prev.removeClass('mad-disabled'); if(owl.find('.owl-item').last().hasClass('active')) next.addClass('mad-disabled'); else next.removeClass('mad-disabled'); }, 100); }; App.helpers.owlSettings = function(settings) { return $.extend(true, {}, App.baseOwlSettings, settings); }; App.helpers.owlSync = { init: function() { this.collection = $('.owl-carousel[data-sync]'); if(!this.collection.length) return; this.prepare(); }, prepare: function(){ this.collection.each(function(i, el){ var $this = $(el), sync = $($this.data('sync')); sync.on('changed.owl.carousel', function(e){ var index = e.item.index; if(!sync.data('afterClicked')) $this.trigger('to.owl.carousel', [index, 350, true]); sync.data('afterClicked', false); }); $this.on('prev.owl.carousel', function(){ sync.trigger('prev.owl.carousel'); }); $this.on('next.owl.carousel', function(){ sync.trigger('next.owl.carousel'); }); $this.on('click.owlSync', '.owl-item', function(e){ e.preventDefault(); var index = $(this).index(); sync.data('afterClicked', true); sync.trigger('to.owl.carousel', [index, 350, true]); }); }); } }; /* ---------------------------------------- End of Owl Carousel helpers ---------------------------------------- */ /* ---------------------------------------- Rating ---------------------------------------- */ function MadRating($element, config) { this.$element = $element; this.config = $.extend(MadRating.config, config); Object.defineProperties(this, { bottomLevelElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.bottomLevelElement; } }, topLevelElementClass: { get: function() { return this.config.cssPrefix + this.config.classMap.topLevelElement; } } }); }; MadRating.config = { cssPrefix: 'mad-', bottomLevelElements: '', topLevelElements: '', estimate: 5, rtl: App.RTL, classMap: { bottomLevelElement: 'rating-bottom-level', topLevelElement: 'rating-top-level' } }; MadRating.prototype.init = function() { this._buildMarkup(); return this; }; MadRating.prototype._buildMarkup = function() { var _self = this; if(this._markupBuilded) return; this.$element.css({ 'position': 'relative', 'display': 'inline-block' }); if(this.config.topLevelElements) { this.$topLevelEl = $('
    ', { class: _self.topLevelElementClass, style: 'position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 2; white-space: nowrap; overflow: hidden;' }); for(var i = 0; i < 5; i++) this.$topLevelEl.append(this.config.topLevelElements); this.$element.append(this.$topLevelEl); } if(this.config.bottomLevelElements) { this.$bottomLevelEl = $('
    ', { class: _self.bottomLevelElementClass, style: 'position: relative; z-index: 1;' }); for(var i = 0; i < 5; i++) this.$bottomLevelEl.append(this.config.bottomLevelElements); this.$element.append(this.$bottomLevelEl); } this.update(this.config.estimate); this._markupBuilded = true; this.$element.trigger('built.mad.Rating', [this.$element]); }; MadRating.prototype.update = function(estimate) { if(this.config.topLevelElements) { this.$topLevelEl.css('width', (estimate / 5 * 100) + '%'); } else { if(this.config.bottomLevelElements) { this.$bottomLevelEl.html(''); for(var i = 0; i < Math.round(estimate); i++) this.$bottomLevelEl.append(this.config.bottomLevelElements); } } }; App.helpers.rating = function($collection, config) { config = config || {}; if(!$.isjQuery($collection) || !$collection.length) return $collection; return $collection.each(function(index, element) { var $element = $(element), elementConfig = $.extend(true, {}, config, {estimate: $element.data('estimate')}); if(!$element.data('Rating')) $element.data('Rating', new MadRating($element, elementConfig).init()); }); }; App.helpers.ratingField = function($collection) { if(!$.isjQuery($collection)) return; $collection.on('click.MadRatingField', '.icon', function(event) { var $icon = $(this), $rating = $icon.closest('[data-estimate]'), index = $icon.index() + 1, Rating = $rating.data('Rating'), $field = $rating.siblings('input[type="hidden"]'); if(Rating) { Rating.update( App.RTL ? 6 - index : index); if($field.length) { $field.val(index); } } event.preventDefault(); event.stopPropagation(); }); }; /* ---------------------------------------- End of Rating ---------------------------------------- */ /* ---------------------------------------- gridOwl ---------------------------------------- */ App.helpers.gridOwl = { _commonLayoutConfig: { 'columns-4': { responsive: { 0: { items: 1 }, 768: { items: 2 }, 1200: { items: 4 } } }, 'columns-4-sidebar': { responsive: { 0: { items: 1 }, 992: { items: 2 }, 1200: { items: 3 } } }, 'columns-3': { responsive: { 0: { items: 1 }, 768: { items: 2 }, 1200: { items: 3 } } }, 'columns-3-sidebar': { responsive: { 0: { items: 1 }, 992: { items: 2 }, 1200: { items: 3 } } }, 'columns-2': { responsive: { 0: { items: 1 }, 768: { items: 2 } } }, 'columns-2-sidebar': { responsive: { 0: { items: 1 }, 992: { items: 2 } } } }, _$collection: $(), _individualConfigs: {} }; /** * Initializes the gridOwl helper * @param {jQuery} $collection * * @returns {jQuery} */ App.helpers.gridOwl.init = function($collection) { var self = this; $collection = $.isjQuery($collection) ? $collection : $('.mad-grid.owl-carousel'); $collection.each(function(index, element){ var $element = $(element); if(self._$collection.filter($element).length) return; self._$collection = self._$collection.add($element); }); this.update(); return $collection; }; /** * Modifies config for the elements with parents that match specified selector. * @param {String} selector * @param {Object} config * * @returns {Object} */ App.helpers.gridOwl.extendConfigFor = function(selector, config) { this._individualConfigs[selector] = config; return this; }; /** * Adds new carousel to the collection * * @param {jQuery} $carousel * * @returns {Object} */ App.helpers.gridOwl.add = function($carousel) { if($.isjQuery($carousel) && !this._$collection.filter($carousel).length) { this._$collection = this._$collection.add($carousel); this.update(); } return this; }; /** * Initializes not initialized carousels. * * @returns {Object} */ App.helpers.gridOwl.update = function() { var self = this; this._$collection.each(function(index, element){ var $element = $(element), config = {}, columnsCount, layoutConfigProp; if($element.data('owl.carousel')) return; // detect layout settings columnsCount = self._getColumnsCount($element); if(columnsCount > 1) { // check if sidebar if($element.closest('.mad-has-sidebar').length) { layoutConfigProp = 'columns-' + columnsCount + '-sidebar'; } else { layoutConfigProp = 'columns-' + columnsCount; } $.extend(config, self._commonLayoutConfig[layoutConfigProp]); } for(var selector in self._individualConfigs) { if($element.closest(selector).length) { $.extend(config, self._individualConfigs[selector]); if($element.closest('.mad-has-sidebar').length) { config.responsive = config.responsiveWithSidebar; } } } $element.owlCarousel(App.helpers.owlSettings(config)); }); return this; }; /** * Returns amount of columns in the specified element. * * @param {jQuery} $element * @returns {Number} */ App.helpers.gridOwl._getColumnsCount = function($element) { if($element.hasClass('mad-grid--cols-4')) return 4; else if($element.hasClass('mad-grid--cols-3')) return 3; else if($element.hasClass('mad-grid--cols-2')) return 2; else if($element.hasClass('mad-grid--cols-5')) return 5; return 1; }; /* ---------------------------------------- End of gridOwl ---------------------------------------- */ /* ---------------------------------------- Full Screen Area ---------------------------------------- */ App.helpers.fullScreenArea = { init: function(config){ var self = this; this.collection = $('.mad-fullscreen-area'); if(!this.collection.length) return; this.config = config || {}; this.defPaddingTop = parseInt(this.collection.css('padding-top'), 10); this.defPaddingBottom = parseInt(this.collection.css('padding-bottom'), 10); this.w = $(window); this.$body = $body; this.run(); this.w.on('resize.fullscreen', function() { self.run(); }); return this.collection; }, reset: function(){ if(!this.collection) return; this.run(); }, updateDocumentState: function(){ var self = this; this.collection.css({ 'padding-top': self.defPaddingTop, 'padding-bottom': self.defPaddingBottom }); this.cH = this.collection.outerHeight(); this.eH = this.config.except && this.config.except.length ? this.getTotalHeightOfExceptedElements() : 0; this.documentPadding = parseInt(this.$body.css('padding-top'), 10) + parseInt(this.$body.css('padding-bottom'), 10); this.wH = this.w.height(); }, getTotalHeightOfExceptedElements: function() { return this.config.except.toArray().reduce(function(accumulator, currentValue, index, array){ return accumulator + $(currentValue).outerHeight(); }, 0); }, run: function(){ var self = this; this.updateDocumentState(); if(this.timeoutId) clearTimeout(this.timeoutId); this.timeoutId = setTimeout(function(){ if(self.cH < self.wH){ var diff = (self.wH - self.cH) / 2; self.collection.css({ 'padding-top': diff + self.defPaddingTop - ((self.eH + self.documentPadding)/2), 'padding-bottom': diff + self.defPaddingBottom - ((self.eH + self.documentPadding)/2) }); } self.collection.addClass('mad-fullscreen-area--ready'); }, 100); } }; /* ---------------------------------------- End of Full Screen Area ---------------------------------------- */ /* ---------------------------------------- Google Maps ---------------------------------------- */ if ($('#googleMap').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP, styles: [{ featureType: 'all', stylers: [{ saturation: -100 }, { gamma: 0.0 }] }] }; var map = document.getElementById('googleMap'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap3').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap3'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap3"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap4').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap4'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap4"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap5').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap5'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap5"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap6').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap6'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap6"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap7').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap7'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap7"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap8').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap8'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap8"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap9').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap9'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap9"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap10').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap10'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap10"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap11').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap11'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap11"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap12').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap12'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap12"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap13').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap13'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap13"), mapProp); } var marker = new google.maps.Marker({ position: { lat: 51.503454, lng: -0.124755 }, map: map, icon: 'images/map_marker.png' }); marker.setMap(map); //Zoom to 7 when clicked on marker google.maps.event.addListener(marker, 'click', function () { map.setZoom(9); map.setCenter(marker.getPosition()); }); } google.maps.event.addDomListener(window, 'load', loadMap); } if ($('#googleMap14').length) { function loadMap() { var mapProp = { center: { lat: 51.503454, lng: -0.124755 }, zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = document.getElementById('googleMap14'); if (map !== null) { var map = new google.maps.Map(document.getElementById("googleMap14"), mapProp); } setMarkers(map); } var marks = [ ['first', 51.501454, -0.144755], ['second', 51.497454, -0.184755], ['third', 51.511454, -0.104755], ['forth', 51.498454, -0.095755] ]; function setMarkers(map) { for (var i = 0; i < marks.length; i++) { var mark = marks[i]; var marker = new google.maps.Marker({ position: { lat: mark[1], lng: mark[2] }, map: map, icon: 'images/map_marker.png', title: mark[0], zIndex: mark[3] }); } } google.maps.event.addDomListener(window, 'load', loadMap); } /* ---------------------------------------- End of Google Maps ---------------------------------------- */ /* ---------------------------------------- Bg move ---------------------------------------- */ App.modules.bgMove = function () { var lFollowX = 0, lFollowY = 0, x = 0, y = 0, friction = 1 / 30; function moveBackground() { x += (lFollowX - x) * friction; y += (lFollowY - y) * friction; var translate = 'translate(' + x + 'px, ' + y + 'px) scale(1)'; $('.bg-move').css({ '-webit-transform': translate, '-moz-transform': translate, 'transform': translate }); window.requestAnimationFrame(moveBackground); } $(window).on('mousemove click', function (e) { var lMouseX = Math.max(-100, Math.min(100, $(window).width() / 2 - e.clientX)); var lMouseY = Math.max(-100, Math.min(100, $(window).height() / 2 - e.clientY)); lFollowX = (20 * lMouseX) / 100; // 100 : 12 = lMouxeX : lFollow lFollowY = (10 * lMouseY) / 100; }); moveBackground(); } /* ---------------------------------------- Bg move ---------------------------------------- */ /* ---------------------------------------- Shop item close ---------------------------------------- */ /** * Initialize global close event * @return Object Core; **/ App.modules.closeBtn = function() { $('body').on('click.globalclose', '.mad-close-item:not(.shopping-cart-full .mad-close-item)', function (e) { e.preventDefault(); $(this).parent().stop().animate({ opacity: 0 }, function () { $(this).stop().slideUp(function () { $(this).remove(); }); }); }); var c = $('.shopping-cart-full'); c.on('click.removeProduct', '.mad-close-item', function (e) { e.preventDefault(); $(this).closest('tr').stop().fadeOut(function () { $(this).remove(); }); }); return this; } /* ---------------------------------------- Shop item close ---------------------------------------- */ /* ---------------------------------------- View Types ---------------------------------------- */ App.modules.viewTypes = function() { var collection = $('[data-view]'); if (!collection.length) return; if ($('.mad-full-page-wrap').length) { $('.toggle-map').on('click', function (e) { e.preventDefault(); $(this).toggleClass('active'); $('body').toggleClass('mad-full-page'); }); $('.toggle-list').on('click', function (e) { e.preventDefault(); $('.toggle-map').addClass('active not-active'); $('body').addClass('mad-full-page'); }); $('.toggle-grid').on('click', function (e) { e.preventDefault(); $('.toggle-map').removeClass('not-active'); }); } else { $('.toggle-map').on('click', function (e) { e.preventDefault(); $(this).toggleClass('active'); $('.gmap-toggle').slideToggle(); }); } collection.on('click', function (e) { e.preventDefault(); var $this = $(this), target = $($this.data('target')); $this .addClass('active') .siblings("a:not('.toggle-map')") .removeClass('active'); target .removeClass('mad-entity-hr mad-entity-vr mad-entity-ar') .addClass('mad-entity-' + $this.data('view')); target .removeClass('style-2 style-4 mad-entity-2 mad-entity-4') .addClass('style-' + $this.data('view')); $('.owl-carousel').trigger('refresh.owl.carousel'); }); $('.view-type a').on('click', function () { $('.owl-carousel').trigger('refresh.owl.carousel'); }); return collection; } /* ---------------------------------------- View Types ---------------------------------------- */ /** * Emulates single accordion item * @param Function callback * @return jQuery collection; **/ App.modules.hiddenSections = function(callback) { var collection = $('.hidden-section'); if (!collection.length) return; collection.each(function (i, el) { $(el).find('.content').hide(); }); collection.on('click.hidden', '.invoker', function (e) { e.preventDefault(); var content = $(this).closest('.hidden-section').find('.content'); content.slideToggle({ duration: 500, easing: 'easeOutQuint', complete: callback ? callback : function () { } }); }); return collection; }, $.extend({ isjQuery: function(element, elementExists) { if(element === undefined || element === null) return false; if(elementExists === undefined) { return element instanceof jQuery; } else { return $.isjQuery(element) && element.length; } } }); $.fn.extend({ jQueryImagesLoaded : function () { var $imgs = this.find('img[src!=""]'); if (!$imgs.length) {return $.Deferred().resolve().promise();} var dfds = []; $imgs.each(function(){ var dfd = $.Deferred(); dfds.push(dfd); var img = new Image(); img.onload = function(){dfd.resolve();}; img.onerror = function(){dfd.resolve();}; img.src = this.src; }); return $.when.apply($,dfds); } }); $doc.on('beforeClose', function(event) { if($(event.target).hasClass('mad-modal')) { event.stopImmediatePropagation(); } }); $doc.ready(function() { App.afterDOMReady(); }); $(window).on('load', function() { DOMDfd.done(function() { App.afterOuterResourcesLoaded(); }); // Vertical menu $('.mad-vr-nav > ul > li.menu-item-has-children > a').on('click', function (e) { e.preventDefault(); $(this).next('.sub-menu').slideToggle(); $(this).parent().siblings().children('.sub-menu').slideUp(); }); }); /* ---------------------------------------------------- */ /* Elevate zoom */ /* ---------------------------------------------------- */ if ($('[data-zoom-image]').length) { var button = $('.qv-preview'); $("#zoom-image").elevateZoom({ gallery: 'thumbnails', galleryActiveClass: 'active', zoomType: "inner", cursor: "crosshair", responsive: true, zoomWindowFadeIn: 500, zoomWindowFadeOut: 500, easing: true, lensFadeIn: 500, lensFadeOut: 500 }); } /* ---------------------------------------------------- */ /* Elevate zoom */ /* ---------------------------------------------------- */ /* ---------------------------------------------------- */ /* Quantity */ /* ---------------------------------------------------- */ if ($('.quantity').length) { var q = $('.quantity'); q.each(function () { var $this = $(this), button = $this.children('button'), input = $this.children('input[type="text"]'), val = +input.val(); button.on('click', function () { if ($(this).hasClass('qty-minus')) { if (val === 1) return false; input.val(--val); } else { input.val(++val); } }); }); } /* ---------------------------------------------------- */ /* Quantity */ /* ---------------------------------------------------- */ /* ---------------------------------------------------- */ /* Team Section */ /* ---------------------------------------------------- */ if ($('.mad-team-section').length) { $('.mad-col').on('mouseenter', function () { $(this).siblings().removeClass('active'); $(this).addClass('active'); }) }; /* ---------------------------------------------------- */ /* Team Section */ /* ---------------------------------------------------- */ $(window).on('scroll resize load', function () { if ($(window).width() > 1280) { if ($(this).scrollTop() > 450) { $('.mad-element').addClass("mad-fixed"); $('.mad-property-section').css({ 'padding-top': ($(".mad-element").height() + 'px') }); } else { $('.mad-element').removeClass("mad-fixed"); $('.mad-property-section').css({ 'padding-top': (0 + 'px') }); } if ($('.mad-element.mad-fixed')) { $('.mad-element.mad-fixed').css({ 'top': ($(".mad-header-section--sticked").height() + 'px') }); } } else { return false; } }); /* ---------------------------------------------------- */ /* Animate a regular anchor navigation */ /* ---------------------------------------------------- */ if ($('a.animated').length) { $('body').localScroll({ hash: true, filter: '.animated', onBefore: function () { this.offset = -300; } }); // highlight menu element on scroll calculateScroll(); $(window).scroll(function (event) { calculateScroll(); }); /* Automatically Highlights Navigation Item */ var rangeTop = 400; //rangeTop is used for changing the class a little sooner that reaching the top of the page var rangeBottom = 400; //rangeBottom is similar but used for when scrolling bottom to top function calculateScroll() { var winTop = $(window).scrollTop(); var contentTop = []; var contentBottom = []; $('#menu').find('a.animated').each(function () { contentTop.push($($(this).attr('href')).offset().top); contentBottom.push($($(this).attr('href')).offset().top + $($(this).attr('href')).height()); }) $.each(contentTop, function (i) { if (winTop > contentTop[i] - rangeTop && winTop < contentBottom[i] - rangeBottom) { $('#menu > span').removeClass('tab-active').eq(i).addClass('tab-active'); } }) } } /* ---------------------------------------------------- */ /* Multiscroll */ /* ---------------------------------------------------- */ if ($('#myContainer').length) { if ($(window).width() <= 1024) { $('.ms-right .ms-section').unwrap().appendTo('.ms-left'); var ul = $('.ms-left').find('.ms-section').sort(function(a, b) { return $(a).data('id') - $(b).data('id') }); $('.ms-left').empty().append(ul); } else { $('#myContainer').multiscroll({ navigation: true, loopBottom: true, css3: true }); } } /* ---------------------------------------------------- */ /* Owl Sync */ /* ---------------------------------------------------- */ $(window).on('load', function () { if ($("#sync1").length) { var sync1 = $("#sync1"); var sync2 = $("#sync2"); var syncedSecondary = true; sync1.owlCarousel({ items: 1, slideSpeed: 2000, smartSpeed: 1000, nav: true, autoplay: false, dots: false, rtl: App.RTL, loop: true, navText: ['', ''], responsiveRefreshRate: 200, }).on('changed.owl.carousel', syncPosition); if (sync2.hasClass('full-width-carousel')) { sync2.on('initialized.owl.carousel', function () { sync2.find(".owl-item").eq(0).addClass("current"); }).owlCarousel({ items: 9, dots: false, nav: true, smartSpeed: 500, navText: false, rtl: App.RTL, slideSpeed: 100, margin: 8, slideBy: 1, //alternatively you can slide by 1, this way the active slide will stick to the first item in the second carousel responsiveRefreshRate: 100, responsive: { 0: { items: 3 }, 380: { items: 3 }, 780: { items: 3 }, 992: { items: 5 }, 1200: { items: 6 }, 1400: { items: 9 } } }).on('changed.owl.carousel', syncPosition2); } else { sync2.on('initialized.owl.carousel', function () { sync2.find(".owl-item").eq(0).addClass("current"); }).owlCarousel({ items: 6, dots: false, nav: true, smartSpeed: 500, navText: false, rtl: App.RTL, slideSpeed: 100, margin: 8, slideBy: 1, //alternatively you can slide by 1, this way the active slide will stick to the first item in the second carousel responsiveRefreshRate: 100, responsive: { 0: { items: 3 }, 380: { items: 3 }, 780: { items: 3 }, 992: { items: 3 }, 1200: { items: 5 }, 1400: { items: 6 } } }).on('changed.owl.carousel', syncPosition2); } function syncPosition(el) { //if you set loop to false, you have to restore this next line //var current = el.item.index; //if you disable loop you have to comment this block var count = el.item.count - 1; var current = Math.round(el.item.index - (el.item.count / 2) - .5); if (current < 0) { current = count; } if (current > count) { current = 0; } //end block sync2 .find(".owl-item") .removeClass("current") .eq(current) .addClass("current"); var onscreen = sync2.find('.owl-item.active').length - 1; var start = sync2.find('.owl-item.active').first().index(); var end = sync2.find('.owl-item.active').last().index(); if (current > end) { sync2.data('owl.carousel').to(current, 100, true); } if (current < start) { sync2.data('owl.carousel').to(current - onscreen, 100, true); } } function syncPosition2(el) { if (syncedSecondary) { var number = el.item.index; sync1.data('owl.carousel').to(number, 100, true); } } sync2.on("click", ".owl-item", function (e) { e.preventDefault(); var number = $(this).index(); sync1.data('owl.carousel').to(number, 300, true); }); } if ($("#sync3").length) { var sync3 = $("#sync3"); var sync4 = $("#sync4"); var slidesPerPage2 = 13; //globaly define number of elements per page var syncedSecondary2 = true; sync3.owlCarousel({ items: 1, slideSpeed: 2000, smartSpeed: 1000, nav: true, autoplay: false, dots: false, rtl: App.RTL, loop: true, navText: ['', ''], responsiveRefreshRate: 200, }).on('changed.owl.carousel', syncPosition3); sync4.on('initialized.owl.carousel', function () { sync4.find(".owl-item").eq(0).addClass("current"); }) .owlCarousel({ items: slidesPerPage2, dots: false, nav: true, smartSpeed: 500, navText: false, rtl: App.RTL, slideSpeed: 100, margin: 8, slideBy: slidesPerPage2, //alternatively you can slide by 1, this way the active slide will stick to the first item in the second carousel responsiveRefreshRate: 100, responsive: { 0: { items: 2 }, 380: { items: 3 }, 780: { items: 5 }, 992: { items: 6 }, 1200: { items: 8 }, 1400: { items: 13 } } }).on('changed.owl.carousel', syncPosition4); function syncPosition3(el) { //if you set loop to false, you have to restore this next line //var current = el.item.index; //if you disable loop you have to comment this block var count = el.item.count - 1; var current = Math.round(el.item.index - (el.item.count / 2) - .5); if (current < 0) { current = count; } if (current > count) { current = 0; } //end block sync4 .find(".owl-item") .removeClass("current") .eq(current) .addClass("current"); var onscreen = sync4.find('.owl-item.active').length - 1; var start = sync4.find('.owl-item.active').first().index(); var end = sync4.find('.owl-item.active').last().index(); if (current > end) { sync4.data('owl.carousel').to(current, 100, true); } if (current < start) { sync4.data('owl.carousel').to(current - onscreen, 100, true); } } function syncPosition4(el) { if (syncedSecondary2) { var number = el.item.index; sync4.data('owl.carousel').to(number, 100, true); } } sync4.on("click", ".owl-item", function (e) { e.preventDefault(); var number = $(this).index(); sync3.data('owl.carousel').to(number, 300, true); }); } }); // Click btns if ($('.mad-calendar').length) { $('.mad-calendar-item').on('click', function () { $('.mad-calendar-item').removeClass('active') $(this).addClass('active'); }); } if ($('.toggle-btn').length) { $('.toggle-btn').on('click', function (e) { e.preventDefault(); $(this).toggleClass('toggled'); $(this).siblings('.toggle-section').slideToggle(); setTimeout(function () { $('.mad-tabs').data('tabs').updateContainer(); }, 300); $(this).siblings('.mad-table-wrap').find('.toggle-section').slideToggle(); }) } return App; })(window.jQuery); /* Plugin Name: SVG for jQuery. */ $(function () { jQuery('img.svg').each(function () { var $img = jQuery(this); var imgID = $img.attr('id'); var imgClass = $img.attr('class'); var imgURL = $img.attr('src'); jQuery.get(imgURL, function (data) { // Get the SVG tag, ignore the rest var $svg = jQuery(data).find('svg'); // Add replaced image's ID to the new SVG if (typeof imgID !== 'undefined') { $svg = $svg.attr('id', imgID); } // Add replaced image's classes to the new SVG if (typeof imgClass !== 'undefined') { $svg = $svg.attr('class', imgClass + ' replaced-svg'); } // Remove any invalid XML tags as per http://validator.w3.org $svg = $svg.removeAttr('xmlns:a'); // Check if the viewport is set, else we gonna set it if we can. if (!$svg.attr('viewBox') && $svg.attr('height') && $svg.attr('width')) { $svg.attr('viewBox', '0 0 ' + $svg.attr('height') + ' ' + $svg.attr('width')) } // Replace image with new SVG $img.replaceWith($svg); }, 'xml'); }); }); /* Video Play */ $(document).on('click', '.js-videoPoster', function (e) { //отменяем стандартное действие button e.preventDefault(); var poster = $(this); // ищем родителя ближайшего по классу var wrapper = poster.closest('.js-videoWrapper'); videoPlay(wrapper); }); //вопроизводим видео, при этом скрывая постер function videoPlay(wrapper) { var iframe = wrapper.find('.js-videoIframe'); // Берем ссылку видео из data var src = iframe.data('src'); // скрываем постер wrapper.addClass('videoWrapperActive'); // подставляем в src параметр из data iframe.attr('src', src); } /* ------------------------------------------------ Sticky sidebar ------------------------------------------------ */ $(window).on("load resize", function () { if ($(window).width() > 992 && $('.sticky-bar').length) { $('.content, .sidebar , #sidebar').theiaStickySidebar({ // Settings additionalMarginTop: 130 }); } });