/* Name: Theme Base Written by: Okler Themes - (http://www.okler.net) Theme Version: 3.7.0 */ // Theme window.theme = {}; // Animate (function(theme, $) { theme = theme || {}; var instanceName = '__animate'; var PluginAnimate = function($el, opts) { return this.initialize($el, opts); }; PluginAnimate.defaults = { accX: 0, accY: -150, delay: 1 }; PluginAnimate.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginAnimate.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $el = this.options.wrapper, delay = 0; $el.addClass('appear-animation'); if (!$('html').hasClass('no-csstransitions') && $(window).width() > 767) { $el.appear(function() { delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay); if (delay > 1) { $el.css('animation-delay', delay + 'ms'); } $el.addClass($el.attr('data-appear-animation')); setTimeout(function() { $el.addClass('appear-animation-visible'); }, delay); }, { accX: self.options.accX, accY: self.options.accY }); } else { $el.addClass('appear-animation-visible'); } return this; } }; // expose to scope $.extend(theme, { PluginAnimate: PluginAnimate }); // jquery plugin $.fn.themePluginAnimate = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginAnimate($this, opts); } }); }; }).apply(this, [window.theme, jQuery]); // Carousel (function(theme, $) { theme = theme || {}; var instanceName = '__carousel'; var PluginCarousel = function($el, opts) { return this.initialize($el, opts); }; PluginCarousel.defaults = { loop: true, responsive: { 0: { items: 1 }, 479: { items: 1 }, 768: { items: 2 }, 979: { items: 3 }, 1199: { items: 4 } } }; PluginCarousel.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginCarousel.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.owlCarousel))) { return this; } var self = this, $el = this.options.wrapper, activeItemHeight = 0; // Force RTL according to HTML dir attribute if ($('html').attr('dir') == 'rtl') { this.options = $.extend(true, {}, this.options, { rtl: true }); } if (this.options.items == 1) { this.options.responsive = {} } if (this.options.items > 4) { this.options = $.extend(true, {}, this.options, { responsive: { 1199: { items: this.options.items } } }); } // Auto Height $(window).afterResize(function() { activeItemHeight = $el.find('.owl-item.active').height(); $el.find('.owl-stage-outer').height(activeItemHeight); }); this.options.wrapper.owlCarousel(this.options).addClass("owl-carousel-init"); return this; } }; // expose to scope $.extend(theme, { PluginCarousel: PluginCarousel }); // jquery plugin $.fn.themePluginCarousel = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginCarousel($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Chart Circular (function(theme, $) { theme = theme || {}; var instanceName = '__chartCircular'; var PluginChartCircular = function($el, opts) { return this.initialize($el, opts); }; PluginChartCircular.defaults = { accX: 0, accY: -150, delay: 1, barColor: '#0088CC', trackColor: '#f2f2f2', scaleColor: false, scaleLength: 5, lineCap: 'round', lineWidth: 13, size: 175, rotate: 0, animate: ({ duration: 2500, enabled: true }) }; PluginChartCircular.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginChartCircular.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.appear)) || !($.isFunction($.fn.easyPieChart))) { return this; } var self = this, $el = this.options.wrapper, value = ($el.attr('data-percent') ? $el.attr('data-percent') : 0), percentEl = $el.find('.percent'); $.extend(true, self.options, { onStep: function(from, to, currentValue) { percentEl.html(parseInt(currentValue)); } }); $el.attr('data-percent', 0); $el.appear(function() { $el.easyPieChart(self.options); setTimeout(function() { $el.data('easyPieChart').update(value); $el.attr('data-percent', value); }, self.options.delay); }, { accX: self.options.accX, accY: self.options.accY }); return this; } }; // expose to scope $.extend(theme, { PluginChartCircular: PluginChartCircular }); // jquery plugin $.fn.themePluginChartCircular = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginChartCircular($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Counter (function(theme, $) { theme = theme || {}; var instanceName = '__counter'; var PluginCounter = function($el, opts) { return this.initialize($el, opts); }; PluginCounter.defaults = { accX: 0, accY: 0, speed: 3000, refreshInterval: 100, decimals: 0, onUpdate: null, onComplete: null }; PluginCounter.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginCounter.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.countTo))) { return this; } var self = this, $el = this.options.wrapper; $.extend(self.options, { onComplete: function() { if ($el.data('append')) { $el.html($el.html() + $el.data('append')); } if ($el.data('prepend')) { $el.html($el.data('prepend') + $el.html()); } } }); $el.appear(function() { $el.countTo(self.options); }, { accX: self.options.accX, accY: self.options.accY }); return this; } }; // expose to scope $.extend(theme, { PluginCounter: PluginCounter }); // jquery plugin $.fn.themePluginCounter = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginCounter($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Flickr (function(theme, $) { theme = theme || {}; var instanceName = '__flickr'; var PluginFlickr = function($el, opts) { return this.initialize($el, opts); }; PluginFlickr.defaults = { flickrbase: 'http://api.flickr.com/services/feeds/', feedapi: 'photos_public.gne', limit: 6, qstrings: { lang: 'en-us', format: 'json', jsoncallback: '?' }, cleanDescription: true, useTemplate: true, itemTemplate: '
  • ', itemCallback: function() {} }; PluginFlickr.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginFlickr.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.jflickrfeed)) || !($.isFunction($.fn.magnificPopup))) { return this; } var self = this; self.options.wrapper.jflickrfeed(this.options, function(data) { self.options.wrapper.magnificPopup({ delegate: 'a', type: 'image', gallery: { enabled: true, navigateByImgClick: true, preload: [0, 1] }, zoom: { enabled: true, duration: 300, opener: function(element) { return element.find('img'); } } }); }); return this; } }; // expose to scope $.extend(theme, { PluginFlickr: PluginFlickr }); // jquery plugin $.fn.themePluginFlickr = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginFlickr($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Lightbox (function(theme, $) { theme = theme || {}; var instanceName = '__lightbox'; var PluginLightbox = function($el, opts) { return this.initialize($el, opts); }; PluginLightbox.defaults = { tClose: 'Close (Esc)', // Alt text on close button tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys gallery: { tPrev: 'Previous (Left arrow key)', // Alt text on left arrow tNext: 'Next (Right arrow key)', // Alt text on right arrow tCounter: '%curr% of %total%' // Markup for "1 of 7" counter }, image: { tError: 'The image could not be loaded.' // Error message when image could not be loaded }, ajax: { tError: 'The content could not be loaded.' // Error message when ajax request failed } }; PluginLightbox.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginLightbox.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.magnificPopup))) { return this; } this.options.wrapper.magnificPopup(this.options); return this; } }; // expose to scope $.extend(theme, { PluginLightbox: PluginLightbox }); // jquery plugin $.fn.themePluginLightbox = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginLightbox($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Masonry (function(theme, $) { theme = theme || {}; var instanceName = '__masonry'; var PluginMasonry = function($el, opts) { return this.initialize($el, opts); }; PluginMasonry.defaults = { itemSelector: 'li', layoutMode: 'fitRows' }; PluginMasonry.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginMasonry.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.isotope))) { return this; } this.options.wrapper.isotope(this.options); return this; } }; // expose to scope $.extend(theme, { PluginMasonry: PluginMasonry }); // jquery plugin $.fn.themePluginMasonry = function(opts) { return this.map(function() { var $this = $(this); $this.waitForImages(function() { if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginMasonry($this, opts); } }); }); } }).apply(this, [window.theme, jQuery]); // Parallax (function(theme, $) { theme = theme || {}; $.extend(theme, { PluginParallax: { defaults: { itemsSelector: '.parallax', horizontalScrolling: false }, initialize: function(opts) { this .setOptions(opts) .build(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts); return this; }, build: function() { if (!($.isFunction($.fn.stellar)) || typeof(Modernizr.touch) == 'undefined') { return this; } var self = this; $(window).load(function() { if (!Modernizr.touch) { $.stellar(self.options).addClass('parallax-ready'); } else { $(self.options.itemsSelector).addClass('parallax-disabled'); } }); return this; } } }); }).apply(this, [window.theme, jQuery]); // Progress Bar (function(theme, $) { theme = theme || {}; var instanceName = '__progressBar'; var PluginProgressBar = function($el, opts) { return this.initialize($el, opts); }; PluginProgressBar.defaults = { accX: 0, accY: -50, delay: 1 }; PluginProgressBar.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginProgressBar.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.appear))) { return this; } var self = this, $el = this.options.wrapper, delay = 1; $el.appear(function() { delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay); $el.addClass($el.attr('data-appear-animation')); setTimeout(function() { $el.animate({ width: $el.attr('data-appear-progress-animation') }, 1500, 'easeOutQuad', function() { $el.find('.progress-bar-tooltip').animate({ opacity: 1 }, 500, 'easeOutQuad'); }); }, delay); }, { accX: self.options.accX, accY: self.options.accY }); return this; } }; // expose to scope $.extend(theme, { PluginProgressBar: PluginProgressBar }); // jquery plugin $.fn.themePluginProgressBar = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginProgressBar($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Revolution Slider (function(theme, $) { theme = theme || {}; var instanceName = '__revolution'; var PluginRevolutionSlider = function($el, opts) { return this.initialize($el, opts); }; PluginRevolutionSlider.defaults = { dottedOverlay: 'none', delay: 9000, startwidth: 1170, startheight: 500, hideThumbs: 200, thumbWidth: 100, thumbHeight: 50, thumbAmount: 3, navigationType: 'none', navigationArrows: 'solo', navigationStyle: 'round', touchenabled: 'on', onHoverStop: 'on', swipe_velocity: 0.7, swipe_min_touches: 1, swipe_max_touches: 1, drag_block_vertical: false, keyboardNavigation: 'on', navigationHAlign: 'center', navigationVAlign: 'bottom', navigationHOffset: 0, navigationVOffset: 20, soloArrowLeftHalign: 'left', soloArrowLeftValign: 'center', soloArrowLeftHOffset: 20, soloArrowLeftVOffset: 0, soloArrowRightHalign: 'right', soloArrowRightValign: 'center', soloArrowRightHOffset: 20, soloArrowRightVOffset: 0, shadow: 0, fullWidth: 'on', fullScreen: 'off', spinner: 'spinner0', stopLoop: 'off', stopAfterLoops: -1, stopAtSlide: -1, shuffle: 'off', autoHeight: 'off', forceFullWidth: 'off', hideThumbsOnMobile: 'off', hideNavDelayOnMobile: 1500, hideBulletsOnMobile: 'off', hideArrowsOnMobile: 'off', hideThumbsUnderResolution: 0, hideSliderAtLimit: 0, hideCaptionAtLimit: 0, hideAllCaptionAtLilmit: 0, startWithSlide: 0 }; PluginRevolutionSlider.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginRevolutionSlider.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.revolution))) { return this; } this.options.wrapper.revolution(this.options); return this; } }; // expose to scope $.extend(theme, { PluginRevolutionSlider: PluginRevolutionSlider }); // jquery plugin $.fn.themePluginRevolutionSlider = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginRevolutionSlider($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Scroll to Top (function(theme, $) { theme = theme || {}; $.extend(theme, { PluginScrollToTop: { defaults: { wrapper: $('body'), offset: 150, buttonClass: 'scroll-to-top', iconClass: 'fa fa-chevron-up', delay: 500, visibleMobile: false, label: false }, initialize: function(opts) { initialized = true; this .setOptions(opts) .build() .events(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts); return this; }, build: function() { var self = this, $el; // Base HTML Markup $el = $('') .addClass(self.options.buttonClass) .attr({ 'href': '#', }) .append( $('') .addClass(self.options.iconClass) ); // Visible Mobile if (!self.options.visibleMobile) { $el.addClass('hidden-mobile'); } // Label if (self.options.label) { $el.append( $('').html(self.options.label) ); } this.options.wrapper.append($el); this.$el = $el; return this; }, events: function() { var self = this, _isScrolling = false; // Click Element Action self.$el.on('click', function(e) { e.preventDefault(); $('body, html').animate({ scrollTop: 0 }, self.options.delay); return false; }); // Show/Hide Button on Window Scroll event. $(window).scroll(function() { if (!_isScrolling) { _isScrolling = true; if ($(window).scrollTop() > self.options.offset) { self.$el.stop(true, true).addClass('visible'); _isScrolling = false; } else { self.$el.stop(true, true).removeClass('visible'); _isScrolling = false; } } }); return this; } } }); }).apply(this, [window.theme, jQuery]); // Sort (function(theme, $) { theme = theme || {}; var instanceName = '__sort'; var PluginSort = function($el, opts) { return this.initialize($el, opts); }; PluginSort.defaults = { useHash: true, itemSelector: 'li', layoutMode: 'masonry', filter: '*' }; PluginSort.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginSort.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.isotope))) { return this; } var self = this, $source = this.options.wrapper, $destination = $('.sort-destination[data-sort-id="' + $source.attr('data-sort-id') + '"]'); if ($destination.get(0)) { self.$source = $source; self.$destination = $destination; self.setParagraphHeight($destination); $(window).load(function() { $destination.isotope(self.options).isotope('layout'); self.$destination.isotope('on', 'layoutComplete', function(isoInstance, laidOutItems) { if (self.options.useHash || typeof(isoInstance.options.filter != 'undefined')) { if (window.location.hash != '' || isoInstance.options.filter.replace('.', '') != '*') { window.location.hash = isoInstance.options.filter.replace('.', ''); } } }); self.events(); }); } return this; }, events: function() { var self = this, filter = null; self.$source.find('a').click(function(e) { e.preventDefault(); filter = $(this).parent().attr('data-option-value'); self.setFilter(filter); return this; }); if (self.options.useHash) { self.hashEvents(); } return this; }, setFilter: function(filter) { var self = this; if (self.filter == filter) { return this; } self.$source.find('li.active').removeClass('active'); self.$source.find('li[data-option-value="' + filter + '"]').addClass('active'); self.$destination.isotope({ filter: filter }); self.filter = filter; return this; }, hashEvents: function() { var self = this, hash = null, hashFilter = null, initHashFilter = '.' + location.hash.replace('#', ''); if (initHashFilter != '.' && initHashFilter != '.*') { self.setFilter(initHashFilter); } $(window).bind('hashchange', function(e) { hashFilter = '.' + location.hash.replace('#', ''); hash = (hashFilter == '.' || hashFilter == '.*' ? '*' : hashFilter); self.setFilter(hash); }); return this; }, setParagraphHeight: function() { var self = this, minParagraphHeight = 0, paragraphs = $('span.thumb-info-caption p', self.$destination); paragraphs.each(function() { if ($(this).height() > minParagraphHeight) { minParagraphHeight = ($(this).height() + 10); } }); paragraphs.height(minParagraphHeight); return this; } }; // expose to scope $.extend(theme, { PluginSort: PluginSort }); // jquery plugin $.fn.themePluginSort = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginSort($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Toggle (function(theme, $) { theme = theme || {}; var instanceName = '__toggle'; var PluginToggle = function($el, opts) { return this.initialize($el, opts); }; PluginToggle.defaults = { duration: 350, isAccordion: false }; PluginToggle.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginToggle.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $wrapper = this.options.wrapper, $items = $wrapper.find('.toggle'), $el = null; $items.each(function() { $el = $(this); if ($el.hasClass('active')) { $el.find('> p').addClass('preview-active'); $el.find('> .toggle-content').slideDown(self.options.duration); } self.events($el); }); if (self.options.isAccordion) { self.options.duration = self.options.duration / 2; } return this; }, events: function($el) { var self = this, previewParCurrentHeight = 0, previewParAnimateHeight = 0, toggleContent = null; $el.find('> label').click(function(e) { var $this = $(this), parentSection = $this.parent(), parentWrapper = $this.parents('.toggle'), previewPar = null, closeElement = null; if (self.options.isAccordion && typeof(e.originalEvent) != 'undefined') { closeElement = parentWrapper.find('.toggle.active > label'); if (closeElement[0] == $this[0]) { return; } } parentSection.toggleClass('active'); // Preview Paragraph if (parentSection.find('> p').get(0)) { previewPar = parentSection.find('> p'); previewParCurrentHeight = previewPar.css('height'); previewPar.css('height', 'auto'); previewParAnimateHeight = previewPar.css('height'); previewPar.css('height', previewParCurrentHeight); } // Content toggleContent = parentSection.find('> .toggle-content'); if (parentSection.hasClass('active')) { $(previewPar).animate({ height: previewParAnimateHeight }, self.options.duration, function() { $(this).addClass('preview-active'); }); toggleContent.slideDown(self.options.duration, function() { if (closeElement) { closeElement.trigger('click'); } }); } else { $(previewPar).animate({ height: 0 }, self.options.duration, function() { $(this).removeClass('preview-active'); }); toggleContent.slideUp(self.options.duration); } }); } }; // expose to scope $.extend(theme, { PluginToggle: PluginToggle }); // jquery plugin $.fn.themePluginToggle = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginToggle($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Tweets (function(theme, $) { theme = theme || {}; var instanceName = '__tweets'; var PluginTweets = function($el, opts) { return this.initialize($el, opts); }; PluginTweets.defaults = { username: null, count: 2, URL: 'php/twitter-feed.php' }; PluginTweets.prototype = { initialize: function($el, opts) { if ($el.data(instanceName)) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginTweets.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { if (this.options.username == null || this.options.username == '') { return this; } var self = this, $wrapper = this.options.wrapper; $.ajax({ type: 'GET', data: { twitter_screen_name: self.options.username, tweets_to_display: self.options.count }, url: self.options.URL, }).done(function(html) { $wrapper.html(html); }); return this; } }; // expose to scope $.extend(theme, { PluginTweets: PluginTweets }); // jquery plugin $.fn.themePluginTweets = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginTweets($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Validation (function(theme, $) { theme = theme || {}; $.extend(theme, { PluginValidation: { defaults: { validator: { highlight: function(element) { $(element) .parent() .removeClass('has-success') .addClass('has-error'); }, success: function(element) { $(element) .parent() .removeClass('has-error') .addClass('has-success') .find('label.error') .remove(); }, errorPlacement: function(error, element) { if (element.attr('type') == 'radio' || element.attr('type') == 'checkbox') { error.appendTo(element.parent().parent()); } else { error.insertAfter(element); } } }, validateCaptchaURL: 'php/contact-form-verify-captcha.php', refreshCaptchaURL: 'php/contact-form-refresh-captcha.php' }, initialize: function(opts) { initialized = true; this .setOptions(opts) .build(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts); return this; }, build: function() { var self = this; if (!($.isFunction($.validator))) { return this; } self.addMethods(); self.setMessageGroups(); $.validator.setDefaults(self.options.validator); return this; }, addMethods: function() { var self = this; $.validator.addMethod('captcha', function(value, element, params) { var captchaValid = false; $.ajax({ url: self.options.validateCaptchaURL, type: 'POST', async: false, dataType: 'json', data: { captcha: $.trim(value) }, success: function(data) { if (data.response == 'success') { captchaValid = true; } } }); if (captchaValid) { return true; } }, ''); // Refresh Captcha $('#refreshCaptcha').on('click', function(e) { e.preventDefault(); $.get(self.options.refreshCaptchaURL, function(url) { $('#captcha-image').attr('src', url); }); }); }, setMessageGroups: function() { $('.checkbox-group[data-msg-required], .radio-group[data-msg-required]').each(function() { var message = $(this).data('msg-required'); $(this).find('input').attr('data-msg-required', message); }); } } }); // initialize theme.PluginValidation.initialize(); }).apply(this, [window.theme, jQuery]); // Video Background (function(theme, $) { theme = theme || {}; var instanceName = '__videobackground'; var PluginVideoBackground = function($el, opts) { return this.initialize($el, opts); }; PluginVideoBackground.defaults = { overlay: true, volume: 1, playbackRate: 1, muted: true, loop: true, autoplay: true, position: '50% 50%', posterType: 'detect' }; PluginVideoBackground.prototype = { initialize: function($el, opts) { this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginVideoBackground.defaults, opts, { path: this.$el.data('video-path'), wrapper: this.$el }); return this; }, build: function() { if (!($.isFunction($.fn.vide)) || (!this.options.path)) { return this; } if (this.options.overlay) { this.options.wrapper.prepend( $('
    ').addClass('video-overlay') ); } this.options.wrapper.vide(this.options.path, this.options); return this; } }; // expose to scope $.extend(theme, { PluginVideoBackground: PluginVideoBackground }); // jquery plugin $.fn.themePluginVideoBackground = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginVideoBackground($this, opts); } }); } }).apply(this, [window.theme, jQuery]); // Word Rotate (function(theme, $) { theme = theme || {}; var instanceName = '__wordRotate'; var PluginWordRotate = function($el, opts) { return this.initialize($el, opts); }; PluginWordRotate.defaults = { delay: 2000, animDelay: 300 }; PluginWordRotate.prototype = { initialize: function($el, opts) { if ( $el.data( instanceName ) ) { return this; } this.$el = $el; this .setData() .setOptions(opts) .build(); return this; }, setData: function() { this.$el.data(instanceName, this); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, PluginWordRotate.defaults, opts, { wrapper: this.$el }); return this; }, build: function() { var self = this, $el = this.options.wrapper, itemsWrapper = $el.find(".word-rotate-items"), items = itemsWrapper.find("> span"), firstItem = items.eq(0), firstItemClone = firstItem.clone(), currentItem = 1, currentTop = 0, itemWidth = 0; itemsWrapper .width(firstItem.width() + "px") .append(firstItemClone); $el .addClass("active"); setInterval(function() { currentTop = (currentItem * $el.height()); currentItem++; if(currentItem <= items.length) { itemWidth = items.eq(currentItem-1).width(); } else { itemWidth = items.eq(0).width(); } itemsWrapper.animate({ top: -(currentTop) + "px", width: itemWidth + "px" }, self.options.animDelay, "easeOutQuad", function() { if(currentItem > items.length) { itemsWrapper.css("top", 0); currentItem = 1; } }); }, self.options.delay); return this; } }; // expose to scope $.extend(theme, { PluginWordRotate: PluginWordRotate }); // jquery plugin $.fn.themePluginWordRotate = function(opts) { return this.map(function() { var $this = $(this); if ($this.data(instanceName)) { return $this.data(instanceName); } else { return new PluginWordRotate($this, opts); } }); } }).apply(this, [ window.theme, jQuery ]); // Account (function(theme, $) { theme = theme || {}; var initialized = false; $.extend(theme, { Account: { defaults: { wrapper: $('#headerAccount') }, initialize: function($wrapper, opts) { if (initialized) { return this; } initialized = true; this.$wrapper = ($wrapper || this.defaults.wrapper); this .setOptions(opts) .events(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts, this.$wrapper.data('plugin-options')); return this; }, events: function() { var self = this; self.$wrapper.find('input').on('focus', function() { self.$wrapper.addClass('open'); $(document).mouseup(function(e) { if (!self.$wrapper.is(e.target) && self.$wrapper.has(e.target).length === 0) { self.$wrapper.removeClass('open'); } }); }); $('#headerSignUp').on('click', function(e) { e.preventDefault(); self.$wrapper.addClass('signup').removeClass('signin').removeClass('recover'); self.$wrapper.find('.signup-form input:first').focus(); }); $('#headerSignIn').on('click', function(e) { e.preventDefault(); self.$wrapper.addClass('signin').removeClass('signup').removeClass('recover'); self.$wrapper.find('.signin-form input:first').focus(); }); $('#headerRecover').on('click', function(e) { e.preventDefault(); self.$wrapper.addClass('recover').removeClass('signup').removeClass('signin'); self.$wrapper.find('.recover-form input:first').focus(); }); $('#headerRecoverCancel').on('click', function(e) { e.preventDefault(); self.$wrapper.addClass('signin').removeClass('signup').removeClass('recover'); self.$wrapper.find('.signin-form input:first').focus(); }); } } }); }).apply(this, [window.theme, jQuery]); // Nav (function(theme, $) { theme = theme || {}; var initialized = false; $.extend(theme, { Nav: { defaults: { wrapper: $('#mainMenu'), mobileMenuScroll: true, fixParentItems: true, scrollDelay: 600, scrollAnimation: 'easeOutQuad' }, initialize: function($wrapper, opts) { if (initialized) { return this; } initialized = true; this.$wrapper = ($wrapper || this.defaults.wrapper); this .setOptions(opts) .build() .events(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts, this.$wrapper.data('plugin-options')); return this; }, build: function() { // Responsive Menu Events this.responsiveNavFixes(); // Mega Menu this.megaMenu(); // Mobile Menu Scroll to Current Item this.mobileMenuScroll(); // Fix/Remove Dropdown Class if it doesn't Have Submenu this.fixParentItems(); return this; }, events: function() { var self = this; // Mobile Redirect - (Ignores the Dropdown from Bootstrap) $('.mobile-redirect').on('click', function() { if ($(window).width() < 991) { self.location = $(this).attr('href'); } }); // Anchors Position $('[data-hash]').on('click', function(e) { e.preventDefault(); $('body').addClass('scrolling'); var target = $(this).attr('href') delay = 0; if($(document).scrollTop() == 0) { $(document).scrollTop($('#header').height()); delay = 200; } setTimeout(function() { if ($(window).width() < 991 && $('.nav-main-collapse').hasClass('in')) { $('.nav-main-collapse').collapse('hide'); self.scrollToTarget(target); return this; } self.scrollToTarget(target); }, 200); return this; }); return this; }, scrollToTarget: function(target) { var self = this, header = $('#header'), headerHeight = header.height(), topGap = headerHeight; $('html, body').animate({ scrollTop: $(target).offset().top - topGap }, self.options.scrollDelay, self.options.scrollAnimation, function() { $('body').removeClass('scrolling'); }); return this; }, responsiveNavFixes: function() { var self = this, addActiveClass = false; self.$wrapper.find('.dropdown-toggle[href]:not([href=#])').each(function() { $(this) .addClass('disabled') .parent() .prepend( $('') .addClass('dropdown-toggle extra') .attr('href', '#') .append( $('') .addClass('fa fa-angle-down') ) ); }); self.$wrapper.find('li.dropdown > a:not(.disabled), li.dropdown-submenu > a:not(.disabled)').on('click', function(e) { e.preventDefault(); if ($(window).width() > 991) { return this; } addActiveClass = $(this).parent().hasClass('resp-active'); self.$wrapper.find('.resp-active').removeClass('resp-active'); if (!addActiveClass) { $(this).parents('li').addClass('resp-active'); } return this; }); }, megaMenu: function() { $(document).on('click', '.mega-menu .dropdown-menu', function(e) { e.stopPropagation() }); }, mobileMenuScroll: function() { var self = this; this.$wrapper.find('> li > a:not(.disabled)').on('click', function() { if ($(window).width() < 991 && self.options.mobileMenuScroll && !$('body').hasClass('sticky-menu-active') && !$('#header').hasClass('fixed')) { $('html, body').animate({ scrollTop: $(this).offset().top }, 600, 'easeOutQuad'); } }); }, fixParentItems: function() { if (!this.options.fixParentItems) { return this; } this.$wrapper.find('> li.dropdown').each(function() { if (!$(this).find('ul').get(0)) { $(this).removeClass('dropdown'); $(this).find('.dropdown-toggle').removeClass('dropdown-toggle'); } }); } } }); }).apply(this, [window.theme, jQuery]); // Newsletter (function(theme, $) { theme = theme || {}; var initialized = false; $.extend(theme, { Newsletter: { defaults: { wrapper: $('#newsletterForm') }, initialize: function($wrapper, opts) { if (initialized) { return this; } initialized = true; this.$wrapper = ($wrapper || this.defaults.wrapper); this .setOptions(opts) .build(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts, this.$wrapper.data('plugin-options')); return this; }, build: function() { if (!($.isFunction($.fn.validate))) { return this; } var self = this, $email = self.$wrapper.find('#newsletterEmail'), $success = $('#newsletterSuccess'), $error = $('#newsletterError'); self.$wrapper.validate({ submitHandler: function(form) { $.ajax({ type: 'POST', url: self.$wrapper.attr('action'), data: { 'email': $email.val() }, dataType: 'json', success: function(data) { if (data.response == 'success') { $success.removeClass('hidden'); $error.addClass('hidden'); $email .val('') .blur() .closest('.control-group') .removeClass('success') .removeClass('error'); } else { $error.html(data.message); $error.removeClass('hidden'); $success.addClass('hidden'); $email .blur() .closest('.control-group') .removeClass('success') .addClass('error'); } } }); }, rules: { newsletterEmail: { required: true, email: true } }, errorPlacement: function(error, element) { } }); return this; } } }); }).apply(this, [window.theme, jQuery]); // Search (function(theme, $) { theme = theme || {}; var initialized = false; $.extend(theme, { Search: { defaults: { wrapper: $('#searchForm') }, initialize: function($wrapper, opts) { if (initialized) { return this; } initialized = true; this.$wrapper = ($wrapper || this.defaults.wrapper); this .setOptions(opts) .build(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts, this.$wrapper.data('plugin-options')); return this; }, build: function() { if (!($.isFunction($.fn.validate))) { return this; } this.$wrapper.validate({ errorPlacement: function(error, element) {} }); return this; } } }); }).apply(this, [window.theme, jQuery]); // Sticky Menu (function(theme, $) { theme = theme || {}; var initialized = false; $.extend(theme, { StickyMenu: { defaults: { wrapper: $('#header'), stickyEnabled: true, stickyEnableOnBoxed: true, stickyEnableOnMobile: true, stickyWithGap: true, stickyChangeLogoSize: true, stickyBodyPadding: true, menuAfterHeader: false, alwaysStickyEnabled: false, logoPaddingTop: 28, logoSmallWidth: 82, logoSmallHeight: 40 }, initialize: function($wrapper, opts) { if (initialized) { return this; } initialized = true; this.$wrapper = ($wrapper || this.defaults.wrapper); this .setOptions(opts) .build() .events(); return this; }, setOptions: function(opts) { this.options = $.extend(true, {}, this.defaults, opts, this.$wrapper.data('plugin-options')); return this; }, build: function() { if (!this.options.stickyEnableOnBoxed && $('body').hasClass('boxed') || !this.options.stickyEnabled) { return this; } var self = this, $body = $('body'), $header = self.$wrapper, $headerContainer = $header.parent(), $headerNavItems = $header.find('ul.nav-main > li > a'), $logoWrapper = $header.find('.logo'), $logo = $logoWrapper.find('img'), logoWidth = $logo.attr('width'), logoHeight = $logo.attr('height'), logoPaddingTop = parseInt($logo.attr('data-sticky-padding') ? $logo.attr('data-sticky-padding') : self.options.logoPaddingTop), logoSmallWidth = parseInt($logo.attr('data-sticky-width') ? $logo.attr('data-sticky-width') : self.options.logoSmallWidth), logoSmallHeight = parseInt($logo.attr('data-sticky-height') ? $logo.attr('data-sticky-height') : self.options.logoSmallHeight), headerHeight = $header.height(), stickyGap = 0; if (this.options.menuAfterHeader) { $headerContainer.css('min-height', $header.height()); } $(window).afterResize(function() { $headerContainer.css('min-height', $header.height()); }); self.checkStickyMenu = function() { if ((!self.options.stickyEnableOnBoxed && $body.hasClass('boxed')) || ($(window).width() < 991 && !self.options.stickyEnableOnMobile)) { self.stickyMenuDeactivate(); $header.removeClass('fixed') return false; } if (self.options.stickyWithGap) { stickyGap = ((headerHeight - 15) - logoSmallHeight); } else { stickyGap = 0; } // Menu After Header if (!this.options.menuAfterHeader) { if ($(window).scrollTop() > stickyGap) { self.stickyMenuActivate(); } else { self.stickyMenuDeactivate(); } } else { if ($(window).scrollTop() > $headerContainer.offset().top) { $header.addClass('fixed'); } else { $header.removeClass('fixed'); } } } self.stickyMenuActivate = function() { if ($body.hasClass('sticky-menu-active')) { return false; } $logo.stop(true, true); $body.addClass('sticky-menu-active').removeClass('sticky-menu-deactive'); if (self.options.stickyBodyPadding) { $body.css('padding-top', headerHeight); } // Flat Menu Items if ($header.hasClass('flat-menu')) { $headerNavItems.addClass('sticky-menu-active'); } if (self.options.stickyChangeLogoSize) { $logoWrapper.addClass('logo-sticky-active'); $logo.animate({ width: logoSmallWidth, height: logoSmallHeight, top: logoPaddingTop + 'px' }, 200, function() { $.event.trigger({ type: "stickyMenu.active" }); }); } } self.stickyMenuDeactivate = function() { if ($body.hasClass('sticky-menu-active')) { $body.removeClass('sticky-menu-active').addClass('sticky-menu-deactive'); if (self.options.stickyBodyPadding) { $body.css('padding-top', 0); } // Flat Menu Items if ($header.hasClass('flat-menu')) { $headerNavItems.removeClass('sticky-menu-active'); } if (self.options.stickyChangeLogoSize) { $logoWrapper.removeClass('logo-sticky-active'); $logo.animate({ width: logoWidth, height: logoHeight, top: '0px' }, 200, function() { $.event.trigger({ type: "stickyMenu.deactive" }); }); } } } if (!self.options.alwaysStickyEnabled) { $body.addClass('sticky-menu-deactive'); self.checkStickyMenu(); } else { $body.addClass('sticky-menu-active always-sticky').removeClass('sticky-menu-deactive'); if (self.options.stickyBodyPadding) { $body.css('padding-top', headerHeight); } } return this; }, events: function() { var self = this; if (!this.options.stickyEnableOnBoxed && $('body').hasClass('boxed') || !this.options.stickyEnabled) { return this; } if (!self.options.alwaysStickyEnabled) { $(window).on('scroll resize', function() { self.checkStickyMenu(); }); } return this; } } }); }).apply(this, [window.theme, jQuery]);