/*
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]);