window.addEventListener=window.addEventListener||function (e, f){ window.attachEvent('on' + e, f); };
if(!Date.now){
Date.now=function now(){
return new Date().getTime();
};}
if(! Object.create){
Object.create=function(proto, props){
if(typeof props!=="undefined"){
throw "The multiple-argument version of Object.create is not provided by this browser and cannot be shimmed.";
}
function ctor(){ }
ctor.prototype=proto;
return new ctor();
};}
if(! Array.prototype.filter){
Array.prototype.filter=function(fun){
'use strict';
if(this===void 0||this===null){
throw new TypeError();
}
var t=Object(this);
var len=t.length >>> 0;
if(typeof fun!=='function'){
throw new TypeError();
}
var res=[];
var thisArg=arguments.length >=2 ? arguments[1]:void 0;
for (var i=0; i < len; i++){
if(i in t){
var val=t[i];
if(fun.call(thisArg, val, i, t)){
res.push(val);
}}
}
return res;
};}
if(!Array.prototype.map){
Array.prototype.map=function(callback, thisArg){
var T, A, k;
if(this===null){
throw new TypeError(' this is null or not defined');
}
var O=Object(this);
var len=O.length >>> 0;
if(typeof callback!=='function'){
throw new TypeError(callback + ' is not a function');
}
if(arguments.length > 1){
T=thisArg;
}
A=new Array(len);
k=0;
while (k < len){
var kValue, mappedValue;
if(k in O){
kValue=O[k];
mappedValue=callback.call(T, kValue, k, O);
A[k]=mappedValue;
}
k++;
}
return A;
};}
if(!Array.from){
Array.from=(function (){
var toStr=Object.prototype.toString;
var isCallable=function (fn){
return typeof fn==='function'||toStr.call(fn)==='[object Function]';
};
var toInteger=function (value){
var number=Number(value);
if(isNaN(number)){ return 0; }
if(number===0||!isFinite(number)){ return number; }
return (number > 0 ? 1:-1) * Math.floor(Math.abs(number));
};
var maxSafeInteger=Math.pow(2, 53) - 1;
var toLength=function (value){
var len=toInteger(value);
return Math.min(Math.max(len, 0), maxSafeInteger);
};
return function from(arrayLike){
var C=this;
var items=Object(arrayLike);
if(arrayLike==null){
throw new TypeError('Array.from requires an array-like object - not null or undefined');
}
var mapFn=arguments.length > 1 ? arguments[1]:void undefined;
var T;
if(typeof mapFn!=='undefined'){
if(!isCallable(mapFn)){
throw new TypeError('Array.from: when provided, the second argument must be a function');
}
if(arguments.length > 2){
T=arguments[2];
}}
var len=toLength(items.length);
var A=isCallable(C) ? Object(new C(len)):new Array(len);
var k=0;
var kValue;
while (k < len){
kValue=items[k];
if(mapFn){
A[k]=typeof T==='undefined' ? mapFn(kValue, k):mapFn.call(T, kValue, k);
}else{
A[k]=kValue;
}
k +=1;
}
A.length=len;
return A;
};}());
}
(function($){
var pluginPrefix='original',
_props=['Width', 'Height'];
_props.map(function(_prop){
var _lprop=_prop.toLowerCase();
$.fn[ pluginPrefix + _prop ]=('natural' + _prop in new Image()) ?
function (){
return this[0][ 'natural' + _prop ];
} :
function (){
var _size=_getAttr(this, _lprop);
if(_size)
return _size;
var _node=this[0],
_img;
if(_node.tagName.toLowerCase()==='img'){
_img=new Image();
_img.src=_node.src;
_size=_img[ _lprop ];
}
return _size;
};});
function _getAttr(_el, prop){
var _img_size=$(_el).attr(prop);
return(typeof _img_size===undefined) ? false:_img_size;
}})(jQuery);
(function($, window){
var pluginName='imgSmartLoad',
defaults={
load_all_images_on_first_scroll:false,
attribute:[ 'data-src', 'data-srcset', 'data-sizes' ],
excludeImg:[],
threshold:200,
fadeIn_options:{ duration:400 },
delaySmartLoadEvent:0,
},
skipImgClass='tc-smart-loaded';
function Plugin(element, options){
this.element=element;
this.options=$.extend({}, defaults, options);
if(_.isArray(this.options.excludeImg) ){
this.options.excludeImg.push('.'+skipImgClass);
}else{
this.options.excludeImg=[ '.'+skipImgClass ];
}
this.options.excludeImg=_.uniq(this.options.excludeImg);
this.imgSelectors='img[' + this.options.attribute[0] + ']:not('+ this.options.excludeImg.join() +')';
this._defaults=defaults;
this._name=pluginName;
this.init();
var self=this;
$(this.element).on('trigger-smartload', function(){
self._maybe_trigger_load('trigger-smartload');
});
}
Plugin.prototype._getImgs=function(){
return $(this.imgSelectors, this.element);
};
Plugin.prototype.init=function(){
var self=this;
this.increment=1;
this.timer=0;
$('body').on('load_img', self.imgSelectors , function(){
if(true===$(this).data('czr-smart-loaded') )
return;
self._load_img(this);
});
$(window).on('scroll', function(_evt){ self._better_scroll_event_handler(_evt); });
$(window).on('resize', _.debounce(function(_evt){ self._maybe_trigger_load(_evt); }, 100) );
this._maybe_trigger_load('dom-ready');
$(this.element).data('smartLoadDone', true);
};
Plugin.prototype._better_scroll_event_handler=function(_evt){
var self=this;
if(! this.doingAnimation){
this.doingAnimation=true;
window.requestAnimationFrame(function(){
self._maybe_trigger_load(_evt);
self.doingAnimation=false;
});
}};
Plugin.prototype._maybe_trigger_load=function(_evt){
var self=this,
$_imgs=self._getImgs(),
_visible_list;
if(!_.isObject($_imgs)||_.isEmpty($_imgs) )
return;
_visible_list=$_imgs.filter(function(ind, _img){ return self._is_visible(_img ,  _evt); });
_visible_list.map(function(ind, _img){
if(true!==$(_img).data('czr-smart-loaded') ){
$(_img).trigger('load_img');
}});
};
Plugin.prototype._is_visible=function(_img, _evt){
var $_img=$(_img),
wt=$(window).scrollTop(),
wb=wt + $(window).height(),
it=$_img.offset().top,
ib=it + $_img.height(),
th=this.options.threshold;
if(_evt&&'scroll'==_evt.type&&this.options.load_all_images_on_first_scroll)
return true;
return ib >=wt - th&&it <=wb + th;
};
Plugin.prototype._load_img=function(_img){
var $_img=$(_img),
_src=$_img.attr(this.options.attribute[0]),
_src_set=$_img.attr(this.options.attribute[1]),
_sizes=$_img.attr(this.options.attribute[2]),
self=this;
if($_img.parent().hasClass('smart-loading'))
return;
$_img.parent().addClass('smart-loading');
$_img.off('load_img')
.removeAttr(this.options.attribute.join(' '))
.attr('sizes' , _sizes)
.attr('srcset' , _src_set)
.attr('src', _src)
.on('load', function (){
if(!$_img.hasClass(skipImgClass)){
$_img.fadeIn(self.options.fadeIn_options).addClass(skipImgClass);
}
if(( 'undefined'!==typeof $_img.attr('data-tcjp-recalc-dims'))&&(false!==$_img.attr('data-tcjp-recalc-dims')) ){
var _width=$_img.originalWidth(),
_height=$_img.originalHeight();
if(2!=_.size(_.filter([ _width, _height ], function(num){ return _.isNumber(parseInt(num, 10))&&num > 1; }) ))
return;
$_img.removeAttr('data-tcjp-recalc-dims scale');
$_img.attr('width', _width);
$_img.attr('height', _height);
}
$_img.trigger('smartload');
$_img.data('czr-smart-loaded', true);
});
if($_img[0].complete){
$_img.trigger('load');
}
$_img.parent().removeClass('smart-loading');
};
$.fn[pluginName]=function(options){
return this.each(function (){
if(!$.data(this, 'plugin_' + pluginName)){
$.data(this, 'plugin_' + pluginName,
new Plugin(this, options));
}});
};})(jQuery, window);
(function($){
var pluginName='extLinks',
defaults={
addIcon:true,
iconClassName:'tc-external',
newTab: true,
skipSelectors:{
classes:[],
ids:[]
},
skipChildTags:['IMG']
};
function Plugin(element, options){
this.$_el=$(element);
this.options=$.extend({}, defaults, options) ;
this._href=('string'==typeof(this.$_el.attr('href') )) ? this.$_el.attr('href').trim():'';
this.init();
}
Plugin.prototype.init=function(){
var self=this,
$_external_icon=this.$_el.next('.' + self.options.iconClassName);
if(! this._is_eligible()){
if($_external_icon.length)
$_external_icon.remove();
return;
}
if(this.options.addIcon&&0===$_external_icon.length){
this.$_el.append('<span class="' + self.options.iconClassName + '">');
}
if(this.options.newTab&&'_blank'!=this.$_el.attr('target'))
this.$_el.attr('target' , '_blank');
};
Plugin.prototype._is_eligible=function(){
var self=this;
if(! this._is_external(this._href) )
return;
if(! this._is_first_child_tag_allowed ())
return;
if(2!=(['ids', 'classes'].filter(function(sel_type){ return self._is_selector_allowed(sel_type); }) ).length)
return;
var _is_eligible=true;
$.each(this.$_el.parents(), function(){
if('underline'==$(this).css('textDecoration')){
_is_eligible=false;
return false;
}});
return true&&_is_eligible;
};
Plugin.prototype._is_selector_allowed=function(requested_sel_type){
if(czrapp&&czrapp.userXP&&czrapp.userXP.isSelectorAllowed)
return czrapp.userXP.isSelectorAllowed(this.$_el, this.options.skipSelectors, requested_sel_type);
var sel_type='ids'==requested_sel_type ? 'id':'class',
_selsToSkip=this.options.skipSelectors[requested_sel_type];
if('object'!=typeof(this.options.skipSelectors)||! this.options.skipSelectors[requested_sel_type]||! Array.isArray(this.options.skipSelectors[requested_sel_type])||0===this.options.skipSelectors[requested_sel_type].length)
return true;
if(this.$_el.parents(_selsToSkip.map(function(_sel){ return 'id'==sel_type ? '#' + _sel:'.' + _sel; }).join(',')).length > 0)
return false;
if(! this.$_el.attr(sel_type) )
return true;
var _elSels=this.$_el.attr(sel_type).split(' '),
_filtered=_elSels.filter(function(classe){ return -1!=$.inArray(classe , _selsToSkip) ;});
return 0===_filtered.length;
};
Plugin.prototype._is_first_child_tag_allowed=function(){
if(0===this.$_el.children().length)
return true;
var tagName=this.$_el.children().first()[0].tagName,
_tagToSkip=this.options.skipChildTags;
if(! Array.isArray(_tagToSkip) )
return true;
_tagToSkip=_tagToSkip.map(function(_tag){ return _tag.toUpperCase(); });
return -1==$.inArray(tagName , _tagToSkip);
};
Plugin.prototype._is_external=function(_href){
var _main_domain=(location.host).split('.').slice(-2).join('.'),
_reg=new RegExp(_main_domain);
if('string'!=typeof(_href) )
return;
_href=_href.trim();
if(_href!==''&&_href!='#'&&this._isValidURL(_href) )
return ! _reg.test(_href);
return;
};
Plugin.prototype._isValidURL=function(_url){
var _pattern=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
return _pattern.test(_url);
};
$.fn[pluginName]=function(options){
return this.each(function (){
if(!$.data(this, 'plugin_' + pluginName)){
$.data(this, 'plugin_' + pluginName,
new Plugin(this, options));
}});
};})(jQuery);
(function($, window){
var pluginName='centerImages',
defaults={
enableCentering:true,
onresize:true,
onInit:true,
oncustom:[],
$containerToListen:null,
imgSel:'img',
defaultCSSVal:{ width:'auto' , height:'auto' },
leftAdjust:0,
zeroLeftAdjust:0,
topAdjust:0,
zeroTopAdjust:-2,
enableGoldenRatio:false,
goldenRatioLimitHeightTo:350,
goldenRatioVal:1.618,
skipGoldenRatioClasses:['no-gold-ratio'],
disableGRUnder:767,
useImgAttr:false,
setOpacityWhenCentered:false,
addCenteredClassWithDelay:0,
opacity:1
};
function Plugin(element, options){
var self=this;
this.container=element;
this.options=$.extend({}, defaults, options) ;
this._defaults=defaults;
this._name=pluginName;
this._customEvt=_.isArray(self.options.oncustom) ? self.options.oncustom:self.options.oncustom.split(' ');
this.init();
}
Plugin.prototype.init=function (){
var self=this,
_do=function(_event_){
_event_=_event_||'init';
self._maybe_apply_golden_r();
var $_imgs=$(self.options.imgSel , self.container);
if(self.options.enableGoldenRatio){
$(window).on('resize',
{},
_.debounce(function(evt){ self._maybe_apply_golden_r(evt); }, 200)
);
}
if(1 <=$_imgs.length&&self.options.enableCentering){
self._parse_imgs($_imgs, _event_);
}};
if(self.options.onInit){
_do();
}
if(_.isArray(self._customEvt) ){
self._customEvt.map(function(evt){
var $_containerToListen=(self.options.$containerToListen instanceof $&&1 < self.options.$containerToListen.length) ? self.options.$containerToListen:$(self.container);
$_containerToListen.on(evt, {} , function(){
_do(evt);
});
});
}};
Plugin.prototype._maybe_apply_golden_r=function(){
if(! this.options.enableGoldenRatio||! this.options.goldenRatioVal||0===this.options.goldenRatioVal)
return;
if(! this._is_selector_allowed())
return;
if(! this._is_window_width_allowed()){
$(this.container).attr('style' , '');
return;
}
var new_height=Math.round($(this.container).width() / this.options.goldenRatioVal);
new_height=new_height > this.options.goldenRatioLimitHeightTo ? this.options.goldenRatioLimitHeightTo:new_height;
$(this.container)
.css({
'line-height':new_height + 'px',
height:new_height + 'px'
})
.trigger('golden-ratio-applied');
};
Plugin.prototype._is_window_width_allowed=function(){
return $(window).width() > this.options.disableGRUnder - 15;
};
Plugin.prototype._parse_imgs=function($_imgs, _event_){
var self=this;
$_imgs.each(function(ind, img){
var $_img=$(img);
self._pre_img_cent($_img, _event_);
if(self.options.onresize&&! $_img.data('resize-react-bound') ){
$_img.data('resize-react-bound', true);
$(window).on('resize', _.debounce(function(){
self._pre_img_cent($_img, 'resize');
}, 100) );
}});//$_imgs.each()
if($(self.container).attr('data-img-centered-in-container')){
var _n=parseInt($(self.container).attr('data-img-centered-in-container'), 10) + 1;
$(self.container).attr('data-img-centered-in-container', _n);
}else{
$(self.container).attr('data-img-centered-in-container', 1);
}};
Plugin.prototype._pre_img_cent=function($_img){
var _state=this._get_current_state($_img),
self=this,
_case=_state.current,
_p=_state.prop[_case],
_not_p=_state.prop[ 'h'==_case ? 'v':'h'],
_not_p_dir_val='h'==_case ?(this.options.zeroTopAdjust||0):(this.options.zeroLeftAdjust||0);
var _centerImg=function($_img){
$_img
.css(_p.dim.name , _p.dim.val)
.css(_not_p.dim.name , self.options.defaultCSSVal[ _not_p.dim.name ]||'auto')
.css(_p.dir.name, _p.dir.val).css(_not_p.dir.name, _not_p_dir_val);
if(0!==self.options.addCenteredClassWithDelay&&_.isNumber(self.options.addCenteredClassWithDelay) ){
_.delay(function(){
$_img.addClass(_p._class).removeClass(_not_p._class);
}, self.options.addCenteredClassWithDelay);
}else{
$_img.addClass(_p._class).removeClass(_not_p._class);
}
if($_img.attr('data-img-centered')){
var _n=parseInt($_img.attr('data-img-centered'), 10) + 1;
$_img.attr('data-img-centered', _n);
}else{
$_img.attr('data-img-centered', 1);
}
return $_img;
};
if(this.options.setOpacityWhenCentered){
$.when(_centerImg($_img) ).done(function($_img){
$_img.css('opacity', self.options.opacity);
});
}else{
_.delay(function(){ _centerImg($_img); }, 0);
}};
Plugin.prototype._get_current_state=function($_img){
var c_x=$_img.closest(this.container).outerWidth(),
c_y=$(this.container).outerHeight(),
i_x=this._get_img_dim($_img , 'x'),
i_y=this._get_img_dim($_img , 'y'),
up_i_x=i_y * c_y!==0 ? Math.round(i_x / i_y * c_y):c_x,
up_i_y=i_x * c_x!==0 ? Math.round(i_y / i_x * c_x):c_y,
current='h';
if(0!==c_x * i_x){
current=(c_y / c_x) >=(i_y / i_x) ? 'h':'v';
}
var prop={
h:{
dim:{ name:'height', val:c_y },
dir:{ name:'left', val:(c_x - up_i_x) / 2 +(this.options.leftAdjust||0) },
_class:'h-centered'
},
v:{
dim:{ name:'width', val:c_x },
dir:{ name:'top', val:(c_y - up_i_y) / 2 +(this.options.topAdjust||0) },
_class:'v-centered'
}};
return { current:current , prop:prop };};
Plugin.prototype._get_img_dim=function($_img, _dim){
if(! this.options.useImgAttr)
return 'x'==_dim ? $_img.outerWidth():$_img.outerHeight();
if($_img.is(":visible")){
return 'x'==_dim ? $_img.outerWidth():$_img.outerHeight();
}else{
if('x'==_dim){
var _width=$_img.originalWidth();
return typeof _width===undefined ? 0:_width;
}
if('y'==_dim){
var _height=$_img.originalHeight();
return typeof _height===undefined ? 0:_height;
}}
};
Plugin.prototype._is_selector_allowed=function(){
if(! $(this.container).attr('class') )
return true;
if(! this.options.skipGoldenRatioClasses||! _.isArray(this.options.skipGoldenRatioClasses) )
return true;
var _elSels=$(this.container).attr('class').split(' '),
_selsToSkip=this.options.skipGoldenRatioClasses,
_filtered=_elSels.filter(function(classe){ return -1!=$.inArray(classe , _selsToSkip) ;});
return 0===_filtered.length;
};
$.fn[pluginName]=function(options){
return this.each(function (){
if(!$.data(this, 'plugin_' + pluginName)){
$.data(this, 'plugin_' + pluginName,
new Plugin(this, options));
}});
};})(jQuery, window);
(function($, window, _){
var pluginName='czrParallax',
defaults={
parallaxRatio:0.5,
parallaxDirection:1,
parallaxOverflowHidden:true,
oncustom:[],
backgroundClass:'image',
matchMedia:'only screen and (max-width: 768px)'
};
function Plugin(element, options){
this.element=$(element);
this.element_wrapper=this.element.closest('.parallax-wrapper');
this.options=$.extend({}, defaults, options, this.parseElementDataOptions()) ;
this._defaults=defaults;
this._name=pluginName;
this.init();
}
Plugin.prototype.parseElementDataOptions=function (){
return this.element.data();
};
Plugin.prototype.init=function (){
this.$_document=$(document);
this.$_window=czrapp ? czrapp.$_window:$(window);
this.doingAnimation=false;
this.initWaypoints();
this.stageParallaxElements();
this._bind_evt();
};
Plugin.prototype._bind_evt=function(){
_.bindAll(this, 'maybeParallaxMe', 'parallaxMe');
};
Plugin.prototype.stageParallaxElements=function(){
this.element.css({
'position': this.element.hasClass(this.options.backgroundClass) ? 'absolute':'relative',
'will-change': 'transform'
});
if(this.options.parallaxOverflowHidden){
var $_wrapper=this.element_wrapper;
if($_wrapper.length)
$_wrapper.css('overflow', 'hidden');
}};
Plugin.prototype.initWaypoints=function(){
var self=this;
this.way_start=new Waypoint({
element: self.element_wrapper.length ? self.element_wrapper:self.element,
handler: function(){
self.maybeParallaxMe();
if(! self.element.hasClass('parallaxing')){
self.$_window.on('scroll', self.maybeParallaxMe);
self.element.addClass('parallaxing');
}else{
self.element.removeClass('parallaxing');
self.$_window.off('scroll', self.maybeParallaxMe);
self.doingAnimation=false;
self.element.css('top', 0);
}}
});
this.way_stop=new Waypoint({
element: self.element_wrapper.length ? self.element_wrapper:self.element,
handler: function(){
self.maybeParallaxMe();
if(! self.element.hasClass('parallaxing')){
self.$_window.on('scroll', self.maybeParallaxMe);
self.element.addClass('parallaxing');
}else{
self.element.removeClass('parallaxing');
self.$_window.off('scroll', self.maybeParallaxMe);
self.doingAnimation=false;
}},
offset: function(){
return - this.adapter.outerHeight();
}});
};
Plugin.prototype.maybeParallaxMe=function(){
var self=this;
if(_.isFunction(window.matchMedia)&&matchMedia(self.options.matchMedia).matches)
return this.setTopPosition();
if(! this.doingAnimation){
this.doingAnimation=true;
window.requestAnimationFrame(function(){
self.parallaxMe();
self.doingAnimation=false;
});
}};
Plugin.prototype.setTopPosition=function(_top_){
_top_=_top_||0;
this.element.css({
'transform':'translate3d(0px, ' + _top_  + 'px, .01px)',
'-webkit-transform':'translate3d(0px, ' + _top_  + 'px, .01px)'
});
};
Plugin.prototype.parallaxMe=function(){
var ratio=this.options.parallaxRatio,
parallaxDirection=this.options.parallaxDirection,
value=ratio * parallaxDirection *(this.$_document.scrollTop() - this.way_start.triggerPoint);
this.setTopPosition(parallaxDirection * value < 0 ? 0:value);
};
$.fn[pluginName]=function(options){
return this.each(function (){
if(!$.data(this, 'plugin_' + pluginName)){
$.data(this, 'plugin_' + pluginName,
new Plugin(this, options));
}});
};})(jQuery, window, _);// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
(function(){
var lastTime=0;
var vendors=['ms', 'moz', 'webkit', 'o'];
for(var x=0; x < vendors.length&&!window.requestAnimationFrame; ++x){
window.requestAnimationFrame=window[vendors[x]+'RequestAnimationFrame'];
window.cancelAnimationFrame=window[vendors[x]+'CancelAnimationFrame']
|| window[vendors[x]+'CancelRequestAnimationFrame'];
}
if(!window.requestAnimationFrame)
window.requestAnimationFrame=function(callback, element){
var currTime=new Date().getTime();
var timeToCall=Math.max(0, 16 - (currTime - lastTime));
lastTime=currTime + timeToCall;
return window.setTimeout(function(){ callback(currTime + timeToCall); },
timeToCall);
};
if(!window.cancelAnimationFrame)
window.cancelAnimationFrame=function(id){
clearTimeout(id);
};}());
window.matchMedia||(window.matchMedia=function(){
"use strict";
var styleMedia=(window.styleMedia||window.media);
if(!styleMedia){
var style=document.createElement('style'),
script=document.getElementsByTagName('script')[0],
info=null;
style.type='text/css';
style.id='matchmediajs-test';
if(!script){
document.head.appendChild(style);
}else{
script.parentNode.insertBefore(style, script);
}
info=('getComputedStyle' in window)&&window.getComputedStyle(style, null)||style.currentStyle;
styleMedia={
matchMedium: function(media){
var text='@media ' + media + '{ #matchmediajs-test { width: 1px; }}';
if(style.styleSheet){
style.styleSheet.cssText=text;
}else{
style.textContent=text;
}
return info.width==='1px';
}};}
return function(media){
return {
matches: styleMedia.matchMedium(media||'all'),
media: media||'all'
};};
}());
var tcOutline;
(function(d){
tcOutline=function(){
var style_element=d.createElement('STYLE'),
dom_events='addEventListener' in d,
add_event_listener=function(type, callback){
if(dom_events){
d.addEventListener(type, callback);
}else{
d.attachEvent('on' + type, callback);
}},
set_css=function(css_text){
if(!!style_element.styleSheet)
style_element.styleSheet.cssText=css_text;
else
style_element.innerHTML=css_text;
}
;
d.getElementsByTagName('HEAD')[0].appendChild(style_element);
add_event_listener('mousedown', function(){
set_css('input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus,select:focus,a:focus{outline:0}input[type=file]::-moz-focus-inner,input[type=radio]::-moz-focus-inner,input[type=checkbox]::-moz-focus-inner,select::-moz-focus-inner,a::-moz-focus-inner{border:0;}');
});
add_event_listener('keydown', function(){
set_css('');
});
}})(document);
(function(){
'use strict'
var keyCounter=0
var allWaypoints={}
function Waypoint(options){
if(!options){
throw new Error('No options passed to Waypoint constructor')
}
if(!options.element){
throw new Error('No element option passed to Waypoint constructor')
}
if(!options.handler){
throw new Error('No handler option passed to Waypoint constructor')
}
this.key='waypoint-' + keyCounter
this.options=Waypoint.Adapter.extend({}, Waypoint.defaults, options)
this.element=this.options.element
this.adapter=new Waypoint.Adapter(this.element)
this.callback=options.handler
this.axis=this.options.horizontal ? 'horizontal':'vertical'
this.enabled=this.options.enabled
this.triggerPoint=null
this.group=Waypoint.Group.findOrCreate({
name: this.options.group,
axis: this.axis
})
this.context=Waypoint.Context.findOrCreateByElement(this.options.context)
if(Waypoint.offsetAliases[this.options.offset]){
this.options.offset=Waypoint.offsetAliases[this.options.offset]
}
this.group.add(this)
this.context.add(this)
allWaypoints[this.key]=this
keyCounter +=1
}
Waypoint.prototype.queueTrigger=function(direction){
this.group.queueTrigger(this, direction)
}
Waypoint.prototype.trigger=function(args){
if(!this.enabled){
return
}
if(this.callback){
this.callback.apply(this, args)
}}
Waypoint.prototype.destroy=function(){
this.context.remove(this)
this.group.remove(this)
delete allWaypoints[this.key]
}
Waypoint.prototype.disable=function(){
this.enabled=false
return this
}
Waypoint.prototype.enable=function(){
this.context.refresh()
this.enabled=true
return this
}
Waypoint.prototype.next=function(){
return this.group.next(this)
}
Waypoint.prototype.previous=function(){
return this.group.previous(this)
}
Waypoint.invokeAll=function(method){
var allWaypointsArray=[]
for (var waypointKey in allWaypoints){
allWaypointsArray.push(allWaypoints[waypointKey])
}
for (var i=0, end=allWaypointsArray.length; i < end; i++){
allWaypointsArray[i][method]()
}}
Waypoint.destroyAll=function(){
Waypoint.invokeAll('destroy')
}
Waypoint.disableAll=function(){
Waypoint.invokeAll('disable')
}
Waypoint.enableAll=function(){
Waypoint.invokeAll('enable')
}
Waypoint.refreshAll=function(){
Waypoint.Context.refreshAll()
}
Waypoint.viewportHeight=function(){
return window.innerHeight||document.documentElement.clientHeight
}
Waypoint.viewportWidth=function(){
return document.documentElement.clientWidth
}
Waypoint.adapters=[]
Waypoint.defaults={
context: window,
continuous: true,
enabled: true,
group: 'default',
horizontal: false,
offset: 0
}
Waypoint.offsetAliases={
'bottom-in-view': function(){
return this.context.innerHeight() - this.adapter.outerHeight()
},
'right-in-view': function(){
return this.context.innerWidth() - this.adapter.outerWidth()
}}
window.Waypoint=Waypoint
}())
;(function(){
'use strict'
function requestAnimationFrameShim(callback){
window.setTimeout(callback, 1000 / 60)
}
var keyCounter=0
var contexts={}
var Waypoint=window.Waypoint
var oldWindowLoad=window.onload
function Context(element){
this.element=element
this.Adapter=Waypoint.Adapter
this.adapter=new this.Adapter(element)
this.key='waypoint-context-' + keyCounter
this.didScroll=false
this.didResize=false
this.oldScroll={
x: this.adapter.scrollLeft(),
y: this.adapter.scrollTop()
}
this.waypoints={
vertical: {},
horizontal: {}}
element.waypointContextKey=this.key
contexts[element.waypointContextKey]=this
keyCounter +=1
this.createThrottledScrollHandler()
this.createThrottledResizeHandler()
}
Context.prototype.add=function(waypoint){
var axis=waypoint.options.horizontal ? 'horizontal':'vertical'
this.waypoints[axis][waypoint.key]=waypoint
this.refresh()
}
Context.prototype.checkEmpty=function(){
var horizontalEmpty=this.Adapter.isEmptyObject(this.waypoints.horizontal)
var verticalEmpty=this.Adapter.isEmptyObject(this.waypoints.vertical)
if(horizontalEmpty&&verticalEmpty){
this.adapter.off('.waypoints')
delete contexts[this.key]
}}
Context.prototype.createThrottledResizeHandler=function(){
var self=this
function resizeHandler(){
self.handleResize()
self.didResize=false
}
this.adapter.on('resize.waypoints', function(){
if(!self.didResize){
self.didResize=true
Waypoint.requestAnimationFrame(resizeHandler)
}})
}
Context.prototype.createThrottledScrollHandler=function(){
var self=this
function scrollHandler(){
self.handleScroll()
self.didScroll=false
}
this.adapter.on('scroll.waypoints', function(){
if(!self.didScroll||Waypoint.isTouch){
self.didScroll=true
Waypoint.requestAnimationFrame(scrollHandler)
}})
}
Context.prototype.handleResize=function(){
Waypoint.Context.refreshAll()
}
Context.prototype.handleScroll=function(){
var triggeredGroups={}
var axes={
horizontal: {
newScroll: this.adapter.scrollLeft(),
oldScroll: this.oldScroll.x,
forward: 'right',
backward: 'left'
},
vertical: {
newScroll: this.adapter.scrollTop(),
oldScroll: this.oldScroll.y,
forward: 'down',
backward: 'up'
}}
for (var axisKey in axes){
var axis=axes[axisKey]
var isForward=axis.newScroll > axis.oldScroll
var direction=isForward ? axis.forward:axis.backward
for (var waypointKey in this.waypoints[axisKey]){
var waypoint=this.waypoints[axisKey][waypointKey]
var wasBeforeTriggerPoint=axis.oldScroll < waypoint.triggerPoint
var nowAfterTriggerPoint=axis.newScroll >=waypoint.triggerPoint
var crossedForward=wasBeforeTriggerPoint&&nowAfterTriggerPoint
var crossedBackward = !wasBeforeTriggerPoint&&!nowAfterTriggerPoint
if(crossedForward||crossedBackward){
waypoint.queueTrigger(direction)
triggeredGroups[waypoint.group.id]=waypoint.group
}}
}
for (var groupKey in triggeredGroups){
triggeredGroups[groupKey].flushTriggers()
}
this.oldScroll={
x: axes.horizontal.newScroll,
y: axes.vertical.newScroll
}}
Context.prototype.innerHeight=function(){
if(this.element==this.element.window){
return Waypoint.viewportHeight()
}
return this.adapter.innerHeight()
}
Context.prototype.remove=function(waypoint){
delete this.waypoints[waypoint.axis][waypoint.key]
this.checkEmpty()
}
Context.prototype.innerWidth=function(){
if(this.element==this.element.window){
return Waypoint.viewportWidth()
}
return this.adapter.innerWidth()
}
Context.prototype.destroy=function(){
var allWaypoints=[]
for (var axis in this.waypoints){
for (var waypointKey in this.waypoints[axis]){
allWaypoints.push(this.waypoints[axis][waypointKey])
}}
for (var i=0, end=allWaypoints.length; i < end; i++){
allWaypoints[i].destroy()
}}
Context.prototype.refresh=function(){
var isWindow=this.element==this.element.window
var contextOffset=isWindow ? undefined:this.adapter.offset()
var triggeredGroups={}
var axes
this.handleScroll()
axes={
horizontal: {
contextOffset: isWindow ? 0:contextOffset.left,
contextScroll: isWindow ? 0:this.oldScroll.x,
contextDimension: this.innerWidth(),
oldScroll: this.oldScroll.x,
forward: 'right',
backward: 'left',
offsetProp: 'left'
},
vertical: {
contextOffset: isWindow ? 0:contextOffset.top,
contextScroll: isWindow ? 0:this.oldScroll.y,
contextDimension: this.innerHeight(),
oldScroll: this.oldScroll.y,
forward: 'down',
backward: 'up',
offsetProp: 'top'
}}
for (var axisKey in axes){
var axis=axes[axisKey]
for (var waypointKey in this.waypoints[axisKey]){
var waypoint=this.waypoints[axisKey][waypointKey]
var adjustment=waypoint.options.offset
var oldTriggerPoint=waypoint.triggerPoint
var elementOffset=0
var freshWaypoint=oldTriggerPoint==null
var contextModifier, wasBeforeScroll, nowAfterScroll
var triggeredBackward, triggeredForward
if(waypoint.element!==waypoint.element.window){
elementOffset=waypoint.adapter.offset()[axis.offsetProp]
}
if(typeof adjustment==='function'){
adjustment=adjustment.apply(waypoint)
}
else if(typeof adjustment==='string'){
adjustment=parseFloat(adjustment)
if(waypoint.options.offset.indexOf('%') > - 1){
adjustment=Math.ceil(axis.contextDimension * adjustment / 100)
}}
contextModifier=axis.contextScroll - axis.contextOffset
waypoint.triggerPoint=elementOffset + contextModifier - adjustment
wasBeforeScroll=oldTriggerPoint < axis.oldScroll
nowAfterScroll=waypoint.triggerPoint >=axis.oldScroll
triggeredBackward=wasBeforeScroll&&nowAfterScroll
triggeredForward = !wasBeforeScroll&&!nowAfterScroll
if(!freshWaypoint&&triggeredBackward){
waypoint.queueTrigger(axis.backward)
triggeredGroups[waypoint.group.id]=waypoint.group
}
else if(!freshWaypoint&&triggeredForward){
waypoint.queueTrigger(axis.forward)
triggeredGroups[waypoint.group.id]=waypoint.group
}
else if(freshWaypoint&&axis.oldScroll >=waypoint.triggerPoint){
waypoint.queueTrigger(axis.forward)
triggeredGroups[waypoint.group.id]=waypoint.group
}}
}
Waypoint.requestAnimationFrame(function(){
for (var groupKey in triggeredGroups){
triggeredGroups[groupKey].flushTriggers()
}})
return this
}
Context.findOrCreateByElement=function(element){
return Context.findByElement(element)||new Context(element)
}
Context.refreshAll=function(){
for (var contextId in contexts){
contexts[contextId].refresh()
}}
Context.findByElement=function(element){
return contexts[element.waypointContextKey]
}
window.onload=function(){
if(oldWindowLoad){
oldWindowLoad()
}
Context.refreshAll()
}
Waypoint.requestAnimationFrame=function(callback){
var requestFn=window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
requestAnimationFrameShim
requestFn.call(window, callback)
}
Waypoint.Context=Context
}())
;(function(){
'use strict'
function byTriggerPoint(a, b){
return a.triggerPoint - b.triggerPoint
}
function byReverseTriggerPoint(a, b){
return b.triggerPoint - a.triggerPoint
}
var groups={
vertical: {},
horizontal: {}}
var Waypoint=window.Waypoint
function Group(options){
this.name=options.name
this.axis=options.axis
this.id=this.name + '-' + this.axis
this.waypoints=[]
this.clearTriggerQueues()
groups[this.axis][this.name]=this
}
Group.prototype.add=function(waypoint){
this.waypoints.push(waypoint)
}
Group.prototype.clearTriggerQueues=function(){
this.triggerQueues={
up: [],
down: [],
left: [],
right: []
}}
Group.prototype.flushTriggers=function(){
for (var direction in this.triggerQueues){
var waypoints=this.triggerQueues[direction]
var reverse=direction==='up'||direction==='left'
waypoints.sort(reverse ? byReverseTriggerPoint:byTriggerPoint)
for (var i=0, end=waypoints.length; i < end; i +=1){
var waypoint=waypoints[i]
if(waypoint.options.continuous||i===waypoints.length - 1){
waypoint.trigger([direction])
}}
}
this.clearTriggerQueues()
}
Group.prototype.next=function(waypoint){
this.waypoints.sort(byTriggerPoint)
var index=Waypoint.Adapter.inArray(waypoint, this.waypoints)
var isLast=index===this.waypoints.length - 1
return isLast ? null:this.waypoints[index + 1]
}
Group.prototype.previous=function(waypoint){
this.waypoints.sort(byTriggerPoint)
var index=Waypoint.Adapter.inArray(waypoint, this.waypoints)
return index ? this.waypoints[index - 1]:null
}
Group.prototype.queueTrigger=function(waypoint, direction){
this.triggerQueues[direction].push(waypoint)
}
Group.prototype.remove=function(waypoint){
var index=Waypoint.Adapter.inArray(waypoint, this.waypoints)
if(index > -1){
this.waypoints.splice(index, 1)
}}
Group.prototype.first=function(){
return this.waypoints[0]
}
Group.prototype.last=function(){
return this.waypoints[this.waypoints.length - 1]
}
Group.findOrCreate=function(options){
return groups[options.axis][options.name]||new Group(options)
}
Waypoint.Group=Group
}())
;(function(){
'use strict'
var $=window.jQuery
var Waypoint=window.Waypoint
function JQueryAdapter(element){
this.$element=$(element)
}
$.each([
'innerHeight',
'innerWidth',
'off',
'offset',
'on',
'outerHeight',
'outerWidth',
'scrollLeft',
'scrollTop'
], function(i, method){
JQueryAdapter.prototype[method]=function(){
var args=Array.prototype.slice.call(arguments)
return this.$element[method].apply(this.$element, args)
}})
$.each([
'extend',
'inArray',
'isEmptyObject'
], function(i, method){
JQueryAdapter[method]=$[method]
})
Waypoint.adapters.push({
name: 'jquery',
Adapter: JQueryAdapter
})
Waypoint.Adapter=JQueryAdapter
}())
;(function(){
'use strict'
var Waypoint=window.Waypoint
function createExtension(framework){
return function(){
var waypoints=[]
var overrides=arguments[0]
if(framework.isFunction(arguments[0])){
overrides=framework.extend({}, arguments[1])
overrides.handler=arguments[0]
}
this.each(function(){
var options=framework.extend({}, overrides, {
element: this
})
if(typeof options.context==='string'){
options.context=framework(this).closest(options.context)[0]
}
waypoints.push(new Waypoint(options))
})
return waypoints
}}
if(window.jQuery){
window.jQuery.fn.waypoint=createExtension(window.jQuery)
}
if(window.Zepto){
window.Zepto.fn.waypoint=createExtension(window.Zepto)
}}())
;
(function($){
$.fn.fitText=function(kompressor, options){
var compressor=kompressor||1,
settings=$.extend({
'minFontSize':Number.NEGATIVE_INFINITY,
'maxFontSize':Number.POSITIVE_INFINITY
}, options);
return this.each(function(){
var $this=$(this);
var resizer=function (){
$this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize))  + 'px');
};
resizer();
$(window).on('resize.fittext orientationchange.fittext', resizer);
});
};})(jQuery);var czrapp=czrapp||{};
(function($, czrapp){
czrapp._printLog=function(log){
var _render=function(){
return $.Deferred(function(){
var dfd=this;
$.when($('#footer').before($('<div/>', { id:"bulklog" })) ).done(function(){
$('#bulklog').css({
position: 'fixed',
'z-index': '99999',
'font-size': '0.8em',
color: '#000',
padding: '5%',
width: '90%',
height: '20%',
overflow: 'hidden',
bottom: '0',
left: '0',
background: 'yellow'
});
dfd.resolve();
});
}).promise();
},
_print=function(){
$('#bulklog').prepend('<p>' + czrapp._prettyfy({ consoleArguments:[ log ], prettyfy:false }) + '</p>');
};
if(1!=$('#bulk-log').length){
_render().done(_print);
}else{
_print();
}};
czrapp._truncate=function(string , length){
length=length||150;
if(! _.isString(string) )
return '';
return string.length > length ? string.substr(0, length - 1):string;
};
var _prettyPrintLog=function(args){
var _defaults={
bgCol:'#5ed1f5',
textCol:'#000',
consoleArguments:[]
};
args=_.extend(_defaults, args);
var _toArr=Array.from(args.consoleArguments),
_truncate=function(string){
if(! _.isString(string) )
return '';
return string.length > 300 ? string.substr(0, 299) + '...':string;
};
if(! _.isEmpty(_.filter(_toArr, function(it){ return ! _.isString(it); }) )){
_toArr=JSON.stringify(_toArr.join(' '));
}else{
_toArr=_toArr.join(' ');
}
return [
'%c ' + _truncate(_toArr),
[ 'background:' + args.bgCol, 'color:' + args.textCol, 'display: block;' ].join(';')
];
};
var _wrapLogInsideTags=function(title, msg, bgColor){
if(( _.isUndefined(console)&&typeof window.console.log!='function') )
return;
if(czrapp.localized.isDevMode){
if(_.isUndefined(msg) ){
console.log.apply(console, _prettyPrintLog( { bgCol:bgColor, textCol:'#000', consoleArguments:[ '<' + title + '>' ] }) );
}else{
console.log.apply(console, _prettyPrintLog( { bgCol:bgColor, textCol:'#000', consoleArguments:[ '<' + title + '>' ] }) );
console.log(msg);
console.log.apply(console, _prettyPrintLog( { bgCol:bgColor, textCol:'#000', consoleArguments:[ '</' + title + '>' ] }) );
}}else{
console.log.apply(console, _prettyPrintLog( { bgCol:bgColor, textCol:'#000', consoleArguments:[ title ] }) );
}};
czrapp.consoleLog=function(){
if(! czrapp.localized.isDevMode)
return;
if(( _.isUndefined(console)&&typeof window.console.log!='function') )
return;
console.log.apply(console, _prettyPrintLog( { consoleArguments:arguments }) );
console.log('Unstyled console message:', arguments);
};
czrapp.errorLog=function(){
if(( _.isUndefined(console)&&typeof window.console.log!='function') )
return;
console.log.apply(console, _prettyPrintLog( { bgCol:'#ffd5a0', textCol:'#000', consoleArguments:arguments }) );
};
czrapp.errare=function(title, msg){ _wrapLogInsideTags(title, msg, '#ffd5a0'); };
czrapp.infoLog=function(title, msg){ _wrapLogInsideTags(title, msg, '#5ed1f5'); };
czrapp.doAjax=function(queryParams){
queryParams=queryParams||(_.isObject(queryParams) ? queryParams:{});
var ajaxUrl=queryParams.ajaxUrl||czrapp.localized.ajaxUrl,
nonce=czrapp.localized.frontNonce,
dfd=$.Deferred(),
_query_=_.extend({
action:'',
withNonce:false
},
queryParams
);
if("https:"==document.location.protocol){
ajaxUrl=ajaxUrl.replace("http://", "https://");
}
if(_.isEmpty(_query_.action)||! _.isString(_query_.action) ){
czrapp.errorLog('czrapp.doAjax:unproper action provided');
return dfd.resolve().promise();
}
_query_[ nonce.id ]=nonce.handle;
if(! _.isObject(nonce)||_.isUndefined(nonce.id)||_.isUndefined(nonce.handle) ){
czrapp.errorLog('czrapp.doAjax:unproper nonce');
return dfd.resolve().promise();
}
$.post(ajaxUrl, _query_)
.done(function(_r){
if('0'===_r||'-1'===_r||false===_r.success){
czrapp.errare('czrapp.doAjax:done ajax error for action:' + _query_.action , _r);
dfd.reject(_r);
}
dfd.resolve(_r);
})
.fail(function(_r){
czrapp.errare('czrapp.doAjax:failed ajax error for:' + _query_.action, _r);
dfd.reject(_r);
});
return dfd.promise();
};})(jQuery, czrapp);
(function($, czrapp){
czrapp.isKeydownButNotEnterEvent=function(event){
return('keydown'===event.type&&13!==event.which);
};
czrapp.setupDOMListeners=function(event_map , args, instance){
var _defaultArgs={
model:{},
dom_el:{}};
if(_.isUndefined(instance)||! _.isObject(instance) ){
czrapp.errorLog('setupDomListeners:instance should be an object', args);
return;
}
if(! _.isArray(event_map) ){
czrapp.errorLog('setupDomListeners:event_map should be an array', args);
return;
}
if(! _.isObject(args) ){
czrapp.errorLog('setupDomListeners:args should be an object', event_map);
return;
}
args=_.extend(_defaultArgs, args);
if(!(args.dom_el instanceof jQuery)||1!=args.dom_el.length){
czrapp.errorLog('setupDomListeners:dom element should be an existing dom element', args);
return;
}
_.map(event_map , function(_event){
if(! _.isString(_event.selector)||_.isEmpty(_event.selector) ){
czrapp.errorLog('setupDOMListeners:selector must be a string not empty. Aborting setup of action(s):' + _event.actions.join(','));
return;
}
if(! _.isString(_event.selector)||_.isEmpty(_event.selector) ){
czrapp.errorLog('setupDOMListeners:selector must be a string not empty. Aborting setup of action(s):' + _event.actions.join(','));
return;
}
var once=_event.once ? _event.once:false;
args.dom_el[ once ? 'one':'on' ](_event.trigger , _event.selector, function(e, event_params){
e.stopPropagation();
if(czrapp.isKeydownButNotEnterEvent(e) ){
return;
}
e.preventDefault();
var actionsParams=$.extend(true, {}, args);
if(_.has(actionsParams, 'model')&&_.has(actionsParams.model, 'id')){
if(_.has(instance, 'get') )
actionsParams.model=instance();
else
actionsParams.model=instance.getModel(actionsParams.model.id);
}
$.extend(actionsParams, { event:_event, dom_event:e });
$.extend(actionsParams, event_params);
if(! _.has(actionsParams, 'event')||! _.has(actionsParams.event, 'actions') ){
czrapp.errorLog('executeEventActionChain:missing obj.event or obj.event.actions');
return;
}
try { czrapp.executeEventActionChain(actionsParams, instance); } catch(er){
czrapp.errorLog('In setupDOMListeners:problem when trying to fire actions:' + actionsParams.event.actions);
czrapp.errorLog('Error:' + er);
}});
});
};
czrapp.executeEventActionChain=function(args, instance){
if('function'===typeof(args.event.actions) )
return args.event.actions.call(instance, args);
if(! _.isArray(args.event.actions) )
args.event.actions=[ args.event.actions ];
var _break=false;
_.map(args.event.actions, function(_cb){
if(_break)
return;
if('function'!=typeof(instance[ _cb ]) ){
throw new Error('executeEventActionChain:the action:' + _cb + ' has not been found when firing event:' + args.event.selector);
}
var $_dom_el=(_.has(args, 'dom_el')&&-1!=args.dom_el.length) ? args.dom_el:false;
if(! $_dom_el){
czrapp.errorLog('missing dom element');
return;
}
$_dom_el.trigger('before_' + _cb, _.omit(args, 'event') );
var _cb_return=instance[ _cb ].call(instance, args);
if(false===_cb_return)
_break=true;
$_dom_el.trigger('after_' + _cb, _.omit(args, 'event') );
});
};})(jQuery, czrapp);var czrapp=czrapp||{};
czrapp.methods={};
(function($){
var ctor, inherits, slice=Array.prototype.slice;
ctor=function(){};
inherits=function(parent, protoProps, staticProps){
var child;
if(protoProps&&protoProps.hasOwnProperty('constructor') ){
child=protoProps.constructor;
}else{
child=function(){
var result=parent.apply(this, arguments);
return result;
};}
$.extend(child, parent);
ctor.prototype=parent.prototype;
child.prototype=new ctor();
if(protoProps)
$.extend(child.prototype, protoProps);
if(staticProps)
$.extend(child, staticProps);
child.prototype.constructor=child;
child.__super__=parent.prototype;
return child;
};
czrapp.Class=function(applicator, argsArray, options){
var magic, args=arguments;
if(applicator&&argsArray&&czrapp.Class.applicator===applicator){
args=argsArray;
$.extend(this, options||{});
}
magic=this;
if(this.instance){
magic=function(){
return magic.instance.apply(magic, arguments);
};
$.extend(magic, this);
}
magic.initialize.apply(magic, args);
return magic;
};
czrapp.Class.extend=function(protoProps, classProps){
var child=inherits(this, protoProps, classProps);
child.extend=this.extend;
return child;
};
czrapp.Class.applicator={};
czrapp.Class.prototype.initialize=function(){};
czrapp.Class.prototype.extended=function(constructor){
var proto=this;
while(typeof proto.constructor!=='undefined'){
if(proto.constructor===constructor)
return true;
if(typeof proto.constructor.__super__==='undefined')
return false;
proto=proto.constructor.__super__;
}
return false;
};
czrapp.Events={
trigger: function(id){
if(this.topics&&this.topics[ id ])
this.topics[ id ].fireWith(this, slice.call(arguments, 1) );
return this;
},
bind: function(id){
this.topics=this.topics||{};
this.topics[ id ]=this.topics[ id ]||$.Callbacks();
this.topics[ id ].add.apply(this.topics[ id ], slice.call(arguments, 1) );
return this;
},
unbind: function(id){
if(this.topics&&this.topics[ id ])
this.topics[ id ].remove.apply(this.topics[ id ], slice.call(arguments, 1) );
return this;
}};
czrapp.Value=czrapp.Class.extend({
initialize: function(initial, options){
this._value=initial;
this.callbacks=$.Callbacks();
this._dirty=false;
$.extend(this, options||{});
this.set=$.proxy(this.set, this);
},
instance: function(){
return arguments.length ? this.set.apply(this, arguments):this.get();
},
get: function(){
return this._value;
},
set: function(to, o){
var from=this._value, dfd=$.Deferred(), self=this, _promises=[];
to=this._setter.apply(this, arguments);
to=this.validate(to);
var args=_.extend({ silent:false }, _.isObject(o) ? o:{});
if(null===to||_.isEqual(from, to) ){
return dfd.resolveWith(self, [ to, from, o ]).promise();
}
this._value=to;
this._dirty=true;
if(true===args.silent){
return dfd.resolveWith(self, [ to, from, o ]).promise();
}
if(this._deferreds){
_.each(self._deferreds, function(_prom){
_promises.push(_prom.apply(null, [ to, from, o ]) );
});
$.when.apply(null, _promises)
.fail(function(){ czrapp.errorLog('A deferred callback failed in api.Value::set()'); })
.then(function(){
self.callbacks.fireWith(self, [ to, from, o ]);
dfd.resolveWith(self, [ to, from, o ]);
});
}else{
this.callbacks.fireWith(this, [ to, from, o ]);
return dfd.resolveWith(self, [ to, from, o ]).promise(self);
}
return dfd.promise(self);
},
silent_set:function(to, dirtyness){
var from=this._value;
to=this._setter.apply(this, arguments);
to=this.validate(to);
if(null===to||_.isEqual(from, to) ){
return this;
}
this._value=to;
this._dirty=(_.isUndefined(dirtyness)||! _.isBoolean(dirtyness) ) ? this._dirty:dirtyness;
this.callbacks.fireWith(this, [ to, from, { silent:true } ]);
return this;
},
_setter: function(to){
return to;
},
setter: function(callback){
var from=this.get();
this._setter=callback;
this._value=null;
this.set(from);
return this;
},
resetSetter: function(){
this._setter=this.constructor.prototype._setter;
this.set(this.get());
return this;
},
validate: function(value){
return value;
},
bind: function(){
var self=this,
_isDeferred=false,
_cbs=[];
$.each(arguments, function(_key, _arg){
if(! _isDeferred)
_isDeferred=_.isObject(_arg)&&_arg.deferred;
if(_.isFunction(_arg) )
_cbs.push(_arg);
});
if(_isDeferred){
self._deferreds=self._deferreds||[];
_.each(_cbs, function(_cb){
if(! _.contains(_cb, self._deferreds) )
self._deferreds.push(_cb);
});
}else{
self.callbacks.add.apply(self.callbacks, arguments);
}
return this;
},
unbind: function(){
this.callbacks.remove.apply(this.callbacks, arguments);
return this;
},
});
czrapp.Values=czrapp.Class.extend({
defaultConstructor: czrapp.Value,
initialize: function(options){
$.extend(this, options||{});
this._value={};
this._deferreds={};},
instance: function(id){
if(arguments.length===1)
return this.value(id);
return this.when.apply(this, arguments);
},
value: function(id){
return this._value[ id ];
},
has: function(id){
return typeof this._value[ id ]!=='undefined';
},
add: function(id, value){
if(this.has(id) )
return this.value(id);
this._value[ id ]=value;
value.parent=this;
if(value.extended(czrapp.Value) )
value.bind(this._change);
this.trigger('add', value);
if(this._deferreds[ id ])
this._deferreds[ id ].resolve();
return this._value[ id ];
},
create: function(id){
return this.add(id, new this.defaultConstructor(czrapp.Class.applicator, slice.call(arguments, 1) ));
},
each: function(callback, context){
context=typeof context==='undefined' ? this:context;
$.each(this._value, function(key, obj){
callback.call(context, obj, key);
});
},
remove: function(id){
var value;
if(this.has(id) ){
value=this.value(id);
this.trigger('remove', value);
if(value.extended(czrapp.Value) )
value.unbind(this._change);
delete value.parent;
}
delete this._value[ id ];
delete this._deferreds[ id ];
},
when: function(){
var self=this,
ids=slice.call(arguments),
dfd=$.Deferred();
if($.isFunction(ids[ ids.length - 1 ]) )
dfd.done(ids.pop());
$.when.apply($, $.map(ids, function(id){
if(self.has(id) )
return;
return self._deferreds[ id ]||$.Deferred();
})).done(function(){
var values=$.map(ids, function(id){
return self(id);
});
if(values.length!==ids.length){
self.when.apply(self, ids).done(function(){
dfd.resolveWith(self, values);
});
return;
}
dfd.resolveWith(self, values);
});
return dfd.promise();
},
_change: function(){
this.parent.trigger('change', this);
}});
$.extend(czrapp.Values.prototype, czrapp.Events);
})(jQuery);
var czrapp=czrapp||{};
(function($, czrapp){
czrapp.localized=HUParams||{};
var _methods={
cacheProp:function(){
var self=this;
$.extend(czrapp, {
$_window:$(window),
$_html:$('html'),
$_body:$('body'),
$_header:$('#header'),
$_wpadminbar:$('#wpadminbar'),
$_mainWrapper:$('.main', '#wrapper'),
$_mainContent:$('.main', '#wrapper').find('.content'),
is_responsive:self.isResponsive(),
current_device:self.getDevice()
});
},
isResponsive:function(){
return this.matchMedia(979);
},
getDevice:function(){
var _devices={
desktop:979,
tablet:767,
smartphone:480
},
_current_device='desktop',
that=this;
_.map(_devices, function(max_width, _dev){
if(that.matchMedia(max_width) )
_current_device=_dev;
});
return _current_device;
},
matchMedia:function(_maxWidth){
if(window.matchMedia)
return(window.matchMedia("(max-width: "+_maxWidth+"px)").matches);
$_window=czrapp.$_window||$(window);
return $_window.width() <=(_maxWidth - 15);
},
emit:function(cbs, args){
cbs=_.isArray(cbs) ? cbs:[cbs];
var self=this;
_.map(cbs, function(cb){
if('function'==typeof(self[cb])){
args='undefined'==typeof(args) ? Array():args ;
self[cb].apply(self, args);
czrapp.trigger(cb, _.object(_.keys(args), args) );
}});
},
triggerSimpleLoad:function($_imgs){
if(0===$_imgs.length)
return;
$_imgs.map(function(_ind, _img){
$(_img).on('load', function (){
$(_img).trigger('simple_load');
});
if($(_img)[0]&&$(_img)[0].complete)
$(_img).trigger('load');
});
},
isUserLogged:function(){
return czrapp.$_body.hasClass('logged-in')||0!==czrapp.$_wpadminbar.length;
},
isSelectorAllowed:function($_el, skip_selectors, requested_sel_type){
var sel_type='ids'==requested_sel_type ? 'id':'class',
_selsToSkip=skip_selectors[requested_sel_type];
if('object'!=typeof(skip_selectors)||! skip_selectors[requested_sel_type]||! $.isArray(skip_selectors[requested_sel_type])||0===skip_selectors[requested_sel_type].length)
return true;
if($_el.parents(_selsToSkip.map(function(_sel){ return 'id'==sel_type ? '#' + _sel:'.' + _sel; }).join(',')).length > 0)
return false;
if(! $_el.attr(sel_type) )
return true;
var _elSels=$_el.attr(sel_type).split(' '),
_filtered=_elSels.filter(function(classe){ return -1!=$.inArray(classe , _selsToSkip) ;});
return 0===_filtered.length;
},
_isMobileScreenSize:function(){
return(_.isFunction(window.matchMedia)&&matchMedia('only screen and (max-width: 720px)').matches)||(this._isCustomizing()&&'desktop'!=this.previewDevice());
},
_isCustomizing:function(){
return czrapp.$_body.hasClass('is-customizing')||('undefined'!==typeof wp&&'undefined'!==typeof wp.customize);
},
_has_iframe:function($_elements){
var that=this,
to_return=[];
_.each($_elements, function($_el, container){
if($_el.length > 0&&$_el.find('IFRAME').length > 0)
to_return.push(container);
});
return to_return;
},
observeAddedNodesOnDom:function(containerSelector, elementSelector, callback){
var onMutationsObserved=function(mutations){
mutations.forEach(function(mutation){
if(mutation.addedNodes.length){
var elements=$(mutation.addedNodes).find(elementSelector);
for (var i=0, len=elements.length; i < len; i++){
callback(elements[i]);
}}
});
},
target=$(containerSelector)[0],
config={ childList: true, subtree: true },
MutationObserver=window.MutationObserver||window.WebKitMutationObserver,
observer=new MutationObserver(onMutationsObserved);
observer.observe(target, config);
}};
czrapp.methods.Base=czrapp.methods.Base||{};
$.extend(czrapp.methods.Base , _methods);//$.extend
})(jQuery, czrapp);
(function($, czrapp){
var _methods={
addBrowserClassToBody:function(){
if(!$.browser)
return;
if($.browser.chrome)
czrapp.$_body.addClass("chrome");
else if($.browser.webkit)
czrapp.$_body.addClass("safari");
if($.browser.mozilla)
czrapp.$_body.addClass("mozilla");
else if($.browser.msie||'8.0'===$.browser.version||'9.0'===$.browser.version||'10.0'===$.browser.version||'11.0'===$.browser.version)
czrapp.$_body.addClass("ie").addClass("ie" + $.browser.version.replace(/[.0]/g, ''));
if(czrapp.$_body.hasClass("ie"))
czrapp.$_body.addClass($.browser.version);
}};
czrapp.methods.BrowserDetect=czrapp.methods.BrowserDetect||{};
$.extend(czrapp.methods.BrowserDetect , _methods);
})(jQuery, czrapp);
var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
imgSmartLoad:function(){
var smartLoadEnabled=1==HUParams.imgSmartLoadEnabled,
_where=HUParams.imgSmartLoadOpts.parentSelectors.join();
_params=_.size(HUParams.imgSmartLoadOpts.opts) > 0 ? HUParams.imgSmartLoadOpts.opts:{};
var _doLazyLoad=function(){
if(!smartLoadEnabled)
return;
$(_where).each(function(){
if(!$(this).data('smartLoadDone')){
$(this).imgSmartLoad(_params);
}else{
$(this).trigger('trigger-smartload');
}});
};
_doLazyLoad();
this.observeAddedNodesOnDom('body', 'img', _.debounce(function(element){
_doLazyLoad();
}, 50));
if(1==HUParams.centerAllImg){
var self=this,
$_to_center=smartLoadEnabled ?
$(_.filter($(_where).find('img'), function(img){
return $(img).is(HUParams.imgSmartLoadOpts.opts.excludeImg.join());
})):
$(_where).find('img');
$_to_center_with_delay=$(_.filter($_to_center, function(img){
return $(img).hasClass('tc-holder-img');
}));
setTimeout(function(){
self.triggerSimpleLoad($_to_center_with_delay);
}, 300);
self.triggerSimpleLoad($_to_center);
}},
extLinks:function(){
if(! HUParams.extLinksStyle&&! HUParams.extLinksTargetExt)
return;
$('a' , '.post-inner .entry p, .post-inner .entry li, .type-page .entry p, .type-page .entry li').extLinks({
addIcon:HUParams.extLinksStyle,
iconClassName:'hu-external',
newTab:HUParams.extLinksTargetExt,
skipSelectors:_.isObject(HUParams.extLinksSkipSelectors) ? HUParams.extLinksSkipSelectors:{}});
},
parallax:function(){
$('.parallax-item').czrParallax();
},
};
czrapp.methods.JQPlugins=czrapp.methods.JQPlugins||{};
$.extend(czrapp.methods.JQPlugins={} , _methods);
})(jQuery, czrapp);
var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
setupUIListeners:function(){
var self=this;
this.windowWidth=new czrapp.Value(czrapp.$_window.width());
this.isScrolling=new czrapp.Value(false);
this.isResizing=new czrapp.Value(false);
this.scrollPosition=new czrapp.Value(czrapp.$_window.scrollTop());
this.scrollDirection=new czrapp.Value('down');
self.previewDevice=new czrapp.Value('desktop');
if(self._isCustomizing()){
var _setPreviewedDevice=function(){
wp.customize.preview.bind('previewed-device', function(device){
self.previewDevice(device);
});
};
if(wp.customize.preview){
_setPreviewedDevice();
}else{
wp.customize.bind('preview-ready', function(){
_setPreviewedDevice();
});
}}
self.windowWidth.bind(function(to, from){
self.isResizing(self._isMobileScreenSize ? Math.abs(from - to) > 2:Math.abs(from - to) > 0);
clearTimeout($.data(this, 'resizeTimer'));
$.data(this, 'resizeTimer', setTimeout(function(){
self.isResizing(false);
}, 50) );
});
self.isResizing.bind(function(is_resizing){
czrapp.$_body.toggleClass('is-resizing', is_resizing);
});
this.isScrolling.bind(function(to, from){
czrapp.$_body.toggleClass('is-scrolling', to);
if(! to){
czrapp.trigger('scrolling-finished');
}});
this.scrollPosition.bind(function(to, from){
czrapp.$_body.toggleClass('is-scrolled', to > 100);
if(to <=50){
czrapp.trigger('page-scrolled-top', {});
}
self.scrollDirection(to >=from ? 'down':'up');
});
czrapp.$_window.on('resize', _.throttle(function(ev){ self.windowWidth(czrapp.$_window.width()); }, 10) );
czrapp.$_window.on('scroll', _.throttle(function(){
self.isScrolling(true);
self.scrollPosition(czrapp.$_window.scrollTop());
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function(){
self.isScrolling(false);
}, 100) );
}, 10) );
},
onSlidingCompleteResetCSS:function($_el){
$_el=$_el ? $_el:$(this);
$_el.css({
'display':'',
'paddingTop':'',
'marginTop':'',
'paddingBottom':'',
'marginBottom':'',
'height':''
});
},
};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
mobileMenu:function(){
var self=this;
self.mobileMenu=new czrapp.Values();
$('.nav-container').each(function(_index){
if(! _.isString($(this).attr('data-menu-id') ))
return;
var $container=$(this),
is_scrollable=_.isString($(this).attr('data-menu-scrollable') )&&"false"==$(this).attr('data-menu-scrollable') ? false:true,
_candidateId=$container.attr('data-menu-id'),
ctor;
if(self.mobileMenu.has(_candidateId) )
return;
var $navWrap=$container.find('.nav-wrap');
var button_selectors='.nav-toggle, .ham__navbar-toggler, .ham__navbar-toggler-two',
$button=$container.find(button_selectors);
if(1==$navWrap.length&&1==$button.length){
ctor=czrapp.Value.extend(self.MobileCTOR);
self.mobileMenu.add(_candidateId, new ctor(_candidateId, {
container:$container,
menu_wrapper:$navWrap,
button:$button,
button_selectors:button_selectors,
is_scrollable:is_scrollable
}));
}});
},
MobileCTOR:{
initialize: function(mobile_id, constructor_options){
var mobMenu=this;
czrapp.Value.prototype.initialize.call(mobMenu, null, constructor_options);
$.extend(mobMenu, constructor_options||{});
mobMenu('collapsed').button
.toggleClass('collapsed', true)
.toggleClass('active', false)
.attr('aria-expanded', false);
mobMenu.bind(function(state){
return $.Deferred(function(){
var dfd=this;
czrapp.userXP.headerSearchExpanded(false).done(function(){
mobMenu._toggleMobileMenu()
.done(function(state){
mobMenu.button.toggleClass('hovering', 'expanded'==state).toggleClass('focusing', 'expanded'==state);
dfd.resolve();
});
});
}).promise();
}, { deferred:true });
czrapp.setupDOMListeners([
{
trigger:'mousedown focusin keydown',
selector:mobMenu.button_selectors,
actions:function(){
var mobMenu=this;
mobMenu('collapsed'==mobMenu() ? 'expanded':'collapsed');
}},
{
trigger:'mouseenter',
selector:mobMenu.button_selectors,
actions:function(){
this.button.addClass('hovering');
}},
{
trigger:'mouseleave',
selector:mobMenu.button_selectors,
actions:function(){
this.button.removeClass('hovering');
}}
],
{ dom_el: mobMenu.container },
mobMenu
);
if(czrapp.localized.mobileSubmenuExpandOnClick){
mobMenu.menu_wrapper.addClass('submenu-click-expand');
czrapp.setupDOMListeners([
{
trigger:'mousedown focusin keydown',
selector:mobMenu.button_selectors,
actions:function(){
var mobMenu=this;
mobMenu._collapsibleSubmenu();
},
once:true
}
],
{ dom_el: mobMenu.container },
mobMenu
);
}
czrapp.userXP.isResizing.bind(function(is_resizing){
if(! is_resizing)
return;
mobMenu('collapsed');
});
$(mobMenu.container)
.on('mouseup', '.menu-item a', function(evt){
if(! czrapp.userXP._isMobileScreenSize())
return;
if('#'===$(this).attr('href'))
return;
evt.preventDefault();
evt.stopPropagation();
mobMenu('collapsed');
});
},
_toggleMobileMenu:function(){
var mobMenu=this,
expand='expanded'==mobMenu(),
dfd=$.Deferred();
mobMenu.button
.toggleClass('collapsed', ! expand)
.toggleClass('active', expand)
.attr('aria-expanded', expand);
$.when(mobMenu.menu_wrapper.toggleClass('expanded', expand) ).done(function(){
var $navWrap=$(this);
$navWrap.find('.nav').stop()[ ! expand ? 'slideUp':'slideDown' ]( {
duration:300,
complete:function(){
if(mobMenu.is_scrollable){
var _winHeight='undefined'===typeof window.innerHeight ? window.innerHeight:czrapp.$_window.height(),
_visibleHeight=_winHeight - $navWrap.offset().top + czrapp.$_window.scrollTop();
$navWrap.css({
'max-height':expand ? _visibleHeight:'',
'overflow':'auto'
});
}
czrapp.userXP.onSlidingCompleteResetCSS($(this).toggleClass('expanded', expand));
dfd.resolve(expand);
}});
});
return dfd.promise();
},
_collapsibleSubmenu:function(){
var mobMenu=this;
var EVENT_KEY='.hu.submenu',
Event={
SHOW:'show' + EVENT_KEY,
HIDE:'hide' + EVENT_KEY,
CLICK:'mousedown' + EVENT_KEY,
FOCUSIN:'focusin' + EVENT_KEY,
FOCUSOUT:'focusout' + EVENT_KEY
},
Classname={
DD_TOGGLE_ON_CLICK:'submenu-click-expand',
SHOWN:'expanded',
DD_TOGGLE:'hu-dropdown-toggle',
DD_TOGGLE_WRAPPER:'hu-dropdown-toggle-wrapper',
SCREEN_READER:'screen-reader-text',
},
Selector={
DD_TOGGLE_PARENT:'.menu-item-has-children, .page_item_has_children',
CURRENT_ITEM_ANCESTOR:'.current-menu-ancestor',
SUBMENU:'.sub-menu'
},
dropdownToggle=$('<button />', { 'class': Classname.DD_TOGGLE, 'aria-expanded': false })
.append(czrapp.localized.submenuTogglerIcon)
.append($('<span />', { 'class': Classname.SCREEN_READER, text: czrapp.localized.i18n.collapsibleExpand }) ),
dropdownToggleWrapper=$('<span />', { 'class': Classname.DD_TOGGLE_WRAPPER })
.append(dropdownToggle);
mobMenu.menu_wrapper.find(Selector.DD_TOGGLE_PARENT).children('a').after(dropdownToggleWrapper);
mobMenu.menu_wrapper.find(Selector.CURRENT_ITEM_ANCESTOR +'>.'+ Classname.DD_TOGGLE_WRAPPER +' .'+ Classname.DD_TOGGLE)
.addClass(Classname.SHOWN)
.attr('aria-expanded', 'true')
.find('.'+Classname.SCREEN_READER)
.text(czrapp.localized.i18n.collapsibleCollapse);
mobMenu.menu_wrapper.find(Selector.CURRENT_ITEM_ANCESTOR +'>'+ Selector.SUBMENU).addClass(Classname.SHOWN);
mobMenu.menu_wrapper.find(Selector.CURRENT_ITEM_ANCESTOR).addClass(Classname.SHOWN);
$(mobMenu.menu_wrapper)
.on(Event.CLICK, 'a[href="#"]', function(evt){
if(! czrapp.userXP._isMobileScreenSize())
return;
evt.preventDefault();
evt.stopPropagation();
$(this).next('.'+Classname.DD_TOGGLE_WRAPPER).find('.'+Classname.DD_TOGGLE).trigger(Event.CLICK);
})
.on(Event.CLICK, '.'+Classname.DD_TOGGLE, function(e){
e.preventDefault();
var $_this=$(this);
$_this.trigger($_this.closest(Selector.DD_TOGGLE_PARENT).hasClass(Classname.SHOWN) ? Event.HIDE: Event.SHOW);
_clearMenus(mobMenu, $_this);
})
.on(Event.SHOW+' '+Event.HIDE, '.'+Classname.DD_TOGGLE, function(e){
var $_this=$(this);
$_this.closest(Selector.DD_TOGGLE_PARENT).toggleClass(Classname.SHOWN);
$_this.closest('.'+Classname.DD_TOGGLE_WRAPPER).next(Selector.SUBMENU)
.stop()[Event.SHOW==e.type + '.' + e.namespace  ? 'slideDown':'slideUp']( {
duration: 300,
complete: function(){
var _to_expand='false'===$_this.attr('aria-expanded');
$submenu=$(this);
$_this.attr('aria-expanded', _to_expand)
.find('.'+Classname.SCREEN_READER)
.text(_to_expand ? czrapp.localized.i18n.collapsibleCollapse:czrapp.localized.i18n.collapsibleExpand);
$submenu.toggleClass(Classname.SHOWN);
czrapp.userXP.onSlidingCompleteResetCSS($submenu);
}});
})
.on(Event.FOCUSIN, 'a[href="#"]', function(evt){
if(! czrapp.userXP._isMobileScreenSize())
return;
evt.preventDefault();
evt.stopPropagation();
$(this).next('.'+Classname.DD_TOGGLE_WRAPPER).find('.'+Classname.DD_TOGGLE).trigger(Event.FOCUSIN);
})
.on(Event.FOCUSOUT, 'a[href="#"]', function(evt){
if(! czrapp.userXP._isMobileScreenSize())
return;
evt.preventDefault();
evt.stopPropagation();
_.delay(function(){
$(this).next('.'+Classname.DD_TOGGLE_WRAPPER).find('.'+Classname.DD_TOGGLE).trigger(Event.FOCUSOUT);
}, 250);
})
.on(Event.FOCUSIN, '.'+Classname.DD_TOGGLE, function(e){
e.preventDefault();
var $_this=$(this);
$_this.trigger(Event.SHOW);
})
.on(Event.FOCUSIN, function(evt){
evt.preventDefault();
if($(evt.target).length > 0){
$(evt.target).addClass('hu-mm-focused');
}})
.on(Event.FOCUSOUT,function(evt){
evt.preventDefault();
var $_this=$(this);
_.delay(function(){
if($(evt.target).length > 0){
$(evt.target).removeClass('hu-mm-focused');
}
if(mobMenu.container.find('.hu-mm-focused').length < 1){
mobMenu('collapsed');
}}, 200);
});
var _clearMenus=function(mobMenu, $_toggle){
var _parentsToNotClear=$.makeArray($_toggle.parents(Selector.DD_TOGGLE_PARENT) ),
_toggles=$.makeArray($('.'+Classname.DD_TOGGLE, mobMenu.menu_wrapper) );
for (var i=0; i < _toggles.length; i++){
var _parent=$(_toggles[i]).closest(Selector.DD_TOGGLE_PARENT)[0];
if(!$(_parent).hasClass(Classname.SHOWN)||$.inArray(_parent, _parentsToNotClear) > -1){
continue;
}
$(_toggles[i]).trigger(Event.HIDE);
}};}}
};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
stickify:function(){
var self=this;
this.stickyCandidatesMap={
mobile:{
mediaRule:'only screen and (max-width: 719px)',
selector:'mobile-sticky'
},
desktop:{
mediaRule:'only screen and (min-width: 720px)',
selector:'desktop-sticky'
}};
this.stickyMenuWrapper=false;
this.stickyMenuDown=new czrapp.Value('_not_set_');
this.stickyHeaderThreshold=50;
this.currentStickySelector=new czrapp.Value('');
this.hasStickyCandidate=new czrapp.Value(false);
this.stickyHeaderAnimating=new czrapp.Value(false);
this.userStickyOpt=new czrapp.Value(self._setUserStickyOpt());
this.currentStickySelector.bind(function(to, from){
var _reset=function(){
czrapp.$_header.css({ 'height':'' }).removeClass('fixed-header-on');
self.stickyMenuDown(false);
self.stickyMenuWrapper=false;
self.hasStickyCandidate(false);
};
if(! _.isEmpty(to) ){
self.hasStickyCandidate(1==czrapp.$_header.find(to).length);
if(! self.hasStickyCandidate()){
_reset();
}else{
self.stickyMenuWrapper=czrapp.$_header.find(to);
var $_header_image=$('#header-image-wrap').find('img');
if(0 < $_header_image.length){
var _observeMutationOnHeaderImg=function(elementSelector, callback){
var onMutationsObserved=function(mutations){
mutations.forEach(function(mutation){
if('attributes'===mutation.type){
callback();
}});
},
target=$(elementSelector)[0],
config={ attributes:true },
MutationObserver=window.MutationObserver||window.WebKitMutationObserver,
observer=new MutationObserver(onMutationsObserved);
observer.observe(target, config);
};
_observeMutationOnHeaderImg('#header-image-wrap img', _.debounce(function(element){
czrapp.$_header.css('height' , '');
czrapp.$_header.css('height' , czrapp.$_header.height()).addClass('fixed-header-on');
}, 100) );
}else{
czrapp.$_header.css({ 'height':czrapp.$_header.height() }).addClass('fixed-header-on');
}}
}else{
_reset();
}});
this.scrollPosition.bind(function(to, from){
if(! self.hasStickyCandidate())
return;
if(Math.abs(to - from) <=5)
return;
self.stickyMenuDown(to < from);
});
var _maybeResetTop=function(){
if('up'==self.scrollDirection()){
self._mayBeresetTopPosition();
}};
czrapp.bind('scrolling-finished', _maybeResetTop);
czrapp.bind('topbar-collapsed', _maybeResetTop);
self.stickyMenuDown.validate=function(value){
if(! self.hasStickyCandidate())
return false;
if('stick_up'!=self.userStickyOpt())
return true;
if(self.scrollPosition() < self.stickyHeaderThreshold&&! value){
if(! self.isScrolling()){
czrapp.errorLog('Menu too close from top to be moved up');
}
return self.stickyMenuDown();
}else{
return value;
}};
self.stickyMenuDown.bind(function(to, from, args){
if(! _.isBoolean(to)||! self.hasStickyCandidate()){
return $.Deferred(function(){ return this.resolve().promise(); });
}
args=_.extend({
direction:to ? 'down':'up',
force:false,
menu_wrapper:self.stickyMenuWrapper,
fast:false
},
args||{}
);
return self._animate({ direction:args.direction, force:args.force, menu_wrapper:args.menu_wrapper, fast:args.fast });
}, { deferred:true });
self.isResizing.bind(function(is_resizing){
self.userStickyOpt(self._setUserStickyOpt());
self._setStickySelector();
if(self.hasStickyCandidate()){
self.stickyMenuDown(self.scrollPosition() < self.stickyHeaderThreshold ,  { fast:true }).done(function(){
czrapp.$_header.css('height' , '').removeClass('fixed-header-on');
if(self.hasStickyCandidate()){
czrapp.$_header.css('height' , czrapp.$_header.height()).addClass('fixed-header-on');
}});
}else{
self.stickyMenuDown(false).done(function(){
$('#header').css('padding-top', '');
});
}
if(! self._isMobileScreenSize()){
self._adjustDesktopTopNavPaddingTop();
}else{
$('.full-width.topbar-enabled #header').css('padding-top', '');
self._mayBeresetTopPosition();
}});
self._setStickySelector();
if(! self._isMobileScreenSize()&&self.hasStickyCandidate()){
self._adjustDesktopTopNavPaddingTop();
}},
_setStickySelector:function(){
var self=this,
_match_=false;
_.each(self.stickyCandidatesMap, function(_params, _device){
if(_.isFunction(window.matchMedia)&&matchMedia(_params.mediaRule).matches&&'no_stick'!=self.userStickyOpt()){
_match_=[ '.nav-container', _params.selector ].join('.');
}});
self.currentStickySelector(_match_);
},
_setUserStickyOpt:function(device){
var self=this;
if(_.isUndefined(device) ){
_.each(self.stickyCandidatesMap, function(_params, _device){
if(_.isFunction(window.matchMedia)&&matchMedia(_params.mediaRule).matches){
device=_device;
}});
}
device=device||'desktop';
return(HUParams.menuStickyUserSettings&&HUParams.menuStickyUserSettings[ device ]) ? HUParams.menuStickyUserSettings[ device ]:'no_stick';
},
_adjustDesktopTopNavPaddingTop:function(){
var self=this;
if(! self._isMobileScreenSize()&&self.hasStickyCandidate()){
$('.full-width.topbar-enabled #header').css('padding-top', czrapp.$_header.find(self.currentStickySelector()).outerHeight());
}else{
$('#header').css('padding-top', '');
}},
_mayBeresetTopPosition:function(){
var  self=this, $menu_wrapper=self.stickyMenuWrapper;
if('up'!=self.scrollDirection())
return;
if(! $menu_wrapper.length)
return;
if(self.scrollPosition() >=self.stickyHeaderThreshold)
return;
if(! self._isMobileScreenSize()){
self._adjustDesktopTopNavPaddingTop();
}
self.stickyMenuDown(true, { force:true, fast:true }).done(function(){
self.stickyHeaderAnimating(true);
(function(){
return $.Deferred(function(){
var dfd=this;
_.delay(function(){
if('up'==self.scrollDirection()&&self.scrollPosition() < 10){
$menu_wrapper.css({
'-webkit-transform': '',   
'-moz-transform': '',       
'-ms-transform': '',        
'-o-transform': '',         
transform: ''
});
}
self.stickyHeaderAnimating(false);
dfd.resolve();
}, 10);
}).promise();
})().done(function(){ });
});
},
_animate:function(args){
args=_.extend({
direction:'down',
force:false,
menu_wrapper:{},
fast:false
},
args||{}
);
var dfd=$.Deferred(),
self=this,
$menu_wrapper = ! args.menu_wrapper.length ? czrapp.$_header.find(self.currentStickySelector()):args.menu_wrapper,
_startPosition=self.scrollPosition(),
_endPosition=_startPosition;
if(! $menu_wrapper.length)
return dfd.resolve().promise();
if(! czrapp.$_header.hasClass('fixed-header-on') ){
czrapp.$_header.addClass('fixed-header-on');
}
var _do=function(){
var translateYUp=$menu_wrapper.outerHeight(),
translateYDown=0,
_translate;
if(args.fast){
$menu_wrapper.addClass('fast');
}
if(_.isFunction(window.matchMedia)&&matchMedia('screen and (max-width: 600px)').matches&&1==czrapp.$_wpadminbar.length){
translateYDown=translateYDown - $menu_wrapper.outerHeight();
}
_translate='up'==args.direction ? 'translate(0px, -' + translateYUp + 'px)':'translate(0px, -' + translateYDown + 'px)';
self.stickyHeaderAnimating(true);
self.stickyHeaderAnimationDirection=args.direction;
$menu_wrapper.toggleClass('sticky-visible', 'down'==args.direction);
$menu_wrapper.css({
'-webkit-transform': _translate,   
'-moz-transform': _translate,       
'-ms-transform': _translate,        
'-o-transform': _translate,         
transform: _translate
});
_.delay(function(){
self.stickyHeaderAnimating(false);
if(args.fast){
$menu_wrapper.removeClass('fast');
}
dfd.resolve();
}, args.fast ? 100:350);
};
_.delay(function(){
var sticky_menu_id=_.isString($menu_wrapper.attr('data-menu-id')) ? $menu_wrapper.attr('data-menu-id'):'';
if(czrapp.userXP.mobileMenu.has(sticky_menu_id) ){
czrapp.userXP.mobileMenu(sticky_menu_id)('collapsed').done(function(){
_do();
});
}else{
_do();
}}, 50);
return dfd.promise();
}};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
sidebarToLife:function(){
var self=this;
self.sidebars=new czrapp.Values();
self.maxColumnHeight=new czrapp.Value(self._getMaxColumnHeight());
self.maxColumnHeight.bind(function(to){
self.sidebars.each(function(_sb_){
if(_sb_.isStickyfiable()){
_sb_._setStickyness();
}});
});
czrapp.isMobileUserAgent=new czrapp.Value('1'==HUParams.isWPMobile);
if(! _.isUndefined(window.MobileDetect)&&_.isFunction(window.MobileDetect) ){
var _md=new MobileDetect(window.navigator.userAgent);
czrapp.isMobileUserAgent(! _.isNull(_md.mobile()) );
}
self.sidebars.stickyness=new czrapp.Value({});
self.sidebars.stickyness.bind(function(state){
var _isAfterTop=true;
self.sidebars.each(function(_sb_){
_isAfterTop='top'!=_sb_.stickyness()&&_isAfterTop;
});
czrapp.$_mainWrapper.css({ overflow:_isAfterTop ? 'hidden':'' });
});
czrapp.ready.then(function(){
czrapp.userXP.stickyHeaderAnimating.bind(function(animating){
if(! self._isStickyOptionOn())
return;
self.sidebars.each(function(_sb_){
_sb_._translateSbContent(czrapp.userXP.stickyMenuDown());
});
});
});
czrapp.$_window.on('scroll', _.throttle(function(){
if(! self._isStickyOptionOn())
return;
self.sidebars.each(function(_sb_){
if(_sb_.isStickyfiable()){
_sb_._setStickyness();
}});
}, 10) );//window.scroll() throttled
czrapp.$_window.on('scroll', _.throttle(function(){
czrapp.userXP.maxColumnHeight(czrapp.userXP._getMaxColumnHeight());
self.sidebars.each(function(_sb_){
if(_sb_.isStickyfiable()&&'expanded'==_sb_()){
_sb_._stickify();
}});
}, 300) );//window.scroll() throttled
czrapp.userXP.windowWidth.bind(function(width){
czrapp.userXP.maxColumnHeight(czrapp.userXP._getMaxColumnHeight());
self.sidebars.each(function(_sb_){
_sb_.isStickyfiable(_sb_._isStickyfiable());
_sb_('collapsed').done(function(){
_sb_._stickify();
});
});
});
$('.s1, .s2', '#wrapper .main').each(function(index){
if(! _.isString($(this).attr('data-sb-id'))||_.isEmpty($(this).attr('data-sb-id')) )
return;
var $container=$(this),
_id=$container.attr('data-sb-id'),
_position=$container.attr('data-position'),
_userLayout=$container.attr('data-layout'),
ctor;
if(! _.isString(_position)||! _.isString(_userLayout)||! _.isString(_id) ){
throw new Error('Missing id, position or layout for sidebar ' + _id);
}
if(1!=$container.find('.sidebar-content').length||1!=$container.find('.sidebar-toggle').length){
throw new Error('Missing content or toggle button for sidebar ' + _id);
}
ctor=czrapp.Value.extend(self.SidebarCTOR);
self.sidebars.add(_id, new ctor(_id, {
container:$container,
position:_position,
layout:_userLayout,
extended_width:'s1'==_id ? HUParams.sidebarOneWidth:HUParams.sidebarTwoWidth
}));
});//$('.s1, .s2', '#wrapper').each()
},
_isUserStickyOnMobiles:function(){
if(HUParams.sbStickyUserSettings&&_.isObject(HUParams.sbStickyUserSettings) ){
var _dbOpt=_.extend({ mobile:false }, HUParams.sbStickyUserSettings);
return _dbOpt.mobile||false;
}else{
return false;
}},
_isUserStickyOnDesktops:function(){
if(HUParams.sbStickyUserSettings&&_.isObject(HUParams.sbStickyUserSettings) ){
var _dbOpt=_.extend({ desktop:false }, HUParams.sbStickyUserSettings);
return _dbOpt.desktop||false;
}else{
return false;
}},
_isStickyOptionOn:function(){
var _isMobileScreenSize=false, self=this;
if(self._isUserStickyOnMobiles()||self._isUserStickyOnDesktops()){
_isMobileScreenSize=czrapp.isMobileUserAgent() ? true:czrapp.userXP._isMobileScreenSize();
return _isMobileScreenSize ? self._isUserStickyOnMobiles():self._isUserStickyOnDesktops();
}else{
return false;
}},
_getMaxColumnHeight:function(){
var _hs=[];
czrapp.userXP.sidebars.each(function(_sb_){
_hs.push(_sb_._getVisibleHeight());
});
$('.content', '#wrapper .main').each(function(){
if(1==$(this).length)
_hs.push($(this).outerHeight());
});
return Math.max.apply(null, _hs);
},
SidebarCTOR:{
initialize:function(id, options){
if(! $.isReady){
throw new Error('Sidebars must be instantiated on DOM ready');
}
var sb=this;
sb.id=id;
$.extend(sb, options||{});
sb.button_selectors='.sidebar-toggle';
sb.button=sb.container.find(sb.button_selectors);
czrapp.Value.prototype.initialize.call(sb, null, options);
sb.stickyness=new czrapp.Value();
sb.animating=new czrapp.Value(false);
sb.isStickyfiable=new czrapp.Value(sb._isStickyfiable());
czrapp.setupDOMListeners([
{
trigger:'focusin mousedown keydown',
selector:sb.button_selectors,
actions:function(){
var sb=this;
czrapp.userXP.sidebars.each(function(_sb_){
_sb_(_sb_.id==sb.id ? _sb_():'collapsed');
});
sb('collapsed'==sb() ? 'expanded':'collapsed').done(function(){
sb._stickify();
});
}},
{
trigger:'mouseenter',
selector:sb.button_selectors,
actions:function(){
this.button.addClass('hovering');
}},
{
trigger:'mouseleave',
selector:sb.button_selectors,
actions:function(){
this.button.removeClass('hovering');
}}
],
{ dom_el: sb.container },
sb
);
sb('collapsed');
sb.container.css({
'-webkit-transform': 'translateZ(0)',
'-moz-transform': 'translateZ(0)',       
'-ms-transform': 'translateZ(0)',        
'-o-transform': 'translateZ(0)',         
transform: 'translateZ(0)'
});
sb.bind(function(state){
return $.Deferred(function(){
var dfd=this;
sb._toggleSidebar()
.done(function(state){
sb.button.toggleClass('hovering', 'expanded'==state);
dfd.resolve();
});
}).promise();
}, { deferred:true });
sb.validate=function(value){
return this._isExpandable() ? value:'collapsed';
};
sb.stickyness.bind(function(to, from){
_stckness=$.extend({}, true, _.isObject(czrapp.userXP.sidebars.stickyness()) ? czrapp.userXP.sidebars.stickyness():{});
_stckness[ sb.id ]=to;
czrapp.userXP.sidebars.stickyness(_stckness);
var _state=to;
if(sb._isHighestColumn()&&'between'==_state){
switch(from){
case 'top' :
_state='bottom';
break;
case 'bottom' :
_state='top';
break;
}}
sb._stickify(_state);
});
sb.isStickyfiable.bind(function(isStickyfiable){
if(! isStickyfiable)
sb._resetStickyness();
});
},
_setStickyness:function(){
var sb=this;
if(! sb.isStickyfiable())
return;
var startStickingY=czrapp.$_mainWrapper.offset().top,
contentBottomToTop=startStickingY + czrapp.userXP.maxColumnHeight(),//czrapp.userXP._getMaxColumnHeight()
topSpacing=0,
scrollTop=czrapp.$_window.scrollTop(),
stopStickingY=contentBottomToTop -(sb.container.outerHeight() + topSpacing);
if(stopStickingY < 0)
return;
sb.stickyness(( function(){
if(scrollTop >=stopStickingY){
return 'bottom';
}else if(scrollTop >=startStickingY){
return 'between';
}else if(scrollTop < startStickingY){
return 'top';
}})());
},
_stickify:function(stickyness){
var sb=this;
if(! sb.isStickyfiable())
return;
stickyness=stickyness||sb.stickyness();
czrapp.userXP.maxColumnHeight(czrapp.userXP._getMaxColumnHeight(), { silent:true });
var contentBottomToTop=czrapp.$_mainWrapper.offset().top + czrapp.userXP.maxColumnHeight(),
expanded='expanded'==sb();
switch(stickyness){
case 'top' :
sb._resetStickyness();
break;
case 'between' :
sb.container.addClass('sticky');
sb._translateSbContent();
if(! expanded){
sb.container.css({
position:'fixed',
top:'0px',
height:expanded ? Math.max(sb._getInnerHeight(), czrapp.$_window.height()) + 'px':'',
left:sb._getStickyXOffset(),
'padding-bottom':expanded ? 0:'',
});
}else{
sb._resetStickyness();
}
break;
case 'bottom' :
sb._resetStickyness();
if(! sb._isHighestColumn()){
sb.container.offset({ top: contentBottomToTop - sb.container.outerHeight() });
}
break;
}},
_toggleSidebar:function(){
var sb=this,
expanded='expanded'==sb();
return $.Deferred(function(){
var _dfd_=this;
var _transX,
_marginRight,
_marginLeft,
_translate;
(function(){
return $.Deferred(function(){
var _dfd=this;
sb.animating(true);
czrapp.$_body
.toggleClass('sidebar-expanded', expanded)
.toggleClass('sidebar-expanding', expanded)
.toggleClass('sidebar-collapsing', ! expanded);
sb.container
.toggleClass('expanding', expanded)
.toggleClass('collapsing', ! expanded);
switch(sb.position){
case 'right' :
_transX=-(sb.extended_width - 50);
if('col-3cl'==sb.layout){
_marginRight=expanded ? - sb.extended_width - 50:-100;
}else{
_marginRight=expanded ? - sb.extended_width:-50;
}
break;
case 'middle-right' :
_transX=-(sb.extended_width - 50);
_marginRight=expanded ? - sb.extended_width:-50;
break;
case 'middle-left' :
_transX=sb.extended_width - 50;
_marginLeft=expanded ? - sb.extended_width:-50;
break;
case 'left' :
_transX=sb.extended_width - 50;
if('col-3cr'==sb.layout){
_marginLeft=expanded ? - sb.extended_width - 50:-100;
}else{
_marginLeft=expanded ? - sb.extended_width:-50;
}
break;
}
_transX=expanded ? _transX:0;
_translate='translate3d(' + _transX + 'px,0px,0px)';
sb.container.css({
width:expanded ? sb.extended_width + 'px':'50px',
'margin-right':_.isEmpty(_marginRight + '') ? '':_marginRight + 'px',
'margin-left':_.isEmpty(_marginLeft + '') ? '':_marginLeft + 'px',
height:expanded ? sb._getExpandedHeight() + 'px':sb.container.height() + 'px',
'-webkit-transform': _translate,   
'-moz-transform': _translate,       
'-ms-transform': _translate,        
'-o-transform': _translate,         
transform: _translate
});
czrapp.$_mainContent.css({
'-webkit-transform': _translate,   
'-moz-transform': _translate,       
'-ms-transform': _translate,        
'-o-transform': _translate,         
transform: _translate,
});
sb.container.find('.sidebar-content').css('opacity', expanded ? 0:1);
sb.container.find('.sidebar-toggle-arrows').css('opacity', 0);
_.delay(function(){
_dfd.resolve();
}, 350);
}).promise();
})().done(function(){
sb.container.toggleClass('expanded', expanded).toggleClass('collapsed', ! expanded);
sb.container
.removeClass('expanding')
.removeClass('collapsing')
.css({
width:expanded ? sb.extended_width + 'px':'',
'margin-right':'',
'margin-left':'',
height:expanded ? sb._getExpandedHeight() + 'px':'',
});
sb.container.find('.sidebar-toggle-arrows').css('opacity', 1);
sb.container.find('.sidebar-content')
.css({
opacity:'',
});
sb.animating(false);
czrapp.$_body.removeClass('sidebar-expanding').removeClass('sidebar-collapsing');
czrapp.userXP.maxColumnHeight(czrapp.userXP._getMaxColumnHeight());
if(sb.isStickyfiable()){
sb._setStickyness();
}
if(expanded){
var $_scrollTopEl=1==$('#ha-large-header').length ? $('#ha-large-header'):czrapp.$_header;
$('html, body').animate({
scrollTop: $_scrollTopEl.height()
}, {
duration: 'slow',
complete:function(){
_dfd_.resolve();
}});
}else{
_dfd_.resolve();
}});
}).promise();
},
_resetStickyness:function(){
var sb=this;
sb.container.removeClass('sticky');
sb.container
.css({
position:'',
top:'',
left:'',
right:'',
'margin-left':'',
'margin-right':'',
'padding-bottom':'',
'min-height':''
});
if('expanded'!=sb()){
sb.container.css('height' , '');
}
sb._translateSbContent();
},
_translateSbContent:function(stickyMenuDown){
if(this._isHighestColumn())
return;
stickyMenuDown=stickyMenuDown||czrapp.userXP.stickyMenuDown();
var sb=this,
translateYUp=0,
translateYDown=0,
_translate='',
_stickyMenuWrapper=czrapp.userXP.stickyMenuWrapper,
_stickyMenuHeight=1==_stickyMenuWrapper.length ? _stickyMenuWrapper.height():50;
if('between'==sb.stickyness()){
if(1==czrapp.$_wpadminbar.length&&czrapp.userXP.hasStickyCandidate()){
translateYUp=translateYUp + czrapp.$_wpadminbar.outerHeight();
translateYDown=translateYDown + czrapp.$_wpadminbar.outerHeight();
}
if(stickyMenuDown&&czrapp.userXP.hasStickyCandidate()){
translateYUp=translateYUp + _stickyMenuHeight;
}}
_translate=(stickyMenuDown&&'between'==sb.stickyness()) ? 'translate(0px, ' + translateYUp + 'px)':'translate(0px, ' + translateYDown + 'px)';
sb.container.find('.sidebar-content, .sidebar-toggle').css({
'-webkit-transform': _translate,   
'-moz-transform': _translate,       
'-ms-transform': _translate,        
'-o-transform': _translate,         
transform: _translate
});
},
_getStickyXOffset:function(){
var sb=this,
expanded='expanded'==sb(),
$mainWrapper=$('.main', '#wrapper'),
$mainContent=$mainWrapper.find('.content'),
xFixedOffset='';
if('between'!=sb.stickyness())
return '';
switch(sb.position){
case 'left' :
if(expanded){
xFixedOffset=$mainWrapper.offset().left + 50;
}else{
xFixedOffset=$mainWrapper.offset().left + sb.container.width();
}
if('col-3cr'==sb.layout){
if(expanded){
xFixedOffset=$mainWrapper.offset().left + czrapp.userXP.sidebars('s2').container.width() + 50;
}else{
xFixedOffset='';
}}
break;
case 'middle-left' :
xFixedOffset=czrapp.userXP.sidebars('s1').container.width() + $mainWrapper.offset().left + 50;
if('col-3cr'==sb.layout){
if(expanded){
}else{
xFixedOffset='';
}}
break;
case 'middle-right' :
xFixedOffset=$mainWrapper.offset().left + $mainContent.outerWidth();
break;
case 'right' :
if(expanded){
xFixedOffset=$mainWrapper.offset().left + $mainWrapper.outerWidth() - 50;
}else{
xFixedOffset=$mainWrapper.offset().left + $mainWrapper.outerWidth() - sb.container.width();
}
break;
}
return _.isEmpty(xFixedOffset) ? xFixedOffset:xFixedOffset + 'px';
},
_getExpandedHeight:function(){
var sb=this,
_winHeight=czrapp.$_window.height(),
_contentBottomToTop=czrapp.$_mainWrapper.offset().top + czrapp.$_mainWrapper.find('.content').outerHeight() - sb.container.offset().top,
_maxColHeight=czrapp.userXP.maxColumnHeight();
return Math.max(_winHeight, sb._getInnerHeight());
},
_isExpandable:function(){
return _.isFunction(window.matchMedia)&&matchMedia('only screen and (min-width: 480px) and (max-width: 1200px)').matches;
},
_isStickyfiable:function(){
return czrapp.userXP._isStickyOptionOn() &&
1==czrapp.$_mainWrapper.length &&
1==czrapp.$_mainContent.length &&
_.isFunction(window.matchMedia)&&matchMedia('only screen and (min-width: 480px)').matches;
},
_isHighestColumn:function(){
return czrapp.userXP.maxColumnHeight()==this._getInnerHeight();
},
_getInnerHeight:function(){
return this.container.find('.sidebar-content').height() + this.container.find('.sidebar-toggle').height();
},
_getVisibleHeight:function(){
return 'expanded'==this() ? this._getInnerHeight():this.container.height();
}}
};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
fittext:function(){
if(! _.isObject(HUParams.fitTextMap) )
return;
var _userBodyFontSize=_.isNumber(HUParams.userFontSize)&&HUParams.userFontSize * 1 > 0 ? HUParams.userFontSize:16,
_fitTextMap=HUParams.fitTextMap,
_fitTextCompression=HUParams.fitTextCompression;
if(_.size(_fitTextMap) < 1){
czrapp.errorLog('Unable to apply fittext params, wrong HUParams.fitTextMap.');
return;
}
_.each(_fitTextMap, function(data, key){
if(! _.isObject(data) )
return;
data=_.extend({
selectors:'',
minEm:1,
maxEm:1
}, data);
if(1 > $(data.selectors).length)
return;
var _compressionRatio=(data.compression&&_.isNumber(data.compression) ) ? data.compression:_.isNumber(_fitTextCompression) ? _fitTextCompression:1.5;
$(data.selectors).fitText(_compressionRatio, {
minFontSize:(Math.round(data.minEm * _userBodyFontSize * 100) / 100) + 'px',
maxFontSize:(Math.round(data.maxEm * _userBodyFontSize * 100) / 100) + 'px'
}).addClass('fittexted_for_' + key);
});
},
outline: function(){
if(czrapp.$_body.hasClass('mozilla')&&'function'==typeof(tcOutline) )
tcOutline();
},
topNavToLife:function(){
var self=this,
_sel='.topbar-toggle-down',
$topbar=$('#nav-topbar.desktop-sticky'),
$topbarNavWrap=$topbar.find('.nav-wrap');
self.topNavExpanded=new czrapp.Value(false);
if(1!=$('#nav-topbar.desktop-sticky').length||1!=$('#nav-topbar.desktop-sticky').find('.nav-wrap').length)
return;
var _mayBeToggleArrow=function(force){
$(_sel, $topbar).css({
display:(( $topbarNavWrap.height() > 60||force)&&! czrapp.userXP._isMobileScreenSize()) ? 'inline-block':''
});
};
var _updateMaxWidth=function(){
$topbar.css({ 'max-width':czrapp.$_window.width() });
};
_.delay(_mayBeToggleArrow, 100);
_updateMaxWidth();
czrapp.userXP.windowWidth.bind(function(){
_updateMaxWidth();
_mayBeToggleArrow();
czrapp.userXP.topNavExpanded(false);
});
self.topNavExpanded.bind(function(exp, from, params){
params=_.extend({ height:0 }, params||{});
return $.Deferred(function(){
var _dfd=this,
_expandHeight=Math.max($topbarNavWrap.height(), params.height);
_mayBeToggleArrow(exp);
czrapp.userXP.headerSearchExpanded(false).done(function(){
$.when($('#header').toggleClass('topbar-expanded', exp) ).done(function(){
$(_sel, $topbar).find('i[data-toggle="' +(exp ? 'down':'up') + '"]').css({ opacity:0 });
$topbar.css({
height:exp ? _expandHeight + 'px':'50px',
overflow:exp ? 'visible':''
});
_.delay(function(){
$(_sel, $topbar).find('i[data-toggle="' +(exp ? 'down':'up') + '"]').css({ display :'none' });
$(_sel, $topbar).find('i[data-toggle="' +(exp ? 'up':'down') + '"]').css({ display :'inline-block' , opacity:exp ? 1:'' });
_dfd.resolve();
if(! exp){
_mayBeToggleArrow();
czrapp.trigger('topbar-collapsed');
}}, 250);
});
});
}).promise();
}, { deferred:true });
czrapp.setupDOMListeners([
{
trigger:'click keydown',
selector:_sel,
actions:function(){
czrapp.userXP.topNavExpanded(! czrapp.userXP.topNavExpanded());
}},
],
{ dom_el: $('#header') },
czrapp.userXP
);
if(czrapp.userXP.stickyHeaderAnimating){
czrapp.userXP.stickyHeaderAnimating.bind(function(animating){
czrapp.userXP.topNavExpanded(false);
});
}},
headerSearchToLife:function(){
var self=this,
_sel='.toggle-search',
$topbar=$('#nav-topbar.desktop-sticky');
self.headerSearchExpanded=new czrapp.Value(false);
self.headerSearchExpanded.bind(function(exp){
return $.Deferred(function(){
var _dfd=this;
$.when($(_sel, '#header').toggleClass('active', exp) ).done(function(){
if(exp){
$topbar.css({
overflow:! exp ? '':'visible',
height:czrapp.userXP.topNavExpanded() ?(1==$topbar.find('.nav-wrap').length ? $topbar.find('.nav-wrap').height():'auto'):''
});
}
$('.search-expand', '#header').stop()[ ! exp ? 'slideUp':'slideDown' ]( {
duration:250,
complete:function(){
if(exp){
$('.search-expand input', '#header').trigger('focus');
}else{
$topbar.css({ overflow:'' });
if(! czrapp.userXP.topNavExpanded()){
$topbar.css({ height:'' });
}}
_dfd.resolve();
}});
});
}).promise();
}, { deferred:true });
czrapp.setupDOMListeners([
{
trigger:'mousedown keydown',
selector:_sel,
actions:function(){
czrapp.userXP.headerSearchExpanded(! czrapp.userXP.headerSearchExpanded());
}},
],
{ dom_el: $('#header') },
czrapp.userXP
);
czrapp.userXP.windowWidth.bind(function(){
self.headerSearchExpanded(false);
});
if(czrapp.userXP.stickyHeaderAnimating){
czrapp.userXP.stickyHeaderAnimating.bind(function(animating){
self.headerSearchExpanded(false);
});
}
$(_sel, '#header').on('focusin', function(evt){
self.headerSearchExpanded(true);
});
},
scrollToTop:function(){
$('a#back-to-top').on('click', function(){
$('html, body').animate({scrollTop:0},'slow');
return false;
});
},
widgetTabs:function(){
var $tabsNav=$('.alx-tabs-nav'),
$tabsNavLis=$tabsNav.children('li'),
$tabsContainer=$('.alx-tabs-container');
$tabsNav.each(function(){
var $_el=$(this);
$_el
.next()
.children('.alx-tab')
.stop(true,true)
.hide()
.siblings($_el.find('a').attr('href')).show();
$_el.children('li').first().addClass('active').stop(true,true).show();
});
$tabsNavLis.on('click', function(e){
var $this=$(this);
$this.siblings().removeClass('active').end()
.addClass('active');
$this.parent().next().children('.alx-tab').stop(true,true).hide()
.siblings($this.find('a').attr('href')).fadeIn();
e.preventDefault();
}).children(window.location.hash ? 'a[href="' + window.location.hash + '"]':'a:first').trigger('click');
},
commentTabs:function(){
$(".comment-tabs li").on('click', function(){
$(".comment-tabs li").removeClass('active');
$(this).addClass("active");
$(".comment-tab").hide();
var selected_tab=$(this).find("a").attr("href");
$(selected_tab).fadeIn();
return false;
});
},
tableStyle:function(){
$('table tr:odd').addClass('alt');
},
dropdownMenu:function(){
var self=this,
$topbar=$('#nav-topbar.desktop-sticky'),
_isHoveringInTopBar=false;
$topbar.on('mouseenter', function(){
if(czrapp.userXP.topNavExpanded()||czrapp.userXP._isMobileScreenSize())
return;
_isHoveringInTopBar=true;
$topbar.css({
overflow:'visible',
height:1==$topbar.find('.nav-wrap').length ? $topbar.find('.nav-wrap').height():'auto'
});
}).on('mouseleave', function(){
if(czrapp.userXP.topNavExpanded()||czrapp.userXP._isMobileScreenSize())
return;
_isHoveringInTopBar=false;
_.delay(function(){
if(_isHoveringInTopBar)
return;
if(! czrapp.userXP.topNavExpanded()&&! czrapp.userXP.headerSearchExpanded()){
$topbar.css({ overflow:'', height:'' });
_.delay(function(){
czrapp.trigger('topbar-collapsed');
}, 400);
}}, 1000);
});
czrapp.$_body.on('touchstart', function(){
if(!$(this).hasClass('is-touch-device')){
$(this).addClass('is-touch-device');
}});
var isTouchDeviceWithHorizontalMenu=function(){
return !czrapp.userXP._isMobileScreenSize()&&czrapp.$_body.hasClass('is-touch-device');
};
$('.nav li').on('click', 'a', function(evt){
if(czrapp.userXP._isMobileScreenSize()||!isTouchDeviceWithHorizontalMenu())
return;
var $menu_item=$(this).closest('.menu-item');
$('.nav li').not($menu_item).removeClass('hu-children-item-opened');
$menu_item.children('ul.sub-menu').css('opacity', 1);
if($menu_item.hasClass('menu-item-has-children')&&!$menu_item.hasClass('hu-children-item-opened')){
evt.preventDefault();
$menu_item.addClass('hu-children-item-opened');
$menu_item.children('ul.sub-menu').hide().stop().slideDown({
duration:'fast',
complete:czrapp.userXP.onSlidingCompleteResetCSS
});
}});
$('.nav li').on('mouseenter', function(){
if(czrapp.userXP._isMobileScreenSize()||isTouchDeviceWithHorizontalMenu())
return;
$(this).children('ul.sub-menu').hide().stop().slideDown({
duration:'fast',
complete:czrapp.userXP.onSlidingCompleteResetCSS
})
.css('opacity', 1);
}).on('mouseleave', function(){
if(czrapp.userXP._isMobileScreenSize()||isTouchDeviceWithHorizontalMenu())
return;
$(this).children('ul.sub-menu').stop().css('opacity', '').slideUp({
duration:'fast',
complete:czrapp.userXP.onSlidingCompleteResetCSS
});
});
$('.nav li').on('focusin', 'a', function(){
if(czrapp.userXP._isMobileScreenSize()||isTouchDeviceWithHorizontalMenu())
return;
$(this).addClass('hu-focused');
$(this).closest('.nav li').children('ul.sub-menu').hide().stop().slideDown({
duration:'fast'
})
.css('opacity', 1);
});
$('.nav li').on('focusout', 'a', function(){
var $el=$(this);
_.delay(function(){
$el.removeClass('hu-focused');
if(czrapp.userXP._isMobileScreenSize()||isTouchDeviceWithHorizontalMenu())
return;
if($('.nav li').find('.hu-focused').length < 1){
$('.nav li').each(function(){
$(this).children('ul.sub-menu').stop().css('opacity', '').slideUp({
duration:'fast'
});
});
}
if($el.closest('.nav li').children('ul.sub-menu').find('.hu-focused').length < 1){
$el.closest('.nav li').children('ul.sub-menu').stop().css('opacity', '').slideUp({
duration:'fast'
});
}}, 250);
});
},
gutenbergAlignfull:function(){
var _isPage=czrapp.$_body.hasClass('page'),
_isSingle=czrapp.$_body.hasClass('single'),
_coverImageSelector='.full-width.col-1c .alignfull[class*=wp-block-cover]',
_alignFullSelector='.full-width.col-1c .alignfull[class*=wp-block-]',
_alignTableSelector=[
'.boxed .themeform .wp-block-table.alignfull',
'.boxed .themeform .wp-block-table.alignwide',
'.full-width.col-1c .themeform .wp-block-table.alignwide'
],
_coverWParallaxImageSelector=_coverImageSelector + '.has-parallax',
_classParallaxTreatmentApplied='hu-alignfull-p',
_styleId='hu-gutenberg-alignfull',
$_refWidthElement=czrapp.$_body,
$_refContainedWidthElement=$('section.content', $_refWidthElement);
if(!(_isPage||_isSingle) ){
return;
}
if(_isSingle){
_coverImageSelector='.single' + _coverImageSelector;
_alignFullSelector='.single' + _alignFullSelector;
_alignTableSelector='.single' + _alignTableSelector.join(',.single');
}else{
_coverImageSelector='.page' + _coverImageSelector;
_alignFullSelector='.page' + _alignFullSelector;
_alignTableSelector='.page' + _alignTableSelector.join(',.page');
}
if($(_alignFullSelector).length > 0){
_add_alignelement_style($_refWidthElement, _alignFullSelector, 'hu-gb-alignfull');
if($(_coverWParallaxImageSelector).length > 0){
_add_parallax_treatment_style();
}
czrapp.userXP.windowWidth.bind(function(){
_add_alignelement_style($_refWidthElement, _alignFullSelector, 'hu-gb-alignfull');
_add_parallax_treatment_style();
});
}
if($(_alignTableSelector).length > 0){
_add_alignelement_style($_refContainedWidthElement, _alignTableSelector, 'hu-gb-aligntable');
czrapp.userXP.windowWidth.bind(function(){
_add_alignelement_style($_refContainedWidthElement, _alignTableSelector, 'hu-gb-aligntable');
});
}
function _add_parallax_treatment_style(){
$(_coverWParallaxImageSelector).each(function(){
$(this)
.css('left', '')
.css('left', -1 * $(this).offset().left)
.addClass(_classParallaxTreatmentApplied);
});
}
function _add_alignelement_style($_refElement, _selector, _styleId){
var newElementWidth=$_refElement[0].getBoundingClientRect().width,
$_style=$('head #' + _styleId);
if(1 > $_style.length){
$_style=$('<style />', { 'id':_styleId });
$('head').append($_style);
$_style=$('head #' + _styleId);
}
$_style.html(_selector + '{width:'+ newElementWidth +'px}');
}},
triggerResizeEventsToAjustHeaderHeightOnInit:function(){
var $logoImg=$('.site-title').find('img');
if($logoImg.length > 0){
if($logoImg[0].complete){
czrapp.$_window.trigger('resize');
}else{
$logoImg.on('load', function(img){
czrapp.$_window.trigger('resize');
});
}}
var _triggerResize=function(n){
n=n||1;
if(n > 3)
return;
_.delay(function(){
n++;
czrapp.$_window.trigger('resize');
_triggerResize(n);
}, 3000);
};
_triggerResize();
},
mayBeLoadFontAwesome:function(){
jQuery(function(){
if(!HUParams.deferFontAwesome){
$('body').removeClass('hu-fa-not-loaded');
return;
}
var $candidates=$('[class*=fa-]');
if($candidates.length < 1)
return;
var hasPreloadSupport=function(browser){
var link=document.createElement('link');
var relList=link.relList;
if(!relList||!relList.supports)
return false;
return relList.supports('preload');
};
if($('head').find('[href*="font-awesome.min.css"]').length < 1){
var link=document.createElement('link');
link.onload=function(){
this.onload=null;
_.delay(function(){
link.setAttribute('rel', 'stylesheet');
$('body').removeClass('hu-fa-not-loaded');
}, 500);
};
link.setAttribute('href', HUParams.fontAwesomeUrl);
link.setAttribute('id', 'hu-font-awesome');
link.setAttribute('rel', hasPreloadSupport() ? 'preload':'stylesheet');
link.setAttribute('as', 'style');
link.setAttribute('type', 'text/css');
link.setAttribute('media', 'all');
document.getElementsByTagName('head')[0].appendChild(link);
}else{
$('body').removeClass('hu-fa-not-loaded');
}
_.delay(function(){
$('body').removeClass('hu-fa-not-loaded');
}, 1000);
});
},
maybeFireFlexSlider:function(){
if(!HUParams.flexSliderNeeded)
return;
var _fireWhenFlexReady=function(){
var $flexForFeaturedPosts=$('#flexslider-featured');
if($flexForFeaturedPosts.length > 0){
var $_firstImage=$flexForFeaturedPosts.find('img').filter(':first'),
checkforloaded=setInterval(function(){
if($_firstImage.length < 1)
return;
var image=$_firstImage.get(0);
if(image){
clearInterval(checkforloaded);
$.when($flexForFeaturedPosts.flexslider({
animation: "slide",
useCSS: true,
controlNav: true,
pauseOnHover: true,
animationSpeed: 400,
smoothHeight: true,
rtl: HUParams.flexSliderOptions.is_rtl,
touch: HUParams.flexSliderOptions.has_touch_support,
slideshow: HUParams.flexSliderOptions.is_slideshow,
slideshowSpeed: HUParams.flexSliderOptions.slideshow_speed
})).done(function(){
var $_self=$(this);
_trigger=function($_self){
$_self.trigger('featured-slider-ready');
};
_trigger=_.debounce(_trigger, 100);
_trigger($_self);
});
}}, 20);
}
var $flexForGalleryPostFormat=$('[id*="flexslider-for-gallery-post-format-"]');
var $firstImage=$flexForGalleryPostFormat.find('img').filter(':first'),
_checkforloaded=setInterval(function(){
if($firstImage.length < 1)
return;
var image=$firstImage.get(0);
if(image){
clearInterval(_checkforloaded);
$flexForGalleryPostFormat.flexslider({
animation: HUParams.isWPMobile ? 'slide':'fade',
rtl: HUParams.flexSliderOptions.is_rtl,
slideshow: true,
directionNav: true,
controlNav: true,
pauseOnHover: true,
slideshowSpeed: 7000,
animationSpeed: 600,
smoothHeight: true,
touch: HUParams.flexSliderOptions.has_touch_support
});
}}, 20);
};
jQuery(function($){
if('function'===typeof $.fn.flexslider){
_fireWhenFlexReady();
}else{
czrapp.$_window.on('hu-flexslider-parsed', _fireWhenFlexReady);
}});
}};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function($, czrapp){
var _methods={
mayBePrintWelcomeNote:function(){
if(! HUParams.isWelcomeNoteOn)
return;
var self=this;
czrapp.welcomeNoteVisible=new czrapp.Value(false);
czrapp.welcomeNoteVisible.bind(function(visible){
return self._toggleWelcNote(visible);
}, { deferred:true });
czrapp.welcomeNoteVisible(true);
},
_toggleWelcNote:function(visible){
var self=this,
dfd=$.Deferred();
var _hideAndDestroy=function(){
return $.Deferred(function(){
var _dfd_=this,
$welcWrap=$('#bottom-welcome-note', '#footer');
if(1==$welcWrap.length){
$welcWrap.css({ bottom:'-100%' });
_.delay(function(){
$welcWrap.remove();
_dfd_.resolve();
}, 450);
}else{
_dfd_.resolve();
}});
};
var _renderAndSetup=function(){
var _dfd_=$.Deferred(),
$footer=$('#footer', '#wrapper');
$.Deferred(function(){
var dfd=this,
_html=HUParams.welcomeContent;
if(1==$footer.length){
$footer.append(_html);
_.delay(function(){
$('#bottom-welcome-note', '#footer').css({ bottom:0 });
dfd.resolve();
}, 500);
}else{
dfd.resolve();
}}).done(function(){
czrapp.setupDOMListeners([
{
trigger:'click keydown',
selector:'.close-note',
actions:function(){
czrapp.welcomeNoteVisible(false).done(function(){
czrapp.doAjax({ action: "dismiss_welcome_front", withNonce:true });
});
}}
],
{ dom_el: $footer },
self
);
_dfd_.resolve();
});
return _dfd_.promise();
};
if(visible){
_.delay(function(){
_renderAndSetup().always(function(){
dfd.resolve();
});
}, 3000);
}else{
_hideAndDestroy().done(function(){
czrapp.welcomeNoteVisible(false);
dfd.resolve();
});
}
_.delay(function(){
czrapp.welcomeNoteVisible(false);
},
45000
);
return dfd.promise();
}};
czrapp.methods.UserXP=czrapp.methods.UserXP||{};
$.extend(czrapp.methods.UserXP , _methods);
})(jQuery, czrapp);var czrapp=czrapp||{};
(function(czrapp, $, _){
$.extend(czrapp, czrapp.Events);
czrapp.Root=czrapp.Class.extend({
initialize:function(options){
$.extend(this, options||{});
this.isReady=$.Deferred();
},
ready:function(){
var self=this;
if(self.dom_ready&&_.isArray(self.dom_ready) ){
czrapp.status=czrapp.status||[];
_.each(self.dom_ready , function(_m_){
if(! _.isFunction(_m_)&&! _.isFunction(self[_m_])){
czrapp.status.push('Method ' + _m_ + ' was not found and could not be fired on DOM ready.');
return;
}
try {(_.isFunction(_m_) ? _m_:self[_m_]).call(self); } catch(er){
czrapp.status.push([ 'NOK', self.id + '::' + _m_, _.isString(er) ? czrapp._truncate(er):er ].join('=> '));
return;
}});
}
this.isReady.resolve();
}});
czrapp.Base=czrapp.Root.extend(czrapp.methods.Base);
czrapp.ready=$.Deferred();
czrapp.bind('czrapp-ready', function(){
var _evt=document.createEvent('Event');
_evt.initEvent('czrapp-is-ready', true, true);
document.dispatchEvent(_evt);
czrapp.ready.resolve();
});
var _instantianteAndFireOnDomReady=function(newMap, previousMap, isInitial){
if(! _.isObject(newMap) )
return;
_.each(newMap, function(params, name){
if(czrapp[ name ]||! _.isObject(params) )
return;
params=_.extend({
ctor:{},
ready:[],
options:{}},
params
);
var ctorOptions=_.extend({
id:name,
dom_ready:params.ready||[]
},
params.options
);
try { czrapp[ name ]=new params.ctor(ctorOptions); }
catch(er){
czrapp.errorLog('Error when loading ' + name + ' | ' + er);
}});
$(function (){
_.each(newMap, function(params, name){
if(czrapp[ name ]&&czrapp[ name ].isReady&&'resolved'==czrapp[ name ].isReady.state())
return;
if(_.isObject(czrapp[ name ])&&_.isFunction(czrapp[ name ].ready) ){
czrapp[ name ].ready();
}});
czrapp.status=czrapp.status||'OK';
if(_.isArray(czrapp.status) ){
_.each(czrapp.status, function(error){
czrapp.errorLog(error);
});
}
czrapp.trigger(isInitial ? 'czrapp-ready':'czrapp-updated');
});
};
czrapp.appMap=new czrapp.Value({});
czrapp.appMap.bind(_instantianteAndFireOnDomReady);
czrapp.customMap=new czrapp.Value({});
czrapp.customMap.bind(_instantianteAndFireOnDomReady);
})(czrapp, jQuery, _);var czrapp=czrapp||{};
(function(czrapp, $, _){
czrapp.localized=HUParams||{};
var appMap={
base:{
ctor:czrapp.Base,
ready:[
'cacheProp'
]
},
browserDetect:{
ctor:czrapp.Base.extend(czrapp.methods.BrowserDetect),
ready:[ 'addBrowserClassToBody' ]
},
jqPlugins:{
ctor:czrapp.Base.extend(czrapp.methods.JQPlugins),
ready:[
'imgSmartLoad',
'extLinks',
'parallax'
]
},
userXP:{
ctor:czrapp.Base.extend(czrapp.methods.UserXP),
ready:[
'setupUIListeners',
'fittext',
'stickify',
'outline',
'headerSearchToLife',
'scrollToTop',
'widgetTabs',
'commentTabs',
'tableStyle',
'sidebarToLife',
'dropdownMenu',
'mobileMenu',
'topNavToLife',
'gutenbergAlignfull',
'mayBePrintWelcomeNote',
'triggerResizeEventsToAjustHeaderHeightOnInit', // for https://github.com/presscustomizr/hueman/issues/839
'mayBeLoadFontAwesome',
'maybeFireFlexSlider'
]
}};
czrapp.appMap(appMap , true);
})(czrapp, jQuery, _);