// source --> https://www.billyhassell.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.13.9 
var runtime=function(t){"use strict";var r,e=Object.prototype,n=e.hasOwnProperty,o=(m="function"==typeof Symbol?Symbol:{}).iterator||"@@iterator",i=m.asyncIterator||"@@asyncIterator",a=m.toStringTag||"@@toStringTag";function c(t,r,e){return Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}),t[r]}try{c({},"")}catch(e){c=function(t,r,e){return t[r]=e}}function u(t,e,n,o){var i,a,c,u;e=e&&e.prototype instanceof g?e:g,e=Object.create(e.prototype),o=new j(o||[]);return e._invoke=(i=t,a=n,c=o,u=l,function(t,e){if(u===s)throw new Error("Generator is already running");if(u===p){if("throw"===t)throw e;return k()}for(c.method=t,c.arg=e;;){var n=c.delegate;if(n&&(n=function t(e,n){var o=e.iterator[n.method];if(o===r){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=r,t(e,n),"throw"===n.method))return y;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}return"throw"===(o=h(o,e.iterator,n.arg)).type?(n.method="throw",n.arg=o.arg,n.delegate=null,y):(o=o.arg)?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=r),n.delegate=null,y):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}(n,c),n)){if(n===y)continue;return n}if("next"===c.method)c.sent=c._sent=c.arg;else if("throw"===c.method){if(u===l)throw u=p,c.arg;c.dispatchException(c.arg)}else"return"===c.method&&c.abrupt("return",c.arg);if(u=s,"normal"===(n=h(i,a,c)).type){if(u=c.done?p:f,n.arg!==y)return{value:n.arg,done:c.done}}else"throw"===n.type&&(u=p,c.method="throw",c.arg=n.arg)}}),e}function h(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var l="suspendedStart",f="suspendedYield",s="executing",p="completed",y={};function g(){}function d(){}function v(){}var m,w,L=((w=(w=(c(m={},o,(function(){return this})),Object.getPrototypeOf))&&w(w(O([]))))&&w!==e&&n.call(w,o)&&(m=w),v.prototype=g.prototype=Object.create(m));function x(t){["next","throw","return"].forEach((function(r){c(t,r,(function(t){return this._invoke(r,t)}))}))}function b(t,r){var e;this._invoke=function(o,i){function a(){return new r((function(e,a){!function e(o,i,a,c){var u;if("throw"!==(o=h(t[o],t,i)).type)return(i=(u=o.arg).value)&&"object"==typeof i&&n.call(i,"__await")?r.resolve(i.__await).then((function(t){e("next",t,a,c)}),(function(t){e("throw",t,a,c)})):r.resolve(i).then((function(t){u.value=t,a(u)}),(function(t){return e("throw",t,a,c)}));c(o.arg)}(o,i,e,a)}))}return e=e?e.then(a,a):a()}}function E(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function _(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function j(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e,i=t[o];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return e=-1,(i=function o(){for(;++e<t.length;)if(n.call(t,e))return o.value=t[e],o.done=!1,o;return o.value=r,o.done=!0,o}).next=i}return{next:k}}function k(){return{value:r,done:!0}}return c(L,"constructor",d.prototype=v),c(v,"constructor",d),d.displayName=c(v,a,"GeneratorFunction"),t.isGeneratorFunction=function(t){return!!(t="function"==typeof t&&t.constructor)&&(t===d||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,v):(t.__proto__=v,c(t,a,"GeneratorFunction")),t.prototype=Object.create(L),t},t.awrap=function(t){return{__await:t}},x(b.prototype),c(b.prototype,i,(function(){return this})),t.AsyncIterator=b,t.async=function(r,e,n,o,i){void 0===i&&(i=Promise);var a=new b(u(r,e,n,o),i);return t.isGeneratorFunction(e)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},x(L),c(L,a,"Generator"),c(L,o,(function(){return this})),c(L,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var r,e=[];for(r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=O,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(_),!t)for(var e in this)"t"===e.charAt(0)&&n.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function o(n,o){return c.type="throw",c.arg=t,e.next=n,o&&(e.method="next",e.arg=r),!!o}for(var i=this.tryEntries.length-1;0<=i;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),h=n.call(a,"finallyLoc");if(u&&h){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!h)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,r){for(var e=this.tryEntries.length-1;0<=e;--e){var o=this.tryEntries[e];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}var a=(i=i&&("break"===t||"continue"===t)&&i.tryLoc<=r&&r<=i.finallyLoc?null:i)?i.completion:{};return a.type=t,a.arg=r,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(t,r){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&r&&(this.next=r),y},finish:function(t){for(var r=this.tryEntries.length-1;0<=r;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),_(e),y}},catch:function(t){for(var r=this.tryEntries.length-1;0<=r;--r){var e,n,o=this.tryEntries[r];if(o.tryLoc===t)return"throw"===(e=o.completion).type&&(n=e.arg,_(o)),n}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:O(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),y}},t}("object"==typeof module?module.exports:{});try{regeneratorRuntime=runtime}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=runtime:Function("r","regeneratorRuntime = r")(runtime)};
// source --> https://www.billyhassell.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0 
!function(t){"use strict";var n,r,e;r={},(e=function(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}).m=n=[function(t,n,r){r(1),r(67),r(68),r(72),t.exports=r(79)},function(n,r,e){var o=e(2),i=e(36),u=e(57),c=e(56);e=e(62);o({target:"Array",proto:!0},{at:function(n){var r=i(this),e=u(r);return(n=0<=(n=c(n))?n:e+n)<0||e<=n?t:r[n]}}),e("at")},function(n,r,e){var o=e(3),i=e(4).f,u=e(40),c=e(43),f=e(34),a=e(50),p=e(61);n.exports=function(n,r){var e,s,l,y=n.target,v=n.global,d=n.stat,b=v?o:d?o[y]||f(y,{}):(o[y]||{}).prototype;if(b)for(e in r){if(s=r[e],l=n.noTargetGet?(l=i(b,e))&&l.value:b[e],!p(v?e:y+(d?".":"#")+e,n.forced)&&l!==t){if(typeof s==typeof l)continue;a(s,l)}(n.sham||l&&l.sham)&&u(s,"sham",!0),c(b,e,s,n)}}},function(t,n){function r(t){return t&&t.Math==Math&&t}t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof global&&global)||function(){return this}()||Function("return this")()},function(t,n,r){var e=r(5),o=r(7),i=r(8),u=r(9),c=r(10),f=r(15),a=r(35),p=r(38),s=Object.getOwnPropertyDescriptor;n.f=e?s:function(t,n){if(t=c(t),n=f(n),p)try{return s(t,n)}catch(t){}if(a(t,n))return u(!o(i.f,t,n),t[n])}},function(t,n,r){r=r(6),t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){var r=Function.prototype.call;t.exports=r.bind?r.bind(r):function(){return r.apply(r,arguments)}},function(t,n,r){var e={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!e.call({1:2},1);n.f=i?function(t){return!!(t=o(this,t))&&t.enumerable}:e},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,r){var e=r(11),o=r(14);t.exports=function(t){return e(o(t))}},function(t,n,r){var e=r(3),o=r(12),i=r(6),u=r(13),c=e.Object,f=o("".split);t.exports=i((function(){return!c("z").propertyIsEnumerable(0)}))?function(t){return"String"==u(t)?f(t,""):c(t)}:c},function(t,n){var r=Function.prototype,e=r.bind,o=r.call,i=e&&e.bind(o);t.exports=e?function(t){return t&&i(o,t)}:function(t){return t&&function(){return o.apply(t,arguments)}}},function(t,n,r){var e=(r=r(12))({}.toString),o=r("".slice);t.exports=function(t){return o(e(t),8,-1)}},function(n,r,e){var o=e(3).TypeError;n.exports=function(n){if(n==t)throw o("Can't call method on "+n);return n}},function(t,n,r){var e=r(16),o=r(19);t.exports=function(t){return t=e(t,"string"),o(t)?t:t+""}},function(n,r,e){var o=e(3),i=e(7),u=e(17),c=e(19),f=e(26),a=e(29),p=(e=e(30),o.TypeError),s=e("toPrimitive");n.exports=function(n,r){if(!u(n)||c(n))return n;var e=f(n,s);if(e){if(e=i(e,n,r=r===t?"default":r),!u(e)||c(e))return e;throw p("Can't convert object to primitive value")}return a(n,r=r===t?"number":r)}},function(t,n,r){var e=r(18);t.exports=function(t){return"object"==typeof t?null!==t:e(t)}},function(t,n){t.exports=function(t){return"function"==typeof t}},function(t,n,r){var e=r(3),o=r(20),i=r(18),u=r(21),c=(r=r(22),e.Object);t.exports=r?function(t){return"symbol"==typeof t}:function(t){var n=o("Symbol");return i(n)&&u(n.prototype,c(t))}},function(n,r,e){var o=e(3),i=e(18);n.exports=function(n,r){return arguments.length<2?(e=o[n],i(e)?e:t):o[n]&&o[n][r];var e}},function(t,n,r){r=r(12),t.exports=r({}.isPrototypeOf)},function(t,n,r){r=r(23),t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,n,r){var e=r(24);r=r(6);t.exports=!!Object.getOwnPropertySymbols&&!r((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&e&&e<41}))},function(t,n,r){var e,o,i=r(3),u=r(25);r=i.process,i=i.Deno;!(o=(i=(i=r&&r.versions||i&&i.version)&&i.v8)?0<(e=i.split("."))[0]&&e[0]<4?1:+(e[0]+e[1]):o)&&u&&(!(e=u.match(/Edge\/(\d+)/))||74<=e[1])&&(e=u.match(/Chrome\/(\d+)/))&&(o=+e[1]),t.exports=o},function(t,n,r){r=r(20),t.exports=r("navigator","userAgent")||""},function(n,r,e){var o=e(27);n.exports=function(n,r){return null==(r=n[r])?t:o(r)}},function(t,n,r){var e=r(3),o=r(18),i=r(28),u=e.TypeError;t.exports=function(t){if(o(t))return t;throw u(i(t)+" is not a function")}},function(t,n,r){var e=r(3).String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},function(t,n,r){var e=r(3),o=r(7),i=r(18),u=r(17),c=e.TypeError;t.exports=function(t,n){var r,e;if("string"===n&&i(r=t.toString)&&!u(e=o(r,t)))return e;if(i(r=t.valueOf)&&!u(e=o(r,t)))return e;if("string"!==n&&i(r=t.toString)&&!u(e=o(r,t)))return e;throw c("Can't convert object to primitive value")}},function(t,n,r){var e=r(3),o=r(31),i=r(35),u=r(37),c=r(23),f=r(22),a=o("wks"),p=e.Symbol,s=p&&p.for,l=f?p:p&&p.withoutSetter||u;t.exports=function(t){var n;return i(a,t)&&(c||"string"==typeof a[t])||(n="Symbol."+t,c&&i(p,t)?a[t]=p[t]:a[t]=(f&&s?s:l)(n)),a[t]}},function(n,r,e){var o=e(32),i=e(33);(n.exports=function(n,r){return i[n]||(i[n]=r!==t?r:{})})("versions",[]).push({version:"3.19.1",mode:o?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,n){t.exports=!1},function(t,n,r){var e=r(3),o=r(34);r=e[r="__core-js_shared__"]||o(r,{});t.exports=r},function(t,n,r){var e=r(3),o=Object.defineProperty;t.exports=function(t,n){try{o(e,t,{value:n,configurable:!0,writable:!0})}catch(r){e[t]=n}return n}},function(t,n,r){var e=r(12),o=r(36),i=e({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,n){return i(o(t),n)}},function(t,n,r){var e=r(3),o=r(14),i=e.Object;t.exports=function(t){return i(o(t))}},function(n,r,e){e=e(12);var o=0,i=Math.random(),u=e(1..toString);n.exports=function(n){return"Symbol("+(n===t?"":n)+")_"+u(++o+i,36)}},function(t,n,r){var e=r(5),o=r(6),i=r(39);t.exports=!e&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,n,r){var e=r(3),o=(r=r(17),e.document),i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,n,r){var e=r(5),o=r(41),i=r(9);t.exports=e?function(t,n,r){return o.f(t,n,i(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n,r){var e=r(3),o=r(5),i=r(38),u=r(42),c=r(15),f=e.TypeError,a=Object.defineProperty;n.f=o?a:function(t,n,r){if(u(t),n=c(n),u(r),i)try{return a(t,n,r)}catch(t){}if("get"in r||"set"in r)throw f("Accessors not supported");return"value"in r&&(t[n]=r.value),t}},function(t,n,r){var e=r(3),o=r(17),i=e.String,u=e.TypeError;t.exports=function(t){if(o(t))return t;throw u(i(t)+" is not an object")}},function(n,r,e){var o=e(3),i=e(18),u=e(35),c=e(40),f=e(34),a=e(44),p=e(45),s=e(49).CONFIGURABLE,l=p.get,y=p.enforce,v=String(String).split("String");(n.exports=function(n,r,e,a){var p=!!a&&!!a.unsafe,l=!!a&&!!a.enumerable,d=!!a&&!!a.noTargetGet,b=a&&a.name!==t?a.name:r;i(e)&&("Symbol("===String(b).slice(0,7)&&(b="["+String(b).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!u(e,"name")||s&&e.name!==b)&&c(e,"name",b),(a=y(e)).source||(a.source=v.join("string"==typeof b?b:""))),n!==o?(p?!d&&n[r]&&(l=!0):delete n[r],l?n[r]=e:c(n,r,e)):l?n[r]=e:f(r,e)})(Function.prototype,"toString",(function(){return i(this)&&l(this).source||a(this)}))},function(t,n,r){var e=r(12),o=r(18),i=(r=r(33),e(Function.toString));o(r.inspectSource)||(r.inspectSource=function(t){return i(t)}),t.exports=r.inspectSource},function(t,n,r){var e,o,i,u,c,f,a,p,s=r(46),l=r(3),y=r(12),v=r(17),d=r(40),b=r(35),g=r(33),m=r(47),h=(r=r(48),"Object already initialized"),x=l.TypeError;l=l.WeakMap;a=s||g.state?(e=g.state||(g.state=new l),o=y(e.get),i=y(e.has),u=y(e.set),c=function(t,n){if(i(e,t))throw new x(h);return n.facade=t,u(e,t,n),n},f=function(t){return o(e,t)||{}},function(t){return i(e,t)}):(r[p=m("state")]=!0,c=function(t,n){if(b(t,p))throw new x(h);return n.facade=t,d(t,p,n),n},f=function(t){return b(t,p)?t[p]:{}},function(t){return b(t,p)}),t.exports={set:c,get:f,has:a,enforce:function(t){return a(t)?f(t):c(t,{})},getterFor:function(t){return function(n){var r;if(!v(n)||(r=f(n)).type!==t)throw x("Incompatible receiver, "+t+" required");return r}}}},function(t,n,r){var e=r(3),o=r(18);r=r(44),e=e.WeakMap;t.exports=o(e)&&/native code/.test(r(e))},function(t,n,r){var e=r(31),o=r(37),i=e("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,n){t.exports={}},function(t,n,r){var e=r(5),o=r(35),i=Function.prototype,u=e&&Object.getOwnPropertyDescriptor;o=(r=o(i,"name"))&&"something"===function(){}.name,i=r&&(!e||e&&u(i,"name").configurable);t.exports={EXISTS:r,PROPER:o,CONFIGURABLE:i}},function(t,n,r){var e=r(35),o=r(51),i=r(4),u=r(41);t.exports=function(t,n){for(var r=o(n),c=u.f,f=i.f,a=0;a<r.length;a++){var p=r[a];e(t,p)||c(t,p,f(n,p))}}},function(t,n,r){var e=r(20),o=r(12),i=r(52),u=r(60),c=r(42),f=o([].concat);t.exports=e("Reflect","ownKeys")||function(t){var n=i.f(c(t)),r=u.f;return r?f(n,r(t)):n}},function(t,n,r){var e=r(53),o=r(59).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,o)}},function(t,n,r){var e=r(12),o=r(35),i=r(10),u=r(54).indexOf,c=r(48),f=e([].push);t.exports=function(t,n){var r,e=i(t),a=0,p=[];for(r in e)!o(c,r)&&o(e,r)&&f(p,r);for(;n.length>a;)o(e,r=n[a++])&&(~u(p,r)||f(p,r));return p}},function(t,n,r){var e=r(10),o=r(55),i=r(57);r=function(t){return function(n,r,u){var c,f=e(n),a=i(f),p=o(u,a);if(t&&r!=r){for(;p<a;)if((c=f[p++])!=c)return!0}else for(;p<a;p++)if((t||p in f)&&f[p]===r)return t||p||0;return!t&&-1}};t.exports={includes:r(!0),indexOf:r(!1)}},function(t,n,r){var e=r(56),o=Math.max,i=Math.min;t.exports=function(t,n){return(t=e(t))<0?o(t+n,0):i(t,n)}},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return(t=+t)!=t||0==t?0:(0<t?e:r)(t)}},function(t,n,r){var e=r(58);t.exports=function(t){return e(t.length)}},function(t,n,r){var e=r(56),o=Math.min;t.exports=function(t){return 0<t?o(e(t),9007199254740991):0}},function(t,n){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,r){var e=r(6),o=r(18),i=/#|\.prototype\./,u=(r=function(t,n){return(t=c[u(t)])==a||t!=f&&(o(n)?e(n):!!n)},r.normalize=function(t){return String(t).replace(i,".").toLowerCase()}),c=r.data={},f=r.NATIVE="N",a=r.POLYFILL="P";t.exports=r},function(n,r,e){var o=e(30),i=e(63),u=(e=e(41),o("unscopables")),c=Array.prototype;c[u]==t&&e.f(c,u,{configurable:!0,value:i(null)}),n.exports=function(t){c[u][t]=!0}},function(n,r,e){function o(){}function i(t){return"<script>"+t+"</"+v+">"}var u,c=e(42),f=e(64),a=e(59),p=e(48),s=e(66),l=e(39),y=(e=e(47),"prototype"),v="script",d=e("IE_PROTO"),b=function(){try{u=new ActiveXObject("htmlfile")}catch(t){}var t;b="undefined"==typeof document||document.domain&&u?function(t){t.write(i("")),t.close();var n=t.parentWindow.Object;return t=null,n}(u):((t=l("iframe")).style.display="none",s.appendChild(t),t.src=String("javascript:"),(t=t.contentWindow.document).open(),t.write(i("document.F=Object")),t.close(),t.F);for(var n=a.length;n--;)delete b[y][a[n]];return b()};p[d]=!0,n.exports=Object.create||function(n,r){var e;return null!==n?(o[y]=c(n),e=new o,o[y]=null,e[d]=n):e=b(),r===t?e:f(e,r)}},function(t,n,r){var e=r(5),o=r(41),i=r(42),u=r(10),c=r(65);t.exports=e?Object.defineProperties:function(t,n){i(t);for(var r,e=u(n),f=c(n),a=f.length,p=0;p<a;)o.f(t,r=f[p++],e[r]);return t}},function(t,n,r){var e=r(53),o=r(59);t.exports=Object.keys||function(t){return e(t,o)}},function(t,n,r){r=r(20),t.exports=r("document","documentElement")},function(t,n,r){r(2)({target:"Object",stat:!0},{hasOwn:r(35)})},function(n,r,e){var o=e(2),i=e(12),u=e(14),c=e(56),f=e(69),a=(e=e(6),i("".charAt));o({target:"String",proto:!0,forced:e((function(){return"\ud842"!=="𠮷".at(0)}))},{at:function(n){var r=f(u(this)),e=r.length;return(n=0<=(n=c(n))?n:e+n)<0||e<=n?t:a(r,n)}})},function(t,n,r){var e=r(3),o=r(70),i=e.String;t.exports=function(t){if("Symbol"===o(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},function(n,r,e){var o=e(3),i=e(71),u=e(18),c=e(13),f=e(30)("toStringTag"),a=o.Object,p="Arguments"==c(function(){return arguments}());n.exports=i?c:function(n){var r;return n===t?"Undefined":null===n?"Null":"string"==typeof(n=function(t,n){try{return t[n]}catch(t){}}(r=a(n),f))?n:p?c(r):"Object"==(n=c(r))&&u(r.callee)?"Arguments":n}},function(t,n,r){var e={};e[r(30)("toStringTag")]="z",t.exports="[object z]"===String(e)},function(n,r,e){var o=e(73),i=e(57),u=e(56),c=o.aTypedArray;(0,o.exportTypedArrayMethod)("at",(function(n){var r=c(this),e=i(r);return(n=0<=(n=u(n))?n:e+n)<0||e<=n?t:r[n]}))},function(n,r,e){function o(t){return!!l(t)&&(t=v(t),y(M,t)||y(C,t))}var i,u,c,f=e(74),a=e(5),p=e(3),s=e(18),l=e(17),y=e(35),v=e(70),d=e(28),b=e(40),g=e(43),m=e(41).f,h=e(21),x=e(75),O=e(77),S=e(30),j=e(37),w=(P=p.Int8Array)&&P.prototype,A=(e=(e=p.Uint8ClampedArray)&&e.prototype,P&&x(P)),T=w&&x(w),P=Object.prototype,_=p.TypeError,E=(S=S("toStringTag"),j("TYPED_ARRAY_TAG")),I=j("TYPED_ARRAY_CONSTRUCTOR"),R=f&&!!O&&"Opera"!==v(p.opera),M=(f=!1,{Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8}),C={BigInt64Array:8,BigUint64Array:8};for(i in M)(c=(u=p[i])&&u.prototype)?b(c,I,u):R=!1;for(i in C)(c=(u=p[i])&&u.prototype)&&b(c,I,u);if((!R||!s(A)||A===Function.prototype)&&(A=function(){throw _("Incorrect invocation")},R))for(i in M)p[i]&&O(p[i],A);if((!R||!T||T===P)&&(T=A.prototype,R))for(i in M)p[i]&&O(p[i].prototype,T);if(R&&x(e)!==T&&O(e,T),a&&!y(T,S))for(i in f=!0,m(T,S,{get:function(){return l(this)?this[E]:t}}),M)p[i]&&b(p[i],E,i);n.exports={NATIVE_ARRAY_BUFFER_VIEWS:R,TYPED_ARRAY_CONSTRUCTOR:I,TYPED_ARRAY_TAG:f&&E,aTypedArray:function(t){if(o(t))return t;throw _("Target is not a typed array")},aTypedArrayConstructor:function(t){if(s(t)&&(!O||h(A,t)))return t;throw _(d(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,n,r){if(a){if(r)for(var e in M)if((e=p[e])&&y(e.prototype,t))try{delete e.prototype[t]}catch(t){}T[t]&&!r||g(T,t,!r&&R&&w[t]||n)}},exportTypedArrayStaticMethod:function(t,n,r){var e,o;if(a){if(O){if(r)for(e in M)if((o=p[e])&&y(o,t))try{delete o[t]}catch(t){}if(A[t]&&!r)return;try{return g(A,t,!r&&R&&A[t]||n)}catch(t){}}for(e in M)!(o=p[e])||o[t]&&!r||g(o,t,n)}},isView:function(t){return!!l(t)&&("DataView"===(t=v(t))||y(M,t)||y(C,t))},isTypedArray:o,TypedArray:A,TypedArrayPrototype:T}},function(t,n){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,n,r){var e=r(3),o=r(35),i=r(18),u=r(36),c=r(47),f=(r=r(76),c("IE_PROTO")),a=e.Object,p=a.prototype;t.exports=r?a.getPrototypeOf:function(t){var n=u(t);return o(n,f)?n[f]:(t=n.constructor,i(t)&&n instanceof t?t.prototype:n instanceof a?p:null)}},function(t,n,r){r=r(6),t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(n,r,e){var o=e(12),i=e(42),u=e(78);n.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,n=!1,r={};try{(t=o(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),n=r instanceof Array}catch(r){}return function(r,e){return i(r),u(e),n?t(r,e):r.__proto__=e,r}}():t)},function(t,n,r){var e=r(3),o=r(18),i=e.String,u=e.TypeError;t.exports=function(t){if("object"==typeof t||o(t))return t;throw u("Can't set "+i(t)+" as a prototype")}},function(t,n,r){var e=r(2),o=r(3);r=r(80);e({global:!0,bind:!0,enumerable:!0,forced:!o.setImmediate||!o.clearImmediate},{setImmediate:r.set,clearImmediate:r.clear})},function(n,r,e){var o,i,u=e(3),c=e(81),f=e(82),a=e(18),p=e(35),s=e(6),l=e(66),y=e(83),v=e(39),d=e(84),b=e(85),g=u.setImmediate,m=u.clearImmediate,h=u.process,x=u.Dispatch,O=u.Function,S=u.MessageChannel,j=u.String,w=0,A={},T="onreadystatechange";try{o=u.location}catch(n){}function P(t){var n;p(A,t)&&(n=A[t],delete A[t],n())}function _(t){return function(){P(t)}}function E(t){P(t.data)}e=function(t){u.postMessage(j(t),o.protocol+"//"+o.host)},g&&m||(g=function(n){var r=y(arguments,1);return A[++w]=function(){c(a(n)?n:O(n),t,r)},i(w),w},m=function(t){delete A[t]},b?i=function(t){h.nextTick(_(t))}:x&&x.now?i=function(t){x.now(_(t))}:S&&!d?(S=(d=new S).port2,d.port1.onmessage=E,i=f(S.postMessage,S)):u.addEventListener&&a(u.postMessage)&&!u.importScripts&&o&&"file:"!==o.protocol&&!s(e)?(i=e,u.addEventListener("message",E,!1)):i=T in v("script")?function(t){l.appendChild(v("script"))[T]=function(){l.removeChild(this),P(t)}}:function(t){setTimeout(_(t),0)}),n.exports={set:g,clear:m}},function(t,n){var r=Function.prototype,e=r.apply,o=r.bind,i=r.call;t.exports="object"==typeof Reflect&&Reflect.apply||(o?i.bind(e):function(){return i.apply(e,arguments)})},function(n,r,e){var o=e(12),i=e(27),u=o(o.bind);n.exports=function(n,r){return i(n),r===t?n:u?u(n,r):function(){return n.apply(r,arguments)}}},function(t,n,r){r=r(12),t.exports=r([].slice)},function(t,n,r){r=r(25),t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},function(t,n,r){var e=r(13);r=r(3);t.exports="process"==e(r.process)}],e.c=r,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var o in t)e.d(r,o,function(n){return t[n]}.bind(null,o));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=0)}();
// source --> https://www.billyhassell.com/wp-content/plugins/contact-form-7/modules/recaptcha/index.js?ver=5.6.3 
document.addEventListener("DOMContentLoaded",(t=>{var e;wpcf7_recaptcha={...null!==(e=wpcf7_recaptcha)&&void 0!==e?e:{}};const c=wpcf7_recaptcha.sitekey,{homepage:n,contactform:a}=wpcf7_recaptcha.actions,o=t=>{const{action:e,func:n,params:a}=t;grecaptcha.execute(c,{action:e}).then((t=>{const c=new CustomEvent("wpcf7grecaptchaexecuted",{detail:{action:e,token:t}});document.dispatchEvent(c)})).then((()=>{"function"==typeof n&&n(...a)})).catch((t=>console.error(t)))};if(grecaptcha.ready((()=>{o({action:n})})),document.addEventListener("change",(t=>{o({action:a})})),"undefined"!=typeof wpcf7&&"function"==typeof wpcf7.submit){const t=wpcf7.submit;wpcf7.submit=function(e){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};o({action:a,func:t,params:[e,c]})}}document.addEventListener("wpcf7grecaptchaexecuted",(t=>{const e=document.querySelectorAll('form.wpcf7-form input[name="_wpcf7_recaptcha_response"]');for(let c=0;c<e.length;c++)e[c].setAttribute("value",t.detail.token)}))}));
// source --> https://www.billyhassell.com/wp-content/themes/envision/lib/js/app.min.js?ver=3.6.0 
/*!
 * Envision
 * 
 * @version 3.6.0
 * 
 * @author Wptation
 * @link http://envision.wptation.com/
 * @license ThemeForest Split Licence
 * @copyright 2019
 */

jQuery.noConflict(),window.Modernizr=function(n,d,a){function i(e){g.cssText=e}function o(e,t){return typeof e===t}function r(e,t){return!!~(""+e).indexOf(t)}function s(e,t){for(var i in e){var n=e[i];if(!r(n,"-")&&g[n]!==a)return"pfx"!=t||n}return!1}function l(e,t,i){var n=e.charAt(0).toUpperCase()+e.slice(1),r=(e+" "+j.join(n+" ")+n).split(" ");return o(t,"string")||o(t,"undefined")?s(r,t):function(e,t,i){for(var n in e){var r=t[e[n]];if(r!==a)return!1===i?e[n]:o(r,"function")?r.bind(i||t):r}return!1}(r=(e+" "+x.join(n+" ")+n).split(" "),t,i)}function c(e,t,i,n){var r,o,a,s,l=d.createElement("div"),c=d.body,u=c||d.createElement("body");if(parseInt(i,10))for(;i--;)(a=d.createElement("div")).id=n?n[i]:m+(i+1),l.appendChild(a);return r=["&#173;",'<style id="s',m,'">',e,"</style>"].join(""),l.id=m,(c?l:u).innerHTML+=r,u.appendChild(l),c||(u.style.background="",u.style.overflow="hidden",s=f.style.overflow,f.style.overflow="hidden",f.appendChild(u)),o=t(l,e),c?l.parentNode.removeChild(l):(u.parentNode.removeChild(u),f.style.overflow=s),!!o}var e,u,p,h={},f=d.documentElement,m="modernizr",t=d.createElement(m),g=t.style,v=d.createElement("input"),y=":)",w={}.toString,_=" -webkit- -moz- -o- -ms- ".split(" "),b="Webkit Moz O ms",j=b.split(" "),x=b.toLowerCase().split(" "),C="http://www.w3.org/2000/svg",Q={},k={},P={},S=[],E=S.slice,I=(p={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"},function(e,t){t=t||d.createElement(p[e]||"div");var i=(e="on"+e)in t;return i||(t.setAttribute||(t=d.createElement("div")),t.setAttribute&&t.removeAttribute&&(t.setAttribute(e,""),i=o(t[e],"function"),o(t[e],"undefined")||(t[e]=a),t.removeAttribute(e))),t=null,i}),T={}.hasOwnProperty;for(var $ in u=o(T,"undefined")||o(T.call,"undefined")?function(e,t){return t in e&&o(e.constructor.prototype[t],"undefined")}:function(e,t){return T.call(e,t)},Function.prototype.bind||(Function.prototype.bind=function(n){var r=this;if("function"!=typeof r)throw new TypeError;var o=E.call(arguments,1),a=function(){if(this instanceof a){function e(){}e.prototype=r.prototype;var t=new e,i=r.apply(t,o.concat(E.call(arguments)));return Object(i)===i?i:t}return r.apply(n,o.concat(E.call(arguments)))};return a}),Q.flexbox=function(){return l("flexWrap")},Q.canvas=function(){var e=d.createElement("canvas");return!!e.getContext&&!!e.getContext("2d")},Q.canvastext=function(){return!!h.canvas&&!!o(d.createElement("canvas").getContext("2d").fillText,"function")},Q.webgl=function(){return!!n.WebGLRenderingContext},Q.touch=function(){var t;return"ontouchstart"in n||n.DocumentTouch&&d instanceof DocumentTouch?t=!0:c(["@media (",_.join("touch-enabled),("),m,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(e){t=9===e.offsetTop}),t},Q.geolocation=function(){return"geolocation"in navigator},Q.postmessage=function(){return!!n.postMessage},Q.websqldatabase=function(){return!!n.openDatabase},Q.indexedDB=function(){return!!l("indexedDB",n)},Q.hashchange=function(){return I("hashchange",n)&&(d.documentMode===a||7<d.documentMode)},Q.history=function(){return!!n.history&&!!history.pushState},Q.draganddrop=function(){var e=d.createElement("div");return"draggable"in e||"ondragstart"in e&&"ondrop"in e},Q.websockets=function(){return"WebSocket"in n||"MozWebSocket"in n},Q.rgba=function(){return i("background-color:rgba(150,255,150,.5)"),r(g.backgroundColor,"rgba")},Q.hsla=function(){return i("background-color:hsla(120,40%,100%,.5)"),r(g.backgroundColor,"rgba")||r(g.backgroundColor,"hsla")},Q.multiplebgs=function(){return i("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(g.background)},Q.backgroundsize=function(){return l("backgroundSize")},Q.borderimage=function(){return l("borderImage")},Q.borderradius=function(){return l("borderRadius")},Q.boxshadow=function(){return l("boxShadow")},Q.textshadow=function(){return""===d.createElement("div").style.textShadow},Q.opacity=function(){return function(e,t){i(_.join(e+";")+(t||""))}("opacity:.55"),/^0.55$/.test(g.opacity)},Q.cssanimations=function(){return l("animationName")},Q.csscolumns=function(){return l("columnCount")},Q.cssgradients=function(){var e="background-image:";return i((e+"-webkit- ".split(" ").join("gradient(linear,left top,right bottom,from(#9f9),to(white));"+e)+_.join("linear-gradient(left top,#9f9, white);"+e)).slice(0,-e.length)),r(g.backgroundImage,"gradient")},Q.cssreflections=function(){return l("boxReflect")},Q.csstransforms=function(){return!!l("transform")},Q.csstransforms3d=function(){var i=!!l("perspective");return i&&"webkitPerspective"in f.style&&c("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(e,t){i=9===e.offsetLeft&&3===e.offsetHeight}),i},Q.csstransitions=function(){return l("transition")},Q.fontface=function(){var o;return c('@font-face {font-family:"font";src:url("https://")}',function(e,t){var i=d.getElementById("smodernizr"),n=i.sheet||i.styleSheet,r=n?n.cssRules&&n.cssRules[0]?n.cssRules[0].cssText:n.cssText||"":"";o=/src/i.test(r)&&0===r.indexOf(t.split(" ")[0])}),o},Q.generatedcontent=function(){var t;return c(["#",m,"{font:0/0 a}#",m,':after{content:"',y,'";visibility:hidden;font:3px/1 a}'].join(""),function(e){t=3<=e.offsetHeight}),t},Q.video=function(){var e=d.createElement("video"),t=!1;try{(t=!!e.canPlayType)&&((t=new Boolean(t)).ogg=e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),t.h264=e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),t.webm=e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""))}catch(e){}return t},Q.audio=function(){var e=d.createElement("audio"),t=!1;try{(t=!!e.canPlayType)&&((t=new Boolean(t)).ogg=e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),t.mp3=e.canPlayType("audio/mpeg;").replace(/^no$/,""),t.wav=e.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),t.m4a=(e.canPlayType("audio/x-m4a;")||e.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(e){}return t},Q.localstorage=function(){try{return localStorage.setItem(m,m),localStorage.removeItem(m),!0}catch(e){return!1}},Q.sessionstorage=function(){try{return sessionStorage.setItem(m,m),sessionStorage.removeItem(m),!0}catch(e){return!1}},Q.webworkers=function(){return!!n.Worker},Q.applicationcache=function(){return!!n.applicationCache},Q.svg=function(){return!!d.createElementNS&&!!d.createElementNS(C,"svg").createSVGRect},Q.inlinesvg=function(){var e=d.createElement("div");return e.innerHTML="<svg/>",(e.firstChild&&e.firstChild.namespaceURI)==C},Q.smil=function(){return!!d.createElementNS&&/SVGAnimate/.test(w.call(d.createElementNS(C,"animate")))},Q.svgclippaths=function(){return!!d.createElementNS&&/SVGClipPath/.test(w.call(d.createElementNS(C,"clipPath")))},Q)u(Q,$)&&(e=$.toLowerCase(),h[e]=Q[$](),S.push((h[e]?"":"no-")+e));return h.input||(h.input=function(e){for(var t=0,i=e.length;t<i;t++)P[e[t]]=e[t]in v;return P.list&&(P.list=!!d.createElement("datalist")&&!!n.HTMLDataListElement),P}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),h.inputtypes=function(e){for(var t,i,n,r=0,o=e.length;r<o;r++)v.setAttribute("type",i=e[r]),(t="text"!==v.type)&&(v.value=y,v.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(i)&&v.style.WebkitAppearance!==a?(f.appendChild(v),t=(n=d.defaultView).getComputedStyle&&"textfield"!==n.getComputedStyle(v,null).WebkitAppearance&&0!==v.offsetHeight,f.removeChild(v)):/^(search|tel)$/.test(i)||(t=/^(url|email)$/.test(i)?v.checkValidity&&!1===v.checkValidity():v.value!=y)),k[e[r]]=!!t;return k}("search tel url email datetime date month week time datetime-local number range color".split(" "))),h.addTest=function(e,t){if("object"==typeof e)for(var i in e)u(e,i)&&h.addTest(i,e[i]);else{if(e=e.toLowerCase(),h[e]!==a)return h;t="function"==typeof t?t():t,f.className+=" "+(t?"":"no-")+e,h[e]=t}return h},i(""),t=v=null,function(e,a){function s(){var e=f.elements;return"string"==typeof e?e.split(" "):e}function l(e){var t=h[e[d]];return t||(t={},p++,e[d]=p,h[p]=t),t}function n(e,t,i){return t=t||a,c?t.createElement(e):(n=(i=i||l(t)).cache[e]?i.cache[e].cloneNode():u.test(e)?(i.cache[e]=i.createElem(e)).cloneNode():i.createElem(e)).canHaveChildren&&!o.test(e)?i.frag.appendChild(n):n;var n}function t(e){var t=l(e=e||a);return!f.shivCSS||i||t.hasCSS||(t.hasCSS=!!function(e,t){var i=e.createElement("p"),n=e.getElementsByTagName("head")[0]||e.documentElement;return i.innerHTML="x<style>"+t+"</style>",n.insertBefore(i.lastChild,n.firstChild)}(e,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),c||function(t,i){i.cache||(i.cache={},i.createElem=t.createElement,i.createFrag=t.createDocumentFragment,i.frag=i.createFrag()),t.createElement=function(e){return f.shivMethods?n(e,t,i):i.createElem(e)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+s().join().replace(/\w+/g,function(e){return i.createElem(e),i.frag.createElement(e),'c("'+e+'")'})+");return n}")(f,i.frag)}(e,t),e}var i,c,r=e.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,d="_html5shiv",p=0,h={};!function(){try{var e=a.createElement("a");e.innerHTML="<xyz></xyz>",i="hidden"in e,c=1==e.childNodes.length||function(){a.createElement("a");var e=a.createDocumentFragment();return void 0===e.cloneNode||void 0===e.createDocumentFragment||void 0===e.createElement}()}catch(e){c=i=!0}}();var f={elements:r.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:!1!==r.shivCSS,supportsUnknownElements:c,shivMethods:!1!==r.shivMethods,type:"default",shivDocument:t,createElement:n,createDocumentFragment:function(e,t){if(e=e||a,c)return e.createDocumentFragment();for(var i=(t=t||l(e)).frag.cloneNode(),n=0,r=s(),o=r.length;n<o;n++)i.createElement(r[n]);return i}};e.html5=f,t(a)}(this,d),h._version="2.6.2",h._prefixes=_,h._domPrefixes=x,h._cssomPrefixes=j,h.mq=function(e){var t,i=n.matchMedia||n.msMatchMedia;return i?i(e).matches:(c("@media "+e+" { #"+m+" { position: absolute; } }",function(e){t="absolute"==(n.getComputedStyle?getComputedStyle(e,null):e.currentStyle).position}),t)},h.hasEvent=I,h.testProp=function(e){return s([e])},h.testAllProps=l,h.testStyles=c,h.prefixed=function(e,t,i){return t?l(e,t,i):l(e,"pfx")},f.className=f.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+" js "+S.join(" "),h}(this,this.document),function(e,p){function d(e){return"[object Function]"==r.call(e)}function h(e){return"string"==typeof e}function f(){}function m(e){return!e||"loaded"==e||"complete"==e||"uninitialized"==e}function g(){var e=_.shift();b=1,e?e.t?y(function(){("c"==e.t?v.injectCss:v.injectJs)(e.s,0,e.a,e.x,e.e,1)},0):(e(),g()):b=0}function t(e,t,i,n,r){return b=0,t=t||"j",h(e)?function(i,n,e,t,r,o,a){function s(e){if(!c&&m(l.readyState)&&(d.r=c=1,b||g(),l.onload=l.onreadystatechange=null,e))for(var t in"img"!=i&&y(function(){x.removeChild(l)},50),Q[n])Q[n].hasOwnProperty(t)&&Q[n][t].onload()}a=a||v.errorTimeout;var l=p.createElement(i),c=0,u=0,d={t:e,s:n,e:r,a:o,x:a};1===Q[n]&&(u=1,Q[n]=[]),"object"==i?l.data=n:(l.src=n,l.type=i),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){s.call(this,u)},_.splice(t,0,d),"img"!=i&&(u||2===Q[n]?(x.insertBefore(l,j?null:w),y(s,a)):Q[n].push(l))}("c"==t?l:a,e,t,this.i++,i,n,r):(_.splice(this.i++,0,e),1==_.length&&g()),this}function s(){var e=v;return e.loader={load:t,i:0},e}var i,v,n=p.documentElement,y=e.setTimeout,w=p.getElementsByTagName("script")[0],r={}.toString,_=[],b=0,o="MozAppearance"in n.style,j=o&&!!p.createRange().compareNode,x=j?n:w.parentNode,a=(n=e.opera&&"[object Opera]"==r.call(e.opera),n=!!p.attachEvent&&!n,o?"object":n?"script":"img"),l=n?"script":a,c=Array.isArray||function(e){return"[object Array]"==r.call(e)},C=[],Q={},k={timeout:function(e,t){return t.length&&(e.timeout=t[0]),e}};(v=function(e){function u(e,t,i,n,r){var o=function(e){e=e.split("!");var t,i,n,r=C.length,o=e.pop(),a=e.length;for(o={url:o,origUrl:o,prefixes:e},i=0;i<a;i++)n=e[i].split("="),(t=k[n.shift()])&&(o=t(o,n));for(i=0;i<r;i++)o=C[i](o);return o}(e),a=o.autoCallback;o.url.split(".").pop().split("?").shift(),o.bypass||(t=t&&(d(t)?t:t[e]||t[n]||t[e.split("/").pop().split("?")[0]]),o.instead?o.instead(e,t,i,n,r):(Q[o.url]?o.noexec=!0:Q[o.url]=1,i.load(o.url,o.forceCSS||!o.forceJS&&"css"==o.url.split(".").pop().split("?").shift()?"c":void 0,o.noexec,o.attrs,o.timeout),(d(t)||d(a))&&i.load(function(){s(),t&&t(o.origUrl,r,n),a&&a(o.origUrl,r,n),Q[o.url]=2})))}function t(e,t){function i(i,e){if(i){if(h(i))e||(s=function(){var e=[].slice.call(arguments);l.apply(this,e),c()}),u(i,s,t,0,o);else if(Object(i)===i)for(r in n=function(){var e,t=0;for(e in i)i.hasOwnProperty(e)&&t++;return t}(),i)i.hasOwnProperty(r)&&(e||--n||(d(s)?s=function(){var e=[].slice.call(arguments);l.apply(this,e),c()}:s[r]=function(t){return function(){var e=[].slice.call(arguments);t&&t.apply(this,e),c()}}(l[r])),u(i[r],s,t,r,o))}else e||c()}var n,r,o=!!e.test,a=e.load||e.both,s=e.callback||f,l=s,c=e.complete||f;i(o?e.yep:e.nope,!!a),a&&i(a)}var i,n,r=this.yepnope.loader;if(h(e))u(e,0,r,0);else if(c(e))for(i=0;i<e.length;i++)h(n=e[i])?u(n,0,r,0):c(n)?v(n):Object(n)===n&&t(n,r);else Object(e)===e&&t(e,r)}).addPrefix=function(e,t){k[e]=t},v.addFilter=function(e){C.push(e)},v.errorTimeout=1e4,null==p.readyState&&p.addEventListener&&(p.readyState="loading",p.addEventListener("DOMContentLoaded",i=function(){p.removeEventListener("DOMContentLoaded",i,0),p.readyState="complete"},0)),e.yepnope=s(),e.yepnope.executeStack=g,e.yepnope.injectJs=function(e,t,i,n,r,o){var a,s,l=p.createElement("script");n=n||v.errorTimeout;for(s in l.src=e,i)l.setAttribute(s,i[s]);t=o?g:t||f,l.onreadystatechange=l.onload=function(){!a&&m(l.readyState)&&(a=1,t(),l.onload=l.onreadystatechange=null)},y(function(){a||t(a=1)},n),r?l.onload():w.parentNode.insertBefore(l,w)},e.yepnope.injectCss=function(e,t,i,n,r,o){var a;n=p.createElement("link"),t=o?g:t||f;for(a in n.href=e,n.rel="stylesheet",n.type="text/css",i)n.setAttribute(a,i[a]);r||(w.parentNode.insertBefore(n,w),y(t,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))},window.matchMedia=window.matchMedia||function(e){var t,i=e.documentElement,n=i.firstElementChild||i.firstChild,r=e.createElement("body"),o=e.createElement("div");return o.id="mq-test-1",o.style.cssText="position:absolute;top:-100em",r.style.background="none",r.appendChild(o),function(e){return o.innerHTML='&shy;<style media="'+e+'"> #mq-test-1 { width: 42px; }</style>',i.insertBefore(r,n),t=42==o.offsetWidth,i.removeChild(r),{matches:t,media:e}}}(document),function(s){if(s.respond={},respond.update=function(){},respond.mediaQueriesSupported=s.matchMedia&&s.matchMedia("only all").matches,!respond.mediaQueriesSupported){function e(){for(var e,t,i,n,r=Q,o=r.length,a=0;a<o;a++)t=(e=r[a]).href,i=e.media,n=e.rel&&"stylesheet"===e.rel.toLowerCase(),t&&n&&!l[t]&&(e.styleSheet&&e.styleSheet.rawCssText?(p(e.styleSheet.rawCssText,t,i),l[t]=!0):(/^([a-zA-Z:]*\/\/)/.test(t)||c)&&t.replace(RegExp.$1,"").split("/")[0]!==s.location.host||u.push({href:t,media:i}));d()}function m(){var e,t=w.createElement("div"),i=w.body,n=!1;return t.style.cssText="position:absolute;font-size:1em;width:1em",i||((i=n=w.createElement("body")).style.background="none"),i.appendChild(t),_.insertBefore(i,_.firstChild),e=t.offsetWidth,n?_.removeChild(i):i.removeChild(t),e=y=parseFloat(e)}var g,v,y,w=s.document,_=w.documentElement,b=[],j=[],x=[],l={},C=w.getElementsByTagName("head")[0]||_,c=w.getElementsByTagName("base")[0],Q=C.getElementsByTagName("link"),u=[],d=function(){if(u.length){var t=u.shift();i(t.href,function(e){p(e,t.href,t.media),l[t.href]=!0,d()})}},p=function(e,t,i){function n(e){return e.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+t+"$2$3")}var r,o,a,s,l,c=e.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),u=c&&c.length||0,d=!u&&i,p=0;for((t=t.substring(0,t.lastIndexOf("/"))).length&&(t+="/"),d&&(u=1);p<u;p++)for(r=0,d?(o=i,j.push(n(e))):(o=c[p].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,j.push(RegExp.$2&&n(RegExp.$2))),l=(s=o.split(",")).length;r<l;r++)a=s[r],b.push({media:a.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:j.length-1,hasquery:-1<a.indexOf("("),minw:a.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:a.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")});k()},k=function(e){var t="clientWidth",i=_[t],n="CSS1Compat"===w.compatMode&&i||w.body[t]||i,r={},o=Q[Q.length-1],a=(new Date).getTime();if(e&&g&&a-g<30)return clearTimeout(v),void(v=setTimeout(k,30));for(var s in g=a,b){var l=b[s],c=l.minw,u=l.maxw,d=null===c,p=null===u;c=c&&parseFloat(c)*(-1<c.indexOf("em")?y||m():1),u=u&&parseFloat(u)*(-1<u.indexOf("em")?y||m():1),l.hasquery&&(d&&p||!(d||c<=n)||!(p||n<=u))||(r[l.media]||(r[l.media]=[]),r[l.media].push(j[l.rules]))}for(var s in x)x[s]&&x[s].parentNode===C&&C.removeChild(x[s]);for(var s in r){var h=w.createElement("style"),f=r[s].join("\n");h.type="text/css",h.media=s,C.insertBefore(h,o.nextSibling),h.styleSheet?h.styleSheet.cssText=f:h.appendChild(w.createTextNode(f)),x.push(h)}},i=function(e,t){var i=n();i&&(i.open("GET",e,!0),i.onreadystatechange=function(){4!=i.readyState||200!=i.status&&304!=i.status||t(i.responseText)},4!=i.readyState&&i.send(null))},n=function(){var t=!1;try{t=new XMLHttpRequest}catch(e){t=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return t}}();e(),respond.update=e,s.addEventListener?s.addEventListener("resize",t,!1):s.attachEvent&&s.attachEvent("onresize",t)}function t(){k(!0)}}(this),document.documentElement.className=document.documentElement.className.replace("no-js","js"),document.documentElement.className=document.documentElement.className.replace("html-loaded","html-loading"),function(){"use strict";setTimeout(function(){document.documentElement.className=document.documentElement.className.replace("html-loading","html-loaded")},6e3)}(),jQuery(document).ready(function(){jQuery("html").removeClass("html-loading").addClass("html-loaded")});var CloudFw_jQueried=function(e,t){"use strict";return void 0===t||(!!t.parents(".dont-make-ui").length||(!0===jQuery.data(t,e)||(jQuery.data(t,e,!0),!1)))};function cloudFwGetViewportWidth(){"use strict";var e=null;return null!==window.screen&&(e=window.screen.availWidth),null!==window.innerWidth&&(e=window.innerWidth),null!==document.body&&(e=document.body.clientWidth),e}!function(e,u){var n,t=e.jQuery||e.Cowboy||(e.Cowboy={});t.throttle=n=function(r,o,a,s){var l,c=0;function e(){var e=this,t=+new Date-c,i=arguments;function n(){c=+new Date,a.apply(e,i)}s&&!l&&n(),l&&clearTimeout(l),s===u&&r<t?n():!0!==o&&(l=setTimeout(s?function(){l=u}:n,s===u?r-t:r))}return"boolean"!=typeof o&&(s=a,a=o,o=u),t.guid&&(e.guid=a.guid=a.guid||t.guid++),e},t.debounce=function(e,t,i){return i===u?n(e,t,!1):n(e,i,!1!==t)}}(this),function(){"use strict";function e(){if(!CloudFwOp.sticky_header)return!1;var e=jQuery("#header-container");if(!jQuery.isFunction(jQuery.fn.cloudfw_waypoint))return!0;e.parent().hasClass("sticky-wrapper")&&e.cloudfw_waypoint("unsticky"),e.cloudfw_waypoint("sticky",{wrapper:'<div class="sticky-wrapper" />',stuckClass:"stuck",offset:parseInt(CloudFwOp.sticky_header_offset,10)||0})}jQuery(window).on("load",function(){e(),jQuery(window).smartresize(e)})}(jQuery),function(e,t){"use strict";jQuery.fn[t]=function(e){return e?this.bind("resize",function(i,n,r){var o;return function(){var e=this,t=arguments;o?clearTimeout(o):r&&i.apply(e,t),o=setTimeout(function(){r||i.apply(e,t),o=null},n||100)}}(e)):this.trigger(t)}}(jQuery,"smartresize");var CloudFwParseAttribute=function(e){"use strict";var t={};if(e){try{"object"!=typeof e&&(t=jQuery.parseJSON(e))}catch(e){}return t}},CloudFwGetColumByClassname=function(e){"use strict";var t=new Array(1,2,3,4,6),i=new Array("span12","span6","span4","span3","span2"),n=e.first().attr("class").match(/span(\d+)/)[1];n=n&&"span"+n;var r=jQuery.inArray(n,i);return-1!==r?t[r]:1},cloudfw_load_css_file=function(e,t){"use strict";var i=document.getElementsByTagName("head")[0],n=document.createElement("link");n.id=e,n.rel="stylesheet",n.type="text/css",n.href=t,n.media="all",i.appendChild(n)};!function(){"use strict";jQuery(window).on("load",function(){jQuery("html").addClass("ui--win-loaded")})}(jQuery),function(a){"use strict";function r(e,t){try{this.options=t;var i=a(e),n=i.is("img"),r=n?i.attr("src"):i.backgroundImageUrl(),o=i.attr("data-at2x")?i.attr("data-at2x"):"";if(""==o){if(!i.attr("data-retina-auto"))return!0;o=this.options.generateUrl(i,r)}a("<img/>").attr("src",o).on("load",function(){n?(i.css({width:i.width(),height:i.height()}),i.attr("data-orginal-src",i.attr("src")),i.attr("src",a(this).attr("src"))):(i.backgroundImageUrl(a(this).attr("src")),i.backgroundSize(a(this)[0].width,a(this)[0].height)),i.attr("data-retina","complete")})}catch(e){}}r.prototype={constructor:r},a.fn.retinaReplace=function(n){return this.each(function(){var e=a(this),t=e.data("retinaReplace"),i=a.extend({},a.fn.retinaReplace.defaults,e.data(),"object"==typeof n&&n);t||e.data("retinaReplace",t=new r(this,i)),"string"==typeof n&&t[n]()})},a.fn.retinaReplace.defaults={suffix:"@2x",generateUrl:function(e,t){if(void 0===t)return"";var i=t.lastIndexOf("."),n=t.substr(i+1);return t.substr(0,i)+this.suffix+"."+n}},a.fn.retinaReplace.Constructor=r,a.fn.backgroundImageUrl=function(e){return e?this.each(function(){a(this).css("background-image",'url("'+e+'")')}):a(this).css("background-image").replace(/url\(|\)|"|'/g,"")},a.fn.backgroundSize=function(e,t){var i=Math.floor(e/2)+"px "+Math.floor(t/2)+"px";a(this).css("background-size",i),a(this).css("-webkit-background-size",i)};function e(){a(":not([data-at2x='']):visible").retinaReplace()}var t;(1<(t="undefined"==typeof exports?window:exports).devicePixelRatio||t.matchMedia&&t.matchMedia("(-webkit-min-device-pixel-ratio: 1.5),                            (min--moz-device-pixel-ratio: 1.5),                            (-o-min-device-pixel-ratio: 3/2),                            (min-resolution: 1.5dppx)").matches)&&(a("html").removeClass("no-retina").addClass("retina"),a(window).on("load",e),a(window).smartresize(e),a(window).bind("make@2x",e))}(window.jQuery),function(_){function b(){var e=location.href;return hashtag=-1!==e.indexOf("#prettyPhoto")&&decodeURI(e.substring(e.indexOf("#prettyPhoto")+1,e.length)),hashtag=hashtag&&hashtag.replace(/<|>/g,""),hashtag}function j(e,t){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var i=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(t);return null==i?"":i[1]}_.CloudFwPrettyPhoto={version:"3.1.6"},_.fn.CloudFwPrettyPhoto=function(t){if(CloudFwOp.disable_prettyphoto_on_mobile&&"phone"==detectDeviceViaPageWidth())return!0;t=jQuery.extend({hook:"data-rel",animation_speed:"fast",ajaxcallback:function(){},slideshow:5e3,autoplay_slideshow:!1,opacity:.8,show_title:!0,allow_resize:!0,allow_expand:!0,default_width:500,default_height:344,counter_separator_label:"/",theme:"pp_default",horizontal_padding:20,hideflash:!1,wmode:"opaque",autoplay:!0,modal:!1,deeplinking:!0,overlay_gallery:!0,overlay_gallery_max:30,keyboard_shortcuts:!0,changepicturecallback:function(){},opened:function(){jQuery("body").addClass("ui--lightbox-opened")},callback:function(){jQuery("body").removeClass("ui--lightbox-opened")},ie6_fallback:!0,markup:'<div class="pp_pic_holder"> \t\t\t\t\t\t<div class="ppt">&nbsp;</div> \t\t\t\t\t\t<div class="pp_top"> \t\t\t\t\t\t\t<div class="pp_left"></div> \t\t\t\t\t\t\t<div class="pp_middle"></div> \t\t\t\t\t\t\t<div class="pp_right"></div> \t\t\t\t\t\t</div> \t\t\t\t\t\t<div class="pp_content_container"> \t\t\t\t\t\t\t<div class="pp_left"> \t\t\t\t\t\t\t<div class="pp_right"> \t\t\t\t\t\t\t\t<div class="pp_content"> \t\t\t\t\t\t\t\t\t<div class="pp_loaderIcon"></div> \t\t\t\t\t\t\t\t\t<div class="pp_fade"> \t\t\t\t\t\t\t\t\t\t<div class="pp_nav pp_current_text"> \t\t\t\t\t\t\t\t\t\t\t<p class="currentTextHolder btn btn-small btn-grey radius-3px">0/0</p> \t\t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t\t\t<a class="pp_close btn btn-small btn-grey radius-3px" href="#"><i class="fontawesome-remove"></i> '+CloudFwOp.text_close+'</a> \t\t\t\t\t\t\t\t\t\t<a href="#" class="pp_expand" title="Expand the image">Expand</a> \t\t\t\t\t\t\t\t\t\t<div class="pp_hoverContainer"> \t\t\t\t\t\t\t\t\t\t\t<a class="pp_next" href="#"><span><div class="arr arr-large arr-right"><span></span><i class="fontawesome-chevron-right"></i></div></span></a> \t\t\t\t\t\t\t\t\t\t\t<a class="pp_previous" href="#"><span><div class="arr arr-large arr-left"><span></span><i class="fontawesome-chevron-left"></i></div></span></a> \t\t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t\t\t<div id="pp_full_res"></div> \t\t\t\t\t\t\t\t\t\t<div class="pp_details"> \t\t\t\t\t\t\t\t\t\t\t<p class="pp_description ui--accent-gradient ui--accent-color"></p> \t\t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t</div> \t\t\t\t\t\t</div> \t\t\t\t\t\t<div class="pp_bottom"> \t\t\t\t\t\t\t<div class="pp_left"></div> \t\t\t\t\t\t\t<div class="pp_middle"></div> \t\t\t\t\t\t\t<div class="pp_right"></div> \t\t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t\t<div class="pp_overlay"></div>',gallery_markup:'<div class="pp_gallery"> \t\t\t\t\t\t\t\t<a href="#" class="pp_arrow_previous">Previous</a> \t\t\t\t\t\t\t\t<div> \t\t\t\t\t\t\t\t\t<ul> \t\t\t\t\t\t\t\t\t\t{gallery} \t\t\t\t\t\t\t\t\t</ul> \t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t<a href="#" class="pp_arrow_next">Next</a> \t\t\t\t\t\t\t</div>',image_markup:'<img id="fullResImage" src="{path}" />',flash_markup:'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',quicktime_markup:'<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',mp4_markup:'<video width="{width}" height="{height}" controls autoplay><source src="{path}" type="video/mp4">Your browser does not support the video tag.</video>',iframe_markup:'<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',inline_markup:'<div class="pp_inline">{content}</div>',custom_markup:"",social_tools:'<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"><\/script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&amp;layout=button_count&amp;show_faces=true&amp;width=500&amp;action=like&amp;font&amp;colorscheme=light&amp;height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>'},t);var i,e,n,r,o,a,s,l=this,c=!1,u=_(window).height(),d=_(window).width();function p(){_(".pp_loaderIcon").hide(),projectedTop=scroll_pos.scrollTop+(u/2-i.containerHeight/2),projectedTop<0&&(projectedTop=0),$ppt.fadeTo(settings.animation_speed,1),$pp_pic_holder.find(".pp_content").animate({height:i.contentHeight,width:i.contentWidth},settings.animation_speed),$pp_pic_holder.animate({top:projectedTop,left:d/2-i.containerWidth/2<0?0:d/2-i.containerWidth/2,width:i.containerWidth},settings.animation_speed,function(){$pp_pic_holder.find(".pp_hoverContainer,#fullResImage").height(i.height).width(i.width),$pp_pic_holder.find(".pp_fade").fadeIn(settings.animation_speed),isSet&&"image"==g(pp_images[set_position])?$pp_pic_holder.find(".pp_hoverContainer").show():$pp_pic_holder.find(".pp_hoverContainer").hide(),settings.allow_expand&&(i.resized?_("a.pp_expand,a.pp_contract").show():_("a.pp_expand").hide()),!settings.autoplay_slideshow||s||e||_.CloudFwPrettyPhoto.startSlideshow(),settings.changepicturecallback(),e=!0}),isSet&&settings.overlay_gallery&&"image"==g(pp_images[set_position])?(itemWidth=57,navWidth="facebook"==settings.theme||"pp_default"==settings.theme?50:30,itemsPerPage=Math.floor((i.containerWidth-100-navWidth)/itemWidth),itemsPerPage=itemsPerPage<pp_images.length?itemsPerPage:pp_images.length,totalPage=Math.ceil(pp_images.length/itemsPerPage)-1,0==totalPage?(navWidth=0,$pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").hide()):$pp_gallery.find(".pp_arrow_next,.pp_arrow_previous").show(),galleryWidth=itemsPerPage*itemWidth,fullGalleryWidth=pp_images.length*itemWidth,$pp_gallery.css("margin-left",-(galleryWidth/2+navWidth/2)).find("div:first").width(galleryWidth+5).find("ul").width(fullGalleryWidth).find("li.selected").removeClass("selected"),goToPage=Math.floor(set_position/itemsPerPage)<totalPage?Math.floor(set_position/itemsPerPage):totalPage,_.CloudFwPrettyPhoto.changeGalleryPage(goToPage),$pp_gallery_li.filter(":eq("+set_position+")").addClass("selected")):$pp_pic_holder.find(".pp_content").unbind("mouseenter mouseleave"),t.ajaxcallback()}function h(e){$pp_pic_holder.find("#pp_full_res object,#pp_full_res embed").css("visibility","hidden"),$pp_pic_holder.find(".pp_fade").fadeOut(settings.animation_speed,function(){_(".pp_loaderIcon").show(),e()})}function f(e,t){if(resized=!1,m(e,t),imageWidth=e,imageHeight=t,(d<a||u<o)&&doresize&&settings.allow_resize&&!c){for(resized=!0,fitting=!1;!fitting;)d<a?(imageWidth=d-200,imageHeight=t/e*imageWidth):u<o?(imageHeight=u-200,imageWidth=e/t*imageHeight):fitting=!0,o=imageHeight,a=imageWidth;(d<a||u<o)&&f(a,o),m(imageWidth,imageHeight)}return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(o),containerWidth:Math.floor(a)+2*settings.horizontal_padding,contentHeight:Math.floor(n),contentWidth:Math.floor(r),resized:resized}}function m(e,t){e=parseFloat(e),t=parseFloat(t),$pp_details=$pp_pic_holder.find(".pp_details"),$pp_details.width(e),detailsHeight=parseFloat($pp_details.css("marginTop"))+parseFloat($pp_details.css("marginBottom")),$pp_details=$pp_details.clone().addClass(settings.theme).width(e).appendTo(_("body")).css({position:"absolute",top:-1e4}),detailsHeight+=$pp_details.height(),detailsHeight=detailsHeight<=34?36:detailsHeight,$pp_details.remove(),$pp_title=$pp_pic_holder.find(".ppt"),$pp_title.width(e),titleHeight=parseFloat($pp_title.css("marginTop"))+parseFloat($pp_title.css("marginBottom")),$pp_title=$pp_title.clone().appendTo(_("body")).css({position:"absolute",top:-1e4}),titleHeight+=$pp_title.height(),$pp_title.remove(),n=t+detailsHeight,r=e,o=n+titleHeight+$pp_pic_holder.find(".pp_top").height()+$pp_pic_holder.find(".pp_bottom").height(),a=e}function g(e){return e.match(/youtube\.com\/watch/i)||e.match(/youtu\.be/i)?"youtube":e.match(/vimeo\.com/i)?"vimeo":e.match(/\b.mov\b/i)?"quicktime":e.match(/\b.mp4\b/i)?"mp4":e.match(/\b.swf\b/i)?"flash":e.match(/\biframe=true\b/i)?"iframe":e.match(/\bajax=true\b/i)?"ajax":e.match(/\bcustom=true\b/i)?"custom":"#"==e.substr(0,1)?"inline":"image"}function v(){if(doresize&&"undefined"!=typeof $pp_pic_holder){if(scroll_pos=y(),contentHeight=$pp_pic_holder.height(),contentwidth=$pp_pic_holder.width(),projectedTop=u/2+scroll_pos.scrollTop-contentHeight/2,projectedTop<0&&(projectedTop=0),contentHeight>u)return;$pp_pic_holder.css({top:projectedTop,left:d/2+scroll_pos.scrollLeft-contentwidth/2})}}function y(){return self.pageYOffset?{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset}:document.documentElement&&document.documentElement.scrollTop?{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft}:document.body?{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft}:void 0}function w(){if(settings.social_tools&&(facebook_like_link=settings.social_tools.replace("{location_href}",encodeURIComponent(location.href))),settings.markup=settings.markup.replace("{pp_social}",""),_("body").append(settings.markup),$pp_pic_holder=_(".pp_pic_holder"),$ppt=_(".ppt"),$pp_overlay=_("div.pp_overlay"),isSet&&settings.overlay_gallery){currentGalleryPage=0,toInject="";for(var e=0;e<pp_images.length;e++)pp_images[e].match(/\b(jpg|jpeg|png|gif)\b/gi)?(classname="",img_src=pp_images[e]):(classname="default",img_src=""),toInject+="<li class='"+classname+"'><a href='#'><img src='"+img_src+"' width='50' alt='image' /></a></li>";toInject=settings.gallery_markup.replace(/{gallery}/g,toInject),$pp_pic_holder.find("#pp_full_res").after(toInject),$pp_gallery=_(".pp_pic_holder .pp_gallery"),$pp_gallery_li=$pp_gallery.find("li"),$pp_gallery.find(".pp_arrow_next").click(function(){return _.CloudFwPrettyPhoto.changeGalleryPage("next"),_.CloudFwPrettyPhoto.stopSlideshow(),!1}),$pp_gallery.find(".pp_arrow_previous").click(function(){return _.CloudFwPrettyPhoto.changeGalleryPage("previous"),_.CloudFwPrettyPhoto.stopSlideshow(),!1}),$pp_pic_holder.find(".pp_content").hover(function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeIn()},function(){$pp_pic_holder.find(".pp_gallery:not(.disabled)").fadeOut()}),itemWidth=57,$pp_gallery_li.each(function(e){_(this).find("a").click(function(){return _.CloudFwPrettyPhoto.changePage(e),_.CloudFwPrettyPhoto.stopSlideshow(),!1})})}settings.slideshow&&($pp_pic_holder.find(".pp_nav").prepend('<a href="#" class="pp_play">Play</a>'),$pp_pic_holder.find(".pp_nav .pp_play").click(function(){return _.CloudFwPrettyPhoto.startSlideshow(),!1})),$pp_pic_holder.attr("class","pp_pic_holder "+settings.theme),$pp_overlay.css({opacity:0,height:_(document).height(),width:_(window).width()}).bind("click",function(){settings.modal||_.CloudFwPrettyPhoto.close()}),_("a.pp_close").bind("click",function(){return _.CloudFwPrettyPhoto.close(),!1}),settings.allow_expand&&_("a.pp_expand").bind("click",function(e){return _(this).hasClass("pp_expand")?(_(this).removeClass("pp_expand").addClass("pp_contract"),doresize=!1):(_(this).removeClass("pp_contract").addClass("pp_expand"),doresize=!0),h(function(){_.CloudFwPrettyPhoto.open()}),!1}),$pp_pic_holder.find(".pp_previous, .pp_nav .pp_arrow_previous").bind("click",function(){return _.CloudFwPrettyPhoto.changePage("previous"),_.CloudFwPrettyPhoto.stopSlideshow(),!1}),$pp_pic_holder.find(".pp_next, .pp_nav .pp_arrow_next").bind("click",function(){return _.CloudFwPrettyPhoto.changePage("next"),_.CloudFwPrettyPhoto.stopSlideshow(),!1}),v()}return doresize=!0,scroll_pos=y(),_(window).unbind("resize.prettyphoto").bind("resize.prettyphoto",function(){v(),u=_(window).height(),d=_(window).width(),"undefined"!=typeof $pp_overlay&&$pp_overlay.height(_(document).height()).width(d)}),t.keyboard_shortcuts&&_(document).unbind("keydown.prettyphoto").bind("keydown.prettyphoto",function(e){if("undefined"!=typeof $pp_pic_holder&&$pp_pic_holder.is(":visible"))switch(e.keyCode){case 37:_.CloudFwPrettyPhoto.changePage("previous"),e.preventDefault();break;case 39:_.CloudFwPrettyPhoto.changePage("next"),e.preventDefault();break;case 27:settings.modal||_.CloudFwPrettyPhoto.close(),e.preventDefault()}}),_.CloudFwPrettyPhoto.initialize=function(){return settings=t,"pp_default"==settings.theme&&(settings.horizontal_padding=16),theRel=_(this).attr(settings.hook),galleryRegExp=/\[(?:.*)\]/,isSet=!!galleryRegExp.exec(theRel),pp_images=isSet?jQuery.map(l,function(e,t){if(-1!=_(e).attr(settings.hook).indexOf(theRel))return _(e).attr("href")}):_.makeArray(_(this).attr("href")),pp_titles=isSet?jQuery.map(l,function(e,t){if(-1!=_(e).attr(settings.hook).indexOf(theRel))return _(e).find("img").attr("alt")?_(e).find("img").attr("alt"):""}):_.makeArray(_(this).find("img").attr("alt")),pp_descriptions=isSet?jQuery.map(l,function(e,t){if(-1!=_(e).attr(settings.hook).indexOf(theRel))return _(e).attr("data-title")?_(e).attr("data-title"):""}):_.makeArray(_(this).attr("data-title")),pp_images.length>settings.overlay_gallery_max&&(settings.overlay_gallery=!1),set_position=jQuery.inArray(_(this).attr("href"),pp_images),rel_index=isSet?set_position:_("a["+settings.hook+"^='"+theRel+"']").index(_(this)),w(this),settings.allow_resize&&_(window).bind("scroll.prettyphoto",function(){v()}),_.CloudFwPrettyPhoto.open(),!1},_.CloudFwPrettyPhoto.open=function(e){return"undefined"==typeof settings&&(settings=t,pp_images=_.makeArray(e),pp_titles=arguments[1]?_.makeArray(arguments[1]):_.makeArray(""),pp_descriptions=arguments[2]?_.makeArray(arguments[2]):_.makeArray(""),isSet=1<pp_images.length,set_position=arguments[3]?arguments[3]:0,w(e.target)),settings.hideflash&&_("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css("visibility","hidden"),function(e){1<e?_(".pp_nav").show():_(".pp_nav").hide()}(_(pp_images).size()),_(".pp_loaderIcon").show(),settings.deeplinking&&function(){if("undefined"==typeof theRel)return;location.hash=theRel+"/"+rel_index+"/"}(),settings.social_tools&&(facebook_like_link=settings.social_tools.replace("{location_href}",encodeURIComponent(location.href)),$pp_pic_holder.find(".pp_social").html(facebook_like_link)),$ppt.is(":hidden")&&$ppt.css("opacity",0).show(),$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity),$pp_pic_holder.find(".currentTextHolder").text(set_position+1+settings.counter_separator_label+_(pp_images).size()),void 0!==pp_descriptions[set_position]&&""!=pp_descriptions[set_position]?$pp_pic_holder.find(".pp_description").show().html(unescape(pp_descriptions[set_position])):$pp_pic_holder.find(".pp_description").hide(),movie_width=parseFloat(j("width",pp_images[set_position]))?j("width",pp_images[set_position]):settings.default_width.toString(),movie_height=parseFloat(j("height",pp_images[set_position]))?j("height",pp_images[set_position]):settings.default_height.toString(),c=!1,-1!=movie_height.indexOf("%")&&(movie_height=parseFloat(_(window).height()*parseFloat(movie_height)/100-150),c=!0),-1!=movie_width.indexOf("%")&&(movie_width=parseFloat(_(window).width()*parseFloat(movie_width)/100-150),c=!0),$pp_pic_holder.fadeIn(function(){switch(settings.show_title&&""!=pp_titles[set_position]&&void 0!==pp_titles[set_position]?$ppt.html(unescape(pp_titles[set_position])):$ppt.html("&nbsp;"),imgPreloader="",skipInjection=!1,g(pp_images[set_position])){case"image":imgPreloader=new Image,nextImage=new Image,isSet&&set_position<_(pp_images).size()-1&&(nextImage.src=pp_images[set_position+1]),prevImage=new Image,isSet&&pp_images[set_position-1]&&(prevImage.src=pp_images[set_position-1]),$pp_pic_holder.find("#pp_full_res")[0].innerHTML=settings.image_markup.replace(/{path}/g,pp_images[set_position]),imgPreloader.onload=function(){i=f(imgPreloader.width,imgPreloader.height),p()},imgPreloader.onerror=function(){alert("Image cannot be loaded. Make sure the path is correct and image exist."),_.CloudFwPrettyPhoto.close()},imgPreloader.src=pp_images[set_position];break;case"youtube":i=f(movie_width,movie_height),movie_id=j("v",pp_images[set_position]),""==movie_id&&(movie_id=pp_images[set_position].split("youtu.be/"),movie_id=movie_id[1],0<movie_id.indexOf("?")&&(movie_id=movie_id.substr(0,movie_id.indexOf("?"))),0<movie_id.indexOf("&")&&(movie_id=movie_id.substr(0,movie_id.indexOf("&")))),movie="//www.youtube.com/embed/"+movie_id,j("rel",pp_images[set_position])?movie+="?rel="+j("rel",pp_images[set_position]):movie+="?rel=1",settings.autoplay&&(movie+="&autoplay=1"),toInject=settings.iframe_markup.replace(/{width}/g,i.width).replace(/{height}/g,i.height).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);break;case"vimeo":i=f(movie_width,movie_height),movie_id=pp_images[set_position];var e=movie_id.match(/http(s?):\/\/(www\.)?vimeo.com\/(\d+)/);movie="http://player.vimeo.com/video/"+e[3]+"?title=0&amp;byline=0&amp;portrait=0",settings.autoplay&&(movie+="&autoplay=1;"),vimeo_width=i.width+"/embed/?moog_width="+i.width,toInject=settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,i.height).replace(/{path}/g,movie);break;case"quicktime":(i=f(movie_width,movie_height)).height+=15,i.contentHeight+=15,i.containerHeight+=15,toInject=settings.quicktime_markup.replace(/{width}/g,i.width).replace(/{height}/g,i.height).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);break;case"mp4":(i=f(movie_width,movie_height)).height+=15,i.contentHeight+=15,i.containerHeight+=15,toInject=settings.mp4_markup.replace(/{width}/g,i.width).replace(/{height}/g,i.height).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);break;case"flash":i=f(movie_width,movie_height),flash_vars=pp_images[set_position],flash_vars=flash_vars.substring(pp_images[set_position].indexOf("flashvars")+10,pp_images[set_position].length),filename=pp_images[set_position],filename=filename.substring(0,filename.indexOf("?")),toInject=settings.flash_markup.replace(/{width}/g,i.width).replace(/{height}/g,i.height).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+"?"+flash_vars);break;case"iframe":i=f(movie_width,movie_height),frame_url=pp_images[set_position],frame_url=frame_url.substr(0,frame_url.indexOf("iframe")-1),toInject=settings.iframe_markup.replace(/{width}/g,i.width).replace(/{height}/g,i.height).replace(/{path}/g,frame_url);break;case"ajax":doresize=!1,i=f(movie_width,movie_height),doresize=!0,skipInjection=!0,_.get(pp_images[set_position],function(e){toInject=settings.inline_markup.replace(/{content}/g,e),$pp_pic_holder.find("#pp_full_res")[0].innerHTML=toInject,p()});break;case"custom":i=f(movie_width,movie_height),toInject=settings.custom_markup;break;case"inline":myClone=_(pp_images[set_position]).clone().append('<br clear="all" />').css({width:settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo(_("body")).show(),doresize=!1,i=f(_(myClone).width(),_(myClone).height()),doresize=!0,_(myClone).remove(),toInject=settings.inline_markup.replace(/{content}/g,_(pp_images[set_position]).html())}imgPreloader||skipInjection||($pp_pic_holder.find("#pp_full_res")[0].innerHTML=toInject,p()),settings.opened()}),!1},_.CloudFwPrettyPhoto.changePage=function(e){currentGalleryPage=0,"previous"==e?(set_position--,set_position<0&&(set_position=_(pp_images).size()-1)):"next"==e?(set_position++,set_position>_(pp_images).size()-1&&(set_position=0)):set_position=e,rel_index=set_position,doresize=doresize||!0,settings.allow_expand&&_(".pp_contract").removeClass("pp_contract").addClass("pp_expand"),h(function(){_.CloudFwPrettyPhoto.open()})},_.CloudFwPrettyPhoto.changeGalleryPage=function(e){"next"==e?(currentGalleryPage++,currentGalleryPage>totalPage&&(currentGalleryPage=0)):"previous"==e?(currentGalleryPage--,currentGalleryPage<0&&(currentGalleryPage=totalPage)):currentGalleryPage=e,slide_speed="next"==e||"previous"==e?settings.animation_speed:0,slide_to=currentGalleryPage*(itemsPerPage*itemWidth),$pp_gallery.find("ul").animate({left:-slide_to},slide_speed)},_.CloudFwPrettyPhoto.startSlideshow=function(){void 0===s?($pp_pic_holder.find(".pp_play").unbind("click").removeClass("pp_play").addClass("pp_pause").click(function(){return _.CloudFwPrettyPhoto.stopSlideshow(),!1}),s=setInterval(_.CloudFwPrettyPhoto.startSlideshow,settings.slideshow)):_.CloudFwPrettyPhoto.changePage("next")},_.CloudFwPrettyPhoto.stopSlideshow=function(){$pp_pic_holder.find(".pp_pause").unbind("click").removeClass("pp_pause").addClass("pp_play").click(function(){return _.CloudFwPrettyPhoto.startSlideshow(),!1}),clearInterval(s),s=void 0},_.CloudFwPrettyPhoto.close=function(){$pp_overlay.is(":animated")||(_.CloudFwPrettyPhoto.stopSlideshow(),$pp_pic_holder.stop().find("object,embed").css("visibility","hidden"),_("div.pp_pic_holder,div.ppt,.pp_fade").fadeOut(settings.animation_speed,function(){_(this).remove()}),$pp_overlay.fadeOut(settings.animation_speed,function(){settings.hideflash&&_("object,embed,iframe[src*=youtube],iframe[src*=vimeo]").css("visibility","visible"),_(this).remove(),_(window).unbind("scroll.prettyphoto"),-1!==location.href.indexOf("#prettyPhoto")&&(location.hash="prettyPhoto"),settings.callback(),doresize=!0,e=!1,delete settings}))},!pp_alreadyInitialized&&b()&&(pp_alreadyInitialized=!0,hashIndex=b(),hashRel=hashIndex,hashIndex=hashIndex.substring(hashIndex.indexOf("/")+1,hashIndex.length-1),hashRel=hashRel.substring(0,hashRel.indexOf("/")),setTimeout(function(){_("a["+t.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger("click")},50)),this.unbind("click.prettyphoto").bind("click.prettyphoto",_.CloudFwPrettyPhoto.initialize)}}(jQuery);var pp_alreadyInitialized=!1;!function(n){n.belowthefold=function(e,t){return n(window).height()+n(window).scrollTop()<=n(e).offset().top-t.threshold},n.abovethetop=function(e,t){return n(window).scrollTop()>=n(e).offset().top+n(e).height()-t.threshold},n.rightofscreen=function(e,t){return n(window).width()+n(window).scrollLeft()<=n(e).offset().left-t.threshold},n.leftofscreen=function(e,t){return n(window).scrollLeft()>=n(e).offset().left+n(e).width()-t.threshold},n.inviewport=function(e,t){return!(n.rightofscreen(e,t)||n.leftofscreen(e,t)||n.belowthefold(e,t)||n.abovethetop(e,t))},n.extend(n.expr[":"],{"below-the-fold":function(e,t,i){return n.belowthefold(e,{threshold:0})},"above-the-top":function(e,t,i){return n.abovethetop(e,{threshold:0})},"left-of-screen":function(e,t,i){return n.leftofscreen(e,{threshold:0})},"right-of-screen":function(e,t,i){return n.rightofscreen(e,{threshold:0})},"in-viewport":function(e,t,i){return n.inviewport(e,{threshold:0})}})}(jQuery),function(){var t,i,_=[].indexOf||function(e){for(var t=0,i=this.length;t<i;t++)if(t in this&&this[t]===e)return t;return-1},b=[].slice;t=this,i=function(l,o){var t,a,s,c,i,u,d,r,p,n,h,f,m,g,v,y;function e(e){var t=this;this.$element=e,this.element=e[0],this.didResize=!1,this.didScroll=!1,this.id="context"+i++,this.oldScroll={x:e.scrollLeft(),y:e.scrollTop()},this.cloudfw_waypoints={horizontal:{},vertical:{}},e.data(u,this.id),d[this.id]=this,e.bind(f,function(){var e;if(!t.didScroll&&!r)return t.didScroll=!0,e=function(){return t.doScroll(),t.didScroll=!1},o.setTimeout(e,l[y].settings.scrollThrottle)}),e.bind(h,function(){var e;if(!t.didResize)return t.didResize=!0,e=function(){return l[y]("refresh"),t.didResize=!1},o.setTimeout(e,l[y].settings.resizeThrottle)})}function w(e,t,i){var n,r;"bottom-in-view"===(i=l.extend({},l.fn[v].defaults,i)).offset&&(i.offset=function(){var e;return e=l[y]("viewportHeight"),l.isWindow(t.element)||(e=t.$element.height()),e-l(this).outerHeight()}),this.$element=e,this.element=e[0],this.axis=i.horizontal?"horizontal":"vertical",this.callback=i.handler,this.context=t,this.enabled=i.enabled,this.id="cloudfw_waypoints"+m++,this.offset=null,this.options=i,t.cloudfw_waypoints[this.axis][this.id]=this,c[this.axis][this.id]=this,(n=null!=(r=e.data(g))?r:[]).push(this.id),e.data(g,n)}return t=l(o),r=0<=_.call(o,"ontouchstart"),c={horizontal:{},vertical:{}},d={},u="cloudfw_waypoints-context-id",h="resize.cloudfw_waypoints",f="scroll.cloudfw_waypoints",m=i=1,g="cloudfw_waypoints-cloudfw_waypoint-ids",v="cloudfw_waypoint",y="cloudfw_waypoints",e.prototype.doScroll=function(){var e,n=this;return e={horizontal:{newScroll:this.$element.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.$element.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}},!r||e.vertical.oldScroll&&e.vertical.newScroll||l[y]("refresh"),l.each(e,function(e,r){var i,t,o;return o=[],t=r.newScroll>r.oldScroll,i=t?r.forward:r.backward,l.each(n.cloudfw_waypoints[e],function(e,t){var i,n;return r.oldScroll<(i=t.offset)&&i<=r.newScroll?o.push(t):r.newScroll<(n=t.offset)&&n<=r.oldScroll?o.push(t):void 0}),o.sort(function(e,t){return e.offset-t.offset}),t||o.reverse(),l.each(o,function(e,t){if(t.options.continuous||e===o.length-1)return t.trigger([i])})}),this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.refresh=function(){var e,t,i,n=this;return i=l.isWindow(this.element),t=this.$element.offset(),this.doScroll(),e={horizontal:{contextOffset:i?0:t.left,contextScroll:i?0:this.oldScroll.x,contextDimension:this.$element.width(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:i?0:t.top,contextScroll:i?0:this.oldScroll.y,contextDimension:i?l[y]("viewportHeight"):this.$element.height(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}},l.each(e,function(e,s){return l.each(n.cloudfw_waypoints[e],function(e,t){var i,n,r,o,a;if(i=t.options.offset,r=t.offset,n=l.isWindow(t.element)?0:t.$element.offset()[s.offsetProp],l.isFunction(i)?i=i.apply(t.element):"string"==typeof i&&(i=parseFloat(i),-1<t.options.offset.indexOf("%")&&(i=Math.ceil(s.contextDimension*i/100))),t.offset=n-s.contextOffset+s.contextScroll-i,(!t.options.onlyOnScroll||null==r)&&t.enabled)return null!==r&&r<(o=s.oldScroll)&&o<=t.offset?t.trigger([s.backward]):null!==r&&r>(a=s.oldScroll)&&a>=t.offset?t.trigger([s.forward]):null===r&&s.oldScroll>=t.offset?t.trigger([s.forward]):void 0})})},e.prototype.checkEmpty=function(){if(l.isEmptyObject(this.cloudfw_waypoints.horizontal)&&l.isEmptyObject(this.cloudfw_waypoints.vertical))return this.$element.unbind([h,f].join(" ")),delete d[this.id]},a=e,w.prototype.trigger=function(e){if(this.enabled)return null!=this.callback&&this.callback.apply(this.element,e),this.options.triggerOnce?this.destroy():void 0},w.prototype.disable=function(){return this.enabled=!1},w.prototype.enable=function(){return this.context.refresh(),this.enabled=!0},w.prototype.destroy=function(){return delete c[this.axis][this.id],delete this.context.cloudfw_waypoints[this.axis][this.id],this.context.checkEmpty()},w.getcloudfw_waypointsByElement=function(e){var t,i;return(i=l(e).data(g))?(t=l.extend({},c.horizontal,c.vertical),l.map(i,function(e){return t[e]})):[]},s=w,n={init:function(e,r){return null==r&&(r={}),null==r.handler&&(r.handler=e),this.each(function(){var e,t,i,n;return e=l(this),i=null!=(n=r.context)?n:l.fn[v].defaults.context,l.isWindow(i)||(i=e.closest(i)),i=l(i),t=(t=d[i.data(u)])||new a(i),new s(e,t,r)}),l[y]("refresh"),this},disable:function(){return n._invoke(this,"disable")},enable:function(){return n._invoke(this,"enable")},destroy:function(){return n._invoke(this,"destroy")},prev:function(e,t){return n._traverse.call(this,e,t,function(e,t,i){if(0<t)return e.push(i[t-1])})},next:function(e,t){return n._traverse.call(this,e,t,function(e,t,i){if(t<i.length-1)return e.push(i[t+1])})},_traverse:function(t,e,i){var n,r;return null==t&&(t="vertical"),null==e&&(e=o),r=p.aggregate(e),n=[],this.each(function(){var e;return e=l.inArray(this,r[t]),i(n,e,r[t])}),this.pushStack(n)},_invoke:function(e,i){return e.each(function(){var e;return e=s.getcloudfw_waypointsByElement(this),l.each(e,function(e,t){return t[i](),!0})}),this}},l.fn[v]=function(){var e,t;return t=arguments[0],e=2<=arguments.length?b.call(arguments,1):[],n[t]?n[t].apply(this,e):l.isFunction(t)?n.init.apply(this,arguments):l.isPlainObject(t)?n.init.apply(this,[null,t]):t?l.error("The "+t+" method does not exist in jQuery cloudfw_waypoints."):l.error("jQuery cloudfw_waypoints needs a callback function or handler option.")},l.fn[v].defaults={context:o,continuous:!0,enabled:!0,horizontal:!1,offset:0,triggerOnce:!1},p={refresh:function(){return l.each(d,function(e,t){return t.refresh()})},viewportHeight:function(){var e;return null!=(e=o.innerHeight)?e:t.height()},aggregate:function(e){var t,n,i;return t=c,e&&(t=null!=(i=d[l(e).data(u)])?i.cloudfw_waypoints:void 0),t?(n={horizontal:[],vertical:[]},l.each(n,function(e,i){return l.each(t[e],function(e,t){return i.push(t)}),i.sort(function(e,t){return e.offset-t.offset}),n[e]=l.map(i,function(e){return e.element}),n[e]=l.unique(n[e])}),n):[]},above:function(e){return null==e&&(e=o),p._filter(e,"vertical",function(e,t){return t.offset<=e.oldScroll.y})},below:function(e){return null==e&&(e=o),p._filter(e,"vertical",function(e,t){return t.offset>e.oldScroll.y})},left:function(e){return null==e&&(e=o),p._filter(e,"horizontal",function(e,t){return t.offset<=e.oldScroll.x})},right:function(e){return null==e&&(e=o),p._filter(e,"horizontal",function(e,t){return t.offset>e.oldScroll.x})},enable:function(){return p._invoke("enable")},disable:function(){return p._invoke("disable")},destroy:function(){return p._invoke("destroy")},extendFn:function(e,t){return n[e]=t},_invoke:function(i){var e;return e=l.extend({},c.vertical,c.horizontal),l.each(e,function(e,t){return t[i](),!0})},_filter:function(e,t,i){var n,r;return(n=d[l(e).data(u)])?(r=[],l.each(n.cloudfw_waypoints[t],function(e,t){if(i(n,t))return r.push(t)}),r.sort(function(e,t){return e.offset-t.offset}),l.map(r,function(e){return e.element})):[]}},l[y]=function(){var e,t;return t=arguments[0],e=2<=arguments.length?b.call(arguments,1):[],p[t]?p[t].apply(null,e):p.aggregate.call(null,t)},l[y].settings={resizeThrottle:100,scrollThrottle:30},t.on("load",function(){return l[y]("refresh")})},"function"==typeof define&&define.amd?define("cloudfw_waypoints",["jquery"],function(e){return i(e,t)}):i(t.jQuery,t)}.call(this),function(){var e,t;e=this,t=function(s){var t,i;return t={wrapper:'<div class="sticky-wrapper" />',stuckClass:"stuck",noStuckClass:"no-stuck"},i=function(e,t){return e.wrap(t.wrapper),e.parent()},s.cloudfw_waypoints("extendFn","sticky",function(e){var r,o,a;return o=s.extend({},s.fn.cloudfw_waypoint.defaults,t,e),r=i(this,o),a=o.handler,o.handler=function(e){var t,i;t=s(this).children(":first");var n=(i="down"===e||"right"===e)?t.outerHeight():"";if(t.toggleClass(o.stuckClass,i),t.toggleClass(o.noStuckClass,!i),r.height(n),null!=a)return a.call(this,e)},r.cloudfw_waypoint(o),this.data("stuckClass",o.stuckClass)}),s.cloudfw_waypoints("extendFn","unsticky",function(){return this.parent().cloudfw_waypoint("destroy"),this.unwrap(),this.removeClass(this.data("stuckClass"))})},"function"==typeof define&&define.amd?define(["jquery","cloudfw_waypoints"],t):t(e.jQuery)}.call(this),jQuery(document).ready(function(){blogGalleryInit=function(n){jQuery(".ui--blog-gallery").each(function(){var t=jQuery(this);if(!t.data("flexslider")){var i=jQuery(".ui--blog-gallery-item-1 img",t);i.imagesLoaded(function(){t.css({height:i.height()}),jQuery(window).on("load",function(){blogGalleryInit(n)});var e=CloudFwParseAttribute(t.attr("data-options"));e.auto_rotate="1"==e.auto_rotate,t.flexslider({namespace:"ui--blog-gallery-",selector:".slides > div",animation:e.effect||"slide",slideshow:e.auto_rotate||!1,slideshowSpeed:e.rotate_time||7e3,smoothHeight:!0,controlNav:!1,directionNav:!1,keyboard:!1});t.data("flexslider");t.find(".ui--blog-gallery-navigation").remove(),t.append(jQuery("<div/>").addClass("ui--blog-gallery-navigation")),t.find(".ui--blog-gallery-navigation").html('<span class="arr arr-normal arr-left ui--carosuel-prev"><span></span><i class="fontawesome-chevron-left px18"></i></span> <span class="arr arr-normal ui--carosuel-next"><span></span><i class="fontawesome-chevron-right px18"></i></span>'),t.find(".ui--blog-gallery-navigation > .ui--carosuel-prev").click(function(){t.flexslider("prev")}),t.find(".ui--blog-gallery-navigation > .ui--carosuel-next").click(function(){t.flexslider("next")})})}})},blogGalleryInit(),jQuery(window).on("load",function(){blogGalleryInit()})});var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"Other",this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"Unknown"},searchString:function(e){for(var t=0;t<e.length;t++){var i=e[t].string;if(this.versionSearchString=e[t].subString,-1!=i.indexOf(e[t].subString))return e[t].identity}},searchVersion:function(e){var t=e.indexOf(this.versionSearchString);if(-1!=t)return parseFloat(e.substring(t+this.versionSearchString.length+1))},dataBrowser:[{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:navigator.userAgent,subString:"MSIE",identity:"IE"},{string:navigator.userAgent,subString:"Trident/",identity:"IE"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.userAgent,subString:"Safari",identity:"Safari"},{string:navigator.userAgent,subString:"Opera",identity:"Opera"}]};BrowserDetect.init(),function(d){d.fn.hoverIntent=function(e,t,i){var n,r,o,a,s={interval:100,sensitivity:7,timeout:0};s="object"==typeof e?d.extend(s,e):d.isFunction(t)?d.extend(s,{over:e,out:t,selector:i}):d.extend(s,{over:e,out:e,selector:t});function l(e){n=e.pageX,r=e.pageY}function c(e){var t=jQuery.extend({},e),i=this;i.hoverIntent_t&&(i.hoverIntent_t=clearTimeout(i.hoverIntent_t)),"mouseenter"==e.type?(o=t.pageX,a=t.pageY,d(i).on("mousemove.hoverIntent",l),1!=i.hoverIntent_s&&(i.hoverIntent_t=setTimeout(function(){u(t,i)},s.interval))):(d(i).off("mousemove.hoverIntent",l),1==i.hoverIntent_s&&(i.hoverIntent_t=setTimeout(function(){!function(e,t){t.hoverIntent_t=clearTimeout(t.hoverIntent_t),t.hoverIntent_s=0,s.out.apply(t,[e])}(t,i)},s.timeout)))}var u=function(e,t){if(t.hoverIntent_t=clearTimeout(t.hoverIntent_t),Math.abs(o-n)+Math.abs(a-r)<s.sensitivity)return d(t).off("mousemove.hoverIntent",l),t.hoverIntent_s=1,s.over.apply(t,[e]);o=n,a=r,t.hoverIntent_t=setTimeout(function(){u(e,t)},s.interval)};return this.on({"mouseenter.hoverIntent":c,"mouseleave.hoverIntent":c},s.selector)}}(jQuery),function(o){"use strict";var e,t,a,n,i,r,s,l,c,u,d,p,h,f,m=(a="sf-breadcrumb",n="sf-js-enabled",i="sf-with-ul",r="sf-arrows",(t=/iphone|ipad|ipod/i.test(navigator.userAgent.toLowerCase()))&&o(window).on("load",function(){o("body").children().on("click",o.noop)}),s=t,l="behavior"in(e=document.documentElement.style)&&"fill"in e&&/iemobile/i.test(navigator.userAgent),c=function(e){var t=o(this),i=t.siblings(e.data.popUpSelector);0<i.length&&i.is(":hidden")&&(t.one("click.superfish",!1),"MSPointerDown"===e.type?t.trigger("focus"):o.proxy(u,t.parent("li"))())},u=function(){var e=o(this),t=f(e);clearTimeout(t.sfTimer),e.siblings().superfish("hide").end().superfish("show")},d=function(){var e=o(this),t=f(e);s?o.proxy(p,e,t)():(t.sfTimer&&clearTimeout(t.sfTimer),t.sfTimer=setTimeout(o.proxy(p,e,t),t.delay))},p=function(e){e.retainPath=-1<o.inArray(this[0],e.$path),this.superfish("hide"),this.parents("."+e.hoverClass).length||(e.onIdle.call(h(this)),e.$path.length&&o.proxy(u,e.$path)())},h=function(e){return e.closest("."+n)},f=function(e){return h(e).data("sf-options")},{hide:function(e){if(this.length){var t=f(this);if(!t)return this;var i=!0===t.retainPath?t.$path:"",n=this.find("li."+t.hoverClass).add(this).not(i).removeClass(t.hoverClass).children(t.popUpSelector),r=t.speedOut;e&&(n.show(),r=0),t.retainPath=!1,t.onBeforeHide.call(this,n),n.stop(!0,!0).animate(t.animationOut,r,function(){var e=o(this);t.onHide.call(e)})}return this},show:function(){var e=f(this);if(!e)return this;var t=this.addClass(e.hoverClass).children(e.popUpSelector);return e.onBeforeShow.call(this,t),t.stop(!0,!0).animate(e.animation,e.speed,function(){e.onShow.call(this,t)}),this},destroy:function(){return this.each(function(){var e,t=o(this),i=t.data("sf-options");if(!i)return!1;e=t.find(i.popUpSelector).parent("li"),clearTimeout(i.sfTimer),g(t,i),v(e),y(t),t.off(".superfish").off(".hoverIntent"),e.children(i.popUpSelector).attr("style",function(e,t){return t.replace(/display[^;]+;?/g,"")}),i.$path.removeClass(i.hoverClass+" "+a).addClass(i.pathClass),t.find("."+i.hoverClass).removeClass(i.hoverClass),i.onDestroy.call(t),t.removeData("sf-options")})},init:function(r){return this.each(function(){var e=o(this);if(e.data("sf-options"))return!1;var t=o.extend({},o.fn.superfish.defaults,r),i=e.find(t.popUpSelector).parent("li");t.$path=function(e,t){return e.find("li."+t.pathClass).slice(0,t.pathLevels).addClass(t.hoverClass+" "+a).filter(function(){return o(this).children(t.popUpSelector).hide().show().length}).removeClass(t.pathClass)}(e,t),e.data("sf-options",t),g(e,t),v(i),y(e),function(e,t){var i="li:has("+t.popUpSelector+")";"click"==t.fire_event?e.on("click.superfish",i,u).on("mouseleave.superfish",i,d):o.fn.hoverIntent&&!t.disableHI?e.hoverIntent(u,d,i):e.on("mouseenter.superfish",i,u).on("mouseleave.superfish",i,d);var n="MSPointerDown.superfish";s||(n+=" touchend.superfish"),l&&(n+=" mousedown.superfish"),e.on("focusin.superfish","li",u).on("focusout.superfish","li",d).on(n,"a",t,c)}(e,t),i.not("."+a).superfish("hide",!0),t.onInit.call(this);var n=!1;"click"==t.fire_event&&(n=!0),e.iosnavfix(n)})}});function g(e,t){var i=n;t.cssArrows&&(i+=" "+r),e.toggleClass(i)}function v(e){e.children("a").toggleClass(i)}function y(e){var t=e.css("ms-touch-action");t="pan-y"===t?"auto":"pan-y",e.css("ms-touch-action",t)}o.fn.superfish=function(e,t){return m[e]?m[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?o.error("Method "+e+" does not exist on jQuery.fn.superfish"):m.init.apply(this,arguments)},o.fn.superfish.defaults={popUpSelector:"ul, .sf-mega",hoverClass:"sfHover",pathClass:"overrideThisToUse",fire_event:"hover",pathLevels:1,delay:800,animation:{opacity:"show"},animationOut:{opacity:"hide"},speed:"normal",speedOut:"fast",cssArrows:!0,disableHI:!1,onInit:o.noop,onBeforeShow:o.noop,onShow:o.noop,onBeforeHide:o.noop,onHide:o.noop,onIdle:o.noop,onDestroy:o.noop},o.fn.extend({hideSuperfishUl:m.hide,showSuperfishUl:m.show})}(jQuery),function(e,n){n.fn.iosnavfix=function(i){return this.each(function(){if(navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/iPad/i)||navigator.userAgent.toLowerCase().match(/android/i)||i){var e=n(this),t=[];n("li",e).each(function(){var e=n(this),i=n("> a",e);(e.children("ul").length||e.children("ol").length)&&(i.data("clicked",!1),i.on("click",function(e){return jQuery.each(t,function(e,t){t.jquery&&t!=i&&t.data("clicked",!1)}),0==i.data("clicked")?(i.data("clicked",!0),t.push(i),!1):(i.data("clicked",!1),!0)}))})}})}}(window,jQuery),function(){"use strict";function e(){}function o(e,t){for(var i=e.length;i--;)if(e[i].listener===t)return i;return-1}var t=e.prototype;t.getListeners=function(e){var t,i,n=this._getEvents();if("object"==typeof e)for(i in t={},n)n.hasOwnProperty(i)&&e.test(i)&&(t[i]=n[i]);else t=n[e]||(n[e]=[]);return t},t.flattenListeners=function(e){var t,i=[];for(t=0;e.length>t;t+=1)i.push(e[t].listener);return i},t.getListenersAsObject=function(e){var t,i=this.getListeners(e);return i instanceof Array&&((t={})[e]=i),t||i},t.addListener=function(e,t){var i,n=this.getListenersAsObject(e),r="object"==typeof t;for(i in n)n.hasOwnProperty(i)&&-1===o(n[i],t)&&n[i].push(r?t:{listener:t,once:!1});return this},t.on=t.addListener,t.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},t.once=t.addOnceListener,t.defineEvent=function(e){return this.getListeners(e),this},t.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},t.removeListener=function(e,t){var i,n,r=this.getListenersAsObject(e);for(n in r)r.hasOwnProperty(n)&&(-1!==(i=o(r[n],t))&&r[n].splice(i,1));return this},t.off=t.removeListener,t.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},t.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},t.manipulateListeners=function(e,t,i){var n,r,o=e?this.removeListener:this.addListener,a=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(n=i.length;n--;)o.call(this,t,i[n]);else for(n in t)t.hasOwnProperty(n)&&(r=t[n])&&("function"==typeof r?o.call(this,n,r):a.call(this,n,r));return this},t.removeEvent=function(e){var t,i=typeof e,n=this._getEvents();if("string"==i)delete n[e];else if("object"==i)for(t in n)n.hasOwnProperty(t)&&e.test(t)&&delete n[t];else delete this._events;return this},t.emitEvent=function(e,t){var i,n,r,o=this.getListenersAsObject(e);for(r in o)if(o.hasOwnProperty(r))for(n=o[r].length;n--;)(i=o[r][n]).listener.apply(this,t||[])!==this._getOnceReturnValue()&&!0!==i.once||this.removeListener(e,o[r][n].listener);return this},t.trigger=t.emitEvent,t.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},t.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},t._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},t._getEvents=function(){return this._events||(this._events={})},"function"==typeof define&&define.amd?define(function(){return e}):"undefined"!=typeof module&&module.exports?module.exports=e:this.EventEmitter=e}.call(this),function(n){"use strict";var e=document.documentElement,t=function(){};e.addEventListener?t=function(e,t,i){e.addEventListener(t,i,!1)}:e.attachEvent&&(t=function(t,e,i){t[e+i]=i.handleEvent?function(){var e=n.event;e.target=e.target||e.srcElement,i.handleEvent.call(i,e)}:function(){var e=n.event;e.target=e.target||e.srcElement,i.call(t,e)},t.attachEvent("on"+e,t[e+i])});var i=function(){};e.removeEventListener?i=function(e,t,i){e.removeEventListener(t,i,!1)}:e.detachEvent&&(i=function(t,i,n){t.detachEvent("on"+i,t[i+n]);try{delete t[i+n]}catch(e){t[i+n]=void 0}});var r={bind:t,unbind:i};"function"==typeof define&&define.amd?define(r):n.eventie=r}(this),function(e){"use strict";function a(e,t){for(var i in t)e[i]=t[i];return e}function s(e){var t=[];if(function(e){return"[object Array]"===r.call(e)}(e))t=e;else if("number"==typeof e.length)for(var i=0,n=e.length;i<n;i++)t.push(e[i]);else t.push(e);return t}function t(e,i){function r(e,t,i){if(!(this instanceof r))return new r(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=s(e),this.options=a({},this.options),"function"==typeof t?i=t:a(this.options,t),i&&this.on("always",i),this.getImages(),l&&(this.jqDeferred=new l.Deferred);var n=this;setTimeout(function(){n.check()})}function n(e){this.img=e}(r.prototype=new e).options={},r.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;e<t;e++){var i=this.elements[e];"IMG"===i.nodeName&&this.addImage(i);for(var n=i.querySelectorAll("img"),r=0,o=n.length;r<o;r++){var a=n[r];this.addImage(a)}}},r.prototype.addImage=function(e){var t=new n(e);this.images.push(t)},r.prototype.check=function(){function e(e,t){return i.options.debug&&u&&c.log("confirm",e,t),i.progress(e),++n===r&&i.complete(),!0}var i=this,n=0,r=this.images.length;if(this.hasAnyBroken=!1,r)for(var t=0;t<r;t++){var o=this.images[t];o.on("confirm",e),o.check()}else this.complete()},r.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify(t,e)})},r.prototype.complete=function(){var t=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var i=this;setTimeout(function(){if(i.emit(t,i),i.emit("always",i),i.jqDeferred){var e=i.hasAnyBroken?"reject":"resolve";i.jqDeferred[e](i)}})},l&&(l.fn.imagesLoaded=function(e,t){return new r(this,e,t).jqDeferred.promise(l(this))});var o={};return(n.prototype=new e).check=function(){var e=o[this.img.src];if(e)this.useCached(e);else if((o[this.img.src]=this).img.complete&&void 0!==this.img.naturalWidth)this.confirm(0!==this.img.naturalWidth,"naturalWidth");else{var t=this.proxyImage=new Image;i.bind(t,"load",this),i.bind(t,"error",this),t.src=this.img.src}},n.prototype.useCached=function(e){if(e.isConfirmed)this.confirm(e.isLoaded,"cached was confirmed");else{var t=this;e.on("confirm",function(e){return t.confirm(e.isLoaded,"cache emitted confirmed"),!0})}},n.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},n.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},n.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindProxyEvents()},n.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindProxyEvents()},n.prototype.unbindProxyEvents=function(){i.unbind(this.proxyImage,"load",this),i.unbind(this.proxyImage,"error",this)},r}var l=e.jQuery,c=e.console,u=void 0!==c,r=Object.prototype.toString;"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],t):e.imagesLoaded=t(e.EventEmitter,e.eventie)}(window),function(i){var n="uiVerticalCenter",r={};function t(e,t){this.element=e,this.options=i.extend({},r,t),this._defaults=r,this._name=n,this.init()}t.prototype={init:function(){var t=jQuery(this.element),e=t.find("img"),i=t.outerHeight();t.css({"margin-top":-i/2}).attr("data-height",i),e.length&&e.imagesLoaded(function(){var e=t.outerHeight();t.css({"margin-top":-e/2})})},calcHeight:function(){var e=jQuery(this.element);return parseInt(e.css("margin-top"),10)+parseInt(e.css("padding-top"),10)+parseInt(e.css("border-top-width"),10)+parseInt(e.height(),10)+parseInt(e.css("border-bottom-width"),10)+parseInt(e.css("padding-bottom"),10)+parseInt(e.css("margin-bottom"),10)}},i.fn[n]=function(e){return this.each(function(){i.data(this,"plugin_"+n)||i.data(this,"plugin_"+n,new t(this,e))})}}(jQuery,window,document),jQuery(document).ready(function(){function e(){jQuery(".ui--center-vertical").uiVerticalCenter()}setTimeout(function(){e()},100),jQuery(window).resize(e),jQuery(window).on("load",e)}),jQuery(document).ready(function(){blogGalleryInit=function(r){jQuery(".ui--blog-gallery").each(function(){var i=jQuery(this);if(!i.data("flexslider")){var n=jQuery(".ui--blog-gallery-item-1 img",i);n.imagesLoaded(function(){i.css({height:n.height()}),jQuery(window).on("load",function(){blogGalleryInit(r)});var e=CloudFwParseAttribute(i.attr("data-options"));e.auto_rotate="1"==e.auto_rotate,i.flexslider({namespace:"ui--blog-gallery-",selector:".slides > div",animation:e.effect||"slide",slideshow:e.auto_rotate||!1,slideshowSpeed:e.rotate_time||7e3,smoothHeight:!0,controlNav:!1,directionNav:!1,keyboard:!1});var t=(i.data("flexslider"),function(){i.flexslider("prev")});i.find(".ui--blog-gallery-navigation").remove(),i.append(jQuery("<div/>").addClass("ui--blog-gallery-navigation")),i.find(".ui--blog-gallery-navigation").html('<span class="arr arr-normal arr-left ui--carosuel-prev"><span></span><i class="fontawesome-chevron-left px18"></i></span> <span class="arr arr-normal ui--carosuel-next"><span></span><i class="fontawesome-chevron-right px18"></i></span>'),i.find(".ui--blog-gallery-navigation > .ui--carosuel-prev").click(t),i.find(".ui--blog-gallery-navigation > .ui--carosuel-next").click(function(){i.flexslider("next")})})}})},blogGalleryInit(),jQuery(window).on("load",function(){blogGalleryInit()})}),jQuery(document).ready(function(){if(jQuery("body").hasClass("layout--boxed")){function e(){var e=jQuery("#page-wrap").width();jQuery("#header-container").width(e)}e(),jQuery(window).smartresize(e)}}),jQuery(document).ready(function(){"use strict";jQuery.fn.extend({selectCurrentMenu:function(){return jQuery.fn.extend({matchClasses:function(){return this.is(".current-menu-item, .current-menu-ancestor, .current-menu-parent, .current_page_parent, .current_page_ancestor, .current_page_item")&&(this.parents(".depth-0").length?this.parents(".depth-0").last().addClass("current-item-handler"):this.addClass("current-item-handler").addClass("current-sub-item")),this.removeClass("current-menu-item current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor current_page_item"),this},loopItems:function(){this.length&&this.each(function(){var e=jQuery(this);if(e.matchClasses(),e.children(".sub-menu").length){var t=e.children(".sub-menu").children();t.length?t.loopItems():(e.find(".ui--caret").remove(),e.children(".sub-menu").remove())}})},setCurrentItem:function(){var e="current-menu-item";this.find(".current-item-handler").length&&(this.find(".current-item-handler").is(".force-for-select")?this.find(".current-item-handler.force-for-select").removeClass("current-item-handler").first().addClass(e):this.find(".current-item-handler").removeClass("current-item-handler").first().addClass(e))}}),this.each(function(){var e=jQuery(this);e.children().loopItems(),e.setCurrentItem()})},prepareMenu:function(){return this.each(function(){var e=jQuery(this);e.find("li").each(function(){jQuery(this).find(".sub-menu").length&&(jQuery(this).hasClass("has-sub-menu")||jQuery(this).addClass("has-sub-menu").find("a").first().append('<span class="indicator"></span>'))});var t=e.children("ul > li.depth-0"),i=t.length;t.each(function(e){jQuery(this).addClass("asc-"+e++).addClass("desc-"+parseInt(i-e,10))})})}}),jQuery("#header-navigation").selectCurrentMenu()}),jQuery(document).ready(function(){"use strict";function e(){jQuery(".ui--animation-in:in-viewport").each(function(){var e=jQuery(this);return!e.is(":visible")||(!!e.data("inViewport")||(e.data("inViewport",!0),void l(e)))})}var l=function(e){var t=e.hasClass("ui--animation-in")?e:e.parents(".ui--animation-in:first"),i=e.find(".ui--animation"),o=t.attr("data-fx"),a=parseInt(e.attr("data-start-delay"),10)||0,s=parseInt(t.attr("data-delay"),10)||150,n=e.find(".ui--carousel");if(n.length&&n.find(".ui--carousel-active-slide").length){var r=i;n.parents(".ui--animation").length?l(n.find(".ui--carousel-active-slide")):i=n.find(".ui--carousel-active-slide").find(".ui--animation"),r.not(i).addClass("ui--animation-fire")}(i=i.filter(function(e){var t=jQuery(this).parents(".ui--animation");return 0===(t=t.filter(function(){return 0===jQuery(this).find(".ui--animation-in").length})).length})).each(function(e){var t=jQuery(this),i=t.attr("data-fx"),n=parseInt(t.attr("data-delay"),10)||0,r=a+n+e*s;i?t.addClass(i):o&&t.addClass(o);setTimeout(function(){t.addClass("ui--animation-fire").attr("delay",r),t.find(".ui--animation")&&(t.removeClass("ui--animation"),l(t))},r)})};"css"==(jQuery("html").hasClass("cssanimations")?"css":"javascript")&&(jQuery(document).ready(e),jQuery(document).ajaxSuccess(e),jQuery(window).on("load",e),jQuery(window).focus(e),jQuery(window).scroll(jQuery.throttle(250,e)))}),function(n,r){"use strict";var o="fillParent",a={};function t(e,t){this.element=e,this.options=n.extend({},a,t),this._defaults=a,this._name=o;var i=this;this.init(),jQuery(r).on("load",function(){i.init()}),jQuery(r).smartresize(function(){i.init()})}t.prototype={init:function(){var e=jQuery(this.element),t=e.parent(),i=t.width(),n=t.height(),r=e.attr("width"),o=e.attr("height");r||(e.css({width:""}),r=e.width()),o||(e.css({height:""}),o=e.height());var a=this.fill(i,n,r,o);e.css(a).addClass("ui--filled")},fill:function(e,t,i,n){var r={},o=n/i;return(n=(i=e)*o)<t&&(i=(n=t)/o),i=Math.round(i),n=Math.round(n),r.width=i,r.height=n,e<i?(r.marginLeft=Math.round((e-i)/2),r.marginTop=""):(r.marginLeft="",r.marginTop=Math.round((t-n)/2)),r}},n.fn[o]=function(e){return this.each(function(){n.data(this,"plugin_"+o)||n.data(this,"plugin_"+o,new t(this,e))})}}(jQuery,window,document),jQuery,jQuery(document).ready(function(){function e(){var e=win_height_alias=jQuery(window).height(),t=jQuery("body"),i=jQuery("#page-header"),n=jQuery("#titlebar"),r=t.hasClass("admin-bar"),o=0;if(!t.hasClass("header-overlapping")&&i.length){var a=i.height();e-=a,o+=a}if(n.length){var s=n.height();e-=s,o+=s}if(r&&(e-=32,o+=32),jQuery(".ui--section-content-v-center").css({height:0<e?e:win_height_alias}),t.hasClass("sticky-footer")){var l=jQuery("#page-wrap > footer"),c=l.height(),u=jQuery("#page-content");u.css({"min-height":""});var d=u.outerHeight()-u.height()+1;if(l.length){var p=win_height_alias-(o+c)-d;u.css({"min-height":0<p?p:""})}}}(jQuery(".ui--section-content-v-center").length||jQuery("body").hasClass("sticky-footer"))&&(e(),jQuery(window).on("load",e),jQuery(window).smartresize(e,20)),jQuery(".ui--video-background-video video, .ui--video-background-video iframe").fillParent()}),jQuery(document).ready(function(){var n=new Array;jQuery("a[data-rel^='prettyPhoto']").each(function(){var t=jQuery(this),e=t.attr("href");if(!n[e]){n[e]=!0;var i=jQuery('a[href^="'+e+'"]').not(t);i.length&&i.each(function(e){"undefined"!==jQuery(this).attr("data-rel")&&jQuery(this).attr("data-rel")==t.attr("data-rel")&&(jQuery(this).removeAttr("data-rel"),jQuery(this).on("click",function(e){e.preventDefault(),t.trigger("click")}))})}}),jQuery("a[data-rel^='prettyPhoto']").CloudFwPrettyPhoto({theme:"pp_envision",show_title:!0,slideshow:!1,social_tools:!1,deeplinking:!1,modal:!1})}),jQuery(function(){"use strict";function h(e,t){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var i=new RegExp(e+"[:|=]([^&#]*)").exec(t);return null==i?"":i[1]}var i=jQuery.debounce(100,function(e,t){if(""==e||"#"==e)return!0;var i=h("to",e);if(""!=i){var n=jQuery("#"+i);if(0===n.length)return!0;if("top"==i&&0===n.length)var r="0";else{r=n.offset().top;""!==(d=h("offset",e))&&(r+=parseInt(d,10))<0&&(r=0)}return jQuery("html, body").stop(!0).animate({scrollTop:r},500,function(){}),"true"==h("update",e)}var o=h("sidepanel",e);if(""!=o)return jQuery(document).trigger("openSidePanel",[o]),!1;var a=h("filter",e);if(""!=a)return jQuery(document).trigger("filterChange",[a]),!1;var s=h("tab",e);if(""!=s){var l=jQuery("[href='#"+s+"']",".ui--tabs-titles");if(l.length){l.click();r=l.offset().top;""!==(d=h("offset",e))&&(r+=parseInt(d,10))<0&&(r=0),jQuery("html, body").stop(!0).animate({scrollTop:r},500,function(){})}return!0}var c=h("acc",e);if(""!=c){var u=jQuery("[href='#"+c+"']",".ui--accordion-item");if(u.length){u.parent().hasClass("ui--accordion-state-opened")||u.click();var d;r=u.offset().top;""!==(d=h("offset",e))&&(r+=parseInt(d,10))<0&&(r=0),jQuery("html, body").stop(!0).animate({scrollTop:r},500,function(){})}return!0}if(e){var p=jQuery("[href='#"+e+"']",".ui--accordion-item");if(p.length)if(!p.parent().hasClass("ui--accordion-state-opened"))p.click(),(r=p.offset().top-200)<0&&(r=0),jQuery("html, body").stop(!0).animate({scrollTop:r},500,function(){});return!0}return!0});jQuery("[href^='#']").click(function(){var e=jQuery(this),t=e.attr("href").replace("#","");return i(t,e)}),jQuery(window).on("load hashchange",function(){var e=location.hash.replace("#","");i(e,void 0)})}),function(r,i){var e,n,o,t,a,s,l,c,u="hashchange",d=document,p=r.event.special,h=d.documentMode,f="on"+u in i&&(void 0===h||7<h);function m(e){return"#"+(e=e||location.href).replace(/^[^#]*#?(.*)$/,"$1")}function g(e){return e}function v(){var e=m(),t=c(s);e!==s?(l(s=e,t),r(i).trigger(u)):t!==s&&(location.href=location.href.replace(/#.*/,"")+t),n=setTimeout(v,r.fn[u].delay)}r.fn[u]=function(e){return e?this.bind(u,e):this.trigger(u)},r.fn[u].delay=50,p[u]=r.extend(p[u],{setup:function(){if(f)return!1;r(e.start)},teardown:function(){if(f)return!1;r(e.stop)}}),a={},s=m(),c=l=g,a.start=function(){n||v()},a.stop=function(){n&&clearTimeout(n),n=void 0},r("html").hasClass("ie")&&!f&&(a.start=function(){o||(t=(t=r.fn[u].src)&&t+m(),o=r('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){t||l(m()),v()}).attr("src",t||"javascript:0").insertAfter("body")[0].contentWindow,d.onpropertychange=function(){try{"title"===event.propertyName&&(o.document.title=d.title)}catch(e){}})},a.stop=g,c=function(){return m(o.location.href)},l=function(e,t){var i=o.document,n=r.fn[u].domain;e!==t&&(i.title=d.title,i.open(),n&&i.write('<script>document.domain="'+n+'"<\/script>'),i.close(),o.location.hash=e)}),e=a}(jQuery,this),jQuery(function(){"use strict";jQuery(window).hashchange(function(){var e=location.hash.replace("#","");e&&jQuery('a[href$="'+e+'"]').click()}),jQuery(window).hashchange()}),jQuery(document).ready(function(e){jQuery(".ui--likes").on("click",function(){var t=jQuery(this),e=t.attr("data-post-id"),i=CloudFwParseAttribute(t.attr("data-options")),n={};return jQuery.each(i,function(e,t){n[e]=encodeURIComponent(t)}),jQuery.post(CloudFwOp.ajaxUrl,{action:"cloudfw_likes",likes_id:e,options:n},function(e){t.html(e).addClass("active").attr("title","You already like this")}),!1})});var CloudFwLoaded=function(e){if(void 0===e.jquery)return!1;e.hasClass("ui--loading")&&(e.removeClass("ui--loading"),e.next(".ui--loading-progress").addClass("loaded"))};function detectDeviceViaPageWidth(){"use strict";var e;return e=Modernizr.mq("only all and (max-width: 767px)")?"phone":Modernizr.mq("only all and (min-width: 768px) and (max-width: 979px)")?"tablet":"widescreen",CloudFwOp.responsive||(e="widescreen"),e}!function($){eval(function(e,t,i,n,r,o){if(r=function(e){return e.toString(23)},!"".replace(/^/,String)){for(;i--;)o[r(i)]=n[i]||r(i);n=[function(e){return o[e]}],r=function(){return"\\w+"},i=1}for(;i--;)n[i]&&(e=e.replace(new RegExp("\\b"+r(i)+"\\b","g"),n[i]));return e}("$(m).l(5(){4 c=$('.0').1('6',- +$('.0').7()/2);4 d=$('.3').1('8',- +$('.3').9()/2);c;d;$(\".0\").1({'h':'f','g':'e%','i':'e%'});$(j).k(5(){4 a=$('.0').1('6',- +$('.0').7()/2);4 b=$('.3').1('8',- +$('.3').9()/2);a;b})});",0,23,"centerHorizontal|css||centerVertical|var|function|marginLeft|width|marginTop|outerHeight|||||50|absolute|top|position|left|window|resize|ready|document".split("|"),0,{}))}(jQuery),function(o){"use strict";o(document).ready(function(){var n,r;o.cloudfw_utilities=o.cloudfw_utilities||{},o.cloudfw_utilities.supported={},o.cloudfw_utilities.supports=(n=document.createElement("div"),r=["Khtml","Ms","Moz","Webkit"],function(e,t){if(void 0!==n.style[e])return"";void 0!==t&&(r=t),e=e.replace(/^[a-z]/,function(e){return e.toUpperCase()});for(var i=r.length;i--;)if(void 0!==n.style[r[i]+e])return"-"+r[i].toLowerCase()+"-";return!1}),o.cloudfw_utilities.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&"ontouchstart"in document.documentElement,o.fn.cloudfw_parallax&&o(".ui--parallax").cloudfw_parallax()}),o.CloudFwParallaxElement=function(e,t){this.$el=o(t).addClass("active-parallax"),this.$win=o(window),this.$parent=this.$el.parent(),this.property={},this.isMobile=o.cloudfw_utilities.isMobile,this.ratio=this.$el.data("data-stellar-ratio")||.5,this.transform=-1!==document.documentElement.className.indexOf("csstransforms"),this.transform3d=-1!==document.documentElement.className.indexOf("csstransforms3d"),void 0===o.cloudfw_utilities.supported.transition&&(o.cloudfw_utilities.supported.transition=o.cloudfw_utilities.supports("transition")),this._init(e)},o.CloudFwParallaxElement.prototype={_init:function(e){var t=this;this._fetch_properties(),this.$win.on("load",o.proxy(t._fetch_properties,t)),this.$win.smartresize(o.proxy(t._fetch_properties,t)),setTimeout(function(){t._fetch_properties()},1e3),setTimeout(function(){t.$win.on("scroll",function(){window.requestAnimationFrame(o.proxy(t._parallax_scroll,t))})},100)},_fetch_properties:function(){this.property.offset=this.$parent.offset().top,this.property.wh=this.$win.height(),this.property.height=this.$parent.outerHeight(),this.$el.height(Math.ceil(this.property.wh*this.ratio+this.property.height)),this._parallax_scroll()},_parallax_scroll:function(e){var t=this.$win.scrollTop(),i=t+this.property.wh,n="0",r={};this.property.offset<i&&t<=this.property.offset+this.property.height&&(n=Math.round((i-this.property.offset)*this.ratio),this.transform3d?r[o.cloudfw_utilities.supported.transition+"transform"]="translate3d(0px,"+n+"px, 0px)":this.transform?r[o.cloudfw_utilities.supported.transition+"transform"]="translate(0px,"+n+"px)":r["background-position"]="0px "+n+"px",this.$el.css(r))}},o.fn.cloudfw_parallax=function(t){return this.each(function(){var e=o.data(this,"cloudfw_parallax");e=e||o.data(this,"cloudfw_parallax",new o.CloudFwParallaxElement(t,this))})}}(jQuery),jQuery(document).ready(function(){function i(e){var t=e.parents(".portfolio-container-wrapper").first(),i=t.find(".portfolio-container"),n=t.attr("data-layout"),r=(parseInt(t.attr("data-columns")),e.parents(".portfolio-filters").first()),o=e.parent("li"),a=r.attr("data-isotope"),s=r.attr("data-multiple"),l=e.attr("data-filter");if("masonry"==n){o.hasClass("active-item")?p=jQuery.grep(p,function(e){return e!=l}):p.push(l),"1"==s&&!h||(p=[l]),"*"==l&&(p=[]),r.children("li.active-item").removeClass("active-item");var c="";for(var u in p)jQuery.isFunction(p[u])||(c+=p[u]),jQuery('[data-filter="'+p[u]+'"]',r).parent().addClass("active-item");0===p.length&&(c="*",jQuery('[data-filter="*"]',r).parent().addClass("active-item")),jQuery(""+a).find(".ui--masonry").first().CloudFwisotope({filter:c})}else{var d=i.find("> .ui-row > .ui-column");d.length,i.children(".ui-row");d.show().removeClass("passive-item").fadeTo(1e3,1).not(""+l).stop(1).addClass("passive-item").fadeTo(1e3,.3),r.children("li.active-item").removeClass("active-item"),o.addClass("active-item"),r.children("li").not(".active-item")}}var p=[],h=!1;jQuery(".portfolio-filters > li > a").click(function(e){e.preventDefault(),h=!0;var t=jQuery(this).attr("href");"#"!=t?history.pushState?history.pushState(null,null,t):location.hash=t:(i(jQuery("a",".portfolio-filters > li.item-filter-reset")),history.pushState?history.pushState(null,null,"#/"):location.hash="#/"),h=!1}),jQuery(document).on("filterChange",{},function(e,t){i(jQuery('a[data-filter=".filter-'+t+'"]',".portfolio-filters > li"))})}),jQuery(document).ready(function(){if(jQuery.isFunction(jQuery.fn.superfish)){var r=jQuery("#header-navigation");r.superfish({hoverClass:"hover",fire_event:CloudFwOp.navigation_event||"hover",cssArrows:!1,delay:parseInt(CloudFwOp.nav_hover_delay,10)||10,speed:200,speedOut:200,onBeforeShow:function(e){if("phone"!=detectDeviceViaPageWidth()){var t=e.parent("li").first();if(t.hasClass("level-0")){var i=t.height();if("relative"!=t.css("position"))var n=t.position().top;e.css({top:i+n})}}r.addClass("active")},onShow:function(e){jQuery(window).trigger("scroll"),jQuery(window).trigger("make@2x")},onBeforeHide:function(e){e.parent("li").first().hasClass("level-0")&&(r.removeClass("active"),e.css({top:""}))}})}jQuery("#header-navigation-toggle > a").click(function(){jQuery(this);var e=jQuery("#header-navigation");e.is(":visible")?e.attr("style",""):e.attr("style","display: block !important")})}),jQuery(document).ready(function(){function e(){win_height_alias=jQuery(window).height();var e=jQuery("#page-header");if(e.length){var t=detectDeviceViaPageWidth(),i=e.height(),n=jQuery("#header-overlapping-helper"),r=jQuery("body").hasClass("header-overlapping-mobile");if(n.length)"widescreen"==t||r?n.height(i):n.css("height","");else{var o=jQuery("#titlebar");if(o.length)"widescreen"==t||r?o.css("padding-top",i):o.css("padding-top","");else{var a=jQuery("#the-content");a.length&&("widescreen"==t||r?a.children().first().css("padding-top",i):a.children().first().css("padding-top",""))}}jQuery("body").addClass("header-overlapping-ok")}}jQuery("body").hasClass("header-overlapping")&&(e(),jQuery(window).on("load",e),jQuery(window).smartresize(e,20))}),jQuery(document).ready(function(){jQuery(".ui--quickview-button > .btn").click(function(e){e.preventDefault();var t=jQuery(this);jQuery.CloudFwPrettyPhoto.open(t.attr("data-href"))})});var responsiveOptionsCallback=function(){"use strict";jQuery("[data-responsive]").each(function(){var o=jQuery(this),e={},t=o.attr("data-responsive"),a=detectDeviceViaPageWidth();if(t){try{e=jQuery.parseJSON(t)}catch(e){}e.replaceClass&&jQuery.each(e.replaceClass,function(e,t){var i=e,n="";if(""!==(n=void 0!==t[a]||null!==t[a]?t[a]:i)&&n!=i)o.removeClass(o.attr("data-replaced-class")).removeClass(i).addClass(n),o.attr("data-replaced-class",n);else{var r=o.attr("data-replaced-class");r&&o.removeClass(r).addClass(i)}}),e.css&&jQuery.each(e.css,function(e,t){var i={};i[e]=void 0===t[a]||null===t[a]?void 0!==t.widescreen&&null!==t.widescreen?t.widescreen:"":t[a],o.css(i)})}})};jQuery(document).ready(responsiveOptionsCallback),jQuery(window).resize(responsiveOptionsCallback);var prepareResponsiveFullwidthContainer=function(){"use strict";var e=jQuery(".fullwidth-container");if(e.length){var t=function(){jQuery("body").innerWidth()<=767?e.each(function(){var e=jQuery(this);e.width(e.parent().width())}):e.css({width:""})};t(),jQuery(window).resize(t)}};jQuery(document).ready(prepareResponsiveFullwidthContainer);var prepareResponsiveFullwidthContainerPage=function(){"use strict";var r=jQuery(".fullwidth-content");if(r.length){var e=function(){var e=jQuery("body").hasClass("layout--boxed"),t=jQuery("#page-content > .container").width();if(e)var i=0-((n=jQuery("#page-content").innerWidth())-t)/2-1;else{var n;i=0-((n=jQuery("body").innerWidth())-t)/2-1}CloudFwOp.RTL?r.css({width:n+1,"margin-right":i,"margin-left":0}):r.css({width:n+1,"margin-left":i,"margin-right":0})};e(),jQuery(window).resize(e)}};jQuery(document).ready(prepareResponsiveFullwidthContainerPage);var parseResponsiveAttribute=function(e,t,i){"use strict";var n={};if(e){try{"object"!=typeof e&&(n=jQuery.parseJSON(e))}catch(e){}return void 0!==n[t]||null!==n[t]?n[t]:i}},boxGalleryInit;jQuery(document).ready(function(){"use strict";jQuery(".rev_slider_wrapper").bind("revolution.slide.onloaded",function(e){jQuery(this).find(".caption-primary").wrapInner("<div />")})}),jQuery(document).ready(function(){"use strict";var e=jQuery(".ui--side-panel"),t=jQuery("#side-panel"),i=jQuery("#side-panel").children("div"),n=jQuery("html"),r=!1;if(t.length&&e.length){var o=function(e){n.hasClass("side-panel-open")?n.removeClass("side-panel-open"):setTimeout(function(){t.show(),i.hide(),e?i.filter("#"+e).show():i.first().show(),jQuery("body, html").animate({scrollTop:0},"500","swing",function(){n.addClass("side-panel-open")})},25),r||(r=!0,jQuery("#main-container").click(function(e){jQuery(e.target).is("a")||(n.removeClass("side-panel-open"),jQuery(window).trigger("resize"))}),jQuery("#ui--side-panel-close-button").click(function(){n.removeClass("side-panel-open"),jQuery(window).trigger("resize")}))};e.bind("click",function(e){e.preventDefault(),o(jQuery(this).attr("data-target"))}),jQuery(document).on("openSidePanel",{},function(e,t){o(t)})}}),jQuery(document).ready(function(){"use strict";var e=jQuery(".ui--side-panel"),t=jQuery("#side-panel"),i=jQuery("#side-panel").children("div"),n=jQuery("html"),r=!1;if(t.length&&e.length){var o=function(e){n.hasClass("side-panel-open")?n.removeClass("side-panel-open"):setTimeout(function(){t.show(),i.hide(),e?i.filter("#"+e).show():i.first().show(),jQuery("body, html").animate({scrollTop:0},"500","swing",function(){n.addClass("side-panel-open")})},25),r||(r=!0,jQuery("#main-container").click(function(e){jQuery(e.target).is("a")||n.removeClass("side-panel-open")}),jQuery("#ui--side-panel-close-button").click(function(){n.removeClass("side-panel-open")}))};e.bind("click",function(e){e.preventDefault(),o(jQuery(this).attr("data-target"))}),jQuery(document).on("openSidePanel",{},function(e,t){o(t)})}}),jQuery(document).ready(function(){if(jQuery.isFunction(jQuery.fn.superfish)){var e=jQuery(".ui--custom-menu","#top-bar"),t=e.attr("data-animation-speed");e.superfish({hoverClass:"hover",cssArrows:!1,delay:500,speed:t||50,speedOut:t||50})}var i=jQuery("#widget--search","#top-bar"),n=i.find("a"),r=i.find("input"),o=i.find(".ui--search-form"),a=jQuery("html").hasClass("cssanimations");n.click(function(e){e.preventDefault(),r.focus()}),r.bind("focus",function(){a?i.addClass("state--open"):o.stop(1).animate({width:150})}),r.bind("blur",function(){a?i.removeClass("state--open"):o.stop(1).animate({width:0})})}),jQuery(document).ready(function(){"use strict";if(!CloudFwOp.uniform_elements)return!0;function e(e){if(jQuery("html").hasClass("old-browser"))return!0;if(e){if(void 0===e.jquery&&(e=jQuery(e)),!e.length)return!0}else e=null;jQuery("select",e).each(function(){var i=jQuery(this);if("none"==i.css("display"))return!0;if(i.hasClass("no-uniform")||0<i.parents(".widget_categories").length)return!0;if(CloudFwOp.disable_gravity_uniform_select&&i.hasClass("gfield_select"))return!0;if(i.parents(".woocommerce").length)return!0;if(CloudFw_jQueried("cloudfw-select",i))return!0;if(i.attr("multiple"))return!0;var e,t,n=jQuery("<span/>").addClass("ui--select-wrapper ui--box ui--gradient ui--gradient-grey").addClass(i.attr("data-wrapper-classes"));e=i.css({margin:""}).css("margin"),t=i.css({width:""}).css("width"),n.css({margin:e}),n.css({width:t}),i.wrap(n);var r=jQuery("<span/>").addClass("ui--select-title");i.before(r);var o=jQuery("<i/>").addClass("ui--icon icon fontawesome-angle-down ui--select-arrow");i.before(o);function a(){if(""==(t=i.find(":selected").first().text())){var e=i.attr("data-default-title");if(e)var t=e}r.text(t)}jQuery(document).delegate(i,"change",a),a(),i.bind("focus",function(){i.parent().addClass("active")}),i.bind("blur",function(){i.parent().removeClass("active")}),i.attr("data-init")&&i.change()})}e(),jQuery(document).on("ajaxSuccess",e)}),jQuery(document).ready(function(){jQuery(".woocommerce-tabs").each(function(){var e=window.location.hash,t=window.location.href,i=jQuery(this),n=i.offset().top;0<=e.toLowerCase().indexOf("comment-")?(jQuery("ul.ui--tabs-titles li.reviews_tab a",i).click(),jQuery("html, body").animate({scrollTop:n},2e3)):(0<t.indexOf("comment-page-")||0<t.indexOf("cpage="))&&(jQuery("ul.ui--tabs-titles li.reviews_tab a",i).click(),jQuery("html, body").animate({scrollTop:n},2e3))}),jQuery("a.woocommerce-review-link").click(function(){return jQuery("ul.ui--tabs-titles li.reviews_tab a",jQuery(".woocommerce-tabs")).click(),jQuery("html, body").animate({scrollTop:jQuery(".woocommerce-tabs").offset().top},2e3),!0})}),jQuery(document).ready(function(){"use strict";jQuery.fn.extend({CloudFwAccordions:function(){var i=!1,n=this.children().not(".ui--accordion-state-static");n.find("> a").click(function(e){if(e.preventDefault(),e.stopPropagation(),!0===i)return!1;i=!0;var t=jQuery(this).parents(".ui--accordion-item").first();t.addClass("not"),n.not(".not").removeClass("ui--accordion-state-opened").addClass("ui--accordion-state-closed"),i=(t.hasClass("ui--accordion-state-opened")?t.removeClass("ui--accordion-state-opened").removeClass("not").addClass("ui--accordion-state-closed"):t.removeClass("ui--accordion-state-closed").removeClass("not").addClass("ui--accordion-state-opened"),!1),jQuery(window).trigger("scroll"),jQuery(window).trigger("make@2x"),jQuery(window).trigger("resize")})}}),jQuery(".ui--accordion").each(function(){jQuery(this).CloudFwAccordions()})}),jQuery(document).ready(function(){"use strict";if(jQuery.isFunction(jQuery.fn.flexslider)){var i=function(e){void 0!==e&&e.jquery||(e=jQuery(".ui--carousel")),e.each(function(){var e=!(l=jQuery(this)).parents(".ui-row").length,t=l.parents(".ui--pass"),i=t.length?t:l,n=l.prev(".ui--title-bordered").length?l.prev(".ui--title-bordered"):i.prev(".ui--title-bordered"),r=i.prev(".ui--widget-title");if(!l.data("flexslider")){var o,a=CloudFwParseAttribute(l.attr("data-options")),s=l.find(".slides");if("1"==a.disable_on_mobile&&"phone"==detectDeviceViaPageWidth())return(o=s.children()).show(),!1;if(1<s.length&&s.last().unwrap(),e)l.addClass("fullwidth-content"),s.first().children().each(function(){var e=jQuery(this);e.hasClass(".ui-row")?e.wrap('<div class="ui--carousel-content clearfix" />').wrap('<div class="container" />'):e.wrap('<div class="ui--carousel-content clearfix" />').wrap('<div class="container" />').wrap('<div class="ui-row" />')}),prepareResponsiveFullwidthContainerPage(l);else s.first().children(".ui-row").wrap('<div class="ui--carousel-content clearfix" />');if(!(1<(o=s.children()).length))return o.show(),!1;"1"==a.auto_rotate?a.auto_rotate=!0:a.auto_rotate=!1,"1"==a.animation_loop?a.animation_loop=!0:a.animation_loop=!1,void 0===a.animate||"1"==a.animate?a.animate=600:a.animate=1;var l;(l=l.flexslider({namespace:"ui--carousel-",selector:".slides > div",animation:a.effect||"slide",slideshow:a.auto_rotate,slideshowSpeed:a.rotate_time||7e3,smoothHeight:!0,animationLoop:a.animation_loop||!1,controlNav:!1,directionNav:!1,pauseOnHover:!0,animationSpeed:1e3,itemMargin:30,start:function(e){void 0!==boxGalleryInit&&boxGalleryInit(l)}})).data("flexslider");if("1"==a.arrows){var c=function(){l.flexslider("prev"),jQuery(window).scroll()},u=function(){l.flexslider("next"),jQuery(window).scroll()};n.length?(n.addClass("with-navigation"),n.find(".ui--title-navigation").remove(),n.append(jQuery("<div/>").addClass("ui--title-navigation")),n.find(".ui--title-navigation").html('<span class="arr arr-small arr-plain arr-left ui--carosuel-prev"><span></span><i class="fontawesome-angle-left px18"></i></span> <span class="arr arr-small arr-plain ui--carosuel-next"><span></span><i class="fontawesome-angle-right px18"></i></span>'),n.find(".ui--title-navigation > .ui--carosuel-prev").click(c),n.find(".ui--title-navigation > .ui--carosuel-next").click(u)):r.length?(r.addClass("with-navigation"),r.find(".ui--title-navigation").remove(),r.append(jQuery("<div/>").addClass("ui--title-navigation")),r.find(".ui--title-navigation").html('<span class="arr arr-plain arr-left ui--carosuel-prev"><span></span><i class="fontawesome-angle-left px18"></i></span> <span class="arr arr-plain ui--carosuel-next"><span></span><i class="fontawesome-angle-right px18"></i></span>'),r.find(".ui--title-navigation > .ui--carosuel-prev").click(c),r.find(".ui--title-navigation > .ui--carosuel-next").click(u)):(l.find(".ui--carousel-navigation").remove(),l.append(jQuery("<div/>").addClass("ui--carousel-navigation clearfix")),l.find(".ui--carousel-navigation").html('<span class="arr arr-normal arr-left ui--carosuel-prev"><span></span><i class="fontawesome-chevron-left px18"></i></span> <span class="arr arr-normal ui--carosuel-next"><span></span><i class="fontawesome-chevron-right px18"></i></span>'),l.find(".ui--carousel-navigation > .ui--carosuel-prev").click(c),l.find(".ui--carousel-navigation > .ui--carosuel-next").click(u))}}})};jQuery(".ui--carousel").each(function(){var t=jQuery(this);t.find(".slides > div:first").find("img:first").imagesLoaded(function(){var e=setTimeout(function(){i(t),clearTimeout(e)},300)})}),jQuery(window).on("load",i),boxGalleryInit=function(i){i.find(".ui--content-box-gallery").each(function(){var e=jQuery(this);if(!e.data("flexslider")){jQuery(window).on("load",function(){boxGalleryInit(i)});var t=CloudFwParseAttribute(e.attr("data-options"));t.auto_rotate="1"==t.auto_rotate,e.flexslider({namespace:"ui--content-box-gallery-",selector:".mini-slides > div",animation:t.effect||"slide",slideshow:t.auto_rotate||!1,slideshowSpeed:7e3,smoothHeight:!0,controlNav:!1,directionNav:!1,keyboard:!1});e.data("flexslider");e.find(".ui--content-box-gallery-navigation").remove(),e.append(jQuery("<div/>").addClass("ui--content-box-gallery-navigation")),e.find(".ui--content-box-gallery-navigation").html('<span class="arr arr-normal arr-left ui--carosuel-prev"><span></span><i class="fontawesome-chevron-left px18"></i></span> <span class="arr arr-normal ui--carosuel-next"><span></span><i class="fontawesome-chevron-right px18"></i></span>'),e.find(".ui--content-box-gallery-navigation > .ui--carosuel-prev").click(function(){e.flexslider("prev")}),e.find(".ui--content-box-gallery-navigation > .ui--carosuel-next").click(function(){e.flexslider("next")})}})},jQuery(".ui--content-box").each(function(){var e=jQuery(this),t=e.parents();t.filter(".ui--carousel").length||t.filter(".ui--masonry").length||(boxGalleryInit(e),jQuery(window).on("load",function(){boxGalleryInit(e)}))})}}),function(e){"use strict";e(document).ready(function(){CloudFwOp.gallery_overlay_opacity||(CloudFwOp.gallery_overlay_opacity=90),e(".ui--gallery-item a").hover(function(){e(this).find(".ui--gallery-overlay").stop(1).fadeTo(500,CloudFwOp.gallery_overlay_opacity/100)},function(){e(this).find(".ui--gallery-overlay").stop(1).fadeTo(500,0)})})}(jQuery),jQuery(document).ready(function(){"use strict";jQuery(".gmap").each(function(){var t=jQuery(this),i="",e=t.attr("data-gmap-options")||"";try{if("object"!=typeof e)var n=jQuery.parseJSON(e);else n=e}catch(e){n={}}var r=jQuery.extend({},{zoom:12,latitude:0,longitude:0,maptype:"ROADMAP",doubleclickzoom:1,scrollwheel:1,controls:!1},n);jQuery(r.markers).each(function(e,t){r.markers[e].html=jQuery("<div />").html(r.markers[e].html).text().replace(/\n/g,"<br/>")}),t.unbind("gMapReady").bind("gMapReady",function(){t.gMap(r),i=t.data("gMap.reference"),t.data("gMapReady",!0);var e=r.stylers||{};e&&i.setOptions({styles:e})}).data("gMapReady",!1);t.trigger("gMapReady");"phone"==detectDeviceViaPageWidth()&&t.trigger("gMapReady")})}),jQuery(document).ready(function(){"use strict";var u="rtl"==jQuery("html").attr("dir");if(jQuery.isFunction(jQuery.fn.CloudFwisotope)){var e=function(){jQuery(".ui--masonry").each(function(){var e=jQuery(this),t=(e.prev(".ui--title-bordered"),e.prev(".ui--widget-title"),e.data("masonry")),i=new Object,n=!1;if((e.hasClass("row-fluid")||e.parents(".ui-row").length)&&(n=!0),!t){CloudFwLoaded(e),e.find(".ui--content-item").each(function(){jQuery(this).parent().hasClass("ui-column")});var r=e.children(".ui--pass");r.length?r.find(".ui-row > .ui-column").addClass("ui--isotope-item"):e.find("> .ui-row > .ui-column").addClass("ui--isotope-item")}if(1==t&&!n)return e.CloudFwisotope("reloadItems"),!1;if(i.resize=!0,i.resizable=!0,i.itemSelector=".ui--isotope-item",i.layoutMode="masonry",i.originLeft=!u,n){var o=e.width();if(!(a=e.children().first().attr("data-columns")))var a=CloudFwGetColumByClassname(e.find(".ui--isotope-item"));var s=e.find(".ui--isotope-item").first().width(),l=Math.floor((o-s*a)/(a-1));i.percentPosition=!0,i.masonry={gutter:l}}function c(){e.show(),void 0!==boxGalleryInit&&boxGalleryInit(e)}e.data("masonry",!0),e.css("visibility","visible").css("overflow","visible").CloudFwisotope(i),e.addClass("ui--done"),e.on("layoutComplete",c),e.on("arrangeComplete",c),c()})};"IE"==BrowserDetect.browser?jQuery(window).on("load",e):e(),jQuery(window).smartresize(e,5e3),jQuery(document).ajaxSuccess(e)}}),jQuery(document).ready(function(){"use strict";function e(){jQuery(".ui--pricing-table").each(function(){var i=jQuery(this),e=i.find(".ui--pricing-table-before-html"),t=i.find(".ui--pricing-table-features");e.css({"min-height":""}).css({"min-height":Math.max.apply(null,e.map(function(){return jQuery(this).height()}).get())}),t.first().children(".ui--pricing-table-feature").each(function(){var e=jQuery(this).attr("data-group"),t=i.find("."+e);t.css({"min-height":""}).css({"min-height":Math.max.apply(null,t.map(function(){return jQuery(this).height()}).get())})})})}e(),jQuery(window).on("load",e),jQuery(window).smartresize(e)}),jQuery(document).ready(function(){"use strict";if(!jQuery.isFunction(jQuery.inviewport))return!1;function e(){jQuery(".ui--progress:in-viewport").each(function(){var e=jQuery(this);if(!e.hasClass("animated")){var t=e.find(".ui--progress-percent"),i=function(){};if(t.css({visibility:"visible"}),"css"==o){e.addClass("lock"),e.addClass("animated");var n=setInterval(function(){e.removeClass("lock"),clearInterval(n)},500);e.bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",i)}else{e.addClass("animated");var r=t.attr("data-value");t.width("0").animate({width:r},600,i)}}})}if(jQuery(".ui--progress").length){var o=jQuery("html").hasClass("cssanimations")?"css":"javascript";"css"==o&&(e(),jQuery(window).on("load",e),jQuery(window).scroll(jQuery.throttle(250,e)))}}),jQuery(document).ready(function(){"use strict";if(!jQuery.isFunction(jQuery.inviewport)||!jQuery.isFunction(jQuery.easyPieChart))return!1;function e(){jQuery(".ui--progress-circle").each(function(){var e=jQuery(this),t=e.parent(),i=t.width(),n=t.find(".ui--progress-circle-percent"),r=parseInt(e.attr("data-percent-update"),10),o=parseInt(e.attr("data-width"),10);(!o||i<o)&&(o=i),e.easyPieChart({animate:1e3,trackColor:"#f1f1f1",barColor:"#169FE5",scaleColor:!1,lineCap:"butt",rotate:-90,lineWidth:15,size:o,onStep:function(e){n.text(~~e)},onStop:function(e){n.text(r)}}),e.find(".ui--center-vertical").uiVerticalCenter()}),t()}var t=function(){jQuery(".ui--progress-circle:in-viewport").each(function(){var e=jQuery(this);if(!e.is(":visible"))return!0;if(e.data("inViewport"))return!0;e.data("inViewport",!0);var t=parseInt(e.attr("data-percent-update"),10);e.data("easyPieChart").update(t)})};jQuery(".ui--progress-circle").length&&"css"==(jQuery("html").hasClass("cssanimations")?"css":"javascript")&&(e(),jQuery(window).on("load",t),jQuery(window).scroll(jQuery.throttle(250,t)),jQuery(window).smartresize(function(){jQuery(".ui--progress-circle").each(function(){var e=jQuery(this);e.removeData("easyPieChart"),e.removeData("inViewport"),e.css({width:"",height:"","line-height":""}),e.find("canvas").remove()}),e()},5e3))}),jQuery(document).ready(function(){"use strict";jQuery.fn.extend({CloudFwTabs:function(){var s=!1,l=this,e=l.children(".ui--tabs-header"),c=e.find(".ui--tabs-titles").children("li"),u=e.find(".ui--tabs-border-before"),d=e.find(".ui--tabs-border-after"),p=e.find(".ui--tabs-border-top"),h=e.find(".ui--tabs-border-bottom"),f=l.find("> .ui--tabs-contents > li");c.first().addClass("first-item"),c.last().addClass("last-item"),f.first().show().removeClass("hidden").addClass("active").addClass("first-item"),f.last().addClass("last-item");var m=!1;c.find("a").click(function(e){e.preventDefault();var t=jQuery(this),i=t.parents("li").first(),n=i.width(),r=i.height(),o=i.position(),a=i.index();if(!0===s)return!1;s=!0,i.hasClass("active")||(f.filter(".active").removeClass("active").addClass("hidden"),f.eq(a).removeClass("hidden").addClass("active"),c.filter(".active").removeClass("active"),i.addClass("active"),m&&(history.pushState?history.pushState(null,null,t.attr("href")):location.hash=t.attr("href")));d.css({left:o.left+n}),u.css({left:-(u.width()-o.left)}),p.css({top:-(p.height()-o.top)}),h.css({top:o.top+r}),l.addClass("ui--done"),s=!1,jQuery(window).trigger("scroll"),jQuery(window).trigger("make@2x")}),c.first().find("a").click(),m=!0;function t(){c.filter(".active").find("a").click()}jQuery(window).smartresize(t,20),jQuery(document).ready(t),jQuery(window).on("load",t)}}),jQuery(".ui--tabs").each(function(){jQuery(this).CloudFwTabs()})}),jQuery(document).ready(function(){"use strict";function e(){jQuery(".ui--title-bordered").each(function(){var e=jQuery(this),t=e.find(".ui--title-text"),i=t.position(),n=t.outerWidth(),r=e.find(".ui--title-border-left"),o=e.find(".ui--title-border-right");r.show().css({left:0-(r.width()-i.left)}),o.show().css({left:i.left+n})})}e(),jQuery(window).on("load",e),jQuery(window).smartresize(e),jQuery(document).ajaxComplete(e)}),jQuery(document).ready(function(){"use strict";jQuery.fn.extend({CloudFwToggle:function(){var i=!1,n=this,e=n.children(".ui--toggle-title").children("a");n.children(".ui--toggle-content");e.click(function(e){if(e.preventDefault(),!0===i)return!1;i=!0;jQuery(this);var t=n.attr("data-group");n.addClass("not"),t&&n.hasClass("ui--toggle-state-closed")&&jQuery('[data-group="'+t+'"]').not(".not").removeClass("ui--toggle-state-opened").addClass("ui--toggle-state-closed"),n.hasClass("ui--toggle-state-opened")?(n.removeClass("ui--toggle-state-opened").removeClass("not").addClass("ui--toggle-state-closed"),i=!1):(n.removeClass("ui--toggle-state-closed").removeClass("not").addClass("ui--toggle-state-opened"),i=!1,jQuery(window).trigger("scroll"),jQuery(window).trigger("make@2x"))})}}),jQuery(".ui--toggle").each(function(){jQuery(this).CloudFwToggle()})}),jQuery(document).ready(function(){"use strict";jQuery.isFunction(jQuery.fn.flexslider),jQuery(".ui--content-box").each(function(){var e=jQuery(this),t=CloudFwParseAttribute(e.attr("data-ligthbox"));t&&t.src&&e.find(".ui--content-box-link").bind("click",function(){return jQuery.CloudFwPrettyPhoto.open(t.src,null,t.desc),!1})})}),jQuery(document).ready(function(){jQuery(".flexslider-navigation-prev").click(function(){jQuery(this).parents(".flexslider-wrapper").first().find(".flexslider").flexslider("prev")}),jQuery(".flexslider-navigation-next").click(function(){jQuery(this).parents(".flexslider-wrapper").first().find(".flexslider").flexslider("next")})}),jQuery(window).on("load",function(){jQuery(".flexslider .flex-control-paging li a").html('<div class="ui--bullets"><div class="ui--bullets-color ui--accent-gradient"></div></div>')});
// source --> https://www.billyhassell.com/wp-includes/js/comment-reply.min.js?ver=6.1.10 
/*! This file is auto-generated */
window.addComment=function(v){var I,C,h,E=v.document,b={commentReplyClass:"comment-reply-link",commentReplyTitleId:"reply-title",cancelReplyId:"cancel-comment-reply-link",commentFormId:"commentform",temporaryFormId:"wp-temp-form-div",parentIdFieldId:"comment_parent",postIdFieldId:"comment_post_ID"},e=v.MutationObserver||v.WebKitMutationObserver||v.MozMutationObserver,r="querySelector"in E&&"addEventListener"in v,n=!!E.documentElement.dataset;function t(){d(),e&&new e(o).observe(E.body,{childList:!0,subtree:!0})}function d(e){if(r&&(I=g(b.cancelReplyId),C=g(b.commentFormId),I)){I.addEventListener("touchstart",l),I.addEventListener("click",l);function t(e){if((e.metaKey||e.ctrlKey)&&13===e.keyCode)return C.removeEventListener("keydown",t),e.preventDefault(),C.submit.click(),!1}C&&C.addEventListener("keydown",t);for(var n,d=function(e){var t=b.commentReplyClass;e&&e.childNodes||(e=E);e=E.getElementsByClassName?e.getElementsByClassName(t):e.querySelectorAll("."+t);return e}(e),o=0,i=d.length;o<i;o++)(n=d[o]).addEventListener("touchstart",a),n.addEventListener("click",a)}}function l(e){var t,n,d=g(b.temporaryFormId);d&&h&&(g(b.parentIdFieldId).value="0",t=d.textContent,d.parentNode.replaceChild(h,d),this.style.display="none",n=(d=(d=g(b.commentReplyTitleId))&&d.firstChild)&&d.nextSibling,d&&d.nodeType===Node.TEXT_NODE&&t&&(n&&"A"===n.nodeName&&n.id!==b.cancelReplyId&&(n.style.display=""),d.textContent=t),e.preventDefault())}function a(e){var t=g(b.commentReplyTitleId),t=t&&t.firstChild.textContent,n=this,d=m(n,"belowelement"),o=m(n,"commentid"),i=m(n,"respondelement"),r=m(n,"postid"),n=m(n,"replyto")||t;d&&o&&i&&r&&!1===v.addComment.moveForm(d,o,i,r,n)&&e.preventDefault()}function o(e){for(var t=e.length;t--;)if(e[t].addedNodes.length)return void d()}function m(e,t){return n?e.dataset[t]:e.getAttribute("data-"+t)}function g(e){return E.getElementById(e)}return r&&"loading"!==E.readyState?t():r&&v.addEventListener("DOMContentLoaded",t,!1),{init:d,moveForm:function(e,t,n,d,o){var i,r,l,a,m,c,s,e=g(e),n=(h=g(n),g(b.parentIdFieldId)),y=g(b.postIdFieldId),p=g(b.commentReplyTitleId),u=(p=p&&p.firstChild)&&p.nextSibling;if(e&&h&&n){void 0===o&&(o=p&&p.textContent),a=h,m=b.temporaryFormId,c=g(m),s=(s=g(b.commentReplyTitleId))?s.firstChild.textContent:"",c||((c=E.createElement("div")).id=m,c.style.display="none",c.textContent=s,a.parentNode.insertBefore(c,a)),d&&y&&(y.value=d),n.value=t,I.style.display="",e.parentNode.insertBefore(h,e.nextSibling),p&&p.nodeType===Node.TEXT_NODE&&(u&&"A"===u.nodeName&&u.id!==b.cancelReplyId&&(u.style.display="none"),p.textContent=o),I.onclick=function(){return!1};try{for(var f=0;f<C.elements.length;f++)if(i=C.elements[f],r=!1,"getComputedStyle"in v?l=v.getComputedStyle(i):E.documentElement.currentStyle&&(l=i.currentStyle),(i.offsetWidth<=0&&i.offsetHeight<=0||"hidden"===l.visibility)&&(r=!0),"hidden"!==i.type&&!i.disabled&&!r){i.focus();break}}catch(e){}return!1}}}}(window);
// source --> https://www.billyhassell.com/wp-content/plugins/gallery-bank-business-edition/user-views/assets/js/scrolla.jquery.min.js?ver=6.1.10 
!function (i) {
   var t, n, a = {
      init: function (i, o) {
         t = i, n = o, a.bind()
      },
      bind: function () {
         i(window).scroll(function () {
            a.animate(t, n)
         }), i(window).trigger("scroll")
      },
      animate: function (t, n) {
         var a = i(window).height(),
                 o = i(window).scrollTop(),
                 s = o + a;
         i.each(t, function () {
            var t = i(this).data("animate"),
                    a = i(this).data("offset"),
                    e = i(this).data("duration"),
                    d = i(this).data("delay"),
                    r = i(this).data("iteration"),
                    h = i(this).outerHeight(),
                    c = i(this).offset().top,
                    l = c + h;
            a && (c += a, l -= a), i(this).css({
               "-webkit-animation-duration": e,
               "animation-duration": e
            }), i(this).css({
               "-webkit-animation-delay": d,
               "animation-delay": d
            }), i(this).css({
               "-webkit-animation-iteration-count": r,
               "animation-iteration-count": r
            }), l >= o && c <= s ? (i(this).css("visibility", "visible"), i(this).addClass(t), i(this).addClass("gb_animation_time")) : n.once === !1 && (i(this).css("visibility", "hidden"), i(this).removeClass(t), i(this).removeClass("gb_animation_time"))
         })
      }
   };
   jQuery.fn.scrolla_gb = function (t) {
      return t = i.extend({
         mobile: !1,
         once: !1
      }, t), (t.mobile !== !1 || !/Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) && void a.init(this, t)
   }
}(jQuery);
//# sourceMappingURL=scrolla.jquery.min.js.map;
// source --> https://www.billyhassell.com/wp-content/plugins/gallery-bank-business-edition/user-views/assets/lightboxes/foobox/js/foobox.free.min.js?ver=6.1.10 
/**!
 * FooBox - A jQuery plugin for responsive lightboxes
 * @version 2.1.8
 * @link http://fooplugins.com/plugins/foobox-jquery
 * @copyright Steven Usher & Brad Vincent 2014
 * @license Released under the MIT license.
 * You are free to use FooBox jQuery in personal projects as long as this copyright header is left intact.
 */
!function (a, b, c, undefined) {
   if (a && b) {
      b.FooBox = {
         defaults: {
            affiliate: {
               enabled: !0,
               prefix: "Powered by ",
               url: "http://fooplugins.com/plugins/foobox/"
            },
            alwaysInit: !1,
            closeOnOverlayClick: !0,
            containerCssClass: "fbx-instance",
            countMessage: "item %index of %total",
            error: "Could not load the item",
            excludes: ".fbx-link, .nofoobox",
            externalSelector: "a[data-foobox],input[data-foobox]",
            fitToScreen: !1,
            hideScrollbars: !0,
            loadDelay: 0,
            loaderTimeout: 600,
            modalClass: "",
            preload: !1,
            rel: null,
            resizeSpeed: 300,
            selector: "a",
            showButtons: !0,
            showCount: !0,
            style: "fbx-rounded",
            theme: "fbx-light",
            transitionInSpeed: 200,
            transitionOutSpeed: 200,
            initCallback: null,
            loop: !0
         },
         version: "2.0.10",
         instances: [],
         ready: function (b) {
            (Function("/*@cc_on return true@*/")() ? "complete" === document.readyState : "loading" !== document.readyState) ? b(a) : setTimeout(function () {
               FooBox.ready(b)
            }, 1)
         }
      }, FooBox.$ = a, FooBox.format = function (a, b, c) {
         var d, e, f = arguments[0];
         for (d = 0; d < arguments.length - 1; d++)
            e = new RegExp("\\{" + d + "\\}", "gm"), f = f.replace(e, arguments[d + 1]);
         return f
      }, FooBox.browser = {
         isIE: !1,
         isChrome: !1,
         isSafari: !1,
         isLtSafari10: !1,
         version: 0,
         css: "",
         iOS: !1,
         Mac: !1,
         isMobile: function (a) {
            return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))
         }(navigator.userAgent || navigator.vendor || b.opera),
         check: function () {
            var a = navigator.appVersion.toLowerCase(),
                    c = navigator.userAgent.toLowerCase(),
                    d = navigator.platform;
            FooBox.browser.iOS = /(iPad|iPhone|iPod)/g.test(d), 1 == FooBox.browser.iOS && (FooBox.browser.css += " fbx-ios"), FooBox.browser.Mac = /(Mac)/g.test(d), 1 == FooBox.browser.Mac && (FooBox.browser.css += " fbx-mac"), FooBox.browser.isChrome = a.indexOf("chrome") > -1 || a.indexOf("crios") > -1, FooBox.browser.isChrome && (FooBox.browser.css += " fbx-chrome"), FooBox.browser.isSafari = a.indexOf("safari") > -1 && !FooBox.browser.isChrome, FooBox.browser.isSafari && (FooBox.browser.css += " fbx-safari", FooBox.browser.isLtSafari10 = /constructor/i.test(b.HTMLElement)), FooBox.browser.isFirefox = c.indexOf("firefox") > -1, FooBox.browser.isFirefox && (FooBox.browser.css += " fbx-firefox");
            var e = c.indexOf("msie "),
                    f = c.indexOf("trident/"),
                    g = c.indexOf("edge/");
            if (FooBox.browser.isIE = e > -1 || f > -1 || g > -1, FooBox.browser.isIE) {
               if (e > -1)
                  FooBox.browser.version = parseInt(c.substring(e + 5, c.indexOf(".", e)), 10);
               else if (f > -1) {
                  var h = c.indexOf("rv:");
                  FooBox.browser.version = parseInt(c.substring(h + 3, c.indexOf(".", h)), 10)
               } else
                  g > -1 && (FooBox.browser.version = parseInt(c.substring(g + 5, c.indexOf(".", g)), 10));
               FooBox.browser.css = FooBox.format("fbx-ie fbx-ie{0}", FooBox.browser.version)
            }
         },
         supportsTransitions: function () {
            var a, b = document.body || document.documentElement,
                    c = b.style,
                    d = "transition";
            if ("string" == typeof c[d])
               return !0;
            a = ["Moz", "Webkit", "Khtml", "O", "ms"], d = d.charAt(0).toUpperCase() + d.substr(1);
            for (var e = 0; e < a.length; e++)
               if ("string" == typeof c[a[e] + d])
                  return !0;
            return !1
         },
         transitionEnd: function () {
            var a, b = document.createElement("fakeelement"),
                    c = {
                       transition: "transitionend",
                       OTransition: "oTransitionEnd",
                       MozTransition: "transitionend",
                       WebkitTransition: "webkitTransitionEnd"
                    };
            for (a in c)
               if (c.hasOwnProperty(a) && b.style[a] !== undefined)
                  return c[a];
            return null
         }
      }, FooBox.browser.check(), FooBox.qualifiedURL = function (a) {
         var b = document.createElement("a");
         return b.href = a, b.href
      }, c || (c = {}), c.log = c.log || function () {}, c.warn = c.warn || function () {}, c.error = c.error || function () {}, c.info = c.info || function () {};
      var d = {
         write: function () {
            c.log(FooBox.format.apply(d, arguments))
         },
         error: function () {
            1 === arguments.length && arguments[0] instanceof Error ? c.error(arguments[0]) : c.error(FooBox.format.apply(d, arguments))
         }
      };
      jQuery.Event.prototype.fb = {
         instance: null,
         modal: null,
         options: null
      }, FooBox.raise = function (b, c, d) {
         d = d || {};
         var e = a.Event(c);
         return e.fb = {}, e.fb.instance = b, e.fb.modal = b.modal.element, e.fb.options = b.options, a.extend(!0, e.fb, d), b.element.one(c, function (a) {
            a.stopPropagation()
         }).trigger(e), e
      }, FooBox.isjQuery = function (a) {
         return a instanceof jQuery ? !0 : a && a.jquery
      }, FooBox.options = {
         isMultipart: function (a, b) {
            return "string" == typeof a && a.length > 0 && -1 !== a.indexOf(b)
         },
         hasProperties: function (a) {
            if ("object" != typeof a)
               return !1;
            var b;
            for (b in a)
               if (a.hasOwnProperty(b))
                  return !0;
            return !1
         },
         get: function (a, b) {
            if (FooBox.options.isMultipart(b, ".")) {
               var c = b.substring(0, b.indexOf(".")),
                       d = b.substring(b.indexOf(".") + 1);
               return a[c] = a[c] || {}, FooBox.options.get(a[c], d)
            }
            return a[b]
         },
         set: function (a, b, c) {
            if (FooBox.options.isMultipart(b, ".")) {
               var d = b.substring(0, b.indexOf(".")),
                       e = b.substring(b.indexOf(".") + 1);
               a[d] = a[d] || {}, FooBox.options.set(a[d], e, c)
            } else
               a[b] = c
         },
         merge: function (a, b, c) {
            var d, e = Array.prototype.slice.call(arguments);
            for (a = e.shift(), b = e.shift(), FooBox.options._merge(a, b), d = 0; d < e.length; d++)
               c = e[d], FooBox.options._merge(a, c);
            return a
         },
         _merge: function (b, c) {
            var d;
            for (d in c)
               c.hasOwnProperty(d) && (FooBox.options.hasProperties(c[d]) && !a.isArray(c[d]) ? (b[d] = b[d] || {}, FooBox.options._merge(b[d], c[d])) : a.isArray(c[d]) ? (b[d] = [], a.extend(!0, b[d], c[d])) : b[d] = c[d])
         }
      }, FooBox.objects = {
         registered: {},
         ensure: function (a) {
            return FooBox.objects.registered[a] = FooBox.objects.registered[a] || []
         },
         register: function (b, c, d) {
            var e = FooBox.objects.ensure(b);
            return e.push(c), "object" == typeof d && a.extend(!0, FooBox.defaults, d), !0
         },
         load: function (a, b) {
            var c, e, f = [],
                    g = FooBox.objects.ensure(a);
            for (e = 0; e < g.length; e++)
               try {
                  c = g[e], f.push(new c(b))
               } catch (h) {
                  d.error(h)
               }
            b.objects = b.objects || {}, b.objects[a] = f
         },
         call: function (b, c, e, f, g) {
            var h, i = Array.prototype.slice.call(arguments);
            b = i.shift(), c = i.shift(), e = i.shift();
            for (var j = c.objects[b] || [], k = 0; k < j.length; k++)
               try {
                  if (h = j[k], !a.isFunction(h[e]))
                     continue;
                  h[e].apply(h, i)
               } catch (l) {
                  d.error(l)
               }
         },
         get: function (b, c, d) {
            var e, f = c.objects[b];
            if (!f || !a.isFunction(d))
               return null;
            for (e = 0; e < f.length; e++)
               if (d(f[e]))
                  return f[e];
            return null
         }
      }, FooBox.addons = {
         _ns: "addons",
         validate: function (b) {
            return a.isFunction(b) ? !0 : (d.error('Expected type "function", received type "{0}".', typeof b), !1)
         },
         register: function (a, b) {
            return FooBox.addons.validate(a) ? FooBox.objects.register(FooBox.addons._ns, a, b) : (d.error("Failed to register the addon."), !1)
         },
         load: function (a) {
            FooBox.objects.load(FooBox.addons._ns, a)
         },
         call: function (a, b, c, d) {
            var e = Array.prototype.slice.call(arguments);
            e.unshift(FooBox.addons._ns), FooBox.objects.call.apply(this, e)
         }
      }, FooBox.handlers = {
         _ns: "handlers",
         validate: function (b) {
            if (!a.isFunction(b))
               return d.error('Expected type "function", received type "{0}".', typeof b), !1;
            var c = new b;
            return a.isFunction(c.handles) ? a.isFunction(c.defaults) ? a.isFunction(c.parse) ? a.isFunction(c.load) ? a.isFunction(c.getSize) ? a.isFunction(c.hasChanged) ? a.isFunction(c.preload) ? !0 : (d.error('The required "preload" method is not implemented.'), !1) : (d.error('The required "hasChanged" method is not implemented.'), !1) : (d.error('The required "getSize" method is not implemented.'), !1) : (d.error('The required "load" method is not implemented.'), !1) : (d.error('The required "parse" method is not implemented.'), !1) : (d.error('The required "defaults" method is not implemented.'), !1) : (d.error('The required "handles" method is not implemented.'), !1)
         },
         register: function (a, b) {
            return FooBox.handlers.validate(a) ? FooBox.objects.register(FooBox.handlers._ns, a, b) : (d.error("Failed to register the handler."), !1)
         },
         load: function (a) {
            FooBox.objects.load(FooBox.handlers._ns, a)
         },
         call: function (a, b, c, d) {
            var e = Array.prototype.slice.call(arguments);
            e.unshift(FooBox.handlers._ns), FooBox.objects.call.apply(this, e)
         },
         get: function (a, b) {
            return FooBox.objects.get(FooBox.handlers._ns, a, function (a) {
               return a.type == b
            })
         }
      }, FooBox.Item = function (b, c, d) {
         return this.type = b, this.element = FooBox.isjQuery(c) ? c : a(c), this.handler = d, this.width = null, this.height = null, this.url = null, this.overflow = !1, this.preloaded = !1, this.proportion = !1, this.error = !1, this
      }, FooBox.Size = function (a, b) {
         return this.width = "number" == typeof a ? a : parseInt(a, 0), this.height = "number" == typeof b ? b : parseInt(b, 0), this.equalTo = function (a) {
            return this.width == a.width && this.height == a.height
         }, this
      }, FooBox.Size.check = function (a) {
         return "number" == typeof a ? a : isNaN(parseInt(a)) ? null : parseInt(a)
      }, FooBox.Timer = function () {
         this.id = null, this.busy = !1;
         var a = this;
         return this.start = function (b, c, d) {
            d = d || b, a.stop(), a.id = setTimeout(function () {
               b.call(d), a.id = null, a.busy = !1
            }, c), a.busy = !0
         }, this.stop = function () {
            null !== a.id && a.busy !== !1 && (clearTimeout(a.id), a.id = null, a.busy = !1)
         }, this
      }, a.fn.foobox = function (b) {
         return b = b || {}, this.each(function () {
            var c = a(this).data("fbx_instance");
            if (c instanceof FooBox.Instance)
               if (1 == c.options.alwaysInit) {
                  var d = c.options;
                  c.destroy(), c = new FooBox.Instance(c.id), c.init(this, a.extend(!0, d, b))
               } else
                  c.reinit(b);
            else {
               if (c = a(this).data("fbx_p_instance"), c instanceof FooBox.Instance)
                  return;
               c = new FooBox.Instance, c.init(this, b)
            }
         })
      }, FooBox.Modal = function (b) {
         this.FooBox = b, this.element = null, this.loaderTimeout = new FooBox.Timer, this._first = !1, this._busy = !1, this._closed = !1;
         var c = this;
         return this.init = function (a, b) {
            c.setup.html(), c.setup.options(b), c.setup.bind()
         }, this.reinit = function (a) {
            c.setup.options(a)
         }, this.destroy = function () {
            FooBox.isjQuery(c.element) && c.element.remove()
         }, this.setup = {
            html: function () {
               if (!FooBox.isjQuery(c.element)) {
                  c.element = a('<div class="fbx-modal"></div>'), c.element.append('<div class="fbx-inner-spacer"></div>');
                  var b = a('<div class="fbx-stage"></div>');
                  b.append('<div class="fbx-item-current"></div>'), b.append('<div class="fbx-item-next"></div>');
                  var d = a('<div class="fbx-inner fbx-inner-shadow"></div>');
                  d.append(b), d.append('<a class="fbx-prev fbx-btn-transition fbx-btn-shadow"></a>'), d.append('<div class="fbx-credit"><a target="_blank" href=""><em></em><span> FooBox</span></a></div>'), d.append('<span class="fbx-count" />'), d.append('<a class="fbx-next fbx-btn-transition fbx-btn-shadow"></a>'), d.append('<a class="fbx-close fbx-btn-transition fbx-btn-shadow"></a>'), c.element.append('<div class="fbx-loader"><div></div></div>'), c.element.append(d), c.FooBox.raise("foobox.setupHtml"), a("body").append(c.element)
               }
            },
            options: function (a) {
               var b;
               c.element.removeClass().addClass("fbx-modal").addClass(FooBox.format("fbx-{0}", c.FooBox.id)).addClass(c.FooBox.element.data("style") || a.style).addClass(c.FooBox.element.data("theme") || a.theme).addClass(c.FooBox.element.data("modal-class")).addClass(a.modalClass).data("fbx_instance", c.FooBox), c.element.addClass(FooBox.browser.css), b = a.affiliate.enabled ? "" : "none", c.element.find(".fbx-credit").css("display", b), a.affiliate.enabled && (c.element.find(".fbx-credit > a").attr("href", a.affiliate.url), c.element.find(".fbx-credit > a > em").text(a.affiliate.prefix)), b = a.showCount && c.FooBox.items.multiple() ? "" : "none", c.element.find(".fbx-count").css("display", b), a.showButtons && c.FooBox.items.multiple() || c.element.addClass("fbx-no-buttons"), c.FooBox.raise("foobox.setupOptions")
            },
            bind: function () {
               1 == c.FooBox.options.closeOnOverlayClick && c.element.unbind("click.foobox").bind("click.foobox", function (b) {
                  1 == c.FooBox.options.closeOnOverlayClick && a(b.target).is(".fbx-modal") && c.close()
               }), c.element.find(".fbx-close").unbind("click.foobox").bind("click.foobox", function (a) {
                  a.preventDefault(), a.stopPropagation(), c.close()
               }).end().find(".fbx-prev").unbind("click.foobox").bind("click.foobox", function (b) {
                  b.preventDefault(), b.stopPropagation(), a(this).hasClass("fbx-disabled") || c.prev()
               }).end().find(".fbx-next").unbind("click.foobox").bind("click.foobox", function (b) {
                  b.preventDefault(), b.stopPropagation(), a(this).hasClass("fbx-disabled") || c.next()
               })
            }
         }, this.prioritize = function () {
            FooBox.instances.length > 1 && c.element.nextAll(".fbx-modal:last").after(c.element)
         }, this.preload = function () {
            if (1 == c.FooBox.options.preload) {
               var a = c.FooBox.items.prev();
               a && a.handler.preload(a);
               var b = c.FooBox.items.next();
               b && b.handler.preload(b)
            }
         }, this.show = function (b) {
            function e(a) {
               if (c.loaderTimeout.stop(), c.element.removeClass("fbx-loading"), c._busy = !1, d.error(a), !c.FooBox.raise("foobox.onError", {
                  error: a
               }).isDefaultPrevented()) {
                  var e = c.FooBox.items.error(f.index);
                  null != e && c.show(b)
               }
            }
            b = b || !1, c._first = b, c._busy = !0, c._closed = !1, a("body").addClass("fbx-active"), c.FooBox.options.hideScrollbars && a("html").css("overflow", "hidden");
            var f = c.FooBox.items.current();
            1 == f.error ? c.element.addClass("fbx-error") : c.element.removeClass("fbx-error"), c.element.hasClass("fbx-show") || (c.prioritize(), c.element.addClass("fbx-loading").find(".fbx-inner").css({
               width: "100px",
               height: "100px",
               "margin-top": "-50px",
               "margin-left": "-50px"
            }));
            var g = c.element.find(".fbx-item-current"),
                    h = c.element.find(".fbx-item-next");
            if (h.hide().css("opacity", "0"), c.element.find(".fbx-count").text(c.FooBox.options.countMessage.replace("%index", "" + (c.FooBox.items.indexes.current + 1)).replace("%total", "" + c.FooBox.items.array.length)), c.FooBox.raise("foobox.beforeLoad", {
               item: f
            }).isDefaultPrevented())
               return void(c._busy = !1);
            if (f.handler.hasChanged(f)) {
               var i = f.index,
                       j = f.element.get(0);
               f = f.handler.parse(f.element);
               var k = c.FooBox.raise("foobox.parseItem", {
                  element: f.element,
                  item: f
               });
               j.index = k.fb.item.index = i, c.FooBox.items.array[i] = k.fb.item
            }
            c.preload(), c.loaderTimeout.start(function () {
               c.element.addClass("fbx-loading")
            }, c.FooBox.options.loaderTimeout), setTimeout(function () {
               c.checkForLoop(f), f.handler.load(f, h, function (a) {
                  return 1 == c._closed ? void(c._busy = !1) : void c.transitionOut(g, function () {
                     return 1 == c._closed ? void(c._busy = !1) : void c.resize(a, h, function () {
                        return 1 == c._closed ? void(c._busy = !1) : (c.loaderTimeout.stop(), h.show(), void c.transitionIn(h, function () {
                           return 1 == c._closed ? void(c._busy = !1) : (h.add(g).toggleClass("fbx-item-next fbx-item-current"), g.empty(), void(c.element.hasClass("fbx-show") ? (c.element.removeClass("fbx-loading"), c.FooBox.raise("foobox.afterLoad", {
                              item: f
                           }), c._busy = !1) : c.FooBox.raise("foobox.beforeShow", {
                              item : f
                           }).isDefaultPrevented() || (c.element.removeClass("fbx-loading").addClass("fbx-show"), c.FooBox.raise("foobox.afterShow", {
                              item: f
                           }), c.FooBox.raise("foobox.afterLoad", {
                              item: f
                           }), c._busy = !1)))
                        }, e))
                     }, e)
                  }, e)
               }, e)
            }, c.FooBox.options.loadDelay)
         }, this.checkForLoop = function (a) {
            1 != c.FooBox.options.loop && (c.element.find(".fbx-prev, .fbx-next").removeClass("fbx-disabled"), c.FooBox.items.is.first(a) && c.element.find(".fbx-prev").addClass("fbx-disabled"), c.FooBox.items.is.last(a) && c.element.find(".fbx-next").addClass("fbx-disabled"))
         }, this.resize = function (b, d, e, f) {
            try {
               if (0 === b.width || 0 === b.height)
                  return void(a.isFunction(f) && f(FooBox.format("Invalid size supplied. Width = {0}, Height = {1}", b.width, b.height)));
               var g = c.FooBox.items.current(),
                       h = new FooBox.Size(b.width, b.height),
                       i = c.element.find(".fbx-inner"),
                       j = c.element.find(".fbx-inner-spacer"),
                       k = parseInt(j.css("padding-top"), 0),
                       l = parseInt(j.css("padding-bottom"), 0),
                       m = parseInt(j.css("padding-left"), 0),
                       n = parseInt(j.css("padding-right"), 0),
                       o = parseInt(i.css("border-top-width"), 0),
                       p = parseInt(i.css("border-bottom-width"), 0),
                       q = parseInt(i.css("border-left-width"), 0),
                       r = parseInt(i.css("border-right-width"), 0),
                       s = parseInt(i.css("padding-left"), 0),
                       t = k + l + 2 * s + o + p,
                       u = m + n + 2 * s + q + r,
                       v = new FooBox.Size(parseInt(i.css("width"), 0), parseInt(i.css("height"), 0)),
                       w = new FooBox.Size(c.element.width() - u, c.element.height() - t),
                       x = w.width / b.width;
               b.height * x > w.height && (x = w.height / b.height), c.FooBox.options.fitToScreen === !0 || 1 == g.proportion && (b.height > w.height || b.width > w.width) ? (b.height = Math.floor(b.height * x), b.width = Math.floor(b.width * x)) : 0 == g.proportion && (b.height > w.height && (b.height = w.height), b.width > w.width && (b.width = w.width)), b.height < 100 && (b.height = 100), b.width < 100 && (b.width = 100);
               var y = -(b.height / 2 + s + (l - k / 2) / 2) + (q + r) / 2,
                       z = -(b.width / 2 + s + (q + r) / 2);
               if (v.equalTo(b))
                  i.css({
                     height: b.height,
                     width: b.width,
                     "margin-top": y,
                     "margin-left": z
                  }), c.overflow(g, h, b, d), c.FooBox.raise("foobox.afterResize", {
                     item: g,
                     size: b
                  }), a.isFunction(e) && e();
               else if (!c.FooBox.raise("foobox.beforeResize", {
                  item: g,
                  size: b,
                  offset: {
                     top: y,
                     left: z
                  },
                  error: f,
                  success: e
               }).isDefaultPrevented())
                  if (y = -(b.height / 2 + s + (l - k / 2) / 2) + (q + r) / 2, z = -(b.width / 2 + s + (q + r) / 2), c.element.hasClass("fbx-show"))
                     if (FooBox.browser.supportsTransitions()) {
                        var A = c.FooBox.options.resizeSpeed / 1e3,
                                B = "all " + A + "s ease-in-out";
                        i.css({
                           WebkitTransition: B,
                           MozTransition: B,
                           MsTransition: B,
                           OTransition: B,
                           transition: B
                        }), i.css({
                           height: b.height,
                           width: b.width,
                           "margin-top": y,
                           "margin-left": z
                        }), setTimeout(function () {
                           i.css({
                              WebkitTransition: "",
                              MozTransition: "",
                              MsTransition: "",
                              OTransition: "",
                              transition: ""
                           }), c.overflow(g, h, b, d), c.FooBox.raise("foobox.afterResize", {
                              item: g,
                              size: b
                           }), a.isFunction(e) && e(b)
                        }, c.FooBox.options.resizeSpeed)
                     } else
                        i.animate({
                           height: b.height,
                           width: b.width,
                           "margin-top": y,
                           "margin-left": z
                        }, c.FooBox.options.resizeSpeed, function () {
                           c.overflow(g, h, b, d), c.FooBox.raise("foobox.afterResize", {
                              item: g,
                              size: b
                           }), a.isFunction(e) && e(b)
                        });
                  else
                     i.css({
                        height: b.height,
                        width: b.width,
                        "margin-top": y,
                        "margin-left": z
                     }), c.overflow(g, h, b, d), c.FooBox.raise("foobox.afterResize", {
                        item: g,
                        size: b
                     }), a.isFunction(e) && e()
            } catch (C) {
               a.isFunction(f) && f(C)
            }
         }, this.overflow = function (a, b, d, e) {
            var f = e.find(".fbx-item");
            1 == a.overflow && (d.width < .8 * b.width || d.height < .8 * b.height) || 1 == a.overflow && 0 == a.proportion && (d.width < b.width || d.height < b.height) || 1 == a.overflow && "html" == a.type ? ("html" == a.type ? (f.css({
               width: "100%",
               height: "auto",
               overflow: ""
            }), e.css("overflow", "auto")) : (f.css({
               width: b.width,
               height: b.height,
               overflow: ""
            }), e.css({
               "overflow-x": b.width <= d.width ? "hidden" : "",
               "overflow-y": b.height <= d.height ? "hidden" : ""
            })), c.FooBox.raise("foobox.showOverflow", {
               item: a,
               container: e
            })) : (f.css({
               width: "",
               height: "",
               overflow: "hidden"
            }), e.css({
               "overflow-x": "",
               "overflow-y": "",
               overflow: "hidden"
            }), c.FooBox.raise("foobox.hideOverflow", {
               item: a,
               container: e
            }))
         }, this.transitionOut = function (b, d, e) {
            try {
               if (!c.element.hasClass("fbx-show"))
                  return void(a.isFunction(d) && d());
               b.animate({
                  opacity: 0
               }, b.is(":visible") ? c.FooBox.options.transitionOutSpeed : 0, function () {
                  a.isFunction(d) && d()
               })
            } catch (f) {
               a.isFunction(e) && e(f)
            }
         }, this.transitionIn = function (b, d, e) {
            try {
               if (!c.element.hasClass("fbx-show"))
                  return b.css({
                     opacity: 1
                  }), void(a.isFunction(d) && d());
               b.animate({
                  opacity: 1
               }, c.FooBox.options.transitionInSpeed, function () {
                  a.isFunction(d) && d()
               })
            } catch (f) {
               a.isFunction(e) && e(f)
            }
         }, this.close = function () {
            c.FooBox.raise("foobox.beforeClose").isDefaultPrevented() || (c._closed = !0, c._busy = !1, c.element.removeClass("fbx-loading fbx-show"), a("body").removeClass("fbx-active"), c.FooBox.raise("foobox.close"), c.element.find(".fbx-item-current, .fbx-item-next").empty(), c.FooBox.options.hideScrollbars && a("html").css("overflow", ""), c.FooBox.raise("foobox.afterClose"))
         }, this.prev = function (a) {
            if (1 != c._busy) {
               if (c.FooBox.items.indexes.set(c.FooBox.items.indexes.prev), "string" == typeof a)
                  for (var b = c.FooBox.items.current(); b.type != a; )
                     c.FooBox.items.indexes.set(c.FooBox.items.indexes.prev), b = c.FooBox.items.current();
               c.show(!1), c.FooBox.raise("foobox.previous")
            }
         }, this.next = function (a) {
            if (1 != c._busy) {
               if (c.FooBox.items.indexes.set(c.FooBox.items.indexes.next), "string" == typeof a)
                  for (var b = c.FooBox.items.current(); b.type != a; )
                     c.FooBox.items.indexes.set(c.FooBox.items.indexes.next), b = c.FooBox.items.current();
               c.show(!1), c.FooBox.raise("foobox.next")
            }
         }, this
      }, FooBox.Instance = function (b) {
         this.id = null, "number" == typeof b ? (this.id = b, FooBox.instances[b - 1] = this) : this.id = FooBox.instances.push(this), this.element = null, this.options = a.extend(!0, {}, FooBox.defaults), this.modal = new FooBox.Modal(this), this.objects = {}, FooBox.addons.load(this), FooBox.handlers.load(this);
         var c = this;
         return this.raise = function (a, b) {
            return FooBox.raise(c, a, b)
         }, this.init = function (b, d) {
            c.element = FooBox.isjQuery(b) ? b : a(b), c.options = FooBox.options.merge(c.options, d || {}), FooBox.addons.call(c, "preinit", c.element, c.options), c.items.init(), c.items.array.length > 0 ? (c.element.data("fbx_instance", c), c.options.containerCssClass && c.element.addClass(c.options.containerCssClass), c.setup.bind(), c.modal.init(b, c.options), FooBox.handlers.call(c, "init", c.element, c.options), c.raise("foobox.initialized"), a.isFunction(c.options.initCallback) && c.options.initCallback.call(c)) : c.destroy()
         }, this.reinit = function (a) {
            c.options = FooBox.options.merge(c.options, a || {}), c.items.init(!0), c.items.array.length > 0 ? (c.setup.bind(), c.modal.reinit(c.options), FooBox.handlers.call(c, "reinit", c.options), c.raise("foobox.reinitialized")) : c.destroy()
         }, this.destroy = function () {
            FooBox.addons.call(c, "destroy"), FooBox.handlers.call(c, "destroy"), c.items.destroy(), c.modal.destroy(), c.element.removeClass("fbx-instance fbx-item").data({
               fbx_instance: null,
               fbx_p_instance: null
            }), c.id == FooBox.instances.length ? FooBox.instances.splice(c.id - 1, 1) : FooBox.instances[c.id - 1] = null, c.raise("foobox.destroy")
         }, this.setup = {
            bind: function () {
               a(c.options.externalSelector).unbind("click.fooboxExternal").bind("click.fooboxExternal", function (b) {
                  b.preventDefault();
                  var c = a(this).data("foobox"),
                          d = a(c),
                          e = d.data("fbx_instance") || d.data("fbx_p_instance");
                  return d.length > 0 && e instanceof FooBox.Instance && e.modal instanceof FooBox.Modal && e.modal.show(!0), !1
               })
            }
         }, this.items = {
            array: [],
            indexes: {
               prev: -1,
               current: 0,
               next: 1,
               direction: "*",
               set: function (a) {
                  var b = c.items.indexes.current;
                  a = a || 0, a = a > c.items.array.length - 1 ? 0 : 0 > a ? c.items.array.length - 1 : a;
                  var d = a - 1,
                          e = a + 1;
                  c.items.indexes.current = a, c.items.indexes.prev = 0 > d ? c.items.array.length - 1 : d, c.items.indexes.next = e > c.items.array.length - 1 ? 0 : e, c.items.indexes.direction = c.items.indexes._direction(b, a, c.items.array.length - 1)
               },
               _direction: function (a, b, c) {
                  return 0 == b && a == c ? ">" : b == c && 0 == a ? "<" : b > a ? ">" : a > b ? "<" : "*"
               }
            },
            new_array: function (b) {
               b = b || !1;
               var d, e, f, g = 0;
               if (1 == b) {
                  if (c.items.array.length > 0) {
                     for (var h = 0; h < c.items.array.length; h++)
                        d = c.items.array[h], FooBox.isjQuery(d.element) ? 0 == d.element.parents(":first").length && (c.items.array.splice(h, 1), h -= 1) : d.option || (c.items.array.splice(h, 1), h -= 1);
                     for (var i = 0; i < c.items.array.length; i++)
                        d = c.items.array[i], FooBox.isjQuery(d.element) ? (f = d.element.get(0), f.index = d.index = i) : d.index = i
                  }
               } else
                  c.items.array = [];
               if (a.isArray(c.options.items))
                  for (var j = 0; j < c.options.items.length; j++)
                     if (d = c.options.items[j], -1 == c.items.indexOf(d))
                        for (var k = 0; k < c.objects.handlers.length; k++)
                           if (c.objects.handlers[k].type == d.type) {
                              d.index = g, d.option = !0, d.handler = c.objects.handlers[k], d.handler.defaults(d), e = c.raise("foobox.parseItem", {
                                 element: null,
                                 item: d
                              }), c.items.array.push(e.fb.item), g++;
                              break
                           }
            },
            init: function (a) {
               a = a || !1, c.items.new_array(a), c.element.is(c.options.selector) && !c.element.is(c.options.excludes) && c.items.add(c.element) ? c.element.unbind("click.item").bind("click.item", c.items.clicked) : c.element.find(c.options.selector).not(c.options.excludes).unbind("click.item").filter(function () {
                  return c.items.add(this)
               }).bind("click.item", c.items.clicked), c.items.rel()
            },
            destroy: function () {
               var b, d;
               for (d = 0; d < c.items.array.length; d++)
                  b = c.items.array[d], a.isFunction(b.destroy) && b.destroy(), FooBox.isjQuery(b.element) && b.element.unbind("click.item").removeClass("fbx-link").data("fbx_p_instance", null);
               c.items.array = []
            },
            rel: function () {
               var b = c.options.rel || c.element.attr("rel") || (c.items.first(function (a) {
                  return FooBox.isjQuery(a.element) ? "string" == typeof a.element.attr("rel") : !1
               }) || {
                  element: a()
               }).element.attr("rel");
               "string" == typeof b && a('[rel="' + b + '"]').not(c.options.excludes).not(c.element).unbind("click.item").filter(function () {
                  return c.items.add(this)
               }).bind("click.item", c.items.clicked)
            },
            indexOf: function (a, b) {
               if (!a)
                  return -1;
               b = b || "url";
               var d;
               for (d = 0; d < c.items.array.length; d++)
                  if (c.items.array[d][b] == a[b])
                     return d;
               return -1
            },
            is: {
               first: function (a) {
                  return c.items.array && 0 != c.items.array.length ? c.items.array[0].index == a.index : !1
               },
               last: function (a) {
                  return c.items.array && 0 != c.items.array.length ? c.items.array[c.items.array.length - 1].index == a.index : !1
               }
            },
            add: function (b) {
               b = FooBox.isjQuery(b) ? b : a(b);
               var d = c.items.parse(b, c.items.array.length);
               if (null === d)
                  return !1;
               var e = b.get(0),
                       f = c.items.indexOf(d);
               -1 != f ? (d = c.items.array[f], e.index = d.index) : e.index = d.index = c.items.array.push(d) - 1;
               var g = b.addClass("fbx-link").data("fbx_p_instance");
               return g instanceof FooBox.Instance || b.data("fbx_p_instance", c), !0
            },
            get: function (b) {
               b = FooBox.isjQuery(b) ? b : a(b);
               var d = null,
                       e = b.get(0).index;
               return e && e > 0 && e <= c.items.array.length - 1 && (d = c.items.array[e]), d
            },
            parse: function (b, d) {
               b = FooBox.isjQuery(b) ? b : a(b);
               for (var e, f, g = 0; g < c.objects.handlers.length; g++)
                  if (c.objects.handlers[g].handles(b, c.element)) {
                     e = c.objects.handlers[g].parse(b), isNaN(d) || (e.index = d), f = c.raise("foobox.parseItem", {
                        element: b,
                        item: e
                     });
                     break
                  }
               return "undefined" != typeof f && f.fb.item ? f.fb.item : null
            },
            error: function (b) {
               function d(b) {
                  var c = this;
                  return c.FooBox = b, c.type = "error", c.handles = function () {
                     return !1
                  }, c.hasChanged = function () {
                     return !1
                  }, c.defaults = function () {}, c.parse = function () {}, c.load = function (b, d, e, f) {
                     try {
                        d.empty().append(b.content), a.isFunction(e) && e(c.getSize(b))
                     } catch (g) {
                        a.isFunction(f) && f(g)
                     }
                  }, c.getSize = function (a) {
                     return new FooBox.Size(a.width, a.height)
                  }, c
               }
               if (c.items.array.length > b && 1 == c.items.array[b].error)
                  return c.items.array[b];
               var e, f, g = FooBox.handlers.get(c, "html"),
                       h = !1;
               if (null == g && (g = new d(c)), null !== c.options.error.match(/^#/i) && a(c.options.error).length > 0)
                  e = a(c.options.error), h = !0;
               else {
                  var i = FooBox.format('<div class="fbx-error-msg" data-width="240" data-height="240"><span></span><p>{0}</p></div>', c.options.error);
                  e = a(i)
               }
               return f = new FooBox.Item(g.type, e.get(0), g), f.selector = 1 == h ? c.options.error : null, f.index = b, f.error = !0, f.title = e.data("title") || null, f.description = e.data("description") || null, f.width = e.data("width") || 240 || null, f.height = e.data("height") || 240 || null, f.content = 1 == h ? null : e, f.fullscreen = !0, f.handler = g, c.items.array[b] = f, f
            },
            first: function (a) {
               for (var b = null, d = 0; d < c.items.array.length; d++)
                  if (a(c.items.array[d])) {
                     b = c.items.array[d];
                     break
                  }
               return b
            },
            current: function () {
               return c.items.array[c.items.indexes.current]
            },
            prev: function () {
               return c.items.array[c.items.indexes.prev]
            },
            next: function () {
               return c.items.array[c.items.indexes.next]
            },
            multiple: function () {
               return c.items.array.length > 1
            },
            clicked: function (a) {
               return a.preventDefault(), c.items.indexes.set(this.index), c.modal.show(!0), !1
            }
         }, this
      }, FooBox.open = function (b) {
         if (1 == FooBox.isDeepLink)
            return null;
         var c, d = null;
         if ("object" == typeof b) {
            var e = document.createElement("a");
            a(e).foobox(b), d = a(e).data("fbx_instance")
         } else
            "number" == typeof b ? c = b : (c = parseInt(b || 0), c = isNaN(c) ? 0 : c), c = c > FooBox.instances.length - 1 ? FooBox.instances.length - 1 : 0 > c ? 0 : c, d = FooBox.instances[c];
         return null != d && d.modal instanceof FooBox.Modal ? (d.modal.show(!0), d) : null
      }, FooBox.close = function () {
         var a, b = [],
                 c = null;
         for (a = 0; a < FooBox.instances.length; a++)
            c = FooBox.instances[a], null != c && c.modal instanceof FooBox.Modal && FooBox.isjQuery(c.modal.element) && c.modal.element.hasClass("fbx-show") && b.push(c);
         for (a = 0; a < b.length; a++)
            c = b[a], c.modal.close()
      }, FooBox.resize = function (c, d) {
         if (c || d) {
            var e, f, g, h;
            for (e = 0; e < FooBox.instances.length; e++)
               f = FooBox.instances[e], null != f && f.modal instanceof FooBox.Modal && FooBox.isjQuery(f.modal.element) && f.modal.element.hasClass("fbx-show") && (g = f.items.current(), h = new FooBox.Size(c || g.width || 0, d || g.height || 0), g.width = h.width, g.height = h.height, f.modal.resize(h, f.modal.element.find(".fbx-item-current")))
         } else
            a(b).trigger("resize.foobox")
      }, FooBox.lateBind = function (c, d) {
         var e = a.extend(!0, {}, FooBox.defaults, d || b.FOOBOX && FOOBOX.o || {}),
                 f = a(c);
         f.on("click.foobox", e.selector, function (a) {
            a.preventDefault();
            var b = f.data("fbx_instance");
            b || (b = f.foobox(e).data("fbx_instance")), b instanceof FooBox.Instance && "number" == typeof this.index && (b.items.indexes.set(this.index), b.modal.show(!0))
         })
      }
   }
}(jQuery, window, window.console),
        function (a, b) {
           var c = {
              images: {
                 noRightClick: !1,
                 attr: "href",
                 overflow: !1,
                 fullscreen: !0,
                 showCaptions: !0,
                 regex: /https?:\/\/.*?\/.*?\.(jpg|jpeg|png|gif|bmp)/i,
                 maxWidth: -1,
                 maxHeight: -1,
                 findUrl: function (a, c) {
                    if (!c)
                       return "";
                    if (c.data("image"))
                       return c.data("image");
                    var d = c.attr(a.options.images.attr);
                    return "string" == typeof d ? b.qualifiedURL(c.attr(a.options.images.attr)) : ""
                 }
              }
           };
           b.Item.prototype.image = null, b.Item.prototype.maxWidth = null, b.Item.prototype.maxHeight = null, b.ImageHandler = function (c) {
              this.FooBox = c, this.type = "image";
              var d = this;
              this.handles = function (a) {
                 var b = d.FooBox.options.images.findUrl(d.FooBox, a),
                         c = "string" == typeof b && null != b.match(d.FooBox.options.images.regex),
                         e = d.FooBox.raise("foobox.handlesImage", {
                            element: a,
                            handle: c
                         });
                 return e.fb.handle
              }, this.defaults = function (a) {
                 a.fullscreen = a.fullscreen || d.FooBox.options.images.fullscreen, a.captions = a.captions || d.FooBox.options.images.showCaptions, a.social = a.social || !0, a.overflow = a.overflow || d.FooBox.options.images.overflow, a.proportion = a.proportion || !0, a.maxWidth = a.maxWidth || d.FooBox.options.images.maxWidth, a.maxHeight = a.maxHeight || d.FooBox.options.images.maxHeight
              }, this.parse = function (a) {
                 var c = new b.Item(d.type, a, this);
                 return d.defaults(c), c.url = d.FooBox.options.images.findUrl(d.FooBox, a) || null, c.width = b.Size.check(a.data("width") || c.width || null), c.height = b.Size.check(a.data("height") || c.height || null), c.fullscreen = "boolean" == typeof a.data("fullscreen") ? a.data("fullscreen") : c.fullscreen, c.overflow = "boolean" == typeof a.data("overflow") ? a.data("overflow") : c.overflow, c.proportion = "boolean" == typeof a.data("proportion") ? a.data("proportion") : c.proportion, c.maxWidth = "number" == typeof a.data("maxWidth") ? a.data("maxWidth") : c.maxWidth, c.maxHeight = "number" == typeof a.data("maxHeight") ? a.data("maxHeight") : c.maxHeight, c.image = null, c.image_url = c.url, c
              }, this.load = function (b, c, e, f) {
                 try {
                    var g = function () {
                       var f = a(b.image).addClass("fbx-item fbx-item-image");
                       d.FooBox.options.images.noRightClick && f.bind("contextmenu", function (a) {
                          return a.preventDefault(), !1
                       }), c.empty().append(f), a.isFunction(e) && e(d.getSize(b))
                    };
                    b.image && null !== b.image ? g() : (b.image = new Image, b.image.onload = function () {
                       b.image.onload = b.image.onerror = null, b.height = b.image.height, b.width = b.image.width, g()
                    }, b.image.onerror = function () {
                       b.image.onload = b.image.onerror = null, b.image = null, a.isFunction(f) && f("An error occurred attempting to load the image.")
                    }, b.image.src = b.url)
                 } catch (h) {
                    a.isFunction(f) && f(h)
                 }
              }, this.preload = function (a) {
                 if (1 != a.preloaded) {
                    var b = new Image;
                    b.src = a.url, a.preloaded = !0
                 }
              }, this.getSize = function (a) {
                 if (null != a.width && null != a.height) {
                    if (a.maxWidth > 0 && a.maxHeight > 0 && (a.width > a.maxWidth || a.height > a.maxHeight)) {
                       var c = a.width > a.height ? a.maxWidth / a.width : a.maxHeight / a.height;
                       a.width *= c, a.height *= c
                    }
                    return new b.Size(a.width, a.height)
                 }
                 return new b.Size(0, 0)
              }, this.hasChanged = function (a) {
                 if (b.isjQuery(a.element)) {
                    var c = d.FooBox.options.images.findUrl(d.FooBox, a.element);
                    return a.url != c
                 }
                 return !1
              }
           }, b.handlers.register(b.ImageHandler, c)
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              keyboard: {
                 enabled: !0,
                 preventDefault: !1,
                 stopPropagation: !1
              }
           };
           b.Keyboard = function (a) {
              this.FooBox = a;
              var c = this;
              this.preinit = function (a) {
                 c.handlers.unbind(!0),
                         a.bind({
                            "foobox.initialized foobox.reinitialized": c.handlers.initialized,
                            "foobox.setupHtml": c.handlers.setupHtml
                         })
              }, this.destroy = function () {
                 c.handlers.unbind(!0)
              }, this.handlers = {
                 unbind: function (a) {
                    a = a || !1, a && c.FooBox.element.unbind({
                       "foobox.initialized foobox.reinitialized": c.handlers.initialized,
                       "foobox.setupHtml": c.handlers.setupHtml
                    }), c.FooBox.element.unbind("foobox.afterLoad", c.handlers.afterLoad), b.isjQuery(c.FooBox.modal.element) && c.FooBox.modal.element.unbind("keydown.foobox", c.handlers.onKeydown)
                 },
                 initialized: function () {
                    c.handlers.unbind(), 1 == c.FooBox.options.keyboard.enabled && (c.FooBox.element.bind("foobox.afterLoad", c.handlers.afterLoad), b.isjQuery(c.FooBox.modal.element) && c.FooBox.modal.element.bind("keydown.foobox", c.handlers.onKeydown))
                 },
                 setupHtml: function (a) {
                    a.fb.modal.attr("tabindex", 0)
                 },
                 afterLoad: function (a) {
                    a.fb.modal.focus()
                 },
                 onKeydown: function (a) {
                    var b = c.FooBox.modal,
                            d = c.FooBox.options.keyboard;
                    b.element.hasClass("fbx-show") && (b.element.hasClass("fbx-fullscreen-mode") || 27 !== a.which ? c.FooBox.items.multiple() && 37 === a.which ? b.prev() : c.FooBox.items.multiple() && 39 === a.which && b.next() : b.close(), 1 == d.preventDefault && a.preventDefault(), 1 == d.stopPropagation && a.stopPropagation(), c.FooBox.raise("foobox.keydown", {
                       keyCode: a.which
                    }))
                 }
              }
           }, b.addons.register(b.Keyboard, c)
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              hideNavOnMobile: !1,
              resizeTimeout: 300,
              breakpoints: {
                 phone: 640,
                 tablet: 1024
              },
              iosInterval: 200
           };
           b.BPInfo = function (c) {
              var d = "undefined" != typeof window.devicePixelRatio && b.browser.isMobile ? window.devicePixelRatio : 1;
              this.width = (window.innerWidth || document.documentElement.clientWidth || (document.body ? document.body.offsetWidth : 0)) / d, this.height = (window.innerHeight || document.documentElement.clientHeight || (document.body ? document.body.offsetHeight : 0)) / d, this.orientation = this.width > this.height ? "fbx-landscape" : "fbx-portrait";
              var e, f = null;
              if (a.isArray(c))
                 for (var g = 0; g < c.length; g++)
                    if (e = c[g], e && e.width && this.width <= e.width) {
                       f = e;
                       break
                    }
              this.breakpoint = null == f ? "fbx-desktop" : f.name
           }, b.Responsive = function (c) {
              this.FooBox = c, this.breakpoint = {
                 values: [],
                 names: ""
              }, this.timers = {
                 resize: new b.Timer,
                 ios: new b.Timer
              };
              var d = this,
                      e = null;
              this.preinit = function (a) {
                 d.handlers.unbind(!0), a.bind("foobox.initialized foobox.reinitialized", d.handlers.initialized)
              }, this.destroy = function () {
                 d.handlers.unbind(!0)
              }, this.handlers = {
                 unbind: function (b) {
                    b = b || !1, b && d.FooBox.element.unbind("foobox.initialized foobox.reinitialized", d.handlers.initialized), a(window).unbind("resize.foobox", d.handlers.resize), d.FooBox.element.unbind({
                       "foobox.beforeShow": d.handlers.iosBeforeShow,
                       "foobox.close": d.handlers.iosClose
                    })
                 },
                 initialized: function () {
                    d.handlers.unbind(), d.setup.breakpoints(), d.style(), a(window).bind("resize.foobox", d.handlers.resize), b.browser.iOS && (b.browser.isSafari || b.browser.isChrome) && d.FooBox.element.bind({
                       "foobox.beforeShow": d.handlers.iosBeforeShow,
                       "foobox.close": d.handlers.iosClose
                    })
                 },
                 resize: function () {
                    d.timers.resize.start(function () {
                       d.style();
                       var a = d.FooBox.items.current();
                       if (d.FooBox.modal.element.has("fbx-show") && null != a) {
                          var b = a.handler.getSize(a);
                          d.FooBox.modal.resize(b, d.FooBox.modal.element.find(".fbx-item-current"))
                       }
                    }, d.FooBox.options.resizeTimeout)
                 },
                 iosBeforeShow: function () {
                    d.timers.ios.start(d.handlers.ios, d.FooBox.options.iosInterval)
                 },
                 iosClose: function () {
                    d.timers.ios.stop()
                 },
                 ios: function () {
                    if (!d.FooBox.modal.element.hasClass("fbx-show"))
                       return void d.timers.ios.start(d.handlers.ios, d.FooBox.options.iosInterval);
                    var a = window.orientation || 0,
                            c = window.innerHeight,
                            f = 90 == a || -90 == a,
                            g = 0,
                            h = 0,
                            i = f ? screen.availWidth : screen.availHeight;
                    b.browser.isChrome ? (g = i - (f ? 76 : 56), h = i - (f ? 0 : 20)) : b.browser.isSafari && (g = i - 88, h = i - (f ? 0 : 19)), (null == e || 0 == e) && g >= c ? (e = !0, d.iosRedraw()) : (null == e || 1 == e) && c >= h && (e = !1, d.iosRedraw()), d.timers.ios.start(d.handlers.ios, d.FooBox.options.iosInterval)
                 }
              }, this.setup = {
                 breakpoints: function () {
                    d.breakpoint.values = [], d.breakpoint.names = "";
                    for (var a in d.FooBox.options.breakpoints)
                       d.FooBox.options.breakpoints.hasOwnProperty(a) && (d.breakpoint.values.push({
                          name: d.fixName(a),
                          width: d.FooBox.options.breakpoints[a]
                       }), d.breakpoint.names += d.fixName(a) + " ");
                    d.breakpoint.values.sort(function (a, b) {
                       return a.width - b.width
                    })
                 }
              }, this.iosRedraw = function () {
                 window.scrollTo(0, document.body.scrollTop), a(window).trigger("resize")
              }, this.fixName = function (a) {
                 return /^fbx-[a-zA-Z0-9]/.test(a) ? a : "fbx-" + a
              }, this.style = function () {
                 var a = new b.BPInfo(d.breakpoint.values),
                         c = d.FooBox.modal.element;
                 c.removeClass(d.breakpoint.names).removeClass("fbx-desktop fbx-landscape fbx-portrait").addClass(a.breakpoint).addClass(a.orientation), d.FooBox.options.hideNavOnMobile === !0 ? c.addClass("fbx-no-nav") : c.removeClass("fbx-no-nav")
              }
           }, b.Responsive.metaCheck = function () {
              var b = a("meta[name=viewport]"),
                      c = b.attr("content");
              if (b.length > 0 && "string" == typeof c) {
                 for (var d = c.split(","), e = !1, f = !1, g = 0; g < d.length; g++) {
                    var h = a.trim(d[g]);
                    "width" == h.substring(0, 5) && -1 !== h.indexOf("device-width") ? e = !0 : "initial-scale" == h.substring(0, 13) && (f = !0)
                 }
                 e && !f && (d.push("initial-scale=1"), c = d.join(","), b.attr("content", c))
              }
           }, b.addons.register(b.Responsive, c), b.Responsive.metaCheck()
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              captions: {
                 animation: "slide",
                 enabled: !0,
                 descSource: "find",
                 hoverDelay: 300,
                 maxHeight: .4,
                 onlyShowOnHover: !1,
                 onlyShowOnClick: !1,
                 overrideDesc: !1,
                 overrideTitle: !1,
                 prettify: !1,
                 titleSource: "image_find"
              }
           };
           b.Item.prototype.captions = !1, b.Item.prototype.title = null, b.Item.prototype.description = null, b.Item.prototype.caption = null, b.Captions = function (c) {
              this.FooBox = c, this.timers = {
                 hover: new b.Timer
              };
              var d = this;
              this.preinit = function (a) {
                 d.handlers.unbind(!0), a.bind({
                    "foobox.initialized foobox.reinitialized": d.handlers.initialized,
                    "foobox.setupHtml": d.handlers.setupHtml,
                    "foobox.setupOptions": d.handlers.setupOptions,
                    "foobox.parseItem": d.handlers.parseItem,
                    "foobox.onError": d.handlers.onError
                 })
              }, this.destroy = function () {
                 d.handlers.unbind(!0)
              }, this.handlers = {
                 unbind: function (a) {
                    a = a || !1, a && d.FooBox.element.unbind({
                       "foobox.initialized foobox.reinitialized": d.handlers.initialized,
                       "foobox.setupHtml": d.handlers.setupHtml,
                       "foobox.setupOptions": d.handlers.setupOptions,
                       "foobox.parseItem": d.handlers.parseItem,
                       "foobox.onError": d.handlers.onError,
                       "foobox.close": d.handlers.close
                    }), d.FooBox.element.unbind({
                       "foobox.beforeLoad": d.handlers.beforeLoad,
                       "foobox.afterLoad": d.handlers.afterLoad
                    }), d.FooBox.modal instanceof b.Modal && b.isjQuery(d.FooBox.modal.element) && d.FooBox.modal.element.undelegate("mouseenter.captions mouseleave.captions").find(".fbx-item-current, .fbx-item-next").unbind("click.captions")
                 },
                 initialized: function (a) {
                    d.handlers.unbind(), a.fb.options.captions.enabled === !0 && (a.fb.instance.element.bind({
                       "foobox.beforeLoad": d.handlers.beforeLoad,
                       "foobox.afterLoad": d.handlers.afterLoad,
                       "foobox.close": d.handlers.close
                    }), -1 === a.fb.options.modalClass.indexOf("fbx-caption-toggle-only") && a.fb.modal.find(".fbx-item-current, .fbx-item-next").bind("click.captions", d.handlers.toggleCaptions), a.fb.options.captions.onlyShowOnHover === !0 && a.fb.modal.delegate(".fbx-inner:not(:has(.fbx-item-error))", "mouseenter.captions", d.handlers.mouseenter).delegate(".fbx-inner:not(:has(.fbx-item-error))", "mouseleave.captions", d.handlers.mouseleave))
                 },
                 toggleCaptions: function (b) {
                    if (a(b.target).is("img") || a(b.target).is(".fbx-close-caption") || a(b.target).is(".fbx-open-caption")) {
                       var c = d.FooBox.items.current(),
                               e = d.FooBox.modal.element;
                       "image" !== c.type || e.hasClass("fbx-error") || (b.preventDefault(), e.find(".fbx-caption").is(".fbx-fade-caption, .fbx-slide-caption, .fbx-hide-caption") ? (e.removeClass("fbx-captions-hidden"), d.show()) : (e.addClass("fbx-captions-hidden"), d.hide()))
                    }
                 },
                 mouseenter: function () {
                    d.timers.hover.start(function () {
                       d.show()
                    }, d.FooBox.options.captions.hoverDelay)
                 },
                 mouseleave: function () {
                    d.timers.hover.start(function () {
                       d.hide()
                    }, d.FooBox.options.captions.hoverDelay)
                 },
                 setupHtml: function (b) {
                    var c = a("<div/>", {
                       "class": "fbx-caption"
                    }),
                            e = a("<a/>", {
                               "class": "fbx-open-caption",
                               html: "&hellip;"
                            }).bind("click.captions", d.handlers.toggleCaptions);
                    "string" == typeof b.fb.options.modalClass && -1 != b.fb.options.modalClass.indexOf("fbx-sticky-caption") ? b.fb.modal.append(c, e) : (b.fb.modal.find(".fbx-stage").append(c), b.fb.modal.find(".fbx-inner").append(e))
                 },
                 setupOptions: function (a) {
                    a.fb.modal.find(".fbx-caption").addClass(d.animation())
                 },
                 close: function (a) {
                    1 != a.fb.options.captions.onlyShowOnHover && a.fb.modal.find(".fbx-caption").addClass(d.animation())
                 },
                 beforeLoad: function (a) {
                    1 != a.fb.options.captions.onlyShowOnHover && a.fb.modal.find(".fbx-caption").addClass(d.animation())
                 },
                 afterLoad: function (a) {
                    var b = a.fb.item;
                    return !b || b.error || b.captionLoaded || (a.fb.instance.raise("foobox.alterCaption", {
                       element: a.fb.element,
                       item: b
                    }), b.captionLoaded = !0), 1 == a.fb.options.captions.onlyShowOnHover ? void d.update() : void(0 == a.fb.options.captions.onlyShowOnClick && d.show())
                 },
                 onError: function (a) {
                    a.fb.modal.find(".fbx-caption").addClass(d.animation())
                 },
                 parseItem: function (c) {
                    var e = c.fb.options.captions;
                    if (c.fb.item.captions && 0 != e.enabled) {
                       var f, g, h = "";
                       if (null != c.fb.element) {
                          var i = a(c.fb.element).data("titleSource") || a(c.fb.instance.element).data("titleSource") || e.titleSource,
                                  j = a(c.fb.element).data("descSource") || a(c.fb.instance.element).data("descSource") || e.descSource;
                          f = c.fb.element.data("captionTitle") || c.fb.element.data("title") || d.text(c.fb.element, i), g = c.fb.element.data("captionDesc") || c.fb.element.data("description") || d.text(c.fb.element, j)
                       } else
                          f = c.fb.item.title, g = c.fb.item.description;
                       f = null == f || "undefined" == typeof f ? "" : f + "", g = null == g || "undefined" == typeof g ? "" : g + "", f && f == g && (g = null), h = "string" == typeof f && f.length > 0 ? b.format('<div class="fbx-caption-title">{0}</div>', f) : h, h = "string" == typeof g && g.length > 0 ? h + b.format('<div class="fbx-caption-desc">{0}</div>', g) : h, c.fb.item.title = f, c.fb.item.description = g, c.fb.item.caption = h, c.fb.instance.raise("foobox.createCaption", {
                          element: c.fb.element,
                          item: c.fb.item
                       })
                    }
                 }
              }, this.text = function (b, c) {
                 var e;
                 switch (c) {
                    case "find":
                       e = a.trim(b.data("enviraCaption") || b.data("title") || b.attr("title") || b.find("img:first").data("title") || b.find("img:first").data("alt") || b.find("img:first").attr("title") || b.find("img:first").attr("alt"));
                       break;
                    case "image_find":
                       e = a.trim(b.find("img:first").data("title") || b.find("img:first").data("alt") || b.find("img:first").attr("title") || b.find("img:first").attr("alt"));
                       break;
                    case "image":
                       e = a.trim(b.find("img:first").data("title") || b.find("img:first").attr("title"));
                       break;
                    case "image_alt":
                       e = a.trim(b.find("img:first").data("alt") || b.find("img:first").attr("alt"));
                       break;
                    case "anchor":
                       e = a.trim(b.data("enviraCaption") || b.data("title") || b.attr("title"));
                       break;
                    default:
                       e = null
                 }
                 return d.FooBox.options.captions.prettify && (e = d.prettifier(e)), e
              }, this.animation = function () {
                 switch (d.FooBox.options.captions.animation) {
                    case "fade":
                       return "fbx-fade-caption";
                    case "slide":
                       return "fbx-slide-caption";
                    default:
                       return "fbx-hide-caption"
                 }
              }, this.hide = function () {
                 var a = d.FooBox.items.current(),
                         b = d.FooBox.modal.element.find(".fbx-caption");
                 return d.FooBox.options.captions.enabled && a.captions && "string" == typeof a.caption && 0 != a.caption.length ? (b.addClass(d.animation()), void d.FooBox.raise("foobox.captionsHide", {
                    item: a
                 })) : void b.addClass("fbx-hide-caption")
              }, this.show = function () {
                 var a = d.FooBox,
                         c = a.items.current(),
                         e = a.modal.element.find(".fbx-caption");
                 return !a.options.captions.enabled || !c.captions || "string" != typeof c.caption || 0 == c.caption.length || a.modal.element.hasClass("fbx-captions-hidden") || b.isjQuery(c.element) && c.element.hasClass("no-captions") ? void e.addClass("fbx-hide-caption") : (d.update(), e.removeClass("fbx-fade-caption fbx-slide-caption fbx-hide-caption"), void d.FooBox.raise("foobox.captionsShow", {
                    item: c
                 }))
              }, this.update = function () {
                 var c = d.FooBox.items.current(),
                         e = d.FooBox.modal.element.find(".fbx-caption");
                 e.html(c.caption).find('a[href^="#"]').filter(function () {
                    var c = a(this).attr("href"),
                            d = a(c),
                            e = d.data("fbx_instance") || d.data("fbx_p_instance");
                    return d.length > 0 && e instanceof b.Instance ? (a(this).data("hrefTarget", d.get(0)), !0) : !1
                 }).unbind("click.captions").bind("click.captions", function (c) {
                    c.preventDefault();
                    var e = a(this).data("hrefTarget"),
                            f = a(e).data("fbx_instance") || a(e).data("fbx_p_instance");
                    return f instanceof b.Instance && (d.FooBox.modal.close(), f.items.indexes.set(e.index), f.modal.show()), !1
                 }), a("<a/>", {
                    "class": "fbx-close-caption",
                    html: "&times;"
                 }).bind("click.captions", d.handlers.toggleCaptions).prependTo(e)
              }, this.prettifier = function (a) {
                 return "string" != typeof a ? null : (a = a.replace(/\s*-\d+/g, "").replace(/\s*_\d+/g, "").replace(/-/g, " ").replace(/_/g, " "), a = a.replace(/\w\S*/g, function (a) {
                    return -1 != a.indexOf("#") ? a : a.charAt(0).toUpperCase() + a.substr(1).toLowerCase()
                 }))
              }
           }, b.addons.register(b.Captions, c)
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              wordpress: {
                 enabled: !1
              }
           };
           b.Wordpress = function (c) {
              this.FooBox = c;
              var d = this;
              this.preinit = function (a) {
                 d.handlers.unbind(!0), a.bind("foobox.createCaption", d.handlers.onCreateCaption)
              }, this.destroy = function () {
                 d.handlers.unbind(!0)
              }, this.handlers = {
                 unbind: function (a) {
                    a = a || !1, a && d.FooBox.element.unbind("foobox.createCaption", d.handlers.onCreateCaption)
                 },
                 onCreateCaption: function (c) {
                    var d = c.fb.options,
                            e = c.fb.instance.element,
                            f = c.fb.item.element,
                            g = "",
                            h = c.fb.item.title,
                            i = c.fb.item.description;
                    if (1 == d.wordpress.enabled && b.isjQuery(f)) {
                       var j = f.data("captionTitle") || f.data("title"),
                               k = f.data("captionDesc") || f.data("description");
                       if (e.hasClass("gallery"))
                          d.captions.overrideTitle === !1 && (h = j || f.parents(".gallery-item:first").find(".wp-caption-text:first").html() || f.parents(".gallery-item:first").find(".gallery-caption:first").html() || h || ""), d.captions.overrideDesc === !1 && (i = k || f.find("img").attr("alt") || i || "");
                       else if (e.hasClass("wp-caption") || f.hasClass("wp-caption"))
                          d.captions.overrideTitle === !1 && (h = j || f.find("img").attr("title") || f.parents(".wp-caption:first").find(".wp-caption-text:first").html() || h || ""), d.captions.overrideDesc === !1 && (i = k || f.find("img").attr("alt") || i || "");
                       else if (f.parents(".wp-caption:first").length > 0)
                          d.captions.overrideTitle === !1 && (h = j || f.parents(".wp-caption:first").find("img").attr("title") || f.parents(".wp-caption:first").find(".wp-caption-text:first").html() || h || ""), d.captions.overrideDesc === !1 && (i = k || f.parents(".wp-caption:first").find("img").attr("alt") || i || "");
                       else {
                          if (!e.hasClass("tiled-gallery"))
                             return;
                          d.captions.overrideTitle === !1 && (h = j || f.parents(".tiled-gallery-item:first").find(".tiled-gallery-caption").html() || f.find("img").data("image-title") || f.find("img").attr("title") || h || ""), d.captions.overrideDesc === !1 && (i = k || a.trim(f.find("img").data("image-description")).replace(/(^<p>)|(<\/p>$)/gi, "") || i || "")
                       }
                       h += "", i += "", h = h || "", i = i || "";
                       var l = a("<div/>"),
                               m = l.html(h).text(),
                               n = l.html(i).text();
                       (a.trim(h) == a.trim(i) || m == n) && (i = null), g = "string" == typeof h && h.length > 0 ? b.format('<div class="fbx-caption-title">{0}</div>', h) : g, g = "string" == typeof i && i.length > 0 ? g + b.format('<div class="fbx-caption-desc">{0}</div>', i) : g, c.fb.item.title = h, c.fb.item.description = i, c.fb.item.caption = g
                    }
                 }
              }
           }, b.addons.register(b.Wordpress, c)
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              pan: {
                 enabled: !0,
                 showOverview: !0,
                 position: "fbx-top-right"
              }
           };
           b.Pan = function (c) {
              this.FooBox = c;
              var d, e, f, g, h = this,
                      i = !1,
                      j = !1,
                      k = null,
                      l = null,
                      m = null,
                      n = null,
                      o = null,
                      p = 0;
              this.preinit = function (a) {
                 h.handlers.unbind(!0), a.on({
                    "foobox.initialized foobox.reinitialized": h.handlers.initialized
                 })
              }, this.destroy = function () {
                 h.handlers.unbind(!0)
              }, this.setOverview = function () {
                 var a = parseInt(n.css("max-width")),
                         b = parseInt(n.css("max-height")),
                         c = a / k.width,
                         d = b / k.height;
                 p = c > d ? d : c;
                 var e = k.width * p,
                         f = k.height * p;
                 n.width(e).height(f).css("background-image", "url(" + k.url + ")")
              }, this.setViewport = function () {
                 var a = m.width(),
                         b = m.height(),
                         c = a * p,
                         d = b * p;
                 o.width(c).height(d)
              }, this.disableCaptionImageClick = function () {
                 var a = h.FooBox.modal.element,
                         c = b.objects.get("addons", h.FooBox, function (a) {
                            return a instanceof b.Captions
                         });
                 c && a.find(".fbx-item-current, .fbx-item-next").unbind("click.captions", c.handlers.toggleCaptions)
              }, this.enableCaptionImageClick = function () {
                 var a = h.FooBox.modal.element,
                         c = b.objects.get("addons", h.FooBox, function (a) {
                            return a instanceof b.Captions
                         });
                 c && a.find(".fbx-item-current, .fbx-item-next").bind("click.captions", c.handlers.toggleCaptions)
              }, this.handlers = {
                 unbind: function (a) {
                    a = a || !1, a && h.FooBox.element.off({
                       "foobox.initialized foobox.reinitialized": h.handlers.initialized
                    }), h.FooBox.element.off({
                       "foobox.afterLoad": h.handlers.onAfterLoad,
                       "foobox.showOverflow": h.handlers.onShowOverflow,
                       "foobox.hideOverflow foobox.beforeLoad": h.handlers.onHideOverflow
                    }), h.FooBox.modal instanceof b.Modal && b.isjQuery(h.FooBox.modal.element) && h.FooBox.modal.element.find(".fbx-stage").off({
                       mousedown: h.handlers.onMouseDown,
                       mousemove: h.handlers.onMouseMove,
                       mouseup: h.handlers.onMouseUp
                    }).removeClass("fbx-pannable fbx-panning")
                 },
                 initialized: function (a) {
                    h.handlers.unbind(), a.fb.options.pan.enabled === !0 && h.FooBox.element.on({
                       "foobox.close": h.handlers.onMouseUp,
                       "foobox.afterLoad": h.handlers.onAfterLoad,
                       "foobox.showOverflow": h.handlers.onShowOverflow,
                       "foobox.hideOverflow foobox.beforeLoad": h.handlers.onHideOverflow
                    })
                 },
                 onAfterLoad: function (a) {
                    i === !0 && "image" == a.fb.item.handler.type && (h.setOverview(), h.setViewport())
                 },
                 onShowOverflow: function (b) {
                    "image" == b.fb.item.handler.type && (i === !0 ? (h.setOverview(), h.setViewport()) : (i = !0, h.disableCaptionImageClick(), k = b.fb.item, m = h.FooBox.modal.element.addClass("fbx-pannable-item").find(".fbx-stage").on({
                       mousedown: h.handlers.onMouseDown,
                       mousemove: h.handlers.onMouseMove,
                       "mouseup mouseleave": h.handlers.onMouseUp
                    }).addClass("fbx-pannable"), l = b.fb.container, b.fb.options.pan.showOverview === !0 && (n = a("<div/>", {
                       "class": "fbx-pan-overview"
                    }).addClass(b.fb.options.pan.position).on("click", h.handlers.onOverviewClick).appendTo(m), o = a("<div/>", {
                       "class": "fbx-pan-viewport"
                    }).appendTo(n), l.on("scroll", h.handlers.onScroll), h.setOverview(), h.setViewport())))
                 },
                 onHideOverflow: function (a) {
                    i === !0 && (i = !1, h.enableCaptionImageClick(), a.fb.options.pan.showOverview === !0 && n.remove(), l.off("scroll", h.handlers.onScroll), m.off({
                       mousedown: h.handlers.onMouseDown,
                       mousemove: h.handlers.onMouseMove,
                       "mouseup mouseleave": h.handlers.onMouseUp
                    }).removeClass("fbx-pannable fbx-panning"), h.FooBox.modal.element.removeClass("fbx-pannable-item"))
                 },
                 onMouseDown: function (a) {
                    if (i === !0) {
                       a.preventDefault(), m.addClass("fbx-panning");
                       var b = l.get(0);
                       j = !0, d = a.pageX, e = a.pageY, f = b.scrollLeft, g = b.scrollTop
                    }
                 },
                 onMouseMove: function (a) {
                    if (j === !0 && i === !0) {
                       var b = l.get(0);
                       b.scrollLeft = f - (a.pageX - d), b.scrollTop = g - (a.pageY - e)
                    }
                 },
                 onMouseUp: function () {
                    i === !0 && (j = !1, m.removeClass("fbx-panning"), d = 0, e = 0, f = 0, g = 0)
                 },
                 onScroll: function () {
                    var a = l.get(0),
                            b = a.scrollTop / k.height * 100,
                            c = a.scrollLeft / k.width * 100;
                    o.css({
                       top: b + "%",
                       left: c + "%"
                    })
                 },
                 onOverviewClick: function (b) {
                    var c = a(this).offset(),
                            d = (b.pageX - c.left) / p,
                            e = (b.pageY - c.top) / p,
                            f = d - l.width() / 2,
                            g = e - l.height() / 2;
                    l.animate({
                       scrollTop: g,
                       scrollLeft: f
                    }, 300)
                 }
              }
           }, b.addons.register(b.Pan, c)
        }(jQuery, window.FooBox),
        function (a, b) {
           var c = {
              swipe: {
                 enabled: !0,
                 min: 80
              }
           };
           b.Swipe = function (a) {
              this.FooBox = a, this.isMoving = !1;
              var c, d = this;
              this.preinit = function (a) {
                 d.handlers.unbind(!0), a.bind("foobox.initialized foobox.reinitialized", d.handlers.initialized)
              }, this.destroy = function () {
                 d.handlers.unbind(!0)
              }, this.handlers = {
                 unbind: function (a) {
                    a = a || !1, a && d.FooBox.element.unbind("foobox.initialized foobox.reinitialized", d.handlers.initialized), d.FooBox.modal instanceof b.Modal && b.isjQuery(d.FooBox.modal.element) && d.FooBox.modal.element.unbind({
                       touchstart: d.handlers.onTouchStart,
                       touchmove: d.handlers.onTouchMove
                    })
                 },
                 initialized: function (a) {
                    d.handlers.unbind(), a.fb.options.swipe.enabled === !0 && a.fb.modal.bind("touchstart", d.handlers.onTouchStart)
                 },
                 onTouchStart: function (a) {
                    var b = a.originalEvent.touches || a.touches;
                    1 == b.length && d.FooBox.items.multiple() && (c = b[0].pageX, d.isMoving = !0, d.FooBox.modal.element.bind("touchmove", d.handlers.onTouchMove))
                 },
                 onTouchMove: function (a) {
                    if (d.isMoving) {
                       var b = a.originalEvent.touches || a.touches,
                               e = b[0].pageX,
                               f = c - e;
                       Math.abs(f) >= d.FooBox.options.swipe.min && (d.cancelTouch(), f > 0 ? (d.FooBox.raise("foobox.swipeRight"), d.FooBox.modal.next()) : (d.FooBox.raise("foobox.swipeLeft"), d.FooBox.modal.prev()))
                    }
                 }
              }, this.cancelTouch = function () {
                 d.FooBox.modal.element.unbind("touchmove", d.handlers.onTouchMove), c = null, d.isMoving = !1
              }
           }, b.addons.register(b.Swipe, c)
        }(jQuery, window.FooBox);
// source --> https://www.billyhassell.com/wp-content/plugins/gallery-bank-business-edition/user-views/assets/layouts/isotope-master/imageloaded.js?ver=6.1.10 
(function (global, factory) {
   // universal module definition
   /* jshint strict: false */
   /* globals define, module */
   if (typeof define == 'function' && define.amd) {
      // AMD - RequireJS
      define('ev-emitter/ev-emitter', factory);
   } else if (typeof module == 'object' && module.exports) {
      // CommonJS - Browserify, Webpack
      module.exports = factory();
   } else {
      // Browser globals
      global.EvEmitter = factory();
   }

}(this, function () {

   function EvEmitter() {}

   var proto = EvEmitter.prototype;

   proto.on = function (eventName, listener) {
      if (!eventName || !listener) {
         return;
      }
      // set events hash
      var events = this._events = this._events || {};
      // set listeners array
      var listeners = events[eventName] = events[eventName] || [];
      // only add once
      if (listeners.indexOf(listener) == -1) {
         listeners.push(listener);
      }

      return this;
   };

   proto.once = function (eventName, listener) {
      if (!eventName || !listener) {
         return;
      }
      // add event
      this.on(eventName, listener);
      // set once flag
      // set onceEvents hash
      var onceEvents = this._onceEvents = this._onceEvents || {};
      // set onceListeners array
      var onceListeners = onceEvents[eventName] = onceEvents[eventName] || [];
      // set flag
      onceListeners[listener] = true;

      return this;
   };

   proto.off = function (eventName, listener) {
      var listeners = this._events && this._events[eventName];
      if (!listeners || !listeners.length) {
         return;
      }
      var index = listeners.indexOf(listener);
      if (index != -1) {
         listeners.splice(index, 1);
      }

      return this;
   };

   proto.emitEvent = function (eventName, args) {
      var listeners = this._events && this._events[eventName];
      if (!listeners || !listeners.length) {
         return;
      }
      var i = 0;
      var listener = listeners[i];
      args = args || [];
      // once stuff
      var onceListeners = this._onceEvents && this._onceEvents[eventName];

      while (listener) {
         var isOnce = onceListeners && onceListeners[listener];
         if (isOnce) {
            // remove listener
            // remove before trigger to prevent recursion
            this.off(eventName, listener);
            // unset once flag
            delete onceListeners[listener];
         }
         // trigger listener
         listener.apply(this, args);
         // get next listener
         i += isOnce ? 0 : 1;
         listener = listeners[i];
      }

      return this;
   };

   return EvEmitter;

}));

(function (window, factory) {
   'use strict';
   // universal module definition

   /*global define: false, module: false, require: false */

   if (typeof define == 'function' && define.amd) {
      // AMD
      define([
         'ev-emitter/ev-emitter'
      ], function (EvEmitter) {
         return factory(window, EvEmitter);
      });
   } else if (typeof module == 'object' && module.exports) {
      // CommonJS
      module.exports = factory(
              window,
              require('ev-emitter')
              );
   } else {
      // browser global
      window.imagesLoaded = factory(
              window,
              window.EvEmitter
              );
   }

})(window,
        // --------------------------  factory -------------------------- //

                function factory(window, EvEmitter) {

                   var $ = window.jQuery;
                   var console = window.console;

                   // -------------------------- helpers -------------------------- //

                   // extend objects
                   function extend(a, b) {
                      for (var prop in b) {
                         a[prop] = b[prop];
                      }
                      return a;
                   }

                   // turn element or nodeList into an array
                   function makeArray(obj) {
                      var ary = [];
                      if (Array.isArray(obj)) {
                         // use object if already an array
                         ary = obj;
                      } else if (typeof obj.length == 'number') {
                         // convert nodeList to array
                         for (var i = 0; i < obj.length; i++) {
                            ary.push(obj[i]);
                         }
                      } else {
                         // array of single index
                         ary.push(obj);
                      }
                      return ary;
                   }

                   // -------------------------- imagesLoaded -------------------------- //

                   /**
                    * @param {Array, Element, NodeList, String} elem
                    * @param {Object or Function} options - if function, use as callback
                    * @param {Function} onAlways - callback function
                    */
                   function ImagesLoaded(elem, options, onAlways) {
                      // coerce ImagesLoaded() without new, to be new ImagesLoaded()
                      if (!(this instanceof ImagesLoaded)) {
                         return new ImagesLoaded(elem, options, onAlways);
                      }
                      // use elem as selector string
                      if (typeof elem == 'string') {
                         elem = document.querySelectorAll(elem);
                      }

                      this.elements = makeArray(elem);
                      this.options = extend({}, this.options);

                      if (typeof options == 'function') {
                         onAlways = options;
                      } else {
                         extend(this.options, options);
                      }

                      if (onAlways) {
                         this.on('always', onAlways);
                      }

                      this.getImages();

                      if ($) {
                         // add jQuery Deferred object
                         this.jqDeferred = new $.Deferred();
                      }

                      // HACK check async to allow time to bind listeners
                      setTimeout(function () {
                         this.check();
                      }.bind(this));
                   }

                   ImagesLoaded.prototype = Object.create(EvEmitter.prototype);

                   ImagesLoaded.prototype.options = {};

                   ImagesLoaded.prototype.getImages = function () {
                      this.images = [];

                      // filter & find items if we have an item selector
                      this.elements.forEach(this.addElementImages, this);
                   };

                   /**
                    * @param {Node} element
                    */
                   ImagesLoaded.prototype.addElementImages = function (elem) {
                      // filter siblings
                      if (elem.nodeName == 'IMG') {
                         this.addImage(elem);
                      }
                      // get background image on element
                      if (this.options.background === true) {
                         this.addElementBackgroundImages(elem);
                      }

                      // find children
                      // no non-element nodes, #143
                      var nodeType = elem.nodeType;
                      if (!nodeType || !elementNodeTypes[nodeType]) {
                         return;
                      }
                      var childImgs = elem.querySelectorAll('img');
                      // concat childElems to filterFound array
                      for (var i = 0; i < childImgs.length; i++) {
                         var img = childImgs[i];
                         this.addImage(img);
                      }

                      // get child background images
                      if (typeof this.options.background == 'string') {
                         var children = elem.querySelectorAll(this.options.background);
                         for (i = 0; i < children.length; i++) {
                            var child = children[i];
                            this.addElementBackgroundImages(child);
                         }
                      }
                   };

                   var elementNodeTypes = {
                      1: true,
                      9: true,
                      11: true
                   };

                   ImagesLoaded.prototype.addElementBackgroundImages = function (elem) {
                      var style = getComputedStyle(elem);
                      if (!style) {
                         // Firefox returns null if in a hidden iframe https://bugzil.la/548397
                         return;
                      }
                      // get url inside url("...")
                      var reURL = /url\((['"])?(.*?)\1\)/gi;
                      var matches = reURL.exec(style.backgroundImage);
                      while (matches !== null) {
                         var url = matches && matches[2];
                         if (url) {
                            this.addBackground(url, elem);
                         }
                         matches = reURL.exec(style.backgroundImage);
                      }
                   };

                   /**
                    * @param {Image} img
                    */
                   ImagesLoaded.prototype.addImage = function (img) {
                      var loadingImage = new LoadingImage(img);
                      this.images.push(loadingImage);
                   };

                   ImagesLoaded.prototype.addBackground = function (url, elem) {
                      var background = new Background(url, elem);
                      this.images.push(background);
                   };

                   ImagesLoaded.prototype.check = function () {
                      var _this = this;
                      this.progressedCount = 0;
                      this.hasAnyBroken = false;
                      // complete if no images
                      if (!this.images.length) {
                         this.complete();
                         return;
                      }

                      function onProgress(image, elem, message) {
                         // HACK - Chrome triggers event before object properties have changed. #83
                         setTimeout(function () {
                            _this.progress(image, elem, message);
                         });
                      }

                      this.images.forEach(function (loadingImage) {
                         loadingImage.once('progress', onProgress);
                         loadingImage.check();
                      });
                   };

                   ImagesLoaded.prototype.progress = function (image, elem, message) {
                      this.progressedCount++;
                      this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
                      // progress event
                      this.emitEvent('progress', [this, image, elem]);
                      if (this.jqDeferred && this.jqDeferred.notify) {
                         this.jqDeferred.notify(this, image);
                      }
                      // check if completed
                      if (this.progressedCount == this.images.length) {
                         this.complete();
                      }

                      if (this.options.debug && console) {
                         console.log('progress: ' + message, image, elem);
                      }
                   };

                   ImagesLoaded.prototype.complete = function () {
                      var eventName = this.hasAnyBroken ? 'fail' : 'done';
                      this.isComplete = true;
                      this.emitEvent(eventName, [this]);
                      this.emitEvent('always', [this]);
                      if (this.jqDeferred) {
                         var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
                         this.jqDeferred[jqMethod](this);
                      }
                   };

                   // --------------------------  -------------------------- //

                   function LoadingImage(img) {
                      this.img = img;
                   }

                   LoadingImage.prototype = Object.create(EvEmitter.prototype);

                   LoadingImage.prototype.check = function () {
                      // If complete is true and browser supports natural sizes,
                      // try to check for image status manually.
                      var isComplete = this.getIsImageComplete();
                      if (isComplete) {
                         // report based on naturalWidth
                         this.confirm(this.img.naturalWidth !== 0, 'naturalWidth');
                         return;
                      }

                      // If none of the checks above matched, simulate loading on detached element.
                      this.proxyImage = new Image();
                      this.proxyImage.addEventListener('load', this);
                      this.proxyImage.addEventListener('error', this);
                      // bind to image as well for Firefox. #191
                      this.img.addEventListener('load', this);
                      this.img.addEventListener('error', this);
                      this.proxyImage.src = this.img.src;
                   };

                   LoadingImage.prototype.getIsImageComplete = function () {
                      return this.img.complete && this.img.naturalWidth !== undefined;
                   };

                   LoadingImage.prototype.confirm = function (isLoaded, message) {
                      this.isLoaded = isLoaded;
                      this.emitEvent('progress', [this, this.img, message]);
                   };

                   // ----- events ----- //

                   // trigger specified handler for event type
                   LoadingImage.prototype.handleEvent = function (event) {
                      var method = 'on' + event.type;
                      if (this[method]) {
                         this[method](event);
                      }
                   };

                   LoadingImage.prototype.onload = function () {
                      this.confirm(true, 'onload');
                      this.unbindEvents();
                   };

                   LoadingImage.prototype.onerror = function () {
                      this.confirm(false, 'onerror');
                      this.unbindEvents();
                   };

                   LoadingImage.prototype.unbindEvents = function () {
                      this.proxyImage.removeEventListener('load', this);
                      this.proxyImage.removeEventListener('error', this);
                      this.img.removeEventListener('load', this);
                      this.img.removeEventListener('error', this);
                   };

                   // -------------------------- Background -------------------------- //

                   function Background(url, element) {
                      this.url = url;
                      this.element = element;
                      this.img = new Image();
                   }

                   // inherit LoadingImage prototype
                   Background.prototype = Object.create(LoadingImage.prototype);

                   Background.prototype.check = function () {
                      this.img.addEventListener('load', this);
                      this.img.addEventListener('error', this);
                      this.img.src = this.url;
                      // check if image is already complete
                      var isComplete = this.getIsImageComplete();
                      if (isComplete) {
                         this.confirm(this.img.naturalWidth !== 0, 'naturalWidth');
                         this.unbindEvents();
                      }
                   };

                   Background.prototype.unbindEvents = function () {
                      this.img.removeEventListener('load', this);
                      this.img.removeEventListener('error', this);
                   };

                   Background.prototype.confirm = function (isLoaded, message) {
                      this.isLoaded = isLoaded;
                      this.emitEvent('progress', [this, this.element, message]);
                   };

                   // -------------------------- jQuery -------------------------- //

                   ImagesLoaded.makeJQueryPlugin = function (jQuery) {
                      jQuery = jQuery || window.jQuery;
                      if (!jQuery) {
                         return;
                      }
                      // set local variable
                      $ = jQuery;
                      // $().imagesLoaded()
                      $.fn.imagesLoaded = function (options, callback) {
                         var instance = new ImagesLoaded(this, options, callback);
                         return instance.jqDeferred.promise($(this));
                      };
                   };
                   // try making plugin
                   ImagesLoaded.makeJQueryPlugin();

                   // --------------------------  -------------------------- //

                   return ImagesLoaded;

                });
// source --> https://www.billyhassell.com/wp-content/plugins/gallery-bank-business-edition/user-views/assets/layouts/isotope-master/isotope.js?ver=6.1.10 
/*!
 * Isotope PACKAGED v3.0.1
 *
 * Licensed GPLv3 for open source use
 * or Isotope Commercial License for commercial use
 *
 * http://isotope.metafizzy.co
 * Copyright 2016 Metafizzy
 */

/* jshint browser: true, strict: true, undef: true, unused: true */

(function (window, factory) {
   'use strict';
   /* globals define: false, module: false, require: false */

   if (typeof define == 'function' && define.amd) {
      // AMD
      define('jquery-bridget/jquery-bridget', ['jquery'], function (jQuery) {
         factory(window, jQuery);
      });
   } else if (typeof module == 'object' && module.exports) {
      // CommonJS
      module.exports = factory(
              window,
              require('jquery')
              );
   } else {
      // browser global
      window.jQueryBridget = factory(
              window,
              window.jQuery
              );
   }

}(window, function factory(window, jQuery) {
   'use strict';

   // ----- utils ----- //

   var arraySlice = Array.prototype.slice;

   // helper function for logging errors
   // $.error breaks jQuery chaining
   var console = window.console;
   var logError = typeof console == 'undefined' ? function () {} :
           function (message) {
              console.error(message);
           };

   // ----- jQueryBridget ----- //

   function jQueryBridget(namespace, PluginClass, $) {
      $ = $ || jQuery || window.jQuery;
      if (!$) {
         return;
      }

      // add option method -> $().plugin('option', {...})
      if (!PluginClass.prototype.option) {
         // option setter
         PluginClass.prototype.option = function (opts) {
            // bail out if not an object
            if (!$.isPlainObject(opts)) {
               return;
            }
            this.options = $.extend(true, this.options, opts);
         };
      }

      // make jQuery plugin
      $.fn[namespace] = function (arg0 /*, arg1 */) {
         if (typeof arg0 == 'string') {
            // method call $().plugin( 'methodName', { options } )
            // shift arguments by 1
            var args = arraySlice.call(arguments, 1);
            return methodCall(this, arg0, args);
         }
         // just $().plugin({ options })
         plainCall(this, arg0);
         return this;
      };

      // $().plugin('methodName')
      function methodCall($elems, methodName, args) {
         var returnValue;
         var pluginMethodStr = '$().' + namespace + '("' + methodName + '")';

         $elems.each(function (i, elem) {
            // get instance
            var instance = $.data(elem, namespace);
            if (!instance) {
               logError(namespace + ' not initialized. Cannot call methods, i.e. ' +
                       pluginMethodStr);
               return;
            }

            var method = instance[methodName];
            if (!method || methodName.charAt(0) == '_') {
               logError(pluginMethodStr + ' is not a valid method');
               return;
            }

            // apply method, get return value
            var value = method.apply(instance, args);
            // set return value if value is returned, use only first value
            returnValue = returnValue === undefined ? value : returnValue;
         });

         return returnValue !== undefined ? returnValue : $elems;
      }

      function plainCall($elems, options) {
         $elems.each(function (i, elem) {
            var instance = $.data(elem, namespace);
            if (instance) {
               // set options & init
               instance.option(options);
               instance._init();
            } else {
               // initialize new instance
               instance = new PluginClass(elem, options);
               $.data(elem, namespace, instance);
            }
         });
      }

      updateJQuery($);

   }

   // ----- updateJQuery ----- //

   // set $.bridget for v1 backwards compatibility
   function updateJQuery($) {
      if (!$ || ($ && $.bridget)) {
         return;
      }
      $.bridget = jQueryBridget;
   }

   updateJQuery(jQuery || window.jQuery);

   // -----  ----- //

   return jQueryBridget;

}));

/* jshint unused: true, undef: true, strict: true */

(function (global, factory) {
   // universal module definition
   /* jshint strict: false */
   /* globals define, module, window */
   if (typeof define == 'function' && define.amd) {
      // AMD - RequireJS
      define('ev-emitter/ev-emitter', factory);
   } else if (typeof module == 'object' && module.exports) {
      // CommonJS - Browserify, Webpack
      module.exports = factory();
   } else {
      // Browser globals
      global.EvEmitter = factory();
   }

}(typeof window != 'undefined' ? window : this, function () {

   function EvEmitter() {}

   var proto = EvEmitter.prototype;

   proto.on = function (eventName, listener) {
      if (!eventName || !listener) {
         return;
      }
      // set events hash
      var events = this._events = this._events || {};
      // set listeners array
      var listeners = events[eventName] = events[eventName] || [];
      // only add once
      if (listeners.indexOf(listener) == -1) {
         listeners.push(listener);
      }

      return this;
   };

   proto.once = function (eventName, listener) {
      if (!eventName || !listener) {
         return;
      }
      // add event
      this.on(eventName, listener);
      // set once flag
      // set onceEvents hash
      var onceEvents = this._onceEvents = this._onceEvents || {};
      // set onceListeners object
      var onceListeners = onceEvents[eventName] = onceEvents[eventName] || {};
      // set flag
      onceListeners[listener] = true;

      return this;
   };

   proto.off = function (eventName, listener) {
      var listeners = this._events && this._events[eventName];
      if (!listeners || !listeners.length) {
         return;
      }
      var index = listeners.indexOf(listener);
      if (index != -1) {
         listeners.splice(index, 1);
      }

      return this;
   };

   proto.emitEvent = function (eventName, args) {
      var listeners = this._events && this._events[eventName];
      if (!listeners || !listeners.length) {
         return;
      }
      var i = 0;
      var listener = listeners[i];
      args = args || [];
      // once stuff
      var onceListeners = this._onceEvents && this._onceEvents[eventName];

      while (listener) {
         var isOnce = onceListeners && onceListeners[listener];
         if (isOnce) {
            // remove listener
            // remove before trigger to prevent recursion
            this.off(eventName, listener);
            // unset once flag
            delete onceListeners[listener];
         }
         // trigger listener
         listener.apply(this, args);
         // get next listener
         i += isOnce ? 0 : 1;
         listener = listeners[i];
      }

      return this;
   };

   return EvEmitter;

}));

/*jshint browser: true, strict: true, undef: true, unused: true */
/*global define: false, module: false, console: false */

(function (window, factory) {
   'use strict';

   if (typeof define == 'function' && define.amd) {
      // AMD
      define('get-size/get-size', [], function () {
         return factory();
      });
   } else if (typeof module == 'object' && module.exports) {
      // CommonJS
      module.exports = factory();
   } else {
      // browser global
      window.getSize = factory();
   }

})(window, function factory() {
   'use strict';

   // -------------------------- helpers -------------------------- //

   // get a number from a string, not a percentage
   function getStyleSize(value) {
      var num = parseFloat(value);
      // not a percent like '100%', and a number
      var isValid = value.indexOf('%') == -1 && !isNaN(num);
      return isValid && num;
   }

   function noop() {}

   var logError = typeof console == 'undefined' ? noop :
           function (message) {
              console.error(message);
           };

   // -------------------------- measurements -------------------------- //

   var measurements = [
      'paddingLeft',
      'paddingRight',
      'paddingTop',
      'paddingBottom',
      'marginLeft',
      'marginRight',
      'marginTop',
      'marginBottom',
      'borderLeftWidth',
      'borderRightWidth',
      'borderTopWidth',
      'borderBottomWidth'
   ];

   var measurementsLength = measurements.length;

   function getZeroSize() {
      var size = {
         width: 0,
         height: 0,
         innerWidth: 0,
         innerHeight: 0,
         outerWidth: 0,
         outerHeight: 0
      };
      for (var i = 0; i < measurementsLength; i++) {
         var measurement = measurements[i];
         size[measurement] = 0;
      }
      return size;
   }

   // -------------------------- getStyle -------------------------- //

   /**
    * getStyle, get style of element, check for Firefox bug
    * https://bugzilla.mozilla.org/show_bug.cgi?id=548397
    */
   function getStyle(elem) {
      var style = getComputedStyle(elem);
      if (!style) {
         logError('Style returned ' + style +
                 '. Are you running this code in a hidden iframe on Firefox? ' +
                 'See http://bit.ly/getsizebug1');
      }
      return style;
   }

   // -------------------------- setup -------------------------- //

   var isSetup = false;

   var isBoxSizeOuter;

   /**
    * setup
    * check isBoxSizerOuter
    * do on first getSize() rather than on page load for Firefox bug
    */
   function setup() {
      // setup once
      if (isSetup) {
         return;
      }
      isSetup = true;

      // -------------------------- box sizing -------------------------- //

      /**
       * WebKit measures the outer-width on style.width on border-box elems
       * IE & Firefox<29 measures the inner-width
       */
      var div = document.createElement('div');
      div.style.width = '200px';
      div.style.padding = '1px 2px 3px 4px';
      div.style.borderStyle = 'solid';
      div.style.borderWidth = '1px 2px 3px 4px';
      div.style.boxSizing = 'border-box';

      var body = document.body || document.documentElement;
      body.appendChild(div);
      var style = getStyle(div);

      getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize(style.width) == 200;
      body.removeChild(div);

   }

   // -------------------------- getSize -------------------------- //

   function getSize(elem) {
      setup();

      // use querySeletor if elem is string
      if (typeof elem == 'string') {
         elem = document.querySelector(elem);
      }

      // do not proceed on non-objects
      if (!elem || typeof elem != 'object' || !elem.nodeType) {
         return;
      }

      var style = getStyle(elem);

      // if hidden, everything is 0
      if (style.display == 'none') {
         return getZeroSize();
      }

      var size = {};
      size.width = elem.offsetWidth;
      size.height = elem.offsetHeight;

      var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';

      // get all measurements
      for (var i = 0; i < measurementsLength; i++) {
         var measurement = measurements[i];
         var value = style[measurement];
         var num = parseFloat(value);
         // any 'auto', 'medium' value will be 0
         size[measurement] = !isNaN(num) ? num : 0;
      }

      var paddingWidth = size.paddingLeft + size.paddingRight;
      var paddingHeight = size.paddingTop + size.paddingBottom;
      var marginWidth = size.marginLeft + size.marginRight;
      var marginHeight = size.marginTop + size.marginBottom;
      var borderWidth = size.borderLeftWidth + size.borderRightWidth;
      var borderHeight = size.borderTopWidth + size.borderBottomWidth;

      var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;

      // overwrite width and height if we can get it from style
      var styleWidth = getStyleSize(style.width);
      if (styleWidth !== false) {
         size.width = styleWidth +
                 // add padding and border unless it's already including it
                         (isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth);
              }

              var styleHeight = getStyleSize(style.height);
              if (styleHeight !== false) {
                 size.height = styleHeight +
                         // add padding and border unless it's already including it
                                 (isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight);
                      }

                      size.innerWidth = size.width - (paddingWidth + borderWidth);
                      size.innerHeight = size.height - (paddingHeight + borderHeight);

                      size.outerWidth = size.width + marginWidth;
                      size.outerHeight = size.height + marginHeight;

                      return size;
                   }

                   return getSize;

                });

        /*jshint browser: true, strict: true, undef: true, unused: true */

        (function (window, factory) {
           /*global define: false, module: false */
           'use strict';
           // universal module definition
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('desandro-matches-selector/matches-selector', factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory();
           } else {
              // browser global
              window.matchesSelector = factory();
           }

        }(window, function factory() {
           'use strict';

           var matchesMethod = (function () {
              var ElemProto = Element.prototype;
              // check for the standard method name first
              if (ElemProto.matches) {
                 return 'matches';
              }
              // check un-prefixed
              if (ElemProto.matchesSelector) {
                 return 'matchesSelector';
              }
              // check vendor prefixes
              var prefixes = ['webkit', 'moz', 'ms', 'o'];

              for (var i = 0; i < prefixes.length; i++) {
                 var prefix = prefixes[i];
                 var method = prefix + 'MatchesSelector';
                 if (ElemProto[method]) {
                    return method;
                 }
              }
           })();

           return function matchesSelector(elem, selector) {
              return elem[matchesMethod](selector);
           };

        }));

        /*jshint browser: true, undef: true, unused: true, strict: true */

        (function (window, factory) {
           // universal module definition
           /*jshint strict: false */
           /*globals define, module, require */

           if (typeof define == 'function' && define.amd) {
              // AMD
              define('fizzy-ui-utils/utils', [
                 'desandro-matches-selector/matches-selector'
              ], function (matchesSelector) {
                 return factory(window, matchesSelector);
              });
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      window,
                      require('desandro-matches-selector')
                      );
           } else {
              // browser global
              window.fizzyUIUtils = factory(
                      window,
                      window.matchesSelector
                      );
           }

        }(window, function factory(window, matchesSelector) {

           var utils = {};

           // ----- extend ----- //

           // extends objects
           utils.extend = function (a, b) {
              for (var prop in b) {
                 a[prop] = b[prop];
              }
              return a;
           };

           // ----- modulo ----- //

           utils.modulo = function (num, div) {
              return ((num % div) + div) % div;
           };

           // ----- makeArray ----- //

           // turn element or nodeList into an array
           utils.makeArray = function (obj) {
              var ary = [];
              if (Array.isArray(obj)) {
                 // use object if already an array
                 ary = obj;
              } else if (obj && typeof obj.length == 'number') {
                 // convert nodeList to array
                 for (var i = 0; i < obj.length; i++) {
                    ary.push(obj[i]);
                 }
              } else {
                 // array of single index
                 ary.push(obj);
              }
              return ary;
           };

           // ----- removeFrom ----- //

           utils.removeFrom = function (ary, obj) {
              var index = ary.indexOf(obj);
              if (index != -1) {
                 ary.splice(index, 1);
              }
           };

           // ----- getParent ----- //

           utils.getParent = function (elem, selector) {
              while (elem != document.body) {
                 elem = elem.parentNode;
                 if (matchesSelector(elem, selector)) {
                    return elem;
                 }
              }
           };

           // ----- getQueryElement ----- //

           // use element as selector string
           utils.getQueryElement = function (elem) {
              if (typeof elem == 'string') {
                 return document.querySelector(elem);
              }
              return elem;
           };

           // ----- handleEvent ----- //

           // enable .ontype to trigger from .addEventListener( elem, 'type' )
           utils.handleEvent = function (event) {
              var method = 'on' + event.type;
              if (this[method]) {
                 this[method](event);
              }
           };

           // ----- filterFindElements ----- //

           utils.filterFindElements = function (elems, selector) {
              // make array of elems
              elems = utils.makeArray(elems);
              var ffElems = [];

              elems.forEach(function (elem) {
                 // check that elem is an actual element
                 if (!(elem instanceof HTMLElement)) {
                    return;
                 }
                 // add elem if no selector
                 if (!selector) {
                    ffElems.push(elem);
                    return;
                 }
                 // filter & find items if we have a selector
                 // filter
                 if (matchesSelector(elem, selector)) {
                    ffElems.push(elem);
                 }
                 // find children
                 var childElems = elem.querySelectorAll(selector);
                 // concat childElems to filterFound array
                 for (var i = 0; i < childElems.length; i++) {
                    ffElems.push(childElems[i]);
                 }
              });

              return ffElems;
           };

           // ----- debounceMethod ----- //

           utils.debounceMethod = function (_class, methodName, threshold) {
              // original method
              var method = _class.prototype[methodName];
              var timeoutName = methodName + 'Timeout';

              _class.prototype[methodName] = function () {
                 var timeout = this[timeoutName];
                 if (timeout) {
                    clearTimeout(timeout);
                 }
                 var args = arguments;

                 var _this = this;
                 this[timeoutName] = setTimeout(function () {
                    method.apply(_this, args);
                    delete _this[timeoutName];
                 }, threshold || 100);
              };
           };

           // ----- docReady ----- //

           utils.docReady = function (callback) {
              var readyState = document.readyState;
              if (readyState == 'complete' || readyState == 'interactive') {
                 callback();
              } else {
                 document.addEventListener('DOMContentLoaded', callback);
              }
           };

           // ----- htmlInit ----- //

           // http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/
           utils.toDashed = function (str) {
              return str.replace(/(.)([A-Z])/g, function (match, $1, $2) {
                 return $1 + '-' + $2;
              }).toLowerCase();
           };

           var console = window.console;
           /**
            * allow user to initialize classes via [data-namespace] or .js-namespace class
            * htmlInit( Widget, 'widgetName' )
            * options are parsed from data-namespace-options
            */
           utils.htmlInit = function (WidgetClass, namespace) {
              utils.docReady(function () {
                 var dashedNamespace = utils.toDashed(namespace);
                 var dataAttr = 'data-' + dashedNamespace;
                 var dataAttrElems = document.querySelectorAll('[' + dataAttr + ']');
                 var jsDashElems = document.querySelectorAll('.js-' + dashedNamespace);
                 var elems = utils.makeArray(dataAttrElems)
                         .concat(utils.makeArray(jsDashElems));
                 var dataOptionsAttr = dataAttr + '-options';
                 var jQuery = window.jQuery;

                 elems.forEach(function (elem) {
                    var attr = elem.getAttribute(dataAttr) ||
                            elem.getAttribute(dataOptionsAttr);
                    var options;
                    try {
                       options = attr && JSON.parse(attr);
                    } catch (error) {
                       // log error, do not initialize
                       if (console) {
                          console.error('Error parsing ' + dataAttr + ' on ' + elem.className +
                                  ': ' + error);
                       }
                       return;
                    }
                    // initialize
                    var instance = new WidgetClass(elem, options);
                    // make available via $().data('layoutname')
                    if (jQuery) {
                       jQuery.data(elem, namespace, instance);
                    }
                 });

              });
           };

           // -----  ----- //

           return utils;

        }));

        /**
         * Outlayer Item
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /* globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD - RequireJS
              define('outlayer/item', [
                 'ev-emitter/ev-emitter',
                 'get-size/get-size'
              ],
                      factory
                      );
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS - Browserify, Webpack
              module.exports = factory(
                      require('ev-emitter'),
                      require('get-size')
                      );
           } else {
              // browser global
              window.Outlayer = {};
              window.Outlayer.Item = factory(
                      window.EvEmitter,
                      window.getSize
                      );
           }

        }(window, function factory(EvEmitter, getSize) {
           'use strict';

           // ----- helpers ----- //

           function isEmptyObj(obj) {
              for (var prop in obj) {
                 return false;
              }
              prop = null;
              return true;
           }

           // -------------------------- CSS3 support -------------------------- //

           var docElemStyle = document.documentElement.style;

           var transitionProperty = typeof docElemStyle.transition == 'string' ?
                   'transition' : 'WebkitTransition';
           var transformProperty = typeof docElemStyle.transform == 'string' ?
                   'transform' : 'WebkitTransform';

           var transitionEndEvent = {
              WebkitTransition: 'webkitTransitionEnd',
              transition: 'transitionend'
           }[transitionProperty];

           // cache all vendor properties that could have vendor prefix
           var vendorProperties = {
              transform: transformProperty,
              transition: transitionProperty,
              transitionDuration: transitionProperty + 'Duration',
              transitionProperty: transitionProperty + 'Property',
              transitionDelay: transitionProperty + 'Delay'
           };

           // -------------------------- Item -------------------------- //

           function Item(element, layout) {
              if (!element) {
                 return;
              }

              this.element = element;
              // parent layout class, i.e. Masonry, Isotope, or Packery
              this.layout = layout;
              this.position = {
                 x: 0,
                 y: 0
              };

              this._create();
           }

           // inherit EvEmitter
           var proto = Item.prototype = Object.create(EvEmitter.prototype);
           proto.constructor = Item;

           proto._create = function () {
              // transition objects
              this._transn = {
                 ingProperties: {},
                 clean: {},
                 onEnd: {}
              };

              this.css({
                 position: 'absolute'
              });
           };

           // trigger specified handler for event type
           proto.handleEvent = function (event) {
              var method = 'on' + event.type;
              if (this[method]) {
                 this[method](event);
              }
           };

           proto.getSize = function () {
              this.size = getSize(this.element);
           };

           /**
            * apply CSS styles to element
            * @param {Object} style
            */
           proto.css = function (style) {
              var elemStyle = this.element.style;

              for (var prop in style) {
                 // use vendor property if available
                 var supportedProp = vendorProperties[prop] || prop;
                 elemStyle[supportedProp] = style[prop];
              }
           };

           // measure position, and sets it
           proto.getPosition = function () {
              var style = getComputedStyle(this.element);
              var isOriginLeft = this.layout._getOption('originLeft');
              var isOriginTop = this.layout._getOption('originTop');
              var xValue = style[isOriginLeft ? 'left' : 'right'];
              var yValue = style[isOriginTop ? 'top' : 'bottom'];
              // convert percent to pixels
              var layoutSize = this.layout.size;
              var x = xValue.indexOf('%') != -1 ?
                      (parseFloat(xValue) / 100) * layoutSize.width : parseInt(xValue, 10);
              var y = yValue.indexOf('%') != -1 ?
                      (parseFloat(yValue) / 100) * layoutSize.height : parseInt(yValue, 10);

              // clean up 'auto' or other non-integer values
              x = isNaN(x) ? 0 : x;
              y = isNaN(y) ? 0 : y;
              // remove padding from measurement
              x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;
              y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;

              this.position.x = x;
              this.position.y = y;
           };

           // set settled position, apply padding
           proto.layoutPosition = function () {
              var layoutSize = this.layout.size;
              var style = {};
              var isOriginLeft = this.layout._getOption('originLeft');
              var isOriginTop = this.layout._getOption('originTop');

              // x
              var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';
              var xProperty = isOriginLeft ? 'left' : 'right';
              var xResetProperty = isOriginLeft ? 'right' : 'left';

              var x = this.position.x + layoutSize[xPadding];
              // set in percentage or pixels
              style[xProperty] = this.getXValue(x);
              // reset other property
              style[xResetProperty] = '';

              // y
              var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';
              var yProperty = isOriginTop ? 'top' : 'bottom';
              var yResetProperty = isOriginTop ? 'bottom' : 'top';

              var y = this.position.y + layoutSize[yPadding];
              // set in percentage or pixels
              style[yProperty] = this.getYValue(y);
              // reset other property
              style[yResetProperty] = '';

              this.css(style);
              this.emitEvent('layout', [this]);
           };

           proto.getXValue = function (x) {
              var isHorizontal = this.layout._getOption('horizontal');
              return this.layout.options.percentPosition && !isHorizontal ?
                      ((x / this.layout.size.width) * 100) + '%' : x + 'px';
           };

           proto.getYValue = function (y) {
              var isHorizontal = this.layout._getOption('horizontal');
              return this.layout.options.percentPosition && isHorizontal ?
                      ((y / this.layout.size.height) * 100) + '%' : y + 'px';
           };

           proto._transitionTo = function (x, y) {
              this.getPosition();
              // get current x & y from top/left
              var curX = this.position.x;
              var curY = this.position.y;

              var compareX = parseInt(x, 10);
              var compareY = parseInt(y, 10);
              var didNotMove = compareX === this.position.x && compareY === this.position.y;

              // save end position
              this.setPosition(x, y);

              // if did not move and not transitioning, just go to layout
              if (didNotMove && !this.isTransitioning) {
                 this.layoutPosition();
                 return;
              }

              var transX = x - curX;
              var transY = y - curY;
              var transitionStyle = {};
              transitionStyle.transform = this.getTranslate(transX, transY);

              this.transition({
                 to: transitionStyle,
                 onTransitionEnd: {
                    transform: this.layoutPosition
                 },
                 isCleaning: true
              });
           };

           proto.getTranslate = function (x, y) {
              // flip cooridinates if origin on right or bottom
              var isOriginLeft = this.layout._getOption('originLeft');
              var isOriginTop = this.layout._getOption('originTop');
              x = isOriginLeft ? x : -x;
              y = isOriginTop ? y : -y;
              return 'translate3d(' + x + 'px, ' + y + 'px, 0)';
           };

           // non transition + transform support
           proto.goTo = function (x, y) {
              this.setPosition(x, y);
              this.layoutPosition();
           };

           proto.moveTo = proto._transitionTo;

           proto.setPosition = function (x, y) {
              this.position.x = parseInt(x, 10);
              this.position.y = parseInt(y, 10);
           };

           // ----- transition ----- //

           /**
            * @param {Object} style - CSS
            * @param {Function} onTransitionEnd
            */

           // non transition, just trigger callback
           proto._nonTransition = function (args) {
              this.css(args.to);
              if (args.isCleaning) {
                 this._removeStyles(args.to);
              }
              for (var prop in args.onTransitionEnd) {
                 args.onTransitionEnd[prop].call(this);
              }
           };

           /**
            * proper transition
            * @param {Object} args - arguments
            *   @param {Object} to - style to transition to
            *   @param {Object} from - style to start transition from
            *   @param {Boolean} isCleaning - removes transition styles after transition
            *   @param {Function} onTransitionEnd - callback
            */
           proto.transition = function (args) {
              // redirect to nonTransition if no transition duration
              if (!parseFloat(this.layout.options.transitionDuration)) {
                 this._nonTransition(args);
                 return;
              }

              var _transition = this._transn;
              // keep track of onTransitionEnd callback by css property
              for (var prop in args.onTransitionEnd) {
                 _transition.onEnd[prop] = args.onTransitionEnd[prop];
              }
              // keep track of properties that are transitioning
              for (prop in args.to) {
                 _transition.ingProperties[prop] = true;
                 // keep track of properties to clean up when transition is done
                 if (args.isCleaning) {
                    _transition.clean[prop] = true;
                 }
              }

              // set from styles
              if (args.from) {
                 this.css(args.from);
                 // force redraw. http://blog.alexmaccaw.com/css-transitions
                 var h = this.element.offsetHeight;
                 // hack for JSHint to hush about unused var
                 h = null;
              }
              // enable transition
              this.enableTransition(args.to);
              // set styles that are transitioning
              this.css(args.to);

              this.isTransitioning = true;

           };

           // dash before all cap letters, including first for
           // WebkitTransform => -webkit-transform
           function toDashedAll(str) {
              return str.replace(/([A-Z])/g, function ($1) {
                 return '-' + $1.toLowerCase();
              });
           }

           var transitionProps = 'opacity,' + toDashedAll(transformProperty);

           proto.enableTransition = function ( /* style */ ) {
              // HACK changing transitionProperty during a transition
              // will cause transition to jump
              if (this.isTransitioning) {
                 return;
              }

              // make `transition: foo, bar, baz` from style object
              // HACK un-comment this when enableTransition can work
              // while a transition is happening
              // var transitionValues = [];
              // for ( var prop in style ) {
              //   // dash-ify camelCased properties like WebkitTransition
              //   prop = vendorProperties[ prop ] || prop;
              //   transitionValues.push( toDashedAll( prop ) );
              // }
              // munge number to millisecond, to match stagger
              var duration = this.layout.options.transitionDuration;
              duration = typeof duration == 'number' ? duration + 'ms' : duration;
              // enable transition styles
              this.css({
                 transitionProperty: transitionProps,
                 transitionDuration: duration,
                 transitionDelay: this.staggerDelay || 0
              });
              // listen for transition end event
              this.element.addEventListener(transitionEndEvent, this, false);
           };

           // ----- events ----- //

           proto.onwebkitTransitionEnd = function (event) {
              this.ontransitionend(event);
           };

           proto.onotransitionend = function (event) {
              this.ontransitionend(event);
           };

           // properties that I munge to make my life easier
           var dashedVendorProperties = {
              '-webkit-transform': 'transform'
           };

           proto.ontransitionend = function (event) {
              // disregard bubbled events from children
              if (event.target !== this.element) {
                 return;
              }
              var _transition = this._transn;
              // get property name of transitioned property, convert to prefix-free
              var propertyName = dashedVendorProperties[event.propertyName] || event.propertyName;

              // remove property that has completed transitioning
              delete _transition.ingProperties[propertyName];
              // check if any properties are still transitioning
              if (isEmptyObj(_transition.ingProperties)) {
                 // all properties have completed transitioning
                 this.disableTransition();
              }
              // clean style
              if (propertyName in _transition.clean) {
                 // clean up style
                 this.element.style[event.propertyName] = '';
                 delete _transition.clean[propertyName];
              }
              // trigger onTransitionEnd callback
              if (propertyName in _transition.onEnd) {
                 var onTransitionEnd = _transition.onEnd[propertyName];
                 onTransitionEnd.call(this);
                 delete _transition.onEnd[propertyName];
              }

              this.emitEvent('transitionEnd', [this]);
           };

           proto.disableTransition = function () {
              this.removeTransitionStyles();
              this.element.removeEventListener(transitionEndEvent, this, false);
              this.isTransitioning = false;
           };

           /**
            * removes style property from element
            * @param {Object} style
            **/
           proto._removeStyles = function (style) {
              // clean up transition styles
              var cleanStyle = {};
              for (var prop in style) {
                 cleanStyle[prop] = '';
              }
              this.css(cleanStyle);
           };

           var cleanTransitionStyle = {
              transitionProperty: '',
              transitionDuration: '',
              transitionDelay: ''
           };

           proto.removeTransitionStyles = function () {
              // remove transition
              this.css(cleanTransitionStyle);
           };

           // ----- stagger ----- //

           proto.stagger = function (delay) {
              delay = isNaN(delay) ? 0 : delay;
              this.staggerDelay = delay + 'ms';
           };

           // ----- show/hide/remove ----- //

           // remove element from DOM
           proto.removeElem = function () {
              this.element.parentNode.removeChild(this.element);
              // remove display: none
              this.css({
                 display: ''
              });
              this.emitEvent('remove', [this]);
           };

           proto.remove = function () {
              // just remove element if no transition support or no transition
              if (!transitionProperty || !parseFloat(this.layout.options.transitionDuration)) {
                 this.removeElem();
                 return;
              }

              // start transition
              this.once('transitionEnd', function () {
                 this.removeElem();
              });
              this.hide();
           };

           proto.reveal = function () {
              delete this.isHidden;
              // remove display: none
              this.css({
                 display: ''
              });

              var options = this.layout.options;

              var onTransitionEnd = {};
              var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');
              onTransitionEnd[transitionEndProperty] = this.onRevealTransitionEnd;

              this.transition({
                 from: options.hiddenStyle,
                 to: options.visibleStyle,
                 isCleaning: true,
                 onTransitionEnd: onTransitionEnd
              });
           };

           proto.onRevealTransitionEnd = function () {
              // check if still visible
              // during transition, item may have been hidden
              if (!this.isHidden) {
                 this.emitEvent('reveal');
              }
           };

           /**
            * get style property use for hide/reveal transition end
            * @param {String} styleProperty - hiddenStyle/visibleStyle
            * @returns {String}
            */
           proto.getHideRevealTransitionEndProperty = function (styleProperty) {
              var optionStyle = this.layout.options[styleProperty];
              // use opacity
              if (optionStyle.opacity) {
                 return 'opacity';
              }
              // get first property
              for (var prop in optionStyle) {
                 return prop;
              }
           };

           proto.hide = function () {
              // set flag
              this.isHidden = true;
              // remove display: none
              this.css({
                 display: ''
              });

              var options = this.layout.options;

              var onTransitionEnd = {};
              var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');
              onTransitionEnd[transitionEndProperty] = this.onHideTransitionEnd;

              this.transition({
                 from: options.visibleStyle,
                 to: options.hiddenStyle,
                 // keep hidden stuff hidden
                 isCleaning: true,
                 onTransitionEnd: onTransitionEnd
              });
           };

           proto.onHideTransitionEnd = function () {
              // check if still hidden
              // during transition, item may have been un-hidden
              if (this.isHidden) {
                 this.css({
                    display: 'none'
                 });
                 this.emitEvent('hide');
              }
           };

           proto.destroy = function () {
              this.css({
                 position: '',
                 left: '',
                 right: '',
                 top: '',
                 bottom: '',
                 transition: '',
                 transform: ''
              });
           };

           return Item;

        }));

        (function (window, factory) {
           'use strict';
           // universal module definition
           /* jshint strict: false */
           /* globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD - RequireJS
              define('outlayer/outlayer', [
                 'ev-emitter/ev-emitter',
                 'get-size/get-size',
                 'fizzy-ui-utils/utils',
                 './item'
              ],
                      function (EvEmitter, getSize, utils, Item) {
                         return factory(window, EvEmitter, getSize, utils, Item);
                      }
              );
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS - Browserify, Webpack
              module.exports = factory(
                      window,
                      require('ev-emitter'),
                      require('get-size'),
                      require('fizzy-ui-utils'),
                      require('./item')
                      );
           } else {
              // browser global
              window.Outlayer = factory(
                      window,
                      window.EvEmitter,
                      window.getSize,
                      window.fizzyUIUtils,
                      window.Outlayer.Item
                      );
           }

        }(window, function factory(window, EvEmitter, getSize, utils, Item) {
           'use strict';

           // ----- vars ----- //

           var console = window.console;
           var jQuery = window.jQuery;
           var noop = function () {};

           // -------------------------- Outlayer -------------------------- //

           // globally unique identifiers
           var GUID = 0;
           // internal store of all Outlayer intances
           var instances = {};

           /**
            * @param {Element, String} element
            * @param {Object} options
            * @constructor
            */
           function Outlayer(element, options) {
              var queryElement = utils.getQueryElement(element);
              if (!queryElement) {
                 if (console) {
                    console.error('Bad element for ' + this.constructor.namespace +
                            ': ' + (queryElement || element));
                 }
                 return;
              }
              this.element = queryElement;
              // add jQuery
              if (jQuery) {
                 this.$element = jQuery(this.element);
              }

              // options
              this.options = utils.extend({}, this.constructor.defaults);
              this.option(options);

              // add id for Outlayer.getFromElement
              var id = ++GUID;
              this.element.outlayerGUID = id; // expando
              instances[id] = this; // associate via id

              // kick it off
              this._create();

              var isInitLayout = this._getOption('initLayout');
              if (isInitLayout) {
                 this.layout();
              }
           }

           // settings are for internal use only
           Outlayer.namespace = 'outlayer';
           Outlayer.Item = Item;

           // default options
           Outlayer.defaults = {
              containerStyle: {
                 position: 'relative'
              },
              initLayout: true,
              originLeft: true,
              originTop: true,
              resize: true,
              resizeContainer: true,
              // item options
              transitionDuration: '0.4s',
              hiddenStyle: {
                 opacity: 0,
                 transform: 'scale(0.001)'
              },
              visibleStyle: {
                 opacity: 1,
                 transform: 'scale(1)'
              }
           };

           var proto = Outlayer.prototype;
           // inherit EvEmitter
           utils.extend(proto, EvEmitter.prototype);

           /**
            * set options
            * @param {Object} opts
            */
           proto.option = function (opts) {
              utils.extend(this.options, opts);
           };

           /**
            * get backwards compatible option value, check old name
            */
           proto._getOption = function (option) {
              var oldOption = this.constructor.compatOptions[option];
              return oldOption && this.options[oldOption] !== undefined ?
                      this.options[oldOption] : this.options[option];
           };

           Outlayer.compatOptions = {
              // currentName: oldName
              initLayout: 'isInitLayout',
              horizontal: 'isHorizontal',
              layoutInstant: 'isLayoutInstant',
              originLeft: 'isOriginLeft',
              originTop: 'isOriginTop',
              resize: 'isResizeBound',
              resizeContainer: 'isResizingContainer'
           };

           proto._create = function () {
              // get items from children
              this.reloadItems();
              // elements that affect layout, but are not laid out
              this.stamps = [];
              this.stamp(this.options.stamp);
              // set container style
              utils.extend(this.element.style, this.options.containerStyle);

              // bind resize method
              var canBindResize = this._getOption('resize');
              if (canBindResize) {
                 this.bindResize();
              }
           };

           // goes through all children again and gets bricks in proper order
           proto.reloadItems = function () {
              // collection of item elements
              this.items = this._itemize(this.element.children);
           };

           /**
            * turn elements into Outlayer.Items to be used in layout
            * @param {Array or NodeList or HTMLElement} elems
            * @returns {Array} items - collection of new Outlayer Items
            */
           proto._itemize = function (elems) {

              var itemElems = this._filterFindItemElements(elems);
              var Item = this.constructor.Item;

              // create new Outlayer Items for collection
              var items = [];
              for (var i = 0; i < itemElems.length; i++) {
                 var elem = itemElems[i];
                 var item = new Item(elem, this);
                 items.push(item);
              }

              return items;
           };

           /**
            * get item elements to be used in layout
            * @param {Array or NodeList or HTMLElement} elems
            * @returns {Array} items - item elements
            */
           proto._filterFindItemElements = function (elems) {
              return utils.filterFindElements(elems, this.options.itemSelector);
           };

           /**
            * getter method for getting item elements
            * @returns {Array} elems - collection of item elements
            */
           proto.getItemElements = function () {
              return this.items.map(function (item) {
                 return item.element;
              });
           };

           // ----- init & layout ----- //

           /**
            * lays out all items
            */
           proto.layout = function () {
              this._resetLayout();
              this._manageStamps();

              // don't animate first layout
              var layoutInstant = this._getOption('layoutInstant');
              var isInstant = layoutInstant !== undefined ?
                      layoutInstant : !this._isLayoutInited;
              this.layoutItems(this.items, isInstant);

              // flag for initalized
              this._isLayoutInited = true;
           };

           // _init is alias for layout
           proto._init = proto.layout;

           /**
            * logic before any new layout
            */
           proto._resetLayout = function () {
              this.getSize();
           };

           proto.getSize = function () {
              this.size = getSize(this.element);
           };

           /**
            * get measurement from option, for columnWidth, rowHeight, gutter
            * if option is String -> get element from selector string, & get size of element
            * if option is Element -> get size of element
            * else use option as a number
            *
            * @param {String} measurement
            * @param {String} size - width or height
            * @private
            */
           proto._getMeasurement = function (measurement, size) {
              var option = this.options[measurement];
              var elem;
              if (!option) {
                 // default to 0
                 this[measurement] = 0;
              } else {
                 // use option as an element
                 if (typeof option == 'string') {
                    elem = this.element.querySelector(option);
                 } else if (option instanceof HTMLElement) {
                    elem = option;
                 }
                 // use size of element, if element
                 this[measurement] = elem ? getSize(elem)[size] : option;
              }
           };

           /**
            * layout a collection of item elements
            * @api public
            */
           proto.layoutItems = function (items, isInstant) {
              items = this._getItemsForLayout(items);

              this._layoutItems(items, isInstant);

              this._postLayout();
           };

           /**
            * get the items to be laid out
            * you may want to skip over some items
            * @param {Array} items
            * @returns {Array} items
            */
           proto._getItemsForLayout = function (items) {
              return items.filter(function (item) {
                 return !item.isIgnored;
              });
           };

           /**
            * layout items
            * @param {Array} items
            * @param {Boolean} isInstant
            */
           proto._layoutItems = function (items, isInstant) {
              this._emitCompleteOnItems('layout', items);

              if (!items || !items.length) {
                 // no items, emit event with empty array
                 return;
              }

              var queue = [];

              items.forEach(function (item) {
                 // get x/y object from method
                 var position = this._getItemLayoutPosition(item);
                 // enqueue
                 position.item = item;
                 position.isInstant = isInstant || item.isLayoutInstant;
                 queue.push(position);
              }, this);

              this._processLayoutQueue(queue);
           };

           /**
            * get item layout position
            * @param {Outlayer.Item} item
            * @returns {Object} x and y position
            */
           proto._getItemLayoutPosition = function ( /* item */ ) {
              return {
                 x: 0,
                 y: 0
              };
           };

           /**
            * iterate over array and position each item
            * Reason being - separating this logic prevents 'layout invalidation'
            * thx @paul_irish
            * @param {Array} queue
            */
           proto._processLayoutQueue = function (queue) {
              this.updateStagger();
              queue.forEach(function (obj, i) {
                 this._positionItem(obj.item, obj.x, obj.y, obj.isInstant, i);
              }, this);
           };

           // set stagger from option in milliseconds number
           proto.updateStagger = function () {
              var stagger = this.options.stagger;
              if (stagger === null || stagger === undefined) {
                 this.stagger = 0;
                 return;
              }
              this.stagger = getMilliseconds(stagger);
              return this.stagger;
           };

           /**
            * Sets position of item in DOM
            * @param {Outlayer.Item} item
            * @param {Number} x - horizontal position
            * @param {Number} y - vertical position
            * @param {Boolean} isInstant - disables transitions
            */
           proto._positionItem = function (item, x, y, isInstant, i) {
              if (isInstant) {
                 // if not transition, just set CSS
                 item.goTo(x, y);
              } else {
                 item.stagger(i * this.stagger);
                 item.moveTo(x, y);
              }
           };

           /**
            * Any logic you want to do after each layout,
            * i.e. size the container
            */
           proto._postLayout = function () {
              this.resizeContainer();
           };

           proto.resizeContainer = function () {
              var isResizingContainer = this._getOption('resizeContainer');
              if (!isResizingContainer) {
                 return;
              }
              var size = this._getContainerSize();
              if (size) {
                 this._setContainerMeasure(size.width, true);
                 this._setContainerMeasure(size.height, false);
              }
           };

           /**
            * Sets width or height of container if returned
            * @returns {Object} size
            *   @param {Number} width
            *   @param {Number} height
            */
           proto._getContainerSize = noop;

           /**
            * @param {Number} measure - size of width or height
            * @param {Boolean} isWidth
            */
           proto._setContainerMeasure = function (measure, isWidth) {
              if (measure === undefined) {
                 return;
              }

              var elemSize = this.size;
              // add padding and border width if border box
              if (elemSize.isBorderBox) {
                 measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +
                         elemSize.borderLeftWidth + elemSize.borderRightWidth :
                         elemSize.paddingBottom + elemSize.paddingTop +
                         elemSize.borderTopWidth + elemSize.borderBottomWidth;
              }

              measure = Math.max(measure, 0);
              this.element.style[isWidth ? 'width' : 'height'] = measure + 'px';
           };

           /**
            * emit eventComplete on a collection of items events
            * @param {String} eventName
            * @param {Array} items - Outlayer.Items
            */
           proto._emitCompleteOnItems = function (eventName, items) {
              var _this = this;

              function onComplete() {
                 _this.dispatchEvent(eventName + 'Complete', null, [items]);
              }

              var count = items.length;
              if (!items || !count) {
                 onComplete();
                 return;
              }

              var doneCount = 0;

              function tick() {
                 doneCount++;
                 if (doneCount == count) {
                    onComplete();
                 }
              }

              // bind callback
              items.forEach(function (item) {
                 item.once(eventName, tick);
              });
           };

           /**
            * emits events via EvEmitter and jQuery events
            * @param {String} type - name of event
            * @param {Event} event - original event
            * @param {Array} args - extra arguments
            */
           proto.dispatchEvent = function (type, event, args) {
              // add original event to arguments
              var emitArgs = event ? [event].concat(args) : args;
              this.emitEvent(type, emitArgs);

              if (jQuery) {
                 // set this.$element
                 this.$element = this.$element || jQuery(this.element);
                 if (event) {
                    // create jQuery event
                    var $event = jQuery.Event(event);
                    $event.type = type;
                    this.$element.trigger($event, args);
                 } else {
                    // just trigger with type if no event available
                    this.$element.trigger(type, args);
                 }
              }
           };

           // -------------------------- ignore & stamps -------------------------- //

           /**
            * keep item in collection, but do not lay it out
            * ignored items do not get skipped in layout
            * @param {Element} elem
            */
           proto.ignore = function (elem) {
              var item = this.getItem(elem);
              if (item) {
                 item.isIgnored = true;
              }
           };

           /**
            * return item to layout collection
            * @param {Element} elem
            */
           proto.unignore = function (elem) {
              var item = this.getItem(elem);
              if (item) {
                 delete item.isIgnored;
              }
           };

           /**
            * adds elements to stamps
            * @param {NodeList, Array, Element, or String} elems
            */
           proto.stamp = function (elems) {
              elems = this._find(elems);
              if (!elems) {
                 return;
              }

              this.stamps = this.stamps.concat(elems);
              // ignore
              elems.forEach(this.ignore, this);
           };

           /**
            * removes elements to stamps
            * @param {NodeList, Array, or Element} elems
            */
           proto.unstamp = function (elems) {
              elems = this._find(elems);
              if (!elems) {
                 return;
              }

              elems.forEach(function (elem) {
                 // filter out removed stamp elements
                 utils.removeFrom(this.stamps, elem);
                 this.unignore(elem);
              }, this);
           };

           /**
            * finds child elements
            * @param {NodeList, Array, Element, or String} elems
            * @returns {Array} elems
            */
           proto._find = function (elems) {
              if (!elems) {
                 return;
              }
              // if string, use argument as selector string
              if (typeof elems == 'string') {
                 elems = this.element.querySelectorAll(elems);
              }
              elems = utils.makeArray(elems);
              return elems;
           };

           proto._manageStamps = function () {
              if (!this.stamps || !this.stamps.length) {
                 return;
              }

              this._getBoundingRect();

              this.stamps.forEach(this._manageStamp, this);
           };

           // update boundingLeft / Top
           proto._getBoundingRect = function () {
              // get bounding rect for container element
              var boundingRect = this.element.getBoundingClientRect();
              var size = this.size;
              this._boundingRect = {
                 left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,
                 top: boundingRect.top + size.paddingTop + size.borderTopWidth,
                 right: boundingRect.right - (size.paddingRight + size.borderRightWidth),
                 bottom: boundingRect.bottom - (size.paddingBottom + size.borderBottomWidth)
              };
           };

           /**
            * @param {Element} stamp
            **/
           proto._manageStamp = noop;

           /**
            * get x/y position of element relative to container element
            * @param {Element} elem
            * @returns {Object} offset - has left, top, right, bottom
            */
           proto._getElementOffset = function (elem) {
              var boundingRect = elem.getBoundingClientRect();
              var thisRect = this._boundingRect;
              var size = getSize(elem);
              var offset = {
                 left: boundingRect.left - thisRect.left - size.marginLeft,
                 top: boundingRect.top - thisRect.top - size.marginTop,
                 right: thisRect.right - boundingRect.right - size.marginRight,
                 bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom
              };
              return offset;
           };

           // -------------------------- resize -------------------------- //

           // enable event handlers for listeners
           // i.e. resize -> onresize
           proto.handleEvent = utils.handleEvent;

           /**
            * Bind layout to window resizing
            */
           proto.bindResize = function () {
              window.addEventListener('resize', this);
              this.isResizeBound = true;
           };

           /**
            * Unbind layout to window resizing
            */
           proto.unbindResize = function () {
              window.removeEventListener('resize', this);
              this.isResizeBound = false;
           };

           proto.onresize = function () {
              this.resize();
           };

           utils.debounceMethod(Outlayer, 'onresize', 100);

           proto.resize = function () {
              // don't trigger if size did not change
              // or if resize was unbound. See #9
              if (!this.isResizeBound || !this.needsResizeLayout()) {
                 return;
              }

              this.layout();
           };

           /**
            * check if layout is needed post layout
            * @returns Boolean
            */
           proto.needsResizeLayout = function () {
              var size = getSize(this.element);
              // check that this.size and size are there
              // IE8 triggers resize on body size change, so they might not be
              var hasSizes = this.size && size;
              return hasSizes && size.innerWidth !== this.size.innerWidth;
           };

           // -------------------------- methods -------------------------- //

           /**
            * add items to Outlayer instance
            * @param {Array or NodeList or Element} elems
            * @returns {Array} items - Outlayer.Items
            **/
           proto.addItems = function (elems) {
              var items = this._itemize(elems);
              // add items to collection
              if (items.length) {
                 this.items = this.items.concat(items);
              }
              return items;
           };

           /**
            * Layout newly-appended item elements
            * @param {Array or NodeList or Element} elems
            */
           proto.appended = function (elems) {
              var items = this.addItems(elems);
              if (!items.length) {
                 return;
              }
              // layout and reveal just the new items
              this.layoutItems(items, true);
              this.reveal(items);
           };

           /**
            * Layout prepended elements
            * @param {Array or NodeList or Element} elems
            */
           proto.prepended = function (elems) {
              var items = this._itemize(elems);
              if (!items.length) {
                 return;
              }
              // add items to beginning of collection
              var previousItems = this.items.slice(0);
              this.items = items.concat(previousItems);
              // start new layout
              this._resetLayout();
              this._manageStamps();
              // layout new stuff without transition
              this.layoutItems(items, true);
              this.reveal(items);
              // layout previous items
              this.layoutItems(previousItems);
           };

           /**
            * reveal a collection of items
            * @param {Array of Outlayer.Items} items
            */
           proto.reveal = function (items) {
              this._emitCompleteOnItems('reveal', items);
              if (!items || !items.length) {
                 return;
              }
              var stagger = this.updateStagger();
              items.forEach(function (item, i) {
                 item.stagger(i * stagger);
                 item.reveal();
              });
           };

           /**
            * hide a collection of items
            * @param {Array of Outlayer.Items} items
            */
           proto.hide = function (items) {
              this._emitCompleteOnItems('hide', items);
              if (!items || !items.length) {
                 return;
              }
              var stagger = this.updateStagger();
              items.forEach(function (item, i) {
                 item.stagger(i * stagger);
                 item.hide();
              });
           };

           /**
            * reveal item elements
            * @param {Array}, {Element}, {NodeList} items
            */
           proto.revealItemElements = function (elems) {
              var items = this.getItems(elems);
              this.reveal(items);
           };

           /**
            * hide item elements
            * @param {Array}, {Element}, {NodeList} items
            */
           proto.hideItemElements = function (elems) {
              var items = this.getItems(elems);
              this.hide(items);
           };

           /**
            * get Outlayer.Item, given an Element
            * @param {Element} elem
            * @param {Function} callback
            * @returns {Outlayer.Item} item
            */
           proto.getItem = function (elem) {
              // loop through items to get the one that matches
              for (var i = 0; i < this.items.length; i++) {
                 var item = this.items[i];
                 if (item.element == elem) {
                    // return item
                    return item;
                 }
              }
           };

           /**
            * get collection of Outlayer.Items, given Elements
            * @param {Array} elems
            * @returns {Array} items - Outlayer.Items
            */
           proto.getItems = function (elems) {
              elems = utils.makeArray(elems);
              var items = [];
              elems.forEach(function (elem) {
                 var item = this.getItem(elem);
                 if (item) {
                    items.push(item);
                 }
              }, this);

              return items;
           };

           /**
            * remove element(s) from instance and DOM
            * @param {Array or NodeList or Element} elems
            */
           proto.remove = function (elems) {
              var removeItems = this.getItems(elems);

              this._emitCompleteOnItems('remove', removeItems);

              // bail if no items to remove
              if (!removeItems || !removeItems.length) {
                 return;
              }

              removeItems.forEach(function (item) {
                 item.remove();
                 // remove item from collection
                 utils.removeFrom(this.items, item);
              }, this);
           };

           // ----- destroy ----- //

           // remove and disable Outlayer instance
           proto.destroy = function () {
              // clean up dynamic styles
              var style = this.element.style;
              style.height = '';
              style.position = '';
              style.width = '';
              // destroy items
              this.items.forEach(function (item) {
                 item.destroy();
              });

              this.unbindResize();

              var id = this.element.outlayerGUID;
              delete instances[id]; // remove reference to instance by id
              delete this.element.outlayerGUID;
              // remove data for jQuery
              if (jQuery) {
                 jQuery.removeData(this.element, this.constructor.namespace);
              }

           };

           // -------------------------- data -------------------------- //

           /**
            * get Outlayer instance from element
            * @param {Element} elem
            * @returns {Outlayer}
            */
           Outlayer.data = function (elem) {
              elem = utils.getQueryElement(elem);
              var id = elem && elem.outlayerGUID;
              return id && instances[id];
           };

           // -------------------------- create Outlayer class -------------------------- //

           /**
            * create a layout class
            * @param {String} namespace
            */
           Outlayer.create = function (namespace, options) {
              // sub-class Outlayer
              var Layout = subclass(Outlayer);
              // apply new options and compatOptions
              Layout.defaults = utils.extend({}, Outlayer.defaults);
              utils.extend(Layout.defaults, options);
              Layout.compatOptions = utils.extend({}, Outlayer.compatOptions);

              Layout.namespace = namespace;

              Layout.data = Outlayer.data;

              // sub-class Item
              Layout.Item = subclass(Item);

              // -------------------------- declarative -------------------------- //

              utils.htmlInit(Layout, namespace);

              // -------------------------- jQuery bridge -------------------------- //

              // make into jQuery plugin
              if (jQuery && jQuery.bridget) {
                 jQuery.bridget(namespace, Layout);
              }

              return Layout;
           };

           function subclass(Parent) {
              function SubClass() {
                 Parent.apply(this, arguments);
              }

              SubClass.prototype = Object.create(Parent.prototype);
              SubClass.prototype.constructor = SubClass;

              return SubClass;
           }

           // ----- helpers ----- //

           // how many milliseconds are in each unit
           var msUnits = {
              ms: 1,
              s: 1000
           };

           // munge time-like parameter into millisecond number
           // '0.4s' -> 40
           function getMilliseconds(time) {
              if (typeof time == 'number') {
                 return time;
              }
              var matches = time.match(/(^\d*\.?\d*)(\w*)/);
              var num = matches && matches[1];
              var unit = matches && matches[2];
              if (!num.length) {
                 return 0;
              }
              num = parseFloat(num);
              var mult = msUnits[unit] || 1;
              return num * mult;
           }

           // ----- fin ----- //

           // back in global
           Outlayer.Item = Item;

           return Outlayer;

        }));

        /**
         * Isotope Item
         **/

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('isotope/js/item', [
                 'outlayer/outlayer'
              ],
                      factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      require('outlayer')
                      );
           } else {
              // browser global
              window.Isotope = window.Isotope || {};
              window.Isotope.Item = factory(
                      window.Outlayer
                      );
           }

        }(window, function factory(Outlayer) {
           'use strict';

           // -------------------------- Item -------------------------- //

           // sub-class Outlayer Item
           function Item() {
              Outlayer.Item.apply(this, arguments);
           }

           var proto = Item.prototype = Object.create(Outlayer.Item.prototype);

           var _create = proto._create;
           proto._create = function () {
              // assign id, used for original-order sorting
              this.id = this.layout.itemGUID++;
              _create.call(this);
              this.sortData = {};
           };

           proto.updateSortData = function () {
              if (this.isIgnored) {
                 return;
              }
              // default sorters
              this.sortData.id = this.id;
              // for backward compatibility
              this.sortData['original-order'] = this.id;
              this.sortData.random = Math.random();
              // go thru getSortData obj and apply the sorters
              var getSortData = this.layout.options.getSortData;
              var sorters = this.layout._sorters;
              for (var key in getSortData) {
                 var sorter = sorters[key];
                 this.sortData[key] = sorter(this.element, this);
              }
           };

           var _destroy = proto.destroy;
           proto.destroy = function () {
              // call super
              _destroy.apply(this, arguments);
              // reset display, #741
              this.css({
                 display: ''
              });
           };

           return Item;

        }));

        /**
         * Isotope LayoutMode
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('isotope/js/layout-mode', [
                 'get-size/get-size',
                 'outlayer/outlayer'
              ],
                      factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      require('get-size'),
                      require('outlayer')
                      );
           } else {
              // browser global
              window.Isotope = window.Isotope || {};
              window.Isotope.LayoutMode = factory(
                      window.getSize,
                      window.Outlayer
                      );
           }

        }(window, function factory(getSize, Outlayer) {
           'use strict';

           // layout mode class
           function LayoutMode(isotope) {
              this.isotope = isotope;
              // link properties
              if (isotope) {
                 this.options = isotope.options[this.namespace];
                 this.element = isotope.element;
                 this.items = isotope.filteredItems;
                 this.size = isotope.size;
              }
           }

           var proto = LayoutMode.prototype;

           /**
            * some methods should just defer to default Outlayer method
            * and reference the Isotope instance as `this`
            **/
           var facadeMethods = [
              '_resetLayout',
              '_getItemLayoutPosition',
              '_manageStamp',
              '_getContainerSize',
              '_getElementOffset',
              'needsResizeLayout',
              '_getOption'
           ];

           facadeMethods.forEach(function (methodName) {
              proto[methodName] = function () {
                 return Outlayer.prototype[methodName].apply(this.isotope, arguments);
              };
           });

           // -----  ----- //

           // for horizontal layout modes, check vertical size
           proto.needsVerticalResizeLayout = function () {
              // don't trigger if size did not change
              var size = getSize(this.isotope.element);
              // check that this.size and size are there
              // IE8 triggers resize on body size change, so they might not be
              var hasSizes = this.isotope.size && size;
              return hasSizes && size.innerHeight != this.isotope.size.innerHeight;
           };

           // ----- measurements ----- //

           proto._getMeasurement = function () {
              this.isotope._getMeasurement.apply(this, arguments);
           };

           proto.getColumnWidth = function () {
              this.getSegmentSize('column', 'Width');
           };

           proto.getRowHeight = function () {
              this.getSegmentSize('row', 'Height');
           };

           /**
            * get columnWidth or rowHeight
            * segment: 'column' or 'row'
            * size 'Width' or 'Height'
            **/
           proto.getSegmentSize = function (segment, size) {
              var segmentName = segment + size;
              var outerSize = 'outer' + size;
              // columnWidth / outerWidth // rowHeight / outerHeight
              this._getMeasurement(segmentName, outerSize);
              // got rowHeight or columnWidth, we can chill
              if (this[segmentName]) {
                 return;
              }
              // fall back to item of first element
              var firstItemSize = this.getFirstItemSize();
              this[segmentName] = firstItemSize && firstItemSize[outerSize] ||
                      // or size of container
                      this.isotope.size['inner' + size];
           };

           proto.getFirstItemSize = function () {
              var firstItem = this.isotope.filteredItems[0];
              return firstItem && firstItem.element && getSize(firstItem.element);
           };

           // ----- methods that should reference isotope ----- //

           proto.layout = function () {
              this.isotope.layout.apply(this.isotope, arguments);
           };

           proto.getSize = function () {
              this.isotope.getSize();
              this.size = this.isotope.size;
           };

           // -------------------------- create -------------------------- //

           LayoutMode.modes = {};

           LayoutMode.create = function (namespace, options) {

              function Mode() {
                 LayoutMode.apply(this, arguments);
              }

              Mode.prototype = Object.create(proto);
              Mode.prototype.constructor = Mode;

              // default options
              if (options) {
                 Mode.options = options;
              }

              Mode.prototype.namespace = namespace;
              // register in Isotope
              LayoutMode.modes[namespace] = Mode;

              return Mode;
           };

           return LayoutMode;

        }));

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('masonry/masonry', [
                 'outlayer/outlayer',
                 'get-size/get-size'
              ],
                      factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      require('outlayer'),
                      require('get-size')
                      );
           } else {
              // browser global
              window.Masonry = factory(
                      window.Outlayer,
                      window.getSize
                      );
           }

        }(window, function factory(Outlayer, getSize) {

           // -------------------------- masonryDefinition -------------------------- //

           // create an Outlayer layout class
           var Masonry = Outlayer.create('masonry');
           // isFitWidth -> fitWidth
           Masonry.compatOptions.fitWidth = 'isFitWidth';

           Masonry.prototype._resetLayout = function () {
              this.getSize();
              this._getMeasurement('columnWidth', 'outerWidth');
              this._getMeasurement('gutter', 'outerWidth');
              this.measureColumns();

              // reset column Y
              this.colYs = [];
              for (var i = 0; i < this.cols; i++) {
                 this.colYs.push(0);
              }

              this.maxY = 0;
           };

           Masonry.prototype.measureColumns = function () {
              this.getContainerWidth();
              // if columnWidth is 0, default to outerWidth of first item
              if (!this.columnWidth) {
                 var firstItem = this.items[0];
                 var firstItemElem = firstItem && firstItem.element;
                 // columnWidth fall back to item of first element
                 this.columnWidth = firstItemElem && getSize(firstItemElem).outerWidth ||
                         // if first elem has no width, default to size of container
                         this.containerWidth;
              }

              var columnWidth = this.columnWidth += this.gutter;

              // calculate columns
              var containerWidth = this.containerWidth + this.gutter;
              var cols = containerWidth / columnWidth;
              // fix rounding errors, typically with gutters
              var excess = columnWidth - containerWidth % columnWidth;
              // if overshoot is less than a pixel, round up, otherwise floor it
              var mathMethod = excess && excess < 1 ? 'round' : 'floor';
              cols = Math[mathMethod](cols);
              this.cols = Math.max(cols, 1);
           };

           Masonry.prototype.getContainerWidth = function () {
              // container is parent if fit width
              var isFitWidth = this._getOption('fitWidth');
              var container = isFitWidth ? this.element.parentNode : this.element;
              // check that this.size and size are there
              // IE8 triggers resize on body size change, so they might not be
              var size = getSize(container);
              this.containerWidth = size && size.innerWidth;
           };

           Masonry.prototype._getItemLayoutPosition = function (item) {
              item.getSize();
              // how many columns does this brick span
              var remainder = item.size.outerWidth % this.columnWidth;
              var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';
              // round if off by 1 pixel, otherwise use ceil
              var colSpan = Math[mathMethod](item.size.outerWidth / this.columnWidth);
              colSpan = Math.min(colSpan, this.cols);

              var colGroup = this._getColGroup(colSpan);
              // get the minimum Y value from the columns
              var minimumY = Math.min.apply(Math, colGroup);
              var shortColIndex = colGroup.indexOf(minimumY);

              // position the brick
              var position = {
                 x: this.columnWidth * shortColIndex,
                 y: minimumY
              };

              // apply setHeight to necessary columns
              var setHeight = minimumY + item.size.outerHeight;
              var setSpan = this.cols + 1 - colGroup.length;
              for (var i = 0; i < setSpan; i++) {
                 this.colYs[shortColIndex + i] = setHeight;
              }

              return position;
           };

           /**
            * @param {Number} colSpan - number of columns the element spans
            * @returns {Array} colGroup
            */
           Masonry.prototype._getColGroup = function (colSpan) {
              if (colSpan < 2) {
                 // if brick spans only one column, use all the column Ys
                 return this.colYs;
              }

              var colGroup = [];
              // how many different places could this brick fit horizontally
              var groupCount = this.cols + 1 - colSpan;
              // for each group potential horizontal position
              for (var i = 0; i < groupCount; i++) {
                 // make an array of colY values for that one group
                 var groupColYs = this.colYs.slice(i, i + colSpan);
                 // and get the max value of the array
                 colGroup[i] = Math.max.apply(Math, groupColYs);
              }
              return colGroup;
           };

           Masonry.prototype._manageStamp = function (stamp) {
              var stampSize = getSize(stamp);
              var offset = this._getElementOffset(stamp);
              // get the columns that this stamp affects
              var isOriginLeft = this._getOption('originLeft');
              var firstX = isOriginLeft ? offset.left : offset.right;
              var lastX = firstX + stampSize.outerWidth;
              var firstCol = Math.floor(firstX / this.columnWidth);
              firstCol = Math.max(0, firstCol);
              var lastCol = Math.floor(lastX / this.columnWidth);
              // lastCol should not go over if multiple of columnWidth #425
              lastCol -= lastX % this.columnWidth ? 0 : 1;
              lastCol = Math.min(this.cols - 1, lastCol);
              // set colYs to bottom of the stamp

              var isOriginTop = this._getOption('originTop');
              var stampMaxY = (isOriginTop ? offset.top : offset.bottom) +
                      stampSize.outerHeight;
              for (var i = firstCol; i <= lastCol; i++) {
                 this.colYs[i] = Math.max(stampMaxY, this.colYs[i]);
              }
           };

           Masonry.prototype._getContainerSize = function () {
              this.maxY = Math.max.apply(Math, this.colYs);
              var size = {
                 height: this.maxY
              };

              if (this._getOption('fitWidth')) {
                 size.width = this._getContainerFitWidth();
              }

              return size;
           };

           Masonry.prototype._getContainerFitWidth = function () {
              var unusedCols = 0;
              // count unused columns
              var i = this.cols;
              while (--i) {
                 if (this.colYs[i] !== 0) {
                    break;
                 }
                 unusedCols++;
              }
              // fit container to columns that have been used
              return (this.cols - unusedCols) * this.columnWidth - this.gutter;
           };

           Masonry.prototype.needsResizeLayout = function () {
              var previousWidth = this.containerWidth;
              this.getContainerWidth();
              return previousWidth != this.containerWidth;
           };

           return Masonry;

        }));

        /*!
         * Masonry layout mode
         * sub-classes Masonry
         * http://masonry.desandro.com
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('isotope/js/layout-modes/masonry', [
                 '../layout-mode',
                 'masonry/masonry'
              ],
                      factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      require('../layout-mode'),
                      require('masonry-layout')
                      );
           } else {
              // browser global
              factory(
                      window.Isotope.LayoutMode,
                      window.Masonry
                      );
           }

        }(window, function factory(LayoutMode, Masonry) {
           'use strict';

           // -------------------------- masonryDefinition -------------------------- //

           // create an Outlayer layout class
           var MasonryMode = LayoutMode.create('masonry');

           var proto = MasonryMode.prototype;

           var keepModeMethods = {
              _getElementOffset: true,
              layout: true,
              _getMeasurement: true
           };

           // inherit Masonry prototype
           for (var method in Masonry.prototype) {
              // do not inherit mode methods
              if (!keepModeMethods[method]) {
                 proto[method] = Masonry.prototype[method];
              }
           }

           var measureColumns = proto.measureColumns;
           proto.measureColumns = function () {
              // set items, used if measuring first item
              this.items = this.isotope.filteredItems;
              measureColumns.call(this);
           };

           // point to mode options for fitWidth
           var _getOption = proto._getOption;
           proto._getOption = function (option) {
              if (option == 'fitWidth') {
                 return this.options.isFitWidth !== undefined ?
                         this.options.isFitWidth : this.options.fitWidth;
              }
              return _getOption.apply(this.isotope, arguments);
           };

           return MasonryMode;

        }));

        /**
         * fitRows layout mode
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('isotope/js/layout-modes/fit-rows', [
                 '../layout-mode'
              ],
                      factory);
           } else if (typeof exports == 'object') {
              // CommonJS
              module.exports = factory(
                      require('../layout-mode')
                      );
           } else {
              // browser global
              factory(
                      window.Isotope.LayoutMode
                      );
           }

        }(window, function factory(LayoutMode) {
           'use strict';

           var FitRows = LayoutMode.create('fitRows');

           var proto = FitRows.prototype;

           proto._resetLayout = function () {
              this.x = 0;
              this.y = 0;
              this.maxY = 0;
              this._getMeasurement('gutter', 'outerWidth');
           };

           proto._getItemLayoutPosition = function (item) {
              item.getSize();

              var itemWidth = item.size.outerWidth + this.gutter;
              // if this element cannot fit in the current row
              var containerWidth = this.isotope.size.innerWidth + this.gutter;
              if (this.x !== 0 && itemWidth + this.x > containerWidth) {
                 this.x = 0;
                 this.y = this.maxY;
              }

              var position = {
                 x: this.x,
                 y: this.y
              };

              this.maxY = Math.max(this.maxY, this.y + item.size.outerHeight);
              this.x += itemWidth;

              return position;
           };

           proto._getContainerSize = function () {
              return {
                 height: this.maxY
              };
           };

           return FitRows;

        }));

        /**
         * vertical layout mode
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define('isotope/js/layout-modes/vertical', [
                 '../layout-mode'
              ],
                      factory);
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      require('../layout-mode')
                      );
           } else {
              // browser global
              factory(
                      window.Isotope.LayoutMode
                      );
           }

        }(window, function factory(LayoutMode) {
           'use strict';

           var Vertical = LayoutMode.create('vertical', {
              horizontalAlignment: 0
           });

           var proto = Vertical.prototype;

           proto._resetLayout = function () {
              this.y = 0;
           };

           proto._getItemLayoutPosition = function (item) {
              item.getSize();
              var x = (this.isotope.size.innerWidth - item.size.outerWidth) *
                      this.options.horizontalAlignment;
              var y = this.y;
              this.y += item.size.outerHeight;
              return {
                 x: x,
                 y: y
              };
           };

           proto._getContainerSize = function () {
              return {
                 height: this.y
              };
           };

           return Vertical;

        }));

        /*!
         * Isotope v3.0.1
         *
         * Licensed GPLv3 for open source use
         * or Isotope Commercial License for commercial use
         *
         * http://isotope.metafizzy.co
         * Copyright 2016 Metafizzy
         */

        (function (window, factory) {
           // universal module definition
           /* jshint strict: false */
           /*globals define, module, require */
           if (typeof define == 'function' && define.amd) {
              // AMD
              define([
                 'outlayer/outlayer',
                 'get-size/get-size',
                 'desandro-matches-selector/matches-selector',
                 'fizzy-ui-utils/utils',
                 'isotope/js/item',
                 'isotope/js/layout-mode',
                 // include default layout modes
                 'isotope/js/layout-modes/masonry',
                 'isotope/js/layout-modes/fit-rows',
                 'isotope/js/layout-modes/vertical'
              ],
                      function (Outlayer, getSize, matchesSelector, utils, Item, LayoutMode) {
                         return factory(window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode);
                      });
           } else if (typeof module == 'object' && module.exports) {
              // CommonJS
              module.exports = factory(
                      window,
                      require('outlayer'),
                      require('get-size'),
                      require('desandro-matches-selector'),
                      require('fizzy-ui-utils'),
                      require('isotope/js/item'),
                      require('isotope/js/layout-mode'),
                      // include default layout modes
                      require('isotope/js/layout-modes/masonry'),
                      require('isotope/js/layout-modes/fit-rows'),
                      require('isotope/js/layout-modes/vertical')
                      );
           } else {
              // browser global
              window.Isotope = factory(
                      window,
                      window.Outlayer,
                      window.getSize,
                      window.matchesSelector,
                      window.fizzyUIUtils,
                      window.Isotope.Item,
                      window.Isotope.LayoutMode
                      );
           }

        }(window, function factory(window, Outlayer, getSize, matchesSelector, utils,
                Item, LayoutMode) {

           // -------------------------- vars -------------------------- //

           var jQuery = window.jQuery;

           // -------------------------- helpers -------------------------- //

           var trim = String.prototype.trim ?
                   function (str) {
                      return str.trim();
                   } :
                   function (str) {
                      return str.replace(/^\s+|\s+$/g, '');
                   };

           // -------------------------- isotopeDefinition -------------------------- //

           // create an Outlayer layout class
           var Isotope = Outlayer.create('isotope', {
              layoutMode: 'masonry',
              isJQueryFiltering: true,
              sortAscending: true
           });

           Isotope.Item = Item;
           Isotope.LayoutMode = LayoutMode;

           var proto = Isotope.prototype;

           proto._create = function () {
              this.itemGUID = 0;
              // functions that sort items
              this._sorters = {};
              this._getSorters();
              // call super
              Outlayer.prototype._create.call(this);

              // create layout modes
              this.modes = {};
              // start filteredItems with all items
              this.filteredItems = this.items;
              // keep of track of sortBys
              this.sortHistory = ['original-order'];
              // create from registered layout modes
              for (var name in LayoutMode.modes) {
                 this._initLayoutMode(name);
              }
           };

           proto.reloadItems = function () {
              // reset item ID counter
              this.itemGUID = 0;
              // call super
              Outlayer.prototype.reloadItems.call(this);
           };

           proto._itemize = function () {
              var items = Outlayer.prototype._itemize.apply(this, arguments);
              // assign ID for original-order
              for (var i = 0; i < items.length; i++) {
                 var item = items[i];
                 item.id = this.itemGUID++;
              }
              this._updateItemsSortData(items);
              return items;
           };

           // -------------------------- layout -------------------------- //

           proto._initLayoutMode = function (name) {
              var Mode = LayoutMode.modes[name];
              // set mode options
              // HACK extend initial options, back-fill in default options
              var initialOpts = this.options[name] || {};
              this.options[name] = Mode.options ?
                      utils.extend(Mode.options, initialOpts) : initialOpts;
              // init layout mode instance
              this.modes[name] = new Mode(this);
           };

           proto.layout = function () {
              // if first time doing layout, do all magic
              if (!this._isLayoutInited && this._getOption('initLayout')) {
                 this.arrange();
                 return;
              }
              this._layout();
           };

           // private method to be used in layout() & magic()
           proto._layout = function () {
              // don't animate first layout
              var isInstant = this._getIsInstant();
              // layout flow
              this._resetLayout();
              this._manageStamps();
              this.layoutItems(this.filteredItems, isInstant);

              // flag for initalized
              this._isLayoutInited = true;
           };

           // filter + sort + layout
           proto.arrange = function (opts) {
              // set any options pass
              this.option(opts);
              this._getIsInstant();
              // filter, sort, and layout

              // filter
              var filtered = this._filter(this.items);
              this.filteredItems = filtered.matches;

              this._bindArrangeComplete();

              if (this._isInstant) {
                 this._noTransition(this._hideReveal, [filtered]);
              } else {
                 this._hideReveal(filtered);
              }

              this._sort();
              this._layout();
           };
           // alias to _init for main plugin method
           proto._init = proto.arrange;

           proto._hideReveal = function (filtered) {
              this.reveal(filtered.needReveal);
              this.hide(filtered.needHide);
           };

           // HACK
           // Don't animate/transition first layout
           // Or don't animate/transition other layouts
           proto._getIsInstant = function () {
              var isLayoutInstant = this._getOption('layoutInstant');
              var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :
                      !this._isLayoutInited;
              this._isInstant = isInstant;
              return isInstant;
           };

           // listen for layoutComplete, hideComplete and revealComplete
           // to trigger arrangeComplete
           proto._bindArrangeComplete = function () {
              // listen for 3 events to trigger arrangeComplete
              var isLayoutComplete, isHideComplete, isRevealComplete;
              var _this = this;

              function arrangeParallelCallback() {
                 if (isLayoutComplete && isHideComplete && isRevealComplete) {
                    _this.dispatchEvent('arrangeComplete', null, [_this.filteredItems]);
                 }
              }
              this.once('layoutComplete', function () {
                 isLayoutComplete = true;
                 arrangeParallelCallback();
              });
              this.once('hideComplete', function () {
                 isHideComplete = true;
                 arrangeParallelCallback();
              });
              this.once('revealComplete', function () {
                 isRevealComplete = true;
                 arrangeParallelCallback();
              });
           };

           // -------------------------- filter -------------------------- //

           proto._filter = function (items) {
              var filter = this.options.filter;
              filter = filter || '*';
              var matches = [];
              var hiddenMatched = [];
              var visibleUnmatched = [];

              var test = this._getFilterTest(filter);

              // test each item
              for (var i = 0; i < items.length; i++) {
                 var item = items[i];
                 if (item.isIgnored) {
                    continue;
                 }
                 // add item to either matched or unmatched group
                 var isMatched = test(item);
                 // item.isFilterMatched = isMatched;
                 // add to matches if its a match
                 if (isMatched) {
                    matches.push(item);
                 }
                 // add to additional group if item needs to be hidden or revealed
                 if (isMatched && item.isHidden) {
                    hiddenMatched.push(item);
                 } else if (!isMatched && !item.isHidden) {
                    visibleUnmatched.push(item);
                 }
              }

              // return collections of items to be manipulated
              return {
                 matches: matches,
                 needReveal: hiddenMatched,
                 needHide: visibleUnmatched
              };
           };

           // get a jQuery, function, or a matchesSelector test given the filter
           proto._getFilterTest = function (filter) {
              if (jQuery && this.options.isJQueryFiltering) {
                 // use jQuery
                 return function (item) {
                    return jQuery(item.element).is(filter);
                 };
              }
              if (typeof filter == 'function') {
                 // use filter as function
                 return function (item) {
                    return filter(item.element);
                 };
              }
              // default, use filter as selector string
              return function (item) {
                 return matchesSelector(item.element, filter);
              };
           };

           // -------------------------- sorting -------------------------- //

           /**
            * @params {Array} elems
            * @public
            */
           proto.updateSortData = function (elems) {
              // get items
              var items;
              if (elems) {
                 elems = utils.makeArray(elems);
                 items = this.getItems(elems);
              } else {
                 // update all items if no elems provided
                 items = this.items;
              }

              this._getSorters();
              this._updateItemsSortData(items);
           };

           proto._getSorters = function () {
              var getSortData = this.options.getSortData;
              for (var key in getSortData) {
                 var sorter = getSortData[key];
                 this._sorters[key] = mungeSorter(sorter);
              }
           };

           /**
            * @params {Array} items - of Isotope.Items
            * @private
            */
           proto._updateItemsSortData = function (items) {
              // do not update if no items
              var len = items && items.length;

              for (var i = 0; len && i < len; i++) {
                 var item = items[i];
                 item.updateSortData();
              }
           };

           // ----- munge sorter ----- //

           // encapsulate this, as we just need mungeSorter
           // other functions in here are just for munging
           var mungeSorter = (function () {
              // add a magic layer to sorters for convienent shorthands
              // `.foo-bar` will use the text of .foo-bar querySelector
              // `[foo-bar]` will use attribute
              // you can also add parser
              // `.foo-bar parseInt` will parse that as a number
              function mungeSorter(sorter) {
                 // if not a string, return function or whatever it is
                 if (typeof sorter != 'string') {
                    return sorter;
                 }
                 // parse the sorter string
                 var args = trim(sorter).split(' ');
                 var query = args[0];
                 // check if query looks like [an-attribute]
                 var attrMatch = query.match(/^\[(.+)\]$/);
                 var attr = attrMatch && attrMatch[1];
                 var getValue = getValueGetter(attr, query);
                 // use second argument as a parser
                 var parser = Isotope.sortDataParsers[args[1]];
                 // parse the value, if there was a parser
                 sorter = parser ? function (elem) {
                    return elem && parser(getValue(elem));
                 } :
                         // otherwise just return value
                                 function (elem) {
                                    return elem && getValue(elem);
                                 };

                         return sorter;
                      }

              // get an attribute getter, or get text of the querySelector
              function getValueGetter(attr, query) {
                 // if query looks like [foo-bar], get attribute
                 if (attr) {
                    return function getAttribute(elem) {
                       return elem.getAttribute(attr);
                    };
                 }

                 // otherwise, assume its a querySelector, and get its text
                 return function getChildText(elem) {
                    var child = elem.querySelector(query);
                    return child && child.textContent;
                 };
              }

              return mungeSorter;
           })();

           // parsers used in getSortData shortcut strings
           Isotope.sortDataParsers = {
              'parseInt': function (val) {
                 return parseInt(val, 10);
              },
              'parseFloat': function (val) {
                 return parseFloat(val);
              }
           };

           // ----- sort method ----- //

           // sort filteredItem order
           proto._sort = function () {
              var sortByOpt = this.options.sortBy;
              if (!sortByOpt) {
                 return;
              }
              // concat all sortBy and sortHistory
              var sortBys = [].concat.apply(sortByOpt, this.sortHistory);
              // sort magic
              var itemSorter = getItemSorter(sortBys, this.options.sortAscending);
              this.filteredItems.sort(itemSorter);
              // keep track of sortBy History
              if (sortByOpt != this.sortHistory[0]) {
                 // add to front, oldest goes in last
                 this.sortHistory.unshift(sortByOpt);
              }
           };

           // returns a function used for sorting
           function getItemSorter(sortBys, sortAsc) {
              return function sorter(itemA, itemB) {
                 // cycle through all sortKeys
                 for (var i = 0; i < sortBys.length; i++) {
                    var sortBy = sortBys[i];
                    var a = itemA.sortData[sortBy];
                    var b = itemB.sortData[sortBy];
                    if (a > b || a < b) {
                       // if sortAsc is an object, use the value given the sortBy key
                       var isAscending = sortAsc[sortBy] !== undefined ? sortAsc[sortBy] : sortAsc;
                       var direction = isAscending ? 1 : -1;
                       return (a > b ? 1 : -1) * direction;
                    }
                 }
                 return 0;
              };
           }

           // -------------------------- methods -------------------------- //

           // get layout mode
           proto._mode = function () {
              var layoutMode = this.options.layoutMode;
              var mode = this.modes[layoutMode];
              if (!mode) {
                 // TODO console.error
                 throw new Error('No layout mode: ' + layoutMode);
              }
              // HACK sync mode's options
              // any options set after init for layout mode need to be synced
              mode.options = this.options[layoutMode];
              return mode;
           };

           proto._resetLayout = function () {
              // trigger original reset layout
              Outlayer.prototype._resetLayout.call(this);
              this._mode()._resetLayout();
           };

           proto._getItemLayoutPosition = function (item) {
              return this._mode()._getItemLayoutPosition(item);
           };

           proto._manageStamp = function (stamp) {
              this._mode()._manageStamp(stamp);
           };

           proto._getContainerSize = function () {
              return this._mode()._getContainerSize();
           };

           proto.needsResizeLayout = function () {
              return this._mode().needsResizeLayout();
           };

           // -------------------------- adding & removing -------------------------- //

           // HEADS UP overwrites default Outlayer appended
           proto.appended = function (elems) {
              var items = this.addItems(elems);
              if (!items.length) {
                 return;
              }
              // filter, layout, reveal new items
              var filteredItems = this._filterRevealAdded(items);
              // add to filteredItems
              this.filteredItems = this.filteredItems.concat(filteredItems);
           };

           // HEADS UP overwrites default Outlayer prepended
           proto.prepended = function (elems) {
              var items = this._itemize(elems);
              if (!items.length) {
                 return;
              }
              // start new layout
              this._resetLayout();
              this._manageStamps();
              // filter, layout, reveal new items
              var filteredItems = this._filterRevealAdded(items);
              // layout previous items
              this.layoutItems(this.filteredItems);
              // add to items and filteredItems
              this.filteredItems = filteredItems.concat(this.filteredItems);
              this.items = items.concat(this.items);
           };

           proto._filterRevealAdded = function (items) {
              var filtered = this._filter(items);
              this.hide(filtered.needHide);
              // reveal all new items
              this.reveal(filtered.matches);
              // layout new items, no transition
              this.layoutItems(filtered.matches, true);
              return filtered.matches;
           };

           /**
            * Filter, sort, and layout newly-appended item elements
            * @param {Array or NodeList or Element} elems
            */
           proto.insert = function (elems) {
              var items = this.addItems(elems);
              if (!items.length) {
                 return;
              }
              // append item elements
              var i, item;
              var len = items.length;
              for (i = 0; i < len; i++) {
                 item = items[i];
                 this.element.appendChild(item.element);
              }
              // filter new stuff
              var filteredInsertItems = this._filter(items).matches;
              // set flag
              for (i = 0; i < len; i++) {
                 items[i].isLayoutInstant = true;
              }
              this.arrange();
              // reset flag
              for (i = 0; i < len; i++) {
                 delete items[i].isLayoutInstant;
              }
              this.reveal(filteredInsertItems);
           };

           var _remove = proto.remove;
           proto.remove = function (elems) {
              elems = utils.makeArray(elems);
              var removeItems = this.getItems(elems);
              // do regular thing
              _remove.call(this, elems);
              // bail if no items to remove
              var len = removeItems && removeItems.length;
              // remove elems from filteredItems
              for (var i = 0; len && i < len; i++) {
                 var item = removeItems[i];
                 // remove item from collection
                 utils.removeFrom(this.filteredItems, item);
              }
           };

           proto.shuffle = function () {
              // update random sortData
              for (var i = 0; i < this.items.length; i++) {
                 var item = this.items[i];
                 item.sortData.random = Math.random();
              }
              this.options.sortBy = 'random';
              this._sort();
              this._layout();
           };

           /**
            * trigger fn without transition
            * kind of hacky to have this in the first place
            * @param {Function} fn
            * @param {Array} args
            * @returns ret
            * @private
            */
           proto._noTransition = function (fn, args) {
              // save transitionDuration before disabling
              var transitionDuration = this.options.transitionDuration;
              // disable transition
              this.options.transitionDuration = 0;
              // do it
              var returnValue = fn.apply(this, args);
              // re-enable transition for reveal
              this.options.transitionDuration = transitionDuration;
              return returnValue;
           };

           // ----- helper methods ----- //

           /**
            * getter method for getting filtered item elements
            * @returns {Array} elems - collection of item elements
            */
           proto.getFilteredItemElements = function () {
              return this.filteredItems.map(function (item) {
                 return item.element;
              });
           };

           // -----  ----- //

           return Isotope;

        }));
// source --> https://www.billyhassell.com/wp-content/themes/envision/includes/modules/module.sharrre/js/jquery.sharrre.js 
/*
 *  Sharrre.com - Make your sharing widget!
 *  Version: beta 1.3.3
 *  Author: Julien Hany
 *  License: MIT http://en.wikipedia.org/wiki/MIT_License or GPLv2 http://en.wikipedia.org/wiki/GNU_General_Public_License
 */

;(function ( $, window, document, undefined ) {

	/* Defaults
	================================================== */
	var pluginName = 'sharrre',
	defaults = {
		className: 'sharrre',
		share: {
			googlePlus: false,
			facebook: false,
			twitter: false,
			digg: false,
			delicious: false,
			stumbleupon: false,
			linkedin: false,
			pinterest: false
		},
		shareTotal: 0,
		template: '',
		title: '',
		url: document.location.href,
		text: document.title,
		urlCurl: 'sharrre.php?',  //PHP script for google plus...
		count: {}, //counter by social network
		total: 0,  //total of sharing
		shorterTotal: true, //show total by k or M when number is to big
		enableHover: true, //disable if you want to personalize hover event with callback
		enableCounter: true, //disable if you just want use buttons
		enableTracking: false, //tracking with google analitycs
		lang: '',
		imageUrl: '',
		hover: function(){}, //personalize hover event with this callback function
		hide: function(){}, //personalize hide event with this callback function
		click: function(){}, //personalize click event with this callback function
		render: function(){}, //personalize render event with this callback function
		buttons: {  //settings for buttons
			googlePlus : {  //http://www.google.com/webmasters/+1/button/
				url: '',  //if you need to personnalize button url
				urlCount: false,  //if you want to use personnalize button url on global counter
				size: 'medium',
				lang: 'en-US',
				annotation: ''
			},
			facebook: { //http://developers.facebook.com/docs/reference/plugins/like/
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				action: 'like',
				layout: 'button_count',
				width: '',
				send: 'false',
				faces: 'false',
				colorscheme: '',
				font: '',
				lang: 'en_US'
			},
			twitter: {  //http://twitter.com/about/resources/tweetbutton
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				count: 'horizontal',
				hashtags: '',
				via: '',
				related: '',
				lang: 'en'
			},
			digg: { //http://about.digg.com/downloads/button/smart
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				type: 'DiggCompact'
			},
			delicious: {
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				size: 'medium' //medium or tall
			},
			stumbleupon: {  //http://www.stumbleupon.com/badges/
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				layout: '1'
			},
			linkedin: {  //http://developer.linkedin.com/plugins/share-button
				url: '',  //if you need to personalize url button
				urlCount: false,  //if you want to use personnalize button url on global counter
				counter: ''
			},
			pinterest: { //http://pinterest.com/about/goodies/
				url: '',  //if you need to personalize url button
				media: '',
				description: '',
				layout: 'horizontal'
			}
		}
	},
	/* Json URL to get count number
	================================================== */
	urlJson = {
		googlePlus: "",
		//new FQL method by Sire
		facebook: "https://graph.facebook.com/?id={url}",
		//facebook: "https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27{url}%27&callback=?",
		//old method facebook: "http://graph.facebook.com/?id={url}&callback=?",
		//facebook : "http://api.ak.facebook.com/restserver.php?v=1.0&method=links.getStats&urls={url}&format=json"
		twitter: "https://opensharecount.com/count.json?url={url}&callback=?",
		digg: "https://services.digg.com/2.0/story.getInfo?links={url}&type=javascript&callback=?",
		delicious: 'https://feeds.delicious.com/v2/json/urlinfo/data?url={url}&callback=?',
		//stumbleupon: "http://www.stumbleupon.com/services/1.01/badge.getinfo?url={url}&format=jsonp&callback=?",
		stumbleupon: "",
		linkedin: "https://www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",
		pinterest: "https://api.pinterest.com/v1/urls/count.json?url={url}&callback=?"
	},
	/* Load share buttons asynchronously
	================================================== */
	loadButton = {
		googlePlus : function(self){
			var sett = self.options.buttons.googlePlus;
			var lang = self.options.lang != '' ? self.options.lang : self.options.buttons.googlePlus.lang;
			//$(self.element).find('.buttons').append('<div class="button googleplus"><g:plusone size="'+self.options.buttons.googlePlus.size+'" href="'+self.options.url+'"></g:plusone></div>');
			$(self.element).find('.buttons').append('<div class="button googleplus"><div class="g-plusone" data-size="'+sett.size+'" data-href="'+(sett.url !== '' ? sett.url : self.options.url)+'" data-annotation="'+sett.annotation+'"></div></div>');
			window.___gcfg = {
				lang: lang
			};
			var loading = 0;
			if(typeof gapi === 'undefined' && loading == 0){
				loading = 1;
				(function() {
					var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
					po.src = '//apis.google.com/js/plusone.js';
					var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
				})();
			}
			else{
				gapi.plusone.go();
			}
		},
		facebook : function(self){
			var sett = self.options.buttons.facebook;
			var lang = self.options.lang != '' ? self.options.lang : sett.lang;
			$(self.element).find('.buttons').append('<div class="button facebook"><div id="fb-root"></div><div class="fb-like" data-href="'+(sett.url !== '' ? sett.url : self.options.url)+'" data-send="'+sett.send+'" data-layout="'+sett.layout+'" data-width="'+sett.width+'" data-show-faces="'+sett.faces+'" data-action="'+sett.action+'" data-colorscheme="'+sett.colorscheme+'" data-font="'+sett.font+'" data-via="'+sett.via+'"></div></div>');
			var loading = 0;
			if(typeof FB === 'undefined' && loading == 0){
				loading = 1;
				(function(d, s, id) {
					var js, fjs = d.getElementsByTagName(s)[0];
					if (d.getElementById(id)) {return;}
					js = d.createElement(s); js.id = id;
					js.src = '//connect.facebook.net/'+lang+'/all.js#xfbml=1';
					fjs.parentNode.insertBefore(js, fjs);
				}(document, 'script', 'facebook-jssdk'));
			}
			else{
				FB.XFBML.parse();
			}
		},
		twitter : function(self){
			var sett = self.options.buttons.twitter;
			var lang = self.options.lang != '' ? self.options.lang : sett.lang;

			$(self.element).find('.buttons').append('<div class="button twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="'+(sett.url !== '' ? sett.url : self.options.url)+'" data-count="'+sett.count+'" data-text="'+self.options.text+'" data-via="'+sett.via+'" data-hashtags="'+sett.hashtags+'" data-related="'+sett.related+'" data-lang="'+lang+'">Tweet</a></div>');
			var loading = 0;
			if(typeof twttr === 'undefined' && loading == 0){
				loading = 1;
				(function() {
					var twitterScriptTag = document.createElement('script');
					twitterScriptTag.type = 'text/javascript';
					twitterScriptTag.async = true;
					twitterScriptTag.src = '//platform.twitter.com/widgets.js';
					var s = document.getElementsByTagName('script')[0];
					s.parentNode.insertBefore(twitterScriptTag, s);
				})();
			}
			else{
				$.ajax({ url: '//platform.twitter.com/widgets.js', dataType: 'script', cache:true}); //http://stackoverflow.com/q/6536108
			}
		},
		digg : function(self){
			var sett = self.options.buttons.digg;
			$(self.element).find('.buttons').append('<div class="button digg"><a class="DiggThisButton '+sett.type+'" rel="nofollow external" href="http://digg.com/submit?url='+encodeURIComponent((sett.url !== '' ? sett.url : self.options.url))+'"></a></div>');
			var loading = 0;
			if(typeof __DBW === 'undefined' && loading == 0){
				loading = 1;
				(function() {
					var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
					s.type = 'text/javascript';
					s.async = true;
					s.src = '//widgets.digg.com/buttons.js';
					s1.parentNode.insertBefore(s, s1);
				})();
			}
		},
		delicious : function(self){
			if(self.options.buttons.delicious.size == 'tall'){//tall
				var css = 'width:50px;',
				cssCount = 'height:35px;width:50px;font-size:15px;line-height:35px;',
				cssShare = 'height:18px;line-height:18px;margin-top:3px;';
			}
			else{//medium
				var css = 'width:93px;',
				cssCount = 'float:right;padding:0 3px;height:20px;width:26px;line-height:20px;',
				cssShare = 'float:left;height:20px;line-height:20px;';
			}
			var count = self.shorterTotal(self.options.count.delicious);
			if(typeof count === "undefined"){
				count = 0;
			}
			$(self.element).find('.buttons').append(
			'<div class="button delicious"><div style="'+css+'font:12px Arial,Helvetica,sans-serif;cursor:pointer;color:#666666;display:inline-block;float:none;height:20px;line-height:normal;margin:0;padding:0;text-indent:0;vertical-align:baseline;">'+
			'<div style="'+cssCount+'background-color:#fff;margin-bottom:5px;overflow:hidden;text-align:center;border:1px solid #ccc;border-radius:3px;">'+count+'</div>'+
			'<div style="'+cssShare+'display:block;padding:0;text-align:center;text-decoration:none;width:50px;background-color:#7EACEE;border:1px solid #40679C;border-radius:3px;color:#fff;">'+
			'<img src="http://www.delicious.com/static/img/delicious.small.gif" height="10" width="10" alt="Delicious" /> Add</div></div></div>');

			$(self.element).find('.delicious').on('click', function(){
				self.openPopup('delicious');
			});
		},
		stumbleupon : function(self){
			var sett = self.options.buttons.stumbleupon;
			$(self.element).find('.buttons').append('<div class="button stumbleupon"><su:badge layout="'+sett.layout+'" location="'+(sett.url !== '' ? sett.url : self.options.url)+'"></su:badge></div>');
			var loading = 0;
			if(typeof STMBLPN === 'undefined' && loading == 0){
				loading = 1;
				(function() {
					var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
					li.src = '//platform.stumbleupon.com/1/widgets.js';
					var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
				})();
				s = window.setTimeout(function(){
					if(typeof STMBLPN !== 'undefined'){
						STMBLPN.processWidgets();
						clearInterval(s);
					}
				},500);
			}
			else{
				STMBLPN.processWidgets();
			}
		},
		linkedin : function(self){
			var sett = self.options.buttons.linkedin;
			$(self.element).find('.buttons').append('<div class="button linkedin"><script type="in/share" data-url="'+(sett.url !== '' ? sett.url : self.options.url)+'" data-counter="'+sett.counter+'"></script></div>');
			var loading = 0;
			if(typeof window.IN === 'undefined' && loading == 0){
				loading = 1;
				(function() {
					var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
					li.src = '//platform.linkedin.com/in.js';
					var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
				})();
			}
			else{
				window.IN.init();
			}
		},
		pinterest : function(self){
			var sett = self.options.buttons.pinterest;
			$(self.element).find('.buttons').append('<div class="button pinterest"><a href="http://pinterest.com/pin/create/button/?url='+(sett.url !== '' ? sett.url : self.options.url)+'&media='+sett.media+'&description='+sett.description+'" class="pin-it-button" count-layout="'+sett.layout+'">Pin It</a></div>');

			(function() {
				var li = document.createElement('script');li.type = 'text/javascript';li.async = true;
				li.src = '//assets.pinterest.com/js/pinit.js';
				var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s);
			})();
		}
	},
	/* Tracking for Google Analytics
	================================================== */
	tracking = {
		googlePlus: function(){},
		facebook: function(){
			//console.log('facebook');
			fb = window.setInterval(function(){
				if (typeof FB !== 'undefined') {
					FB.Event.subscribe('edge.create', function(targetUrl) {
						_gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
					});
					FB.Event.subscribe('edge.remove', function(targetUrl) {
						_gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);
					});
					FB.Event.subscribe('message.send', function(targetUrl) {
						_gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]);
					});
					//console.log('ok');
					clearInterval(fb);
				}
			},1000);
		},
		twitter: function(){
			//console.log('twitter');
			tw = window.setInterval(function(){
				if (typeof twttr !== 'undefined') {
					twttr.events.bind('tweet', function(event) {
						if (event) {
							_gaq.push(['_trackSocial', 'twitter', 'tweet']);
						}
					});
					//console.log('ok');
					clearInterval(tw);
				}
			},1000);
		},
		digg: function(){
			//if somenone find a solution, mail me !
			/*$(this.element).find('.digg').on('click', function(){
				_gaq.push(['_trackSocial', 'digg', 'add']);
			});*/
		},
		delicious: function(){},
		stumbleupon: function(){},
		linkedin: function(){
			function LinkedInShare() {
				_gaq.push(['_trackSocial', 'linkedin', 'share']);
			}
		},
		pinterest: function(){
			//if somenone find a solution, mail me !
		}
	},
	/* Popup for each social network
	================================================== */
	popup = {
		googlePlus: function(opt){
		var lang = opt.lang != '' ? opt.lang : opt.buttons.googlePlus.lang;

			window.open("https://plus.google.com/share?hl="+lang+"&url="+encodeURIComponent((opt.buttons.googlePlus.url !== '' ? opt.buttons.googlePlus.url : opt.url)), "", "toolbar=0, status=0, width=900, height=500");
		},
		facebook: function(opt){
			window.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((opt.buttons.facebook.url !== '' ? opt.buttons.facebook.url : opt.url))+"&t="+opt.text+"", "", "toolbar=0, status=0, width=900, height=500");
		},
		twitter: function(opt){
			window.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(opt.text)+"&url="+encodeURIComponent((opt.buttons.twitter.url !== '' ? opt.buttons.twitter.url : opt.url))+(opt.buttons.twitter.via !== '' ? '&via='+opt.buttons.twitter.via : ''), "", "toolbar=0, status=0, width=650, height=360");
		},
		digg: function(opt){
			window.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((opt.buttons.digg.url !== '' ? opt.buttons.digg.url : opt.url))+"&title="+opt.text+"&related=true&style=true", "", "toolbar=0, status=0, width=650, height=360");
		},
		delicious: function(opt){
			window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&title='+opt.text, 'delicious', 'toolbar=no,width=550,height=550');
		},
		stumbleupon: function(opt){
			window.open('http://www.stumbleupon.com/badge/?url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url)), 'stumbleupon', 'toolbar=no,width=550,height=550');
		},
		linkedin: function(opt){
			window.open('https://www.linkedin.com/cws/share?url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&token=&isFramed=true', 'linkedin', 'toolbar=no,width=550,height=550');
		},
		pinterest: function(opt){
			window.open('http://pinterest.com/pin/create/button/?url='+encodeURIComponent((opt.buttons.pinterest.url !== '' ? opt.buttons.pinterest.url : opt.url)) + ( opt.buttons.pinterest.media !=='' ? '&media='+encodeURIComponent(opt.buttons.pinterest.media) : '' ) +'&description='+opt.buttons.pinterest.description, 'pinterest', 'toolbar=no,width=700,height=300');
		}
	};

	/* Plugin constructor
	================================================== */
	function Plugin( element, options ) {
		this.element = element;

		this.options = $.extend( true, {}, defaults, options);
		this.options.share = options.share; //simple solution to allow order of buttons

		this._defaults = defaults;
		this._name = pluginName;

		this.init();
	};

	/* Initialization method
	================================================== */
	Plugin.prototype.init = function () {
		var self = this;
		if(this.options.urlCurl !== ''){
			urlJson.googlePlus = this.options.urlCurl + 'url={url}&type=googlePlus'; // PHP script for GooglePlus...
			urlJson.stumbleupon = this.options.urlCurl + 'url={url}&type=stumbleupon'; // PHP script for Stumbleupon...
			//urlJson.pinterest = this.options.urlCurl + 'url={url}&type=pinterest'; // PHP script for Pinterest...
		}
		$(this.element).addClass(this.options.className); //add class

		//HTML5 Custom data
		if(typeof $(this.element).data('title') !== 'undefined'){
			this.options.title = $(this.element).attr('data-title');
		}
		if(typeof $(this.element).data('url') !== 'undefined'){
			this.options.url = $(this.element).data('url');
		}
		if(typeof $(this.element).data('text') !== 'undefined'){
			this.options.text = $(this.element).data('text');
		}

		//how many social website have been selected
		$.each(this.options.share, function(name, val) {
			if(val === true){
				self.options.shareTotal ++;
			}
		});

		if(self.options.enableCounter === true){  //if for some reason you don't need counter
			//get count of social share that have been selected
			$.each(this.options.share, function(name, val) {
				if(val === true){
					//self.getSocialJson(name);
					try {
						self.getSocialJson(name);
					} catch(e){
					}
				}
			});
		}
		else if(self.options.template !== ''){  //for personalized button (with template)
			this.options.render(this, this.options);
		}
		else{ // if you want to use official button like example 3 or 5
			this.loadButtons();
		}

		//add hover event
		$(this.element).hover(function(){
			//load social button if enable and 1 time
			if($(this).find('.buttons').length === 0 && self.options.enableHover === true){
				self.loadButtons();
			}
			self.options.hover(self, self.options);
		}, function(){
			self.options.hide(self, self.options);
		});

		//click event
		$(this.element).click(function(){
			self.options.click(self, self.options);
			return false;
		});
	};

	/* loadButtons methode
	================================================== */
	Plugin.prototype.loadButtons = function () {
		var self = this;
		$(this.element).append('<div class="buttons"></div>');
		$.each(self.options.share, function(name, val) {
			if(val == true){
				loadButton[name](self);
				if(self.options.enableTracking === true){ //add tracking
					tracking[name]();
				}
			}
		});
	};

	/* getSocialJson methode
	================================================== */
	Plugin.prototype.getSocialJson = function (name) {
		var self = this,
		count = 0,
		url = urlJson[name].replace('{url}', encodeURIComponent(this.options.url));
		if(this.options.buttons[name].urlCount === true && this.options.buttons[name].url !== ''){
			url = urlJson[name].replace('{url}', this.options.buttons[name].url);
		}

		//console.log('name : ' + name + ' - url : '+url); //debug
		if(url != '' && self.options.urlCurl !== ''){  //urlCurl = '' if you don't want to used PHP script but used social button
			$.getJSON(url, function(json){

				if(typeof json.count !== "undefined"){  //GooglePlus, Stumbleupon, Twitter and Digg
					var temp = json.count + '';
					temp = temp.replace('\u00c2\u00a0', '');  //remove google plus special chars
					count += parseInt(temp, 10);
				}
				//get the FB total count (shares, likes and more)
				else if(json.data && json.data.length > 0 && typeof json.data[0].total_count !== "undefined"){ //Facebook total count
					count += parseInt(json.data[0].total_count, 10);
				}
				else if(typeof json.share !== "undefined" && typeof json.share.share_count !== "undefined"){  //Facebook
				 count += parseInt(json.share.share_count, 10);
				}
				else if(typeof json.shares !== "undefined"){  //Facebook
				 count += parseInt(json.shares, 10);
				}
				else if(typeof json[0] !== "undefined"){  //Delicious
					count += parseInt(json[0].total_posts, 10);
				}
				else if(typeof json[0] !== "undefined"){  //Stumbleupon
				}
				self.options.count[name] = count;
				self.options.total += count;
				self.renderer();
				self.rendererPerso();
				//console.log(json); //debug
			})
			.error(function() {
				self.options.count[name] = 0;
				self.rendererPerso();
			 });
		}
		else{
			self.renderer();
			self.options.count[name] = 0;
			self.rendererPerso();
		}
	};

	/* launch render methode
	================================================== */
	Plugin.prototype.rendererPerso = function () {
		//check if this is the last social website to launch render
		var shareCount = 0;
		for (e in this.options.count) { shareCount++; }
		if(shareCount === this.options.shareTotal){
			this.options.render(this, this.options);
		}
	};

	/* render methode
	================================================== */
	Plugin.prototype.renderer = function () {
		var total = this.options.total,
		template = this.options.template;
		if(this.options.shorterTotal === true){  //format number like 1.2k or 5M
			total = this.shorterTotal(total);
		}

		if(template !== ''){  //if there is a template
			template = template.replace('{total}', total);

			if (this.options.title !== '')
				template = template.replace('{title}', this.options.title);

			$(this.element).html(template);
		}
		else{ //template by defaults
			$(this.element).html(
				'<div class="box"><a class="count" href="#">' + total + '</a>' +
				(this.options.title !== '' ? '<a class="share" href="#">' + this.options.title + '</a>' : '') +
				'</div>'
			);
		}
	};

	/* format total numbers like 1.2k or 5M
	================================================== */
	Plugin.prototype.shorterTotal = function (num) {
		if (num >= 1e6){
			num = (num / 1e6).toFixed(2) + "M"
		} else if (num >= 1e3){
			num = (num / 1e3).toFixed(1) + "k"
		}
		return num;
	};

	/* Methode for open popup
	================================================== */
	Plugin.prototype.openPopup = function (site) {
		popup[site](this.options);  //open
		if(this.options.enableTracking === true){ //tracking!
			var tracking = {
				googlePlus: {site: 'Google', action: '+1'},
				facebook: {site: 'facebook', action: 'like'},
				twitter: {site: 'twitter', action: 'tweet'},
				digg: {site: 'digg', action: 'add'},
				delicious: {site: 'delicious', action: 'add'},
				stumbleupon: {site: 'stumbleupon', action: 'add'},
				linkedin: {site: 'linkedin', action: 'share'},
				pinterest: {site: 'pinterest', action: 'pin'}
			};
			_gaq.push(['_trackSocial', tracking[site].site, tracking[site].action]);
		}
	};

	/* Methode for add +1 to a counter
	================================================== */
	Plugin.prototype.simulateClick = function () {
		var html = $(this.element).html();
		$(this.element).html(html.replace(this.options.total, this.options.total+1));
	};

	/* Methode for add +1 to a counter
	================================================== */
	Plugin.prototype.update = function (url, text) {
		if(url !== ''){
			this.options.url = url;
		}
		if(text !== ''){
			this.options.text = text;
		}
	};

	/* A really lightweight plugin wrapper around the constructor, preventing against multiple instantiations
	================================================== */
	$.fn[pluginName] = function ( options ) {
		var args = arguments;
		if (options === undefined || typeof options === 'object') {
			return this.each(function () {
				if (!$.data(this, 'plugin_' + pluginName)) {
					$.data(this, 'plugin_' + pluginName, new Plugin( this, options ));
				}
			});
		} else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
			return this.each(function () {
				var instance = $.data(this, 'plugin_' + pluginName);
				if (instance instanceof Plugin && typeof instance[options] === 'function') {
					instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) );
				}
			});
		}
	};
})(jQuery, window, document);

jQuery(document).ready(function(){

	var template_scheme = '';
		template_scheme	+=	'<div class="ui--sharrre-box">';
		template_scheme += '	<h5><a class="ui--sharrre-count" href="#">{total}</a></h5>';
		template_scheme += '	<a class="btn {button_class} btn-block btn-small" href="#">{title}</a>';
		template_scheme += '</div>';

	/** Twitter */
	jQuery('.ui--sharrre-twitter').sharrre({
		share: {
			twitter: true
		},
		enableHover: false,
		enableTracking: (typeof _gaq == 'object'),
		click: function(api, options){
			api.simulateClick();
			api.openPopup('twitter');
			return false;
		},
		template: template_scheme.replace('{button_class}', 'btn-twitter'),
		urlCurl: CloudFwOp.ajaxUrl + '?action=cloudfw_sharrre_json&'
	});

	/** Facebook */
	jQuery('.ui--sharrre-facebook').sharrre({
		share: {
			facebook: true
		},
		enableHover: false,
		enableTracking: (typeof _gaq == 'object'),
		click: function(api, options){
			api.simulateClick();
			api.openPopup('facebook');
			return false;
		},
		template: template_scheme.replace('{button_class}', 'btn-facebook'),
		lang: CloudFwOp.lang != '' ? CloudFwOp.lang.replace('-', '_') : null,
		urlCurl: CloudFwOp.ajaxUrl + '?action=cloudfw_sharrre_json&'
	});

	/** Google Plus */
	jQuery('.ui--sharrre-googleplus').sharrre({
		share: {
			googlePlus: true
		},
		enableHover: false,
		enableTracking: (typeof _gaq == 'object'),
		click: function(api, options){
			api.simulateClick();
			api.openPopup('googlePlus');
			return false;
		},
		template: template_scheme.replace('{button_class}', 'btn-googleplus'),
		lang: CloudFwOp.lang.replace('_', '-'),
		urlCurl: CloudFwOp.ajaxUrl + '?action=cloudfw_sharrre_json&'
	});

	/** LinkedIn */
	jQuery('.ui--sharrre-linkedin').sharrre({
		share: {
			linkedin: true
		},
		enableHover: false,
		enableTracking: (typeof _gaq == 'object'),
		click: function(api, options){
			api.simulateClick();
			api.openPopup('linkedin');
			return false;
		},
		template: template_scheme.replace('{button_class}', 'btn-linkedin'),
		urlCurl: CloudFwOp.ajaxUrl + '?action=cloudfw_sharrre_json&'
	});

	/** Pinterest */
	jQuery('.ui--sharrre-pinterest').each(function(){
		var that = jQuery(this);
		that.sharrre({
			share: {
				pinterest: true
			},
			enableHover: false,
			enableTracking: (typeof _gaq == 'object'),
			click: function(api, options){
				api.simulateClick();
				api.openPopup('pinterest');
				return false;
			},
			buttons: {
				pinterest: {
					media: that.attr('data-featured-image')
				}
			},
			template: template_scheme.replace('{button_class}', 'btn-pinterest'),
			urlCurl: CloudFwOp.ajaxUrl + '?action=cloudfw_sharrre_json&'
		});
	});

});