-GloSC
- -GlosSC or Global SteamController is a small set of tools that allows you to use your SteamController as a systemwide XInput-controller alongside a systemwide (borderless window) Steam overlay -All complete with per application bindings and working rumble emulation.
- -GloSC can also launch any of your favorite Games and directly add them to Steam, be it Win32 or UWP!
- -It is the tool to enjoy any Game that has trouble with Steam and add extra functionality to your SteamController
- -
--FAQ / Troubleshooting
- --
-
Q: The overlay isn't showing up! -A: The overlay only works for windowed or borderless windowed mode applications. Nothing much I can do here. - This is even true for UWP-Games! While it's true that UWP doesn't run exclusive fullscreen, they don't run, strictly speaking, classical borderless window either - Try running your games as borderless window
-Q: Audio turns off when using this -A: ViGEm emulates a full X360-controller incl. peripherals -Go to your windows sound mixer and reset you default playback device - It should be fixed, even for the next shortcut launches
-Q: Hitting the Steam Button + RT to take a screenshot doesn't work -A: Another limitation that most likely won't be fixed, even if Steam would take a screenshot, you'd most likely get just a blank image
-Q: UWP Games don't launch in foreground -A: For some reason trying to launch them in foreground stops them fron launching entirely - For now use alt+tab via Steam-chords - This is currently beeing investigated
-
-
-It is built using Qt 5.7 and uses SFML for drawing the overlay
- -The systemwide Xbox-Controller works via ViGEm
- -GloSC consists of:
- --
-
- A main application ("GloSC") allowing you to create and configure new shortcuts or "SteamTargets" and automatically add them to Steam -
- The "GloSC-GameLauncher" which can launch Win32 and UWP games and mainly exists to work around dual overlays -
- The "SteamTarget" which does most of the magic - Showing the overlay to the user as well as talking to the ViGEm-driver for systemwide Controller emulation -
Like my stuff? Consider donating to my PayPal
- -Work in progress
- --License
- -Copyright 2016 Peter Repukat - FlatspotSoftware
-
+
+
+
+
+ GloSC - Global SteamController
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tool for using the SteamController as systemwide XInput controller alongside a global overlay
+
+
+ GloSC allows you to use your SteamController as a systemwide XInput-controller alongside a systemwide (borderless window) Steam overlay
+
+ All complete with per application bindings and working rumble emulation.
+
+ GloSC can also launch any of your favorite Games and directly add them to Steam, be it Win32 or UWP!
+
+ It is the tool to enjoy any Game that has trouble with Steam and/or add extra functionality to your SteamController
+
+
+
+
+
+
+
+
+
+
+
+ Troubleshooting
+
+
+
+
+
+
+
+
+
+
+
+ Q: The overlay isn't showing up!
+
+ A: The overlay only works for windowed or borderless windowed mode applications. Nothing much I can do here.
+ This is even true for UWP-Games! While it's true that UWP doesn't run exclusive fullscreen, they don't run, strictly speaking, classical borderless window either
+ Try running your games as borderless window
+
+
+
+ Q: Audio turns off when using this
+
+ A: ViGEm emulates a full X360-controller incl. peripherals
+ Go to your windows sound mixer and reset you default playback device - It should be fixed, even for the next shortcut launches
+
+
+
+ Q: Multiple different controllers are not working
+
+ A: Will probably be fixed in the long run, for now we have to wait for a new ViGEm release.
+
+
+
+ Q: Hitting the Steam Button + RT to take a screenshot doesn't work
+
+ A: Another limitation that most likely won't be fixed, even if Steam would take a screenshot, you'd most likely get just a blank image
+
+
+
+ Q: UWP Games don't launch in foreground
+
+ A: For some reason trying to launch them in foreground stops them fron launching entirely
+ For now use alt+tab via Steam-chords
+ This is currently beeing investigated
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/js/init.js b/js/init.js
new file mode 100644
index 0000000..d9e58b7
--- /dev/null
+++ b/js/init.js
@@ -0,0 +1,8 @@
+(function($){
+ $(function(){
+
+ $('.button-collapse').sideNav();
+ $('.parallax').parallax();
+
+ }); // end of document ready
+})(jQuery); // end of jQuery name space
\ No newline at end of file
diff --git a/js/materialize.js b/js/materialize.js
new file mode 100644
index 0000000..82b1af6
--- /dev/null
+++ b/js/materialize.js
@@ -0,0 +1,7778 @@
+/*!
+ * Materialize v0.97.8 (http://materializecss.com)
+ * Copyright 2014-2015 Materialize
+ * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
+ */
+// Check for jQuery.
+if (typeof(jQuery) === 'undefined') {
+ var jQuery;
+ // Check if require is a defined function.
+ if (typeof(require) === 'function') {
+ jQuery = $ = require('jquery');
+ // Else use the dollar sign alias.
+ } else {
+ jQuery = $;
+ }
+}
+;/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+jQuery.easing['jswing'] = jQuery.easing['swing'];
+
+jQuery.extend( jQuery.easing,
+{
+ def: 'easeOutQuad',
+ swing: function (x, t, b, c, d) {
+ //alert(jQuery.easing.default);
+ return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+ },
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ },
+ easeInCubic: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t + b;
+ },
+ easeOutCubic: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+ },
+ easeInOutCubic: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+ },
+ easeInQuart: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t + b;
+ },
+ easeOutQuart: function (x, t, b, c, d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+ },
+ easeInOutQuart: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+ },
+ easeInQuint: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t*t + b;
+ },
+ easeOutQuint: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+ },
+ easeInOutQuint: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+ },
+ easeInSine: function (x, t, b, c, d) {
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+ },
+ easeOutSine: function (x, t, b, c, d) {
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
+ },
+ easeInOutSine: function (x, t, b, c, d) {
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInCirc: function (x, t, b, c, d) {
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+ },
+ easeOutCirc: function (x, t, b, c, d) {
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+ },
+ easeInOutCirc: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+ },
+ easeInElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ },
+ easeOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+ },
+ easeInOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+ },
+ easeInBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+ },
+ easeOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+ },
+ easeInOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+ },
+ easeInBounce: function (x, t, b, c, d) {
+ return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+ },
+ easeOutBounce: function (x, t, b, c, d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+ },
+ easeInOutBounce: function (x, t, b, c, d) {
+ if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+ return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+ }
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */; // Custom Easing
+ jQuery.extend( jQuery.easing,
+ {
+ easeInOutMaterial: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return c/4*((t-=2)*t*t + 2) + b;
+ }
+ });
+
+;/*! VelocityJS.org (1.2.3). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */
+/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */
+/*! Note that this has been modified by Materialize to confirm that Velocity is not already being imported. */
+jQuery.Velocity?console.log("Velocity is already loaded. You may be needlessly importing Velocity again; note that Materialize includes Velocity."):(!function(e){function t(e){var t=e.length,a=r.type(e);return"function"===a||r.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===a||0===t||"number"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var r=function(e,t){return new r.fn.init(e,t)};r.isWindow=function(e){return null!=e&&e==e.window},r.type=function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e},r.isArray=Array.isArray||function(e){return"array"===r.type(e)},r.isPlainObject=function(e){var t;if(!e||"object"!==r.type(e)||e.nodeType||r.isWindow(e))return!1;try{if(e.constructor&&!o.call(e,"constructor")&&!o.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(a){return!1}for(t in e);return void 0===t||o.call(e,t)},r.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},r.data=function(e,t,n){if(void 0===n){var o=e[r.expando],i=o&&a[o];if(void 0===t)return i;if(i&&t in i)return i[t]}else if(void 0!==t){var o=e[r.expando]||(e[r.expando]=++r.uuid);return a[o]=a[o]||{},a[o][t]=n,n}},r.removeData=function(e,t){var n=e[r.expando],o=n&&a[n];o&&r.each(t,function(e,t){delete o[t]})},r.extend=function(){var e,t,a,n,o,i,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[l]||{},l++),"object"!=typeof s&&"function"!==r.type(s)&&(s={}),l===u&&(s=this,l--);u>l;l++)if(null!=(o=arguments[l]))for(n in o)e=s[n],a=o[n],s!==a&&(c&&a&&(r.isPlainObject(a)||(t=r.isArray(a)))?(t?(t=!1,i=e&&r.isArray(e)?e:[]):i=e&&r.isPlainObject(e)?e:{},s[n]=r.extend(c,i,a)):void 0!==a&&(s[n]=a));return s},r.queue=function(e,a,n){function o(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,"string"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){a=(a||"fx")+"queue";var i=r.data(e,a);return n?(!i||r.isArray(n)?i=r.data(e,a,o(n)):i.push(n),i):i||[]}},r.dequeue=function(e,t){r.each(e.nodeType?[e]:e,function(e,a){t=t||"fx";var n=r.queue(a,t),o=n.shift();"inprogress"===o&&(o=n.shift()),o&&("fx"===t&&n.unshift("inprogress"),o.call(a,function(){r.dequeue(a,t)}))})},r.fn=r.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error("Not a DOM node.")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&"html"===!e.nodeType.toLowerCase&&"static"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),a=this.offset(),n=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:r(e).offset();return a.top-=parseFloat(t.style.marginTop)||0,a.left-=parseFloat(t.style.marginLeft)||0,e.style&&(n.top+=parseFloat(e.style.borderTopWidth)||0,n.left+=parseFloat(e.style.borderLeftWidth)||0),{top:a.top-n.top,left:a.left-n.left}}};var a={};r.expando="velocity"+(new Date).getTime(),r.uuid=0;for(var n={},o=n.hasOwnProperty,i=n.toString,s="Boolean Number String Function Array Date RegExp Object Error".split(" "),l=0;ln;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S="Float32Array"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if("number"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T="generateBezier("+[e,r,a,n]+")";return C.toString=function(){return T},C}function u(e,t){var r=e;return m.isString(e)?b.Easings[e]||(r=!1):r=m.isArray(e)&&1===e.length?s.apply(null,e):m.isArray(e)&&2===e.length?x.apply(null,e.concat([t])):m.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=b.Easings[b.defaults.easing]?b.defaults.easing:v),r}function c(e){if(e){var t=(new Date).getTime(),r=b.State.calls.length;r>1e4&&(b.State.calls=n(b.State.calls));for(var o=0;r>o;o++)if(b.State.calls[o]){var s=b.State.calls[o],l=s[0],u=s[2],d=s[3],g=!!d,y=null;d||(d=b.State.calls[o][3]=t-16);for(var h=Math.min((t-d)/u.duration,1),v=0,x=l.length;x>v;v++){var P=l[v],V=P.element;if(i(V)){var C=!1;if(u.display!==a&&null!==u.display&&"none"!==u.display){if("flex"===u.display){var T=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];f.each(T,function(e,t){S.setPropertyValue(V,"display",t)})}S.setPropertyValue(V,"display",u.display)}u.visibility!==a&&"hidden"!==u.visibility&&S.setPropertyValue(V,"visibility",u.visibility);for(var k in P)if("element"!==k){var A,F=P[k],j=m.isString(F.easing)?b.Easings[F.easing]:F.easing;if(1===h)A=F.endValue;else{var E=F.endValue-F.startValue;if(A=F.startValue+E*j(h,u,E),!g&&A===F.currentValue)continue}if(F.currentValue=A,"tween"===k)y=A;else{if(S.Hooks.registered[k]){var H=S.Hooks.getRoot(k),N=i(V).rootPropertyValueCache[H];N&&(F.rootPropertyValue=N)}var L=S.setPropertyValue(V,k,F.currentValue+(0===parseFloat(A)?"":F.unitType),F.rootPropertyValue,F.scrollData);S.Hooks.registered[k]&&(i(V).rootPropertyValueCache[H]=S.Normalizations.registered[H]?S.Normalizations.registered[H]("extract",null,L[1]):L[1]),"transform"===L[0]&&(C=!0)}}u.mobileHA&&i(V).transformCache.translate3d===a&&(i(V).transformCache.translate3d="(0px, 0px, 0px)",C=!0),C&&S.flushTransformCache(V)}}u.display!==a&&"none"!==u.display&&(b.State.calls[o][2].display=!1),u.visibility!==a&&"hidden"!==u.visibility&&(b.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],h,Math.max(0,d+u.duration-t),d,y),1===h&&p(o)}}b.State.isTicking&&w(c)}function p(e,t){if(!b.State.calls[e])return!1;for(var r=b.State.calls[e][0],n=b.State.calls[e][1],o=b.State.calls[e][2],s=b.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||("none"===o.display&&S.setPropertyValue(p,"display",o.display),"hidden"===o.visibility&&S.setPropertyValue(p,"visibility",o.visibility)),o.loop!==!0&&(f.queue(p)[1]===a||!/\.velocityQueueEntryFlag/i.test(f.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var d=!1;f.each(S.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp("^\\("+r+"[^.]").test(n)&&(d=!0,delete i(p).transformCache[t])}),o.mobileHA&&(d=!0,delete i(p).transformCache.translate3d),d&&S.flushTransformCache(p),S.Values.removeClass(p,"velocity-animating")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(g){setTimeout(function(){throw g},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&(f.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&"%"===t.unitType&&(t.endValue=0,t.startValue=100)}),b(p,"reverse",{loop:!0,delay:o.delay})),o.queue!==!1&&f.dequeue(p,o.queue)}b.State.calls[e]=!1;for(var m=0,y=b.State.calls.length;y>m;m++)if(b.State.calls[m]!==!1){l=!0;break}l===!1&&(b.State.isTicking=!1,delete b.State.calls,b.State.calls=[])}var f,d=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement("div");if(t.innerHTML="",t.getElementsByTagName("span").length)return t=null,e}return a}(),g=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r,a=(new Date).getTime();return r=Math.max(0,16-(a-e)),e=a+r,setTimeout(function(){t(a+r)},r)}}(),m={isString:function(e){return"string"==typeof e},isArray:Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},isFunction:function(e){return"[object Function]"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return"object"==typeof e&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||"object"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},y=!1;if(e.fn&&e.fn.jquery?(f=e,y=!0):f=t.Velocity.Utilities,8>=d&&!y)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=d)return void(jQuery.fn.velocity=jQuery.fn.animate);var h=400,v="swing",b={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:f,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:"",duration:h,easing:v,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){f.data(e,"velocity",{isSVG:m.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(b.State.scrollAnchor=t,b.State.scrollPropertyLeft="pageXOffset",b.State.scrollPropertyTop="pageYOffset"):(b.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,b.State.scrollPropertyLeft="scrollLeft",b.State.scrollPropertyTop="scrollTop");var x=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o,i,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,p=1e-4,f=.016;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,l.tension=e,l.friction=t,o=null!==n,o?(c=a(e,t),i=c/n*f):i=f;s=r(s||l,i),u.push(1+s.x),c+=16,Math.abs(s.x)>p&&Math.abs(s.v)>p;);return o?function(e){return u[e*(u.length-1)|0]}:c}}();b.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},f.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(e,t){b.Easings[t[0]]=l.apply(null,t[1])});var S=b.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var e=0;e=d)switch(e){case"name":return"filter";case"extract":var a=r.toString().match(/alpha\(opacity=(.*)\)/i);return r=a?a[1]/100:1;case"inject":return t.style.zoom=1,parseFloat(r)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(r),10)+")"}else switch(e){case"name":return"opacity";case"extract":return r;case"inject":return r}}},register:function(){9>=d||b.State.isGingerbread||(S.Lists.transformsBase=S.Lists.transformsBase.concat(S.Lists.transforms3D));for(var e=0;en&&(n=1),o=!/(\d)$/i.test(n);break;case"skew":o=!/(deg|\d)$/i.test(n);break;case"rotate":o=!/(deg|\d)$/i.test(n)}return o||(i(r).transformCache[t]="("+n+")"),i(r).transformCache[t]}}}();for(var e=0;e=d||3!==o.split(" ").length||(o+=" 1"),o;case"inject":return 8>=d?4===n.split(" ").length&&(n=n.split(/\s+/).slice(0,3).join(" ")):3===n.split(" ").length&&(n+=" 1"),(8>=d?"rgb":"rgba")+"("+n.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(d||b.State.isAndroid&&!b.State.isChrome)&&(t+="|transform"),new RegExp("^("+t+")$","i").test(e)},prefixCheck:function(e){if(b.State.prefixMatches[e])return[b.State.prefixMatches[e],!0];for(var t=["","Webkit","Moz","ms","O"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\w/,function(e){return e.toUpperCase()}),m.isString(b.State.prefixElement.style[n]))return b.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t,r=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return e=e.replace(r,function(e,t,r,a){return t+t+r+r+a+a}),t=a.exec(e),t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?"":"px"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?"inline":/^(li)$/i.test(t)?"list-item":/^(tr)$/i.test(t)?"table-row":/^(table)$/i.test(t)?"table":/^(tbody)$/i.test(t)?"table-row-group":"block"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?" ":"")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp("(^|\\s)"+t.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&S.setPropertyValue(e,"display","none")}var l=0;if(8>=d)l=f.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===S.getPropertyValue(e,"display")&&(u=!0,S.setPropertyValue(e,"display",S.Values.getDisplayType(e))),!o){if("height"===r&&"border-box"!==S.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(S.getPropertyValue(e,"borderTopWidth"))||0)-(parseFloat(S.getPropertyValue(e,"borderBottomWidth"))||0)-(parseFloat(S.getPropertyValue(e,"paddingTop"))||0)-(parseFloat(S.getPropertyValue(e,"paddingBottom"))||0);return n(),c}if("width"===r&&"border-box"!==S.getPropertyValue(e,"boxSizing").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(S.getPropertyValue(e,"borderLeftWidth"))||0)-(parseFloat(S.getPropertyValue(e,"borderRightWidth"))||0)-(parseFloat(S.getPropertyValue(e,"paddingLeft"))||0)-(parseFloat(S.getPropertyValue(e,"paddingRight"))||0);return n(),p}}var g;g=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),"borderColor"===r&&(r="borderTopColor"),l=9===d&&"filter"===r?g.getPropertyValue(r):g[r],(""===l||null===l)&&(l=e.style[r]),n()}if("auto"===l&&/^(top|right|bottom|left)$/i.test(r)){var m=s(e,"position");("fixed"===m||"absolute"===m&&/top|left/i.test(r))&&(l=f(e).position()[r]+"px")}return l}var l;if(S.Hooks.registered[r]){var u=r,c=S.Hooks.getRoot(u);n===a&&(n=S.getPropertyValue(e,S.Names.prefixCheck(c)[0])),S.Normalizations.registered[c]&&(n=S.Normalizations.registered[c]("extract",e,n)),l=S.Hooks.extractValue(u,n)}else if(S.Normalizations.registered[r]){var p,g;p=S.Normalizations.registered[r]("name",e),"transform"!==p&&(g=s(e,S.Names.prefixCheck(p)[0]),S.Values.isCSSNullValue(g)&&S.Hooks.templates[r]&&(g=S.Hooks.templates[r][1])),l=S.Normalizations.registered[r]("extract",e,g)}if(!/^[\d-]/.test(l))if(i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(m){l=0}else l=e.getAttribute(r);else l=s(e,S.Names.prefixCheck(r)[0]);return S.Values.isCSSNullValue(l)&&(l=0),b.debug>=2&&console.log("Get "+r+": "+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if("scroll"===r)o.container?o.container["scroll"+o.direction]=a:"Left"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(S.Normalizations.registered[r]&&"transform"===S.Normalizations.registered[r]("name",e))S.Normalizations.registered[r]("inject",e,a),s="transform",a=i(e).transformCache[r];else{if(S.Hooks.registered[r]){var l=r,u=S.Hooks.getRoot(r);n=n||S.getPropertyValue(e,u),a=S.Hooks.injectValue(l,a,n),r=u}if(S.Normalizations.registered[r]&&(a=S.Normalizations.registered[r]("inject",e,a),r=S.Normalizations.registered[r]("name",e)),s=S.Names.prefixCheck(r)[0],8>=d)try{e.style[s]=a}catch(c){b.debug&&console.log("Browser does not support ["+a+"] for ["+s+"]")}else i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;b.debug>=2&&console.log("Set "+r+" ("+s+"): "+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(S.getPropertyValue(e,t))}var r="";if((d||b.State.isAndroid&&!b.State.isChrome)&&i(e).isSVG){var a={translate:[t("translateX"),t("translateY")],skewX:[t("skewX")],skewY:[t("skewY")],scale:1!==t("scale")?[t("scale"),t("scale")]:[t("scaleX"),t("scaleY")],rotate:[t("rotateZ"),0,0]};f.each(i(e).transformCache,function(e){/^translate/i.test(e)?e="translate":/^scale/i.test(e)?e="scale":/^rotate/i.test(e)&&(e="rotate"),a[e]&&(r+=e+"("+a[e].join(" ")+") ",delete a[e])})}else{var n,o;f.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],"transformPerspective"===t?(o=n,!0):(9===d&&"rotateZ"===t&&(t="rotate"),void(r+=t+n+" "))}),o&&(r="perspective"+o+" "+r)}S.setPropertyValue(e,"transform",r)}};S.Hooks.register(),S.Normalizations.register(),b.hook=function(e,t,r){var n=a;return e=o(e),f.each(e,function(e,o){if(i(o)===a&&b.init(o),r===a)n===a&&(n=b.CSS.getPropertyValue(o,t));else{var s=b.CSS.setPropertyValue(o,t,r);"transform"===s[0]&&b.CSS.flushTransformCache(o),n=s}}),n};var P=function(){function e(){return s?k.promise||null:l}function n(){function e(e){function p(e,t){var r=a,n=a,i=a;return m.isArray(e)?(r=e[0],!m.isArray(e[1])&&/^[\d-]/.test(e[1])||m.isFunction(e[1])||S.RegEx.isHex.test(e[1])?i=e[1]:(m.isString(e[1])&&!S.RegEx.isHex.test(e[1])||m.isArray(e[1]))&&(n=t?e[1]:u(e[1],s.duration),e[2]!==a&&(i=e[2]))):r=e,t||(n=n||s.easing),m.isFunction(r)&&(r=r.call(o,V,w)),m.isFunction(i)&&(i=i.call(o,V,w)),[r||0,n,i]}function d(e,t){var r,a;return a=(t||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,""}),r||(r=S.Values.getUnitType(e)),[a,r]}function h(){var e={myParent:o.parentNode||r.body,position:S.getPropertyValue(o,"position"),fontSize:S.getPropertyValue(o,"fontSize")},a=e.position===L.lastPosition&&e.myParent===L.lastParent,n=e.fontSize===L.lastFontSize;L.lastParent=e.myParent,L.lastPosition=e.position,L.lastFontSize=e.fontSize;var s=100,l={};if(n&&a)l.emToPx=L.lastEmToPx,l.percentToPxWidth=L.lastPercentToPxWidth,l.percentToPxHeight=L.lastPercentToPxHeight;else{var u=i(o).isSVG?r.createElementNS("http://www.w3.org/2000/svg","rect"):r.createElement("div");b.init(u),e.myParent.appendChild(u),f.each(["overflow","overflowX","overflowY"],function(e,t){b.CSS.setPropertyValue(u,t,"hidden")}),b.CSS.setPropertyValue(u,"position",e.position),b.CSS.setPropertyValue(u,"fontSize",e.fontSize),b.CSS.setPropertyValue(u,"boxSizing","content-box"),f.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(e,t){b.CSS.setPropertyValue(u,t,s+"%")}),b.CSS.setPropertyValue(u,"paddingLeft",s+"em"),l.percentToPxWidth=L.lastPercentToPxWidth=(parseFloat(S.getPropertyValue(u,"width",null,!0))||1)/s,l.percentToPxHeight=L.lastPercentToPxHeight=(parseFloat(S.getPropertyValue(u,"height",null,!0))||1)/s,l.emToPx=L.lastEmToPx=(parseFloat(S.getPropertyValue(u,"paddingLeft"))||1)/s,e.myParent.removeChild(u)}return null===L.remToPx&&(L.remToPx=parseFloat(S.getPropertyValue(r.body,"fontSize"))||16),null===L.vwToPx&&(L.vwToPx=parseFloat(t.innerWidth)/100,L.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=L.remToPx,l.vwToPx=L.vwToPx,l.vhToPx=L.vhToPx,b.debug>=1&&console.log("Unit ratios: "+JSON.stringify(l),o),l}if(s.begin&&0===V)try{s.begin.call(g,g)}catch(x){setTimeout(function(){throw x},1)}if("scroll"===A){var P,C,T,F=/^x$/i.test(s.axis)?"Left":"Top",j=parseFloat(s.offset)||0;s.container?m.isWrapped(s.container)||m.isNode(s.container)?(s.container=s.container[0]||s.container,P=s.container["scroll"+F],T=P+f(o).position()[F.toLowerCase()]+j):s.container=null:(P=b.State.scrollAnchor[b.State["scrollProperty"+F]],C=b.State.scrollAnchor[b.State["scrollProperty"+("Left"===F?"Top":"Left")]],T=f(o).offset()[F.toLowerCase()]+j),l={scroll:{rootPropertyValue:!1,startValue:P,currentValue:P,endValue:T,unitType:"",easing:s.easing,scrollData:{container:s.container,direction:F,alternateValue:C}},element:o},b.debug&&console.log("tweensContainer (scroll): ",l.scroll,o)}else if("reverse"===A){if(!i(o).tweensContainer)return void f.dequeue(o,s.queue);"none"===i(o).opts.display&&(i(o).opts.display="auto"),"hidden"===i(o).opts.visibility&&(i(o).opts.visibility="visible"),i(o).opts.loop=!1,i(o).opts.begin=null,i(o).opts.complete=null,v.easing||delete s.easing,v.duration||delete s.duration,s=f.extend({},i(o).opts,s);var E=f.extend(!0,{},i(o).tweensContainer);for(var H in E)if("element"!==H){var N=E[H].startValue;E[H].startValue=E[H].currentValue=E[H].endValue,E[H].endValue=N,m.isEmptyObject(v)||(E[H].easing=s.easing),b.debug&&console.log("reverse tweensContainer ("+H+"): "+JSON.stringify(E[H]),o)}l=E}else if("start"===A){var E;i(o).tweensContainer&&i(o).isAnimating===!0&&(E=i(o).tweensContainer),f.each(y,function(e,t){if(RegExp("^"+S.Lists.colors.join("$|^")+"$").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(S.RegEx.isHex.test(n)){for(var s=["Red","Green","Blue"],l=S.Values.hexToRgb(n),u=i?S.Values.hexToRgb(i):a,c=0;cO;O++){var q={delay:j.delay,progress:j.progress};O===z-1&&(q.display=j.display,q.visibility=j.visibility,q.complete=j.complete),P(g,"reverse",q)}return e()}};b=f.extend(P,b),b.animate=P;var w=t.requestAnimationFrame||g;return b.State.isMobile||r.hidden===a||r.addEventListener("visibilitychange",function(){r.hidden?(w=function(e){return setTimeout(function(){e(!0)},16)},c()):w=t.requestAnimationFrame||g}),e.Velocity=b,e!==t&&(e.fn.velocity=P,e.fn.velocity.defaults=b.defaults),f.each(["Down","Up"],function(e,t){b.Redirects["slide"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u=l.begin,c=l.complete,p={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},d={};l.display===a&&(l.display="Down"===t?"inline"===b.CSS.Values.getDisplayType(e)?"inline-block":"block":"none"),l.begin=function(){u&&u.call(i,i);for(var r in p){d[r]=e.style[r];var a=b.CSS.getPropertyValue(e,r);p[r]="Down"===t?[a,0]:[0,a]}d.overflow=e.style.overflow,e.style.overflow="hidden"},l.complete=function(){for(var t in d)e.style[t]=d[t];c&&c.call(i,i),s&&s.resolver(i)},b(e,p,l)}}),f.each(["In","Out"],function(e,t){b.Redirects["fade"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u={opacity:"In"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display="In"===t?"auto":"none"),b(this,u,l)}}),b}(window.jQuery||window.Zepto||window,window,document)}));
+;!function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d);b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b);var k=a.element;v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;if(b.eventType!=R&&(e>N||c.velocity===d)){var k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l);g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b}else f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction;b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=z(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel";p(Ab,ab,{handler:function(a){var b=xb[a.type];if(b===O&&(this.started=!0),this.started){var c=Bb.call(this,a,b);b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}});var Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel";p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y";Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){if(!Ib){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return b.preventDefault(),void 0;var d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb);return e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32;Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;af?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance= 0 && !requestAnimationFrame) {
+ requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame'];
+ cancelAnimationFrame = window[vendors[i] + 'CancelRequestAnimationFrame'];
+ }
+
+ // polyfill with setTimeout fallback
+ // heavily inspired from @darius gist mod: https://gist.github.com/paulirish/1579671#comment-837945
+ if (!requestAnimationFrame || !cancelAnimationFrame) {
+ requestAnimationFrame = function(callback) {
+ var now = +Date.now(),
+ nextTime = Math.max(lastTime + 16, now);
+ return setTimeout(function() {
+ callback(lastTime = nextTime);
+ }, nextTime - now);
+ };
+
+ cancelAnimationFrame = clearTimeout;
+ }
+
+ // export to window
+ window.requestAnimationFrame = requestAnimationFrame;
+ window.cancelAnimationFrame = cancelAnimationFrame;
+}(window));
+
+
+// Unique ID
+Materialize.guid = (function() {
+ function s4() {
+ return Math.floor((1 + Math.random()) * 0x10000)
+ .toString(16)
+ .substring(1);
+ }
+ return function() {
+ return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
+ s4() + '-' + s4() + s4() + s4();
+ };
+})();
+
+/**
+ * Escapes hash from special characters
+ * @param {string} hash String returned from this.hash
+ * @returns {string}
+ */
+Materialize.escapeHash = function(hash) {
+ return hash.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
+};
+
+Materialize.elementOrParentIsFixed = function(element) {
+ var $element = $(element);
+ var $checkElements = $element.add($element.parents());
+ var isFixed = false;
+ $checkElements.each(function(){
+ if ($(this).css("position") === "fixed") {
+ isFixed = true;
+ return false;
+ }
+ });
+ return isFixed;
+};
+
+// Velocity has conflicts when loaded with jQuery, this will check for it
+// First, check if in noConflict mode
+var Vel;
+if (jQuery) {
+ Vel = jQuery.Velocity;
+} else if ($) {
+ Vel = $.Velocity;
+} else {
+ Vel = Velocity;
+}
+;(function ($) {
+ $.fn.collapsible = function(options) {
+ var defaults = {
+ accordion: undefined,
+ onOpen: undefined,
+ onClose: undefined
+ };
+
+ options = $.extend(defaults, options);
+
+
+ return this.each(function() {
+
+ var $this = $(this);
+
+ var $panel_headers = $(this).find('> li > .collapsible-header');
+
+ var collapsible_type = $this.data("collapsible");
+
+ // Turn off any existing event handlers
+ $this.off('click.collapse', '> li > .collapsible-header');
+ $panel_headers.off('click.collapse');
+
+
+ /****************
+ Helper Functions
+ ****************/
+
+ // Accordion Open
+ function accordionOpen(object) {
+ $panel_headers = $this.find('> li > .collapsible-header');
+ if (object.hasClass('active')) {
+ object.parent().addClass('active');
+ }
+ else {
+ object.parent().removeClass('active');
+ }
+ if (object.parent().hasClass('active')){
+ object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
+ }
+ else{
+ object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
+ }
+
+ $panel_headers.not(object).removeClass('active').parent().removeClass('active');
+
+ // Close previously open accordion elements.
+ $panel_headers.not(object).parent().children('.collapsible-body').stop(true,false).each(function() {
+ if ($(this).is(':visible')) {
+ $(this).slideUp({
+ duration: 350,
+ easing: "easeOutQuart",
+ queue: false,
+ complete:
+ function() {
+ $(this).css('height', '');
+ execCallbacks($(this).siblings('.collapsible-header'));
+ }
+ });
+ }
+ });
+ }
+
+ // Expandable Open
+ function expandableOpen(object) {
+ if (object.hasClass('active')) {
+ object.parent().addClass('active');
+ }
+ else {
+ object.parent().removeClass('active');
+ }
+ if (object.parent().hasClass('active')){
+ object.siblings('.collapsible-body').stop(true,false).slideDown({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
+ }
+ else {
+ object.siblings('.collapsible-body').stop(true,false).slideUp({ duration: 350, easing: "easeOutQuart", queue: false, complete: function() {$(this).css('height', '');}});
+ }
+ }
+
+ // Open collapsible. object: .collapsible-header
+ function collapsibleOpen(object) {
+ if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion
+ accordionOpen(object);
+ } else { // Handle Expandables
+ expandableOpen(object);
+ }
+
+ execCallbacks(object);
+ }
+
+ // Handle callbacks
+ function execCallbacks(object) {
+ if (object.hasClass('active')) {
+ if (typeof(options.onOpen) === "function") {
+ options.onOpen.call(this, object.parent());
+ }
+ } else {
+ if (typeof(options.onClose) === "function") {
+ options.onClose.call(this, object.parent());
+ }
+ }
+ }
+
+ /**
+ * Check if object is children of panel header
+ * @param {Object} object Jquery object
+ * @return {Boolean} true if it is children
+ */
+ function isChildrenOfPanelHeader(object) {
+
+ var panelHeader = getPanelHeader(object);
+
+ return panelHeader.length > 0;
+ }
+
+ /**
+ * Get panel header from a children element
+ * @param {Object} object Jquery object
+ * @return {Object} panel header object
+ */
+ function getPanelHeader(object) {
+
+ return object.closest('li > .collapsible-header');
+ }
+
+ /***** End Helper Functions *****/
+
+
+
+ // Add click handler to only direct collapsible header children
+ $this.on('click.collapse', '> li > .collapsible-header', function(e) {
+ var element = $(e.target);
+
+ if (isChildrenOfPanelHeader(element)) {
+ element = getPanelHeader(element);
+ }
+
+ element.toggleClass('active');
+
+ collapsibleOpen(element);
+ });
+
+
+ // Open first active
+ if (options.accordion || collapsible_type === "accordion" || collapsible_type === undefined) { // Handle Accordion
+ collapsibleOpen($panel_headers.filter('.active').first());
+
+ } else { // Handle Expandables
+ $panel_headers.filter('.active').each(function() {
+ collapsibleOpen($(this));
+ });
+ }
+
+ });
+ };
+
+ $(document).ready(function(){
+ $('.collapsible').collapsible();
+ });
+}( jQuery ));;(function ($) {
+
+ // Add posibility to scroll to selected option
+ // usefull for select for example
+ $.fn.scrollTo = function(elem) {
+ $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top);
+ return this;
+ };
+
+ $.fn.dropdown = function (options) {
+ var defaults = {
+ inDuration: 300,
+ outDuration: 225,
+ constrain_width: true, // Constrains width of dropdown to the activator
+ hover: false,
+ gutter: 0, // Spacing from edge
+ belowOrigin: false,
+ alignment: 'left',
+ stopPropagation: false
+ };
+
+ // Open dropdown.
+ if (options === "open") {
+ this.each(function() {
+ $(this).trigger('open');
+ });
+ return false;
+ }
+
+ // Close dropdown.
+ if (options === "close") {
+ this.each(function() {
+ $(this).trigger('close');
+ });
+ return false;
+ }
+
+ this.each(function(){
+ var origin = $(this);
+ var curr_options = $.extend({}, defaults, options);
+ var isFocused = false;
+
+ // Dropdown menu
+ var activates = $("#"+ origin.attr('data-activates'));
+
+ function updateOptions() {
+ if (origin.data('induration') !== undefined)
+ curr_options.inDuration = origin.data('induration');
+ if (origin.data('outduration') !== undefined)
+ curr_options.outDuration = origin.data('outduration');
+ if (origin.data('constrainwidth') !== undefined)
+ curr_options.constrain_width = origin.data('constrainwidth');
+ if (origin.data('hover') !== undefined)
+ curr_options.hover = origin.data('hover');
+ if (origin.data('gutter') !== undefined)
+ curr_options.gutter = origin.data('gutter');
+ if (origin.data('beloworigin') !== undefined)
+ curr_options.belowOrigin = origin.data('beloworigin');
+ if (origin.data('alignment') !== undefined)
+ curr_options.alignment = origin.data('alignment');
+ if (origin.data('stoppropagation') !== undefined)
+ curr_options.stopPropagation = origin.data('stoppropagation');
+ }
+
+ updateOptions();
+
+ // Attach dropdown to its activator
+ origin.after(activates);
+
+ /*
+ Helper function to position and resize dropdown.
+ Used in hover and click handler.
+ */
+ function placeDropdown(eventType) {
+ // Check for simultaneous focus and click events.
+ if (eventType === 'focus') {
+ isFocused = true;
+ }
+
+ // Check html data attributes
+ updateOptions();
+
+ // Set Dropdown state
+ activates.addClass('active');
+ origin.addClass('active');
+
+ // Constrain width
+ if (curr_options.constrain_width === true) {
+ activates.css('width', origin.outerWidth());
+
+ } else {
+ activates.css('white-space', 'nowrap');
+ }
+
+ // Offscreen detection
+ var windowHeight = window.innerHeight;
+ var originHeight = origin.innerHeight();
+ var offsetLeft = origin.offset().left;
+ var offsetTop = origin.offset().top - $(window).scrollTop();
+ var currAlignment = curr_options.alignment;
+ var gutterSpacing = 0;
+ var leftPosition = 0;
+
+ // Below Origin
+ var verticalOffset = 0;
+ if (curr_options.belowOrigin === true) {
+ verticalOffset = originHeight;
+ }
+
+ // Check for scrolling positioned container.
+ var scrollYOffset = 0;
+ var scrollXOffset = 0;
+ var wrapper = origin.parent();
+ if (!wrapper.is('body')) {
+ if (wrapper[0].scrollHeight > wrapper[0].clientHeight) {
+ scrollYOffset = wrapper[0].scrollTop;
+ }
+ if (wrapper[0].scrollWidth > wrapper[0].clientWidth) {
+ scrollXOffset = wrapper[0].scrollLeft;
+ }
+ }
+
+
+ if (offsetLeft + activates.innerWidth() > $(window).width()) {
+ // Dropdown goes past screen on right, force right alignment
+ currAlignment = 'right';
+
+ } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) {
+ // Dropdown goes past screen on left, force left alignment
+ currAlignment = 'left';
+ }
+ // Vertical bottom offscreen detection
+ if (offsetTop + activates.innerHeight() > windowHeight) {
+ // If going upwards still goes offscreen, just crop height of dropdown.
+ if (offsetTop + originHeight - activates.innerHeight() < 0) {
+ var adjustedHeight = windowHeight - offsetTop - verticalOffset;
+ activates.css('max-height', adjustedHeight);
+ } else {
+ // Flow upwards.
+ if (!verticalOffset) {
+ verticalOffset += originHeight;
+ }
+ verticalOffset -= activates.innerHeight();
+ }
+ }
+
+ // Handle edge alignment
+ if (currAlignment === 'left') {
+ gutterSpacing = curr_options.gutter;
+ leftPosition = origin.position().left + gutterSpacing;
+ }
+ else if (currAlignment === 'right') {
+ var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth();
+ gutterSpacing = -curr_options.gutter;
+ leftPosition = offsetRight + gutterSpacing;
+ }
+
+ // Position dropdown
+ activates.css({
+ position: 'absolute',
+ top: origin.position().top + verticalOffset + scrollYOffset,
+ left: leftPosition + scrollXOffset
+ });
+
+
+ // Show dropdown
+ activates.stop(true, true).css('opacity', 0)
+ .slideDown({
+ queue: false,
+ duration: curr_options.inDuration,
+ easing: 'easeOutCubic',
+ complete: function() {
+ $(this).css('height', '');
+ }
+ })
+ .animate( {opacity: 1}, {queue: false, duration: curr_options.inDuration, easing: 'easeOutSine'});
+ }
+
+ function hideDropdown() {
+ // Check for simultaneous focus and click events.
+ isFocused = false;
+ activates.fadeOut(curr_options.outDuration);
+ activates.removeClass('active');
+ origin.removeClass('active');
+ setTimeout(function() { activates.css('max-height', ''); }, curr_options.outDuration);
+ }
+
+ // Hover
+ if (curr_options.hover) {
+ var open = false;
+ origin.unbind('click.' + origin.attr('id'));
+ // Hover handler to show dropdown
+ origin.on('mouseenter', function(e){ // Mouse over
+ if (open === false) {
+ placeDropdown();
+ open = true;
+ }
+ });
+ origin.on('mouseleave', function(e){
+ // If hover on origin then to something other than dropdown content, then close
+ var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element
+ if(!$(toEl).closest('.dropdown-content').is(activates)) {
+ activates.stop(true, true);
+ hideDropdown();
+ open = false;
+ }
+ });
+
+ activates.on('mouseleave', function(e){ // Mouse out
+ var toEl = e.toElement || e.relatedTarget;
+ if(!$(toEl).closest('.dropdown-button').is(origin)) {
+ activates.stop(true, true);
+ hideDropdown();
+ open = false;
+ }
+ });
+
+ // Click
+ } else {
+ // Click handler to show dropdown
+ origin.unbind('click.' + origin.attr('id'));
+ origin.bind('click.'+origin.attr('id'), function(e){
+ if (!isFocused) {
+ if ( origin[0] == e.currentTarget &&
+ !origin.hasClass('active') &&
+ ($(e.target).closest('.dropdown-content').length === 0)) {
+ e.preventDefault(); // Prevents button click from moving window
+ if (curr_options.stopPropagation) {
+ e.stopPropagation();
+ }
+ placeDropdown('click');
+ }
+ // If origin is clicked and menu is open, close menu
+ else if (origin.hasClass('active')) {
+ hideDropdown();
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
+ }
+ // If menu open, add click close handler to document
+ if (activates.hasClass('active')) {
+ $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {
+ if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {
+ hideDropdown();
+ $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));
+ }
+ });
+ }
+ }
+ });
+
+ } // End else
+
+ // Listen to open and close event - useful for select component
+ origin.on('open', function(e, eventType) {
+ placeDropdown(eventType);
+ });
+ origin.on('close', hideDropdown);
+
+
+ });
+ }; // End dropdown plugin
+
+ $(document).ready(function(){
+ $('.dropdown-button').dropdown();
+ });
+}( jQuery ));
+;(function($) {
+ var _stack = 0,
+ _lastID = 0,
+ _generateID = function() {
+ _lastID++;
+ return 'materialize-modal-overlay-' + _lastID;
+ };
+
+ var methods = {
+ init : function(options) {
+ var defaults = {
+ opacity: 0.5,
+ in_duration: 350,
+ out_duration: 250,
+ ready: undefined,
+ complete: undefined,
+ dismissible: true,
+ starting_top: '4%',
+ ending_top: '10%'
+ };
+
+ // Override defaults
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+ var $modal = $(this);
+ var modal_id = $(this).attr("id") || '#' + $(this).data('target');
+
+ var closeModal = function() {
+ var overlayID = $modal.data('overlay-id');
+ var $overlay = $('#' + overlayID);
+ $modal.removeClass('open');
+
+ // Enable scrolling
+ $('body').css({
+ overflow: '',
+ width: ''
+ });
+
+ $modal.find('.modal-close').off('click.close');
+ $(document).off('keyup.modal' + overlayID);
+
+ $overlay.velocity( { opacity: 0}, {duration: options.out_duration, queue: false, ease: "easeOutQuart"});
+
+
+ // Define Bottom Sheet animation
+ var exitVelocityOptions = {
+ duration: options.out_duration,
+ queue: false,
+ ease: "easeOutCubic",
+ // Handle modal ready callback
+ complete: function() {
+ $(this).css({display:"none"});
+
+ // Call complete callback
+ if (typeof(options.complete) === "function") {
+ options.complete.call(this, $modal);
+ }
+ $overlay.remove();
+ _stack--;
+ }
+ };
+ if ($modal.hasClass('bottom-sheet')) {
+ $modal.velocity({bottom: "-100%", opacity: 0}, exitVelocityOptions);
+ }
+ else {
+ $modal.velocity(
+ { top: options.starting_top, opacity: 0, scaleX: 0.7},
+ exitVelocityOptions
+ );
+ }
+ };
+
+ var openModal = function($trigger) {
+ var $body = $('body');
+ var oldWidth = $body.innerWidth();
+ $body.css('overflow', 'hidden');
+ $body.width(oldWidth);
+
+ if ($modal.hasClass('open')) {
+ return;
+ }
+
+ var overlayID = _generateID();
+ var $overlay = $('');
+ lStack = (++_stack);
+
+ // Store a reference of the overlay
+ $overlay.attr('id', overlayID).css('z-index', 1000 + lStack * 2);
+ $modal.data('overlay-id', overlayID).css('z-index', 1000 + lStack * 2 + 1);
+ $modal.addClass('open');
+
+ $("body").append($overlay);
+
+ if (options.dismissible) {
+ $overlay.click(function() {
+ closeModal();
+ });
+ // Return on ESC
+ $(document).on('keyup.modal' + overlayID, function(e) {
+ if (e.keyCode === 27) { // ESC key
+ closeModal();
+ }
+ });
+ }
+
+ $modal.find(".modal-close").on('click.close', function(e) {
+ closeModal();
+ });
+
+ $overlay.css({ display : "block", opacity : 0 });
+
+ $modal.css({
+ display : "block",
+ opacity: 0
+ });
+
+ $overlay.velocity({opacity: options.opacity}, {duration: options.in_duration, queue: false, ease: "easeOutCubic"});
+ $modal.data('associated-overlay', $overlay[0]);
+
+ // Define Bottom Sheet animation
+ var enterVelocityOptions = {
+ duration: options.in_duration,
+ queue: false,
+ ease: "easeOutCubic",
+ // Handle modal ready callback
+ complete: function() {
+ if (typeof(options.ready) === "function") {
+ options.ready.call(this, $modal, $trigger);
+ }
+ }
+ };
+ if ($modal.hasClass('bottom-sheet')) {
+ $modal.velocity({bottom: "0", opacity: 1}, enterVelocityOptions);
+ }
+ else {
+ $.Velocity.hook($modal, "scaleX", 0.7);
+ $modal.css({ top: options.starting_top });
+ $modal.velocity({top: options.ending_top, opacity: 1, scaleX: '1'}, enterVelocityOptions);
+ }
+
+ };
+
+ // Reset handlers
+ $(document).off('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]');
+ $(this).off('openModal');
+ $(this).off('closeModal');
+
+ // Close Handlers
+ $(document).on('click.modalTrigger', 'a[href="#' + modal_id + '"], [data-target="' + modal_id + '"]', function(e) {
+ options.starting_top = ($(this).offset().top - $(window).scrollTop()) /1.15;
+ openModal($(this));
+ e.preventDefault();
+ }); // done set on click
+
+ $(this).on('openModal', function() {
+ var modal_id = $(this).attr("href") || '#' + $(this).data('target');
+ openModal();
+ });
+
+ $(this).on('closeModal', function() {
+ closeModal();
+ });
+ }); // done return
+ },
+ open : function() {
+ $(this).trigger('openModal');
+ },
+ close : function() {
+ $(this).trigger('closeModal');
+ }
+ };
+
+ $.fn.modal = function(methodOrOptions) {
+ if ( methods[methodOrOptions] ) {
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
+ // Default to "init"
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.modal' );
+ }
+ };
+})(jQuery);
+;(function ($) {
+
+ $.fn.materialbox = function () {
+
+ return this.each(function() {
+
+ if ($(this).hasClass('initialized')) {
+ return;
+ }
+
+ $(this).addClass('initialized');
+
+ var overlayActive = false;
+ var doneAnimating = true;
+ var inDuration = 275;
+ var outDuration = 200;
+ var origin = $(this);
+ var placeholder = $('').addClass('material-placeholder');
+ var originalWidth = 0;
+ var originalHeight = 0;
+ var ancestorsChanged;
+ var ancestor;
+ origin.wrap(placeholder);
+
+
+ origin.on('click', function(){
+ var placeholder = origin.parent('.material-placeholder');
+ var windowWidth = window.innerWidth;
+ var windowHeight = window.innerHeight;
+ var originalWidth = origin.width();
+ var originalHeight = origin.height();
+
+
+ // If already modal, return to original
+ if (doneAnimating === false) {
+ returnToOriginal();
+ return false;
+ }
+ else if (overlayActive && doneAnimating===true) {
+ returnToOriginal();
+ return false;
+ }
+
+
+ // Set states
+ doneAnimating = false;
+ origin.addClass('active');
+ overlayActive = true;
+
+ // Set positioning for placeholder
+ placeholder.css({
+ width: placeholder[0].getBoundingClientRect().width,
+ height: placeholder[0].getBoundingClientRect().height,
+ position: 'relative',
+ top: 0,
+ left: 0
+ });
+
+ // Find ancestor with overflow: hidden; and remove it
+ ancestorsChanged = undefined;
+ ancestor = placeholder[0].parentNode;
+ var count = 0;
+ while (ancestor !== null && !$(ancestor).is(document)) {
+ var curr = $(ancestor);
+ if (curr.css('overflow') !== 'visible') {
+ curr.css('overflow', 'visible');
+ if (ancestorsChanged === undefined) {
+ ancestorsChanged = curr;
+ }
+ else {
+ ancestorsChanged = ancestorsChanged.add(curr);
+ }
+ }
+ ancestor = ancestor.parentNode;
+ }
+
+ // Set css on origin
+ origin.css({position: 'absolute', 'z-index': 1000})
+ .data('width', originalWidth)
+ .data('height', originalHeight);
+
+ // Add overlay
+ var overlay = $('')
+ .css({
+ opacity: 0
+ })
+ .click(function(){
+ if (doneAnimating === true)
+ returnToOriginal();
+ });
+ // Animate Overlay
+ // Put before in origin image to preserve z-index layering.
+ origin.before(overlay);
+ overlay.velocity({opacity: 1},
+ {duration: inDuration, queue: false, easing: 'easeOutQuad'} );
+
+ // Add and animate caption if it exists
+ if (origin.data('caption') !== "") {
+ var $photo_caption = $('');
+ $photo_caption.text(origin.data('caption'));
+ $('body').append($photo_caption);
+ $photo_caption.css({ "display": "inline" });
+ $photo_caption.velocity({opacity: 1}, {duration: inDuration, queue: false, easing: 'easeOutQuad'});
+ }
+
+ // Resize Image
+ var ratio = 0;
+ var widthPercent = originalWidth / windowWidth;
+ var heightPercent = originalHeight / windowHeight;
+ var newWidth = 0;
+ var newHeight = 0;
+
+ if (widthPercent > heightPercent) {
+ ratio = originalHeight / originalWidth;
+ newWidth = windowWidth * 0.9;
+ newHeight = windowWidth * 0.9 * ratio;
+ }
+ else {
+ ratio = originalWidth / originalHeight;
+ newWidth = (windowHeight * 0.9) * ratio;
+ newHeight = windowHeight * 0.9;
+ }
+
+ // Animate image + set z-index
+ if(origin.hasClass('responsive-img')) {
+ origin.velocity({'max-width': newWidth, 'width': originalWidth}, {duration: 0, queue: false,
+ complete: function(){
+ origin.css({left: 0, top: 0})
+ .velocity(
+ {
+ height: newHeight,
+ width: newWidth,
+ left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2,
+ top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2
+ },
+ {
+ duration: inDuration,
+ queue: false,
+ easing: 'easeOutQuad',
+ complete: function(){doneAnimating = true;}
+ }
+ );
+ } // End Complete
+ }); // End Velocity
+ }
+ else {
+ origin.css('left', 0)
+ .css('top', 0)
+ .velocity(
+ {
+ height: newHeight,
+ width: newWidth,
+ left: $(document).scrollLeft() + windowWidth/2 - origin.parent('.material-placeholder').offset().left - newWidth/2,
+ top: $(document).scrollTop() + windowHeight/2 - origin.parent('.material-placeholder').offset().top - newHeight/ 2
+ },
+ {
+ duration: inDuration,
+ queue: false,
+ easing: 'easeOutQuad',
+ complete: function(){doneAnimating = true;}
+ }
+ ); // End Velocity
+ }
+
+ }); // End origin on click
+
+
+ // Return on scroll
+ $(window).scroll(function() {
+ if (overlayActive) {
+ returnToOriginal();
+ }
+ });
+
+ // Return on ESC
+ $(document).keyup(function(e) {
+
+ if (e.keyCode === 27 && doneAnimating === true) { // ESC key
+ if (overlayActive) {
+ returnToOriginal();
+ }
+ }
+ });
+
+
+ // This function returns the modaled image to the original spot
+ function returnToOriginal() {
+
+ doneAnimating = false;
+
+ var placeholder = origin.parent('.material-placeholder');
+ var windowWidth = window.innerWidth;
+ var windowHeight = window.innerHeight;
+ var originalWidth = origin.data('width');
+ var originalHeight = origin.data('height');
+
+ origin.velocity("stop", true);
+ $('#materialbox-overlay').velocity("stop", true);
+ $('.materialbox-caption').velocity("stop", true);
+
+
+ $('#materialbox-overlay').velocity({opacity: 0}, {
+ duration: outDuration, // Delay prevents animation overlapping
+ queue: false, easing: 'easeOutQuad',
+ complete: function(){
+ // Remove Overlay
+ overlayActive = false;
+ $(this).remove();
+ }
+ });
+
+ // Resize Image
+ origin.velocity(
+ {
+ width: originalWidth,
+ height: originalHeight,
+ left: 0,
+ top: 0
+ },
+ {
+ duration: outDuration,
+ queue: false, easing: 'easeOutQuad'
+ }
+ );
+
+ // Remove Caption + reset css settings on image
+ $('.materialbox-caption').velocity({opacity: 0}, {
+ duration: outDuration, // Delay prevents animation overlapping
+ queue: false, easing: 'easeOutQuad',
+ complete: function(){
+ placeholder.css({
+ height: '',
+ width: '',
+ position: '',
+ top: '',
+ left: ''
+ });
+
+ origin.css({
+ height: '',
+ top: '',
+ left: '',
+ width: '',
+ 'max-width': '',
+ position: '',
+ 'z-index': ''
+ });
+
+ // Remove class
+ origin.removeClass('active');
+ doneAnimating = true;
+ $(this).remove();
+
+ // Remove overflow overrides on ancestors
+ if (ancestorsChanged) {
+ ancestorsChanged.css('overflow', '');
+ }
+ }
+ });
+
+ }
+ });
+};
+
+$(document).ready(function(){
+ $('.materialboxed').materialbox();
+});
+
+}( jQuery ));
+;(function ($) {
+
+ $.fn.parallax = function () {
+ var window_width = $(window).width();
+ // Parallax Scripts
+ return this.each(function(i) {
+ var $this = $(this);
+ $this.addClass('parallax');
+
+ function updateParallax(initial) {
+ var container_height;
+ if (window_width < 601) {
+ container_height = ($this.height() > 0) ? $this.height() : $this.children("img").height();
+ }
+ else {
+ container_height = ($this.height() > 0) ? $this.height() : 500;
+ }
+ var $img = $this.children("img").first();
+ var img_height = $img.height();
+ var parallax_dist = img_height - container_height;
+ var bottom = $this.offset().top + container_height;
+ var top = $this.offset().top;
+ var scrollTop = $(window).scrollTop();
+ var windowHeight = window.innerHeight;
+ var windowBottom = scrollTop + windowHeight;
+ var percentScrolled = (windowBottom - top) / (container_height + windowHeight);
+ var parallax = Math.round((parallax_dist * percentScrolled));
+
+ if (initial) {
+ $img.css('display', 'block');
+ }
+ if ((bottom > scrollTop) && (top < (scrollTop + windowHeight))) {
+ $img.css('transform', "translate3D(-50%," + parallax + "px, 0)");
+ }
+
+ }
+
+ // Wait for image load
+ $this.children("img").one("load", function() {
+ updateParallax(true);
+ }).each(function() {
+ if (this.complete) $(this).trigger("load");
+ });
+
+ $(window).scroll(function() {
+ window_width = $(window).width();
+ updateParallax(false);
+ });
+
+ $(window).resize(function() {
+ window_width = $(window).width();
+ updateParallax(false);
+ });
+
+ });
+
+ };
+}( jQuery ));
+;(function ($) {
+
+ var methods = {
+ init : function(options) {
+ var defaults = {
+ onShow: null
+ };
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+
+ // For each set of tabs, we want to keep track of
+ // which tab is active and its associated content
+ var $this = $(this),
+ window_width = $(window).width();
+
+ var $active, $content, $links = $this.find('li.tab a'),
+ $tabs_width = $this.width(),
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length,
+ $index = 0;
+
+ // Finds right attribute for indicator based on active tab.
+ // el: jQuery Object
+ var calcRightPos = function(el) {
+ return $tabs_width - el.position().left - el.outerWidth() - $this.scrollLeft();
+ };
+
+ // Finds left attribute for indicator based on active tab.
+ // el: jQuery Object
+ var calcLeftPos = function(el) {
+ return el.position().left + $this.scrollLeft();
+ };
+
+ // If the location.hash matches one of the links, use that as the active tab.
+ $active = $($links.filter('[href="'+location.hash+'"]'));
+
+ // If no match is found, use the first link or any with class 'active' as the initial active tab.
+ if ($active.length === 0) {
+ $active = $(this).find('li.tab a.active').first();
+ }
+ if ($active.length === 0) {
+ $active = $(this).find('li.tab a').first();
+ }
+
+ $active.addClass('active');
+ $index = $links.index($active);
+ if ($index < 0) {
+ $index = 0;
+ }
+
+ if ($active[0] !== undefined) {
+ $content = $($active[0].hash);
+ }
+
+ // append indicator then set indicator width to tab width
+ $this.append('');
+ var $indicator = $this.find('.indicator');
+ if ($this.is(":visible")) {
+ // $indicator.css({"right": $tabs_width - (($index + 1) * $tab_width)});
+ // $indicator.css({"left": $index * $tab_width});
+ setTimeout(function() {
+ $indicator.css({"right": calcRightPos($active) });
+ $indicator.css({"left": calcLeftPos($active) });
+ }, 0);
+ }
+ $(window).resize(function () {
+ $tabs_width = $this.width();
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
+ if ($index < 0) {
+ $index = 0;
+ }
+ if ($tab_width !== 0 && $tabs_width !== 0) {
+ $indicator.css({"right": calcRightPos($active) });
+ $indicator.css({"left": calcLeftPos($active) });
+ }
+ });
+
+ // Hide the remaining content
+ $links.not($active).each(function () {
+ $(Materialize.escapeHash(this.hash)).hide();
+ });
+
+
+ // Bind the click event handler
+ $this.on('click', 'a', function(e) {
+ if ($(this).parent().hasClass('disabled')) {
+ e.preventDefault();
+ return;
+ }
+
+ // Act as regular link if target attribute is specified.
+ if (!!$(this).attr("target")) {
+ return;
+ }
+
+ $tabs_width = $this.width();
+ $tab_width = Math.max($tabs_width, $this[0].scrollWidth) / $links.length;
+
+ // Make the old tab inactive.
+ $active.removeClass('active');
+ if ($content !== undefined) {
+ $content.hide();
+ }
+
+ // Update the variables with the new link and content
+ $active = $(this);
+ $content = $(Materialize.escapeHash(this.hash));
+ $links = $this.find('li.tab a');
+ var activeRect = $active.position();
+
+ // Make the tab active.
+ $active.addClass('active');
+ var $prev_index = $index;
+ $index = $links.index($(this));
+ if ($index < 0) {
+ $index = 0;
+ }
+ // Change url to current tab
+ // window.location.hash = $active.attr('href');
+
+ if ($content !== undefined) {
+ $content.show();
+ if (typeof(options.onShow) === "function") {
+ options.onShow.call(this, $content);
+ }
+ }
+
+ // Update indicator
+
+ if (($index - $prev_index) >= 0) {
+ $indicator.velocity({"right": calcRightPos($active) }, { duration: 300, queue: false, easing: 'easeOutQuad'});
+ $indicator.velocity({"left": calcLeftPos($active) }, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
+
+ } else {
+ $indicator.velocity({"left": calcLeftPos($active) }, { duration: 300, queue: false, easing: 'easeOutQuad'});
+ $indicator.velocity({"right": calcRightPos($active) }, {duration: 300, queue: false, easing: 'easeOutQuad', delay: 90});
+ }
+
+ // Prevent the anchor's default click action
+ e.preventDefault();
+ });
+ });
+
+ },
+ select_tab : function( id ) {
+ this.find('a[href="#' + id + '"]').trigger('click');
+ }
+ };
+
+ $.fn.tabs = function(methodOrOptions) {
+ if ( methods[methodOrOptions] ) {
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
+ // Default to "init"
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tabs' );
+ }
+ };
+
+ $(document).ready(function(){
+ $('ul.tabs').tabs();
+ });
+}( jQuery ));
+;(function ($) {
+ $.fn.tooltip = function (options) {
+ var timeout = null,
+ margin = 5;
+
+ // Defaults
+ var defaults = {
+ delay: 350,
+ tooltip: '',
+ position: 'bottom',
+ html: false
+ };
+
+ // Remove tooltip from the activator
+ if (options === "remove") {
+ this.each(function() {
+ $('#' + $(this).attr('data-tooltip-id')).remove();
+ $(this).off('mouseenter.tooltip mouseleave.tooltip');
+ });
+ return false;
+ }
+
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+ var tooltipId = Materialize.guid();
+ var origin = $(this);
+
+ // Destroy old tooltip
+ if (origin.attr('data-tooltip-id')) {
+ $('#' + origin.attr('data-tooltip-id')).remove();
+ }
+
+ origin.attr('data-tooltip-id', tooltipId);
+
+ // Get attributes.
+ var allowHtml,
+ tooltipDelay,
+ tooltipPosition,
+ tooltipText,
+ tooltipEl,
+ backdrop;
+ var setAttributes = function() {
+ allowHtml = origin.attr('data-html') ? origin.attr('data-html') === 'true' : options.html;
+ tooltipDelay = origin.attr('data-delay');
+ tooltipDelay = (tooltipDelay === undefined || tooltipDelay === '') ?
+ options.delay : tooltipDelay;
+ tooltipPosition = origin.attr('data-position');
+ tooltipPosition = (tooltipPosition === undefined || tooltipPosition === '') ?
+ options.position : tooltipPosition;
+ tooltipText = origin.attr('data-tooltip');
+ tooltipText = (tooltipText === undefined || tooltipText === '') ?
+ options.tooltip : tooltipText;
+ };
+ setAttributes();
+
+ var renderTooltipEl = function() {
+ var tooltip = $('');
+
+ // Create Text span
+ if (allowHtml) {
+ tooltipText = $('').html(tooltipText);
+ } else{
+ tooltipText = $('').text(tooltipText);
+ }
+
+ // Create tooltip
+ tooltip.append(tooltipText)
+ .appendTo($('body'))
+ .attr('id', tooltipId);
+
+ // Create backdrop
+ backdrop = $('');
+ backdrop.appendTo(tooltip);
+ return tooltip;
+ };
+ tooltipEl = renderTooltipEl();
+
+ // Destroy previously binded events
+ origin.off('mouseenter.tooltip mouseleave.tooltip');
+ // Mouse In
+ var started = false, timeoutRef;
+ origin.on({'mouseenter.tooltip': function(e) {
+ var showTooltip = function() {
+ setAttributes();
+ started = true;
+ tooltipEl.velocity('stop');
+ backdrop.velocity('stop');
+ tooltipEl.css({ display: 'block', left: '0px', top: '0px' });
+
+ // Tooltip positioning
+ var originWidth = origin.outerWidth();
+ var originHeight = origin.outerHeight();
+
+ var tooltipHeight = tooltipEl.outerHeight();
+ var tooltipWidth = tooltipEl.outerWidth();
+ var tooltipVerticalMovement = '0px';
+ var tooltipHorizontalMovement = '0px';
+ var scaleXFactor = 8;
+ var scaleYFactor = 8;
+ var targetTop, targetLeft, newCoordinates;
+
+ if (tooltipPosition === "top") {
+ // Top Position
+ targetTop = origin.offset().top - tooltipHeight - margin;
+ targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2;
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
+
+ tooltipVerticalMovement = '-10px';
+ backdrop.css({
+ bottom: 0,
+ left: 0,
+ borderRadius: '14px 14px 0 0',
+ transformOrigin: '50% 100%',
+ marginTop: tooltipHeight,
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
+ });
+ }
+ // Left Position
+ else if (tooltipPosition === "left") {
+ targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2;
+ targetLeft = origin.offset().left - tooltipWidth - margin;
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
+
+ tooltipHorizontalMovement = '-10px';
+ backdrop.css({
+ top: '-7px',
+ right: 0,
+ width: '14px',
+ height: '14px',
+ borderRadius: '14px 0 0 14px',
+ transformOrigin: '95% 50%',
+ marginTop: tooltipHeight/2,
+ marginLeft: tooltipWidth
+ });
+ }
+ // Right Position
+ else if (tooltipPosition === "right") {
+ targetTop = origin.offset().top + originHeight/2 - tooltipHeight/2;
+ targetLeft = origin.offset().left + originWidth + margin;
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
+
+ tooltipHorizontalMovement = '+10px';
+ backdrop.css({
+ top: '-7px',
+ left: 0,
+ width: '14px',
+ height: '14px',
+ borderRadius: '0 14px 14px 0',
+ transformOrigin: '5% 50%',
+ marginTop: tooltipHeight/2,
+ marginLeft: '0px'
+ });
+ }
+ else {
+ // Bottom Position
+ targetTop = origin.offset().top + origin.outerHeight() + margin;
+ targetLeft = origin.offset().left + originWidth/2 - tooltipWidth/2;
+ newCoordinates = repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight);
+ tooltipVerticalMovement = '+10px';
+ backdrop.css({
+ top: 0,
+ left: 0,
+ marginLeft: (tooltipWidth/2) - (backdrop.width()/2)
+ });
+ }
+
+ // Set tooptip css placement
+ tooltipEl.css({
+ top: newCoordinates.y,
+ left: newCoordinates.x
+ });
+
+ // Calculate Scale to fill
+ scaleXFactor = Math.SQRT2 * tooltipWidth / parseInt(backdrop.css('width'));
+ scaleYFactor = Math.SQRT2 * tooltipHeight / parseInt(backdrop.css('height'));
+
+ tooltipEl.velocity({ marginTop: tooltipVerticalMovement, marginLeft: tooltipHorizontalMovement}, { duration: 350, queue: false })
+ .velocity({opacity: 1}, {duration: 300, delay: 50, queue: false});
+ backdrop.css({ display: 'block' })
+ .velocity({opacity:1},{duration: 55, delay: 0, queue: false})
+ .velocity({scaleX: scaleXFactor, scaleY: scaleYFactor}, {duration: 300, delay: 0, queue: false, easing: 'easeInOutQuad'});
+ };
+
+ timeoutRef = setTimeout(showTooltip, tooltipDelay); // End Interval
+
+ // Mouse Out
+ },
+ 'mouseleave.tooltip': function(){
+ // Reset State
+ started = false;
+ clearTimeout(timeoutRef);
+
+ // Animate back
+ setTimeout(function() {
+ if (started !== true) {
+ tooltipEl.velocity({
+ opacity: 0, marginTop: 0, marginLeft: 0}, { duration: 225, queue: false});
+ backdrop.velocity({opacity: 0, scaleX: 1, scaleY: 1}, {
+ duration:225,
+ queue: false,
+ complete: function(){
+ backdrop.css('display', 'none');
+ tooltipEl.css('display', 'none');
+ started = false;}
+ });
+ }
+ },225);
+ }
+ });
+ });
+ };
+
+ var repositionWithinScreen = function(x, y, width, height) {
+ var newX = x;
+ var newY = y;
+
+ if (newX < 0) {
+ newX = 4;
+ } else if (newX + width > window.innerWidth) {
+ newX -= newX + width - window.innerWidth;
+ }
+
+ if (newY < 0) {
+ newY = 4;
+ } else if (newY + height > window.innerHeight + $(window).scrollTop) {
+ newY -= newY + height - window.innerHeight;
+ }
+
+ return {x: newX, y: newY};
+ };
+
+ $(document).ready(function(){
+ $('.tooltipped').tooltip();
+ });
+}( jQuery ));
+;/*!
+ * Waves v0.6.4
+ * http://fian.my.id/Waves
+ *
+ * Copyright 2014 Alfiana E. Sibuea and other contributors
+ * Released under the MIT license
+ * https://github.com/fians/Waves/blob/master/LICENSE
+ */
+
+;(function(window) {
+ 'use strict';
+
+ var Waves = Waves || {};
+ var $$ = document.querySelectorAll.bind(document);
+
+ // Find exact position of element
+ function isWindow(obj) {
+ return obj !== null && obj === obj.window;
+ }
+
+ function getWindow(elem) {
+ return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
+ }
+
+ function offset(elem) {
+ var docElem, win,
+ box = {top: 0, left: 0},
+ doc = elem && elem.ownerDocument;
+
+ docElem = doc.documentElement;
+
+ if (typeof elem.getBoundingClientRect !== typeof undefined) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow(doc);
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+ }
+
+ function convertStyle(obj) {
+ var style = '';
+
+ for (var a in obj) {
+ if (obj.hasOwnProperty(a)) {
+ style += (a + ':' + obj[a] + ';');
+ }
+ }
+
+ return style;
+ }
+
+ var Effect = {
+
+ // Effect delay
+ duration: 750,
+
+ show: function(e, element) {
+
+ // Disable right click
+ if (e.button === 2) {
+ return false;
+ }
+
+ var el = element || this;
+
+ // Create ripple
+ var ripple = document.createElement('div');
+ ripple.className = 'waves-ripple';
+ el.appendChild(ripple);
+
+ // Get click coordinate and element witdh
+ var pos = offset(el);
+ var relativeY = (e.pageY - pos.top);
+ var relativeX = (e.pageX - pos.left);
+ var scale = 'scale('+((el.clientWidth / 100) * 10)+')';
+
+ // Support for touch devices
+ if ('touches' in e) {
+ relativeY = (e.touches[0].pageY - pos.top);
+ relativeX = (e.touches[0].pageX - pos.left);
+ }
+
+ // Attach data to element
+ ripple.setAttribute('data-hold', Date.now());
+ ripple.setAttribute('data-scale', scale);
+ ripple.setAttribute('data-x', relativeX);
+ ripple.setAttribute('data-y', relativeY);
+
+ // Set ripple position
+ var rippleStyle = {
+ 'top': relativeY+'px',
+ 'left': relativeX+'px'
+ };
+
+ ripple.className = ripple.className + ' waves-notransition';
+ ripple.setAttribute('style', convertStyle(rippleStyle));
+ ripple.className = ripple.className.replace('waves-notransition', '');
+
+ // Scale the ripple
+ rippleStyle['-webkit-transform'] = scale;
+ rippleStyle['-moz-transform'] = scale;
+ rippleStyle['-ms-transform'] = scale;
+ rippleStyle['-o-transform'] = scale;
+ rippleStyle.transform = scale;
+ rippleStyle.opacity = '1';
+
+ rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';
+ rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';
+ rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';
+ rippleStyle['transition-duration'] = Effect.duration + 'ms';
+
+ rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
+ rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
+ rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
+ rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
+
+ ripple.setAttribute('style', convertStyle(rippleStyle));
+ },
+
+ hide: function(e) {
+ TouchHandler.touchup(e);
+
+ var el = this;
+ var width = el.clientWidth * 1.4;
+
+ // Get first ripple
+ var ripple = null;
+ var ripples = el.getElementsByClassName('waves-ripple');
+ if (ripples.length > 0) {
+ ripple = ripples[ripples.length - 1];
+ } else {
+ return false;
+ }
+
+ var relativeX = ripple.getAttribute('data-x');
+ var relativeY = ripple.getAttribute('data-y');
+ var scale = ripple.getAttribute('data-scale');
+
+ // Get delay beetween mousedown and mouse leave
+ var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
+ var delay = 350 - diff;
+
+ if (delay < 0) {
+ delay = 0;
+ }
+
+ // Fade out ripple after delay
+ setTimeout(function() {
+ var style = {
+ 'top': relativeY+'px',
+ 'left': relativeX+'px',
+ 'opacity': '0',
+
+ // Duration
+ '-webkit-transition-duration': Effect.duration + 'ms',
+ '-moz-transition-duration': Effect.duration + 'ms',
+ '-o-transition-duration': Effect.duration + 'ms',
+ 'transition-duration': Effect.duration + 'ms',
+ '-webkit-transform': scale,
+ '-moz-transform': scale,
+ '-ms-transform': scale,
+ '-o-transform': scale,
+ 'transform': scale,
+ };
+
+ ripple.setAttribute('style', convertStyle(style));
+
+ setTimeout(function() {
+ try {
+ el.removeChild(ripple);
+ } catch(e) {
+ return false;
+ }
+ }, Effect.duration);
+ }, delay);
+ },
+
+ // Little hack to make can perform waves effect
+ wrapInput: function(elements) {
+ for (var a = 0; a < elements.length; a++) {
+ var el = elements[a];
+
+ if (el.tagName.toLowerCase() === 'input') {
+ var parent = el.parentNode;
+
+ // If input already have parent just pass through
+ if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
+ continue;
+ }
+
+ // Put element class and style to the specified parent
+ var wrapper = document.createElement('i');
+ wrapper.className = el.className + ' waves-input-wrapper';
+
+ var elementStyle = el.getAttribute('style');
+
+ if (!elementStyle) {
+ elementStyle = '';
+ }
+
+ wrapper.setAttribute('style', elementStyle);
+
+ el.className = 'waves-button-input';
+ el.removeAttribute('style');
+
+ // Put element as child
+ parent.replaceChild(wrapper, el);
+ wrapper.appendChild(el);
+ }
+ }
+ }
+ };
+
+
+ /**
+ * Disable mousedown event for 500ms during and after touch
+ */
+ var TouchHandler = {
+ /* uses an integer rather than bool so there's no issues with
+ * needing to clear timeouts if another touch event occurred
+ * within the 500ms. Cannot mouseup between touchstart and
+ * touchend, nor in the 500ms after touchend. */
+ touches: 0,
+ allowEvent: function(e) {
+ var allow = true;
+
+ if (e.type === 'touchstart') {
+ TouchHandler.touches += 1; //push
+ } else if (e.type === 'touchend' || e.type === 'touchcancel') {
+ setTimeout(function() {
+ if (TouchHandler.touches > 0) {
+ TouchHandler.touches -= 1; //pop after 500ms
+ }
+ }, 500);
+ } else if (e.type === 'mousedown' && TouchHandler.touches > 0) {
+ allow = false;
+ }
+
+ return allow;
+ },
+ touchup: function(e) {
+ TouchHandler.allowEvent(e);
+ }
+ };
+
+
+ /**
+ * Delegated click handler for .waves-effect element.
+ * returns null when .waves-effect element not in "click tree"
+ */
+ function getWavesEffectElement(e) {
+ if (TouchHandler.allowEvent(e) === false) {
+ return null;
+ }
+
+ var element = null;
+ var target = e.target || e.srcElement;
+
+ while (target.parentElement !== null) {
+ if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {
+ element = target;
+ break;
+ } else if (target.classList.contains('waves-effect')) {
+ element = target;
+ break;
+ }
+ target = target.parentElement;
+ }
+
+ return element;
+ }
+
+ /**
+ * Bubble the click and show effect if .waves-effect elem was found
+ */
+ function showEffect(e) {
+ var element = getWavesEffectElement(e);
+
+ if (element !== null) {
+ Effect.show(e, element);
+
+ if ('ontouchstart' in window) {
+ element.addEventListener('touchend', Effect.hide, false);
+ element.addEventListener('touchcancel', Effect.hide, false);
+ }
+
+ element.addEventListener('mouseup', Effect.hide, false);
+ element.addEventListener('mouseleave', Effect.hide, false);
+ }
+ }
+
+ Waves.displayEffect = function(options) {
+ options = options || {};
+
+ if ('duration' in options) {
+ Effect.duration = options.duration;
+ }
+
+ //Wrap input inside tag
+ Effect.wrapInput($$('.waves-effect'));
+
+ if ('ontouchstart' in window) {
+ document.body.addEventListener('touchstart', showEffect, false);
+ }
+
+ document.body.addEventListener('mousedown', showEffect, false);
+ };
+
+ /**
+ * Attach Waves to an input element (or any element which doesn't
+ * bubble mouseup/mousedown events).
+ * Intended to be used with dynamically loaded forms/inputs, or
+ * where the user doesn't want a delegated click handler.
+ */
+ Waves.attach = function(element) {
+ //FUTURE: automatically add waves classes and allow users
+ // to specify them with an options param? Eg. light/classic/button
+ if (element.tagName.toLowerCase() === 'input') {
+ Effect.wrapInput([element]);
+ element = element.parentElement;
+ }
+
+ if ('ontouchstart' in window) {
+ element.addEventListener('touchstart', showEffect, false);
+ }
+
+ element.addEventListener('mousedown', showEffect, false);
+ };
+
+ window.Waves = Waves;
+
+ document.addEventListener('DOMContentLoaded', function() {
+ Waves.displayEffect();
+ }, false);
+
+})(window);
+;Materialize.toast = function (message, displayLength, className, completeCallback) {
+ className = className || "";
+
+ var container = document.getElementById('toast-container');
+
+ // Create toast container if it does not exist
+ if (container === null) {
+ // create notification container
+ container = document.createElement('div');
+ container.id = 'toast-container';
+ document.body.appendChild(container);
+ }
+
+ // Select and append toast
+ var newToast = createToast(message);
+
+ // only append toast if message is not undefined
+ if(message){
+ container.appendChild(newToast);
+ }
+
+ newToast.style.top = '35px';
+ newToast.style.opacity = 0;
+
+ // Animate toast in
+ Vel(newToast, { "top" : "0px", opacity: 1 }, {duration: 300,
+ easing: 'easeOutCubic',
+ queue: false});
+
+ // Allows timer to be pause while being panned
+ var timeLeft = displayLength;
+ var counterInterval;
+ if (timeLeft != null) {
+ counterInterval = setInterval (function(){
+ if (newToast.parentNode === null)
+ window.clearInterval(counterInterval);
+
+ // If toast is not being dragged, decrease its time remaining
+ if (!newToast.classList.contains('panning')) {
+ timeLeft -= 20;
+ }
+
+ if (timeLeft <= 0) {
+ // Animate toast out
+ Vel(newToast, {"opacity": 0, marginTop: '-40px'}, { duration: 375,
+ easing: 'easeOutExpo',
+ queue: false,
+ complete: function(){
+ // Call the optional callback
+ if(typeof(completeCallback) === "function")
+ completeCallback();
+ // Remove toast after it times out
+ this[0].parentNode.removeChild(this[0]);
+ }
+ });
+ window.clearInterval(counterInterval);
+ }
+ }, 20);
+ }
+
+
+
+ function createToast(html) {
+
+ // Create toast
+ var toast = document.createElement('div');
+ toast.classList.add('toast');
+ if (className) {
+ var classes = className.split(' ');
+
+ for (var i = 0, count = classes.length; i < count; i++) {
+ toast.classList.add(classes[i]);
+ }
+ }
+ // If type of parameter is HTML Element
+ if ( typeof HTMLElement === "object" ? html instanceof HTMLElement : html && typeof html === "object" && html !== null && html.nodeType === 1 && typeof html.nodeName==="string"
+) {
+ toast.appendChild(html);
+ }
+ else if (html instanceof jQuery) {
+ // Check if it is jQuery object
+ toast.appendChild(html[0]);
+ }
+ else {
+ // Insert as text;
+ toast.innerHTML = html;
+ }
+ // Bind hammer
+ var hammerHandler = new Hammer(toast, {prevent_default: false});
+ hammerHandler.on('pan', function(e) {
+ var deltaX = e.deltaX;
+ var activationDistance = 80;
+
+ // Change toast state
+ if (!toast.classList.contains('panning')){
+ toast.classList.add('panning');
+ }
+
+ var opacityPercent = 1-Math.abs(deltaX / activationDistance);
+ if (opacityPercent < 0)
+ opacityPercent = 0;
+
+ Vel(toast, {left: deltaX, opacity: opacityPercent }, {duration: 50, queue: false, easing: 'easeOutQuad'});
+
+ });
+
+ hammerHandler.on('panend', function(e) {
+ var deltaX = e.deltaX;
+ var activationDistance = 80;
+
+ // If toast dragged past activation point
+ if (Math.abs(deltaX) > activationDistance) {
+ Vel(toast, {marginTop: '-40px'}, { duration: 375,
+ easing: 'easeOutExpo',
+ queue: false,
+ complete: function(){
+ if(typeof(completeCallback) === "function") {
+ completeCallback();
+ }
+ toast.parentNode.removeChild(toast);
+ }
+ });
+
+ } else {
+ toast.classList.remove('panning');
+ // Put toast back into original position
+ Vel(toast, { left: 0, opacity: 1 }, { duration: 300,
+ easing: 'easeOutExpo',
+ queue: false
+ });
+
+ }
+ });
+
+ return toast;
+ }
+};
+;(function ($) {
+
+ var methods = {
+ init : function(options) {
+ var defaults = {
+ menuWidth: 300,
+ edge: 'left',
+ closeOnClick: false,
+ draggable: true
+ };
+ options = $.extend(defaults, options);
+
+ $(this).each(function(){
+ var $this = $(this);
+ var menu_id = $("#"+ $this.attr('data-activates'));
+
+ // Set to width
+ if (options.menuWidth != 300) {
+ menu_id.css('width', options.menuWidth);
+ }
+
+ // Add Touch Area
+ var $dragTarget;
+ if (options.draggable) {
+ $dragTarget = $('').attr('data-sidenav', $this.attr('data-activates'));
+ $('body').append($dragTarget);
+ } else {
+ $dragTarget = $();
+ }
+
+ if (options.edge == 'left') {
+ menu_id.css('transform', 'translateX(-100%)');
+ $dragTarget.css({'left': 0}); // Add Touch Area
+ }
+ else {
+ menu_id.addClass('right-aligned') // Change text-alignment to right
+ .css('transform', 'translateX(100%)');
+ $dragTarget.css({'right': 0}); // Add Touch Area
+ }
+
+ // If fixed sidenav, bring menu out
+ if (menu_id.hasClass('fixed')) {
+ if (window.innerWidth > 992) {
+ menu_id.css('transform', 'translateX(0)');
+ }
+ }
+
+ // Window resize to reset on large screens fixed
+ if (menu_id.hasClass('fixed')) {
+ $(window).resize( function() {
+ if (window.innerWidth > 992) {
+ // Close menu if window is resized bigger than 992 and user has fixed sidenav
+ if ($('#sidenav-overlay').length !== 0 && menuOut) {
+ removeMenu(true);
+ }
+ else {
+ // menu_id.removeAttr('style');
+ menu_id.css('transform', 'translateX(0%)');
+ // menu_id.css('width', options.menuWidth);
+ }
+ }
+ else if (menuOut === false){
+ if (options.edge === 'left') {
+ menu_id.css('transform', 'translateX(-100%)');
+ } else {
+ menu_id.css('transform', 'translateX(100%)');
+ }
+
+ }
+
+ });
+ }
+
+ // if closeOnClick, then add close event for all a tags in side sideNav
+ if (options.closeOnClick === true) {
+ menu_id.on("click.itemclick", "a:not(.collapsible-header)", function(){
+ removeMenu();
+ });
+ }
+
+ var removeMenu = function(restoreNav) {
+ panning = false;
+ menuOut = false;
+ // Reenable scrolling
+ $('body').css({
+ overflow: '',
+ width: ''
+ });
+
+ $('#sidenav-overlay').velocity({opacity: 0}, {duration: 200,
+ queue: false, easing: 'easeOutQuad',
+ complete: function() {
+ $(this).remove();
+ } });
+ if (options.edge === 'left') {
+ // Reset phantom div
+ $dragTarget.css({width: '', right: '', left: '0'});
+ menu_id.velocity(
+ {'translateX': '-100%'},
+ { duration: 200,
+ queue: false,
+ easing: 'easeOutCubic',
+ complete: function() {
+ if (restoreNav === true) {
+ // Restore Fixed sidenav
+ menu_id.removeAttr('style');
+ menu_id.css('width', options.menuWidth);
+ }
+ }
+
+ });
+ }
+ else {
+ // Reset phantom div
+ $dragTarget.css({width: '', right: '0', left: ''});
+ menu_id.velocity(
+ {'translateX': '100%'},
+ { duration: 200,
+ queue: false,
+ easing: 'easeOutCubic',
+ complete: function() {
+ if (restoreNav === true) {
+ // Restore Fixed sidenav
+ menu_id.removeAttr('style');
+ menu_id.css('width', options.menuWidth);
+ }
+ }
+ });
+ }
+ };
+
+
+
+ // Touch Event
+ var panning = false;
+ var menuOut = false;
+
+ if (options.draggable) {
+ $dragTarget.on('click', function(){
+ if (menuOut) {
+ removeMenu();
+ }
+ });
+
+ $dragTarget.hammer({
+ prevent_default: false
+ }).bind('pan', function(e) {
+
+ if (e.gesture.pointerType == "touch") {
+
+ var direction = e.gesture.direction;
+ var x = e.gesture.center.x;
+ var y = e.gesture.center.y;
+ var velocityX = e.gesture.velocityX;
+
+ // Disable Scrolling
+ var $body = $('body');
+ var $overlay = $('#sidenav-overlay');
+ var oldWidth = $body.innerWidth();
+ $body.css('overflow', 'hidden');
+ $body.width(oldWidth);
+
+ // If overlay does not exist, create one and if it is clicked, close menu
+ if ($overlay.length === 0) {
+ $overlay = $('');
+ $overlay.css('opacity', 0).click( function(){
+ removeMenu();
+ });
+ $('body').append($overlay);
+ }
+
+ // Keep within boundaries
+ if (options.edge === 'left') {
+ if (x > options.menuWidth) { x = options.menuWidth; }
+ else if (x < 0) { x = 0; }
+ }
+
+ if (options.edge === 'left') {
+ // Left Direction
+ if (x < (options.menuWidth / 2)) { menuOut = false; }
+ // Right Direction
+ else if (x >= (options.menuWidth / 2)) { menuOut = true; }
+ menu_id.css('transform', 'translateX(' + (x - options.menuWidth) + 'px)');
+ }
+ else {
+ // Left Direction
+ if (x < (window.innerWidth - options.menuWidth / 2)) {
+ menuOut = true;
+ }
+ // Right Direction
+ else if (x >= (window.innerWidth - options.menuWidth / 2)) {
+ menuOut = false;
+ }
+ var rightPos = (x - options.menuWidth / 2);
+ if (rightPos < 0) {
+ rightPos = 0;
+ }
+
+ menu_id.css('transform', 'translateX(' + rightPos + 'px)');
+ }
+
+
+ // Percentage overlay
+ var overlayPerc;
+ if (options.edge === 'left') {
+ overlayPerc = x / options.menuWidth;
+ $overlay.velocity({opacity: overlayPerc }, {duration: 10, queue: false, easing: 'easeOutQuad'});
+ }
+ else {
+ overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth);
+ $overlay.velocity({opacity: overlayPerc }, {duration: 10, queue: false, easing: 'easeOutQuad'});
+ }
+ }
+
+ }).bind('panend', function(e) {
+
+ if (e.gesture.pointerType == "touch") {
+ var $overlay = $('');
+ var velocityX = e.gesture.velocityX;
+ var x = e.gesture.center.x;
+ var leftPos = x - options.menuWidth;
+ var rightPos = x - options.menuWidth / 2;
+ if (leftPos > 0 ) {
+ leftPos = 0;
+ }
+ if (rightPos < 0) {
+ rightPos = 0;
+ }
+ panning = false;
+
+ if (options.edge === 'left') {
+ // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut
+ if ((menuOut && velocityX <= 0.3) || velocityX < -0.5) {
+ // Return menu to open
+ if (leftPos !== 0) {
+ menu_id.velocity({'translateX': [0, leftPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+
+ $overlay.velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
+ $dragTarget.css({width: '50%', right: 0, left: ''});
+ menuOut = true;
+ }
+ else if (!menuOut || velocityX > 0.3) {
+ // Enable Scrolling
+ $('body').css({
+ overflow: '',
+ width: ''
+ });
+ // Slide menu closed
+ menu_id.velocity({'translateX': [-1 * options.menuWidth - 10, leftPos]}, {duration: 200, queue: false, easing: 'easeOutQuad'});
+ $overlay.velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad',
+ complete: function () {
+ $(this).remove();
+ }});
+ $dragTarget.css({width: '10px', right: '', left: 0});
+ }
+ }
+ else {
+ if ((menuOut && velocityX >= -0.3) || velocityX > 0.5) {
+ // Return menu to open
+ if (rightPos !== 0) {
+ menu_id.velocity({'translateX': [0, rightPos]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+
+ $overlay.velocity({opacity: 1 }, {duration: 50, queue: false, easing: 'easeOutQuad'});
+ $dragTarget.css({width: '50%', right: '', left: 0});
+ menuOut = true;
+ }
+ else if (!menuOut || velocityX < -0.3) {
+ // Enable Scrolling
+ $('body').css({
+ overflow: '',
+ width: ''
+ });
+
+ // Slide menu closed
+ menu_id.velocity({'translateX': [options.menuWidth + 10, rightPos]}, {duration: 200, queue: false, easing: 'easeOutQuad'});
+ $overlay.velocity({opacity: 0 }, {duration: 200, queue: false, easing: 'easeOutQuad',
+ complete: function () {
+ $(this).remove();
+ }});
+ $dragTarget.css({width: '10px', right: 0, left: ''});
+ }
+ }
+
+ }
+ });
+ }
+
+ $this.click(function() {
+ if (menuOut === true) {
+ menuOut = false;
+ panning = false;
+ removeMenu();
+ }
+ else {
+
+ // Disable Scrolling
+ var $body = $('body');
+ var $overlay = $('');
+ var oldWidth = $body.innerWidth();
+ $body.css('overflow', 'hidden');
+ $body.width(oldWidth);
+
+ // Push current drag target on top of DOM tree
+ $('body').append($dragTarget);
+
+ if (options.edge === 'left') {
+ $dragTarget.css({width: '50%', right: 0, left: ''});
+ menu_id.velocity({'translateX': [0, -1 * options.menuWidth]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+ else {
+ $dragTarget.css({width: '50%', right: '', left: 0});
+ menu_id.velocity({'translateX': [0, options.menuWidth]}, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+
+ $overlay.css('opacity', 0)
+ .click(function(){
+ menuOut = false;
+ panning = false;
+ removeMenu();
+ $overlay.velocity({opacity: 0}, {duration: 300, queue: false, easing: 'easeOutQuad',
+ complete: function() {
+ $(this).remove();
+ } });
+
+ });
+ $('body').append($overlay);
+ $overlay.velocity({opacity: 1}, {duration: 300, queue: false, easing: 'easeOutQuad',
+ complete: function () {
+ menuOut = true;
+ panning = false;
+ }
+ });
+ }
+
+ return false;
+ });
+ });
+
+
+ },
+ destroy: function () {
+ var $overlay = $('#sidenav-overlay');
+ var $dragTarget = $('.drag-target[data-sidenav="' + $(this).attr('data-activates') + '"]');
+ $overlay.trigger('click');
+ $dragTarget.remove();
+ $(this).off('click');
+ $overlay.remove();
+ },
+ show : function() {
+ this.trigger('click');
+ },
+ hide : function() {
+ $('#sidenav-overlay').trigger('click');
+ }
+ };
+
+
+ $.fn.sideNav = function(methodOrOptions) {
+ if ( methods[methodOrOptions] ) {
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
+ // Default to "init"
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.sideNav' );
+ }
+ }; // Plugin end
+}( jQuery ));
+;/**
+ * Extend jquery with a scrollspy plugin.
+ * This watches the window scroll and fires events when elements are scrolled into viewport.
+ *
+ * throttle() and getTime() taken from Underscore.js
+ * https://github.com/jashkenas/underscore
+ *
+ * @author Copyright 2013 John Smart
+ * @license https://raw.github.com/thesmart/jquery-scrollspy/master/LICENSE
+ * @see https://github.com/thesmart
+ * @version 0.1.2
+ */
+(function($) {
+
+ var jWindow = $(window);
+ var elements = [];
+ var elementsInView = [];
+ var isSpying = false;
+ var ticks = 0;
+ var unique_id = 1;
+ var offset = {
+ top : 0,
+ right : 0,
+ bottom : 0,
+ left : 0,
+ }
+
+ /**
+ * Find elements that are within the boundary
+ * @param {number} top
+ * @param {number} right
+ * @param {number} bottom
+ * @param {number} left
+ * @return {jQuery} A collection of elements
+ */
+ function findElements(top, right, bottom, left) {
+ var hits = $();
+ $.each(elements, function(i, element) {
+ if (element.height() > 0) {
+ var elTop = element.offset().top,
+ elLeft = element.offset().left,
+ elRight = elLeft + element.width(),
+ elBottom = elTop + element.height();
+
+ var isIntersect = !(elLeft > right ||
+ elRight < left ||
+ elTop > bottom ||
+ elBottom < top);
+
+ if (isIntersect) {
+ hits.push(element);
+ }
+ }
+ });
+
+ return hits;
+ }
+
+
+ /**
+ * Called when the user scrolls the window
+ */
+ function onScroll(scrollOffset) {
+ // unique tick id
+ ++ticks;
+
+ // viewport rectangle
+ var top = jWindow.scrollTop(),
+ left = jWindow.scrollLeft(),
+ right = left + jWindow.width(),
+ bottom = top + jWindow.height();
+
+ // determine which elements are in view
+ var intersections = findElements(top+offset.top + scrollOffset || 200, right+offset.right, bottom+offset.bottom, left+offset.left);
+ $.each(intersections, function(i, element) {
+
+ var lastTick = element.data('scrollSpy:ticks');
+ if (typeof lastTick != 'number') {
+ // entered into view
+ element.triggerHandler('scrollSpy:enter');
+ }
+
+ // update tick id
+ element.data('scrollSpy:ticks', ticks);
+ });
+
+ // determine which elements are no longer in view
+ $.each(elementsInView, function(i, element) {
+ var lastTick = element.data('scrollSpy:ticks');
+ if (typeof lastTick == 'number' && lastTick !== ticks) {
+ // exited from view
+ element.triggerHandler('scrollSpy:exit');
+ element.data('scrollSpy:ticks', null);
+ }
+ });
+
+ // remember elements in view for next tick
+ elementsInView = intersections;
+ }
+
+ /**
+ * Called when window is resized
+ */
+ function onWinSize() {
+ jWindow.trigger('scrollSpy:winSize');
+ }
+
+ /**
+ * Get time in ms
+ * @license https://raw.github.com/jashkenas/underscore/master/LICENSE
+ * @type {function}
+ * @return {number}
+ */
+ var getTime = (Date.now || function () {
+ return new Date().getTime();
+ });
+
+ /**
+ * Returns a function, that, when invoked, will only be triggered at most once
+ * during a given window of time. Normally, the throttled function will run
+ * as much as it can, without ever going more than once per `wait` duration;
+ * but if you'd like to disable the execution on the leading edge, pass
+ * `{leading: false}`. To disable execution on the trailing edge, ditto.
+ * @license https://raw.github.com/jashkenas/underscore/master/LICENSE
+ * @param {function} func
+ * @param {number} wait
+ * @param {Object=} options
+ * @returns {Function}
+ */
+ function throttle(func, wait, options) {
+ var context, args, result;
+ var timeout = null;
+ var previous = 0;
+ options || (options = {});
+ var later = function () {
+ previous = options.leading === false ? 0 : getTime();
+ timeout = null;
+ result = func.apply(context, args);
+ context = args = null;
+ };
+ return function () {
+ var now = getTime();
+ if (!previous && options.leading === false) previous = now;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ };
+
+ /**
+ * Enables ScrollSpy using a selector
+ * @param {jQuery|string} selector The elements collection, or a selector
+ * @param {Object=} options Optional.
+ throttle : number -> scrollspy throttling. Default: 100 ms
+ offsetTop : number -> offset from top. Default: 0
+ offsetRight : number -> offset from right. Default: 0
+ offsetBottom : number -> offset from bottom. Default: 0
+ offsetLeft : number -> offset from left. Default: 0
+ * @returns {jQuery}
+ */
+ $.scrollSpy = function(selector, options) {
+ var defaults = {
+ throttle: 100,
+ scrollOffset: 200 // offset - 200 allows elements near bottom of page to scroll
+ };
+ options = $.extend(defaults, options);
+
+ var visible = [];
+ selector = $(selector);
+ selector.each(function(i, element) {
+ elements.push($(element));
+ $(element).data("scrollSpy:id", i);
+ // Smooth scroll to section
+ $('a[href="#' + $(element).attr('id') + '"]').click(function(e) {
+ e.preventDefault();
+ var offset = $(Materialize.escapeHash(this.hash)).offset().top + 1;
+ $('html, body').animate({ scrollTop: offset - options.scrollOffset }, {duration: 400, queue: false, easing: 'easeOutCubic'});
+ });
+ });
+
+ offset.top = options.offsetTop || 0;
+ offset.right = options.offsetRight || 0;
+ offset.bottom = options.offsetBottom || 0;
+ offset.left = options.offsetLeft || 0;
+
+ var throttledScroll = throttle(function() {
+ onScroll(options.scrollOffset);
+ }, options.throttle || 100);
+ var readyScroll = function(){
+ $(document).ready(throttledScroll);
+ };
+
+ if (!isSpying) {
+ jWindow.on('scroll', readyScroll);
+ jWindow.on('resize', readyScroll);
+ isSpying = true;
+ }
+
+ // perform a scan once, after current execution context, and after dom is ready
+ setTimeout(readyScroll, 0);
+
+
+ selector.on('scrollSpy:enter', function() {
+ visible = $.grep(visible, function(value) {
+ return value.height() != 0;
+ });
+
+ var $this = $(this);
+
+ if (visible[0]) {
+ $('a[href="#' + visible[0].attr('id') + '"]').removeClass('active');
+ if ($this.data('scrollSpy:id') < visible[0].data('scrollSpy:id')) {
+ visible.unshift($(this));
+ }
+ else {
+ visible.push($(this));
+ }
+ }
+ else {
+ visible.push($(this));
+ }
+
+
+ $('a[href="#' + visible[0].attr('id') + '"]').addClass('active');
+ });
+ selector.on('scrollSpy:exit', function() {
+ visible = $.grep(visible, function(value) {
+ return value.height() != 0;
+ });
+
+ if (visible[0]) {
+ $('a[href="#' + visible[0].attr('id') + '"]').removeClass('active');
+ var $this = $(this);
+ visible = $.grep(visible, function(value) {
+ return value.attr('id') != $this.attr('id');
+ });
+ if (visible[0]) { // Check if empty
+ $('a[href="#' + visible[0].attr('id') + '"]').addClass('active');
+ }
+ }
+ });
+
+ return selector;
+ };
+
+ /**
+ * Listen for window resize events
+ * @param {Object=} options Optional. Set { throttle: number } to change throttling. Default: 100 ms
+ * @returns {jQuery} $(window)
+ */
+ $.winSizeSpy = function(options) {
+ $.winSizeSpy = function() { return jWindow; }; // lock from multiple calls
+ options = options || {
+ throttle: 100
+ };
+ return jWindow.on('resize', throttle(onWinSize, options.throttle || 100));
+ };
+
+ /**
+ * Enables ScrollSpy on a collection of elements
+ * e.g. $('.scrollSpy').scrollSpy()
+ * @param {Object=} options Optional.
+ throttle : number -> scrollspy throttling. Default: 100 ms
+ offsetTop : number -> offset from top. Default: 0
+ offsetRight : number -> offset from right. Default: 0
+ offsetBottom : number -> offset from bottom. Default: 0
+ offsetLeft : number -> offset from left. Default: 0
+ * @returns {jQuery}
+ */
+ $.fn.scrollSpy = function(options) {
+ return $.scrollSpy($(this), options);
+ };
+
+})(jQuery);
+;(function ($) {
+ $(document).ready(function() {
+
+ // Function to update labels of text fields
+ Materialize.updateTextFields = function() {
+ var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
+ $(input_selector).each(function(index, element) {
+ if ($(element).val().length > 0 || element.autofocus ||$(this).attr('placeholder') !== undefined || $(element)[0].validity.badInput === true) {
+ $(this).siblings('label').addClass('active');
+ }
+ else {
+ $(this).siblings('label').removeClass('active');
+ }
+ });
+ };
+
+ // Text based inputs
+ var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea';
+
+ // Add active if form auto complete
+ $(document).on('change', input_selector, function () {
+ if($(this).val().length !== 0 || $(this).attr('placeholder') !== undefined) {
+ $(this).siblings('label').addClass('active');
+ }
+ validate_field($(this));
+ });
+
+ // Add active if input element has been pre-populated on document ready
+ $(document).ready(function() {
+ Materialize.updateTextFields();
+ });
+
+ // HTML DOM FORM RESET handling
+ $(document).on('reset', function(e) {
+ var formReset = $(e.target);
+ if (formReset.is('form')) {
+ formReset.find(input_selector).removeClass('valid').removeClass('invalid');
+ formReset.find(input_selector).each(function () {
+ if ($(this).attr('value') === '') {
+ $(this).siblings('label').removeClass('active');
+ }
+ });
+
+ // Reset select
+ formReset.find('select.initialized').each(function () {
+ var reset_text = formReset.find('option[selected]').text();
+ formReset.siblings('input.select-dropdown').val(reset_text);
+ });
+ }
+ });
+
+ // Add active when element has focus
+ $(document).on('focus', input_selector, function () {
+ $(this).siblings('label, .prefix').addClass('active');
+ });
+
+ $(document).on('blur', input_selector, function () {
+ var $inputElement = $(this);
+ var selector = ".prefix";
+
+ if ($inputElement.val().length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === undefined) {
+ selector += ", label";
+ }
+
+ $inputElement.siblings(selector).removeClass('active');
+
+ validate_field($inputElement);
+ });
+
+ window.validate_field = function(object) {
+ var hasLength = object.attr('length') !== undefined;
+ var lenAttr = parseInt(object.attr('length'));
+ var len = object.val().length;
+
+ if (object.val().length === 0 && object[0].validity.badInput === false) {
+ if (object.hasClass('validate')) {
+ object.removeClass('valid');
+ object.removeClass('invalid');
+ }
+ }
+ else {
+ if (object.hasClass('validate')) {
+ // Check for character counter attributes
+ if ((object.is(':valid') && hasLength && (len <= lenAttr)) || (object.is(':valid') && !hasLength)) {
+ object.removeClass('invalid');
+ object.addClass('valid');
+ }
+ else {
+ object.removeClass('valid');
+ object.addClass('invalid');
+ }
+ }
+ }
+ };
+
+ // Radio and Checkbox focus class
+ var radio_checkbox = 'input[type=radio], input[type=checkbox]';
+ $(document).on('keyup.radio', radio_checkbox, function(e) {
+ // TAB, check if tabbing to radio or checkbox.
+ if (e.which === 9) {
+ $(this).addClass('tabbed');
+ var $this = $(this);
+ $this.one('blur', function(e) {
+
+ $(this).removeClass('tabbed');
+ });
+ return;
+ }
+ });
+
+ // Textarea Auto Resize
+ var hiddenDiv = $('.hiddendiv').first();
+ if (!hiddenDiv.length) {
+ hiddenDiv = $('');
+ $('body').append(hiddenDiv);
+ }
+ var text_area_selector = '.materialize-textarea';
+
+ function textareaAutoResize($textarea) {
+ // Set font properties of hiddenDiv
+
+ var fontFamily = $textarea.css('font-family');
+ var fontSize = $textarea.css('font-size');
+ var lineHeight = $textarea.css('line-height');
+
+ if (fontSize) { hiddenDiv.css('font-size', fontSize); }
+ if (fontFamily) { hiddenDiv.css('font-family', fontFamily); }
+ if (lineHeight) { hiddenDiv.css('line-height', lineHeight); }
+
+ if ($textarea.attr('wrap') === "off") {
+ hiddenDiv.css('overflow-wrap', "normal")
+ .css('white-space', "pre");
+ }
+
+ hiddenDiv.text($textarea.val() + '\n');
+ var content = hiddenDiv.html().replace(/\n/g, '
');
+ hiddenDiv.html(content);
+
+
+ // When textarea is hidden, width goes crazy.
+ // Approximate with half of window size
+
+ if ($textarea.is(':visible')) {
+ hiddenDiv.css('width', $textarea.width());
+ }
+ else {
+ hiddenDiv.css('width', $(window).width()/2);
+ }
+
+ $textarea.css('height', hiddenDiv.height());
+ }
+
+ $(text_area_selector).each(function () {
+ var $textarea = $(this);
+ if ($textarea.val().length) {
+ textareaAutoResize($textarea);
+ }
+ });
+
+ $('body').on('keyup keydown autoresize', text_area_selector, function () {
+ textareaAutoResize($(this));
+ });
+
+ // File Input Path
+ $(document).on('change', '.file-field input[type="file"]', function () {
+ var file_field = $(this).closest('.file-field');
+ var path_input = file_field.find('input.file-path');
+ var files = $(this)[0].files;
+ var file_names = [];
+ for (var i = 0; i < files.length; i++) {
+ file_names.push(files[i].name);
+ }
+ path_input.val(file_names.join(", "));
+ path_input.trigger('change');
+ });
+
+ /****************
+ * Range Input *
+ ****************/
+
+ var range_type = 'input[type=range]';
+ var range_mousedown = false;
+ var left;
+
+ $(range_type).each(function () {
+ var thumb = $('');
+ $(this).after(thumb);
+ });
+
+ var range_wrapper = '.range-field';
+ $(document).on('change', range_type, function(e) {
+ var thumb = $(this).siblings('.thumb');
+ thumb.find('.value').html($(this).val());
+ });
+
+ $(document).on('input mousedown touchstart', range_type, function(e) {
+ var thumb = $(this).siblings('.thumb');
+ var width = $(this).outerWidth();
+
+ // If thumb indicator does not exist yet, create it
+ if (thumb.length <= 0) {
+ thumb = $('');
+ $(this).after(thumb);
+ }
+
+ // Set indicator value
+ thumb.find('.value').html($(this).val());
+
+ range_mousedown = true;
+ $(this).addClass('active');
+
+ if (!thumb.hasClass('active')) {
+ thumb.velocity({ height: "30px", width: "30px", top: "-20px", marginLeft: "-15px"}, { duration: 300, easing: 'easeOutExpo' });
+ }
+
+ if (e.type !== 'input') {
+ if(e.pageX === undefined || e.pageX === null){//mobile
+ left = e.originalEvent.touches[0].pageX - $(this).offset().left;
+ }
+ else{ // desktop
+ left = e.pageX - $(this).offset().left;
+ }
+ if (left < 0) {
+ left = 0;
+ }
+ else if (left > width) {
+ left = width;
+ }
+ thumb.addClass('active').css('left', left);
+ }
+
+ thumb.find('.value').html($(this).val());
+ });
+
+ $(document).on('mouseup touchend', range_wrapper, function() {
+ range_mousedown = false;
+ $(this).removeClass('active');
+ });
+
+ $(document).on('mousemove touchmove', range_wrapper, function(e) {
+ var thumb = $(this).children('.thumb');
+ var left;
+ if (range_mousedown) {
+ if (!thumb.hasClass('active')) {
+ thumb.velocity({ height: '30px', width: '30px', top: '-20px', marginLeft: '-15px'}, { duration: 300, easing: 'easeOutExpo' });
+ }
+ if (e.pageX === undefined || e.pageX === null) { //mobile
+ left = e.originalEvent.touches[0].pageX - $(this).offset().left;
+ }
+ else{ // desktop
+ left = e.pageX - $(this).offset().left;
+ }
+ var width = $(this).outerWidth();
+
+ if (left < 0) {
+ left = 0;
+ }
+ else if (left > width) {
+ left = width;
+ }
+ thumb.addClass('active').css('left', left);
+ thumb.find('.value').html(thumb.siblings(range_type).val());
+ }
+ });
+
+ $(document).on('mouseout touchleave', range_wrapper, function() {
+ if (!range_mousedown) {
+
+ var thumb = $(this).children('.thumb');
+
+ if (thumb.hasClass('active')) {
+ thumb.velocity({ height: '0', width: '0', top: '10px', marginLeft: '-6px'}, { duration: 100 });
+ }
+ thumb.removeClass('active');
+ }
+ });
+
+ /**************************
+ * Auto complete plugin *
+ *************************/
+ $.fn.autocomplete = function (options) {
+ // Defaults
+ var defaults = {
+ data: {}
+ };
+
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+ var $input = $(this);
+ var data = options.data,
+ $inputDiv = $input.closest('.input-field'); // Div to append on
+
+ // Check if data isn't empty
+ if (!$.isEmptyObject(data)) {
+ // Create autocomplete element
+ var $autocomplete = $('
');
+
+ // Append autocomplete element
+ if ($inputDiv.length) {
+ $inputDiv.append($autocomplete); // Set ul in body
+ } else {
+ $input.after($autocomplete);
+ }
+
+ var highlight = function(string, $el) {
+ var img = $el.find('img');
+ var matchStart = $el.text().toLowerCase().indexOf("" + string.toLowerCase() + ""),
+ matchEnd = matchStart + string.length - 1,
+ beforeMatch = $el.text().slice(0, matchStart),
+ matchText = $el.text().slice(matchStart, matchEnd + 1),
+ afterMatch = $el.text().slice(matchEnd + 1);
+ $el.html("" + beforeMatch + "" + matchText + "" + afterMatch + "");
+ if (img.length) {
+ $el.prepend(img);
+ }
+ };
+
+ // Perform search
+ $input.on('keyup', function (e) {
+ // Capture Enter
+ if (e.which === 13) {
+ $autocomplete.find('li').first().click();
+ return;
+ }
+
+ var val = $input.val().toLowerCase();
+ $autocomplete.empty();
+
+ // Check if the input isn't empty
+ if (val !== '') {
+ for(var key in data) {
+ if (data.hasOwnProperty(key) &&
+ key.toLowerCase().indexOf(val) !== -1 &&
+ key.toLowerCase() !== val) {
+ var autocompleteOption = $('');
+ if(!!data[key]) {
+ autocompleteOption.append(''+ key +'');
+ } else {
+ autocompleteOption.append(''+ key +'');
+ }
+ $autocomplete.append(autocompleteOption);
+
+ highlight(val, autocompleteOption);
+ }
+ }
+ }
+ });
+
+ // Set input value
+ $autocomplete.on('click', 'li', function () {
+ $input.val($(this).text().trim());
+ $input.trigger('change');
+ $autocomplete.empty();
+ });
+ }
+ });
+ };
+
+ }); // End of $(document).ready
+
+ /*******************
+ * Select Plugin *
+ ******************/
+ $.fn.material_select = function (callback) {
+ $(this).each(function(){
+ var $select = $(this);
+
+ if ($select.hasClass('browser-default')) {
+ return; // Continue to next (return false breaks out of entire loop)
+ }
+
+ var multiple = $select.attr('multiple') ? true : false,
+ lastID = $select.data('select-id'); // Tear down structure if Select needs to be rebuilt
+
+ if (lastID) {
+ $select.parent().find('span.caret').remove();
+ $select.parent().find('input').remove();
+
+ $select.unwrap();
+ $('ul#select-options-'+lastID).remove();
+ }
+
+ // If destroying the select, remove the selelct-id and reset it to it's uninitialized state.
+ if(callback === 'destroy') {
+ $select.data('select-id', null).removeClass('initialized');
+ return;
+ }
+
+ var uniqueID = Materialize.guid();
+ $select.data('select-id', uniqueID);
+ var wrapper = $('');
+ wrapper.addClass($select.attr('class'));
+ var options = $('
'),
+ selectChildren = $select.children('option, optgroup'),
+ valuesSelected = [],
+ optionsHover = false;
+
+ var label = $select.find('option:selected').html() || $select.find('option:first').html() || "";
+
+ // Function that renders and appends the option taking into
+ // account type and possible image icon.
+ var appendOptionWithIcon = function(select, option, type) {
+ // Add disabled attr if disabled
+ var disabledClass = (option.is(':disabled')) ? 'disabled ' : '';
+ var optgroupClass = (type === 'optgroup-option') ? 'optgroup-option ' : '';
+
+ // add icons
+ var icon_url = option.data('icon');
+ var classes = option.attr('class');
+ if (!!icon_url) {
+ var classString = '';
+ if (!!classes) classString = ' class="' + classes + '"';
+
+ // Check for multiple type.
+ if (type === 'multiple') {
+ options.append($('' + option.html() + ' '));
+ } else {
+ options.append($('' + option.html() + ' '));
+ }
+ return true;
+ }
+
+ // Check for multiple type.
+ if (type === 'multiple') {
+ options.append($('' + option.html() + ' '));
+ } else {
+ options.append($('' + option.html() + ' '));
+ }
+ };
+
+ /* Create dropdown structure. */
+ if (selectChildren.length) {
+ selectChildren.each(function() {
+ if ($(this).is('option')) {
+ // Direct descendant option.
+ if (multiple) {
+ appendOptionWithIcon($select, $(this), 'multiple');
+
+ } else {
+ appendOptionWithIcon($select, $(this));
+ }
+ } else if ($(this).is('optgroup')) {
+ // Optgroup.
+ var selectOptions = $(this).children('option');
+ options.append($('' + $(this).attr('label') + ' '));
+
+ selectOptions.each(function() {
+ appendOptionWithIcon($select, $(this), 'optgroup-option');
+ });
+ }
+ });
+ }
+
+ options.find('li:not(.optgroup)').each(function (i) {
+ $(this).click(function (e) {
+ // Check if option element is disabled
+ if (!$(this).hasClass('disabled') && !$(this).hasClass('optgroup')) {
+ var selected = true;
+
+ if (multiple) {
+ $('input[type="checkbox"]', this).prop('checked', function(i, v) { return !v; });
+ selected = toggleEntryFromArray(valuesSelected, $(this).index(), $select);
+ $newSelect.trigger('focus');
+ } else {
+ options.find('li').removeClass('active');
+ $(this).toggleClass('active');
+ $newSelect.val($(this).text());
+ }
+
+ activateOption(options, $(this));
+ $select.find('option').eq(i).prop('selected', selected);
+ // Trigger onchange() event
+ $select.trigger('change');
+ if (typeof callback !== 'undefined') callback();
+ }
+
+ e.stopPropagation();
+ });
+ });
+
+ // Wrap Elements
+ $select.wrap(wrapper);
+ // Add Select Display Element
+ var dropdownIcon = $('▼');
+ if ($select.is(':disabled'))
+ dropdownIcon.addClass('disabled');
+
+ // escape double quotes
+ var sanitizedLabelHtml = label.replace(/"/g, '"');
+
+ var $newSelect = $('');
+ $select.before($newSelect);
+ $newSelect.before(dropdownIcon);
+
+ $newSelect.after(options);
+ // Check if section element is disabled
+ if (!$select.is(':disabled')) {
+ $newSelect.dropdown({'hover': false, 'closeOnClick': false});
+ }
+
+ // Copy tabindex
+ if ($select.attr('tabindex')) {
+ $($newSelect[0]).attr('tabindex', $select.attr('tabindex'));
+ }
+
+ $select.addClass('initialized');
+
+ $newSelect.on({
+ 'focus': function (){
+ if ($('ul.select-dropdown').not(options[0]).is(':visible')) {
+ $('input.select-dropdown').trigger('close');
+ }
+ if (!options.is(':visible')) {
+ $(this).trigger('open', ['focus']);
+ var label = $(this).val();
+ var selectedOption = options.find('li').filter(function() {
+ return $(this).text().toLowerCase() === label.toLowerCase();
+ })[0];
+ activateOption(options, selectedOption);
+ }
+ },
+ 'click': function (e){
+ e.stopPropagation();
+ }
+ });
+
+ $newSelect.on('blur', function() {
+ if (!multiple) {
+ $(this).trigger('close');
+ }
+ options.find('li.selected').removeClass('selected');
+ });
+
+ options.hover(function() {
+ optionsHover = true;
+ }, function () {
+ optionsHover = false;
+ });
+
+ $(window).on({
+ 'click': function () {
+ multiple && (optionsHover || $newSelect.trigger('close'));
+ }
+ });
+
+ // Add initial multiple selections.
+ if (multiple) {
+ $select.find("option:selected:not(:disabled)").each(function () {
+ var index = $(this).index();
+
+ toggleEntryFromArray(valuesSelected, index, $select);
+ options.find("li").eq(index).find(":checkbox").prop("checked", true);
+ });
+ }
+
+ // Make option as selected and scroll to selected position
+ var activateOption = function(collection, newOption) {
+ if (newOption) {
+ collection.find('li.selected').removeClass('selected');
+ var option = $(newOption);
+ option.addClass('selected');
+ options.scrollTo(option);
+ }
+ };
+
+ // Allow user to search by typing
+ // this array is cleared after 1 second
+ var filterQuery = [],
+ onKeyDown = function(e){
+ // TAB - switch to another input
+ if(e.which == 9){
+ $newSelect.trigger('close');
+ return;
+ }
+
+ // ARROW DOWN WHEN SELECT IS CLOSED - open select options
+ if(e.which == 40 && !options.is(':visible')){
+ $newSelect.trigger('open');
+ return;
+ }
+
+ // ENTER WHEN SELECT IS CLOSED - submit form
+ if(e.which == 13 && !options.is(':visible')){
+ return;
+ }
+
+ e.preventDefault();
+
+ // CASE WHEN USER TYPE LETTERS
+ var letter = String.fromCharCode(e.which).toLowerCase(),
+ nonLetters = [9,13,27,38,40];
+ if (letter && (nonLetters.indexOf(e.which) === -1)) {
+ filterQuery.push(letter);
+
+ var string = filterQuery.join(''),
+ newOption = options.find('li').filter(function() {
+ return $(this).text().toLowerCase().indexOf(string) === 0;
+ })[0];
+
+ if (newOption) {
+ activateOption(options, newOption);
+ }
+ }
+
+ // ENTER - select option and close when select options are opened
+ if (e.which == 13) {
+ var activeOption = options.find('li.selected:not(.disabled)')[0];
+ if(activeOption){
+ $(activeOption).trigger('click');
+ if (!multiple) {
+ $newSelect.trigger('close');
+ }
+ }
+ }
+
+ // ARROW DOWN - move to next not disabled option
+ if (e.which == 40) {
+ if (options.find('li.selected').length) {
+ newOption = options.find('li.selected').next('li:not(.disabled)')[0];
+ } else {
+ newOption = options.find('li:not(.disabled)')[0];
+ }
+ activateOption(options, newOption);
+ }
+
+ // ESC - close options
+ if (e.which == 27) {
+ $newSelect.trigger('close');
+ }
+
+ // ARROW UP - move to previous not disabled option
+ if (e.which == 38) {
+ newOption = options.find('li.selected').prev('li:not(.disabled)')[0];
+ if(newOption)
+ activateOption(options, newOption);
+ }
+
+ // Automaticaly clean filter query so user can search again by starting letters
+ setTimeout(function(){ filterQuery = []; }, 1000);
+ };
+
+ $newSelect.on('keydown', onKeyDown);
+ });
+
+ function toggleEntryFromArray(entriesArray, entryIndex, select) {
+ var index = entriesArray.indexOf(entryIndex),
+ notAdded = index === -1;
+
+ if (notAdded) {
+ entriesArray.push(entryIndex);
+ } else {
+ entriesArray.splice(index, 1);
+ }
+
+ select.siblings('ul.dropdown-content').find('li').eq(entryIndex).toggleClass('active');
+
+ // use notAdded instead of true (to detect if the option is selected or not)
+ select.find('option').eq(entryIndex).prop('selected', notAdded);
+ setValueToInput(entriesArray, select);
+
+ return notAdded;
+ }
+
+ function setValueToInput(entriesArray, select) {
+ var value = '';
+
+ for (var i = 0, count = entriesArray.length; i < count; i++) {
+ var text = select.find('option').eq(entriesArray[i]).text();
+
+ i === 0 ? value += text : value += ', ' + text;
+ }
+
+ if (value === '') {
+ value = select.find('option:disabled').eq(0).text();
+ }
+
+ select.siblings('input.select-dropdown').val(value);
+ }
+ };
+
+}( jQuery ));
+;(function ($) {
+
+ var methods = {
+
+ init : function(options) {
+ var defaults = {
+ indicators: true,
+ height: 400,
+ transition: 500,
+ interval: 6000
+ };
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+
+ // For each slider, we want to keep track of
+ // which slide is active and its associated content
+ var $this = $(this);
+ var $slider = $this.find('ul.slides').first();
+ var $slides = $slider.find('> li');
+ var $active_index = $slider.find('.active').index();
+ var $active, $indicators, $interval;
+ if ($active_index != -1) { $active = $slides.eq($active_index); }
+
+ // Transitions the caption depending on alignment
+ function captionTransition(caption, duration) {
+ if (caption.hasClass("center-align")) {
+ caption.velocity({opacity: 0, translateY: -100}, {duration: duration, queue: false});
+ }
+ else if (caption.hasClass("right-align")) {
+ caption.velocity({opacity: 0, translateX: 100}, {duration: duration, queue: false});
+ }
+ else if (caption.hasClass("left-align")) {
+ caption.velocity({opacity: 0, translateX: -100}, {duration: duration, queue: false});
+ }
+ }
+
+ // This function will transition the slide to any index of the next slide
+ function moveToSlide(index) {
+ // Wrap around indices.
+ if (index >= $slides.length) index = 0;
+ else if (index < 0) index = $slides.length -1;
+
+ $active_index = $slider.find('.active').index();
+
+ // Only do if index changes
+ if ($active_index != index) {
+ $active = $slides.eq($active_index);
+ $caption = $active.find('.caption');
+
+ $active.removeClass('active');
+ $active.velocity({opacity: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad',
+ complete: function() {
+ $slides.not('.active').velocity({opacity: 0, translateX: 0, translateY: 0}, {duration: 0, queue: false});
+ } });
+ captionTransition($caption, options.transition);
+
+
+ // Update indicators
+ if (options.indicators) {
+ $indicators.eq($active_index).removeClass('active');
+ }
+
+ $slides.eq(index).velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
+ $slides.eq(index).find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, delay: options.transition, queue: false, easing: 'easeOutQuad'});
+ $slides.eq(index).addClass('active');
+
+
+ // Update indicators
+ if (options.indicators) {
+ $indicators.eq(index).addClass('active');
+ }
+ }
+ }
+
+ // Set height of slider
+ // If fullscreen, do nothing
+ if (!$this.hasClass('fullscreen')) {
+ if (options.indicators) {
+ // Add height if indicators are present
+ $this.height(options.height + 40);
+ }
+ else {
+ $this.height(options.height);
+ }
+ $slider.height(options.height);
+ }
+
+
+ // Set initial positions of captions
+ $slides.find('.caption').each(function () {
+ captionTransition($(this), 0);
+ });
+
+ // Move img src into background-image
+ $slides.find('img').each(function () {
+ var placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
+ if ($(this).attr('src') !== placeholderBase64) {
+ $(this).css('background-image', 'url(' + $(this).attr('src') + ')' );
+ $(this).attr('src', placeholderBase64);
+ }
+ });
+
+ // dynamically add indicators
+ if (options.indicators) {
+ $indicators = $('
');
+ $slides.each(function( index ) {
+ var $indicator = $('');
+
+ // Handle clicks on indicators
+ $indicator.click(function () {
+ var $parent = $slider.parent();
+ var curr_index = $parent.find($(this)).index();
+ moveToSlide(curr_index);
+
+ // reset interval
+ clearInterval($interval);
+ $interval = setInterval(
+ function(){
+ $active_index = $slider.find('.active').index();
+ if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
+ else $active_index += 1;
+
+ moveToSlide($active_index);
+
+ }, options.transition + options.interval
+ );
+ });
+ $indicators.append($indicator);
+ });
+ $this.append($indicators);
+ $indicators = $this.find('ul.indicators').find('li.indicator-item');
+ }
+
+ if ($active) {
+ $active.show();
+ }
+ else {
+ $slides.first().addClass('active').velocity({opacity: 1}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
+
+ $active_index = 0;
+ $active = $slides.eq($active_index);
+
+ // Update indicators
+ if (options.indicators) {
+ $indicators.eq($active_index).addClass('active');
+ }
+ }
+
+ // Adjust height to current slide
+ $active.find('img').each(function() {
+ $active.find('.caption').velocity({opacity: 1, translateX: 0, translateY: 0}, {duration: options.transition, queue: false, easing: 'easeOutQuad'});
+ });
+
+ // auto scroll
+ $interval = setInterval(
+ function(){
+ $active_index = $slider.find('.active').index();
+ moveToSlide($active_index + 1);
+
+ }, options.transition + options.interval
+ );
+
+
+ // HammerJS, Swipe navigation
+
+ // Touch Event
+ var panning = false;
+ var swipeLeft = false;
+ var swipeRight = false;
+
+ $this.hammer({
+ prevent_default: false
+ }).bind('pan', function(e) {
+ if (e.gesture.pointerType === "touch") {
+
+ // reset interval
+ clearInterval($interval);
+
+ var direction = e.gesture.direction;
+ var x = e.gesture.deltaX;
+ var velocityX = e.gesture.velocityX;
+
+ $curr_slide = $slider.find('.active');
+ $curr_slide.velocity({ translateX: x
+ }, {duration: 50, queue: false, easing: 'easeOutQuad'});
+
+ // Swipe Left
+ if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.65)) {
+ swipeRight = true;
+ }
+ // Swipe Right
+ else if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.65)) {
+ swipeLeft = true;
+ }
+
+ // Make Slide Behind active slide visible
+ var next_slide;
+ if (swipeLeft) {
+ next_slide = $curr_slide.next();
+ if (next_slide.length === 0) {
+ next_slide = $slides.first();
+ }
+ next_slide.velocity({ opacity: 1
+ }, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+ if (swipeRight) {
+ next_slide = $curr_slide.prev();
+ if (next_slide.length === 0) {
+ next_slide = $slides.last();
+ }
+ next_slide.velocity({ opacity: 1
+ }, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+
+
+ }
+
+ }).bind('panend', function(e) {
+ if (e.gesture.pointerType === "touch") {
+
+ $curr_slide = $slider.find('.active');
+ panning = false;
+ curr_index = $slider.find('.active').index();
+
+ if (!swipeRight && !swipeLeft || $slides.length <=1) {
+ // Return to original spot
+ $curr_slide.velocity({ translateX: 0
+ }, {duration: 300, queue: false, easing: 'easeOutQuad'});
+ }
+ else if (swipeLeft) {
+ moveToSlide(curr_index + 1);
+ $curr_slide.velocity({translateX: -1 * $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad',
+ complete: function() {
+ $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false});
+ } });
+ }
+ else if (swipeRight) {
+ moveToSlide(curr_index - 1);
+ $curr_slide.velocity({translateX: $this.innerWidth() }, {duration: 300, queue: false, easing: 'easeOutQuad',
+ complete: function() {
+ $curr_slide.velocity({opacity: 0, translateX: 0}, {duration: 0, queue: false});
+ } });
+ }
+ swipeLeft = false;
+ swipeRight = false;
+
+ // Restart interval
+ clearInterval($interval);
+ $interval = setInterval(
+ function(){
+ $active_index = $slider.find('.active').index();
+ if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
+ else $active_index += 1;
+
+ moveToSlide($active_index);
+
+ }, options.transition + options.interval
+ );
+ }
+ });
+
+ $this.on('sliderPause', function() {
+ clearInterval($interval);
+ });
+
+ $this.on('sliderStart', function() {
+ clearInterval($interval);
+ $interval = setInterval(
+ function(){
+ $active_index = $slider.find('.active').index();
+ if ($slides.length == $active_index + 1) $active_index = 0; // loop to start
+ else $active_index += 1;
+
+ moveToSlide($active_index);
+
+ }, options.transition + options.interval
+ );
+ });
+
+ $this.on('sliderNext', function() {
+ $active_index = $slider.find('.active').index();
+ moveToSlide($active_index + 1);
+ });
+
+ $this.on('sliderPrev', function() {
+ $active_index = $slider.find('.active').index();
+ moveToSlide($active_index - 1);
+ });
+
+ });
+
+
+
+ },
+ pause : function() {
+ $(this).trigger('sliderPause');
+ },
+ start : function() {
+ $(this).trigger('sliderStart');
+ },
+ next : function() {
+ $(this).trigger('sliderNext');
+ },
+ prev : function() {
+ $(this).trigger('sliderPrev');
+ }
+ };
+
+
+ $.fn.slider = function(methodOrOptions) {
+ if ( methods[methodOrOptions] ) {
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
+ // Default to "init"
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.tooltip' );
+ }
+ }; // Plugin end
+}( jQuery ));
+;(function ($) {
+ $(document).ready(function() {
+
+ $(document).on('click.card', '.card', function (e) {
+ if ($(this).find('> .card-reveal').length) {
+ if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) {
+ // Make Reveal animate down and display none
+ $(this).find('.card-reveal').velocity(
+ {translateY: 0}, {
+ duration: 225,
+ queue: false,
+ easing: 'easeInOutQuad',
+ complete: function() { $(this).css({ display: 'none'}); }
+ }
+ );
+ }
+ else if ($(e.target).is($('.card .activator')) ||
+ $(e.target).is($('.card .activator i')) ) {
+ $(e.target).closest('.card').css('overflow', 'hidden');
+ $(this).find('.card-reveal').css({ display: 'block'}).velocity("stop", false).velocity({translateY: '-100%'}, {duration: 300, queue: false, easing: 'easeInOutQuad'});
+ }
+ }
+ });
+
+ });
+}( jQuery ));;(function ($) {
+ var chipsHandleEvents = false;
+ var materialChipsDefaults = {
+ data: [],
+ placeholder: '',
+ secondaryPlaceholder: '',
+ };
+
+ $(document).ready(function() {
+ // Handle removal of static chips.
+ $(document).on('click', '.chip .close', function(e){
+ var $chips = $(this).closest('.chips');
+ if ($chips.attr('data-initialized')) {
+ return;
+ }
+ $(this).closest('.chip').remove();
+ });
+ });
+
+ $.fn.material_chip = function (options) {
+ var self = this;
+ this.$el = $(this);
+ this.$document = $(document);
+ this.SELS = {
+ CHIPS: '.chips',
+ CHIP: '.chip',
+ INPUT: 'input',
+ DELETE: '.material-icons',
+ SELECTED_CHIP: '.selected',
+ };
+
+ if ('data' === options) {
+ return this.$el.data('chips');
+ }
+
+ var curr_options = $.extend({}, materialChipsDefaults, options);
+
+
+ // Initialize
+ this.init = function() {
+ var i = 0;
+ var chips;
+ self.$el.each(function(){
+ var $chips = $(this);
+ var chipId = Materialize.guid();
+
+ if (!curr_options.data || !(curr_options.data instanceof Array)) {
+ curr_options.data = [];
+ }
+ $chips.data('chips', curr_options.data);
+ $chips.attr('data-index', i);
+ $chips.attr('data-initialized', true);
+
+ if (!$chips.hasClass(self.SELS.CHIPS)) {
+ $chips.addClass('chips');
+ }
+
+ self.chips($chips, chipId);
+ i++;
+ });
+ };
+
+ this.handleEvents = function(){
+ var SELS = self.SELS;
+
+ self.$document.off('click.chips-focus', SELS.CHIPS).on('click.chips-focus', SELS.CHIPS, function(e){
+ $(e.target).find(SELS.INPUT).focus();
+ });
+
+ self.$document.off('click.chips-select', SELS.CHIP).on('click.chips-select', SELS.CHIP, function(e){
+ $(SELS.CHIP).removeClass('selected');
+ $(this).toggleClass('selected');
+ });
+
+ self.$document.off('keydown.chips').on('keydown.chips', function(e){
+ if ($(e.target).is('input, textarea')) {
+ return;
+ }
+
+ // delete
+ var $chip = self.$document.find(SELS.CHIP + SELS.SELECTED_CHIP);
+ var $chips = $chip.closest(SELS.CHIPS);
+ var length = $chip.siblings(SELS.CHIP).length;
+ var index;
+
+ if (!$chip.length) {
+ return;
+ }
+
+ if (e.which === 8 || e.which === 46) {
+ e.preventDefault();
+
+ index = $chip.index();
+ self.deleteChip(index, $chips);
+
+ var selectIndex = null;
+ if ((index + 1) < length) {
+ selectIndex = index;
+ } else if (index === length || (index + 1) === length) {
+ selectIndex = length - 1;
+ }
+
+ if (selectIndex < 0) selectIndex = null;
+
+ if (null !== selectIndex) {
+ self.selectChip(selectIndex, $chips);
+ }
+ if (!length) $chips.find('input').focus();
+
+ // left
+ } else if (e.which === 37) {
+ index = $chip.index() - 1;
+ if (index < 0) {
+ return;
+ }
+ $(SELS.CHIP).removeClass('selected');
+ self.selectChip(index, $chips);
+
+ // right
+ } else if (e.which === 39) {
+ index = $chip.index() + 1;
+ $(SELS.CHIP).removeClass('selected');
+ if (index > length) {
+ $chips.find('input').focus();
+ return;
+ }
+ self.selectChip(index, $chips);
+ }
+ });
+
+ self.$document.off('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusin.chips', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
+ var $currChips = $(e.target).closest(SELS.CHIPS);
+ $currChips.addClass('focus');
+ $currChips.siblings('label, .prefix').addClass('active');
+ $(SELS.CHIP).removeClass('selected');
+ });
+
+ self.$document.off('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT).on('focusout.chips', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
+ var $currChips = $(e.target).closest(SELS.CHIPS);
+ $currChips.removeClass('focus');
+
+ // Remove active if empty
+ if (!$currChips.data('chips').length) {
+ $currChips.siblings('label').removeClass('active');
+ }
+ $currChips.siblings('.prefix').removeClass('active');
+ });
+
+ self.$document.off('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT).on('keydown.chips-add', SELS.CHIPS + ' ' + SELS.INPUT, function(e){
+ var $target = $(e.target);
+ var $chips = $target.closest(SELS.CHIPS);
+ var chipsLength = $chips.children(SELS.CHIP).length;
+
+ // enter
+ if (13 === e.which) {
+ e.preventDefault();
+ self.addChip({tag: $target.val()}, $chips);
+ $target.val('');
+ return;
+ }
+
+ // delete or left
+ if ((8 === e.keyCode || 37 === e.keyCode) && '' === $target.val() && chipsLength) {
+ self.selectChip(chipsLength - 1, $chips);
+ $target.blur();
+ return;
+ }
+ });
+
+ // Click on delete icon in chip.
+ self.$document.off('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE).on('click.chips-delete', SELS.CHIPS + ' ' + SELS.DELETE, function(e) {
+ var $target = $(e.target);
+ var $chips = $target.closest(SELS.CHIPS);
+ var $chip = $target.closest(SELS.CHIP);
+ e.stopPropagation();
+ self.deleteChip($chip.index(), $chips);
+ $chips.find('input').focus();
+ });
+ };
+
+ this.chips = function($chips, chipId) {
+ var html = '';
+ $chips.data('chips').forEach(function(elem){
+ html += self.renderChip(elem);
+ });
+ html += '';
+ $chips.html(html);
+ self.setPlaceholder($chips);
+
+ // Set for attribute for label
+ var label = $chips.next('label');
+ if (label.length) {
+ label.attr('for', chipId);
+
+ if ($chips.data('chips').length) {
+ label.addClass('active');
+ }
+ }
+ };
+
+ this.renderChip = function(elem) {
+ if (!elem.tag) return;
+
+ var html = '' + elem.tag;
+ if (elem.image) {
+ html += ' ';
+ }
+ html += 'close';
+ html += '';
+ return html;
+ };
+
+ this.setPlaceholder = function($chips) {
+ if ($chips.data('chips').length && curr_options.placeholder) {
+ $chips.find('input').prop('placeholder', curr_options.placeholder);
+
+ } else if (!$chips.data('chips').length && curr_options.secondaryPlaceholder) {
+ $chips.find('input').prop('placeholder', curr_options.secondaryPlaceholder);
+ }
+ };
+
+ this.isValid = function($chips, elem) {
+ var chips = $chips.data('chips');
+ var exists = false;
+ for (var i=0; i < chips.length; i++) {
+ if (chips[i].tag === elem.tag) {
+ exists = true;
+ return;
+ }
+ }
+ return '' !== elem.tag && !exists;
+ };
+
+ this.addChip = function(elem, $chips) {
+ if (!self.isValid($chips, elem)) {
+ return;
+ }
+ var chipHtml = self.renderChip(elem);
+ var newData = [];
+ var oldData = $chips.data('chips');
+ for (var i = 0; i < oldData.length; i++) {
+ newData.push(oldData[i]);
+ }
+ newData.push(elem);
+
+ $chips.data('chips', newData);
+ $(chipHtml).insertBefore($chips.find('input'));
+ $chips.trigger('chip.add', elem);
+ self.setPlaceholder($chips);
+ };
+
+ this.deleteChip = function(chipIndex, $chips) {
+ var chip = $chips.data('chips')[chipIndex];
+ $chips.find('.chip').eq(chipIndex).remove();
+
+ var newData = [];
+ var oldData = $chips.data('chips');
+ for (var i = 0; i < oldData.length; i++) {
+ if (i !== chipIndex) {
+ newData.push(oldData[i]);
+ }
+ }
+
+ $chips.data('chips', newData);
+ $chips.trigger('chip.delete', chip);
+ self.setPlaceholder($chips);
+ };
+
+ this.selectChip = function(chipIndex, $chips) {
+ var $chip = $chips.find('.chip').eq(chipIndex);
+ if ($chip && false === $chip.hasClass('selected')) {
+ $chip.addClass('selected');
+ $chips.trigger('chip.select', $chips.data('chips')[chipIndex]);
+ }
+ };
+
+ this.getChipsElement = function(index, $chips) {
+ return $chips.eq(index);
+ };
+
+ // init
+ this.init();
+
+ if (!chipsHandleEvents) {
+ this.handleEvents();
+ chipsHandleEvents = true;
+ }
+ };
+}( jQuery ));;(function ($) {
+ $.fn.pushpin = function (options) {
+ // Defaults
+ var defaults = {
+ top: 0,
+ bottom: Infinity,
+ offset: 0
+ };
+
+ // Remove pushpin event and classes
+ if (options === "remove") {
+ this.each(function () {
+ if (id = $(this).data('pushpin-id')) {
+ $(window).off('scroll.' + id);
+ $(this).removeData('pushpin-id').removeClass('pin-top pinned pin-bottom').removeAttr('style');
+ }
+ });
+ return false;
+ }
+
+ options = $.extend(defaults, options);
+
+
+ $index = 0;
+ return this.each(function() {
+ var $uniqueId = Materialize.guid(),
+ $this = $(this),
+ $original_offset = $(this).offset().top;
+
+ function removePinClasses(object) {
+ object.removeClass('pin-top');
+ object.removeClass('pinned');
+ object.removeClass('pin-bottom');
+ }
+
+ function updateElements(objects, scrolled) {
+ objects.each(function () {
+ // Add position fixed (because its between top and bottom)
+ if (options.top <= scrolled && options.bottom >= scrolled && !$(this).hasClass('pinned')) {
+ removePinClasses($(this));
+ $(this).css('top', options.offset);
+ $(this).addClass('pinned');
+ }
+
+ // Add pin-top (when scrolled position is above top)
+ if (scrolled < options.top && !$(this).hasClass('pin-top')) {
+ removePinClasses($(this));
+ $(this).css('top', 0);
+ $(this).addClass('pin-top');
+ }
+
+ // Add pin-bottom (when scrolled position is below bottom)
+ if (scrolled > options.bottom && !$(this).hasClass('pin-bottom')) {
+ removePinClasses($(this));
+ $(this).addClass('pin-bottom');
+ $(this).css('top', options.bottom - $original_offset);
+ }
+ });
+ }
+
+ $(this).data('pushpin-id', $uniqueId);
+ updateElements($this, $(window).scrollTop());
+ $(window).on('scroll.' + $uniqueId, function () {
+ var $scrolled = $(window).scrollTop() + options.offset;
+ updateElements($this, $scrolled);
+ });
+
+ });
+
+ };
+}( jQuery ));;(function ($) {
+ $(document).ready(function() {
+
+ // jQuery reverse
+ $.fn.reverse = [].reverse;
+
+ // Hover behaviour: make sure this doesn't work on .click-to-toggle FABs!
+ $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function(e) {
+ var $this = $(this);
+ openFABMenu($this);
+ });
+ $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle):not(.toolbar)', function(e) {
+ var $this = $(this);
+ closeFABMenu($this);
+ });
+
+ // Toggle-on-click behaviour.
+ $(document).on('click.fabClickToggle', '.fixed-action-btn.click-to-toggle > a', function(e) {
+ var $this = $(this);
+ var $menu = $this.parent();
+ if ($menu.hasClass('active')) {
+ closeFABMenu($menu);
+ } else {
+ openFABMenu($menu);
+ }
+ });
+
+ // Toolbar transition behaviour.
+ $(document).on('click.fabToolbar', '.fixed-action-btn.toolbar > a', function(e) {
+ var $this = $(this);
+ var $menu = $this.parent();
+ FABtoToolbar($menu);
+ });
+
+ });
+
+ $.fn.extend({
+ openFAB: function() {
+ openFABMenu($(this));
+ },
+ closeFAB: function() {
+ closeFABMenu($(this));
+ },
+ openToolbar: function() {
+ FABtoToolbar($(this));
+ },
+ closeToolbar: function() {
+ toolbarToFAB($(this));
+ }
+ });
+
+
+ var openFABMenu = function (btn) {
+ var $this = btn;
+ if ($this.hasClass('active') === false) {
+
+ // Get direction option
+ var horizontal = $this.hasClass('horizontal');
+ var offsetY, offsetX;
+
+ if (horizontal === true) {
+ offsetX = 40;
+ } else {
+ offsetY = 40;
+ }
+
+ $this.addClass('active');
+ $this.find('ul .btn-floating').velocity(
+ { scaleY: ".4", scaleX: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px'},
+ { duration: 0 });
+
+ var time = 0;
+ $this.find('ul .btn-floating').reverse().each( function () {
+ $(this).velocity(
+ { opacity: "1", scaleX: "1", scaleY: "1", translateY: "0", translateX: '0'},
+ { duration: 80, delay: time });
+ time += 40;
+ });
+ }
+ };
+
+ var closeFABMenu = function (btn) {
+ var $this = btn;
+ // Get direction option
+ var horizontal = $this.hasClass('horizontal');
+ var offsetY, offsetX;
+
+ if (horizontal === true) {
+ offsetX = 40;
+ } else {
+ offsetY = 40;
+ }
+
+ $this.removeClass('active');
+ var time = 0;
+ $this.find('ul .btn-floating').velocity("stop", true);
+ $this.find('ul .btn-floating').velocity(
+ { opacity: "0", scaleX: ".4", scaleY: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px'},
+ { duration: 80 }
+ );
+ };
+
+
+ /**
+ * Transform FAB into toolbar
+ * @param {Object} object jQuery object
+ */
+ var FABtoToolbar = function(btn) {
+ if (btn.attr('data-open') === "true") {
+ return;
+ }
+
+ var offsetX, offsetY, scaleFactor;
+ var windowWidth = window.innerWidth;
+ var windowHeight = window.innerHeight;
+ var btnRect = btn[0].getBoundingClientRect();
+ var anchor = btn.find('> a').first();
+ var menu = btn.find('> ul').first();
+ var backdrop = $('');
+ var fabColor = anchor.css('background-color');
+ anchor.append(backdrop);
+
+ offsetX = btnRect.left - (windowWidth / 2) + (btnRect.width / 2);
+ offsetY = windowHeight - btnRect.bottom;
+ scaleFactor = windowWidth / backdrop.width();
+ btn.attr('data-origin-bottom', btnRect.bottom);
+ btn.attr('data-origin-left', btnRect.left);
+ btn.attr('data-origin-width', btnRect.width);
+
+ // Set initial state
+ btn.addClass('active');
+ btn.attr('data-open', true);
+ btn.css({
+ 'text-align': 'center',
+ width: '100%',
+ bottom: 0,
+ left: 0,
+ transform: 'translateX(' + offsetX + 'px)',
+ transition: 'none'
+ });
+ anchor.css({
+ transform: 'translateY(' + -offsetY + 'px)',
+ transition: 'none'
+ });
+ backdrop.css({
+ 'background-color': fabColor
+ });
+
+
+ setTimeout(function() {
+ btn.css({
+ transform: '',
+ transition: 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s'
+ });
+ anchor.css({
+ overflow: 'visible',
+ transform: '',
+ transition: 'transform .2s'
+ });
+
+ setTimeout(function() {
+ btn.css({
+ overflow: 'hidden',
+ 'background-color': fabColor
+ });
+ backdrop.css({
+ transform: 'scale(' + scaleFactor + ')',
+ transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)'
+ });
+ menu.find('> li > a').css({
+ opacity: 1
+ });
+
+ // Scroll to close.
+ $(window).on('scroll.fabToolbarClose', function() {
+ toolbarToFAB(btn);
+ $(window).off('scroll.fabToolbarClose');
+ $(document).off('click.fabToolbarClose');
+ });
+
+ $(document).on('click.fabToolbarClose', function(e) {
+ if (!$(e.target).closest(menu).length) {
+ toolbarToFAB(btn);
+ $(window).off('scroll.fabToolbarClose');
+ $(document).off('click.fabToolbarClose');
+ }
+ });
+ }, 100);
+ }, 0);
+ };
+
+ /**
+ * Transform toolbar back into FAB
+ * @param {Object} object jQuery object
+ */
+ var toolbarToFAB = function(btn) {
+ if (btn.attr('data-open') !== "true") {
+ return;
+ }
+
+ var offsetX, offsetY, scaleFactor;
+ var windowWidth = window.innerWidth;
+ var windowHeight = window.innerHeight;
+ var btnWidth = btn.attr('data-origin-width');
+ var btnBottom = btn.attr('data-origin-bottom');
+ var btnLeft = btn.attr('data-origin-left');
+ var anchor = btn.find('> .btn-floating').first();
+ var menu = btn.find('> ul').first();
+ var backdrop = btn.find('.fab-backdrop');
+ var fabColor = anchor.css('background-color');
+
+ offsetX = btnLeft - (windowWidth / 2) + (btnWidth / 2);
+ offsetY = windowHeight - btnBottom;
+ scaleFactor = windowWidth / backdrop.width();
+
+
+ // Hide backdrop
+ btn.removeClass('active');
+ btn.attr('data-open', false);
+ btn.css({
+ 'background-color': 'transparent',
+ transition: 'none'
+ });
+ anchor.css({
+ transition: 'none'
+ });
+ backdrop.css({
+ transform: 'scale(0)',
+ 'background-color': fabColor
+ });
+ menu.find('> li > a').css({
+ opacity: ''
+ });
+
+ setTimeout(function() {
+ backdrop.remove();
+
+ // Set initial state.
+ btn.css({
+ 'text-align': '',
+ width: '',
+ bottom: '',
+ left: '',
+ overflow: '',
+ 'background-color': '',
+ transform: 'translate3d(' + -offsetX + 'px,0,0)'
+ });
+ anchor.css({
+ overflow: '',
+ transform: 'translate3d(0,' + offsetY + 'px,0)'
+ });
+
+ setTimeout(function() {
+ btn.css({
+ transform: 'translate3d(0,0,0)',
+ transition: 'transform .2s'
+ });
+ anchor.css({
+ transform: 'translate3d(0,0,0)',
+ transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)'
+ });
+ }, 20);
+ }, 200);
+ };
+
+
+}( jQuery ));
+;(function ($) {
+ // Image transition function
+ Materialize.fadeInImage = function(selectorOrEl) {
+ var element;
+ if (typeof(selectorOrEl) === 'string') {
+ element = $(selectorOrEl);
+ } else if (typeof(selectorOrEl) === 'object') {
+ element = selectorOrEl;
+ } else {
+ return;
+ }
+ element.css({opacity: 0});
+ $(element).velocity({opacity: 1}, {
+ duration: 650,
+ queue: false,
+ easing: 'easeOutSine'
+ });
+ $(element).velocity({opacity: 1}, {
+ duration: 1300,
+ queue: false,
+ easing: 'swing',
+ step: function(now, fx) {
+ fx.start = 100;
+ var grayscale_setting = now/100;
+ var brightness_setting = 150 - (100 - now)/1.75;
+
+ if (brightness_setting < 100) {
+ brightness_setting = 100;
+ }
+ if (now >= 0) {
+ $(this).css({
+ "-webkit-filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)",
+ "filter": "grayscale("+grayscale_setting+")" + "brightness("+brightness_setting+"%)"
+ });
+ }
+ }
+ });
+ };
+
+ // Horizontal staggered list
+ Materialize.showStaggeredList = function(selectorOrEl) {
+ var element;
+ if (typeof(selectorOrEl) === 'string') {
+ element = $(selectorOrEl);
+ } else if (typeof(selectorOrEl) === 'object') {
+ element = selectorOrEl;
+ } else {
+ return;
+ }
+ var time = 0;
+ element.find('li').velocity(
+ { translateX: "-100px"},
+ { duration: 0 });
+
+ element.find('li').each(function() {
+ $(this).velocity(
+ { opacity: "1", translateX: "0"},
+ { duration: 800, delay: time, easing: [60, 10] });
+ time += 120;
+ });
+ };
+
+
+ $(document).ready(function() {
+ // Hardcoded .staggered-list scrollFire
+ // var staggeredListOptions = [];
+ // $('ul.staggered-list').each(function (i) {
+
+ // var label = 'scrollFire-' + i;
+ // $(this).addClass(label);
+ // staggeredListOptions.push(
+ // {selector: 'ul.staggered-list.' + label,
+ // offset: 200,
+ // callback: 'showStaggeredList("ul.staggered-list.' + label + '")'});
+ // });
+ // scrollFire(staggeredListOptions);
+
+ // HammerJS, Swipe navigation
+
+ // Touch Event
+ var swipeLeft = false;
+ var swipeRight = false;
+
+
+ // Dismissible Collections
+ $('.dismissable').each(function() {
+ $(this).hammer({
+ prevent_default: false
+ }).bind('pan', function(e) {
+ if (e.gesture.pointerType === "touch") {
+ var $this = $(this);
+ var direction = e.gesture.direction;
+ var x = e.gesture.deltaX;
+ var velocityX = e.gesture.velocityX;
+
+ $this.velocity({ translateX: x
+ }, {duration: 50, queue: false, easing: 'easeOutQuad'});
+
+ // Swipe Left
+ if (direction === 4 && (x > ($this.innerWidth() / 2) || velocityX < -0.75)) {
+ swipeLeft = true;
+ }
+
+ // Swipe Right
+ if (direction === 2 && (x < (-1 * $this.innerWidth() / 2) || velocityX > 0.75)) {
+ swipeRight = true;
+ }
+ }
+ }).bind('panend', function(e) {
+ // Reset if collection is moved back into original position
+ if (Math.abs(e.gesture.deltaX) < ($(this).innerWidth() / 2)) {
+ swipeRight = false;
+ swipeLeft = false;
+ }
+
+ if (e.gesture.pointerType === "touch") {
+ var $this = $(this);
+ if (swipeLeft || swipeRight) {
+ var fullWidth;
+ if (swipeLeft) { fullWidth = $this.innerWidth(); }
+ else { fullWidth = -1 * $this.innerWidth(); }
+
+ $this.velocity({ translateX: fullWidth,
+ }, {duration: 100, queue: false, easing: 'easeOutQuad', complete:
+ function() {
+ $this.css('border', 'none');
+ $this.velocity({ height: 0, padding: 0,
+ }, {duration: 200, queue: false, easing: 'easeOutQuad', complete:
+ function() { $this.remove(); }
+ });
+ }
+ });
+ }
+ else {
+ $this.velocity({ translateX: 0,
+ }, {duration: 100, queue: false, easing: 'easeOutQuad'});
+ }
+ swipeLeft = false;
+ swipeRight = false;
+ }
+ });
+
+ });
+
+
+ // time = 0
+ // // Vertical Staggered list
+ // $('ul.staggered-list.vertical li').velocity(
+ // { translateY: "100px"},
+ // { duration: 0 });
+
+ // $('ul.staggered-list.vertical li').each(function() {
+ // $(this).velocity(
+ // { opacity: "1", translateY: "0"},
+ // { duration: 800, delay: time, easing: [60, 25] });
+ // time += 120;
+ // });
+
+ // // Fade in and Scale
+ // $('.fade-in.scale').velocity(
+ // { scaleX: .4, scaleY: .4, translateX: -600},
+ // { duration: 0});
+ // $('.fade-in').each(function() {
+ // $(this).velocity(
+ // { opacity: "1", scaleX: 1, scaleY: 1, translateX: 0},
+ // { duration: 800, easing: [60, 10] });
+ // });
+ });
+}( jQuery ));
+;(function($) {
+
+ // Input: Array of JSON objects {selector, offset, callback}
+
+ Materialize.scrollFire = function(options) {
+
+ var didScroll = false;
+
+ window.addEventListener("scroll", function() {
+ didScroll = true;
+ });
+
+ // Rate limit to 100ms
+ setInterval(function() {
+ if(didScroll) {
+ didScroll = false;
+
+ var windowScroll = window.pageYOffset + window.innerHeight;
+
+ for (var i = 0 ; i < options.length; i++) {
+ // Get options from each line
+ var value = options[i];
+ var selector = value.selector,
+ offset = value.offset,
+ callback = value.callback;
+
+ var currentElement = document.querySelector(selector);
+ if ( currentElement !== null) {
+ var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset;
+
+ if (windowScroll > (elementOffset + offset)) {
+ if (value.done !== true) {
+ if (typeof(callback) === 'function') {
+ callback.call(this, currentElement);
+ } else if (typeof(callback) === 'string') {
+ var callbackFunc = new Function(callback);
+ callbackFunc(currentElement);
+ }
+ value.done = true;
+ }
+ }
+ }
+ }
+ }
+ }, 100);
+ };
+
+})(jQuery);
+;/*!
+ * pickadate.js v3.5.0, 2014/04/13
+ * By Amsul, http://amsul.ca
+ * Hosted on http://amsul.github.io/pickadate.js
+ * Licensed under MIT
+ */
+
+(function ( factory ) {
+
+ // AMD.
+ if ( typeof define == 'function' && define.amd )
+ define( 'picker', ['jquery'], factory )
+
+ // Node.js/browserify.
+ else if ( typeof exports == 'object' )
+ module.exports = factory( require('jquery') )
+
+ // Browser globals.
+ else this.Picker = factory( jQuery )
+
+}(function( $ ) {
+
+var $window = $( window )
+var $document = $( document )
+var $html = $( document.documentElement )
+
+
+/**
+ * The picker constructor that creates a blank picker.
+ */
+function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {
+
+ // If there’s no element, return the picker constructor.
+ if ( !ELEMENT ) return PickerConstructor
+
+
+ var
+ IS_DEFAULT_THEME = false,
+
+
+ // The state of the picker.
+ STATE = {
+ id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) )
+ },
+
+
+ // Merge the defaults and options passed.
+ SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},
+
+
+ // Merge the default classes with the settings classes.
+ CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),
+
+
+ // The element node wrapper into a jQuery object.
+ $ELEMENT = $( ELEMENT ),
+
+
+ // Pseudo picker constructor.
+ PickerInstance = function() {
+ return this.start()
+ },
+
+
+ // The picker prototype.
+ P = PickerInstance.prototype = {
+
+ constructor: PickerInstance,
+
+ $node: $ELEMENT,
+
+
+ /**
+ * Initialize everything
+ */
+ start: function() {
+
+ // If it’s already started, do nothing.
+ if ( STATE && STATE.start ) return P
+
+
+ // Update the picker states.
+ STATE.methods = {}
+ STATE.start = true
+ STATE.open = false
+ STATE.type = ELEMENT.type
+
+
+ // Confirm focus state, convert into text input to remove UA stylings,
+ // and set as readonly to prevent keyboard popup.
+ ELEMENT.autofocus = ELEMENT == getActiveElement()
+ ELEMENT.readOnly = !SETTINGS.editable
+ ELEMENT.id = ELEMENT.id || STATE.id
+ if ( ELEMENT.type != 'text' ) {
+ ELEMENT.type = 'text'
+ }
+
+
+ // Create a new picker component with the settings.
+ P.component = new COMPONENT(P, SETTINGS)
+
+
+ // Create the picker root with a holder and then prepare it.
+ P.$root = $( PickerConstructor._.node('div', createWrappedComponent(), CLASSES.picker, 'id="' + ELEMENT.id + '_root" tabindex="0"') )
+ prepareElementRoot()
+
+
+ // If there’s a format for the hidden input element, create the element.
+ if ( SETTINGS.formatSubmit ) {
+ prepareElementHidden()
+ }
+
+
+ // Prepare the input element.
+ prepareElement()
+
+
+ // Insert the root as specified in the settings.
+ if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )
+ else $ELEMENT.after( P.$root )
+
+
+ // Bind the default component and settings events.
+ P.on({
+ start: P.component.onStart,
+ render: P.component.onRender,
+ stop: P.component.onStop,
+ open: P.component.onOpen,
+ close: P.component.onClose,
+ set: P.component.onSet
+ }).on({
+ start: SETTINGS.onStart,
+ render: SETTINGS.onRender,
+ stop: SETTINGS.onStop,
+ open: SETTINGS.onOpen,
+ close: SETTINGS.onClose,
+ set: SETTINGS.onSet
+ })
+
+
+ // Once we’re all set, check the theme in use.
+ IS_DEFAULT_THEME = isUsingDefaultTheme( P.$root.children()[ 0 ] )
+
+
+ // If the element has autofocus, open the picker.
+ if ( ELEMENT.autofocus ) {
+ P.open()
+ }
+
+
+ // Trigger queued the “start” and “render” events.
+ return P.trigger( 'start' ).trigger( 'render' )
+ }, //start
+
+
+ /**
+ * Render a new picker
+ */
+ render: function( entireComponent ) {
+
+ // Insert a new component holder in the root or box.
+ if ( entireComponent ) P.$root.html( createWrappedComponent() )
+ else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )
+
+ // Trigger the queued “render” events.
+ return P.trigger( 'render' )
+ }, //render
+
+
+ /**
+ * Destroy everything
+ */
+ stop: function() {
+
+ // If it’s already stopped, do nothing.
+ if ( !STATE.start ) return P
+
+ // Then close the picker.
+ P.close()
+
+ // Remove the hidden field.
+ if ( P._hidden ) {
+ P._hidden.parentNode.removeChild( P._hidden )
+ }
+
+ // Remove the root.
+ P.$root.remove()
+
+ // Remove the input class, remove the stored data, and unbind
+ // the events (after a tick for IE - see `P.close`).
+ $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )
+ setTimeout( function() {
+ $ELEMENT.off( '.' + STATE.id )
+ }, 0)
+
+ // Restore the element state
+ ELEMENT.type = STATE.type
+ ELEMENT.readOnly = false
+
+ // Trigger the queued “stop” events.
+ P.trigger( 'stop' )
+
+ // Reset the picker states.
+ STATE.methods = {}
+ STATE.start = false
+
+ return P
+ }, //stop
+
+
+ /**
+ * Open up the picker
+ */
+ open: function( dontGiveFocus ) {
+
+ // If it’s already open, do nothing.
+ if ( STATE.open ) return P
+
+ // Add the “active” class.
+ $ELEMENT.addClass( CLASSES.active )
+ aria( ELEMENT, 'expanded', true )
+
+ // * A Firefox bug, when `html` has `overflow:hidden`, results in
+ // killing transitions :(. So add the “opened” state on the next tick.
+ // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
+ setTimeout( function() {
+
+ // Add the “opened” class to the picker root.
+ P.$root.addClass( CLASSES.opened )
+ aria( P.$root[0], 'hidden', false )
+
+ }, 0 )
+
+ // If we have to give focus, bind the element and doc events.
+ if ( dontGiveFocus !== false ) {
+
+ // Set it as open.
+ STATE.open = true
+
+ // Prevent the page from scrolling.
+ if ( IS_DEFAULT_THEME ) {
+ $html.
+ css( 'overflow', 'hidden' ).
+ css( 'padding-right', '+=' + getScrollbarWidth() )
+ }
+
+ // Pass focus to the root element’s jQuery object.
+ // * Workaround for iOS8 to bring the picker’s root into view.
+ P.$root.eq(0).focus()
+
+ // Bind the document events.
+ $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {
+
+ var target = event.target
+
+ // If the target of the event is not the element, close the picker picker.
+ // * Don’t worry about clicks or focusins on the root because those don’t bubble up.
+ // Also, for Firefox, a click on an `option` element bubbles up directly
+ // to the doc. So make sure the target wasn't the doc.
+ // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,
+ // which causes the picker to unexpectedly close when right-clicking it. So make
+ // sure the event wasn’t a right-click.
+ if ( target != ELEMENT && target != document && event.which != 3 ) {
+
+ // If the target was the holder that covers the screen,
+ // keep the element focused to maintain tabindex.
+ P.close( target === P.$root.children()[0] )
+ }
+
+ }).on( 'keydown.' + STATE.id, function( event ) {
+
+ var
+ // Get the keycode.
+ keycode = event.keyCode,
+
+ // Translate that to a selection change.
+ keycodeToMove = P.component.key[ keycode ],
+
+ // Grab the target.
+ target = event.target
+
+
+ // On escape, close the picker and give focus.
+ if ( keycode == 27 ) {
+ P.close( true )
+ }
+
+
+ // Check if there is a key movement or “enter” keypress on the element.
+ else if ( target == P.$root[0] && ( keycodeToMove || keycode == 13 ) ) {
+
+ // Prevent the default action to stop page movement.
+ event.preventDefault()
+
+ // Trigger the key movement action.
+ if ( keycodeToMove ) {
+ PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )
+ }
+
+ // On “enter”, if the highlighted item isn’t disabled, set the value and close.
+ else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {
+ P.set( 'select', P.component.item.highlight ).close()
+ }
+ }
+
+
+ // If the target is within the root and “enter” is pressed,
+ // prevent the default action and trigger a click on the target instead.
+ else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {
+ event.preventDefault()
+ target.click()
+ }
+ })
+ }
+
+ // Trigger the queued “open” events.
+ return P.trigger( 'open' )
+ }, //open
+
+
+ /**
+ * Close the picker
+ */
+ close: function( giveFocus ) {
+
+ // If we need to give focus, do it before changing states.
+ if ( giveFocus ) {
+ // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|
+ // The focus is triggered *after* the close has completed - causing it
+ // to open again. So unbind and rebind the event at the next tick.
+ P.$root.off( 'focus.toOpen' ).eq(0).focus()
+ setTimeout( function() {
+ P.$root.on( 'focus.toOpen', handleFocusToOpenEvent )
+ }, 0 )
+ }
+
+ // Remove the “active” class.
+ $ELEMENT.removeClass( CLASSES.active )
+ aria( ELEMENT, 'expanded', false )
+
+ // * A Firefox bug, when `html` has `overflow:hidden`, results in
+ // killing transitions :(. So remove the “opened” state on the next tick.
+ // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289
+ setTimeout( function() {
+
+ // Remove the “opened” and “focused” class from the picker root.
+ P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )
+ aria( P.$root[0], 'hidden', true )
+
+ }, 0 )
+
+ // If it’s already closed, do nothing more.
+ if ( !STATE.open ) return P
+
+ // Set it as closed.
+ STATE.open = false
+
+ // Allow the page to scroll.
+ if ( IS_DEFAULT_THEME ) {
+ $html.
+ css( 'overflow', '' ).
+ css( 'padding-right', '-=' + getScrollbarWidth() )
+ }
+
+ // Unbind the document events.
+ $document.off( '.' + STATE.id )
+
+ // Trigger the queued “close” events.
+ return P.trigger( 'close' )
+ }, //close
+
+
+ /**
+ * Clear the values
+ */
+ clear: function( options ) {
+ return P.set( 'clear', null, options )
+ }, //clear
+
+
+ /**
+ * Set something
+ */
+ set: function( thing, value, options ) {
+
+ var thingItem, thingValue,
+ thingIsObject = $.isPlainObject( thing ),
+ thingObject = thingIsObject ? thing : {}
+
+ // Make sure we have usable options.
+ options = thingIsObject && $.isPlainObject( value ) ? value : options || {}
+
+ if ( thing ) {
+
+ // If the thing isn’t an object, make it one.
+ if ( !thingIsObject ) {
+ thingObject[ thing ] = value
+ }
+
+ // Go through the things of items to set.
+ for ( thingItem in thingObject ) {
+
+ // Grab the value of the thing.
+ thingValue = thingObject[ thingItem ]
+
+ // First, if the item exists and there’s a value, set it.
+ if ( thingItem in P.component.item ) {
+ if ( thingValue === undefined ) thingValue = null
+ P.component.set( thingItem, thingValue, options )
+ }
+
+ // Then, check to update the element value and broadcast a change.
+ if ( thingItem == 'select' || thingItem == 'clear' ) {
+ $ELEMENT.
+ val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).
+ trigger( 'change' )
+ }
+ }
+
+ // Render a new picker.
+ P.render()
+ }
+
+ // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.
+ return options.muted ? P : P.trigger( 'set', thingObject )
+ }, //set
+
+
+ /**
+ * Get something
+ */
+ get: function( thing, format ) {
+
+ // Make sure there’s something to get.
+ thing = thing || 'value'
+
+ // If a picker state exists, return that.
+ if ( STATE[ thing ] != null ) {
+ return STATE[ thing ]
+ }
+
+ // Return the submission value, if that.
+ if ( thing == 'valueSubmit' ) {
+ if ( P._hidden ) {
+ return P._hidden.value
+ }
+ thing = 'value'
+ }
+
+ // Return the value, if that.
+ if ( thing == 'value' ) {
+ return ELEMENT.value
+ }
+
+ // Check if a component item exists, return that.
+ if ( thing in P.component.item ) {
+ if ( typeof format == 'string' ) {
+ var thingValue = P.component.get( thing )
+ return thingValue ?
+ PickerConstructor._.trigger(
+ P.component.formats.toString,
+ P.component,
+ [ format, thingValue ]
+ ) : ''
+ }
+ return P.component.get( thing )
+ }
+ }, //get
+
+
+
+ /**
+ * Bind events on the things.
+ */
+ on: function( thing, method, internal ) {
+
+ var thingName, thingMethod,
+ thingIsObject = $.isPlainObject( thing ),
+ thingObject = thingIsObject ? thing : {}
+
+ if ( thing ) {
+
+ // If the thing isn’t an object, make it one.
+ if ( !thingIsObject ) {
+ thingObject[ thing ] = method
+ }
+
+ // Go through the things to bind to.
+ for ( thingName in thingObject ) {
+
+ // Grab the method of the thing.
+ thingMethod = thingObject[ thingName ]
+
+ // If it was an internal binding, prefix it.
+ if ( internal ) {
+ thingName = '_' + thingName
+ }
+
+ // Make sure the thing methods collection exists.
+ STATE.methods[ thingName ] = STATE.methods[ thingName ] || []
+
+ // Add the method to the relative method collection.
+ STATE.methods[ thingName ].push( thingMethod )
+ }
+ }
+
+ return P
+ }, //on
+
+
+
+ /**
+ * Unbind events on the things.
+ */
+ off: function() {
+ var i, thingName,
+ names = arguments;
+ for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {
+ thingName = names[i]
+ if ( thingName in STATE.methods ) {
+ delete STATE.methods[thingName]
+ }
+ }
+ return P
+ },
+
+
+ /**
+ * Fire off method events.
+ */
+ trigger: function( name, data ) {
+ var _trigger = function( name ) {
+ var methodList = STATE.methods[ name ]
+ if ( methodList ) {
+ methodList.map( function( method ) {
+ PickerConstructor._.trigger( method, P, [ data ] )
+ })
+ }
+ }
+ _trigger( '_' + name )
+ _trigger( name )
+ return P
+ } //trigger
+ } //PickerInstance.prototype
+
+
+ /**
+ * Wrap the picker holder components together.
+ */
+ function createWrappedComponent() {
+
+ // Create a picker wrapper holder
+ return PickerConstructor._.node( 'div',
+
+ // Create a picker wrapper node
+ PickerConstructor._.node( 'div',
+
+ // Create a picker frame
+ PickerConstructor._.node( 'div',
+
+ // Create a picker box node
+ PickerConstructor._.node( 'div',
+
+ // Create the components nodes.
+ P.component.nodes( STATE.open ),
+
+ // The picker box class
+ CLASSES.box
+ ),
+
+ // Picker wrap class
+ CLASSES.wrap
+ ),
+
+ // Picker frame class
+ CLASSES.frame
+ ),
+
+ // Picker holder class
+ CLASSES.holder
+ ) //endreturn
+ } //createWrappedComponent
+
+
+
+ /**
+ * Prepare the input element with all bindings.
+ */
+ function prepareElement() {
+
+ $ELEMENT.
+
+ // Store the picker data by component name.
+ data(NAME, P).
+
+ // Add the “input” class name.
+ addClass(CLASSES.input).
+
+ // Remove the tabindex.
+ attr('tabindex', -1).
+
+ // If there’s a `data-value`, update the value of the element.
+ val( $ELEMENT.data('value') ?
+ P.get('select', SETTINGS.format) :
+ ELEMENT.value
+ )
+
+
+ // Only bind keydown events if the element isn’t editable.
+ if ( !SETTINGS.editable ) {
+
+ $ELEMENT.
+
+ // On focus/click, focus onto the root to open it up.
+ on( 'focus.' + STATE.id + ' click.' + STATE.id, function( event ) {
+ event.preventDefault()
+ P.$root.eq(0).focus()
+ }).
+
+ // Handle keyboard event based on the picker being opened or not.
+ on( 'keydown.' + STATE.id, handleKeydownEvent )
+ }
+
+
+ // Update the aria attributes.
+ aria(ELEMENT, {
+ haspopup: true,
+ expanded: false,
+ readonly: false,
+ owns: ELEMENT.id + '_root'
+ })
+ }
+
+
+ /**
+ * Prepare the root picker element with all bindings.
+ */
+ function prepareElementRoot() {
+
+ P.$root.
+
+ on({
+
+ // For iOS8.
+ keydown: handleKeydownEvent,
+
+ // When something within the root is focused, stop from bubbling
+ // to the doc and remove the “focused” state from the root.
+ focusin: function( event ) {
+ P.$root.removeClass( CLASSES.focused )
+ event.stopPropagation()
+ },
+
+ // When something within the root holder is clicked, stop it
+ // from bubbling to the doc.
+ 'mousedown click': function( event ) {
+
+ var target = event.target
+
+ // Make sure the target isn’t the root holder so it can bubble up.
+ if ( target != P.$root.children()[ 0 ] ) {
+
+ event.stopPropagation()
+
+ // * For mousedown events, cancel the default action in order to
+ // prevent cases where focus is shifted onto external elements
+ // when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).
+ // Also, for Firefox, don’t prevent action on the `option` element.
+ if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {
+
+ event.preventDefault()
+
+ // Re-focus onto the root so that users can click away
+ // from elements focused within the picker.
+ P.$root.eq(0).focus()
+ }
+ }
+ }
+ }).
+
+ // Add/remove the “target” class on focus and blur.
+ on({
+ focus: function() {
+ $ELEMENT.addClass( CLASSES.target )
+ },
+ blur: function() {
+ $ELEMENT.removeClass( CLASSES.target )
+ }
+ }).
+
+ // Open the picker and adjust the root “focused” state
+ on( 'focus.toOpen', handleFocusToOpenEvent ).
+
+ // If there’s a click on an actionable element, carry out the actions.
+ on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {
+
+ var $target = $( this ),
+ targetData = $target.data(),
+ targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),
+
+ // * For IE, non-focusable elements can be active elements as well
+ // (http://stackoverflow.com/a/2684561).
+ activeElement = getActiveElement()
+ activeElement = activeElement && ( activeElement.type || activeElement.href )
+
+ // If it’s disabled or nothing inside is actively focused, re-focus the element.
+ if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {
+ P.$root.eq(0).focus()
+ }
+
+ // If something is superficially changed, update the `highlight` based on the `nav`.
+ if ( !targetDisabled && targetData.nav ) {
+ P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )
+ }
+
+ // If something is picked, set `select` then close with focus.
+ else if ( !targetDisabled && 'pick' in targetData ) {
+ P.set( 'select', targetData.pick )
+ }
+
+ // If a “clear” button is pressed, empty the values and close with focus.
+ else if ( targetData.clear ) {
+ P.clear().close( true )
+ }
+
+ else if ( targetData.close ) {
+ P.close( true )
+ }
+
+ }) //P.$root
+
+ aria( P.$root[0], 'hidden', true )
+ }
+
+
+ /**
+ * Prepare the hidden input element along with all bindings.
+ */
+ function prepareElementHidden() {
+
+ var name
+
+ if ( SETTINGS.hiddenName === true ) {
+ name = ELEMENT.name
+ ELEMENT.name = ''
+ }
+ else {
+ name = [
+ typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',
+ typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'
+ ]
+ name = name[0] + ELEMENT.name + name[1]
+ }
+
+ P._hidden = $(
+ ''
+ )[0]
+
+ $ELEMENT.
+
+ // If the value changes, update the hidden input with the correct format.
+ on('change.' + STATE.id, function() {
+ P._hidden.value = ELEMENT.value ?
+ P.get('select', SETTINGS.formatSubmit) :
+ ''
+ })
+
+
+ // Insert the hidden input as specified in the settings.
+ if ( SETTINGS.container ) $( SETTINGS.container ).append( P._hidden )
+ else $ELEMENT.after( P._hidden )
+ }
+
+
+ // For iOS8.
+ function handleKeydownEvent( event ) {
+
+ var keycode = event.keyCode,
+
+ // Check if one of the delete keys was pressed.
+ isKeycodeDelete = /^(8|46)$/.test(keycode)
+
+ // For some reason IE clears the input value on “escape”.
+ if ( keycode == 27 ) {
+ P.close()
+ return false
+ }
+
+ // Check if `space` or `delete` was pressed or the picker is closed with a key movement.
+ if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {
+
+ // Prevent it from moving the page and bubbling to doc.
+ event.preventDefault()
+ event.stopPropagation()
+
+ // If `delete` was pressed, clear the values and close the picker.
+ // Otherwise open the picker.
+ if ( isKeycodeDelete ) { P.clear().close() }
+ else { P.open() }
+ }
+ }
+
+
+ // Separated for IE
+ function handleFocusToOpenEvent( event ) {
+
+ // Stop the event from propagating to the doc.
+ event.stopPropagation()
+
+ // If it’s a focus event, add the “focused” class to the root.
+ if ( event.type == 'focus' ) {
+ P.$root.addClass( CLASSES.focused )
+ }
+
+ // And then finally open the picker.
+ P.open()
+ }
+
+
+ // Return a new picker instance.
+ return new PickerInstance()
+} //PickerConstructor
+
+
+
+/**
+ * The default classes and prefix to use for the HTML classes.
+ */
+PickerConstructor.klasses = function( prefix ) {
+ prefix = prefix || 'picker'
+ return {
+
+ picker: prefix,
+ opened: prefix + '--opened',
+ focused: prefix + '--focused',
+
+ input: prefix + '__input',
+ active: prefix + '__input--active',
+ target: prefix + '__input--target',
+
+ holder: prefix + '__holder',
+
+ frame: prefix + '__frame',
+ wrap: prefix + '__wrap',
+
+ box: prefix + '__box'
+ }
+} //PickerConstructor.klasses
+
+
+
+/**
+ * Check if the default theme is being used.
+ */
+function isUsingDefaultTheme( element ) {
+
+ var theme,
+ prop = 'position'
+
+ // For IE.
+ if ( element.currentStyle ) {
+ theme = element.currentStyle[prop]
+ }
+
+ // For normal browsers.
+ else if ( window.getComputedStyle ) {
+ theme = getComputedStyle( element )[prop]
+ }
+
+ return theme == 'fixed'
+}
+
+
+
+/**
+ * Get the width of the browser’s scrollbar.
+ * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js
+ */
+function getScrollbarWidth() {
+
+ if ( $html.height() <= $window.height() ) {
+ return 0
+ }
+
+ var $outer = $( '' ).
+ appendTo( 'body' )
+
+ // Get the width without scrollbars.
+ var widthWithoutScroll = $outer[0].offsetWidth
+
+ // Force adding scrollbars.
+ $outer.css( 'overflow', 'scroll' )
+
+ // Add the inner div.
+ var $inner = $( '' ).appendTo( $outer )
+
+ // Get the width with scrollbars.
+ var widthWithScroll = $inner[0].offsetWidth
+
+ // Remove the divs.
+ $outer.remove()
+
+ // Return the difference between the widths.
+ return widthWithoutScroll - widthWithScroll
+}
+
+
+
+/**
+ * PickerConstructor helper methods.
+ */
+PickerConstructor._ = {
+
+ /**
+ * Create a group of nodes. Expects:
+ * `
+ {
+ min: {Integer},
+ max: {Integer},
+ i: {Integer},
+ node: {String},
+ item: {Function}
+ }
+ * `
+ */
+ group: function( groupObject ) {
+
+ var
+ // Scope for the looped object
+ loopObjectScope,
+
+ // Create the nodes list
+ nodesList = '',
+
+ // The counter starts from the `min`
+ counter = PickerConstructor._.trigger( groupObject.min, groupObject )
+
+
+ // Loop from the `min` to `max`, incrementing by `i`
+ for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {
+
+ // Trigger the `item` function within scope of the object
+ loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )
+
+ // Splice the subgroup and create nodes out of the sub nodes
+ nodesList += PickerConstructor._.node(
+ groupObject.node,
+ loopObjectScope[ 0 ], // the node
+ loopObjectScope[ 1 ], // the classes
+ loopObjectScope[ 2 ] // the attributes
+ )
+ }
+
+ // Return the list of nodes
+ return nodesList
+ }, //group
+
+
+ /**
+ * Create a dom node string
+ */
+ node: function( wrapper, item, klass, attribute ) {
+
+ // If the item is false-y, just return an empty string
+ if ( !item ) return ''
+
+ // If the item is an array, do a join
+ item = $.isArray( item ) ? item.join( '' ) : item
+
+ // Check for the class
+ klass = klass ? ' class="' + klass + '"' : ''
+
+ // Check for any attributes
+ attribute = attribute ? ' ' + attribute : ''
+
+ // Return the wrapped item
+ return '<' + wrapper + klass + attribute + '>' + item + '' + wrapper + '>'
+ }, //node
+
+
+ /**
+ * Lead numbers below 10 with a zero.
+ */
+ lead: function( number ) {
+ return ( number < 10 ? '0': '' ) + number
+ },
+
+
+ /**
+ * Trigger a function otherwise return the value.
+ */
+ trigger: function( callback, scope, args ) {
+ return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback
+ },
+
+
+ /**
+ * If the second character is a digit, length is 2 otherwise 1.
+ */
+ digits: function( string ) {
+ return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1
+ },
+
+
+ /**
+ * Tell if something is a date object.
+ */
+ isDate: function( value ) {
+ return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )
+ },
+
+
+ /**
+ * Tell if something is an integer.
+ */
+ isInteger: function( value ) {
+ return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0
+ },
+
+
+ /**
+ * Create ARIA attribute strings.
+ */
+ ariaAttr: ariaAttr
+} //PickerConstructor._
+
+
+
+/**
+ * Extend the picker with a component and defaults.
+ */
+PickerConstructor.extend = function( name, Component ) {
+
+ // Extend jQuery.
+ $.fn[ name ] = function( options, action ) {
+
+ // Grab the component data.
+ var componentData = this.data( name )
+
+ // If the picker is requested, return the data object.
+ if ( options == 'picker' ) {
+ return componentData
+ }
+
+ // If the component data exists and `options` is a string, carry out the action.
+ if ( componentData && typeof options == 'string' ) {
+ return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )
+ }
+
+ // Otherwise go through each matched element and if the component
+ // doesn’t exist, create a new picker using `this` element
+ // and merging the defaults and options with a deep copy.
+ return this.each( function() {
+ var $this = $( this )
+ if ( !$this.data( name ) ) {
+ new PickerConstructor( this, name, Component, options )
+ }
+ })
+ }
+
+ // Set the defaults.
+ $.fn[ name ].defaults = Component.defaults
+} //PickerConstructor.extend
+
+
+
+function aria(element, attribute, value) {
+ if ( $.isPlainObject(attribute) ) {
+ for ( var key in attribute ) {
+ ariaSet(element, key, attribute[key])
+ }
+ }
+ else {
+ ariaSet(element, attribute, value)
+ }
+}
+function ariaSet(element, attribute, value) {
+ element.setAttribute(
+ (attribute == 'role' ? '' : 'aria-') + attribute,
+ value
+ )
+}
+function ariaAttr(attribute, data) {
+ if ( !$.isPlainObject(attribute) ) {
+ attribute = { attribute: data }
+ }
+ data = ''
+ for ( var key in attribute ) {
+ var attr = (key == 'role' ? '' : 'aria-') + key,
+ attrVal = attribute[key]
+ data += attrVal == null ? '' : attr + '="' + attribute[key] + '"'
+ }
+ return data
+}
+
+// IE8 bug throws an error for activeElements within iframes.
+function getActiveElement() {
+ try {
+ return document.activeElement
+ } catch ( err ) { }
+}
+
+
+
+// Expose the picker constructor.
+return PickerConstructor
+
+
+}));
+
+
+;/*!
+ * Date picker for pickadate.js v3.5.0
+ * http://amsul.github.io/pickadate.js/date.htm
+ */
+
+(function ( factory ) {
+
+ // AMD.
+ if ( typeof define == 'function' && define.amd )
+ define( ['picker', 'jquery'], factory )
+
+ // Node.js/browserify.
+ else if ( typeof exports == 'object' )
+ module.exports = factory( require('./picker.js'), require('jquery') )
+
+ // Browser globals.
+ else factory( Picker, jQuery )
+
+}(function( Picker, $ ) {
+
+
+/**
+ * Globals and constants
+ */
+var DAYS_IN_WEEK = 7,
+ WEEKS_IN_CALENDAR = 6,
+ _ = Picker._
+
+
+
+/**
+ * The date picker constructor
+ */
+function DatePicker( picker, settings ) {
+
+ var calendar = this,
+ element = picker.$node[ 0 ],
+ elementValue = element.value,
+ elementDataValue = picker.$node.data( 'value' ),
+ valueString = elementDataValue || elementValue,
+ formatString = elementDataValue ? settings.formatSubmit : settings.format,
+ isRTL = function() {
+
+ return element.currentStyle ?
+
+ // For IE.
+ element.currentStyle.direction == 'rtl' :
+
+ // For normal browsers.
+ getComputedStyle( picker.$root[0] ).direction == 'rtl'
+ }
+
+ calendar.settings = settings
+ calendar.$node = picker.$node
+
+ // The queue of methods that will be used to build item objects.
+ calendar.queue = {
+ min: 'measure create',
+ max: 'measure create',
+ now: 'now create',
+ select: 'parse create validate',
+ highlight: 'parse navigate create validate',
+ view: 'parse create validate viewset',
+ disable: 'deactivate',
+ enable: 'activate'
+ }
+
+ // The component's item object.
+ calendar.item = {}
+
+ calendar.item.clear = null
+ calendar.item.disable = ( settings.disable || [] ).slice( 0 )
+ calendar.item.enable = -(function( collectionDisabled ) {
+ return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1
+ })( calendar.item.disable )
+
+ calendar.
+ set( 'min', settings.min ).
+ set( 'max', settings.max ).
+ set( 'now' )
+
+ // When there’s a value, set the `select`, which in turn
+ // also sets the `highlight` and `view`.
+ if ( valueString ) {
+ calendar.set( 'select', valueString, { format: formatString })
+ }
+
+ // If there’s no value, default to highlighting “today”.
+ else {
+ calendar.
+ set( 'select', null ).
+ set( 'highlight', calendar.item.now )
+ }
+
+
+ // The keycode to movement mapping.
+ calendar.key = {
+ 40: 7, // Down
+ 38: -7, // Up
+ 39: function() { return isRTL() ? -1 : 1 }, // Right
+ 37: function() { return isRTL() ? 1 : -1 }, // Left
+ go: function( timeChange ) {
+ var highlightedObject = calendar.item.highlight,
+ targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )
+ calendar.set(
+ 'highlight',
+ targetDate,
+ { interval: timeChange }
+ )
+ this.render()
+ }
+ }
+
+
+ // Bind some picker events.
+ picker.
+ on( 'render', function() {
+ picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {
+ var value = this.value
+ if ( value ) {
+ picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )
+ picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )
+ }
+ })
+ picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {
+ var value = this.value
+ if ( value ) {
+ picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )
+ picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )
+ }
+ })
+ }, 1 ).
+ on( 'open', function() {
+ var includeToday = ''
+ if ( calendar.disabled( calendar.get('now') ) ) {
+ includeToday = ':not(.' + settings.klass.buttonToday + ')'
+ }
+ picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )
+ }, 1 ).
+ on( 'close', function() {
+ picker.$root.find( 'button, select' ).attr( 'disabled', true )
+ }, 1 )
+
+} //DatePicker
+
+
+/**
+ * Set a datepicker item object.
+ */
+DatePicker.prototype.set = function( type, value, options ) {
+
+ var calendar = this,
+ calendarItem = calendar.item
+
+ // If the value is `null` just set it immediately.
+ if ( value === null ) {
+ if ( type == 'clear' ) type = 'select'
+ calendarItem[ type ] = value
+ return calendar
+ }
+
+ // Otherwise go through the queue of methods, and invoke the functions.
+ // Update this as the time unit, and set the final value as this item.
+ // * In the case of `enable`, keep the queue but set `disable` instead.
+ // And in the case of `flip`, keep the queue but set `enable` instead.
+ calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {
+ value = calendar[ method ]( type, value, options )
+ return value
+ }).pop()
+
+ // Check if we need to cascade through more updates.
+ if ( type == 'select' ) {
+ calendar.set( 'highlight', calendarItem.select, options )
+ }
+ else if ( type == 'highlight' ) {
+ calendar.set( 'view', calendarItem.highlight, options )
+ }
+ else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {
+ if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {
+ calendar.set( 'select', calendarItem.select, options )
+ }
+ if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {
+ calendar.set( 'highlight', calendarItem.highlight, options )
+ }
+ }
+
+ return calendar
+} //DatePicker.prototype.set
+
+
+/**
+ * Get a datepicker item object.
+ */
+DatePicker.prototype.get = function( type ) {
+ return this.item[ type ]
+} //DatePicker.prototype.get
+
+
+/**
+ * Create a picker date object.
+ */
+DatePicker.prototype.create = function( type, value, options ) {
+
+ var isInfiniteValue,
+ calendar = this
+
+ // If there’s no value, use the type as the value.
+ value = value === undefined ? type : value
+
+
+ // If it’s infinity, update the value.
+ if ( value == -Infinity || value == Infinity ) {
+ isInfiniteValue = value
+ }
+
+ // If it’s an object, use the native date object.
+ else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {
+ value = value.obj
+ }
+
+ // If it’s an array, convert it into a date and make sure
+ // that it’s a valid date – otherwise default to today.
+ else if ( $.isArray( value ) ) {
+ value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )
+ value = _.isDate( value ) ? value : calendar.create().obj
+ }
+
+ // If it’s a number or date object, make a normalized date.
+ else if ( _.isInteger( value ) || _.isDate( value ) ) {
+ value = calendar.normalize( new Date( value ), options )
+ }
+
+ // If it’s a literal true or any other case, set it to now.
+ else /*if ( value === true )*/ {
+ value = calendar.now( type, value, options )
+ }
+
+ // Return the compiled object.
+ return {
+ year: isInfiniteValue || value.getFullYear(),
+ month: isInfiniteValue || value.getMonth(),
+ date: isInfiniteValue || value.getDate(),
+ day: isInfiniteValue || value.getDay(),
+ obj: isInfiniteValue || value,
+ pick: isInfiniteValue || value.getTime()
+ }
+} //DatePicker.prototype.create
+
+
+/**
+ * Create a range limit object using an array, date object,
+ * literal “true”, or integer relative to another time.
+ */
+DatePicker.prototype.createRange = function( from, to ) {
+
+ var calendar = this,
+ createDate = function( date ) {
+ if ( date === true || $.isArray( date ) || _.isDate( date ) ) {
+ return calendar.create( date )
+ }
+ return date
+ }
+
+ // Create objects if possible.
+ if ( !_.isInteger( from ) ) {
+ from = createDate( from )
+ }
+ if ( !_.isInteger( to ) ) {
+ to = createDate( to )
+ }
+
+ // Create relative dates.
+ if ( _.isInteger( from ) && $.isPlainObject( to ) ) {
+ from = [ to.year, to.month, to.date + from ];
+ }
+ else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {
+ to = [ from.year, from.month, from.date + to ];
+ }
+
+ return {
+ from: createDate( from ),
+ to: createDate( to )
+ }
+} //DatePicker.prototype.createRange
+
+
+/**
+ * Check if a date unit falls within a date range object.
+ */
+DatePicker.prototype.withinRange = function( range, dateUnit ) {
+ range = this.createRange(range.from, range.to)
+ return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick
+}
+
+
+/**
+ * Check if two date range objects overlap.
+ */
+DatePicker.prototype.overlapRanges = function( one, two ) {
+
+ var calendar = this
+
+ // Convert the ranges into comparable dates.
+ one = calendar.createRange( one.from, one.to )
+ two = calendar.createRange( two.from, two.to )
+
+ return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||
+ calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )
+}
+
+
+/**
+ * Get the date today.
+ */
+DatePicker.prototype.now = function( type, value, options ) {
+ value = new Date()
+ if ( options && options.rel ) {
+ value.setDate( value.getDate() + options.rel )
+ }
+ return this.normalize( value, options )
+}
+
+
+/**
+ * Navigate to next/prev month.
+ */
+DatePicker.prototype.navigate = function( type, value, options ) {
+
+ var targetDateObject,
+ targetYear,
+ targetMonth,
+ targetDate,
+ isTargetArray = $.isArray( value ),
+ isTargetObject = $.isPlainObject( value ),
+ viewsetObject = this.item.view/*,
+ safety = 100*/
+
+
+ if ( isTargetArray || isTargetObject ) {
+
+ if ( isTargetObject ) {
+ targetYear = value.year
+ targetMonth = value.month
+ targetDate = value.date
+ }
+ else {
+ targetYear = +value[0]
+ targetMonth = +value[1]
+ targetDate = +value[2]
+ }
+
+ // If we’re navigating months but the view is in a different
+ // month, navigate to the view’s year and month.
+ if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {
+ targetYear = viewsetObject.year
+ targetMonth = viewsetObject.month
+ }
+
+ // Figure out the expected target year and month.
+ targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )
+ targetYear = targetDateObject.getFullYear()
+ targetMonth = targetDateObject.getMonth()
+
+ // If the month we’re going to doesn’t have enough days,
+ // keep decreasing the date until we reach the month’s last date.
+ while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {
+ targetDate -= 1
+ /*safety -= 1
+ if ( !safety ) {
+ throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'
+ }*/
+ }
+
+ value = [ targetYear, targetMonth, targetDate ]
+ }
+
+ return value
+} //DatePicker.prototype.navigate
+
+
+/**
+ * Normalize a date by setting the hours to midnight.
+ */
+DatePicker.prototype.normalize = function( value/*, options*/ ) {
+ value.setHours( 0, 0, 0, 0 )
+ return value
+}
+
+
+/**
+ * Measure the range of dates.
+ */
+DatePicker.prototype.measure = function( type, value/*, options*/ ) {
+
+ var calendar = this
+
+ // If it’s anything false-y, remove the limits.
+ if ( !value ) {
+ value = type == 'min' ? -Infinity : Infinity
+ }
+
+ // If it’s a string, parse it.
+ else if ( typeof value == 'string' ) {
+ value = calendar.parse( type, value )
+ }
+
+ // If it's an integer, get a date relative to today.
+ else if ( _.isInteger( value ) ) {
+ value = calendar.now( type, value, { rel: value } )
+ }
+
+ return value
+} ///DatePicker.prototype.measure
+
+
+/**
+ * Create a viewset object based on navigation.
+ */
+DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {
+ return this.create([ dateObject.year, dateObject.month, 1 ])
+}
+
+
+/**
+ * Validate a date as enabled and shift if needed.
+ */
+DatePicker.prototype.validate = function( type, dateObject, options ) {
+
+ var calendar = this,
+
+ // Keep a reference to the original date.
+ originalDateObject = dateObject,
+
+ // Make sure we have an interval.
+ interval = options && options.interval ? options.interval : 1,
+
+ // Check if the calendar enabled dates are inverted.
+ isFlippedBase = calendar.item.enable === -1,
+
+ // Check if we have any enabled dates after/before now.
+ hasEnabledBeforeTarget, hasEnabledAfterTarget,
+
+ // The min & max limits.
+ minLimitObject = calendar.item.min,
+ maxLimitObject = calendar.item.max,
+
+ // Check if we’ve reached the limit during shifting.
+ reachedMin, reachedMax,
+
+ // Check if the calendar is inverted and at least one weekday is enabled.
+ hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {
+
+ // If there’s a date, check where it is relative to the target.
+ if ( $.isArray( value ) ) {
+ var dateTime = calendar.create( value ).pick
+ if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true
+ else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true
+ }
+
+ // Return only integers for enabled weekdays.
+ return _.isInteger( value )
+ }).length/*,
+
+ safety = 100*/
+
+
+
+ // Cases to validate for:
+ // [1] Not inverted and date disabled.
+ // [2] Inverted and some dates enabled.
+ // [3] Not inverted and out of range.
+ //
+ // Cases to **not** validate for:
+ // • Navigating months.
+ // • Not inverted and date enabled.
+ // • Inverted and all dates disabled.
+ // • ..and anything else.
+ if ( !options || !options.nav ) if (
+ /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||
+ /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||
+ /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )
+ ) {
+
+
+ // When inverted, flip the direction if there aren’t any enabled weekdays
+ // and there are no enabled dates in the direction of the interval.
+ if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {
+ interval *= -1
+ }
+
+
+ // Keep looping until we reach an enabled date.
+ while ( /*safety &&*/ calendar.disabled( dateObject ) ) {
+
+ /*safety -= 1
+ if ( !safety ) {
+ throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'
+ }*/
+
+
+ // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.
+ if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {
+ dateObject = originalDateObject
+ interval = interval > 0 ? 1 : -1
+ }
+
+
+ // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.
+ if ( dateObject.pick <= minLimitObject.pick ) {
+ reachedMin = true
+ interval = 1
+ dateObject = calendar.create([
+ minLimitObject.year,
+ minLimitObject.month,
+ minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)
+ ])
+ }
+ else if ( dateObject.pick >= maxLimitObject.pick ) {
+ reachedMax = true
+ interval = -1
+ dateObject = calendar.create([
+ maxLimitObject.year,
+ maxLimitObject.month,
+ maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)
+ ])
+ }
+
+
+ // If we’ve reached both limits, just break out of the loop.
+ if ( reachedMin && reachedMax ) {
+ break
+ }
+
+
+ // Finally, create the shifted date using the interval and keep looping.
+ dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])
+ }
+
+ } //endif
+
+
+ // Return the date object settled on.
+ return dateObject
+} //DatePicker.prototype.validate
+
+
+/**
+ * Check if a date is disabled.
+ */
+DatePicker.prototype.disabled = function( dateToVerify ) {
+
+ var
+ calendar = this,
+
+ // Filter through the disabled dates to check if this is one.
+ isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {
+
+ // If the date is a number, match the weekday with 0index and `firstDay` check.
+ if ( _.isInteger( dateToDisable ) ) {
+ return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7
+ }
+
+ // If it’s an array or a native JS date, create and match the exact date.
+ if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {
+ return dateToVerify.pick === calendar.create( dateToDisable ).pick
+ }
+
+ // If it’s an object, match a date within the “from” and “to” range.
+ if ( $.isPlainObject( dateToDisable ) ) {
+ return calendar.withinRange( dateToDisable, dateToVerify )
+ }
+ })
+
+ // If this date matches a disabled date, confirm it’s not inverted.
+ isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {
+ return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||
+ $.isPlainObject( dateToDisable ) && dateToDisable.inverted
+ }).length
+
+ // Check the calendar “enabled” flag and respectively flip the
+ // disabled state. Then also check if it’s beyond the min/max limits.
+ return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||
+ dateToVerify.pick < calendar.item.min.pick ||
+ dateToVerify.pick > calendar.item.max.pick
+
+} //DatePicker.prototype.disabled
+
+
+/**
+ * Parse a string into a usable type.
+ */
+DatePicker.prototype.parse = function( type, value, options ) {
+
+ var calendar = this,
+ parsingObject = {}
+
+ // If it’s already parsed, we’re good.
+ if ( !value || typeof value != 'string' ) {
+ return value
+ }
+
+ // We need a `.format` to parse the value with.
+ if ( !( options && options.format ) ) {
+ options = options || {}
+ options.format = calendar.settings.format
+ }
+
+ // Convert the format into an array and then map through it.
+ calendar.formats.toArray( options.format ).map( function( label ) {
+
+ var
+ // Grab the formatting label.
+ formattingLabel = calendar.formats[ label ],
+
+ // The format length is from the formatting label function or the
+ // label length without the escaping exclamation (!) mark.
+ formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length
+
+ // If there's a format label, split the value up to the format length.
+ // Then add it to the parsing object with appropriate label.
+ if ( formattingLabel ) {
+ parsingObject[ label ] = value.substr( 0, formatLength )
+ }
+
+ // Update the value as the substring from format length to end.
+ value = value.substr( formatLength )
+ })
+
+ // Compensate for month 0index.
+ return [
+ parsingObject.yyyy || parsingObject.yy,
+ +( parsingObject.mm || parsingObject.m ) - 1,
+ parsingObject.dd || parsingObject.d
+ ]
+} //DatePicker.prototype.parse
+
+
+/**
+ * Various formats to display the object in.
+ */
+DatePicker.prototype.formats = (function() {
+
+ // Return the length of the first word in a collection.
+ function getWordLengthFromCollection( string, collection, dateObject ) {
+
+ // Grab the first word from the string.
+ var word = string.match( /\w+/ )[ 0 ]
+
+ // If there's no month index, add it to the date object
+ if ( !dateObject.mm && !dateObject.m ) {
+ dateObject.m = collection.indexOf( word ) + 1
+ }
+
+ // Return the length of the word.
+ return word.length
+ }
+
+ // Get the length of the first word in a string.
+ function getFirstWordLength( string ) {
+ return string.match( /\w+/ )[ 0 ].length
+ }
+
+ return {
+
+ d: function( string, dateObject ) {
+
+ // If there's string, then get the digits length.
+ // Otherwise return the selected date.
+ return string ? _.digits( string ) : dateObject.date
+ },
+ dd: function( string, dateObject ) {
+
+ // If there's a string, then the length is always 2.
+ // Otherwise return the selected date with a leading zero.
+ return string ? 2 : _.lead( dateObject.date )
+ },
+ ddd: function( string, dateObject ) {
+
+ // If there's a string, then get the length of the first word.
+ // Otherwise return the short selected weekday.
+ return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]
+ },
+ dddd: function( string, dateObject ) {
+
+ // If there's a string, then get the length of the first word.
+ // Otherwise return the full selected weekday.
+ return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]
+ },
+ m: function( string, dateObject ) {
+
+ // If there's a string, then get the length of the digits
+ // Otherwise return the selected month with 0index compensation.
+ return string ? _.digits( string ) : dateObject.month + 1
+ },
+ mm: function( string, dateObject ) {
+
+ // If there's a string, then the length is always 2.
+ // Otherwise return the selected month with 0index and leading zero.
+ return string ? 2 : _.lead( dateObject.month + 1 )
+ },
+ mmm: function( string, dateObject ) {
+
+ var collection = this.settings.monthsShort
+
+ // If there's a string, get length of the relevant month from the short
+ // months collection. Otherwise return the selected month from that collection.
+ return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
+ },
+ mmmm: function( string, dateObject ) {
+
+ var collection = this.settings.monthsFull
+
+ // If there's a string, get length of the relevant month from the full
+ // months collection. Otherwise return the selected month from that collection.
+ return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]
+ },
+ yy: function( string, dateObject ) {
+
+ // If there's a string, then the length is always 2.
+ // Otherwise return the selected year by slicing out the first 2 digits.
+ return string ? 2 : ( '' + dateObject.year ).slice( 2 )
+ },
+ yyyy: function( string, dateObject ) {
+
+ // If there's a string, then the length is always 4.
+ // Otherwise return the selected year.
+ return string ? 4 : dateObject.year
+ },
+
+ // Create an array by splitting the formatting string passed.
+ toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },
+
+ // Format an object into a string using the formatting options.
+ toString: function ( formatString, itemObject ) {
+ var calendar = this
+ return calendar.formats.toArray( formatString ).map( function( label ) {
+ return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )
+ }).join( '' )
+ }
+ }
+})() //DatePicker.prototype.formats
+
+
+
+
+/**
+ * Check if two date units are the exact.
+ */
+DatePicker.prototype.isDateExact = function( one, two ) {
+
+ var calendar = this
+
+ // When we’re working with weekdays, do a direct comparison.
+ if (
+ ( _.isInteger( one ) && _.isInteger( two ) ) ||
+ ( typeof one == 'boolean' && typeof two == 'boolean' )
+ ) {
+ return one === two
+ }
+
+ // When we’re working with date representations, compare the “pick” value.
+ if (
+ ( _.isDate( one ) || $.isArray( one ) ) &&
+ ( _.isDate( two ) || $.isArray( two ) )
+ ) {
+ return calendar.create( one ).pick === calendar.create( two ).pick
+ }
+
+ // When we’re working with range objects, compare the “from” and “to”.
+ if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
+ return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )
+ }
+
+ return false
+}
+
+
+/**
+ * Check if two date units overlap.
+ */
+DatePicker.prototype.isDateOverlap = function( one, two ) {
+
+ var calendar = this,
+ firstDay = calendar.settings.firstDay ? 1 : 0
+
+ // When we’re working with a weekday index, compare the days.
+ if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {
+ one = one % 7 + firstDay
+ return one === calendar.create( two ).day + 1
+ }
+ if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {
+ two = two % 7 + firstDay
+ return two === calendar.create( one ).day + 1
+ }
+
+ // When we’re working with range objects, check if the ranges overlap.
+ if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {
+ return calendar.overlapRanges( one, two )
+ }
+
+ return false
+}
+
+
+/**
+ * Flip the “enabled” state.
+ */
+DatePicker.prototype.flipEnable = function(val) {
+ var itemObject = this.item
+ itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)
+}
+
+
+/**
+ * Mark a collection of dates as “disabled”.
+ */
+DatePicker.prototype.deactivate = function( type, datesToDisable ) {
+
+ var calendar = this,
+ disabledItems = calendar.item.disable.slice(0)
+
+
+ // If we’re flipping, that’s all we need to do.
+ if ( datesToDisable == 'flip' ) {
+ calendar.flipEnable()
+ }
+
+ else if ( datesToDisable === false ) {
+ calendar.flipEnable(1)
+ disabledItems = []
+ }
+
+ else if ( datesToDisable === true ) {
+ calendar.flipEnable(-1)
+ disabledItems = []
+ }
+
+ // Otherwise go through the dates to disable.
+ else {
+
+ datesToDisable.map(function( unitToDisable ) {
+
+ var matchFound
+
+ // When we have disabled items, check for matches.
+ // If something is matched, immediately break out.
+ for ( var index = 0; index < disabledItems.length; index += 1 ) {
+ if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {
+ matchFound = true
+ break
+ }
+ }
+
+ // If nothing was found, add the validated unit to the collection.
+ if ( !matchFound ) {
+ if (
+ _.isInteger( unitToDisable ) ||
+ _.isDate( unitToDisable ) ||
+ $.isArray( unitToDisable ) ||
+ ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )
+ ) {
+ disabledItems.push( unitToDisable )
+ }
+ }
+ })
+ }
+
+ // Return the updated collection.
+ return disabledItems
+} //DatePicker.prototype.deactivate
+
+
+/**
+ * Mark a collection of dates as “enabled”.
+ */
+DatePicker.prototype.activate = function( type, datesToEnable ) {
+
+ var calendar = this,
+ disabledItems = calendar.item.disable,
+ disabledItemsCount = disabledItems.length
+
+ // If we’re flipping, that’s all we need to do.
+ if ( datesToEnable == 'flip' ) {
+ calendar.flipEnable()
+ }
+
+ else if ( datesToEnable === true ) {
+ calendar.flipEnable(1)
+ disabledItems = []
+ }
+
+ else if ( datesToEnable === false ) {
+ calendar.flipEnable(-1)
+ disabledItems = []
+ }
+
+ // Otherwise go through the disabled dates.
+ else {
+
+ datesToEnable.map(function( unitToEnable ) {
+
+ var matchFound,
+ disabledUnit,
+ index,
+ isExactRange
+
+ // Go through the disabled items and try to find a match.
+ for ( index = 0; index < disabledItemsCount; index += 1 ) {
+
+ disabledUnit = disabledItems[index]
+
+ // When an exact match is found, remove it from the collection.
+ if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {
+ matchFound = disabledItems[index] = null
+ isExactRange = true
+ break
+ }
+
+ // When an overlapped match is found, add the “inverted” state to it.
+ else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {
+ if ( $.isPlainObject( unitToEnable ) ) {
+ unitToEnable.inverted = true
+ matchFound = unitToEnable
+ }
+ else if ( $.isArray( unitToEnable ) ) {
+ matchFound = unitToEnable
+ if ( !matchFound[3] ) matchFound.push( 'inverted' )
+ }
+ else if ( _.isDate( unitToEnable ) ) {
+ matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]
+ }
+ break
+ }
+ }
+
+ // If a match was found, remove a previous duplicate entry.
+ if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
+ if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {
+ disabledItems[index] = null
+ break
+ }
+ }
+
+ // In the event that we’re dealing with an exact range of dates,
+ // make sure there are no “inverted” dates because of it.
+ if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {
+ if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {
+ disabledItems[index] = null
+ break
+ }
+ }
+
+ // If something is still matched, add it into the collection.
+ if ( matchFound ) {
+ disabledItems.push( matchFound )
+ }
+ })
+ }
+
+ // Return the updated collection.
+ return disabledItems.filter(function( val ) { return val != null })
+} //DatePicker.prototype.activate
+
+
+/**
+ * Create a string for the nodes in the picker.
+ */
+DatePicker.prototype.nodes = function( isOpen ) {
+
+ var
+ calendar = this,
+ settings = calendar.settings,
+ calendarItem = calendar.item,
+ nowObject = calendarItem.now,
+ selectedObject = calendarItem.select,
+ highlightedObject = calendarItem.highlight,
+ viewsetObject = calendarItem.view,
+ disabledCollection = calendarItem.disable,
+ minLimitObject = calendarItem.min,
+ maxLimitObject = calendarItem.max,
+
+
+ // Create the calendar table head using a copy of weekday labels collection.
+ // * We do a copy so we don't mutate the original array.
+ tableHead = (function( collection, fullCollection ) {
+
+ // If the first day should be Monday, move Sunday to the end.
+ if ( settings.firstDay ) {
+ collection.push( collection.shift() )
+ fullCollection.push( fullCollection.shift() )
+ }
+
+ // Create and return the table head group.
+ return _.node(
+ 'thead',
+ _.node(
+ 'tr',
+ _.group({
+ min: 0,
+ max: DAYS_IN_WEEK - 1,
+ i: 1,
+ node: 'th',
+ item: function( counter ) {
+ return [
+ collection[ counter ],
+ settings.klass.weekdays,
+ 'scope=col title="' + fullCollection[ counter ] + '"'
+ ]
+ }
+ })
+ )
+ ) //endreturn
+
+ // Materialize modified
+ })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysLetter ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead
+
+
+ // Create the nav for next/prev month.
+ createMonthNav = function( next ) {
+
+ // Otherwise, return the created month tag.
+ return _.node(
+ 'div',
+ ' ',
+ settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (
+
+ // If the focused month is outside the range, disabled the button.
+ ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||
+ ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?
+ ' ' + settings.klass.navDisabled : ''
+ ),
+ 'data-nav=' + ( next || -1 ) + ' ' +
+ _.ariaAttr({
+ role: 'button',
+ controls: calendar.$node[0].id + '_table'
+ }) + ' ' +
+ 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"'
+ ) //endreturn
+ }, //createMonthNav
+
+
+ // Create the month label.
+ //Materialize modified
+ createMonthLabel = function(override) {
+
+ var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull
+
+ // Materialize modified
+ if (override == "short_months") {
+ monthsCollection = settings.monthsShort;
+ }
+
+ // If there are months to select, add a dropdown menu.
+ if ( settings.selectMonths && override == undefined) {
+
+ return _.node( 'select',
+ _.group({
+ min: 0,
+ max: 11,
+ i: 1,
+ node: 'option',
+ item: function( loopedMonth ) {
+
+ return [
+
+ // The looped month and no classes.
+ monthsCollection[ loopedMonth ], 0,
+
+ // Set the value and selected index.
+ 'value=' + loopedMonth +
+ ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +
+ (
+ (
+ ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||
+ ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )
+ ) ?
+ ' disabled' : ''
+ )
+ ]
+ }
+ }),
+ settings.klass.selectMonth + ' browser-default',
+ ( isOpen ? '' : 'disabled' ) + ' ' +
+ _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
+ 'title="' + settings.labelMonthSelect + '"'
+ )
+ }
+
+ // Materialize modified
+ if (override == "short_months")
+ if (selectedObject != null)
+ return _.node( 'div', monthsCollection[ selectedObject.month ] );
+ else return _.node( 'div', monthsCollection[ viewsetObject.month ] );
+
+ // If there's a need for a month selector
+ return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )
+ }, //createMonthLabel
+
+
+ // Create the year label.
+ // Materialize modified
+ createYearLabel = function(override) {
+
+ var focusedYear = viewsetObject.year,
+
+ // If years selector is set to a literal "true", set it to 5. Otherwise
+ // divide in half to get half before and half after focused year.
+ numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )
+
+ // If there are years to select, add a dropdown menu.
+ if ( numberYears ) {
+
+ var
+ minYear = minLimitObject.year,
+ maxYear = maxLimitObject.year,
+ lowestYear = focusedYear - numberYears,
+ highestYear = focusedYear + numberYears
+
+ // If the min year is greater than the lowest year, increase the highest year
+ // by the difference and set the lowest year to the min year.
+ if ( minYear > lowestYear ) {
+ highestYear += minYear - lowestYear
+ lowestYear = minYear
+ }
+
+ // If the max year is less than the highest year, decrease the lowest year
+ // by the lower of the two: available and needed years. Then set the
+ // highest year to the max year.
+ if ( maxYear < highestYear ) {
+
+ var availableYears = lowestYear - minYear,
+ neededYears = highestYear - maxYear
+
+ lowestYear -= availableYears > neededYears ? neededYears : availableYears
+ highestYear = maxYear
+ }
+
+ if ( settings.selectYears && override == undefined ) {
+ return _.node( 'select',
+ _.group({
+ min: lowestYear,
+ max: highestYear,
+ i: 1,
+ node: 'option',
+ item: function( loopedYear ) {
+ return [
+
+ // The looped year and no classes.
+ loopedYear, 0,
+
+ // Set the value and selected index.
+ 'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )
+ ]
+ }
+ }),
+ settings.klass.selectYear + ' browser-default',
+ ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +
+ 'title="' + settings.labelYearSelect + '"'
+ )
+ }
+ }
+
+ // Materialize modified
+ if (override == "raw")
+ return _.node( 'div', focusedYear )
+
+ // Otherwise just return the year focused
+ return _.node( 'div', focusedYear, settings.klass.year )
+ } //createYearLabel
+
+
+ // Materialize modified
+ createDayLabel = function() {
+ if (selectedObject != null)
+ return _.node( 'div', selectedObject.date)
+ else return _.node( 'div', nowObject.date)
+ }
+ createWeekdayLabel = function() {
+ var display_day;
+
+ if (selectedObject != null)
+ display_day = selectedObject.day;
+ else
+ display_day = nowObject.day;
+ var weekday = settings.weekdaysFull[ display_day ]
+ return weekday
+ }
+
+
+ // Create and return the entire calendar.
+return _.node(
+ // Date presentation View
+ 'div',
+ _.node(
+ 'div',
+ createWeekdayLabel(),
+ "picker__weekday-display"
+ )+
+ _.node(
+ // Div for short Month
+ 'div',
+ createMonthLabel("short_months"),
+ settings.klass.month_display
+ )+
+ _.node(
+ // Div for Day
+ 'div',
+ createDayLabel() ,
+ settings.klass.day_display
+ )+
+ _.node(
+ // Div for Year
+ 'div',
+ createYearLabel("raw") ,
+ settings.klass.year_display
+ ),
+ settings.klass.date_display
+ )+
+ // Calendar container
+ _.node('div',
+ _.node('div',
+ ( settings.selectYears ? createMonthLabel() + createYearLabel() : createMonthLabel() + createYearLabel() ) +
+ createMonthNav() + createMonthNav( 1 ),
+ settings.klass.header
+ ) + _.node(
+ 'table',
+ tableHead +
+ _.node(
+ 'tbody',
+ _.group({
+ min: 0,
+ max: WEEKS_IN_CALENDAR - 1,
+ i: 1,
+ node: 'tr',
+ item: function( rowCounter ) {
+
+ // If Monday is the first day and the month starts on Sunday, shift the date back a week.
+ var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0
+
+ return [
+ _.group({
+ min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index
+ max: function() {
+ return this.min + DAYS_IN_WEEK - 1
+ },
+ i: 1,
+ node: 'td',
+ item: function( targetDate ) {
+
+ // Convert the time date from a relative date to a target date.
+ targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])
+
+ var isSelected = selectedObject && selectedObject.pick == targetDate.pick,
+ isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,
+ isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,
+ formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] )
+
+ return [
+ _.node(
+ 'div',
+ targetDate.date,
+ (function( klasses ) {
+
+ // Add the `infocus` or `outfocus` classes based on month in view.
+ klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )
+
+ // Add the `today` class if needed.
+ if ( nowObject.pick == targetDate.pick ) {
+ klasses.push( settings.klass.now )
+ }
+
+ // Add the `selected` class if something's selected and the time matches.
+ if ( isSelected ) {
+ klasses.push( settings.klass.selected )
+ }
+
+ // Add the `highlighted` class if something's highlighted and the time matches.
+ if ( isHighlighted ) {
+ klasses.push( settings.klass.highlighted )
+ }
+
+ // Add the `disabled` class if something's disabled and the object matches.
+ if ( isDisabled ) {
+ klasses.push( settings.klass.disabled )
+ }
+
+ return klasses.join( ' ' )
+ })([ settings.klass.day ]),
+ 'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({
+ role: 'gridcell',
+ label: formattedDate,
+ selected: isSelected && calendar.$node.val() === formattedDate ? true : null,
+ activedescendant: isHighlighted ? true : null,
+ disabled: isDisabled ? true : null
+ })
+ ),
+ '',
+ _.ariaAttr({ role: 'presentation' })
+ ] //endreturn
+ }
+ })
+ ] //endreturn
+ }
+ })
+ ),
+ settings.klass.table,
+ 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({
+ role: 'grid',
+ controls: calendar.$node[0].id,
+ readonly: true
+ })
+ )
+ , settings.klass.calendar_container) // end calendar
+
+ +
+
+ // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.
+ _.node(
+ 'div',
+ _.node( 'button', settings.today, "btn-flat picker__today",
+ 'type=button data-pick=' + nowObject.pick +
+ ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +
+ _.ariaAttr({ controls: calendar.$node[0].id }) ) +
+ _.node( 'button', settings.clear, "btn-flat picker__clear",
+ 'type=button data-clear=1' +
+ ( isOpen ? '' : ' disabled' ) + ' ' +
+ _.ariaAttr({ controls: calendar.$node[0].id }) ) +
+ _.node('button', settings.close, "btn-flat picker__close",
+ 'type=button data-close=true ' +
+ ( isOpen ? '' : ' disabled' ) + ' ' +
+ _.ariaAttr({ controls: calendar.$node[0].id }) ),
+ settings.klass.footer
+ ) //endreturn
+} //DatePicker.prototype.nodes
+
+
+
+
+/**
+ * The date picker defaults.
+ */
+DatePicker.defaults = (function( prefix ) {
+
+ return {
+
+ // The title label to use for the month nav buttons
+ labelMonthNext: 'Next month',
+ labelMonthPrev: 'Previous month',
+
+ // The title label to use for the dropdown selectors
+ labelMonthSelect: 'Select a month',
+ labelYearSelect: 'Select a year',
+
+ // Months and weekdays
+ monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
+ monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
+ weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
+ weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
+
+ // Materialize modified
+ weekdaysLetter: [ 'S', 'M', 'T', 'W', 'T', 'F', 'S' ],
+
+ // Today and clear
+ today: 'Today',
+ clear: 'Clear',
+ close: 'Close',
+
+ // The format to show on the `input` element
+ format: 'd mmmm, yyyy',
+
+ // Classes
+ klass: {
+
+ table: prefix + 'table',
+
+ header: prefix + 'header',
+
+
+ // Materialize Added klasses
+ date_display: prefix + 'date-display',
+ day_display: prefix + 'day-display',
+ month_display: prefix + 'month-display',
+ year_display: prefix + 'year-display',
+ calendar_container: prefix + 'calendar-container',
+ // end
+
+
+
+ navPrev: prefix + 'nav--prev',
+ navNext: prefix + 'nav--next',
+ navDisabled: prefix + 'nav--disabled',
+
+ month: prefix + 'month',
+ year: prefix + 'year',
+
+ selectMonth: prefix + 'select--month',
+ selectYear: prefix + 'select--year',
+
+ weekdays: prefix + 'weekday',
+
+ day: prefix + 'day',
+ disabled: prefix + 'day--disabled',
+ selected: prefix + 'day--selected',
+ highlighted: prefix + 'day--highlighted',
+ now: prefix + 'day--today',
+ infocus: prefix + 'day--infocus',
+ outfocus: prefix + 'day--outfocus',
+
+ footer: prefix + 'footer',
+
+ buttonClear: prefix + 'button--clear',
+ buttonToday: prefix + 'button--today',
+ buttonClose: prefix + 'button--close'
+ }
+ }
+})( Picker.klasses().picker + '__' )
+
+
+
+
+
+/**
+ * Extend the picker to add the date picker.
+ */
+Picker.extend( 'pickadate', DatePicker )
+
+
+}));
+
+
+;(function ($) {
+
+ $.fn.characterCounter = function(){
+ return this.each(function(){
+ var $input = $(this);
+ var $counterElement = $input.parent().find('span[class="character-counter"]');
+
+ // character counter has already been added appended to the parent container
+ if ($counterElement.length) {
+ return;
+ }
+
+ var itHasLengthAttribute = $input.attr('length') !== undefined;
+
+ if(itHasLengthAttribute){
+ $input.on('input', updateCounter);
+ $input.on('focus', updateCounter);
+ $input.on('blur', removeCounterElement);
+
+ addCounterElement($input);
+ }
+
+ });
+ };
+
+ function updateCounter(){
+ var maxLength = +$(this).attr('length'),
+ actualLength = +$(this).val().length,
+ isValidLength = actualLength <= maxLength;
+
+ $(this).parent().find('span[class="character-counter"]')
+ .html( actualLength + '/' + maxLength);
+
+ addInputStyle(isValidLength, $(this));
+ }
+
+ function addCounterElement($input) {
+ var $counterElement = $input.parent().find('span[class="character-counter"]');
+
+ if ($counterElement.length) {
+ return;
+ }
+
+ $counterElement = $('')
+ .addClass('character-counter')
+ .css('float','right')
+ .css('font-size','12px')
+ .css('height', 1);
+
+ $input.parent().append($counterElement);
+ }
+
+ function removeCounterElement(){
+ $(this).parent().find('span[class="character-counter"]').html('');
+ }
+
+ function addInputStyle(isValidLength, $input){
+ var inputHasInvalidClass = $input.hasClass('invalid');
+ if (isValidLength && inputHasInvalidClass) {
+ $input.removeClass('invalid');
+ }
+ else if(!isValidLength && !inputHasInvalidClass){
+ $input.removeClass('valid');
+ $input.addClass('invalid');
+ }
+ }
+
+ $(document).ready(function(){
+ $('input, textarea').characterCounter();
+ });
+
+}( jQuery ));
+;(function ($) {
+
+ var methods = {
+
+ init : function(options) {
+ var defaults = {
+ time_constant: 200, // ms
+ dist: -100, // zoom scale TODO: make this more intuitive as an option
+ shift: 0, // spacing for center image
+ padding: 0, // Padding between non center items
+ full_width: false, // Change to full width styles
+ indicators: false, // Toggle indicators
+ no_wrap: false // Don't wrap around and cycle through items.
+ };
+ options = $.extend(defaults, options);
+
+ return this.each(function() {
+
+ var images, offset, center, pressed, dim, count,
+ reference, referenceY, amplitude, target, velocity,
+ xform, frame, timestamp, ticker, dragged, vertical_dragged;
+ var $indicators = $('
');
+
+
+ // Initialize
+ var view = $(this);
+ var showIndicators = view.attr('data-indicators') || options.indicators;
+
+ // Don't double initialize.
+ if (view.hasClass('initialized')) {
+ // Redraw carousel.
+ $(this).trigger('carouselNext', [0.000001]);
+ return true;
+ }
+
+
+ // Options
+ if (options.full_width) {
+ options.dist = 0;
+ var firstImage = view.find('.carousel-item img').first();
+ if (firstImage.length) {
+ imageHeight = firstImage.on('load', function(){
+ view.css('height', $(this).height());
+ });
+ } else {
+ imageHeight = view.find('.carousel-item').first().height();
+ view.css('height', imageHeight);
+ }
+
+ // Offset fixed items when indicators.
+ if (showIndicators) {
+ view.find('.carousel-fixed-item').addClass('with-indicators');
+ }
+ }
+
+
+ view.addClass('initialized');
+ pressed = false;
+ offset = target = 0;
+ images = [];
+ item_width = view.find('.carousel-item').first().innerWidth();
+ dim = item_width * 2 + options.padding;
+
+ view.find('.carousel-item').each(function (i) {
+ images.push($(this)[0]);
+ if (showIndicators) {
+ var $indicator = $('');
+
+ // Add active to first by default.
+ if (i === 0) {
+ $indicator.addClass('active');
+ }
+
+ // Handle clicks on indicators.
+ $indicator.click(function () {
+ var index = $(this).index();
+ cycleTo(index);
+ });
+ $indicators.append($indicator);
+ }
+ });
+
+ if (showIndicators) {
+ view.append($indicators);
+ }
+ count = images.length;
+
+
+ function setupEvents() {
+ if (typeof window.ontouchstart !== 'undefined') {
+ view[0].addEventListener('touchstart', tap);
+ view[0].addEventListener('touchmove', drag);
+ view[0].addEventListener('touchend', release);
+ }
+ view[0].addEventListener('mousedown', tap);
+ view[0].addEventListener('mousemove', drag);
+ view[0].addEventListener('mouseup', release);
+ view[0].addEventListener('mouseleave', release);
+ view[0].addEventListener('click', click);
+ }
+
+ function xpos(e) {
+ // touch event
+ if (e.targetTouches && (e.targetTouches.length >= 1)) {
+ return e.targetTouches[0].clientX;
+ }
+
+ // mouse event
+ return e.clientX;
+ }
+
+ function ypos(e) {
+ // touch event
+ if (e.targetTouches && (e.targetTouches.length >= 1)) {
+ return e.targetTouches[0].clientY;
+ }
+
+ // mouse event
+ return e.clientY;
+ }
+
+ function wrap(x) {
+ return (x >= count) ? (x % count) : (x < 0) ? wrap(count + (x % count)) : x;
+ }
+
+ function scroll(x) {
+ var i, half, delta, dir, tween, el, alignment, xTranslation;
+
+ offset = (typeof x === 'number') ? x : offset;
+ center = Math.floor((offset + dim / 2) / dim);
+ delta = offset - center * dim;
+ dir = (delta < 0) ? 1 : -1;
+ tween = -dir * delta * 2 / dim;
+ half = count >> 1;
+
+ if (!options.full_width) {
+ alignment = 'translateX(' + (view[0].clientWidth - item_width) / 2 + 'px) ';
+ alignment += 'translateY(' + (view[0].clientHeight - item_width) / 2 + 'px)';
+ } else {
+ alignment = 'translateX(0)';
+ }
+
+ // Set indicator active
+ if (showIndicators) {
+ var diff = (center % count);
+ var activeIndicator = $indicators.find('.indicator-item.active');
+ if (activeIndicator.index() !== diff) {
+ activeIndicator.removeClass('active');
+ $indicators.find('.indicator-item').eq(diff).addClass('active');
+ }
+ }
+
+ // center
+ // Don't show wrapped items.
+ if (!options.no_wrap || (center >= 0 && center < count)) {
+ el = images[wrap(center)];
+ el.style[xform] = alignment +
+ ' translateX(' + (-delta / 2) + 'px)' +
+ ' translateX(' + (dir * options.shift * tween * i) + 'px)' +
+ ' translateZ(' + (options.dist * tween) + 'px)';
+ el.style.zIndex = 0;
+ if (options.full_width) { tweenedOpacity = 1; }
+ else { tweenedOpacity = 1 - 0.2 * tween; }
+ el.style.opacity = tweenedOpacity;
+ el.style.display = 'block';
+ }
+
+ for (i = 1; i <= half; ++i) {
+ // right side
+ if (options.full_width) {
+ zTranslation = options.dist;
+ tweenedOpacity = (i === half && delta < 0) ? 1 - tween : 1;
+ } else {
+ zTranslation = options.dist * (i * 2 + tween * dir);
+ tweenedOpacity = 1 - 0.2 * (i * 2 + tween * dir);
+ }
+ // Don't show wrapped items.
+ if (!options.no_wrap || center + i < count) {
+ el = images[wrap(center + i)];
+ el.style[xform] = alignment +
+ ' translateX(' + (options.shift + (dim * i - delta) / 2) + 'px)' +
+ ' translateZ(' + zTranslation + 'px)';
+ el.style.zIndex = -i;
+ el.style.opacity = tweenedOpacity;
+ el.style.display = 'block';
+ }
+
+
+ // left side
+ if (options.full_width) {
+ zTranslation = options.dist;
+ tweenedOpacity = (i === half && delta > 0) ? 1 - tween : 1;
+ } else {
+ zTranslation = options.dist * (i * 2 - tween * dir);
+ tweenedOpacity = 1 - 0.2 * (i * 2 - tween * dir);
+ }
+ // Don't show wrapped items.
+ if (!options.no_wrap || center - i >= 0) {
+ el = images[wrap(center - i)];
+ el.style[xform] = alignment +
+ ' translateX(' + (-options.shift + (-dim * i - delta) / 2) + 'px)' +
+ ' translateZ(' + zTranslation + 'px)';
+ el.style.zIndex = -i;
+ el.style.opacity = tweenedOpacity;
+ el.style.display = 'block';
+ }
+ }
+
+ // center
+ // Don't show wrapped items.
+ if (!options.no_wrap || (center >= 0 && center < count)) {
+ el = images[wrap(center)];
+ el.style[xform] = alignment +
+ ' translateX(' + (-delta / 2) + 'px)' +
+ ' translateX(' + (dir * options.shift * tween) + 'px)' +
+ ' translateZ(' + (options.dist * tween) + 'px)';
+ el.style.zIndex = 0;
+ if (options.full_width) { tweenedOpacity = 1; }
+ else { tweenedOpacity = 1 - 0.2 * tween; }
+ el.style.opacity = tweenedOpacity;
+ el.style.display = 'block';
+ }
+ }
+
+ function track() {
+ var now, elapsed, delta, v;
+
+ now = Date.now();
+ elapsed = now - timestamp;
+ timestamp = now;
+ delta = offset - frame;
+ frame = offset;
+
+ v = 1000 * delta / (1 + elapsed);
+ velocity = 0.8 * v + 0.2 * velocity;
+ }
+
+ function autoScroll() {
+ var elapsed, delta;
+
+ if (amplitude) {
+ elapsed = Date.now() - timestamp;
+ delta = amplitude * Math.exp(-elapsed / options.time_constant);
+ if (delta > 2 || delta < -2) {
+ scroll(target - delta);
+ requestAnimationFrame(autoScroll);
+ } else {
+ scroll(target);
+ }
+ }
+ }
+
+ function click(e) {
+ // Disable clicks if carousel was dragged.
+ if (dragged) {
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+
+ } else if (!options.full_width) {
+ var clickedIndex = $(e.target).closest('.carousel-item').index();
+ var diff = (center % count) - clickedIndex;
+
+ // Disable clicks if carousel was shifted by click
+ if (diff !== 0) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ cycleTo(clickedIndex);
+ }
+ }
+
+ function cycleTo(n) {
+ var diff = (center % count) - n;
+
+ // Account for wraparound.
+ if (!options.no_wrap) {
+ if (diff < 0) {
+ if (Math.abs(diff + count) < Math.abs(diff)) { diff += count; }
+
+ } else if (diff > 0) {
+ if (Math.abs(diff - count) < diff) { diff -= count; }
+ }
+ }
+
+ // Call prev or next accordingly.
+ if (diff < 0) {
+ view.trigger('carouselNext', [Math.abs(diff)]);
+
+ } else if (diff > 0) {
+ view.trigger('carouselPrev', [diff]);
+ }
+ }
+
+ function tap(e) {
+ pressed = true;
+ dragged = false;
+ vertical_dragged = false;
+ reference = xpos(e);
+ referenceY = ypos(e);
+
+ velocity = amplitude = 0;
+ frame = offset;
+ timestamp = Date.now();
+ clearInterval(ticker);
+ ticker = setInterval(track, 100);
+
+ }
+
+ function drag(e) {
+ var x, delta, deltaY;
+ if (pressed) {
+ x = xpos(e);
+ y = ypos(e);
+ delta = reference - x;
+ deltaY = Math.abs(referenceY - y);
+ if (deltaY < 30 && !vertical_dragged) {
+ // If vertical scrolling don't allow dragging.
+ if (delta > 2 || delta < -2) {
+ dragged = true;
+ reference = x;
+ scroll(offset + delta);
+ }
+
+ } else if (dragged) {
+ // If dragging don't allow vertical scroll.
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+
+ } else {
+ // Vertical scrolling.
+ vertical_dragged = true;
+ }
+ }
+
+ if (dragged) {
+ // If dragging don't allow vertical scroll.
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ }
+
+ function release(e) {
+ if (pressed) {
+ pressed = false;
+ } else {
+ return;
+ }
+
+ clearInterval(ticker);
+ target = offset;
+ if (velocity > 10 || velocity < -10) {
+ amplitude = 0.9 * velocity;
+ target = offset + amplitude;
+ }
+ target = Math.round(target / dim) * dim;
+
+ // No wrap of items.
+ if (options.no_wrap) {
+ if (target >= dim * (count - 1)) {
+ target = dim * (count - 1);
+ } else if (target < 0) {
+ target = 0;
+ }
+ }
+ amplitude = target - offset;
+ timestamp = Date.now();
+ requestAnimationFrame(autoScroll);
+
+ if (dragged) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ return false;
+ }
+
+ xform = 'transform';
+ ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) {
+ var e = prefix + 'Transform';
+ if (typeof document.body.style[e] !== 'undefined') {
+ xform = e;
+ return false;
+ }
+ return true;
+ });
+
+
+
+ window.onresize = scroll;
+
+ setupEvents();
+ scroll(offset);
+
+ $(this).on('carouselNext', function(e, n) {
+ if (n === undefined) {
+ n = 1;
+ }
+ target = offset + dim * n;
+ if (offset !== target) {
+ amplitude = target - offset;
+ timestamp = Date.now();
+ requestAnimationFrame(autoScroll);
+ }
+ });
+
+ $(this).on('carouselPrev', function(e, n) {
+ if (n === undefined) {
+ n = 1;
+ }
+ target = offset - dim * n;
+ if (offset !== target) {
+ amplitude = target - offset;
+ timestamp = Date.now();
+ requestAnimationFrame(autoScroll);
+ }
+ });
+
+ $(this).on('carouselSet', function(e, n) {
+ if (n === undefined) {
+ n = 0;
+ }
+ cycleTo(n);
+ });
+
+ });
+
+
+
+ },
+ next : function(n) {
+ $(this).trigger('carouselNext', [n]);
+ },
+ prev : function(n) {
+ $(this).trigger('carouselPrev', [n]);
+ },
+ set : function(n) {
+ $(this).trigger('carouselSet', [n]);
+ }
+ };
+
+
+ $.fn.carousel = function(methodOrOptions) {
+ if ( methods[methodOrOptions] ) {
+ return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
+ // Default to "init"
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + methodOrOptions + ' does not exist on jQuery.carousel' );
+ }
+ }; // Plugin end
+}( jQuery ));
\ No newline at end of file
diff --git a/js/materialize.min.js b/js/materialize.min.js
new file mode 100644
index 0000000..9493303
--- /dev/null
+++ b/js/materialize.min.js
@@ -0,0 +1,10 @@
+/*!
+ * Materialize v0.97.8 (http://materializecss.com)
+ * Copyright 2014-2015 Materialize
+ * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE)
+ */
+if("undefined"==typeof jQuery){var jQuery;jQuery="function"==typeof require?$=require("jquery"):$}jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(a,b,c,d,e){return jQuery.easing[jQuery.easing.def](a,b,c,d,e)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:(b/=e/2)<1?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*b)+c},easeInOutCirc:function(a,b,c,d,e){return(b/=e/2)<1?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var f=1.70158,g=0,h=d;if(0==b)return c;if(1==(b/=e))return c+d;if(g||(g=.3*e),hb?-.5*(h*Math.pow(2,10*(b-=1))*Math.sin((b*e-f)*(2*Math.PI)/g))+c:h*Math.pow(2,-10*(b-=1))*Math.sin((b*e-f)*(2*Math.PI)/g)*.5+d+c},easeInBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*(b/=e)*b*((f+1)*b-f)+c},easeOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),d*((b=b/e-1)*b*((f+1)*b+f)+1)+c},easeInOutBack:function(a,b,c,d,e,f){return void 0==f&&(f=1.70158),(b/=e/2)<1?d/2*(b*b*(((f*=1.525)+1)*b-f))+c:d/2*((b-=2)*b*(((f*=1.525)+1)*b+f)+2)+c},easeInBounce:function(a,b,c,d,e){return d-jQuery.easing.easeOutBounce(a,e-b,0,d,e)+c},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*(7.5625*b*b)+c:2/2.75>b?d*(7.5625*(b-=1.5/2.75)*b+.75)+c:2.5/2.75>b?d*(7.5625*(b-=2.25/2.75)*b+.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+.984375)+c},easeInOutBounce:function(a,b,c,d,e){return e/2>b?.5*jQuery.easing.easeInBounce(a,2*b,0,d,e)+c:.5*jQuery.easing.easeOutBounce(a,2*b-e,0,d,e)+.5*d+c}}),jQuery.extend(jQuery.easing,{easeInOutMaterial:function(a,b,c,d,e){return(b/=e/2)<1?d/2*b*b+c:d/4*((b-=2)*b*b+2)+c}}),jQuery.Velocity?console.log("Velocity is already loaded. You may be needlessly importing Velocity again; note that Materialize includes Velocity."):(!function(a){function b(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return null!=a&&a==a.window},c.type=function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return void 0===b||f.call(a,b)},c.each=function(a,c,d){var e,f=0,g=a.length,h=b(a);if(d){if(h)for(;g>f&&(e=c.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=c.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=c.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=c.call(a[f],f,a[f]),e===!1)break;return a},c.data=function(a,b,e){if(void 0===e){var f=a[c.expando],g=f&&d[f];if(void 0===b)return g;if(g&&b in g)return g[b]}else if(void 0!==b){var f=a[c.expando]||(a[c.expando]=++c.uuid);return d[f]=d[f]||{},d[f][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&c.each(b,function(a,b){delete f[b]})},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):void 0!==d&&(h[e]=d));return h},c.queue=function(a,d,e){function f(a,c){var d=c||[];return null!=a&&(b(Object(a))?!function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;)a[e++]=b[d++];if(c!==c)for(;void 0!==b[d];)a[e++]=b[d++];return a.length=e,a}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}if(a){d=(d||"fx")+"queue";var g=c.data(a,d);return e?(!g||c.isArray(e)?g=c.data(a,d,f(e)):g.push(e),g):g||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function a(){for(var a=this.offsetParent||document;a&&"html"===!a.nodeType.toLowerCase&&"static"===a.style.position;)a=a.offsetParent;return a||document}var b=this[0],a=a.apply(b),d=this.offset(),e=/^(?:body|html)$/i.test(a.nodeName)?{top:0,left:0}:c(a).offset();return d.top-=parseFloat(b.style.marginTop)||0,d.left-=parseFloat(b.style.marginLeft)||0,a.style&&(e.top+=parseFloat(a.style.borderTopWidth)||0,e.left+=parseFloat(a.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;ie;++e){var f=j(c,a,d);if(0===f)return c;var g=i(c,a,d)-b;c-=g/f}return c}function l(){for(var b=0;t>b;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g;while(Math.abs(f)>r&&++h=q?k(b,h):0==i?h:m(b,c,c+u)}function o(){y=!0,(a!=c||d!=e)&&l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;4>w;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function j(a,b){var c=a;return p.isString(a)?t.Easings[a]||(c=!1):c=p.isArray(a)&&1===a.length?h.apply(null,a):p.isArray(a)&&2===a.length?u.apply(null,a.concat([b])):p.isArray(a)&&4===a.length?i.apply(null,a):!1,c===!1&&(c=t.Easings[t.defaults.easing]?t.defaults.easing:s),c}function k(a){if(a){var b=(new Date).getTime(),c=t.State.calls.length;c>1e4&&(t.State.calls=e(t.State.calls));for(var f=0;c>f;f++)if(t.State.calls[f]){var h=t.State.calls[f],i=h[0],j=h[2],n=h[3],o=!!n,q=null;n||(n=t.State.calls[f][3]=b-16);for(var r=Math.min((b-n)/j.duration,1),s=0,u=i.length;u>s;s++){var w=i[s],y=w.element;if(g(y)){var z=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var A=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];m.each(A,function(a,b){v.setPropertyValue(y,"display",b)})}v.setPropertyValue(y,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&v.setPropertyValue(y,"visibility",j.visibility);for(var B in w)if("element"!==B){var C,D=w[B],E=p.isString(D.easing)?t.Easings[D.easing]:D.easing;if(1===r)C=D.endValue;else{var F=D.endValue-D.startValue;if(C=D.startValue+F*E(r,j,F),!o&&C===D.currentValue)continue}if(D.currentValue=C,"tween"===B)q=C;else{if(v.Hooks.registered[B]){var G=v.Hooks.getRoot(B),H=g(y).rootPropertyValueCache[G];H&&(D.rootPropertyValue=H)}var I=v.setPropertyValue(y,B,D.currentValue+(0===parseFloat(C)?"":D.unitType),D.rootPropertyValue,D.scrollData);v.Hooks.registered[B]&&(g(y).rootPropertyValueCache[G]=v.Normalizations.registered[G]?v.Normalizations.registered[G]("extract",null,I[1]):I[1]),"transform"===I[0]&&(z=!0)}}j.mobileHA&&g(y).transformCache.translate3d===d&&(g(y).transformCache.translate3d="(0px, 0px, 0px)",z=!0),z&&v.flushTransformCache(y)}}j.display!==d&&"none"!==j.display&&(t.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(t.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],r,Math.max(0,n+j.duration-b),n,q),1===r&&l(f)}}t.State.isTicking&&x(k)}function l(a,b){if(!t.State.calls[a])return!1;for(var c=t.State.calls[a][0],e=t.State.calls[a][1],f=t.State.calls[a][2],h=t.State.calls[a][4],i=!1,j=0,k=c.length;k>j;j++){var l=c[j].element;if(b||f.loop||("none"===f.display&&v.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&v.setPropertyValue(l,"visibility",f.visibility)),f.loop!==!0&&(m.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(m.queue(l)[1]))&&g(l)){g(l).isAnimating=!1,g(l).rootPropertyValueCache={};var n=!1;m.each(v.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=g(l).transformCache[b];g(l).transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete g(l).transformCache[b])}),f.mobileHA&&(n=!0,delete g(l).transformCache.translate3d),n&&v.flushTransformCache(l),v.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(o){setTimeout(function(){throw o},1)}h&&f.loop!==!0&&h(e),g(l)&&f.loop===!0&&!b&&(m.each(g(l).tweensContainer,function(a,b){/^rotate/.test(a)&&360===parseFloat(b.endValue)&&(b.endValue=0,b.startValue=360),/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),t(l,"reverse",{loop:!0,delay:f.delay})),f.queue!==!1&&m.dequeue(l,f.queue)}t.State.calls[a]=!1;for(var p=0,q=t.State.calls.length;q>p;p++)if(t.State.calls[p]!==!1){i=!0;break}i===!1&&(t.State.isTicking=!1,delete t.State.calls,t.State.calls=[])}var m,n=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="",b.getElementsByTagName("span").length)return b=null,a}return d}(),o=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),p={isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isNodeList:function(a){return"object"==typeof a&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(a))&&a.length!==d&&(0===a.length||"object"==typeof a[0]&&a[0].nodeType>0)},isWrapped:function(a){return a&&(a.jquery||b.Zepto&&b.Zepto.zepto.isZ(a))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)return!1;return!0}},q=!1;if(a.fn&&a.fn.jquery?(m=a,q=!0):m=b.Velocity.Utilities,8>=n&&!q)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(7>=n)return void(jQuery.fn.velocity=jQuery.fn.animate);var r=400,s="swing",t={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:m,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:r,easing:s,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(a){m.data(a,"velocity",{isSVG:p.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};b.pageYOffset!==d?(t.State.scrollAnchor=b,t.State.scrollPropertyLeft="pageXOffset",t.State.scrollPropertyTop="pageYOffset"):(t.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,t.State.scrollPropertyLeft="scrollLeft",t.State.scrollPropertyTop="scrollTop");var u=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0,l=1e-4,m=.016;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*m):g=m;h=c(h||i,g),j.push(1+h.x),k+=16,Math.abs(h.x)>l&&Math.abs(h.v)>l;);return f?function(a){return j[a*(j.length-1)|0]}:k}}();t.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},m.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){t.Easings[b[0]]=i.apply(null,b[1])});var v=t.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"]},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a=n)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":return c;case"inject":return c}}},register:function(){9>=n||t.State.isGingerbread||(v.Lists.transformsBase=v.Lists.transformsBase.concat(v.Lists.transforms3D));for(var a=0;ae&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":f=!/(deg|\d)$/i.test(e);break;case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[b]="("+e+")"),g(c).transformCache[b]}}}();for(var a=0;a=n||3!==f.split(" ").length||(f+=" 1"),f;case"inject":return 8>=n?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(8>=n?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")"}}}()}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(n||t.State.isAndroid&&!t.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(t.State.prefixMatches[a])return[t.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;d>c;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),p.isString(t.State.prefixElement.style[e]))return t.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return 0==a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){a.classList?a.classList.add(b):a.className+=(a.className.length?" ":"")+b},removeClass:function(a,b){a.classList?a.classList.remove(b):a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ")}},getPropertyValue:function(a,c,e,f){function h(a,c){function e(){j&&v.setPropertyValue(a,"display","none")}var i=0;if(8>=n)i=m.css(a,c);else{var j=!1;if(/^(width|height)$/.test(c)&&0===v.getPropertyValue(a,"display")&&(j=!0,v.setPropertyValue(a,"display",v.Values.getDisplayType(a))),!f){if("height"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(v.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(v.getPropertyValue(a,"paddingBottom"))||0);return e(),k}if("width"===c&&"border-box"!==v.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(v.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(v.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(v.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(v.getPropertyValue(a,"paddingRight"))||0);return e(),l}}var o;o=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),i=9===n&&"filter"===c?o.getPropertyValue(c):o[c],(""===i||null===i)&&(i=a.style[c]),e()}if("auto"===i&&/^(top|right|bottom|left)$/i.test(c)){var p=h(a,"position");("fixed"===p||"absolute"===p&&/top|left/i.test(c))&&(i=m(a).position()[c]+"px")}return i}var i;if(v.Hooks.registered[c]){var j=c,k=v.Hooks.getRoot(j);e===d&&(e=v.getPropertyValue(a,v.Names.prefixCheck(k)[0])),v.Normalizations.registered[k]&&(e=v.Normalizations.registered[k]("extract",a,e)),i=v.Hooks.extractValue(j,e)}else if(v.Normalizations.registered[c]){var l,o;l=v.Normalizations.registered[c]("name",a),"transform"!==l&&(o=h(a,v.Names.prefixCheck(l)[0]),v.Values.isCSSNullValue(o)&&v.Hooks.templates[c]&&(o=v.Hooks.templates[c][1])),i=v.Normalizations.registered[c]("extract",a,o)}if(!/^[\d-]/.test(i))if(g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(p){i=0}else i=a.getAttribute(c);else i=h(a,v.Names.prefixCheck(c)[0]);return v.Values.isCSSNullValue(i)&&(i=0),t.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(v.Normalizations.registered[c]&&"transform"===v.Normalizations.registered[c]("name",a))v.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(v.Hooks.registered[c]){var i=c,j=v.Hooks.getRoot(c);e=e||v.getPropertyValue(a,j),d=v.Hooks.injectValue(i,d,e),c=j}if(v.Normalizations.registered[c]&&(d=v.Normalizations.registered[c]("inject",a,d),c=v.Normalizations.registered[c]("name",a)),h=v.Names.prefixCheck(c)[0],8>=n)try{a.style[h]=d}catch(k){t.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else g(a)&&g(a).isSVG&&v.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d;t.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){function b(b){return parseFloat(v.getPropertyValue(a,b))}var c="";if((n||t.State.isAndroid&&!t.State.isChrome)&&g(a).isSVG){var d={translate:[b("translateX"),b("translateY")],skewX:[b("skewX")],skewY:[b("skewY")],scale:1!==b("scale")?[b("scale"),b("scale")]:[b("scaleX"),b("scaleY")],rotate:[b("rotateZ"),0,0]};m.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),d[a]&&(c+=a+"("+d[a].join(" ")+") ",delete d[a])})}else{var e,f;m.each(g(a).transformCache,function(b){return e=g(a).transformCache[b],"transformPerspective"===b?(f=e,!0):(9===n&&"rotateZ"===b&&(b="rotate"),void(c+=b+e+" "))}),f&&(c="perspective"+f+" "+c)}v.setPropertyValue(a,"transform",c)}};v.Hooks.register(),v.Normalizations.register(),t.hook=function(a,b,c){var e=d;return a=f(a),m.each(a,function(a,f){if(g(f)===d&&t.init(f),c===d)e===d&&(e=t.CSS.getPropertyValue(f,b));else{var h=t.CSS.setPropertyValue(f,b,c);"transform"===h[0]&&t.CSS.flushTransformCache(f),e=h}}),e};var w=function(){function a(){return h?B.promise||null:i}function e(){function a(a){function l(a,b){var c=d,e=d,g=d;return p.isArray(a)?(c=a[0],!p.isArray(a[1])&&/^[\d-]/.test(a[1])||p.isFunction(a[1])||v.RegEx.isHex.test(a[1])?g=a[1]:(p.isString(a[1])&&!v.RegEx.isHex.test(a[1])||p.isArray(a[1]))&&(e=b?a[1]:j(a[1],h.duration),a[2]!==d&&(g=a[2]))):c=a,b||(e=e||h.easing),p.isFunction(c)&&(c=c.call(f,y,x)),p.isFunction(g)&&(g=g.call(f,y,x)),[c||0,e,g]}function n(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=v.Values.getUnitType(a)),[d,c]}function r(){var a={myParent:f.parentNode||c.body,position:v.getPropertyValue(f,"position"),fontSize:v.getPropertyValue(f,"fontSize")},d=a.position===I.lastPosition&&a.myParent===I.lastParent,e=a.fontSize===I.lastFontSize;I.lastParent=a.myParent,I.lastPosition=a.position,I.lastFontSize=a.fontSize;var h=100,i={};if(e&&d)i.emToPx=I.lastEmToPx,i.percentToPxWidth=I.lastPercentToPxWidth,i.percentToPxHeight=I.lastPercentToPxHeight;else{var j=g(f).isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");t.init(j),a.myParent.appendChild(j),m.each(["overflow","overflowX","overflowY"],function(a,b){t.CSS.setPropertyValue(j,b,"hidden")}),t.CSS.setPropertyValue(j,"position",a.position),t.CSS.setPropertyValue(j,"fontSize",a.fontSize),t.CSS.setPropertyValue(j,"boxSizing","content-box"),m.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){t.CSS.setPropertyValue(j,b,h+"%")}),t.CSS.setPropertyValue(j,"paddingLeft",h+"em"),i.percentToPxWidth=I.lastPercentToPxWidth=(parseFloat(v.getPropertyValue(j,"width",null,!0))||1)/h,i.percentToPxHeight=I.lastPercentToPxHeight=(parseFloat(v.getPropertyValue(j,"height",null,!0))||1)/h,i.emToPx=I.lastEmToPx=(parseFloat(v.getPropertyValue(j,"paddingLeft"))||1)/h,a.myParent.removeChild(j)}return null===I.remToPx&&(I.remToPx=parseFloat(v.getPropertyValue(c.body,"fontSize"))||16),null===I.vwToPx&&(I.vwToPx=parseFloat(b.innerWidth)/100,I.vhToPx=parseFloat(b.innerHeight)/100),i.remToPx=I.remToPx,i.vwToPx=I.vwToPx,i.vhToPx=I.vhToPx,t.debug>=1&&console.log("Unit ratios: "+JSON.stringify(i),f),i}if(h.begin&&0===y)try{h.begin.call(o,o)}catch(u){setTimeout(function(){throw u},1)}if("scroll"===C){var w,z,A,D=/^x$/i.test(h.axis)?"Left":"Top",E=parseFloat(h.offset)||0;h.container?p.isWrapped(h.container)||p.isNode(h.container)?(h.container=h.container[0]||h.container,w=h.container["scroll"+D],A=w+m(f).position()[D.toLowerCase()]+E):h.container=null:(w=t.State.scrollAnchor[t.State["scrollProperty"+D]],z=t.State.scrollAnchor[t.State["scrollProperty"+("Left"===D?"Top":"Left")]],A=m(f).offset()[D.toLowerCase()]+E),i={scroll:{rootPropertyValue:!1,startValue:w,currentValue:w,endValue:A,unitType:"",easing:h.easing,scrollData:{container:h.container,direction:D,alternateValue:z}},element:f},t.debug&&console.log("tweensContainer (scroll): ",i.scroll,f)}else if("reverse"===C){if(!g(f).tweensContainer)return void m.dequeue(f,h.queue);"none"===g(f).opts.display&&(g(f).opts.display="auto"),"hidden"===g(f).opts.visibility&&(g(f).opts.visibility="visible"),g(f).opts.loop=!1,g(f).opts.begin=null,g(f).opts.complete=null,s.easing||delete h.easing,s.duration||delete h.duration,h=m.extend({},g(f).opts,h);var F=m.extend(!0,{},g(f).tweensContainer);for(var G in F)if("element"!==G){var H=F[G].startValue;F[G].startValue=F[G].currentValue=F[G].endValue,F[G].endValue=H,p.isEmptyObject(s)||(F[G].easing=h.easing),t.debug&&console.log("reverse tweensContainer ("+G+"): "+JSON.stringify(F[G]),f)}i=F}else if("start"===C){var F;g(f).tweensContainer&&g(f).isAnimating===!0&&(F=g(f).tweensContainer),m.each(q,function(a,b){if(RegExp("^"+v.Lists.colors.join("$|^")+"$").test(a)){var c=l(b,!0),e=c[0],f=c[1],g=c[2];if(v.RegEx.isHex.test(e)){for(var h=["Red","Green","Blue"],i=v.Values.hexToRgb(e),j=g?v.Values.hexToRgb(g):d,k=0;kL;L++){var M={delay:E.delay,progress:E.progress};L===K-1&&(M.display=E.display,M.visibility=E.visibility,M.complete=E.complete),w(o,"reverse",M)}return a()}};t=m.extend(w,t),t.animate=w;var x=b.requestAnimationFrame||o;return t.State.isMobile||c.hidden===d||c.addEventListener("visibilitychange",function(){c.hidden?(x=function(a){return setTimeout(function(){a(!0)},16)},k()):x=b.requestAnimationFrame||o}),a.Velocity=t,a!==b&&(a.fn.velocity=w,a.fn.velocity.defaults=t.defaults),m.each(["Down","Up"],function(a,b){t.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j=i.begin,k=i.complete,l={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""},n={};i.display===d&&(i.display="Down"===b?"inline"===t.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){j&&j.call(g,g);for(var c in l){n[c]=a.style[c];var d=t.CSS.getPropertyValue(a,c);l[c]="Down"===b?[d,0]:[0,d]}n.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in n)a.style[b]=n[b];k&&k.call(g,g),h&&h.resolver(g)},t(a,l,i)}}),m.each(["In","Out"],function(a,b){t.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=m.extend({},c),j={opacity:"In"===b?1:0},k=i.complete;i.complete=e!==f-1?i.begin=null:function(){k&&k.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),t(this,j,i)}}),t}(window.jQuery||window.Zepto||window,window,document)})),!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(k(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function r(a){return a.trim().split(/\s+/g)}function s(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function v(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=na(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);var j=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}function C(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===ya||f.eventType===Aa)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function D(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ba&&(i>xa||h.velocity===d)){var j=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=ma(l.x)>ma(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function E(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:la(c/b),y:la(d/b)}}function G(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){return a===b?Ca:ma(a)>=ma(b)?a>0?Da:Ea:b>0?Fa:Ga}function I(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Ka);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function K(a,b){return J(b[1],b[0],La)-J(a[1],a[0],La)}function L(a,b){return I(b[0],b[1],La)/I(a[0],a[1],La)}function M(){this.evEl=Na,this.evWin=Oa,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}function N(){this.evEl=Ra,this.evWin=Sa,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function O(){this.evTarget=Ua,this.evWin=Va,this.started=!1,y.apply(this,arguments)}function P(a,b){var c=t(a.touches),d=t(a.changedTouches);return b&(Aa|Ba)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}function Q(){this.evTarget=Xa,this.targetIds={},y.apply(this,arguments)}function R(a,b){var c=t(a.touches),d=this.targetIds;if(b&(ya|za)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return p(a.target,i)}),b===ya)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Aa|Ba)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Ta={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Ua="touchstart",Va="touchstart touchmove touchend touchcancel";j(O,y,{handler:function(a){var b=Ta[a.type];if(b===ya&&(this.started=!0),this.started){var c=P.call(this,a,b);b&(Aa|Ba)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}});var Wa={touchstart:ya,touchmove:za,touchend:Aa,touchcancel:Ba},Xa="touchstart touchmove touchend touchcancel";j(Q,y,{handler:function(a){var b=Wa[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:ta,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){var d=c.pointerType==ta,e=c.pointerType==va;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Aa|Ba)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ya=v(ja.style,"touchAction"),Za=Ya!==d,$a="compute",_a="auto",ab="manipulation",bb="none",cb="pan-x",db="pan-y";T.prototype={set:function(a){a==$a&&(a=this.compute()),Za&&(this.manager.element.style[Ya]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){l(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),U(a.join(" "))},preventDefaults:function(a){if(!Za){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=q(d,bb),f=q(d,db),g=q(d,cb);return e||f&&c&Ha||g&&c&Ia?this.preventSrc(b):void 0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var eb=1,fb=2,gb=4,hb=8,ib=hb,jb=16,kb=32;V.prototype={defaults:{},set:function(a){return h(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=Y(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=Y(a,this);var b=s(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(c.options.event+(b?W(d):""),a)}var c=this,d=this.state;hb>d&&b(!0),b(),d>=hb&&b(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=kb)},canEmit:function(){for(var a=0;af?Da:Ea,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ca:0>g?Fa:Ga,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return Z.prototype.attrTest.call(this,a)&&(this.state&fb||!(this.state&fb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(aa,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_a]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Aa|Ba)&&!f)this.reset();else if(a.eventType&ya)this.reset(),this._timer=e(function(){this.state=ib,this.tryEmit()},b.time,this);else if(a.eventType&Aa)return ib;return kb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ib&&(a&&a.eventType&Aa?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=na(),this.manager.emit(this.options.event,this._input)))}}),j(ba,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fb)}}),j(ca,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Ha|Ia,pointers:1},getTouchAction:function(){return $.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Ha|Ia)?b=a.velocity:c&Ha?b=a.velocityX:c&Ia&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&ma(b)>this.options.velocity&&a.eventType&Aa},emit:function(a){var b=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(da,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ab]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance=0&&!d;)d=a[c[f]+"RequestAnimationFrame"],e=a[c[f]+"CancelRequestAnimationFrame"];d&&e||(d=function(a){var c=+Date.now(),d=Math.max(b+16,c);return setTimeout(function(){a(b=d)},d-c)},e=clearTimeout),a.requestAnimationFrame=d,a.cancelAnimationFrame=e}(window),Materialize.guid=function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}}(),Materialize.escapeHash=function(a){return a.replace(/(:|\.|\[|\]|,|=)/g,"\\$1")},Materialize.elementOrParentIsFixed=function(a){var b=$(a),c=b.add(b.parents()),d=!1;return c.each(function(){return"fixed"===$(this).css("position")?(d=!0,!1):void 0}),d};var Vel;Vel=jQuery?jQuery.Velocity:$?$.Velocity:Velocity,function(a){a.fn.collapsible=function(b){var c={accordion:void 0,onOpen:void 0,onClose:void 0};return b=a.extend(c,b),this.each(function(){function c(b){j=i.find("> li > .collapsible-header"),b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}),j.not(b).removeClass("active").parent().removeClass("active"),j.not(b).parent().children(".collapsible-body").stop(!0,!1).each(function(){a(this).is(":visible")&&a(this).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height",""),f(a(this).siblings(".collapsible-header"))}})})}function d(b){b.hasClass("active")?b.parent().addClass("active"):b.parent().removeClass("active"),b.parent().hasClass("active")?b.siblings(".collapsible-body").stop(!0,!1).slideDown({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}}):b.siblings(".collapsible-body").stop(!0,!1).slideUp({duration:350,easing:"easeOutQuart",queue:!1,complete:function(){a(this).css("height","")}})}function e(a){b.accordion||"accordion"===k||void 0===k?c(a):d(a),f(a)}function f(a){a.hasClass("active")?"function"==typeof b.onOpen&&b.onOpen.call(this,a.parent()):"function"==typeof b.onClose&&b.onClose.call(this,a.parent())}function g(a){var b=h(a);return b.length>0}function h(a){return a.closest("li > .collapsible-header")}var i=a(this),j=a(this).find("> li > .collapsible-header"),k=i.data("collapsible");i.off("click.collapse","> li > .collapsible-header"),j.off("click.collapse"),i.on("click.collapse","> li > .collapsible-header",function(b){var c=a(b.target);g(c)&&(c=h(c)),c.toggleClass("active"),e(c)}),b.accordion||"accordion"===k||void 0===k?e(j.filter(".active").first()):j.filter(".active").each(function(){e(a(this))})})},a(document).ready(function(){a(".collapsible").collapsible()})}(jQuery),function(a){a.fn.scrollTo=function(b){return a(this).scrollTop(a(this).scrollTop()-a(this).offset().top+a(b).offset().top),this},a.fn.dropdown=function(b){var c={inDuration:300,outDuration:225,constrain_width:!0,hover:!1,gutter:0,belowOrigin:!1,alignment:"left",stopPropagation:!1};return"open"===b?(this.each(function(){a(this).trigger("open")}),!1):"close"===b?(this.each(function(){a(this).trigger("close")}),!1):void this.each(function(){function d(){void 0!==g.data("induration")&&(h.inDuration=g.data("induration")),void 0!==g.data("outduration")&&(h.outDuration=g.data("outduration")),void 0!==g.data("constrainwidth")&&(h.constrain_width=g.data("constrainwidth")),void 0!==g.data("hover")&&(h.hover=g.data("hover")),void 0!==g.data("gutter")&&(h.gutter=g.data("gutter")),void 0!==g.data("beloworigin")&&(h.belowOrigin=g.data("beloworigin")),void 0!==g.data("alignment")&&(h.alignment=g.data("alignment")),void 0!==g.data("stoppropagation")&&(h.stopPropagation=g.data("stoppropagation"))}function e(b){"focus"===b&&(i=!0),d(),j.addClass("active"),g.addClass("active"),h.constrain_width===!0?j.css("width",g.outerWidth()):j.css("white-space","nowrap");var c=window.innerHeight,e=g.innerHeight(),f=g.offset().left,k=g.offset().top-a(window).scrollTop(),l=h.alignment,m=0,n=0,o=0;h.belowOrigin===!0&&(o=e);var p=0,q=0,r=g.parent();if(r.is("body")||(r[0].scrollHeight>r[0].clientHeight&&(p=r[0].scrollTop),r[0].scrollWidth>r[0].clientWidth&&(q=r[0].scrollLeft)),f+j.innerWidth()>a(window).width()?l="right":f-j.innerWidth()+g.innerWidth()<0&&(l="left"),k+j.innerHeight()>c)if(k+e-j.innerHeight()<0){var s=c-k-o;j.css("max-height",s)}else o||(o+=e),o-=j.innerHeight();if("left"===l)m=h.gutter,n=g.position().left+m;else if("right"===l){var t=g.position().left+g.outerWidth()-j.outerWidth();m=-h.gutter,n=t+m}j.css({position:"absolute",top:g.position().top+o+p,left:n+q}),j.stop(!0,!0).css("opacity",0).slideDown({queue:!1,duration:h.inDuration,easing:"easeOutCubic",complete:function(){a(this).css("height","")}}).animate({opacity:1},{queue:!1,duration:h.inDuration,easing:"easeOutSine"})}function f(){i=!1,j.fadeOut(h.outDuration),j.removeClass("active"),g.removeClass("active"),setTimeout(function(){j.css("max-height","")},h.outDuration)}var g=a(this),h=a.extend({},c,b),i=!1,j=a("#"+g.attr("data-activates"));if(d(),g.after(j),h.hover){var k=!1;g.unbind("click."+g.attr("id")),g.on("mouseenter",function(a){k===!1&&(e(),k=!0)}),g.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-content").is(j)||(j.stop(!0,!0),f(),k=!1)}),j.on("mouseleave",function(b){var c=b.toElement||b.relatedTarget;a(c).closest(".dropdown-button").is(g)||(j.stop(!0,!0),f(),k=!1)})}else g.unbind("click."+g.attr("id")),g.bind("click."+g.attr("id"),function(b){i||(g[0]!=b.currentTarget||g.hasClass("active")||0!==a(b.target).closest(".dropdown-content").length?g.hasClass("active")&&(f(),a(document).unbind("click."+j.attr("id")+" touchstart."+j.attr("id"))):(b.preventDefault(),h.stopPropagation&&b.stopPropagation(),e("click")),j.hasClass("active")&&a(document).bind("click."+j.attr("id")+" touchstart."+j.attr("id"),function(b){j.is(b.target)||g.is(b.target)||g.find(b.target).length||(f(),a(document).unbind("click."+j.attr("id")+" touchstart."+j.attr("id")))}))});g.on("open",function(a,b){e(b)}),g.on("close",f)})},a(document).ready(function(){a(".dropdown-button").dropdown()})}(jQuery),function(a){var b=0,c=0,d=function(){return c++,"materialize-modal-overlay-"+c},e={init:function(c){var e={opacity:.5,in_duration:350,out_duration:250,ready:void 0,complete:void 0,dismissible:!0,starting_top:"4%",ending_top:"10%"};return c=a.extend(e,c),this.each(function(){var e=a(this),f=a(this).attr("id")||"#"+a(this).data("target"),g=function(){var d=e.data("overlay-id"),f=a("#"+d);e.removeClass("open"),a("body").css({overflow:"",width:""}),e.find(".modal-close").off("click.close"),a(document).off("keyup.modal"+d),f.velocity({opacity:0},{duration:c.out_duration,queue:!1,ease:"easeOutQuart"});var g={
+duration:c.out_duration,queue:!1,ease:"easeOutCubic",complete:function(){a(this).css({display:"none"}),"function"==typeof c.complete&&c.complete.call(this,e),f.remove(),b--}};e.hasClass("bottom-sheet")?e.velocity({bottom:"-100%",opacity:0},g):e.velocity({top:c.starting_top,opacity:0,scaleX:.7},g)},h=function(f){var h=a("body"),i=h.innerWidth();if(h.css("overflow","hidden"),h.width(i),!e.hasClass("open")){var j=d(),k=a('');lStack=++b,k.attr("id",j).css("z-index",1e3+2*lStack),e.data("overlay-id",j).css("z-index",1e3+2*lStack+1),e.addClass("open"),a("body").append(k),c.dismissible&&(k.click(function(){g()}),a(document).on("keyup.modal"+j,function(a){27===a.keyCode&&g()})),e.find(".modal-close").on("click.close",function(a){g()}),k.css({display:"block",opacity:0}),e.css({display:"block",opacity:0}),k.velocity({opacity:c.opacity},{duration:c.in_duration,queue:!1,ease:"easeOutCubic"}),e.data("associated-overlay",k[0]);var l={duration:c.in_duration,queue:!1,ease:"easeOutCubic",complete:function(){"function"==typeof c.ready&&c.ready.call(this,e,f)}};e.hasClass("bottom-sheet")?e.velocity({bottom:"0",opacity:1},l):(a.Velocity.hook(e,"scaleX",.7),e.css({top:c.starting_top}),e.velocity({top:c.ending_top,opacity:1,scaleX:"1"},l))}};a(document).off("click.modalTrigger",'a[href="#'+f+'"], [data-target="'+f+'"]'),a(this).off("openModal"),a(this).off("closeModal"),a(document).on("click.modalTrigger",'a[href="#'+f+'"], [data-target="'+f+'"]',function(b){c.starting_top=(a(this).offset().top-a(window).scrollTop())/1.15,h(a(this)),b.preventDefault()}),a(this).on("openModal",function(){a(this).attr("href")||"#"+a(this).data("target");h()}),a(this).on("closeModal",function(){g()})})},open:function(){a(this).trigger("openModal")},close:function(){a(this).trigger("closeModal")}};a.fn.modal=function(b){return e[b]?e[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist on jQuery.modal"):e.init.apply(this,arguments)}}(jQuery),function(a){a.fn.materialbox=function(){return this.each(function(){function b(){f=!1;var b=i.parent(".material-placeholder"),d=(window.innerWidth,window.innerHeight,i.data("width")),g=i.data("height");i.velocity("stop",!0),a("#materialbox-overlay").velocity("stop",!0),a(".materialbox-caption").velocity("stop",!0),a("#materialbox-overlay").velocity({opacity:0},{duration:h,queue:!1,easing:"easeOutQuad",complete:function(){e=!1,a(this).remove()}}),i.velocity({width:d,height:g,left:0,top:0},{duration:h,queue:!1,easing:"easeOutQuad"}),a(".materialbox-caption").velocity({opacity:0},{duration:h,queue:!1,easing:"easeOutQuad",complete:function(){b.css({height:"",width:"",position:"",top:"",left:""}),i.css({height:"",top:"",left:"",width:"","max-width":"",position:"","z-index":""}),i.removeClass("active"),f=!0,a(this).remove(),c&&c.css("overflow","")}})}if(!a(this).hasClass("initialized")){a(this).addClass("initialized");var c,d,e=!1,f=!0,g=275,h=200,i=a(this),j=a("").addClass("material-placeholder");i.wrap(j),i.on("click",function(){var h=i.parent(".material-placeholder"),j=window.innerWidth,k=window.innerHeight,l=i.width(),m=i.height();if(f===!1)return b(),!1;if(e&&f===!0)return b(),!1;f=!1,i.addClass("active"),e=!0,h.css({width:h[0].getBoundingClientRect().width,height:h[0].getBoundingClientRect().height,position:"relative",top:0,left:0}),c=void 0,d=h[0].parentNode;for(;null!==d&&!a(d).is(document);){var n=a(d);"visible"!==n.css("overflow")&&(n.css("overflow","visible"),c=void 0===c?n:c.add(n)),d=d.parentNode}i.css({position:"absolute","z-index":1e3}).data("width",l).data("height",m);var o=a('').css({opacity:0}).click(function(){f===!0&&b()});if(i.before(o),o.velocity({opacity:1},{duration:g,queue:!1,easing:"easeOutQuad"}),""!==i.data("caption")){var p=a('');p.text(i.data("caption")),a("body").append(p),p.css({display:"inline"}),p.velocity({opacity:1},{duration:g,queue:!1,easing:"easeOutQuad"})}var q=0,r=l/j,s=m/k,t=0,u=0;r>s?(q=m/l,t=.9*j,u=.9*j*q):(q=l/m,t=.9*k*q,u=.9*k),i.hasClass("responsive-img")?i.velocity({"max-width":t,width:l},{duration:0,queue:!1,complete:function(){i.css({left:0,top:0}).velocity({height:u,width:t,left:a(document).scrollLeft()+j/2-i.parent(".material-placeholder").offset().left-t/2,top:a(document).scrollTop()+k/2-i.parent(".material-placeholder").offset().top-u/2},{duration:g,queue:!1,easing:"easeOutQuad",complete:function(){f=!0}})}}):i.css("left",0).css("top",0).velocity({height:u,width:t,left:a(document).scrollLeft()+j/2-i.parent(".material-placeholder").offset().left-t/2,top:a(document).scrollTop()+k/2-i.parent(".material-placeholder").offset().top-u/2},{duration:g,queue:!1,easing:"easeOutQuad",complete:function(){f=!0}})}),a(window).scroll(function(){e&&b()}),a(document).keyup(function(a){27===a.keyCode&&f===!0&&e&&b()})}})},a(document).ready(function(){a(".materialboxed").materialbox()})}(jQuery),function(a){a.fn.parallax=function(){var b=a(window).width();return this.each(function(c){function d(c){var d;d=601>b?e.height()>0?e.height():e.children("img").height():e.height()>0?e.height():500;var f=e.children("img").first(),g=f.height(),h=g-d,i=e.offset().top+d,j=e.offset().top,k=a(window).scrollTop(),l=window.innerHeight,m=k+l,n=(m-j)/(d+l),o=Math.round(h*n);c&&f.css("display","block"),i>k&&k+l>j&&f.css("transform","translate3D(-50%,"+o+"px, 0)")}var e=a(this);e.addClass("parallax"),e.children("img").one("load",function(){d(!0)}).each(function(){this.complete&&a(this).trigger("load")}),a(window).scroll(function(){b=a(window).width(),d(!1)}),a(window).resize(function(){b=a(window).width(),d(!1)})})}}(jQuery),function(a){var b={init:function(b){var c={onShow:null};return b=a.extend(c,b),this.each(function(){var c,d,e=a(this),f=(a(window).width(),e.find("li.tab a")),g=e.width(),h=Math.max(g,e[0].scrollWidth)/f.length,i=0,j=function(a){return g-a.position().left-a.outerWidth()-e.scrollLeft()},k=function(a){return a.position().left+e.scrollLeft()};c=a(f.filter('[href="'+location.hash+'"]')),0===c.length&&(c=a(this).find("li.tab a.active").first()),0===c.length&&(c=a(this).find("li.tab a").first()),c.addClass("active"),i=f.index(c),0>i&&(i=0),void 0!==c[0]&&(d=a(c[0].hash)),e.append('');var l=e.find(".indicator");e.is(":visible")&&setTimeout(function(){l.css({right:j(c)}),l.css({left:k(c)})},0),a(window).resize(function(){g=e.width(),h=Math.max(g,e[0].scrollWidth)/f.length,0>i&&(i=0),0!==h&&0!==g&&(l.css({right:j(c)}),l.css({left:k(c)}))}),f.not(c).each(function(){a(Materialize.escapeHash(this.hash)).hide()}),e.on("click","a",function(m){if(a(this).parent().hasClass("disabled"))return void m.preventDefault();if(!a(this).attr("target")){g=e.width(),h=Math.max(g,e[0].scrollWidth)/f.length,c.removeClass("active"),void 0!==d&&d.hide(),c=a(this),d=a(Materialize.escapeHash(this.hash)),f=e.find("li.tab a");c.position();c.addClass("active");var n=i;i=f.index(a(this)),0>i&&(i=0),void 0!==d&&(d.show(),"function"==typeof b.onShow&&b.onShow.call(this,d)),i-n>=0?(l.velocity({right:j(c)},{duration:300,queue:!1,easing:"easeOutQuad"}),l.velocity({left:k(c)},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})):(l.velocity({left:k(c)},{duration:300,queue:!1,easing:"easeOutQuad"}),l.velocity({right:j(c)},{duration:300,queue:!1,easing:"easeOutQuad",delay:90})),m.preventDefault()}})})},select_tab:function(a){this.find('a[href="#'+a+'"]').trigger("click")}};a.fn.tabs=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tabs"):b.init.apply(this,arguments)},a(document).ready(function(){a("ul.tabs").tabs()})}(jQuery),function(a){a.fn.tooltip=function(c){var d=5,e={delay:350,tooltip:"",position:"bottom",html:!1};return"remove"===c?(this.each(function(){a("#"+a(this).attr("data-tooltip-id")).remove(),a(this).off("mouseenter.tooltip mouseleave.tooltip")}),!1):(c=a.extend(e,c),this.each(function(){var e=Materialize.guid(),f=a(this);f.attr("data-tooltip-id")&&a("#"+f.attr("data-tooltip-id")).remove(),f.attr("data-tooltip-id",e);var g,h,i,j,k,l,m=function(){g=f.attr("data-html")?"true"===f.attr("data-html"):c.html,h=f.attr("data-delay"),h=void 0===h||""===h?c.delay:h,i=f.attr("data-position"),i=void 0===i||""===i?c.position:i,j=f.attr("data-tooltip"),j=void 0===j||""===j?c.tooltip:j};m();var n=function(){var b=a('');return j=g?a("").html(j):a("").text(j),b.append(j).appendTo(a("body")).attr("id",e),l=a(''),l.appendTo(b),b};k=n(),f.off("mouseenter.tooltip mouseleave.tooltip");var o,p=!1;f.on({"mouseenter.tooltip":function(a){var c=function(){m(),p=!0,k.velocity("stop"),l.velocity("stop"),k.css({display:"block",left:"0px",top:"0px"});var a,c,e,g=f.outerWidth(),h=f.outerHeight(),j=k.outerHeight(),n=k.outerWidth(),o="0px",q="0px",r=8,s=8;"top"===i?(a=f.offset().top-j-d,c=f.offset().left+g/2-n/2,e=b(c,a,n,j),o="-10px",l.css({bottom:0,left:0,borderRadius:"14px 14px 0 0",transformOrigin:"50% 100%",marginTop:j,marginLeft:n/2-l.width()/2})):"left"===i?(a=f.offset().top+h/2-j/2,c=f.offset().left-n-d,e=b(c,a,n,j),q="-10px",l.css({top:"-7px",right:0,width:"14px",height:"14px",borderRadius:"14px 0 0 14px",transformOrigin:"95% 50%",marginTop:j/2,marginLeft:n})):"right"===i?(a=f.offset().top+h/2-j/2,c=f.offset().left+g+d,e=b(c,a,n,j),q="+10px",l.css({top:"-7px",left:0,width:"14px",height:"14px",borderRadius:"0 14px 14px 0",transformOrigin:"5% 50%",marginTop:j/2,marginLeft:"0px"})):(a=f.offset().top+f.outerHeight()+d,c=f.offset().left+g/2-n/2,e=b(c,a,n,j),o="+10px",l.css({top:0,left:0,marginLeft:n/2-l.width()/2})),k.css({top:e.y,left:e.x}),r=Math.SQRT2*n/parseInt(l.css("width")),s=Math.SQRT2*j/parseInt(l.css("height")),k.velocity({marginTop:o,marginLeft:q},{duration:350,queue:!1}).velocity({opacity:1},{duration:300,delay:50,queue:!1}),l.css({display:"block"}).velocity({opacity:1},{duration:55,delay:0,queue:!1}).velocity({scaleX:r,scaleY:s},{duration:300,delay:0,queue:!1,easing:"easeInOutQuad"})};o=setTimeout(c,h)},"mouseleave.tooltip":function(){p=!1,clearTimeout(o),setTimeout(function(){p!==!0&&(k.velocity({opacity:0,marginTop:0,marginLeft:0},{duration:225,queue:!1}),l.velocity({opacity:0,scaleX:1,scaleY:1},{duration:225,queue:!1,complete:function(){l.css("display","none"),k.css("display","none"),p=!1}}))},225)}})}))};var b=function(b,c,d,e){var f=b,g=c;return 0>f?f=4:f+d>window.innerWidth&&(f-=f+d-window.innerWidth),0>g?g=4:g+e>window.innerHeight+a(window).scrollTop&&(g-=g+e-window.innerHeight),{x:f,y:g}};a(document).ready(function(){a(".tooltipped").tooltip()})}(jQuery),function(a){"use strict";function b(a){return null!==a&&a===a.window}function c(a){return b(a)?a:9===a.nodeType&&a.defaultView}function d(a){var b,d,e={top:0,left:0},f=a&&a.ownerDocument;return b=f.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(e=a.getBoundingClientRect()),d=c(f),{top:e.top+d.pageYOffset-b.clientTop,left:e.left+d.pageXOffset-b.clientLeft}}function e(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b+=c+":"+a[c]+";");return b}function f(a){if(k.allowEvent(a)===!1)return null;for(var b=null,c=a.target||a.srcElement;null!==c.parentElement;){if(!(c instanceof SVGElement||-1===c.className.indexOf("waves-effect"))){b=c;break}if(c.classList.contains("waves-effect")){b=c;break}c=c.parentElement}return b}function g(b){var c=f(b);null!==c&&(j.show(b,c),"ontouchstart"in a&&(c.addEventListener("touchend",j.hide,!1),c.addEventListener("touchcancel",j.hide,!1)),c.addEventListener("mouseup",j.hide,!1),c.addEventListener("mouseleave",j.hide,!1))}var h=h||{},i=document.querySelectorAll.bind(document),j={duration:750,show:function(a,b){if(2===a.button)return!1;var c=b||this,f=document.createElement("div");f.className="waves-ripple",c.appendChild(f);var g=d(c),h=a.pageY-g.top,i=a.pageX-g.left,k="scale("+c.clientWidth/100*10+")";"touches"in a&&(h=a.touches[0].pageY-g.top,i=a.touches[0].pageX-g.left),f.setAttribute("data-hold",Date.now()),f.setAttribute("data-scale",k),f.setAttribute("data-x",i),f.setAttribute("data-y",h);var l={top:h+"px",left:i+"px"};f.className=f.className+" waves-notransition",f.setAttribute("style",e(l)),f.className=f.className.replace("waves-notransition",""),l["-webkit-transform"]=k,l["-moz-transform"]=k,l["-ms-transform"]=k,l["-o-transform"]=k,l.transform=k,l.opacity="1",l["-webkit-transition-duration"]=j.duration+"ms",l["-moz-transition-duration"]=j.duration+"ms",l["-o-transition-duration"]=j.duration+"ms",l["transition-duration"]=j.duration+"ms",l["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",l["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f.setAttribute("style",e(l))},hide:function(a){k.touchup(a);var b=this,c=(1.4*b.clientWidth,null),d=b.getElementsByClassName("waves-ripple");if(!(d.length>0))return!1;c=d[d.length-1];var f=c.getAttribute("data-x"),g=c.getAttribute("data-y"),h=c.getAttribute("data-scale"),i=Date.now()-Number(c.getAttribute("data-hold")),l=350-i;0>l&&(l=0),setTimeout(function(){var a={top:g+"px",left:f+"px",opacity:"0","-webkit-transition-duration":j.duration+"ms","-moz-transition-duration":j.duration+"ms","-o-transition-duration":j.duration+"ms","transition-duration":j.duration+"ms","-webkit-transform":h,"-moz-transform":h,"-ms-transform":h,"-o-transform":h,transform:h};c.setAttribute("style",e(a)),setTimeout(function(){try{b.removeChild(c)}catch(a){return!1}},j.duration)},l)},wrapInput:function(a){for(var b=0;b0&&(k.touches-=1)},500):"mousedown"===a.type&&k.touches>0&&(b=!1),b},touchup:function(a){k.allowEvent(a)}};h.displayEffect=function(b){b=b||{},"duration"in b&&(j.duration=b.duration),j.wrapInput(i(".waves-effect")),"ontouchstart"in a&&document.body.addEventListener("touchstart",g,!1),document.body.addEventListener("mousedown",g,!1)},h.attach=function(b){"input"===b.tagName.toLowerCase()&&(j.wrapInput([b]),b=b.parentElement),"ontouchstart"in a&&b.addEventListener("touchstart",g,!1),b.addEventListener("mousedown",g,!1)},a.Waves=h,document.addEventListener("DOMContentLoaded",function(){h.displayEffect()},!1)}(window),Materialize.toast=function(a,b,c,d){function e(a){var b=document.createElement("div");if(b.classList.add("toast"),c)for(var e=c.split(" "),f=0,g=e.length;g>f;f++)b.classList.add(e[f]);("object"==typeof HTMLElement?a instanceof HTMLElement:a&&"object"==typeof a&&null!==a&&1===a.nodeType&&"string"==typeof a.nodeName)?b.appendChild(a):a instanceof jQuery?b.appendChild(a[0]):b.innerHTML=a;var h=new Hammer(b,{prevent_default:!1});return h.on("pan",function(a){var c=a.deltaX,d=80;b.classList.contains("panning")||b.classList.add("panning");var e=1-Math.abs(c/d);0>e&&(e=0),Vel(b,{left:c,opacity:e},{duration:50,queue:!1,easing:"easeOutQuad"})}),h.on("panend",function(a){var c=a.deltaX,e=80;Math.abs(c)>e?Vel(b,{marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),b.parentNode.removeChild(b)}}):(b.classList.remove("panning"),Vel(b,{left:0,opacity:1},{duration:300,easing:"easeOutExpo",queue:!1}))}),b}c=c||"";var f=document.getElementById("toast-container");null===f&&(f=document.createElement("div"),f.id="toast-container",document.body.appendChild(f));var g=e(a);a&&f.appendChild(g),g.style.top="35px",g.style.opacity=0,Vel(g,{top:"0px",opacity:1},{duration:300,easing:"easeOutCubic",queue:!1});var h,i=b;null!=i&&(h=setInterval(function(){null===g.parentNode&&window.clearInterval(h),g.classList.contains("panning")||(i-=20),0>=i&&(Vel(g,{opacity:0,marginTop:"-40px"},{duration:375,easing:"easeOutExpo",queue:!1,complete:function(){"function"==typeof d&&d(),this[0].parentNode.removeChild(this[0])}}),window.clearInterval(h))},20))},function(a){var b={init:function(b){var c={menuWidth:300,edge:"left",closeOnClick:!1,draggable:!0};b=a.extend(c,b),a(this).each(function(){var c=a(this),d=a("#"+c.attr("data-activates"));300!=b.menuWidth&&d.css("width",b.menuWidth);var e;b.draggable?(e=a('').attr("data-sidenav",c.attr("data-activates")),a("body").append(e)):e=a(),"left"==b.edge?(d.css("transform","translateX(-100%)"),e.css({left:0})):(d.addClass("right-aligned").css("transform","translateX(100%)"),e.css({right:0})),d.hasClass("fixed")&&window.innerWidth>992&&d.css("transform","translateX(0)"),d.hasClass("fixed")&&a(window).resize(function(){window.innerWidth>992?0!==a("#sidenav-overlay").length&&h?f(!0):d.css("transform","translateX(0%)"):h===!1&&("left"===b.edge?d.css("transform","translateX(-100%)"):d.css("transform","translateX(100%)"))}),b.closeOnClick===!0&&d.on("click.itemclick","a:not(.collapsible-header)",function(){f()});var f=function(c){g=!1,h=!1,a("body").css({overflow:"",width:""}),a("#sidenav-overlay").velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),"left"===b.edge?(e.css({width:"",right:"",left:"0"}),d.velocity({translateX:"-100%"},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(d.removeAttr("style"),d.css("width",b.menuWidth))}})):(e.css({width:"",right:"0",left:""}),d.velocity({translateX:"100%"},{duration:200,queue:!1,easing:"easeOutCubic",complete:function(){c===!0&&(d.removeAttr("style"),d.css("width",b.menuWidth))}}))},g=!1,h=!1;b.draggable&&(e.on("click",function(){h&&f()}),e.hammer({prevent_default:!1}).bind("pan",function(c){if("touch"==c.gesture.pointerType){var e=(c.gesture.direction,c.gesture.center.x),g=(c.gesture.center.y,c.gesture.velocityX,a("body")),i=a("#sidenav-overlay"),j=g.innerWidth();if(g.css("overflow","hidden"),g.width(j),0===i.length&&(i=a(''),i.css("opacity",0).click(function(){f()}),a("body").append(i)),"left"===b.edge&&(e>b.menuWidth?e=b.menuWidth:0>e&&(e=0)),"left"===b.edge)e=b.menuWidth/2&&(h=!0),d.css("transform","translateX("+(e-b.menuWidth)+"px)");else{e=window.innerWidth-b.menuWidth/2&&(h=!1);var k=e-b.menuWidth/2;0>k&&(k=0),d.css("transform","translateX("+k+"px)")}var l;"left"===b.edge?(l=e/b.menuWidth,i.velocity({opacity:l},{duration:10,queue:!1,easing:"easeOutQuad"})):(l=Math.abs((e-window.innerWidth)/b.menuWidth),i.velocity({opacity:l},{duration:10,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(c){if("touch"==c.gesture.pointerType){var f=a(''),i=c.gesture.velocityX,j=c.gesture.center.x,k=j-b.menuWidth,l=j-b.menuWidth/2;k>0&&(k=0),0>l&&(l=0),g=!1,"left"===b.edge?h&&.3>=i||-.5>i?(0!==k&&d.velocity({translateX:[0,k]},{duration:300,queue:!1,easing:"easeOutQuad"}),f.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),e.css({width:"50%",right:0,left:""}),h=!0):(!h||i>.3)&&(a("body").css({overflow:"",width:""}),d.velocity({translateX:[-1*b.menuWidth-10,k]},{duration:200,queue:!1,easing:"easeOutQuad"}),f.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),e.css({width:"10px",right:"",left:0})):h&&i>=-.3||i>.5?(0!==l&&d.velocity({translateX:[0,l]},{duration:300,queue:!1,easing:"easeOutQuad"}),f.velocity({opacity:1},{duration:50,queue:!1,easing:"easeOutQuad"}),e.css({width:"50%",right:"",left:0}),h=!0):(!h||-.3>i)&&(a("body").css({overflow:"",width:""}),d.velocity({translateX:[b.menuWidth+10,l]},{duration:200,queue:!1,easing:"easeOutQuad"}),f.velocity({opacity:0},{duration:200,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}}),e.css({width:"10px",right:0,left:""}))}})),c.click(function(){if(h===!0)h=!1,g=!1,f();else{var c=a("body"),i=a(''),j=c.innerWidth();c.css("overflow","hidden"),c.width(j),a("body").append(e),"left"===b.edge?(e.css({width:"50%",right:0,left:""}),d.velocity({translateX:[0,-1*b.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})):(e.css({width:"50%",right:"",left:0}),d.velocity({translateX:[0,b.menuWidth]},{duration:300,queue:!1,easing:"easeOutQuad"})),i.css("opacity",0).click(function(){h=!1,g=!1,f(),i.velocity({opacity:0},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){a(this).remove()}})}),a("body").append(i),i.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){h=!0,g=!1}})}return!1})})},destroy:function(){var b=a("#sidenav-overlay"),c=a('.drag-target[data-sidenav="'+a(this).attr("data-activates")+'"]');b.trigger("click"),c.remove(),a(this).off("click"),b.remove()},show:function(){this.trigger("click")},hide:function(){a("#sidenav-overlay").trigger("click")}};a.fn.sideNav=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.sideNav"):b.init.apply(this,arguments)}}(jQuery),function(a){function b(b,c,d,e){var f=a();return a.each(g,function(a,g){if(g.height()>0){var h=g.offset().top,i=g.offset().left,j=i+g.width(),k=h+g.height(),l=!(i>c||e>j||h>d||b>k);l&&f.push(g)}}),f}function c(c){++j;var d=f.scrollTop(),e=f.scrollLeft(),g=e+f.width(),i=d+f.height(),l=b(d+k.top+c||200,g+k.right,i+k.bottom,e+k.left);a.each(l,function(a,b){var c=b.data("scrollSpy:ticks");"number"!=typeof c&&b.triggerHandler("scrollSpy:enter"),b.data("scrollSpy:ticks",j)}),a.each(h,function(a,b){var c=b.data("scrollSpy:ticks");"number"==typeof c&&c!==j&&(b.triggerHandler("scrollSpy:exit"),b.data("scrollSpy:ticks",null))}),h=l}function d(){f.trigger("scrollSpy:winSize")}function e(a,b,c){var d,e,f,g=null,h=0;c||(c={});var i=function(){h=c.leading===!1?0:l(),g=null,f=a.apply(d,e),d=e=null};return function(){var j=l();h||c.leading!==!1||(h=j);var k=b-(j-h);return d=this,e=arguments,0>=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}}var f=a(window),g=[],h=[],i=!1,j=0,k={top:0,right:0,bottom:0,left:0},l=Date.now||function(){return(new Date).getTime()};a.scrollSpy=function(b,d){var h={throttle:100,scrollOffset:200};d=a.extend(h,d);var j=[];b=a(b),b.each(function(b,c){g.push(a(c)),a(c).data("scrollSpy:id",b),a('a[href="#'+a(c).attr("id")+'"]').click(function(b){b.preventDefault();var c=a(Materialize.escapeHash(this.hash)).offset().top+1;a("html, body").animate({scrollTop:c-d.scrollOffset},{duration:400,queue:!1,easing:"easeOutCubic"})})}),k.top=d.offsetTop||0,k.right=d.offsetRight||0,k.bottom=d.offsetBottom||0,k.left=d.offsetLeft||0;var l=e(function(){c(d.scrollOffset)},d.throttle||100),m=function(){a(document).ready(l)};return i||(f.on("scroll",m),f.on("resize",m),i=!0),setTimeout(m,0),b.on("scrollSpy:enter",function(){j=a.grep(j,function(a){return 0!=a.height()});var b=a(this);j[0]?(a('a[href="#'+j[0].attr("id")+'"]').removeClass("active"),b.data("scrollSpy:id")");e.html(g),b.is(":visible")?e.css("width",b.width()):e.css("width",a(window).width()/2),b.css("height",e.height())}Materialize.updateTextFields=function(){var b="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(b).each(function(b,c){a(c).val().length>0||c.autofocus||void 0!==a(this).attr("placeholder")||a(c)[0].validity.badInput===!0?a(this).siblings("label").addClass("active"):a(this).siblings("label").removeClass("active")})};var c="input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], textarea";a(document).on("change",c,function(){(0!==a(this).val().length||void 0!==a(this).attr("placeholder"))&&a(this).siblings("label").addClass("active"),validate_field(a(this))}),a(document).ready(function(){Materialize.updateTextFields()}),a(document).on("reset",function(b){var d=a(b.target);d.is("form")&&(d.find(c).removeClass("valid").removeClass("invalid"),d.find(c).each(function(){""===a(this).attr("value")&&a(this).siblings("label").removeClass("active")}),d.find("select.initialized").each(function(){var a=d.find("option[selected]").text();d.siblings("input.select-dropdown").val(a)}))}),a(document).on("focus",c,function(){a(this).siblings("label, .prefix").addClass("active")}),a(document).on("blur",c,function(){var b=a(this),c=".prefix";0===b.val().length&&b[0].validity.badInput!==!0&&void 0===b.attr("placeholder")&&(c+=", label"),b.siblings(c).removeClass("active"),validate_field(b)}),window.validate_field=function(a){var b=void 0!==a.attr("length"),c=parseInt(a.attr("length")),d=a.val().length;0===a.val().length&&a[0].validity.badInput===!1?a.hasClass("validate")&&(a.removeClass("valid"),a.removeClass("invalid")):a.hasClass("validate")&&(a.is(":valid")&&b&&c>=d||a.is(":valid")&&!b?(a.removeClass("invalid"),a.addClass("valid")):(a.removeClass("valid"),a.addClass("invalid")))};var d="input[type=radio], input[type=checkbox]";a(document).on("keyup.radio",d,function(b){if(9===b.which){a(this).addClass("tabbed");var c=a(this);return void c.one("blur",function(b){a(this).removeClass("tabbed")})}});var e=a(".hiddendiv").first();e.length||(e=a(''),a("body").append(e));var f=".materialize-textarea";a(f).each(function(){var c=a(this);c.val().length&&b(c)}),a("body").on("keyup keydown autoresize",f,function(){b(a(this))}),a(document).on("change",'.file-field input[type="file"]',function(){for(var b=a(this).closest(".file-field"),c=b.find("input.file-path"),d=a(this)[0].files,e=[],f=0;f');a(this).after(b)});var j=".range-field";a(document).on("change",h,function(b){var c=a(this).siblings(".thumb");c.find(".value").html(a(this).val())}),a(document).on("input mousedown touchstart",h,function(b){var c=a(this).siblings(".thumb"),d=a(this).outerWidth();c.length<=0&&(c=a(''),a(this).after(c)),c.find(".value").html(a(this).val()),i=!0,a(this).addClass("active"),c.hasClass("active")||c.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),"input"!==b.type&&(g=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left,0>g?g=0:g>d&&(g=d),c.addClass("active").css("left",g)),c.find(".value").html(a(this).val())}),a(document).on("mouseup touchend",j,function(){i=!1,a(this).removeClass("active")}),a(document).on("mousemove touchmove",j,function(b){var c,d=a(this).children(".thumb");if(i){d.hasClass("active")||d.velocity({height:"30px",width:"30px",top:"-20px",marginLeft:"-15px"},{duration:300,easing:"easeOutExpo"}),c=void 0===b.pageX||null===b.pageX?b.originalEvent.touches[0].pageX-a(this).offset().left:b.pageX-a(this).offset().left;var e=a(this).outerWidth();0>c?c=0:c>e&&(c=e),d.addClass("active").css("left",c),d.find(".value").html(d.siblings(h).val())}}),a(document).on("mouseout touchleave",j,function(){if(!i){var b=a(this).children(".thumb");b.hasClass("active")&&b.velocity({height:"0",width:"0",top:"10px",marginLeft:"-6px"},{duration:100}),b.removeClass("active")}}),a.fn.autocomplete=function(b){var c={data:{}};return b=a.extend(c,b),this.each(function(){var c=a(this),d=b.data,e=c.closest(".input-field");if(!a.isEmptyObject(d)){var f=a('
');e.length?e.append(f):c.after(f);var g=function(a,b){var c=b.find("img"),d=b.text().toLowerCase().indexOf(""+a.toLowerCase()),e=d+a.length-1,f=b.text().slice(0,d),g=b.text().slice(d,e+1),h=b.text().slice(e+1);b.html(""+f+""+g+""+h+""),c.length&&b.prepend(c)};c.on("keyup",function(b){if(13===b.which)return void f.find("li").first().click();var e=c.val().toLowerCase();if(f.empty(),""!==e)for(var h in d)if(d.hasOwnProperty(h)&&-1!==h.toLowerCase().indexOf(e)&&h.toLowerCase()!==e){var i=a("");d[h]?i.append(''+h+""):i.append(""+h+""),f.append(i),g(e,i)}}),f.on("click","li",function(){c.val(a(this).text().trim()),c.trigger("change"),f.empty()})}})}}),a.fn.material_select=function(b){function c(a,b,c){var e=a.indexOf(b),f=-1===e;return f?a.push(b):a.splice(e,1),c.siblings("ul.dropdown-content").find("li").eq(b).toggleClass("active"),c.find("option").eq(b).prop("selected",f),d(a,c),f}function d(a,b){for(var c="",d=0,e=a.length;e>d;d++){var f=b.find("option").eq(a[d]).text();c+=0===d?f:", "+f}""===c&&(c=b.find("option:disabled").eq(0).text()),b.siblings("input.select-dropdown").val(c)}a(this).each(function(){var d=a(this);if(!d.hasClass("browser-default")){var e=d.attr("multiple")?!0:!1,f=d.data("select-id");if(f&&(d.parent().find("span.caret").remove(),d.parent().find("input").remove(),d.unwrap(),a("ul#select-options-"+f).remove()),"destroy"===b)return void d.data("select-id",null).removeClass("initialized");var g=Materialize.guid();d.data("select-id",g);var h=a('');h.addClass(d.attr("class"));var i=a('
'),j=d.children("option, optgroup"),k=[],l=!1,m=d.find("option:selected").html()||d.find("option:first").html()||"",n=function(b,c,d){var e=c.is(":disabled")?"disabled ":"",f="optgroup-option"===d?"optgroup-option ":"",g=c.data("icon"),h=c.attr("class");if(g){var j="";return h&&(j=' class="'+h+'"'),"multiple"===d?i.append(a('"+c.html()+" ")):i.append(a('"+c.html()+" ")),!0}"multiple"===d?i.append(a('"+c.html()+" ")):i.append(a(''+c.html()+" "))};j.length&&j.each(function(){if(a(this).is("option"))e?n(d,a(this),"multiple"):n(d,a(this));else if(a(this).is("optgroup")){var b=a(this).children("option");i.append(a(''+a(this).attr("label")+" ")),b.each(function(){n(d,a(this),"optgroup-option")})}}),i.find("li:not(.optgroup)").each(function(f){a(this).click(function(g){if(!a(this).hasClass("disabled")&&!a(this).hasClass("optgroup")){
+var h=!0;e?(a('input[type="checkbox"]',this).prop("checked",function(a,b){return!b}),h=c(k,a(this).index(),d),q.trigger("focus")):(i.find("li").removeClass("active"),a(this).toggleClass("active"),q.val(a(this).text())),r(i,a(this)),d.find("option").eq(f).prop("selected",h),d.trigger("change"),"undefined"!=typeof b&&b()}g.stopPropagation()})}),d.wrap(h);var o=a('▼');d.is(":disabled")&&o.addClass("disabled");var p=m.replace(/"/g,"""),q=a('');d.before(q),q.before(o),q.after(i),d.is(":disabled")||q.dropdown({hover:!1,closeOnClick:!1}),d.attr("tabindex")&&a(q[0]).attr("tabindex",d.attr("tabindex")),d.addClass("initialized"),q.on({focus:function(){if(a("ul.select-dropdown").not(i[0]).is(":visible")&&a("input.select-dropdown").trigger("close"),!i.is(":visible")){a(this).trigger("open",["focus"]);var b=a(this).val(),c=i.find("li").filter(function(){return a(this).text().toLowerCase()===b.toLowerCase()})[0];r(i,c)}},click:function(a){a.stopPropagation()}}),q.on("blur",function(){e||a(this).trigger("close"),i.find("li.selected").removeClass("selected")}),i.hover(function(){l=!0},function(){l=!1}),a(window).on({click:function(){e&&(l||q.trigger("close"))}}),e&&d.find("option:selected:not(:disabled)").each(function(){var b=a(this).index();c(k,b,d),i.find("li").eq(b).find(":checkbox").prop("checked",!0)});var r=function(b,c){if(c){b.find("li.selected").removeClass("selected");var d=a(c);d.addClass("selected"),i.scrollTo(d)}},s=[],t=function(b){if(9==b.which)return void q.trigger("close");if(40==b.which&&!i.is(":visible"))return void q.trigger("open");if(13!=b.which||i.is(":visible")){b.preventDefault();var c=String.fromCharCode(b.which).toLowerCase(),d=[9,13,27,38,40];if(c&&-1===d.indexOf(b.which)){s.push(c);var f=s.join(""),g=i.find("li").filter(function(){return 0===a(this).text().toLowerCase().indexOf(f)})[0];g&&r(i,g)}if(13==b.which){var h=i.find("li.selected:not(.disabled)")[0];h&&(a(h).trigger("click"),e||q.trigger("close"))}40==b.which&&(g=i.find("li.selected").length?i.find("li.selected").next("li:not(.disabled)")[0]:i.find("li:not(.disabled)")[0],r(i,g)),27==b.which&&q.trigger("close"),38==b.which&&(g=i.find("li.selected").prev("li:not(.disabled)")[0],g&&r(i,g)),setTimeout(function(){s=[]},1e3)}};q.on("keydown",t)}})}}(jQuery),function(a){var b={init:function(b){var c={indicators:!0,height:400,transition:500,interval:6e3};return b=a.extend(c,b),this.each(function(){function c(a,b){a.hasClass("center-align")?a.velocity({opacity:0,translateY:-100},{duration:b,queue:!1}):a.hasClass("right-align")?a.velocity({opacity:0,translateX:100},{duration:b,queue:!1}):a.hasClass("left-align")&&a.velocity({opacity:0,translateX:-100},{duration:b,queue:!1})}function d(a){a>=j.length?a=0:0>a&&(a=j.length-1),k=i.find(".active").index(),k!=a&&(e=j.eq(k),$caption=e.find(".caption"),e.removeClass("active"),e.velocity({opacity:0},{duration:b.transition,queue:!1,easing:"easeOutQuad",complete:function(){j.not(".active").velocity({opacity:0,translateX:0,translateY:0},{duration:0,queue:!1})}}),c($caption,b.transition),b.indicators&&f.eq(k).removeClass("active"),j.eq(a).velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),j.eq(a).find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,delay:b.transition,queue:!1,easing:"easeOutQuad"}),j.eq(a).addClass("active"),b.indicators&&f.eq(a).addClass("active"))}var e,f,g,h=a(this),i=h.find("ul.slides").first(),j=i.find("> li"),k=i.find(".active").index();-1!=k&&(e=j.eq(k)),h.hasClass("fullscreen")||(b.indicators?h.height(b.height+40):h.height(b.height),i.height(b.height)),j.find(".caption").each(function(){c(a(this),0)}),j.find("img").each(function(){var b="data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";a(this).attr("src")!==b&&(a(this).css("background-image","url("+a(this).attr("src")+")"),a(this).attr("src",b))}),b.indicators&&(f=a('
'),j.each(function(c){var e=a('');e.click(function(){var c=i.parent(),e=c.find(a(this)).index();d(e),clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval)}),f.append(e)}),h.append(f),f=h.find("ul.indicators").find("li.indicator-item")),e?e.show():(j.first().addClass("active").velocity({opacity:1},{duration:b.transition,queue:!1,easing:"easeOutQuad"}),k=0,e=j.eq(k),b.indicators&&f.eq(k).addClass("active")),e.find("img").each(function(){e.find(".caption").velocity({opacity:1,translateX:0,translateY:0},{duration:b.transition,queue:!1,easing:"easeOutQuad"})}),g=setInterval(function(){k=i.find(".active").index(),d(k+1)},b.transition+b.interval);var l=!1,m=!1,n=!1;h.hammer({prevent_default:!1}).bind("pan",function(a){if("touch"===a.gesture.pointerType){clearInterval(g);var b=a.gesture.direction,c=a.gesture.deltaX,d=a.gesture.velocityX;$curr_slide=i.find(".active"),$curr_slide.velocity({translateX:c},{duration:50,queue:!1,easing:"easeOutQuad"}),4===b&&(c>h.innerWidth()/2||-.65>d)?n=!0:2===b&&(c<-1*h.innerWidth()/2||d>.65)&&(m=!0);var e;m&&(e=$curr_slide.next(),0===e.length&&(e=j.first()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"})),n&&(e=$curr_slide.prev(),0===e.length&&(e=j.last()),e.velocity({opacity:1},{duration:300,queue:!1,easing:"easeOutQuad"}))}}).bind("panend",function(a){"touch"===a.gesture.pointerType&&($curr_slide=i.find(".active"),l=!1,curr_index=i.find(".active").index(),!n&&!m||j.length<=1?$curr_slide.velocity({translateX:0},{duration:300,queue:!1,easing:"easeOutQuad"}):m?(d(curr_index+1),$curr_slide.velocity({translateX:-1*h.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})):n&&(d(curr_index-1),$curr_slide.velocity({translateX:h.innerWidth()},{duration:300,queue:!1,easing:"easeOutQuad",complete:function(){$curr_slide.velocity({opacity:0,translateX:0},{duration:0,queue:!1})}})),m=!1,n=!1,clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval))}),h.on("sliderPause",function(){clearInterval(g)}),h.on("sliderStart",function(){clearInterval(g),g=setInterval(function(){k=i.find(".active").index(),j.length==k+1?k=0:k+=1,d(k)},b.transition+b.interval)}),h.on("sliderNext",function(){k=i.find(".active").index(),d(k+1)}),h.on("sliderPrev",function(){k=i.find(".active").index(),d(k-1)})})},pause:function(){a(this).trigger("sliderPause")},start:function(){a(this).trigger("sliderStart")},next:function(){a(this).trigger("sliderNext")},prev:function(){a(this).trigger("sliderPrev")}};a.fn.slider=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.tooltip"):b.init.apply(this,arguments)}}(jQuery),function(a){a(document).ready(function(){a(document).on("click.card",".card",function(b){a(this).find("> .card-reveal").length&&(a(b.target).is(a(".card-reveal .card-title"))||a(b.target).is(a(".card-reveal .card-title i"))?a(this).find(".card-reveal").velocity({translateY:0},{duration:225,queue:!1,easing:"easeInOutQuad",complete:function(){a(this).css({display:"none"})}}):(a(b.target).is(a(".card .activator"))||a(b.target).is(a(".card .activator i")))&&(a(b.target).closest(".card").css("overflow","hidden"),a(this).find(".card-reveal").css({display:"block"}).velocity("stop",!1).velocity({translateY:"-100%"},{duration:300,queue:!1,easing:"easeInOutQuad"})))})})}(jQuery),function(a){var b=!1,c={data:[],placeholder:"",secondaryPlaceholder:""};a(document).ready(function(){a(document).on("click",".chip .close",function(b){var c=a(this).closest(".chips");c.attr("data-initialized")||a(this).closest(".chip").remove()})}),a.fn.material_chip=function(d){var e=this;if(this.$el=a(this),this.$document=a(document),this.SELS={CHIPS:".chips",CHIP:".chip",INPUT:"input",DELETE:".material-icons",SELECTED_CHIP:".selected"},"data"===d)return this.$el.data("chips");var f=a.extend({},c,d);this.init=function(){var b=0;e.$el.each(function(){var c=a(this),d=Materialize.guid();f.data&&f.data instanceof Array||(f.data=[]),c.data("chips",f.data),c.attr("data-index",b),c.attr("data-initialized",!0),c.hasClass(e.SELS.CHIPS)||c.addClass("chips"),e.chips(c,d),b++})},this.handleEvents=function(){var b=e.SELS;e.$document.off("click.chips-focus",b.CHIPS).on("click.chips-focus",b.CHIPS,function(c){a(c.target).find(b.INPUT).focus()}),e.$document.off("click.chips-select",b.CHIP).on("click.chips-select",b.CHIP,function(c){a(b.CHIP).removeClass("selected"),a(this).toggleClass("selected")}),e.$document.off("keydown.chips").on("keydown.chips",function(c){if(!a(c.target).is("input, textarea")){var d,f=e.$document.find(b.CHIP+b.SELECTED_CHIP),g=f.closest(b.CHIPS),h=f.siblings(b.CHIP).length;if(f.length)if(8===c.which||46===c.which){c.preventDefault(),d=f.index(),e.deleteChip(d,g);var i=null;h>d+1?i=d:(d===h||d+1===h)&&(i=h-1),0>i&&(i=null),null!==i&&e.selectChip(i,g),h||g.find("input").focus()}else if(37===c.which){if(d=f.index()-1,0>d)return;a(b.CHIP).removeClass("selected"),e.selectChip(d,g)}else if(39===c.which){if(d=f.index()+1,a(b.CHIP).removeClass("selected"),d>h)return void g.find("input").focus();e.selectChip(d,g)}}}),e.$document.off("focusin.chips",b.CHIPS+" "+b.INPUT).on("focusin.chips",b.CHIPS+" "+b.INPUT,function(c){var d=a(c.target).closest(b.CHIPS);d.addClass("focus"),d.siblings("label, .prefix").addClass("active"),a(b.CHIP).removeClass("selected")}),e.$document.off("focusout.chips",b.CHIPS+" "+b.INPUT).on("focusout.chips",b.CHIPS+" "+b.INPUT,function(c){var d=a(c.target).closest(b.CHIPS);d.removeClass("focus"),d.data("chips").length||d.siblings("label").removeClass("active"),d.siblings(".prefix").removeClass("active")}),e.$document.off("keydown.chips-add",b.CHIPS+" "+b.INPUT).on("keydown.chips-add",b.CHIPS+" "+b.INPUT,function(c){var d=a(c.target),f=d.closest(b.CHIPS),g=f.children(b.CHIP).length;return 13===c.which?(c.preventDefault(),e.addChip({tag:d.val()},f),void d.val("")):8!==c.keyCode&&37!==c.keyCode||""!==d.val()||!g?void 0:(e.selectChip(g-1,f),void d.blur())}),e.$document.off("click.chips-delete",b.CHIPS+" "+b.DELETE).on("click.chips-delete",b.CHIPS+" "+b.DELETE,function(c){var d=a(c.target),f=d.closest(b.CHIPS),g=d.closest(b.CHIP);c.stopPropagation(),e.deleteChip(g.index(),f),f.find("input").focus()})},this.chips=function(a,b){var c="";a.data("chips").forEach(function(a){c+=e.renderChip(a)}),c+='',a.html(c),e.setPlaceholder(a);var d=a.next("label");d.length&&(d.attr("for",b),a.data("chips").length&&d.addClass("active"))},this.renderChip=function(a){if(a.tag){var b=''+a.tag;return a.image&&(b+=' '),b+='close',b+=""}},this.setPlaceholder=function(a){a.data("chips").length&&f.placeholder?a.find("input").prop("placeholder",f.placeholder):!a.data("chips").length&&f.secondaryPlaceholder&&a.find("input").prop("placeholder",f.secondaryPlaceholder)},this.isValid=function(a,b){for(var c=a.data("chips"),d=!1,e=0;e=e&&!a(this).hasClass("pinned")&&(c(a(this)),a(this).css("top",b.offset),a(this).addClass("pinned")),eb.bottom&&!a(this).hasClass("pin-bottom")&&(c(a(this)),a(this).addClass("pin-bottom"),a(this).css("top",b.bottom-g))})}var e=Materialize.guid(),f=a(this),g=a(this).offset().top;a(this).data("pushpin-id",e),d(f,a(window).scrollTop()),a(window).on("scroll."+e,function(){var c=a(window).scrollTop()+b.offset;d(f,c)})}))}}(jQuery),function(a){a(document).ready(function(){a.fn.reverse=[].reverse,a(document).on("mouseenter.fixedActionBtn",".fixed-action-btn:not(.click-to-toggle):not(.toolbar)",function(c){var d=a(this);b(d)}),a(document).on("mouseleave.fixedActionBtn",".fixed-action-btn:not(.click-to-toggle):not(.toolbar)",function(b){var d=a(this);c(d)}),a(document).on("click.fabClickToggle",".fixed-action-btn.click-to-toggle > a",function(d){var e=a(this),f=e.parent();f.hasClass("active")?c(f):b(f)}),a(document).on("click.fabToolbar",".fixed-action-btn.toolbar > a",function(b){var c=a(this),e=c.parent();d(e)})}),a.fn.extend({openFAB:function(){b(a(this))},closeFAB:function(){c(a(this))},openToolbar:function(){d(a(this))},closeToolbar:function(){e(a(this))}});var b=function(b){var c=b;if(c.hasClass("active")===!1){var d,e,f=c.hasClass("horizontal");f===!0?e=40:d=40,c.addClass("active"),c.find("ul .btn-floating").velocity({scaleY:".4",scaleX:".4",translateY:d+"px",translateX:e+"px"},{duration:0});var g=0;c.find("ul .btn-floating").reverse().each(function(){a(this).velocity({opacity:"1",scaleX:"1",scaleY:"1",translateY:"0",translateX:"0"},{duration:80,delay:g}),g+=40})}},c=function(a){var b,c,d=a,e=d.hasClass("horizontal");e===!0?c=40:b=40,d.removeClass("active");d.find("ul .btn-floating").velocity("stop",!0),d.find("ul .btn-floating").velocity({opacity:"0",scaleX:".4",scaleY:".4",translateY:b+"px",translateX:c+"px"},{duration:80})},d=function(b){if("true"!==b.attr("data-open")){var c,d,f,g=window.innerWidth,h=window.innerHeight,i=b[0].getBoundingClientRect(),j=b.find("> a").first(),k=b.find("> ul").first(),l=a(''),m=j.css("background-color");j.append(l),c=i.left-g/2+i.width/2,d=h-i.bottom,f=g/l.width(),b.attr("data-origin-bottom",i.bottom),b.attr("data-origin-left",i.left),b.attr("data-origin-width",i.width),b.addClass("active"),b.attr("data-open",!0),b.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+c+"px)",transition:"none"}),j.css({transform:"translateY("+-d+"px)",transition:"none"}),l.css({"background-color":m}),setTimeout(function(){b.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),j.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){b.css({overflow:"hidden","background-color":m}),l.css({transform:"scale("+f+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),k.find("> li > a").css({opacity:1}),a(window).on("scroll.fabToolbarClose",function(){e(b),a(window).off("scroll.fabToolbarClose"),a(document).off("click.fabToolbarClose")}),a(document).on("click.fabToolbarClose",function(c){a(c.target).closest(k).length||(e(b),a(window).off("scroll.fabToolbarClose"),a(document).off("click.fabToolbarClose"))})},100)},0)}},e=function(a){if("true"===a.attr("data-open")){var b,c,d,e=window.innerWidth,f=window.innerHeight,g=a.attr("data-origin-width"),h=a.attr("data-origin-bottom"),i=a.attr("data-origin-left"),j=a.find("> .btn-floating").first(),k=a.find("> ul").first(),l=a.find(".fab-backdrop"),m=j.css("background-color");b=i-e/2+g/2,c=f-h,d=e/l.width(),a.removeClass("active"),a.attr("data-open",!1),a.css({"background-color":"transparent",transition:"none"}),j.css({transition:"none"}),l.css({transform:"scale(0)","background-color":m}),k.find("> li > a").css({opacity:""}),setTimeout(function(){l.remove(),a.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-b+"px,0,0)"}),j.css({overflow:"",transform:"translate3d(0,"+c+"px,0)"}),setTimeout(function(){a.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),j.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}}(jQuery),function(a){Materialize.fadeInImage=function(b){var c;if("string"==typeof b)c=a(b);else{if("object"!=typeof b)return;c=b}c.css({opacity:0}),a(c).velocity({opacity:1},{duration:650,queue:!1,easing:"easeOutSine"}),a(c).velocity({opacity:1},{duration:1300,queue:!1,easing:"swing",step:function(b,c){c.start=100;var d=b/100,e=150-(100-b)/1.75;100>e&&(e=100),b>=0&&a(this).css({"-webkit-filter":"grayscale("+d+")brightness("+e+"%)",filter:"grayscale("+d+")brightness("+e+"%)"})}})},Materialize.showStaggeredList=function(b){var c;if("string"==typeof b)c=a(b);else{if("object"!=typeof b)return;c=b}var d=0;c.find("li").velocity({translateX:"-100px"},{duration:0}),c.find("li").each(function(){a(this).velocity({opacity:"1",translateX:"0"},{duration:800,delay:d,easing:[60,10]}),d+=120})},a(document).ready(function(){var b=!1,c=!1;a(".dismissable").each(function(){a(this).hammer({prevent_default:!1}).bind("pan",function(d){if("touch"===d.gesture.pointerType){var e=a(this),f=d.gesture.direction,g=d.gesture.deltaX,h=d.gesture.velocityX;e.velocity({translateX:g},{duration:50,queue:!1,easing:"easeOutQuad"}),4===f&&(g>e.innerWidth()/2||-.75>h)&&(b=!0),2===f&&(g<-1*e.innerWidth()/2||h>.75)&&(c=!0)}}).bind("panend",function(d){if(Math.abs(d.gesture.deltaX)j+g&&e.done!==!0){if("function"==typeof h)h.call(this,i);else if("string"==typeof h){var k=new Function(h);k(i)}e.done=!0}}}}},100)}}(jQuery),function(a){"function"==typeof define&&define.amd?define("picker",["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):this.Picker=a(jQuery)}(function(a){function b(f,g,i,l){function m(){return b._.node("div",b._.node("div",b._.node("div",b._.node("div",y.component.nodes(t.open),v.box),v.wrap),v.frame),v.holder)}function n(){w.data(g,y).addClass(v.input).attr("tabindex",-1).val(w.data("value")?y.get("select",u.format):f.value),u.editable||w.on("focus."+t.id+" click."+t.id,function(a){a.preventDefault(),y.$root.eq(0).focus()}).on("keydown."+t.id,q),e(f,{haspopup:!0,expanded:!1,readonly:!1,owns:f.id+"_root"})}function o(){y.$root.on({keydown:q,focusin:function(a){y.$root.removeClass(v.focused),a.stopPropagation()},"mousedown click":function(b){var c=b.target;c!=y.$root.children()[0]&&(b.stopPropagation(),"mousedown"!=b.type||a(c).is("input, select, textarea, button, option")||(b.preventDefault(),y.$root.eq(0).focus()))}}).on({focus:function(){w.addClass(v.target)},blur:function(){w.removeClass(v.target)}}).on("focus.toOpen",r).on("click","[data-pick], [data-nav], [data-clear], [data-close]",function(){var b=a(this),c=b.data(),d=b.hasClass(v.navDisabled)||b.hasClass(v.disabled),e=h();e=e&&(e.type||e.href),(d||e&&!a.contains(y.$root[0],e))&&y.$root.eq(0).focus(),!d&&c.nav?y.set("highlight",y.component.item.highlight,{nav:c.nav}):!d&&"pick"in c?y.set("select",c.pick):c.clear?y.clear().close(!0):c.close&&y.close(!0)}),e(y.$root[0],"hidden",!0)}function p(){var b;u.hiddenName===!0?(b=f.name,f.name=""):(b=["string"==typeof u.hiddenPrefix?u.hiddenPrefix:"","string"==typeof u.hiddenSuffix?u.hiddenSuffix:"_submit"],b=b[0]+f.name+b[1]),y._hidden=a('")[0],w.on("change."+t.id,function(){y._hidden.value=f.value?y.get("select",u.formatSubmit):""}),u.container?a(u.container).append(y._hidden):w.after(y._hidden)}function q(a){var b=a.keyCode,c=/^(8|46)$/.test(b);return 27==b?(y.close(),!1):void((32==b||c||!t.open&&y.component.key[b])&&(a.preventDefault(),a.stopPropagation(),c?y.clear().close():y.open()))}function r(a){a.stopPropagation(),"focus"==a.type&&y.$root.addClass(v.focused),y.open()}if(!f)return b;var s=!1,t={id:f.id||"P"+Math.abs(~~(Math.random()*new Date))},u=i?a.extend(!0,{},i.defaults,l):l||{},v=a.extend({},b.klasses(),u.klass),w=a(f),x=function(){return this.start()},y=x.prototype={constructor:x,$node:w,start:function(){return t&&t.start?y:(t.methods={},t.start=!0,t.open=!1,t.type=f.type,f.autofocus=f==h(),f.readOnly=!u.editable,f.id=f.id||t.id,"text"!=f.type&&(f.type="text"),y.component=new i(y,u),y.$root=a(b._.node("div",m(),v.picker,'id="'+f.id+'_root" tabindex="0"')),o(),u.formatSubmit&&p(),n(),u.container?a(u.container).append(y.$root):w.after(y.$root),y.on({start:y.component.onStart,render:y.component.onRender,stop:y.component.onStop,open:y.component.onOpen,close:y.component.onClose,set:y.component.onSet}).on({start:u.onStart,render:u.onRender,stop:u.onStop,open:u.onOpen,close:u.onClose,set:u.onSet}),s=c(y.$root.children()[0]),f.autofocus&&y.open(),y.trigger("start").trigger("render"))},render:function(a){return a?y.$root.html(m()):y.$root.find("."+v.box).html(y.component.nodes(t.open)),y.trigger("render")},stop:function(){return t.start?(y.close(),y._hidden&&y._hidden.parentNode.removeChild(y._hidden),y.$root.remove(),w.removeClass(v.input).removeData(g),setTimeout(function(){w.off("."+t.id)},0),f.type=t.type,f.readOnly=!1,y.trigger("stop"),t.methods={},t.start=!1,y):y},open:function(c){return t.open?y:(w.addClass(v.active),e(f,"expanded",!0),setTimeout(function(){y.$root.addClass(v.opened),e(y.$root[0],"hidden",!1)},0),c!==!1&&(t.open=!0,s&&k.css("overflow","hidden").css("padding-right","+="+d()),y.$root.eq(0).focus(),j.on("click."+t.id+" focusin."+t.id,function(a){var b=a.target;b!=f&&b!=document&&3!=a.which&&y.close(b===y.$root.children()[0])}).on("keydown."+t.id,function(c){var d=c.keyCode,e=y.component.key[d],f=c.target;27==d?y.close(!0):f!=y.$root[0]||!e&&13!=d?a.contains(y.$root[0],f)&&13==d&&(c.preventDefault(),f.click()):(c.preventDefault(),e?b._.trigger(y.component.key.go,y,[b._.trigger(e)]):y.$root.find("."+v.highlighted).hasClass(v.disabled)||y.set("select",y.component.item.highlight).close())})),y.trigger("open"))},close:function(a){return a&&(y.$root.off("focus.toOpen").eq(0).focus(),setTimeout(function(){y.$root.on("focus.toOpen",r)},0)),w.removeClass(v.active),e(f,"expanded",!1),setTimeout(function(){y.$root.removeClass(v.opened+" "+v.focused),e(y.$root[0],"hidden",!0)},0),t.open?(t.open=!1,s&&k.css("overflow","").css("padding-right","-="+d()),j.off("."+t.id),y.trigger("close")):y},clear:function(a){return y.set("clear",null,a)},set:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(d=g&&a.isPlainObject(c)?c:d||{},b){g||(h[b]=c);for(e in h)f=h[e],e in y.component.item&&(void 0===f&&(f=null),y.component.set(e,f,d)),("select"==e||"clear"==e)&&w.val("clear"==e?"":y.get(e,u.format)).trigger("change");y.render()}return d.muted?y:y.trigger("set",h)},get:function(a,c){if(a=a||"value",null!=t[a])return t[a];if("valueSubmit"==a){if(y._hidden)return y._hidden.value;a="value"}if("value"==a)return f.value;if(a in y.component.item){if("string"==typeof c){var d=y.component.get(a);return d?b._.trigger(y.component.formats.toString,y.component,[c,d]):""}return y.component.get(a)}},on:function(b,c,d){var e,f,g=a.isPlainObject(b),h=g?b:{};if(b){g||(h[b]=c);for(e in h)f=h[e],d&&(e="_"+e),t.methods[e]=t.methods[e]||[],t.methods[e].push(f)}return y},off:function(){var a,b,c=arguments;for(a=0,namesCount=c.length;ac.pick&&(g=!0)}return f.isInteger(a)}).length;if((!d||!d.nav)&&(!m&&j.disabled(c)||m&&j.disabled(c)&&(p||e||g)||!m&&(c.pick<=n.pick||c.pick>=o.pick)))for(m&&!p&&(!g&&l>0||!e&&0>l)&&(l*=-1);j.disabled(c)&&(Math.abs(l)>1&&(c.monthk.month)&&(c=k,l=l>0?1:-1),c.pick<=n.pick?(h=!0,l=1,c=j.create([n.year,n.month,n.date+(c.pick===n.pick?0:-1)])):c.pick>=o.pick&&(i=!0,l=-1,c=j.create([o.year,o.month,o.date+(c.pick===o.pick?0:1)])),!h||!i);)c=j.create([c.year,c.month,c.date+l]);return c},c.prototype.disabled=function(a){var c=this,d=c.item.disable.filter(function(d){return f.isInteger(d)?a.day===(c.settings.firstDay?d:d-1)%7:b.isArray(d)||f.isDate(d)?a.pick===c.create(d).pick:b.isPlainObject(d)?c.withinRange(d,a):void 0;
+});return d=d.length&&!d.filter(function(a){return b.isArray(a)&&"inverted"==a[3]||b.isPlainObject(a)&&a.inverted}).length,-1===c.item.enable?!d:d||a.pickc.item.max.pick},c.prototype.parse=function(a,b,c){var d=this,e={};return b&&"string"==typeof b?(c&&c.format||(c=c||{},c.format=d.settings.format),d.formats.toArray(c.format).map(function(a){var c=d.formats[a],g=c?f.trigger(c,d,[b,e]):a.replace(/^!/,"").length;c&&(e[a]=b.substr(0,g)),b=b.substr(g)}),[e.yyyy||e.yy,+(e.mm||e.m)-1,e.dd||e.d]):b},c.prototype.formats=function(){function a(a,b,c){var d=a.match(/\w+/)[0];return c.mm||c.m||(c.m=b.indexOf(d)+1),d.length}function b(a){return a.match(/\w+/)[0].length}return{d:function(a,b){return a?f.digits(a):b.date},dd:function(a,b){return a?2:f.lead(b.date)},ddd:function(a,c){return a?b(a):this.settings.weekdaysShort[c.day]},dddd:function(a,c){return a?b(a):this.settings.weekdaysFull[c.day]},m:function(a,b){return a?f.digits(a):b.month+1},mm:function(a,b){return a?2:f.lead(b.month+1)},mmm:function(b,c){var d=this.settings.monthsShort;return b?a(b,d,c):d[c.month]},mmmm:function(b,c){var d=this.settings.monthsFull;return b?a(b,d,c):d[c.month]},yy:function(a,b){return a?2:(""+b.year).slice(2)},yyyy:function(a,b){return a?4:b.year},toArray:function(a){return a.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)},toString:function(a,b){var c=this;return c.formats.toArray(a).map(function(a){return f.trigger(c.formats[a],c,[0,b])||a.replace(/^!/,"")}).join("")}}}(),c.prototype.isDateExact=function(a,c){var d=this;return f.isInteger(a)&&f.isInteger(c)||"boolean"==typeof a&&"boolean"==typeof c?a===c:(f.isDate(a)||b.isArray(a))&&(f.isDate(c)||b.isArray(c))?d.create(a).pick===d.create(c).pick:b.isPlainObject(a)&&b.isPlainObject(c)?d.isDateExact(a.from,c.from)&&d.isDateExact(a.to,c.to):!1},c.prototype.isDateOverlap=function(a,c){var d=this,e=d.settings.firstDay?1:0;return f.isInteger(a)&&(f.isDate(c)||b.isArray(c))?(a=a%7+e,a===d.create(c).day+1):f.isInteger(c)&&(f.isDate(a)||b.isArray(a))?(c=c%7+e,c===d.create(a).day+1):b.isPlainObject(a)&&b.isPlainObject(c)?d.overlapRanges(a,c):!1},c.prototype.flipEnable=function(a){var b=this.item;b.enable=a||(-1==b.enable?1:-1)},c.prototype.deactivate=function(a,c){var d=this,e=d.item.disable.slice(0);return"flip"==c?d.flipEnable():c===!1?(d.flipEnable(1),e=[]):c===!0?(d.flipEnable(-1),e=[]):c.map(function(a){for(var c,g=0;gi;i+=1){if(h=e[i],d.isDateExact(h,a)){c=e[i]=null,j=!0;break}if(d.isDateOverlap(h,a)){b.isPlainObject(a)?(a.inverted=!0,c=a):b.isArray(a)?(c=a,c[3]||c.push("inverted")):f.isDate(a)&&(c=[a.getFullYear(),a.getMonth(),a.getDate(),"inverted"]);break}}if(c)for(i=0;g>i;i+=1)if(d.isDateExact(e[i],a)){e[i]=null;break}if(j)for(i=0;g>i;i+=1)if(d.isDateOverlap(e[i],a)){e[i]=null;break}c&&e.push(c)}),e.filter(function(a){return null!=a})},c.prototype.nodes=function(a){var b=this,c=b.settings,g=b.item,h=g.now,i=g.select,j=g.highlight,k=g.view,l=g.disable,m=g.min,n=g.max,o=function(a,b){return c.firstDay&&(a.push(a.shift()),b.push(b.shift())),f.node("thead",f.node("tr",f.group({min:0,max:d-1,i:1,node:"th",item:function(d){return[a[d],c.klass.weekdays,'scope=col title="'+b[d]+'"']}})))}((c.showWeekdaysFull?c.weekdaysFull:c.weekdaysLetter).slice(0),c.weekdaysFull.slice(0)),p=function(a){return f.node("div"," ",c.klass["nav"+(a?"Next":"Prev")]+(a&&k.year>=n.year&&k.month>=n.month||!a&&k.year<=m.year&&k.month<=m.month?" "+c.klass.navDisabled:""),"data-nav="+(a||-1)+" "+f.ariaAttr({role:"button",controls:b.$node[0].id+"_table"})+' title="'+(a?c.labelMonthNext:c.labelMonthPrev)+'"')},q=function(d){var e=c.showMonthsShort?c.monthsShort:c.monthsFull;return"short_months"==d&&(e=c.monthsShort),c.selectMonths&&void 0==d?f.node("select",f.group({min:0,max:11,i:1,node:"option",item:function(a){return[e[a],0,"value="+a+(k.month==a?" selected":"")+(k.year==m.year&&an.month?" disabled":"")]}}),c.klass.selectMonth+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelMonthSelect+'"'):"short_months"==d?null!=i?f.node("div",e[i.month]):f.node("div",e[k.month]):f.node("div",e[k.month],c.klass.month)},r=function(d){var e=k.year,g=c.selectYears===!0?5:~~(c.selectYears/2);if(g){var h=m.year,i=n.year,j=e-g,l=e+g;if(h>j&&(l+=h-j,j=h),l>i){var o=j-h,p=l-i;j-=o>p?p:o,l=i}if(c.selectYears&&void 0==d)return f.node("select",f.group({min:j,max:l,i:1,node:"option",item:function(a){return[a,0,"value="+a+(e==a?" selected":"")]}}),c.klass.selectYear+" browser-default",(a?"":"disabled")+" "+f.ariaAttr({controls:b.$node[0].id+"_table"})+' title="'+c.labelYearSelect+'"')}return"raw"==d?f.node("div",e):f.node("div",e,c.klass.year)};return createDayLabel=function(){return null!=i?f.node("div",i.date):f.node("div",h.date)},createWeekdayLabel=function(){var a;a=null!=i?i.day:h.day;var b=c.weekdaysFull[a];return b},f.node("div",f.node("div",createWeekdayLabel(),"picker__weekday-display")+f.node("div",q("short_months"),c.klass.month_display)+f.node("div",createDayLabel(),c.klass.day_display)+f.node("div",r("raw"),c.klass.year_display),c.klass.date_display)+f.node("div",f.node("div",(c.selectYears?q()+r():q()+r())+p()+p(1),c.klass.header)+f.node("table",o+f.node("tbody",f.group({min:0,max:e-1,i:1,node:"tr",item:function(a){var e=c.firstDay&&0===b.create([k.year,k.month,1]).day?-7:0;return[f.group({min:d*a-k.day+e+1,max:function(){return this.min+d-1},i:1,node:"td",item:function(a){a=b.create([k.year,k.month,a+(c.firstDay?1:0)]);var d=i&&i.pick==a.pick,e=j&&j.pick==a.pick,g=l&&b.disabled(a)||a.pickn.pick,o=f.trigger(b.formats.toString,b,[c.format,a]);return[f.node("div",a.date,function(b){return b.push(k.month==a.month?c.klass.infocus:c.klass.outfocus),h.pick==a.pick&&b.push(c.klass.now),d&&b.push(c.klass.selected),e&&b.push(c.klass.highlighted),g&&b.push(c.klass.disabled),b.join(" ")}([c.klass.day]),"data-pick="+a.pick+" "+f.ariaAttr({role:"gridcell",label:o,selected:d&&b.$node.val()===o?!0:null,activedescendant:e?!0:null,disabled:g?!0:null})),"",f.ariaAttr({role:"presentation"})]}})]}})),c.klass.table,'id="'+b.$node[0].id+'_table" '+f.ariaAttr({role:"grid",controls:b.$node[0].id,readonly:!0})),c.klass.calendar_container)+f.node("div",f.node("button",c.today,"btn-flat picker__today","type=button data-pick="+h.pick+(a&&!b.disabled(h)?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.clear,"btn-flat picker__clear","type=button data-clear=1"+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id}))+f.node("button",c.close,"btn-flat picker__close","type=button data-close=true "+(a?"":" disabled")+" "+f.ariaAttr({controls:b.$node[0].id})),c.klass.footer)},c.defaults=function(a){return{labelMonthNext:"Next month",labelMonthPrev:"Previous month",labelMonthSelect:"Select a month",labelYearSelect:"Select a year",monthsFull:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdaysFull:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysLetter:["S","M","T","W","T","F","S"],today:"Today",clear:"Clear",close:"Close",format:"d mmmm, yyyy",klass:{table:a+"table",header:a+"header",date_display:a+"date-display",day_display:a+"day-display",month_display:a+"month-display",year_display:a+"year-display",calendar_container:a+"calendar-container",navPrev:a+"nav--prev",navNext:a+"nav--next",navDisabled:a+"nav--disabled",month:a+"month",year:a+"year",selectMonth:a+"select--month",selectYear:a+"select--year",weekdays:a+"weekday",day:a+"day",disabled:a+"day--disabled",selected:a+"day--selected",highlighted:a+"day--highlighted",now:a+"day--today",infocus:a+"day--infocus",outfocus:a+"day--outfocus",footer:a+"footer",buttonClear:a+"button--clear",buttonToday:a+"button--today",buttonClose:a+"button--close"}}}(a.klasses().picker+"__"),a.extend("pickadate",c)}),function(a){function b(){var b=+a(this).attr("length"),c=+a(this).val().length,d=b>=c;a(this).parent().find('span[class="character-counter"]').html(c+"/"+b),e(d,a(this))}function c(b){var c=b.parent().find('span[class="character-counter"]');c.length||(c=a("").addClass("character-counter").css("float","right").css("font-size","12px").css("height",1),b.parent().append(c))}function d(){a(this).parent().find('span[class="character-counter"]').html("")}function e(a,b){var c=b.hasClass("invalid");a&&c?b.removeClass("invalid"):a||c||(b.removeClass("valid"),b.addClass("invalid"))}a.fn.characterCounter=function(){return this.each(function(){var e=a(this),f=e.parent().find('span[class="character-counter"]');if(!f.length){var g=void 0!==e.attr("length");g&&(e.on("input",b),e.on("focus",b),e.on("blur",d),c(e))}})},a(document).ready(function(){a("input, textarea").characterCounter()})}(jQuery),function(a){var b={init:function(b){var c={time_constant:200,dist:-100,shift:0,padding:0,full_width:!1,indicators:!1,no_wrap:!1};return b=a.extend(c,b),this.each(function(){function c(){"undefined"!=typeof window.ontouchstart&&(H[0].addEventListener("touchstart",l),H[0].addEventListener("touchmove",m),H[0].addEventListener("touchend",n)),H[0].addEventListener("mousedown",l),H[0].addEventListener("mousemove",m),H[0].addEventListener("mouseup",n),H[0].addEventListener("mouseleave",n),H[0].addEventListener("click",j)}function d(a){return a.targetTouches&&a.targetTouches.length>=1?a.targetTouches[0].clientX:a.clientX}function e(a){return a.targetTouches&&a.targetTouches.length>=1?a.targetTouches[0].clientY:a.clientY}function f(a){return a>=t?a%t:0>a?f(t+a%t):a}function g(a){var c,d,e,g,h,i,j;if(p="number"==typeof a?a:p,q=Math.floor((p+s/2)/s),e=p-q*s,g=0>e?1:-1,h=-g*e*2/s,d=t>>1,b.full_width?j="translateX(0)":(j="translateX("+(H[0].clientWidth-item_width)/2+"px) ",j+="translateY("+(H[0].clientHeight-item_width)/2+"px)"),I){var k=q%t,l=G.find(".indicator-item.active");l.index()!==k&&(l.removeClass("active"),G.find(".indicator-item").eq(k).addClass("active"))}for((!b.no_wrap||q>=0&&t>q)&&(i=o[f(q)],i.style[A]=j+" translateX("+-e/2+"px) translateX("+g*b.shift*h*c+"px) translateZ("+b.dist*h+"px)",i.style.zIndex=0,b.full_width?tweenedOpacity=1:tweenedOpacity=1-.2*h,i.style.opacity=tweenedOpacity,i.style.display="block"),c=1;d>=c;++c)b.full_width?(zTranslation=b.dist,tweenedOpacity=c===d&&0>e?1-h:1):(zTranslation=b.dist*(2*c+h*g),tweenedOpacity=1-.2*(2*c+h*g)),(!b.no_wrap||t>q+c)&&(i=o[f(q+c)],i.style[A]=j+" translateX("+(b.shift+(s*c-e)/2)+"px) translateZ("+zTranslation+"px)",i.style.zIndex=-c,i.style.opacity=tweenedOpacity,i.style.display="block"),b.full_width?(zTranslation=b.dist,tweenedOpacity=c===d&&e>0?1-h:1):(zTranslation=b.dist*(2*c-h*g),tweenedOpacity=1-.2*(2*c-h*g)),(!b.no_wrap||q-c>=0)&&(i=o[f(q-c)],i.style[A]=j+" translateX("+(-b.shift+(-s*c-e)/2)+"px) translateZ("+zTranslation+"px)",i.style.zIndex=-c,i.style.opacity=tweenedOpacity,i.style.display="block");(!b.no_wrap||q>=0&&t>q)&&(i=o[f(q)],i.style[A]=j+" translateX("+-e/2+"px) translateX("+g*b.shift*h+"px) translateZ("+b.dist*h+"px)",i.style.zIndex=0,b.full_width?tweenedOpacity=1:tweenedOpacity=1-.2*h,i.style.opacity=tweenedOpacity,i.style.display="block")}function h(){var a,b,c,d;a=Date.now(),b=a-C,C=a,c=p-B,B=p,d=1e3*c/(1+b),z=.8*d+.2*z}function i(){var a,c;w&&(a=Date.now()-C,c=w*Math.exp(-a/b.time_constant),c>2||-2>c?(g(x-c),requestAnimationFrame(i)):g(x))}function j(c){if(E)return c.preventDefault(),c.stopPropagation(),!1;if(!b.full_width){var d=a(c.target).closest(".carousel-item").index(),e=q%t-d;0!==e&&(c.preventDefault(),c.stopPropagation()),k(d)}}function k(a){var c=q%t-a;b.no_wrap||(0>c?Math.abs(c+t)0&&Math.abs(c-t)c?H.trigger("carouselNext",[Math.abs(c)]):c>0&&H.trigger("carouselPrev",[c])}function l(a){r=!0,E=!1,F=!1,u=d(a),v=e(a),z=w=0,B=p,C=Date.now(),clearInterval(D),D=setInterval(h,100)}function m(a){var b,c,f;if(r)if(b=d(a),y=e(a),c=u-b,f=Math.abs(v-y),30>f&&!F)(c>2||-2>c)&&(E=!0,u=b,g(p+c));else{if(E)return a.preventDefault(),a.stopPropagation(),!1;F=!0}return E?(a.preventDefault(),a.stopPropagation(),!1):void 0}function n(a){return r?(r=!1,clearInterval(D),x=p,(z>10||-10>z)&&(w=.9*z,x=p+w),x=Math.round(x/s)*s,b.no_wrap&&(x>=s*(t-1)?x=s*(t-1):0>x&&(x=0)),w=x-p,C=Date.now(),requestAnimationFrame(i),E&&(a.preventDefault(),a.stopPropagation()),!1):void 0}var o,p,q,r,s,t,u,v,w,x,z,A,B,C,D,E,F,G=a('
'),H=a(this),I=H.attr("data-indicators")||b.indicators;if(H.hasClass("initialized"))return a(this).trigger("carouselNext",[1e-6]),!0;if(b.full_width){b.dist=0;var J=H.find(".carousel-item img").first();J.length?imageHeight=J.on("load",function(){H.css("height",a(this).height())}):(imageHeight=H.find(".carousel-item").first().height(),H.css("height",imageHeight)),I&&H.find(".carousel-fixed-item").addClass("with-indicators")}H.addClass("initialized"),r=!1,p=x=0,o=[],item_width=H.find(".carousel-item").first().innerWidth(),s=2*item_width+b.padding,H.find(".carousel-item").each(function(b){if(o.push(a(this)[0]),I){var c=a('');0===b&&c.addClass("active"),c.click(function(){var b=a(this).index();k(b)}),G.append(c)}}),I&&H.append(G),t=o.length,A="transform",["webkit","Moz","O","ms"].every(function(a){var b=a+"Transform";return"undefined"!=typeof document.body.style[b]?(A=b,!1):!0}),window.onresize=g,c(),g(p),a(this).on("carouselNext",function(a,b){void 0===b&&(b=1),x=p+s*b,p!==x&&(w=x-p,C=Date.now(),requestAnimationFrame(i))}),a(this).on("carouselPrev",function(a,b){void 0===b&&(b=1),x=p-s*b,p!==x&&(w=x-p,C=Date.now(),requestAnimationFrame(i))}),a(this).on("carouselSet",function(a,b){void 0===b&&(b=0),k(b)})})},next:function(b){a(this).trigger("carouselNext",[b])},prev:function(b){a(this).trigger("carouselPrev",[b])},set:function(b){a(this).trigger("carouselSet",[b])}};a.fn.carousel=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?void a.error("Method "+c+" does not exist on jQuery.carousel"):b.init.apply(this,arguments)}}(jQuery);
\ No newline at end of file
diff --git a/params.json b/params.json
deleted file mode 100644
index 27acd95..0000000
--- a/params.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "GloSC",
- "tagline": "Tool for using the SteamController as systemwide XInput controller alongside a global overlay",
- "body": "# GloSC\r\n\r\nGlosSC or Global SteamController is a small set of tools that allows you to use your SteamController as a systemwide XInput-controller alongside a systemwide (borderless window) Steam overlay\r\nAll complete with **per application bindings and working rumble emulation.**\r\n\r\nGloSC can also launch any of your favorite Games and directly add them to Steam, be it Win32 or UWP!\r\n\r\nIt is **the tool** to enjoy any Game that has trouble with Steam and add extra functionality to your SteamController\r\n\r\n```\r\n```\r\n\r\n## FAQ / Troubleshooting\r\n\r\n* **Q: The overlay isn't showing up!**\r\n A: The overlay only works for windowed or borderless windowed mode applications. Nothing much I can do here.\r\n This is even true for UWP-Games! While it's true that UWP doesn't run exclusive fullscreen, they don't run, strictly speaking, classical borderless window either\r\n Try running your games as borderless window\r\n \r\n* **Q: Audio turns off when using this**\r\n A: ViGEm emulates a full X360-controller incl. peripherals\r\n Go to your windows sound mixer and reset you default playback device - It should be fixed, even for the next shortcut launches\r\n\r\n* **Q: Hitting the Steam Button + RT to take a screenshot doesn't work**\r\n A: Another limitation that most likely won't be fixed, even if Steam would take a screenshot, you'd most likely get just a blank image\r\n\r\n* **Q: UWP Games don't launch in foreground**\r\n A: For some reason trying to launch them in foreground stops them fron launching entirely\r\n For now use alt+tab via Steam-chords\r\n This is currently beeing investigated\r\n \r\n* **Q: When using big picture the controller switches to desktop-config**\r\n A: Don't really know why this is happening\r\n For now launch your GloSC shortcuts via Steam desktop mode\r\n This is currently beeing investigated\r\n\r\n```\r\n```\r\n\r\nIt is built using [Qt 5.7](https://www.qt.io/) and uses [SFML](http://www.sfml-dev.org/) for drawing the overlay\r\n\r\nThe systemwide Xbox-Controller works via [ViGEm](https://github.com/nefarius/ViGEm)\r\n\r\nGloSC consists of:\r\n \r\n * A main application (\"GloSC\") allowing you to create and configure new shortcuts or \"SteamTargets\" and automatically add them to Steam\r\n * The \"GloSC-GameLauncher\" which can launch Win32 and UWP games and mainly exists to work around dual overlays\r\n * The \"SteamTarget\" which does most of the magic - Showing the overlay to the user as well as talking to the ViGEm-driver for systemwide Controller emulation\r\n\r\n \r\nLike my stuff? Consider donating to my [PayPal](https://www.paypal.me/Flatspotpics)\r\n\r\n_Work in progress_\r\n\r\n\r\n## License\r\n\r\n```\r\nCopyright 2016 Peter Repukat - FlatspotSoftware\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\nhttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n```\r\n",
- "note": "Don't delete this file! It's used internally to help with page regeneration."
-}
\ No newline at end of file
diff --git a/stylesheets/github-light.css b/stylesheets/github-light.css
deleted file mode 100644
index 0c6b24d..0000000
--- a/stylesheets/github-light.css
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 GitHub, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-.pl-c /* comment */ {
- color: #969896;
-}
-
-.pl-c1 /* constant, variable.other.constant, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header */,
-.pl-s .pl-v /* string variable */ {
- color: #0086b3;
-}
-
-.pl-e /* entity */,
-.pl-en /* entity.name */ {
- color: #795da3;
-}
-
-.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
-.pl-s .pl-s1 /* string source */ {
- color: #333;
-}
-
-.pl-ent /* entity.name.tag */ {
- color: #63a35c;
-}
-
-.pl-k /* keyword, storage, storage.type */ {
- color: #a71d5d;
-}
-
-.pl-s /* string */,
-.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
-.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
-.pl-sr /* string.regexp */,
-.pl-sr .pl-cce /* string.regexp constant.character.escape */,
-.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
-.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
- color: #183691;
-}
-
-.pl-v /* variable */ {
- color: #ed6a43;
-}
-
-.pl-id /* invalid.deprecated */ {
- color: #b52a1d;
-}
-
-.pl-ii /* invalid.illegal */ {
- color: #f8f8f8;
- background-color: #b52a1d;
-}
-
-.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
- font-weight: bold;
- color: #63a35c;
-}
-
-.pl-ml /* markup.list */ {
- color: #693a17;
-}
-
-.pl-mh /* markup.heading */,
-.pl-mh .pl-en /* markup.heading entity.name */,
-.pl-ms /* meta.separator */ {
- font-weight: bold;
- color: #1d3e81;
-}
-
-.pl-mq /* markup.quote */ {
- color: #008080;
-}
-
-.pl-mi /* markup.italic */ {
- font-style: italic;
- color: #333;
-}
-
-.pl-mb /* markup.bold */ {
- font-weight: bold;
- color: #333;
-}
-
-.pl-md /* markup.deleted, meta.diff.header.from-file */ {
- color: #bd2c00;
- background-color: #ffecec;
-}
-
-.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
- color: #55a532;
- background-color: #eaffea;
-}
-
-.pl-mdr /* meta.diff.range */ {
- font-weight: bold;
- color: #795da3;
-}
-
-.pl-mo /* meta.output */ {
- color: #1d3e81;
-}
-
diff --git a/stylesheets/normalize.css b/stylesheets/normalize.css
deleted file mode 100644
index 30366a6..0000000
--- a/stylesheets/normalize.css
+++ /dev/null
@@ -1,424 +0,0 @@
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-/**
- * 1. Set default font family to sans-serif.
- * 2. Prevent iOS text size adjust after orientation change, without disabling
- * user zoom.
- */
-
-html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-
-/**
- * Remove default margin.
- */
-
-body {
- margin: 0;
-}
-
-/* HTML5 display definitions
- ========================================================================== */
-
-/**
- * Correct `block` display not defined for any HTML5 element in IE 8/9.
- * Correct `block` display not defined for `details` or `summary` in IE 10/11
- * and Firefox.
- * Correct `block` display not defined for `main` in IE 11.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-/**
- * 1. Correct `inline-block` display not defined in IE 8/9.
- * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
- */
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block; /* 1 */
- vertical-align: baseline; /* 2 */
-}
-
-/**
- * Prevent modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-/**
- * Address `[hidden]` styling not present in IE 8/9/10.
- * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
- */
-
-[hidden],
-template {
- display: none;
-}
-
-/* Links
- ========================================================================== */
-
-/**
- * Remove the gray background color from active links in IE 10.
- */
-
-a {
- background-color: transparent;
-}
-
-/**
- * Improve readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-/* Text-level semantics
- ========================================================================== */
-
-/**
- * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
- */
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-/**
- * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
- */
-
-b,
-strong {
- font-weight: bold;
-}
-
-/**
- * Address styling not present in Safari and Chrome.
- */
-
-dfn {
- font-style: italic;
-}
-
-/**
- * Address variable `h1` font-size and margin within `section` and `article`
- * contexts in Firefox 4+, Safari, and Chrome.
- */
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-/**
- * Address styling not present in IE 8/9.
- */
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-/**
- * Address inconsistent and variable font size in all browsers.
- */
-
-small {
- font-size: 80%;
-}
-
-/**
- * Prevent `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-/* Embedded content
- ========================================================================== */
-
-/**
- * Remove border when inside `a` element in IE 8/9/10.
- */
-
-img {
- border: 0;
-}
-
-/**
- * Correct overflow not hidden in IE 9/10/11.
- */
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-/* Grouping content
- ========================================================================== */
-
-/**
- * Address margin not present in IE 8/9 and Safari.
- */
-
-figure {
- margin: 1em 40px;
-}
-
-/**
- * Address differences between Firefox and other browsers.
- */
-
-hr {
- box-sizing: content-box;
- height: 0;
-}
-
-/**
- * Contain overflow in all browsers.
- */
-
-pre {
- overflow: auto;
-}
-
-/**
- * Address odd `em`-unit font size rendering in all browsers.
- */
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-/* Forms
- ========================================================================== */
-
-/**
- * Known limitation: by default, Chrome and Safari on OS X allow very limited
- * styling of `select`, unless a `border` property is set.
- */
-
-/**
- * 1. Correct color not being inherited.
- * Known issue: affects color of disabled elements.
- * 2. Correct font properties not being inherited.
- * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
- */
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit; /* 1 */
- font: inherit; /* 2 */
- margin: 0; /* 3 */
-}
-
-/**
- * Address `overflow` set to `hidden` in IE 8/9/10/11.
- */
-
-button {
- overflow: visible;
-}
-
-/**
- * Address inconsistent `text-transform` inheritance for `button` and `select`.
- * All other form control elements do not inherit `text-transform` values.
- * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
- * Correct `select` style inheritance in Firefox.
- */
-
-button,
-select {
- text-transform: none;
-}
-
-/**
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- * and `video` controls.
- * 2. Correct inability to style clickable `input` types in iOS.
- * 3. Improve usability and consistency of cursor style between image-type
- * `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; /* 2 */
- cursor: pointer; /* 3 */
-}
-
-/**
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-/**
- * Remove inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-/**
- * Address Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-input {
- line-height: normal;
-}
-
-/**
- * It's recommended that you don't attempt to style these elements.
- * Firefox's implementation doesn't respect box-sizing, padding, or width.
- *
- * 1. Address box sizing set to `content-box` in IE 8/9/10.
- * 2. Remove excess padding in IE 8/9/10.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Fix the cursor style for Chrome's increment/decrement buttons. For certain
- * `font-size` values of the `input`, it causes the cursor style of the
- * decrement button to change from `default` to `text`.
- */
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-/**
- * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
- * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
- * (include `-moz` to future-proof).
- */
-
-input[type="search"] {
- -webkit-appearance: textfield; /* 1 */ /* 2 */
- box-sizing: content-box;
-}
-
-/**
- * Remove inner padding and search cancel button in Safari and Chrome on OS X.
- * Safari (but not Chrome) clips the cancel button when the search input has
- * padding (and `textfield` appearance).
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/**
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-/**
- * 1. Correct `color` not being inherited in IE 8/9/10/11.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
- border: 0; /* 1 */
- padding: 0; /* 2 */
-}
-
-/**
- * Remove default vertical scrollbar in IE 8/9/10/11.
- */
-
-textarea {
- overflow: auto;
-}
-
-/**
- * Don't inherit the `font-weight` (applied by a rule above).
- * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
- */
-
-optgroup {
- font-weight: bold;
-}
-
-/* Tables
- ========================================================================== */
-
-/**
- * Remove most spacing between table cells.
- */
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
deleted file mode 100644
index 6bde749..0000000
--- a/stylesheets/stylesheet.css
+++ /dev/null
@@ -1,246 +0,0 @@
-* {
- box-sizing: border-box; }
-
-body {
- padding: 0;
- margin: 0;
- font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 16px;
- line-height: 1.5;
- color: #606c71; }
-
-a {
- color: #1e6bb8;
- text-decoration: none; }
- a:hover {
- text-decoration: underline; }
-
-.btn {
- display: inline-block;
- margin-bottom: 1rem;
- color: rgba(255, 255, 255, 0.7);
- background-color: rgba(255, 255, 255, 0.08);
- border-color: rgba(255, 255, 255, 0.2);
- border-style: solid;
- border-width: 1px;
- border-radius: 0.3rem;
- transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
- .btn + .btn {
- margin-left: 1rem; }
-
-.btn:hover {
- color: rgba(255, 255, 255, 0.8);
- text-decoration: none;
- background-color: rgba(255, 255, 255, 0.2);
- border-color: rgba(255, 255, 255, 0.3); }
-
-@media screen and (min-width: 64em) {
- .btn {
- padding: 0.75rem 1rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .btn {
- padding: 0.6rem 0.9rem;
- font-size: 0.9rem; } }
-
-@media screen and (max-width: 42em) {
- .btn {
- display: block;
- width: 100%;
- padding: 0.75rem;
- font-size: 0.9rem; }
- .btn + .btn {
- margin-top: 1rem;
- margin-left: 0; } }
-
-.page-header {
- color: #fff;
- text-align: center;
- background-color: #138db9;
- background-image: linear-gradient(120deg, #138db9, #081226); }
-
-
-@media screen and (min-width: 64em) {
- .page-header {
- padding: 5rem 6rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .page-header {
- padding: 3rem 4rem; } }
-
-@media screen and (max-width: 42em) {
- .page-header {
- padding: 2rem 1rem; } }
-
-.project-name {
- margin-top: 0;
- margin-bottom: 0.1rem; }
-
-@media screen and (min-width: 64em) {
- .project-name {
- font-size: 3.25rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .project-name {
- font-size: 2.25rem; } }
-
-@media screen and (max-width: 42em) {
- .project-name {
- font-size: 1.75rem; } }
-
-.project-tagline {
- margin-bottom: 2rem;
- font-weight: normal;
- opacity: 0.7; }
-
-@media screen and (min-width: 64em) {
- .project-tagline {
- font-size: 1.25rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .project-tagline {
- font-size: 1.15rem; } }
-
-@media screen and (max-width: 42em) {
- .project-tagline {
- font-size: 1rem; } }
-
-.main-content :first-child {
- margin-top: 0; }
-.main-content img {
- max-width: 100%; }
-.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {
- margin-top: 2rem;
- margin-bottom: 1rem;
- font-weight: normal;
- color: #159957; }
-.main-content p {
- margin-bottom: 1em; }
-.main-content code {
- padding: 2px 4px;
- font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
- font-size: 0.9rem;
- color: #383e41;
- background-color: #f3f6fa;
- border-radius: 0.3rem; }
-.main-content pre {
- padding: 0.8rem;
- margin-top: 0;
- margin-bottom: 1rem;
- font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
- color: #567482;
- word-wrap: normal;
- background-color: #f3f6fa;
- border: solid 1px #dce6f0;
- border-radius: 0.3rem; }
- .main-content pre > code {
- padding: 0;
- margin: 0;
- font-size: 0.9rem;
- color: #567482;
- word-break: normal;
- white-space: pre;
- background: transparent;
- border: 0; }
-.main-content .highlight {
- margin-bottom: 1rem; }
- .main-content .highlight pre {
- margin-bottom: 0;
- word-break: normal; }
-.main-content .highlight pre, .main-content pre {
- padding: 0.8rem;
- overflow: auto;
- font-size: 0.9rem;
- line-height: 1.45;
- border-radius: 0.3rem; }
-.main-content pre code, .main-content pre tt {
- display: inline;
- max-width: initial;
- padding: 0;
- margin: 0;
- overflow: initial;
- line-height: inherit;
- word-wrap: normal;
- background-color: transparent;
- border: 0; }
- .main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {
- content: normal; }
-.main-content ul, .main-content ol {
- margin-top: 0; }
-.main-content blockquote {
- padding: 0 1rem;
- margin-left: 0;
- color: #819198;
- border-left: 0.3rem solid #dce6f0; }
- .main-content blockquote > :first-child {
- margin-top: 0; }
- .main-content blockquote > :last-child {
- margin-bottom: 0; }
-.main-content table {
- display: block;
- width: 100%;
- overflow: auto;
- word-break: normal;
- word-break: keep-all; }
- .main-content table th {
- font-weight: bold; }
- .main-content table th, .main-content table td {
- padding: 0.5rem 1rem;
- border: 1px solid #e9ebec; }
-.main-content dl {
- padding: 0; }
- .main-content dl dt {
- padding: 0;
- margin-top: 1rem;
- font-size: 1rem;
- font-weight: bold; }
- .main-content dl dd {
- padding: 0;
- margin-bottom: 1rem; }
-.main-content hr {
- height: 2px;
- padding: 0;
- margin: 1rem 0;
- background-color: #eff0f1;
- border: 0; }
-
-@media screen and (min-width: 64em) {
- .main-content {
- max-width: 64rem;
- padding: 2rem 6rem;
- margin: 0 auto;
- font-size: 1.1rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .main-content {
- padding: 2rem 4rem;
- font-size: 1.1rem; } }
-
-@media screen and (max-width: 42em) {
- .main-content {
- padding: 2rem 1rem;
- font-size: 1rem; } }
-
-.site-footer {
- padding-top: 2rem;
- margin-top: 2rem;
- border-top: solid 1px #eff0f1; }
-
-.site-footer-owner {
- display: block;
- font-weight: bold; }
-
-.site-footer-credits {
- color: #819198; }
-
-@media screen and (min-width: 64em) {
- .site-footer {
- font-size: 1rem; } }
-
-@media screen and (min-width: 42em) and (max-width: 64em) {
- .site-footer {
- font-size: 1rem; } }
-
-@media screen and (max-width: 42em) {
- .site-footer {
- font-size: 0.9rem; } }
').appendTo("body"),c=b[0].offsetWidth;b.css("overflow","scroll");var d=a('').appendTo(b),e=d[0].offsetWidth;return b.remove(),c-e}function e(b,c,d){if(a.isPlainObject(c))for(var e in c)f(b,e,c[e]);else f(b,c,d)}function f(a,b,c){a.setAttribute(("role"==b?"":"aria-")+b,c)}function g(b,c){a.isPlainObject(b)||(b={attribute:c}),c="";for(var d in b){var e=("role"==d?"":"aria-")+d,f=b[d];c+=null==f?"":e+'="'+b[d]+'"'}return c}function h(){try{return document.activeElement}catch(a){}}var i=a(window),j=a(document),k=a(document.documentElement);return b.klasses=function(a){return a=a||"picker",{picker:a,opened:a+"--opened",focused:a+"--focused",input:a+"__input",active:a+"__input--active",target:a+"__input--target",holder:a+"__holder",frame:a+"__frame",wrap:a+"__wrap",box:a+"__box"}},b._={group:function(a){for(var c,d="",e=b._.trigger(a.min,a);e<=b._.trigger(a.max,a,[e]);e+=a.i)c=b._.trigger(a.item,a,[e]),d+=b._.node(a.node,c[0],c[1],c[2]);return d},node:function(b,c,d,e){return c?(c=a.isArray(c)?c.join(""):c,d=d?' class="'+d+'"':"",e=e?" "+e:"","<"+b+d+e+">"+c+""+b+">"):""},lead:function(a){return(10>a?"0":"")+a},trigger:function(a,b,c){return"function"==typeof a?a.apply(b,c||[]):a},digits:function(a){return/\d/.test(a[1])?2:1},isDate:function(a){return{}.toString.call(a).indexOf("Date")>-1&&this.isInteger(a.getDate())},isInteger:function(a){return{}.toString.call(a).indexOf("Number")>-1&&a%1===0},ariaAttr:g},b.extend=function(c,d){a.fn[c]=function(e,f){var g=this.data(c);return"picker"==e?g:g&&"string"==typeof e?b._.trigger(g[e],g,[f]):this.each(function(){var f=a(this);f.data(c)||new b(this,c,d,e)})},a.fn[c].defaults=d.defaults},b}),function(a){"function"==typeof define&&define.amd?define(["picker","jquery"],a):"object"==typeof exports?module.exports=a(require("./picker.js"),require("jquery")):a(Picker,jQuery)}(function(a,b){function c(a,b){var c=this,d=a.$node[0],e=d.value,f=a.$node.data("value"),g=f||e,h=f?b.formatSubmit:b.format,i=function(){return d.currentStyle?"rtl"==d.currentStyle.direction:"rtl"==getComputedStyle(a.$root[0]).direction};c.settings=b,c.$node=a.$node,c.queue={min:"measure create",max:"measure create",now:"now create",select:"parse create validate",highlight:"parse navigate create validate",view:"parse create validate viewset",disable:"deactivate",enable:"activate"},c.item={},c.item.clear=null,c.item.disable=(b.disable||[]).slice(0),c.item.enable=-function(a){return a[0]===!0?a.shift():-1}(c.item.disable),c.set("min",b.min).set("max",b.max).set("now"),g?c.set("select",g,{format:h}):c.set("select",null).set("highlight",c.item.now),c.key={40:7,38:-7,39:function(){return i()?-1:1},37:function(){return i()?1:-1},go:function(a){var b=c.item.highlight,d=new Date(b.year,b.month,b.date+a);c.set("highlight",d,{interval:a}),this.render()}},a.on("render",function(){a.$root.find("."+b.klass.selectMonth).on("change",function(){var c=this.value;c&&(a.set("highlight",[a.get("view").year,c,a.get("highlight").date]),a.$root.find("."+b.klass.selectMonth).trigger("focus"))}),a.$root.find("."+b.klass.selectYear).on("change",function(){var c=this.value;c&&(a.set("highlight",[c,a.get("view").month,a.get("highlight").date]),a.$root.find("."+b.klass.selectYear).trigger("focus"))})},1).on("open",function(){var d="";c.disabled(c.get("now"))&&(d=":not(."+b.klass.buttonToday+")"),a.$root.find("button"+d+", select").attr("disabled",!1)},1).on("close",function(){a.$root.find("button, select").attr("disabled",!0)},1)}var d=7,e=6,f=a._;c.prototype.set=function(a,b,c){var d=this,e=d.item;return null===b?("clear"==a&&(a="select"),e[a]=b,d):(e["enable"==a?"disable":"flip"==a?"enable":a]=d.queue[a].split(" ").map(function(e){return b=d[e](a,b,c)}).pop(),"select"==a?d.set("highlight",e.select,c):"highlight"==a?d.set("view",e.highlight,c):a.match(/^(flip|min|max|disable|enable)$/)&&(e.select&&d.disabled(e.select)&&d.set("select",e.select,c),e.highlight&&d.disabled(e.highlight)&&d.set("highlight",e.highlight,c)),d)},c.prototype.get=function(a){return this.item[a]},c.prototype.create=function(a,c,d){var e,g=this;return c=void 0===c?a:c,c==-(1/0)||c==1/0?e=c:b.isPlainObject(c)&&f.isInteger(c.pick)?c=c.obj:b.isArray(c)?(c=new Date(c[0],c[1],c[2]),c=f.isDate(c)?c:g.create().obj):c=f.isInteger(c)||f.isDate(c)?g.normalize(new Date(c),d):g.now(a,c,d),{year:e||c.getFullYear(),month:e||c.getMonth(),date:e||c.getDate(),day:e||c.getDay(),obj:e||c,pick:e||c.getTime()}},c.prototype.createRange=function(a,c){var d=this,e=function(a){return a===!0||b.isArray(a)||f.isDate(a)?d.create(a):a};return f.isInteger(a)||(a=e(a)),f.isInteger(c)||(c=e(c)),f.isInteger(a)&&b.isPlainObject(c)?a=[c.year,c.month,c.date+a]:f.isInteger(c)&&b.isPlainObject(a)&&(c=[a.year,a.month,a.date+c]),{from:e(a),to:e(c)}},c.prototype.withinRange=function(a,b){return a=this.createRange(a.from,a.to),b.pick>=a.from.pick&&b.pick<=a.to.pick},c.prototype.overlapRanges=function(a,b){var c=this;return a=c.createRange(a.from,a.to),b=c.createRange(b.from,b.to),c.withinRange(a,b.from)||c.withinRange(a,b.to)||c.withinRange(b,a.from)||c.withinRange(b,a.to)},c.prototype.now=function(a,b,c){return b=new Date,c&&c.rel&&b.setDate(b.getDate()+c.rel),this.normalize(b,c)},c.prototype.navigate=function(a,c,d){var e,f,g,h,i=b.isArray(c),j=b.isPlainObject(c),k=this.item.view;if(i||j){for(j?(f=c.year,g=c.month,h=c.date):(f=+c[0],g=+c[1],h=+c[2]),d&&d.nav&&k&&k.month!==g&&(f=k.year,g=k.month),e=new Date(f,g+(d&&d.nav?d.nav:0),1),f=e.getFullYear(),g=e.getMonth();new Date(f,g,h).getMonth()!==g;)h-=1;c=[f,g,h]}return c},c.prototype.normalize=function(a){return a.setHours(0,0,0,0),a},c.prototype.measure=function(a,b){var c=this;return b?"string"==typeof b?b=c.parse(a,b):f.isInteger(b)&&(b=c.now(a,b,{rel:b})):b="min"==a?-(1/0):1/0,b},c.prototype.viewset=function(a,b){return this.create([b.year,b.month,1])},c.prototype.validate=function(a,c,d){var e,g,h,i,j=this,k=c,l=d&&d.interval?d.interval:1,m=-1===j.item.enable,n=j.item.min,o=j.item.max,p=m&&j.item.disable.filter(function(a){if(b.isArray(a)){var d=j.create(a).pick;d