\").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,\"position\"),l=m(a),n={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=m.css(a,\"top\"),i=m.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&m.inArray(\"auto\",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),\"using\"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===m.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=m.css(a[0],\"borderTopWidth\",!0),c.left+=m.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-m.css(d,\"marginTop\",!0),left:b.left-c.left-m.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,\"html\")&&\"static\"===m.css(a,\"position\"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each([\"top\",\"left\"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+\"px\":c):void 0})}),m.each({Height:\"height\",Width:\"width\"},function(a,b){m.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||\"boolean\"!=typeof d),g=c||(d===!0||e===!0?\"margin\":\"border\");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement[\"client\"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body[\"scroll\"+a],e[\"scroll\"+a],b.body[\"offset\"+a],e[\"offset\"+a],e[\"client\"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});\r\n","/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */\r\njQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn(\"JQMIGRATE: \"+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log(\"JQMIGRATE: Logging is active\"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},\"BackCompat\"===document.compatMode&&r(\"jQuery is not compatible with Quirks Mode\");var o=e(\"\",{size:1}).attr(\"size\")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,\"attrFn\",o||{},\"jQuery.attrFn is deprecated\"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r(\"jQuery.fn.attr( props, pass ) is deprecated\"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):(\"type\"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r(\"Can't change the 'type' of an input or button in IE 6/7/8\"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||\"boolean\"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r(\"jQuery.fn.attr('\"+c+\"') may use property instead of attribute\")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||\"\").toLowerCase();return\"button\"===n?u.apply(this,arguments):(\"input\"!==n&&\"option\"!==n&&r(\"jQuery.fn.attr('value') no longer gets properties\"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||\"\").toLowerCase();return\"button\"===a?c.apply(this,arguments):(\"input\"!==a&&\"option\"!==a&&r(\"jQuery.fn.attr('value', val) no longer sets properties\"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\\w\\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&\"string\"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&(\"<\"!==t.charAt(0)&&r(\"$(html) HTML strings must start with '<' character\"),i[3]&&r(\"$(html) HTML text after last tag is ignored\"),\"#\"===i[0].charAt(0)&&(r(\"HTML string cannot start with a '#' character\"),e.error(\"JQMIGRATE: Invalid selector string (XSS)\")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r(\"jQuery.parseJSON requires a valid JSON string\"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \\/]([\\w.]+)/.exec(e)||/(webkit)[ \\/]([\\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(e)||/(msie) ([\\w.]+)/.exec(e)||0>e.indexOf(\"compatible\")&&/(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(e)||[];return{browser:t[1]||\"\",version:t[2]||\"0\"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,\"browser\",e.browser,\"jQuery.browser is deprecated\"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r(\"jQuery.sub() is deprecated\"),t},e.ajaxSetup({converters:{\"text json\":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||\"events\"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r(\"Use of jQuery.fn.data('events') is deprecated\"),i)};var j=/\\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r(\"jQuery.fn.andSelf() replaced by jQuery.fn.addBack()\"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r(\"jQuery.clean() is deprecated\");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,\"script\")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName(\"script\")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S=\"ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess\",C=RegExp(\"\\\\b(?:\"+S+\")\\\\b\"),H=/(?:^|\\s)hover(\\.\\S+|)\\b/,A=function(t){return\"string\"!=typeof t||e.event.special.hover?t:(H.test(t)&&r(\"'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'\"),t&&t.replace(H,\"mouseenter$1 mouseleave$1\"))};e.event.props&&\"attrChange\"!==e.event.props[0]&&e.event.props.unshift(\"attrChange\",\"attrName\",\"relatedNode\",\"srcElement\"),e.event.dispatch&&a(e.event,\"handle\",e.event.dispatch,\"jQuery.event.handle is undocumented and deprecated\"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r(\"AJAX events should be attached to document: \"+t),Q.call(this,e,A(t||\"\"),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||\"\",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r(\"jQuery.fn.error() is deprecated\"),e.splice(0,0,\"error\"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r(\"jQuery.fn.toggle(handler, handler...) is deprecated\");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,\"lastToggle\"+t.guid)||0)%o;return e._data(this,\"lastToggle\"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r(\"jQuery.fn.live() is deprecated\"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r(\"jQuery.fn.die() is deprecated\"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||\"**\",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r(\"Global events are undocumented and deprecated\"),k.call(this,e,t,n||document,a)},e.each(S.split(\"|\"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+\".\"+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+\".\"+e._data(this,n)),!1}}})}(jQuery,window);","/*!\r\n * jQuery Cookie Plugin v1.4.1\r\n * https://github.com/carhartl/jquery-cookie\r\n *\r\n * Copyright 2006, 2014 Klaus Hartl\r\n * Released under the MIT license\r\n */\r\n(function (factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD (Register as an anonymous module)\r\n\t\tdefine(['jquery'], factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\t// Node/CommonJS\r\n\t\tmodule.exports = factory(require('jquery'));\r\n\t} else {\r\n\t\t// Browser globals\r\n\t\tfactory(jQuery);\r\n\t}\r\n}(function ($) {\r\n\r\n\tvar pluses = /\\+/g;\r\n\r\n\tfunction encode(s) {\r\n\t\treturn config.raw ? s : encodeURIComponent(s);\r\n\t}\r\n\r\n\tfunction decode(s) {\r\n\t\treturn config.raw ? s : decodeURIComponent(s);\r\n\t}\r\n\r\n\tfunction stringifyCookieValue(value) {\r\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\r\n\t}\r\n\r\n\tfunction parseCookieValue(s) {\r\n\t\tif (s.indexOf('\"') === 0) {\r\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\r\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// Replace server-side written pluses with spaces.\r\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\r\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\r\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\r\n\t\t\treturn config.json ? JSON.parse(s) : s;\r\n\t\t} catch(e) {}\r\n\t}\r\n\r\n\tfunction read(s, converter) {\r\n\t\tvar value = config.raw ? s : parseCookieValue(s);\r\n\t\treturn $.isFunction(converter) ? converter(value) : value;\r\n\t}\r\n\r\n\tvar config = $.cookie = function (key, value, options) {\r\n\r\n\t\t// Write\r\n\r\n\t\tif (arguments.length > 1 && !$.isFunction(value)) {\r\n\t\t\toptions = $.extend({}, config.defaults, options);\r\n\r\n\t\t\tif (typeof options.expires === 'number') {\r\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\r\n\t\t\t\tt.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n\t\t\t}\r\n\r\n\t\t\treturn (document.cookie = [\r\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\r\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\r\n\t\t\t\toptions.path ? '; path=' + options.path : '',\r\n\t\t\t\toptions.domain ? '; domain=' + options.domain : '',\r\n\t\t\t\toptions.secure ? '; secure' : ''\r\n\t\t\t].join(''));\r\n\t\t}\r\n\r\n\t\t// Read\r\n\r\n\t\tvar result = key ? undefined : {},\r\n\t\t\t// To prevent the for loop in the first place assign an empty array\r\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\r\n\t\t\t// calling $.cookie().\r\n\t\t\tcookies = document.cookie ? document.cookie.split('; ') : [],\r\n\t\t\ti = 0,\r\n\t\t\tl = cookies.length;\r\n\r\n\t\tfor (; i < l; i++) {\r\n\t\t\tvar parts = cookies[i].split('='),\r\n\t\t\t\tname = decode(parts.shift()),\r\n\t\t\t\tcookie = parts.join('=');\r\n\r\n\t\t\tif (key === name) {\r\n\t\t\t\t// If second argument (value) is a function it's a converter...\r\n\t\t\t\tresult = read(cookie, value);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// Prevent storing a cookie that we couldn't decode.\r\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\r\n\t\t\t\tresult[name] = cookie;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tconfig.defaults = {};\r\n\r\n\t$.removeCookie = function (key, options) {\r\n\t\t// Must not alter options, thus extending a fresh object...\r\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\r\n\t\treturn !$.cookie(key);\r\n\t};\r\n\r\n}));\r\n","// jQuery Mask Plugin v1.11.4\r\n// github.com/igorescobar/jQuery-Mask-Plugin\r\n(function(b){\"function\"===typeof define&&define.amd?define([\"jquery\"],b):\"object\"===typeof exports?module.exports=b(require(\"jquery\")):b(jQuery||Zepto)})(function(b){var y=function(a,d,e){a=b(a);var g=this,k=a.val(),l;d=\"function\"===typeof d?d(a.val(),void 0,a,e):d;var c={invalid:[],getCaret:function(){try{var q,v=0,b=a.get(0),f=document.selection,c=b.selectionStart;if(f&&-1===navigator.appVersion.indexOf(\"MSIE 10\"))q=f.createRange(),q.moveStart(\"character\",a.is(\"input\")?-a.val().length:-a.text().length),\r\nv=q.text.length;else if(c||\"0\"===c)v=c;return v}catch(d){}},setCaret:function(q){try{if(a.is(\":focus\")){var b,c=a.get(0);c.setSelectionRange?c.setSelectionRange(q,q):c.createTextRange&&(b=c.createTextRange(),b.collapse(!0),b.moveEnd(\"character\",q),b.moveStart(\"character\",q),b.select())}}catch(f){}},events:function(){a.on(\"keyup.mask\",c.behaviour).on(\"paste.mask drop.mask\",function(){setTimeout(function(){a.keydown().keyup()},100)}).on(\"change.mask\",function(){a.data(\"changed\",!0)}).on(\"blur.mask\",\r\nfunction(){k===a.val()||a.data(\"changed\")||a.triggerHandler(\"change\");a.data(\"changed\",!1)}).on(\"keydown.mask, blur.mask\",function(){k=a.val()}).on(\"focus.mask\",function(a){!0===e.selectOnFocus&&b(a.target).select()}).on(\"focusout.mask\",function(){e.clearIfNotMatch&&!l.test(c.val())&&c.val(\"\")})},getRegexMask:function(){for(var a=[],b,c,f,e,h=0;h\").attr(\"name\",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!(c.settings.submitHandler&&!c.settings.debug)||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is(\"form\")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0],k=\"undefined\"!=typeof this.attr(\"contenteditable\")&&\"false\"!==this.attr(\"contenteditable\");if(null!=j&&(!j.form&&k&&(j.form=this.closest(\"form\")[0],j.name=this.attr(\"name\")),null!=j.form)){if(b)switch(d=a.data(j.form,\"validator\").settings,e=d.rules,f=a.validator.staticRules(j),b){case\"add\":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case\"remove\":return c?(i={},a.each(c.split(/\\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}});var b=function(a){return a.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")};a.extend(a.expr.pseudos||a.expr[\":\"],{blank:function(c){return!b(\"\"+a(c).val())},filled:function(c){var d=a(c).val();return null!==d&&!!b(\"\"+d)},unchecked:function(b){return!a(b).prop(\"checked\")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp(\"\\\\{\"+a+\"\\\\}\",\"g\"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:\"error\",pendingClass:\"pending\",validClass:\"valid\",errorElement:\"label\",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:\":hidden\",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&\"\"===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){\"radio\"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){\"radio\"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:\"This field is required.\",remote:\"Please fix this field.\",email:\"Please enter a valid email address.\",url:\"Please enter a valid URL.\",date:\"Please enter a valid date.\",dateISO:\"Please enter a valid date (ISO).\",number:\"Please enter a valid number.\",digits:\"Please enter only digits.\",equalTo:\"Please enter the same value again.\",maxlength:a.validator.format(\"Please enter no more than {0} characters.\"),minlength:a.validator.format(\"Please enter at least {0} characters.\"),rangelength:a.validator.format(\"Please enter a value between {0} and {1} characters long.\"),range:a.validator.format(\"Please enter a value between {0} and {1}.\"),max:a.validator.format(\"Please enter a value less than or equal to {0}.\"),min:a.validator.format(\"Please enter a value greater than or equal to {0}.\"),step:a.validator.format(\"Please enter a multiple of {0}.\")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=\"undefined\"!=typeof a(this).attr(\"contenteditable\")&&\"false\"!==a(this).attr(\"contenteditable\");if(!this.form&&c&&(this.form=a(this).closest(\"form\")[0],this.name=a(this).attr(\"name\")),d===this.form){var e=a.data(this.form,\"validator\"),f=\"on\"+b.type.replace(/^validate/,\"\"),g=e.settings;g[f]&&!a(this).is(g.ignore)&&g[f].call(e,this,b)}}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.currentForm,e=this.groups={};a.each(this.settings.groups,function(b,c){\"string\"==typeof c&&(c=c.split(/\\s/)),a.each(c,function(a,c){e[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on(\"focusin.validate focusout.validate keyup.validate\",\":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']\",b).on(\"click.validate\",\"select, option, [type='radio'], [type='checkbox']\",b),this.settings.invalidHandler&&a(this.currentForm).on(\"invalid-form.validate\",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler(\"invalid-form\",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr(\"aria-invalid\",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData(\"previousValue\").removeAttr(\"aria-invalid\");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,\"\"),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(\"\"),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(\":visible\").trigger(\"focus\").trigger(\"focusin\")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find(\"input, select, textarea, [contenteditable]\").not(\":submit, :reset, :image, :disabled\").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr(\"name\"),e=\"undefined\"!=typeof a(this).attr(\"contenteditable\")&&\"false\"!==a(this).attr(\"contenteditable\");return!d&&b.settings.debug&&window.console&&console.error(\"%o has no name assigned\",this),e&&(this.form=a(this).closest(\"form\")[0],this.name=d),this.form===b.currentForm&&(!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0))})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(\" \").join(\".\");return a(this.settings.errorElement+\".\"+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type,g=\"undefined\"!=typeof e.attr(\"contenteditable\")&&\"false\"!==e.attr(\"contenteditable\");return\"radio\"===f||\"checkbox\"===f?this.findByName(b.name).filter(\":checked\").val():\"number\"===f&&\"undefined\"!=typeof b.validity?b.validity.badInput?\"NaN\":e.val():(c=g?e.text():e.val(),\"file\"===f?\"C:\\\\fakepath\\\\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf(\"/\"),d>=0?c.substr(d+1):(d=c.lastIndexOf(\"\\\\\"),d>=0?c.substr(d+1):c)):\"string\"==typeof c?c.replace(/\\r/g,\"\"):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);\"function\"==typeof g.normalizer?f=g.normalizer:\"function\"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f&&(j=f.call(b,j),delete g.normalizer);for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),\"dependency-mismatch\"===c&&1===h){i=!0;continue}if(i=!1,\"pending\"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log(\"Exception occurred when checking element \"+b.id+\", check the '\"+e.method+\"' method.\",k),k instanceof TypeError&&(k.message+=\". Exception occurred when checking element \"+b.id+\", check the '\"+e.method+\"' method.\"),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data(\"msg\"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data(\"msg\")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for \"+b.name+\"\"),e=/\\$?\\{(\\d+)\\}/g;return\"function\"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,\"{$1}\"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr(\"aria-describedby\");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a(\"<\"+this.settings.errorElement+\">\").attr(\"id\",i+\"-error\").addClass(this.settings.errorClass).html(c||\"\"),d=h,this.settings.wrapper&&(d=h.hide().show().wrap(\"<\"+this.settings.wrapper+\"/>\").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is(\"label\")?h.attr(\"for\",i):0===h.parents(\"label[for='\"+this.escapeCssMeta(i)+\"']\").length&&(f=h.attr(\"id\"),j?j.match(new RegExp(\"\\\\b\"+this.escapeCssMeta(f)+\"\\\\b\"))||(j+=\" \"+f):j=f,a(b).attr(\"aria-describedby\",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a(\"[name='\"+g.escapeCssMeta(b)+\"']\",g.currentForm).attr(\"aria-describedby\",h.attr(\"id\"))})))),!c&&this.settings.success&&(h.text(\"\"),\"string\"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr(\"aria-describedby\"),e=\"label[for='\"+c+\"'], label[for='\"+c+\"'] *\";return d&&(e=e+\", #\"+this.escapeCssMeta(d).replace(/\\s+/g,\", #\")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\\\!\"#$%&'()*+,.\\/:;<=>?@\\[\\]^`{|}~])/g,\"\\\\$1\")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find(\"[name='\"+this.escapeCssMeta(b)+\"']\")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case\"select\":return a(\"option:selected\",c).length;case\"input\":if(this.checkable(c))return this.findByName(c.name).filter(\":checked\").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{\"boolean\":function(a){return a},string:function(b,c){return!!a(b,c.form).length},\"function\":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&\"dependency-mismatch\"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a(\"input:hidden[name='\"+this.submitButton.name+\"']\",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler(\"invalid-form\",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c=\"string\"==typeof c&&c||\"remote\",a.data(b,\"previousValue\")||a.data(b,\"previousValue\",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(\".validate\").removeData(\"validator\").find(\".validate-equalTo-blur\").off(\".validate-equalTo\").removeClass(\"validate-equalTo-blur\").find(\".validate-lessThan-blur\").off(\".validate-lessThan\").removeClass(\"validate-lessThan-blur\").find(\".validate-lessThanEqual-blur\").off(\".validate-lessThanEqual\").removeClass(\"validate-lessThanEqual-blur\").find(\".validate-greaterThanEqual-blur\").off(\".validate-greaterThanEqual\").removeClass(\"validate-greaterThanEqual-blur\").find(\".validate-greaterThan-blur\").off(\".validate-greaterThan\").removeClass(\"validate-greaterThan-blur\")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr(\"class\");return d&&a.each(d.split(\" \"),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&\"range\"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute(\"type\");for(c in a.validator.methods)\"required\"===c?(d=b.getAttribute(c),\"\"===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute(\"type\");for(c in a.validator.methods)d=f.data(\"rule\"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),\"\"===d&&(d=!0),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,\"validator\");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case\"string\":f=!!a(e.depends,c.form).length;break;case\"function\":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,\"validator\").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&\"normalizer\"!==d?e(c):e}),a.each([\"minlength\",\"maxlength\"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each([\"rangelength\",\"range\"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:\"string\"==typeof b[this]&&(c=b[this].replace(/[\\[\\]]/g,\"\").split(/[\\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if(\"string\"==typeof b){var c={};a.each(b.split(/\\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return\"dependency-mismatch\";if(\"select\"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:void 0!==b&&null!==b&&b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[\\/?#]\\S*)?$/i.test(a)},date:function(){var a=!1;return function(b,c){return a||(a=!0,this.settings.debug&&window.console&&console.warn(\"The `date` method is deprecated and will be removed in version '2.0.0'.\\nPlease don't use it, since it relies on the Date constructor, which\\nbehaves very differently across browsers and locales. Use `dateISO`\\ninstead or one of the locale specific methods in `localizations/`\\nand `additional-methods.js`.\")),this.optional(c)||!/Invalid|NaN/.test(new Date(b).toString())}}(),dateISO:function(a,b){return this.optional(b)||/^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr(\"type\"),g=\"Step attribute on input type \"+f+\" is not supported.\",h=[\"text\",\"number\",\"range\"],i=new RegExp(\"\\\\b\"+f+\"\\\\b\"),j=f&&!i.test(h.join()),k=function(a){var b=(\"\"+a).match(/(?:\\.(\\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(\".validate-equalTo-blur\").length&&e.addClass(\"validate-equalTo-blur\").on(\"blur.validate-equalTo\",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return\"dependency-mismatch\";e=\"string\"==typeof e&&e||\"remote\";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d=\"string\"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:\"abort\",port:\"validate\"+c.name,dataType:\"json\",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||\"true\"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),\"pending\")}}});var c,d={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,c){var e=a.port;\"abort\"===a.mode&&(d[e]&&d[e].abort(),d[e]=c)}):(c=a.ajax,a.ajax=function(b){var e=(\"mode\"in b?b:a.ajaxSettings).mode,f=(\"port\"in b?b:a.ajaxSettings).port;return\"abort\"===e?(d[f]&&d[f].abort(),d[f]=c.apply(this,arguments),d[f]):c.apply(this,arguments)}),a});","/*!\r\n * Infinite Scroll PACKAGED v3.0.6\r\n * Automatically add next page\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Infinite Scroll Commercial License for commercial use\r\n *\r\n * https://infinite-scroll.com\r\n * Copyright 2018 Metafizzy\r\n */\r\n\r\n!function(t,e){\"function\"==typeof define&&define.amd?define(\"jquery-bridget/jquery-bridget\",[\"jquery\"],function(i){return e(t,i)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"jquery\")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){\"use strict\";function i(i,r,l){function a(t,e,n){var o,r=\"$().\"+i+'(\"'+e+'\")';return t.each(function(t,a){var h=l.data(a,i);if(!h)return void s(i+\" not initialized. Cannot call methods, i.e. \"+r);var c=h[e];if(!c||\"_\"==e.charAt(0))return void s(r+\" is not a valid method\");var u=c.apply(h,n);o=void 0===o?u:o}),void 0!==o?o:t}function h(t,e){t.each(function(t,n){var o=l.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),l.data(n,i,o))})}l=l||e||t.jQuery,l&&(r.prototype.option||(r.prototype.option=function(t){l.isPlainObject(t)&&(this.options=l.extend(!0,this.options,t))}),l.fn[i]=function(t){if(\"string\"==typeof t){var e=o.call(arguments,1);return a(this,t,e)}return h(this,t),this},n(l))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s=\"undefined\"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){\"function\"==typeof define&&define.amd?define(\"ev-emitter/ev-emitter\",e):\"object\"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}(\"undefined\"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return n.indexOf(e)==-1&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return n!=-1&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o=0,this.isPrefilling?(this.log(\"prefill\"),this.loadNextPage()):this.stopPrefill()},s.getPrefillDistance=function(){return this.options.elementScroll?this.scroller.clientHeight-this.scroller.scrollHeight:this.windowHeight-this.element.clientHeight},s.stopPrefill=function(){this.log(\"stopPrefill\"),this.off(\"append\",this.prefill)},e}),function(t,e){\"function\"==typeof define&&define.amd?define(\"infinite-scroll/js/scroll-watch\",[\"./core\",\"fizzy-ui-utils/utils\"],function(i,n){return e(t,i,n)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"./core\"),require(\"fizzy-ui-utils\")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){var n=e.prototype;return e.defaults.scrollThreshold=400,e.create.scrollWatch=function(){this.pageScrollHandler=this.onPageScroll.bind(this),this.resizeHandler=this.onResize.bind(this);var t=this.options.scrollThreshold,e=t||0===t;e&&this.enableScrollWatch()},e.destroy.scrollWatch=function(){this.disableScrollWatch()},n.enableScrollWatch=function(){this.isScrollWatching||(this.isScrollWatching=!0,this.updateMeasurements(),this.updateScroller(),this.on(\"last\",this.disableScrollWatch),this.bindScrollWatchEvents(!0))},n.disableScrollWatch=function(){this.isScrollWatching&&(this.bindScrollWatchEvents(!1),delete this.isScrollWatching)},n.bindScrollWatchEvents=function(e){var i=e?\"addEventListener\":\"removeEventListener\";this.scroller[i](\"scroll\",this.pageScrollHandler),t[i](\"resize\",this.resizeHandler)},n.onPageScroll=e.throttle(function(){var t=this.getBottomDistance();t<=this.options.scrollThreshold&&this.dispatchEvent(\"scrollThreshold\")}),n.getBottomDistance=function(){return this.options.elementScroll?this.getElementBottomDistance():this.getWindowBottomDistance()},n.getWindowBottomDistance=function(){var e=this.top+this.element.clientHeight,i=t.pageYOffset+this.windowHeight;return e-i},n.getElementBottomDistance=function(){var t=this.scroller.scrollHeight,e=this.scroller.scrollTop+this.scroller.clientHeight;return t-e},n.onResize=function(){this.updateMeasurements()},i.debounceMethod(e,\"onResize\",150),e}),function(t,e){\"function\"==typeof define&&define.amd?define(\"infinite-scroll/js/history\",[\"./core\",\"fizzy-ui-utils/utils\"],function(i,n){return e(t,i,n)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"./core\"),require(\"fizzy-ui-utils\")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){var n=e.prototype;e.defaults.history=\"replace\";var o=document.createElement(\"a\");return e.create.history=function(){if(this.options.history){o.href=this.getAbsolutePath();var t=o.origin||o.protocol+\"//\"+o.host,e=t==location.origin;return e?void(this.options.append?this.createHistoryAppend():this.createHistoryPageLoad()):void console.error(\"[InfiniteScroll] cannot set history with different origin: \"+o.origin+\" on \"+location.origin+\" . History behavior disabled.\")}},n.createHistoryAppend=function(){this.updateMeasurements(),this.updateScroller(),this.scrollPages=[{top:0,path:location.href,title:document.title}],this.scrollPageIndex=0,this.scrollHistoryHandler=this.onScrollHistory.bind(this),this.unloadHandler=this.onUnload.bind(this),this.scroller.addEventListener(\"scroll\",this.scrollHistoryHandler),this.on(\"append\",this.onAppendHistory),this.bindHistoryAppendEvents(!0)},n.bindHistoryAppendEvents=function(e){var i=e?\"addEventListener\":\"removeEventListener\";this.scroller[i](\"scroll\",this.scrollHistoryHandler),t[i](\"unload\",this.unloadHandler)},n.createHistoryPageLoad=function(){this.on(\"load\",this.onPageLoadHistory)},e.destroy.history=n.destroyHistory=function(){var t=this.options.history&&this.options.append;t&&this.bindHistoryAppendEvents(!1)},n.onAppendHistory=function(t,e,i){if(i&&i.length){var n=i[0],r=this.getElementScrollY(n);o.href=e,this.scrollPages.push({top:r,path:o.href,title:t.title})}},n.getElementScrollY=function(t){return this.options.elementScroll?this.getElementElementScrollY(t):this.getElementWindowScrollY(t)},n.getElementWindowScrollY=function(e){var i=e.getBoundingClientRect();return i.top+t.pageYOffset},n.getElementElementScrollY=function(t){return t.offsetTop-this.top},n.onScrollHistory=function(){for(var t,e,i=this.getScrollViewY(),n=0;n=i)break;t=n,e=o}t!=this.scrollPageIndex&&(this.scrollPageIndex=t,this.setHistory(e.title,e.path))},i.debounceMethod(e,\"onScrollHistory\",150),n.getScrollViewY=function(){return this.options.elementScroll?this.scroller.scrollTop+this.scroller.clientHeight/2:t.pageYOffset+this.windowHeight/2},n.setHistory=function(t,e){var i=this.options.history,n=i&&history[i+\"State\"];n&&(history[i+\"State\"](null,t,e),this.options.historyTitle&&(document.title=t),this.dispatchEvent(\"history\",null,[t,e]))},n.onUnload=function(){var e=this.scrollPageIndex;if(0!==e){var i=this.scrollPages[e],n=t.pageYOffset-i.top+this.top;this.destroyHistory(),scrollTo(0,n)}},n.onPageLoadHistory=function(t,e){this.setHistory(t.title,e)},e}),function(t,e){\"function\"==typeof define&&define.amd?define(\"infinite-scroll/js/button\",[\"./core\",\"fizzy-ui-utils/utils\"],function(i,n){return e(t,i,n)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"./core\"),require(\"fizzy-ui-utils\")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){function n(t,e){this.element=t,this.infScroll=e,this.clickHandler=this.onClick.bind(this),this.element.addEventListener(\"click\",this.clickHandler),e.on(\"request\",this.disable.bind(this)),e.on(\"load\",this.enable.bind(this)),e.on(\"error\",this.hide.bind(this)),e.on(\"last\",this.hide.bind(this))}return e.create.button=function(){var t=i.getQueryElement(this.options.button);if(t)return void(this.button=new n(t,this))},e.destroy.button=function(){this.button&&this.button.destroy()},n.prototype.onClick=function(t){t.preventDefault(),this.infScroll.loadNextPage()},n.prototype.enable=function(){this.element.removeAttribute(\"disabled\")},n.prototype.disable=function(){this.element.disabled=\"disabled\"},n.prototype.hide=function(){this.element.style.display=\"none\"},n.prototype.destroy=function(){this.element.removeEventListener(\"click\",this.clickHandler)},e.Button=n,e}),function(t,e){\"function\"==typeof define&&define.amd?define(\"infinite-scroll/js/status\",[\"./core\",\"fizzy-ui-utils/utils\"],function(i,n){return e(t,i,n)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"./core\"),require(\"fizzy-ui-utils\")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){function n(t){r(t,\"none\")}function o(t){r(t,\"block\")}function r(t,e){t&&(t.style.display=e)}var s=e.prototype;return e.create.status=function(){var t=i.getQueryElement(this.options.status);t&&(this.statusElement=t,this.statusEventElements={request:t.querySelector(\".infinite-scroll-request\"),error:t.querySelector(\".infinite-scroll-error\"),last:t.querySelector(\".infinite-scroll-last\")},this.on(\"request\",this.showRequestStatus),this.on(\"error\",this.showErrorStatus),this.on(\"last\",this.showLastStatus),this.bindHideStatus(\"on\"))},s.bindHideStatus=function(t){var e=this.options.append?\"append\":\"load\";this[t](e,this.hideAllStatus)},s.showRequestStatus=function(){this.showStatus(\"request\")},s.showErrorStatus=function(){this.showStatus(\"error\")},s.showLastStatus=function(){this.showStatus(\"last\"),this.bindHideStatus(\"off\")},s.showStatus=function(t){o(this.statusElement),this.hideStatusEventElements();var e=this.statusEventElements[t];o(e)},s.hideAllStatus=function(){n(this.statusElement),this.hideStatusEventElements()},s.hideStatusEventElements=function(){for(var t in this.statusEventElements){var e=this.statusEventElements[t];n(e)}},e}),function(t,e){\"function\"==typeof define&&define.amd?define([\"infinite-scroll/js/core\",\"infinite-scroll/js/page-load\",\"infinite-scroll/js/scroll-watch\",\"infinite-scroll/js/history\",\"infinite-scroll/js/button\",\"infinite-scroll/js/status\"],e):\"object\"==typeof module&&module.exports&&(module.exports=e(require(\"./core\"),require(\"./page-load\"),require(\"./scroll-watch\"),require(\"./history\"),require(\"./button\"),require(\"./status\")))}(window,function(t){return t}),function(t,e){\"use strict\";\"function\"==typeof define&&define.amd?define(\"imagesloaded/imagesloaded\",[\"ev-emitter/ev-emitter\"],function(i){return e(t,i)}):\"object\"==typeof module&&module.exports?module.exports=e(t,require(\"ev-emitter\")):t.imagesLoaded=e(t,t.EvEmitter)}(\"undefined\"!=typeof window?window:this,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){if(Array.isArray(t))return t;var e=\"object\"==typeof t&&\"number\"==typeof t.length;return e?h.call(t):[t]}function o(t,e,r){if(!(this instanceof o))return new o(t,e,r);var s=t;return\"string\"==typeof t&&(s=document.querySelectorAll(t)),s?(this.elements=n(s),this.options=i({},this.options),\"function\"==typeof e?r=e:i(this.options,e),r&&this.on(\"always\",r),this.getImages(),l&&(this.jqDeferred=new l.Deferred),void setTimeout(this.check.bind(this))):void a.error(\"Bad element for imagesLoaded \"+(s||t))}function r(t){this.img=t}function s(t,e){this.url=t,this.element=e,this.img=new Image}var l=t.jQuery,a=t.console,h=Array.prototype.slice;o.prototype=Object.create(e.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(t){\"IMG\"==t.nodeName&&this.addImage(t),this.options.background===!0&&this.addElementBackgroundImages(t);var e=t.nodeType;if(e&&c[e]){for(var i=t.querySelectorAll(\"img\"),n=0;n -1 ) {\r\n\t\tprops = mouseEventProps;\r\n\t}\r\n\r\n\t// copy original event properties over to the new event\r\n\t// this would happen if we could call $.event.fix instead of $.Event\r\n\t// but we don't have a way to force an event to be fixed multiple times\r\n\tif ( oe ) {\r\n\t\tfor ( i = props.length, prop; i; ) {\r\n\t\t\tprop = props[ --i ];\r\n\t\t\tevent[ prop ] = oe[ prop ];\r\n\t\t}\r\n\t}\r\n\r\n\t// make sure that if the mouse and click virtual events are generated\r\n\t// without a .which one is defined\r\n\tif ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) {\r\n\t\tevent.which = 1;\r\n\t}\r\n\r\n\tif ( t.search(/^touch/) !== -1 ) {\r\n\t\tne = getNativeEvent( oe );\r\n\t\tt = ne.touches;\r\n\t\tct = ne.changedTouches;\r\n\t\ttouch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined );\r\n\r\n\t\tif ( touch ) {\r\n\t\t\tfor ( j = 0, len = touchEventProps.length; j < len; j++) {\r\n\t\t\t\tprop = touchEventProps[ j ];\r\n\t\t\t\tevent[ prop ] = touch[ prop ];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn event;\r\n}\r\n\r\nfunction getVirtualBindingFlags( element ) {\r\n\r\n\tvar flags = {},\r\n\t\tb, k;\r\n\r\n\twhile ( element ) {\r\n\r\n\t\tb = $.data( element, dataPropertyName );\r\n\r\n\t\tfor ( k in b ) {\r\n\t\t\tif ( b[ k ] ) {\r\n\t\t\t\tflags[ k ] = flags.hasVirtualBinding = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\telement = element.parentNode;\r\n\t}\r\n\treturn flags;\r\n}\r\n\r\nfunction getClosestElementWithVirtualBinding( element, eventType ) {\r\n\tvar b;\r\n\twhile ( element ) {\r\n\r\n\t\tb = $.data( element, dataPropertyName );\r\n\r\n\t\tif ( b && ( !eventType || b[ eventType ] ) ) {\r\n\t\t\treturn element;\r\n\t\t}\r\n\t\telement = element.parentNode;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction enableTouchBindings() {\r\n\tblockTouchTriggers = false;\r\n}\r\n\r\nfunction disableTouchBindings() {\r\n\tblockTouchTriggers = true;\r\n}\r\n\r\nfunction enableMouseBindings() {\r\n\tlastTouchID = 0;\r\n\tclickBlockList.length = 0;\r\n\tblockMouseTriggers = false;\r\n\r\n\t// When mouse bindings are enabled, our\r\n\t// touch bindings are disabled.\r\n\tdisableTouchBindings();\r\n}\r\n\r\nfunction disableMouseBindings() {\r\n\t// When mouse bindings are disabled, our\r\n\t// touch bindings are enabled.\r\n\tenableTouchBindings();\r\n}\r\n\r\nfunction startResetTimer() {\r\n\tclearResetTimer();\r\n\tresetTimerID = setTimeout( function() {\r\n\t\tresetTimerID = 0;\r\n\t\tenableMouseBindings();\r\n\t}, $.vmouse.resetTimerDuration );\r\n}\r\n\r\nfunction clearResetTimer() {\r\n\tif ( resetTimerID ) {\r\n\t\tclearTimeout( resetTimerID );\r\n\t\tresetTimerID = 0;\r\n\t}\r\n}\r\n\r\nfunction triggerVirtualEvent( eventType, event, flags ) {\r\n\tvar ve;\r\n\r\n\tif ( ( flags && flags[ eventType ] ) ||\r\n\t\t\t\t( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) {\r\n\r\n\t\tve = createVirtualEvent( event, eventType );\r\n\r\n\t\t$( event.target).trigger( ve );\r\n\t}\r\n\r\n\treturn ve;\r\n}\r\n\r\nfunction mouseEventCallback( event ) {\r\n\tvar touchID = $.data( event.target, touchTargetPropertyName ),\r\n\t\tve;\r\n\r\n\tif ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) {\r\n\t\tve = triggerVirtualEvent( \"v\" + event.type, event );\r\n\t\tif ( ve ) {\r\n\t\t\tif ( ve.isDefaultPrevented() ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t}\r\n\t\t\tif ( ve.isPropagationStopped() ) {\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t}\r\n\t\t\tif ( ve.isImmediatePropagationStopped() ) {\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction handleTouchStart( event ) {\r\n\r\n\tvar touches = getNativeEvent( event ).touches,\r\n\t\ttarget, flags, t;\r\n\r\n\tif ( touches && touches.length === 1 ) {\r\n\r\n\t\ttarget = event.target;\r\n\t\tflags = getVirtualBindingFlags( target );\r\n\r\n\t\tif ( flags.hasVirtualBinding ) {\r\n\r\n\t\t\tlastTouchID = nextTouchID++;\r\n\t\t\t$.data( target, touchTargetPropertyName, lastTouchID );\r\n\r\n\t\t\tclearResetTimer();\r\n\r\n\t\t\tdisableMouseBindings();\r\n\t\t\tdidScroll = false;\r\n\r\n\t\t\tt = getNativeEvent( event ).touches[ 0 ];\r\n\t\t\tstartX = t.pageX;\r\n\t\t\tstartY = t.pageY;\r\n\r\n\t\t\ttriggerVirtualEvent( \"vmouseover\", event, flags );\r\n\t\t\ttriggerVirtualEvent( \"vmousedown\", event, flags );\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction handleScroll( event ) {\r\n\tif ( blockTouchTriggers ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( !didScroll ) {\r\n\t\ttriggerVirtualEvent( \"vmousecancel\", event, getVirtualBindingFlags( event.target ) );\r\n\t}\r\n\r\n\tdidScroll = true;\r\n\tstartResetTimer();\r\n}\r\n\r\nfunction handleTouchMove( event ) {\r\n\tif ( blockTouchTriggers ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar t = getNativeEvent( event ).touches[ 0 ],\r\n\t\tdidCancel = didScroll,\r\n\t\tmoveThreshold = $.vmouse.moveDistanceThreshold,\r\n\t\tflags = getVirtualBindingFlags( event.target );\r\n\r\n\t\tdidScroll = didScroll ||\r\n\t\t\t( Math.abs( t.pageX - startX ) > moveThreshold ||\r\n\t\t\t\tMath.abs( t.pageY - startY ) > moveThreshold );\r\n\r\n\tif ( didScroll && !didCancel ) {\r\n\t\ttriggerVirtualEvent( \"vmousecancel\", event, flags );\r\n\t}\r\n\r\n\ttriggerVirtualEvent( \"vmousemove\", event, flags );\r\n\tstartResetTimer();\r\n}\r\n\r\nfunction handleTouchEnd( event ) {\r\n\tif ( blockTouchTriggers ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tdisableTouchBindings();\r\n\r\n\tvar flags = getVirtualBindingFlags( event.target ),\r\n\t\tve, t;\r\n\ttriggerVirtualEvent( \"vmouseup\", event, flags );\r\n\r\n\tif ( !didScroll ) {\r\n\t\tve = triggerVirtualEvent( \"vclick\", event, flags );\r\n\t\tif ( ve && ve.isDefaultPrevented() ) {\r\n\t\t\t// The target of the mouse events that follow the touchend\r\n\t\t\t// event don't necessarily match the target used during the\r\n\t\t\t// touch. This means we need to rely on coordinates for blocking\r\n\t\t\t// any click that is generated.\r\n\t\t\tt = getNativeEvent( event ).changedTouches[ 0 ];\r\n\t\t\tclickBlockList.push({\r\n\t\t\t\ttouchID: lastTouchID,\r\n\t\t\t\tx: t.clientX,\r\n\t\t\t\ty: t.clientY\r\n\t\t\t});\r\n\r\n\t\t\t// Prevent any mouse events that follow from triggering\r\n\t\t\t// virtual event notifications.\r\n\t\t\tblockMouseTriggers = true;\r\n\t\t}\r\n\t}\r\n\ttriggerVirtualEvent( \"vmouseout\", event, flags);\r\n\tdidScroll = false;\r\n\r\n\tstartResetTimer();\r\n}\r\n\r\nfunction hasVirtualBindings( ele ) {\r\n\tvar bindings = $.data( ele, dataPropertyName ),\r\n\t\tk;\r\n\r\n\tif ( bindings ) {\r\n\t\tfor ( k in bindings ) {\r\n\t\t\tif ( bindings[ k ] ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\nfunction dummyMouseHandler() {}\r\n\r\nfunction getSpecialEventObject( eventType ) {\r\n\tvar realType = eventType.substr( 1 );\r\n\r\n\treturn {\r\n\t\tsetup: function(/* data, namespace */) {\r\n\t\t\t// If this is the first virtual mouse binding for this element,\r\n\t\t\t// add a bindings object to its data.\r\n\r\n\t\t\tif ( !hasVirtualBindings( this ) ) {\r\n\t\t\t\t$.data( this, dataPropertyName, {} );\r\n\t\t\t}\r\n\r\n\t\t\t// If setup is called, we know it is the first binding for this\r\n\t\t\t// eventType, so initialize the count for the eventType to zero.\r\n\t\t\tvar bindings = $.data( this, dataPropertyName );\r\n\t\t\tbindings[ eventType ] = true;\r\n\r\n\t\t\t// If this is the first virtual mouse event for this type,\r\n\t\t\t// register a global handler on the document.\r\n\r\n\t\t\tactiveDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1;\r\n\r\n\t\t\tif ( activeDocHandlers[ eventType ] === 1 ) {\r\n\t\t\t\t$document.bind( realType, mouseEventCallback );\r\n\t\t\t}\r\n\r\n\t\t\t// Some browsers, like Opera Mini, won't dispatch mouse/click events\r\n\t\t\t// for elements unless they actually have handlers registered on them.\r\n\t\t\t// To get around this, we register dummy handlers on the elements.\r\n\r\n\t\t\t$( this ).bind( realType, dummyMouseHandler );\r\n\r\n\t\t\t// For now, if event capture is not supported, we rely on mouse handlers.\r\n\t\t\tif ( eventCaptureSupported ) {\r\n\t\t\t\t// If this is the first virtual mouse binding for the document,\r\n\t\t\t\t// register our touchstart handler on the document.\r\n\r\n\t\t\t\tactiveDocHandlers[ \"touchstart\" ] = ( activeDocHandlers[ \"touchstart\" ] || 0) + 1;\r\n\r\n\t\t\t\tif ( activeDocHandlers[ \"touchstart\" ] === 1 ) {\r\n\t\t\t\t\t$document.bind( \"touchstart\", handleTouchStart )\r\n\t\t\t\t\t\t.bind( \"touchend\", handleTouchEnd )\r\n\r\n\t\t\t\t\t\t// On touch platforms, touching the screen and then dragging your finger\r\n\t\t\t\t\t\t// causes the window content to scroll after some distance threshold is\r\n\t\t\t\t\t\t// exceeded. On these platforms, a scroll prevents a click event from being\r\n\t\t\t\t\t\t// dispatched, and on some platforms, even the touchend is suppressed. To\r\n\t\t\t\t\t\t// mimic the suppression of the click event, we need to watch for a scroll\r\n\t\t\t\t\t\t// event. Unfortunately, some platforms like iOS don't dispatch scroll\r\n\t\t\t\t\t\t// events until *AFTER* the user lifts their finger (touchend). This means\r\n\t\t\t\t\t\t// we need to watch both scroll and touchmove events to figure out whether\r\n\t\t\t\t\t\t// or not a scroll happenens before the touchend event is fired.\r\n\r\n\t\t\t\t\t\t.bind( \"touchmove\", handleTouchMove )\r\n\t\t\t\t\t\t.bind( \"scroll\", handleScroll );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function(/* data, namespace */) {\r\n\t\t\t// If this is the last virtual binding for this eventType,\r\n\t\t\t// remove its global handler from the document.\r\n\r\n\t\t\t--activeDocHandlers[ eventType ];\r\n\r\n\t\t\tif ( !activeDocHandlers[ eventType ] ) {\r\n\t\t\t\t$document.unbind( realType, mouseEventCallback );\r\n\t\t\t}\r\n\r\n\t\t\tif ( eventCaptureSupported ) {\r\n\t\t\t\t// If this is the last virtual mouse binding in existence,\r\n\t\t\t\t// remove our document touchstart listener.\r\n\r\n\t\t\t\t--activeDocHandlers[ \"touchstart\" ];\r\n\r\n\t\t\t\tif ( !activeDocHandlers[ \"touchstart\" ] ) {\r\n\t\t\t\t\t$document.unbind( \"touchstart\", handleTouchStart )\r\n\t\t\t\t\t\t.unbind( \"touchmove\", handleTouchMove )\r\n\t\t\t\t\t\t.unbind( \"touchend\", handleTouchEnd )\r\n\t\t\t\t\t\t.unbind( \"scroll\", handleScroll );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar $this = $( this ),\r\n\t\t\t\tbindings = $.data( this, dataPropertyName );\r\n\r\n\t\t\t// teardown may be called when an element was\r\n\t\t\t// removed from the DOM. If this is the case,\r\n\t\t\t// jQuery core may have already stripped the element\r\n\t\t\t// of any data bindings so we need to check it before\r\n\t\t\t// using it.\r\n\t\t\tif ( bindings ) {\r\n\t\t\t\tbindings[ eventType ] = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Unregister the dummy event handler.\r\n\r\n\t\t\t$this.unbind( realType, dummyMouseHandler );\r\n\r\n\t\t\t// If this is the last virtual mouse binding on the\r\n\t\t\t// element, remove the binding data from the element.\r\n\r\n\t\t\tif ( !hasVirtualBindings( this ) ) {\r\n\t\t\t\t$this.removeData( dataPropertyName );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Expose our custom events to the jQuery bind/unbind mechanism.\r\n\r\nfor ( i = 0; i < virtualEventNames.length; i++ ) {\r\n\t$.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] );\r\n}\r\n\r\n// Add a capture click handler to block clicks.\r\n// Note that we require event capture support for this so if the device\r\n// doesn't support it, we punt for now and rely solely on mouse events.\r\nif ( eventCaptureSupported ) {\r\n\tdocument.addEventListener( \"click\", function( e ) {\r\n\t\tvar cnt = clickBlockList.length,\r\n\t\t\ttarget = e.target,\r\n\t\t\tx, y, ele, i, o, touchID;\r\n\r\n\t\tif ( cnt ) {\r\n\t\t\tx = e.clientX;\r\n\t\t\ty = e.clientY;\r\n\t\t\tthreshold = $.vmouse.clickDistanceThreshold;\r\n\r\n\t\t\t// The idea here is to run through the clickBlockList to see if\r\n\t\t\t// the current click event is in the proximity of one of our\r\n\t\t\t// vclick events that had preventDefault() called on it. If we find\r\n\t\t\t// one, then we block the click.\r\n\t\t\t//\r\n\t\t\t// Why do we have to rely on proximity?\r\n\t\t\t//\r\n\t\t\t// Because the target of the touch event that triggered the vclick\r\n\t\t\t// can be different from the target of the click event synthesized\r\n\t\t\t// by the browser. The target of a mouse/click event that is synthesized\r\n\t\t\t// from a touch event seems to be implementation specific. For example,\r\n\t\t\t// some browsers will fire mouse/click events for a link that is near\r\n\t\t\t// a touch event, even though the target of the touchstart/touchend event\r\n\t\t\t// says the user touched outside the link. Also, it seems that with most\r\n\t\t\t// browsers, the target of the mouse/click event is not calculated until the\r\n\t\t\t// time it is dispatched, so if you replace an element that you touched\r\n\t\t\t// with another element, the target of the mouse/click will be the new\r\n\t\t\t// element underneath that point.\r\n\t\t\t//\r\n\t\t\t// Aside from proximity, we also check to see if the target and any\r\n\t\t\t// of its ancestors were the ones that blocked a click. This is necessary\r\n\t\t\t// because of the strange mouse/click target calculation done in the\r\n\t\t\t// Android 2.1 browser, where if you click on an element, and there is a\r\n\t\t\t// mouse/click handler on one of its ancestors, the target will be the\r\n\t\t\t// innermost child of the touched element, even if that child is no where\r\n\t\t\t// near the point of touch.\r\n\r\n\t\t\tele = target;\r\n\r\n\t\t\twhile ( ele ) {\r\n\t\t\t\tfor ( i = 0; i < cnt; i++ ) {\r\n\t\t\t\t\to = clickBlockList[ i ];\r\n\t\t\t\t\ttouchID = 0;\r\n\r\n\t\t\t\t\tif ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) ||\r\n\t\t\t\t\t\t\t\t$.data( ele, touchTargetPropertyName ) === o.touchID ) {\r\n\t\t\t\t\t\t// XXX: We may want to consider removing matches from the block list\r\n\t\t\t\t\t\t// instead of waiting for the reset timer to fire.\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tele = ele.parentNode;\r\n\t\t\t}\r\n\t\t}\r\n\t}, true);\r\n}\r\n})( jQuery, window, document );\r\n\r\n(function( $ ) {\r\n\t$.mobile = {};\r\n}( jQuery ));\r\n\r\n\t(function( $, undefined ) {\r\n\t\tvar support = {\r\n\t\t\ttouch: \"ontouchend\" in document\r\n\t\t};\r\n\r\n\t\t$.mobile.support = $.mobile.support || {};\r\n\t\t$.extend( $.support, support );\r\n\t\t$.extend( $.mobile.support, support );\r\n\t}( jQuery ));\r\n\r\n\r\n(function( $, window, undefined ) {\r\n\tvar $document = $( document ),\r\n\t\tsupportTouch = $.mobile.support.touch,\r\n\t\tscrollEvent = \"touchmove scroll\",\r\n\t\ttouchStartEvent = supportTouch ? \"touchstart\" : \"mousedown\",\r\n\t\ttouchStopEvent = supportTouch ? \"touchend\" : \"mouseup\",\r\n\t\ttouchMoveEvent = supportTouch ? \"touchmove\" : \"mousemove\";\r\n\r\n\t// setup new event shortcuts\r\n\t$.each( ( \"touchstart touchmove touchend \" +\r\n\t\t\"tap taphold \" +\r\n\t\t\"swipe swipeleft swiperight \" +\r\n\t\t\"scrollstart scrollstop\" ).split( \" \" ), function( i, name ) {\r\n\r\n\t\t$.fn[ name ] = function( fn ) {\r\n\t\t\treturn fn ? this.bind( name, fn ) : this.trigger( name );\r\n\t\t};\r\n\r\n\t\t// jQuery < 1.8\r\n\t\tif ( $.attrFn ) {\r\n\t\t\t$.attrFn[ name ] = true;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction triggerCustomEvent( obj, eventType, event, bubble ) {\r\n\t\tvar originalType = event.type;\r\n\t\tevent.type = eventType;\r\n\t\tif ( bubble ) {\r\n\t\t\t$.event.trigger( event, undefined, obj );\r\n\t\t} else {\r\n\t\t\t$.event.dispatch.call( obj, event );\r\n\t\t}\r\n\t\tevent.type = originalType;\r\n\t}\r\n\r\n\t// also handles scrollstop\r\n\t$.event.special.scrollstart = {\r\n\r\n\t\tenabled: true,\r\n\t\tsetup: function() {\r\n\r\n\t\t\tvar thisObject = this,\r\n\t\t\t\t$this = $( thisObject ),\r\n\t\t\t\tscrolling,\r\n\t\t\t\ttimer;\r\n\r\n\t\t\tfunction trigger( event, state ) {\r\n\t\t\t\tscrolling = state;\r\n\t\t\t\ttriggerCustomEvent( thisObject, scrolling ? \"scrollstart\" : \"scrollstop\", event );\r\n\t\t\t}\r\n\r\n\t\t\t// iPhone triggers scroll after a small delay; use touchmove instead\r\n\t\t\t$this.bind( scrollEvent, function( event ) {\r\n\r\n\t\t\t\tif ( !$.event.special.scrollstart.enabled ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !scrolling ) {\r\n\t\t\t\t\ttrigger( event, true );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout( timer );\r\n\t\t\t\ttimer = setTimeout( function() {\r\n\t\t\t\t\ttrigger( event, false );\r\n\t\t\t\t}, 50 );\r\n\t\t\t});\r\n\t\t},\r\n\t\tteardown: function() {\r\n\t\t\t$( this ).unbind( scrollEvent );\r\n\t\t}\r\n\t};\r\n\r\n\t// also handles taphold\r\n\t$.event.special.tap = {\r\n\t\ttapholdThreshold: 750,\r\n\t\temitTapOnTaphold: true,\r\n\t\tsetup: function() {\r\n\t\t\tvar thisObject = this,\r\n\t\t\t\t$this = $( thisObject ),\r\n\t\t\t\tisTaphold = false;\r\n\r\n\t\t\t$this.bind( \"vmousedown\", function( event ) {\r\n\t\t\t\tisTaphold = false;\r\n\t\t\t\tif ( event.which && event.which !== 1 ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar origTarget = event.target,\r\n\t\t\t\t\ttimer;\r\n\r\n\t\t\t\tfunction clearTapTimer() {\r\n\t\t\t\t\tclearTimeout( timer );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction clearTapHandlers() {\r\n\t\t\t\t\tclearTapTimer();\r\n\r\n\t\t\t\t\t$this.unbind( \"vclick\", clickHandler )\r\n\t\t\t\t\t\t.unbind( \"vmouseup\", clearTapTimer );\r\n\t\t\t\t\t$document.unbind( \"vmousecancel\", clearTapHandlers );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction clickHandler( event ) {\r\n\t\t\t\t\tclearTapHandlers();\r\n\r\n\t\t\t\t\t// ONLY trigger a 'tap' event if the start target is\r\n\t\t\t\t\t// the same as the stop target.\r\n\t\t\t\t\tif ( !isTaphold && origTarget === event.target ) {\r\n\t\t\t\t\t\ttriggerCustomEvent( thisObject, \"tap\", event );\r\n\t\t\t\t\t} else if ( isTaphold ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$this.bind( \"vmouseup\", clearTapTimer )\r\n\t\t\t\t\t.bind( \"vclick\", clickHandler );\r\n\t\t\t\t$document.bind( \"vmousecancel\", clearTapHandlers );\r\n\r\n\t\t\t\ttimer = setTimeout( function() {\r\n\t\t\t\t\tif ( !$.event.special.tap.emitTapOnTaphold ) {\r\n\t\t\t\t\t\tisTaphold = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttriggerCustomEvent( thisObject, \"taphold\", $.Event( \"taphold\", { target: origTarget } ) );\r\n\t\t\t\t}, $.event.special.tap.tapholdThreshold );\r\n\t\t\t});\r\n\t\t},\r\n\t\tteardown: function() {\r\n\t\t\t$( this ).unbind( \"vmousedown\" ).unbind( \"vclick\" ).unbind( \"vmouseup\" );\r\n\t\t\t$document.unbind( \"vmousecancel\" );\r\n\t\t}\r\n\t};\r\n\r\n\t// Also handles swipeleft, swiperight\r\n\t$.event.special.swipe = {\r\n\r\n\t\t// More than this horizontal displacement, and we will suppress scrolling.\r\n\t\tscrollSupressionThreshold: 30,\r\n\r\n\t\t// More time than this, and it isn't a swipe.\r\n\t\tdurationThreshold: 1000,\r\n\r\n\t\t// Swipe horizontal displacement must be more than this.\r\n\t\thorizontalDistanceThreshold: 30,\r\n\r\n\t\t// Swipe vertical displacement must be less than this.\r\n\t\tverticalDistanceThreshold: 30,\r\n\r\n\t\tgetLocation: function ( event ) {\r\n\t\t\tvar winPageX = window.pageXOffset,\r\n\t\t\t\twinPageY = window.pageYOffset,\r\n\t\t\t\tx = event.clientX,\r\n\t\t\t\ty = event.clientY;\r\n\r\n\t\t\tif ( event.pageY === 0 && Math.floor( y ) > Math.floor( event.pageY ) ||\r\n\t\t\t\tevent.pageX === 0 && Math.floor( x ) > Math.floor( event.pageX ) ) {\r\n\r\n\t\t\t\t// iOS4 clientX/clientY have the value that should have been\r\n\t\t\t\t// in pageX/pageY. While pageX/page/ have the value 0\r\n\t\t\t\tx = x - winPageX;\r\n\t\t\t\ty = y - winPageY;\r\n\t\t\t} else if ( y < ( event.pageY - winPageY) || x < ( event.pageX - winPageX ) ) {\r\n\r\n\t\t\t\t// Some Android browsers have totally bogus values for clientX/Y\r\n\t\t\t\t// when scrolling/zooming a page. Detectable since clientX/clientY\r\n\t\t\t\t// should never be smaller than pageX/pageY minus page scroll\r\n\t\t\t\tx = event.pageX - winPageX;\r\n\t\t\t\ty = event.pageY - winPageY;\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tx: x,\r\n\t\t\t\ty: y\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\tstart: function( event ) {\r\n\t\t\tvar data = event.originalEvent.touches ?\r\n\t\t\t\t\tevent.originalEvent.touches[ 0 ] : event,\r\n\t\t\t\tlocation = $.event.special.swipe.getLocation( data );\r\n\t\t\treturn {\r\n\t\t\t\t\t\ttime: ( new Date() ).getTime(),\r\n\t\t\t\t\t\tcoords: [ location.x, location.y ],\r\n\t\t\t\t\t\torigin: $( event.target )\r\n\t\t\t\t\t};\r\n\t\t},\r\n\r\n\t\tstop: function( event ) {\r\n\t\t\tvar data = event.originalEvent.touches ?\r\n\t\t\t\t\tevent.originalEvent.touches[ 0 ] : event,\r\n\t\t\t\tlocation = $.event.special.swipe.getLocation( data );\r\n\t\t\treturn {\r\n\t\t\t\t\t\ttime: ( new Date() ).getTime(),\r\n\t\t\t\t\t\tcoords: [ location.x, location.y ]\r\n\t\t\t\t\t};\r\n\t\t},\r\n\r\n\t\thandleSwipe: function( start, stop, thisObject, origTarget ) {\r\n\t\t\tif ( stop.time - start.time < $.event.special.swipe.durationThreshold &&\r\n\t\t\t\tMath.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&\r\n\t\t\t\tMath.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {\r\n\t\t\t\tvar direction = start.coords[0] > stop.coords[ 0 ] ? \"swipeleft\" : \"swiperight\";\r\n\r\n\t\t\t\ttriggerCustomEvent( thisObject, \"swipe\", $.Event( \"swipe\", { target: origTarget, swipestart: start, swipestop: stop }), true );\r\n\t\t\t\ttriggerCustomEvent( thisObject, direction,$.Event( direction, { target: origTarget, swipestart: start, swipestop: stop } ), true );\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\r\n\t\t},\r\n\r\n\t\t// This serves as a flag to ensure that at most one swipe event event is\r\n\t\t// in work at any given time\r\n\t\teventInProgress: false,\r\n\r\n\t\tsetup: function() {\r\n\t\t\tvar events,\r\n\t\t\t\tthisObject = this,\r\n\t\t\t\t$this = $( thisObject ),\r\n\t\t\t\tcontext = {};\r\n\r\n\t\t\t// Retrieve the events data for this element and add the swipe context\r\n\t\t\tevents = $.data( this, \"mobile-events\" );\r\n\t\t\tif ( !events ) {\r\n\t\t\t\tevents = { length: 0 };\r\n\t\t\t\t$.data( this, \"mobile-events\", events );\r\n\t\t\t}\r\n\t\t\tevents.length++;\r\n\t\t\tevents.swipe = context;\r\n\r\n\t\t\tcontext.start = function( event ) {\r\n\r\n\t\t\t\t// Bail if we're already working on a swipe event\r\n\t\t\t\tif ( $.event.special.swipe.eventInProgress ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$.event.special.swipe.eventInProgress = true;\r\n\r\n\t\t\t\tvar stop,\r\n\t\t\t\t\tstart = $.event.special.swipe.start( event ),\r\n\t\t\t\t\torigTarget = event.target,\r\n\t\t\t\t\temitted = false;\r\n\r\n\t\t\t\tcontext.move = function( event ) {\r\n\t\t\t\t\tif ( !start || event.isDefaultPrevented() ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstop = $.event.special.swipe.stop( event );\r\n\t\t\t\t\tif ( !emitted ) {\r\n\t\t\t\t\t\temitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget );\r\n\t\t\t\t\t\tif ( emitted ) {\r\n\r\n\t\t\t\t\t\t\t// Reset the context to make way for the next swipe event\r\n\t\t\t\t\t\t\t$.event.special.swipe.eventInProgress = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// prevent scrolling\r\n\t\t\t\t\tif ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcontext.stop = function() {\r\n\t\t\t\t\t\temitted = true;\r\n\r\n\t\t\t\t\t\t// Reset the context to make way for the next swipe event\r\n\t\t\t\t\t\t$.event.special.swipe.eventInProgress = false;\r\n\t\t\t\t\t\t$document.off( touchMoveEvent, context.move );\r\n\t\t\t\t\t\tcontext.move = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t$document.on( touchMoveEvent, context.move )\r\n\t\t\t\t\t.one( touchStopEvent, context.stop );\r\n\t\t\t};\r\n\t\t\t$this.on( touchStartEvent, context.start );\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\tvar events, context;\r\n\r\n\t\t\tevents = $.data( this, \"mobile-events\" );\r\n\t\t\tif ( events ) {\r\n\t\t\t\tcontext = events.swipe;\r\n\t\t\t\tdelete events.swipe;\r\n\t\t\t\tevents.length--;\r\n\t\t\t\tif ( events.length === 0 ) {\r\n\t\t\t\t\t$.removeData( this, \"mobile-events\" );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( context ) {\r\n\t\t\t\tif ( context.start ) {\r\n\t\t\t\t\t$( this ).off( touchStartEvent, context.start );\r\n\t\t\t\t}\r\n\t\t\t\tif ( context.move ) {\r\n\t\t\t\t\t$document.off( touchMoveEvent, context.move );\r\n\t\t\t\t}\r\n\t\t\t\tif ( context.stop ) {\r\n\t\t\t\t\t$document.off( touchStopEvent, context.stop );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t$.each({\r\n\t\tscrollstop: \"scrollstart\",\r\n\t\ttaphold: \"tap\",\r\n\t\tswipeleft: \"swipe.left\",\r\n\t\tswiperight: \"swipe.right\"\r\n\t}, function( event, sourceEvent ) {\r\n\r\n\t\t$.event.special[ event ] = {\r\n\t\t\tsetup: function() {\r\n\t\t\t\t$( this ).bind( sourceEvent, $.noop );\r\n\t\t\t},\r\n\t\t\tteardown: function() {\r\n\t\t\t\t$( this ).unbind( sourceEvent );\r\n\t\t\t}\r\n\t\t};\r\n\t});\r\n\r\n})( jQuery, this );\r\n\r\n\r\n}));\r\n","/*!\r\n * jQuery & Zepto Lazy - v1.7.10\r\n * http://jquery.eisbehr.de/lazy/\r\n *\r\n * Copyright 2012 - 2018, Daniel 'Eisbehr' Kern\r\n *\r\n * Dual licensed under the MIT and GPL-2.0 licenses:\r\n * http://www.opensource.org/licenses/mit-license.php\r\n * http://www.gnu.org/licenses/gpl-2.0.html\r\n *\r\n * $(\"img.lazy\").lazy();\r\n */\r\n\r\n;(function(window, undefined) {\r\n \"use strict\";\r\n\r\n // noinspection JSUnresolvedVariable\r\n /**\r\n * library instance - here and not in construct to be shorter in minimization\r\n * @return void\r\n */\r\n var $ = window.jQuery || window.Zepto,\r\n\r\n /**\r\n * unique plugin instance id counter\r\n * @type {number}\r\n */\r\n lazyInstanceId = 0,\r\n\r\n /**\r\n * helper to register window load for jQuery 3\r\n * @type {boolean}\r\n */ \r\n windowLoaded = false;\r\n\r\n /**\r\n * make lazy available to jquery - and make it a bit more case-insensitive :)\r\n * @access public\r\n * @type {function}\r\n * @param {object} settings\r\n * @return {LazyPlugin}\r\n */\r\n $.fn.Lazy = $.fn.lazy = function(settings) {\r\n return new LazyPlugin(this, settings);\r\n };\r\n\r\n /**\r\n * helper to add plugins to lazy prototype configuration\r\n * @access public\r\n * @type {function}\r\n * @param {string|Array} names\r\n * @param {string|Array|function} [elements]\r\n * @param {function} loader\r\n * @return void\r\n */\r\n $.Lazy = $.lazy = function(names, elements, loader) {\r\n // make second parameter optional\r\n if ($.isFunction(elements)) {\r\n loader = elements;\r\n elements = [];\r\n }\r\n\r\n // exit here if parameter is not a callable function\r\n if (!$.isFunction(loader)) {\r\n return;\r\n }\r\n\r\n // make parameters an array of names to be sure\r\n names = $.isArray(names) ? names : [names];\r\n elements = $.isArray(elements) ? elements : [elements];\r\n\r\n var config = LazyPlugin.prototype.config,\r\n forced = config._f || (config._f = {});\r\n\r\n // add the loader plugin for every name\r\n for (var i = 0, l = names.length; i < l; i++) {\r\n if (config[names[i]] === undefined || $.isFunction(config[names[i]])) {\r\n config[names[i]] = loader;\r\n }\r\n }\r\n\r\n // add forced elements loader\r\n for (var c = 0, a = elements.length; c < a; c++) {\r\n forced[elements[c]] = names[0];\r\n }\r\n };\r\n\r\n /**\r\n * contains all logic and the whole element handling\r\n * is packed in a private function outside class to reduce memory usage, because it will not be created on every plugin instance\r\n * @access private\r\n * @type {function}\r\n * @param {LazyPlugin} instance\r\n * @param {object} config\r\n * @param {object|Array} items\r\n * @param {object} events\r\n * @param {string} namespace\r\n * @return void\r\n */\r\n function _executeLazy(instance, config, items, events, namespace) {\r\n /**\r\n * a helper to trigger the 'onFinishedAll' callback after all other events\r\n * @access private\r\n * @type {number}\r\n */\r\n var _awaitingAfterLoad = 0,\r\n\r\n /**\r\n * visible content width\r\n * @access private\r\n * @type {number}\r\n */\r\n _actualWidth = -1,\r\n\r\n /**\r\n * visible content height\r\n * @access private\r\n * @type {number}\r\n */\r\n _actualHeight = -1,\r\n\r\n /**\r\n * determine possibly detected high pixel density\r\n * @access private\r\n * @type {boolean}\r\n */\r\n _isRetinaDisplay = false, \r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _afterLoad = 'afterLoad',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _load = 'load',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _error = 'error',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _img = 'img',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _src = 'src',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _srcset = 'srcset',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _sizes = 'sizes',\r\n\r\n /**\r\n * dictionary entry for better minimization\r\n * @access private\r\n * @type {string}\r\n */\r\n _backgroundImage = 'background-image';\r\n\r\n /**\r\n * initialize plugin\r\n * bind loading to events or set delay time to load all items at once\r\n * @access private\r\n * @return void\r\n */\r\n function _initialize() {\r\n // detect actual device pixel ratio\r\n // noinspection JSUnresolvedVariable\r\n _isRetinaDisplay = window.devicePixelRatio > 1;\r\n\r\n // prepare all initial items\r\n items = _prepareItems(items);\r\n\r\n // if delay time is set load all items at once after delay time\r\n if (config.delay >= 0) {\r\n setTimeout(function() {\r\n _lazyLoadItems(true);\r\n }, config.delay);\r\n }\r\n\r\n // if no delay is set or combine usage is active bind events\r\n if (config.delay < 0 || config.combined) {\r\n // create unique event function\r\n events.e = _throttle(config.throttle, function(event) {\r\n // reset detected window size on resize event\r\n if (event.type === 'resize') {\r\n _actualWidth = _actualHeight = -1;\r\n }\r\n\r\n // execute 'lazy magic'\r\n _lazyLoadItems(event.all);\r\n });\r\n\r\n // create function to add new items to instance\r\n events.a = function(additionalItems) {\r\n additionalItems = _prepareItems(additionalItems);\r\n items.push.apply(items, additionalItems);\r\n };\r\n\r\n // create function to get all instance items left\r\n events.g = function() {\r\n // filter loaded items before return in case internal filter was not running until now\r\n return (items = $(items).filter(function() {\r\n return !$(this).data(config.loadedName);\r\n }));\r\n };\r\n\r\n // create function to force loading elements\r\n events.f = function(forcedItems) {\r\n for (var i = 0; i < forcedItems.length; i++) {\r\n // only handle item if available in current instance\r\n // use a compare function, because Zepto can't handle object parameter for filter\r\n // var item = items.filter(forcedItems[i]);\r\n /* jshint loopfunc: true */\r\n var item = items.filter(function() {\r\n return this === forcedItems[i];\r\n });\r\n\r\n if (item.length) {\r\n _lazyLoadItems(false, item); \r\n }\r\n }\r\n };\r\n\r\n // load initial items\r\n _lazyLoadItems();\r\n\r\n // bind lazy load functions to scroll and resize event\r\n // noinspection JSUnresolvedVariable\r\n $(config.appendScroll).on('scroll.' + namespace + ' resize.' + namespace, events.e);\r\n }\r\n }\r\n\r\n /**\r\n * prepare items before handle them\r\n * @access private\r\n * @param {Array|object|jQuery} items\r\n * @return {Array|object|jQuery}\r\n */\r\n function _prepareItems(items) {\r\n // fetch used configurations before loops\r\n var defaultImage = config.defaultImage,\r\n placeholder = config.placeholder,\r\n imageBase = config.imageBase,\r\n srcsetAttribute = config.srcsetAttribute,\r\n loaderAttribute = config.loaderAttribute,\r\n forcedTags = config._f || {};\r\n\r\n // filter items and only add those who not handled yet and got needed attributes available\r\n items = $(items).filter(function() {\r\n var element = $(this),\r\n tag = _getElementTagName(this);\r\n\r\n return !element.data(config.handledName) && \r\n (element.attr(config.attribute) || element.attr(srcsetAttribute) || element.attr(loaderAttribute) || forcedTags[tag] !== undefined);\r\n })\r\n\r\n // append plugin instance to all elements\r\n .data('plugin_' + config.name, instance);\r\n\r\n for (var i = 0, l = items.length; i < l; i++) {\r\n var element = $(items[i]),\r\n tag = _getElementTagName(items[i]),\r\n elementImageBase = element.attr(config.imageBaseAttribute) || imageBase;\r\n\r\n // generate and update source set if an image base is set\r\n if (tag === _img && elementImageBase && element.attr(srcsetAttribute)) {\r\n element.attr(srcsetAttribute, _getCorrectedSrcSet(element.attr(srcsetAttribute), elementImageBase));\r\n }\r\n\r\n // add loader to forced element types\r\n if (forcedTags[tag] !== undefined && !element.attr(loaderAttribute)) {\r\n element.attr(loaderAttribute, forcedTags[tag]);\r\n }\r\n\r\n // set default image on every element without source\r\n if (tag === _img && defaultImage && !element.attr(_src)) {\r\n element.attr(_src, defaultImage);\r\n }\r\n\r\n // set placeholder on every element without background image\r\n else if (tag !== _img && placeholder && (!element.css(_backgroundImage) || element.css(_backgroundImage) === 'none')) {\r\n element.css(_backgroundImage, \"url('\" + placeholder + \"')\");\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * the 'lazy magic' - check all items\r\n * @access private\r\n * @param {boolean} [allItems]\r\n * @param {object} [forced]\r\n * @return void\r\n */\r\n function _lazyLoadItems(allItems, forced) {\r\n // skip if no items where left\r\n if (!items.length) {\r\n // destroy instance if option is enabled\r\n if (config.autoDestroy) {\r\n // noinspection JSUnresolvedFunction\r\n instance.destroy();\r\n }\r\n\r\n return;\r\n }\r\n\r\n var elements = forced || items,\r\n loadTriggered = false,\r\n imageBase = config.imageBase || '',\r\n srcsetAttribute = config.srcsetAttribute,\r\n handledName = config.handledName;\r\n\r\n // loop all available items\r\n for (var i = 0; i < elements.length; i++) {\r\n // item is at least in loadable area\r\n if (allItems || forced || _isInLoadableArea(elements[i])) {\r\n var element = $(elements[i]),\r\n tag = _getElementTagName(elements[i]),\r\n attribute = element.attr(config.attribute),\r\n elementImageBase = element.attr(config.imageBaseAttribute) || imageBase,\r\n customLoader = element.attr(config.loaderAttribute);\r\n\r\n // is not already handled \r\n if (!element.data(handledName) &&\r\n // and is visible or visibility doesn't matter\r\n (!config.visibleOnly || element.is(':visible')) && (\r\n // and image source or source set attribute is available\r\n (attribute || element.attr(srcsetAttribute)) && (\r\n // and is image tag where attribute is not equal source or source set\r\n (tag === _img && (elementImageBase + attribute !== element.attr(_src) || element.attr(srcsetAttribute) !== element.attr(_srcset))) ||\r\n // or is non image tag where attribute is not equal background\r\n (tag !== _img && elementImageBase + attribute !== element.css(_backgroundImage))\r\n ) ||\r\n // or custom loader is available\r\n customLoader))\r\n {\r\n // mark element always as handled as this point to prevent double handling\r\n loadTriggered = true;\r\n element.data(handledName, true);\r\n\r\n // load item\r\n _handleItem(element, tag, elementImageBase, customLoader);\r\n }\r\n }\r\n }\r\n\r\n // when something was loaded remove them from remaining items\r\n if (loadTriggered) {\r\n items = $(items).filter(function() {\r\n return !$(this).data(handledName);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * load the given element the lazy way\r\n * @access private\r\n * @param {object} element\r\n * @param {string} tag\r\n * @param {string} imageBase\r\n * @param {function} [customLoader]\r\n * @return void\r\n */\r\n function _handleItem(element, tag, imageBase, customLoader) {\r\n // increment count of items waiting for after load\r\n ++_awaitingAfterLoad;\r\n\r\n // extended error callback for correct 'onFinishedAll' handling\r\n var errorCallback = function() {\r\n _triggerCallback('onError', element);\r\n _reduceAwaiting();\r\n\r\n // prevent further callback calls\r\n errorCallback = $.noop;\r\n };\r\n\r\n // trigger function before loading image\r\n _triggerCallback('beforeLoad', element);\r\n\r\n // fetch all double used data here for better code minimization\r\n var srcAttribute = config.attribute,\r\n srcsetAttribute = config.srcsetAttribute,\r\n sizesAttribute = config.sizesAttribute,\r\n retinaAttribute = config.retinaAttribute,\r\n removeAttribute = config.removeAttribute,\r\n loadedName = config.loadedName,\r\n elementRetina = element.attr(retinaAttribute);\r\n\r\n // handle custom loader\r\n if (customLoader) {\r\n // on load callback\r\n var loadCallback = function() {\r\n // remove attribute from element\r\n if (removeAttribute) {\r\n element.removeAttr(config.loaderAttribute);\r\n }\r\n\r\n // mark element as loaded\r\n element.data(loadedName, true);\r\n\r\n // call after load event\r\n _triggerCallback(_afterLoad, element);\r\n\r\n // remove item from waiting queue and possibly trigger finished event\r\n // it's needed to be asynchronous to run after filter was in _lazyLoadItems\r\n setTimeout(_reduceAwaiting, 1);\r\n\r\n // prevent further callback calls\r\n loadCallback = $.noop;\r\n };\r\n\r\n // bind error event to trigger callback and reduce waiting amount\r\n element.off(_error).one(_error, errorCallback)\r\n\r\n // bind after load callback to element\r\n .one(_load, loadCallback);\r\n\r\n // trigger custom loader and handle response\r\n if (!_triggerCallback(customLoader, element, function(response) {\r\n if(response) {\r\n element.off(_load);\r\n loadCallback();\r\n }\r\n else {\r\n element.off(_error);\r\n errorCallback();\r\n }\r\n })) {\r\n element.trigger(_error);\r\n }\r\n }\r\n\r\n // handle images\r\n else {\r\n // create image object\r\n var imageObj = $(new Image());\r\n\r\n // bind error event to trigger callback and reduce waiting amount\r\n imageObj.one(_error, errorCallback)\r\n\r\n // bind after load callback to image\r\n .one(_load, function() {\r\n // remove element from view\r\n element.hide();\r\n\r\n // set image back to element\r\n // do it as single 'attr' calls, to be sure 'src' is set after 'srcset'\r\n if (tag === _img) {\r\n element.attr(_sizes, imageObj.attr(_sizes))\r\n .attr(_srcset, imageObj.attr(_srcset))\r\n .attr(_src, imageObj.attr(_src));\r\n }\r\n else {\r\n element.css(_backgroundImage, \"url('\" + imageObj.attr(_src) + \"')\");\r\n }\r\n\r\n // bring it back with some effect!\r\n element[config.effect](config.effectTime);\r\n\r\n // remove attribute from element\r\n if (removeAttribute) {\r\n element.removeAttr(srcAttribute + ' ' + srcsetAttribute + ' ' + retinaAttribute + ' ' + config.imageBaseAttribute);\r\n\r\n // only remove 'sizes' attribute, if it was a custom one\r\n if (sizesAttribute !== _sizes) {\r\n element.removeAttr(sizesAttribute);\r\n }\r\n }\r\n\r\n // mark element as loaded\r\n element.data(loadedName, true);\r\n\r\n // call after load event\r\n _triggerCallback(_afterLoad, element);\r\n\r\n // cleanup image object\r\n imageObj.remove();\r\n\r\n // remove item from waiting queue and possibly trigger finished event\r\n _reduceAwaiting();\r\n });\r\n\r\n // set sources\r\n // do it as single 'attr' calls, to be sure 'src' is set after 'srcset'\r\n var imageSrc = (_isRetinaDisplay && elementRetina ? elementRetina : element.attr(srcAttribute)) || '';\r\n imageObj.attr(_sizes, element.attr(sizesAttribute))\r\n .attr(_srcset, element.attr(srcsetAttribute))\r\n .attr(_src, imageSrc ? imageBase + imageSrc : null);\r\n\r\n // call after load even on cached image\r\n imageObj.complete && imageObj.trigger(_load); // jshint ignore : line\r\n }\r\n }\r\n\r\n /**\r\n * check if the given element is inside the current viewport or threshold\r\n * @access private\r\n * @param {object} element\r\n * @return {boolean}\r\n */\r\n function _isInLoadableArea(element) {\r\n var elementBound = element.getBoundingClientRect(),\r\n direction = config.scrollDirection,\r\n threshold = config.threshold,\r\n vertical = // check if element is in loadable area from top\r\n ((_getActualHeight() + threshold) > elementBound.top) &&\r\n // check if element is even in loadable are from bottom\r\n (-threshold < elementBound.bottom),\r\n horizontal = // check if element is in loadable area from left\r\n ((_getActualWidth() + threshold) > elementBound.left) &&\r\n // check if element is even in loadable area from right\r\n (-threshold < elementBound.right);\r\n\r\n if (direction === 'vertical') {\r\n return vertical;\r\n }\r\n else if (direction === 'horizontal') {\r\n return horizontal;\r\n }\r\n\r\n return vertical && horizontal;\r\n }\r\n\r\n /**\r\n * receive the current viewed width of the browser\r\n * @access private\r\n * @return {number}\r\n */\r\n function _getActualWidth() {\r\n return _actualWidth >= 0 ? _actualWidth : (_actualWidth = $(window).width());\r\n }\r\n\r\n /**\r\n * receive the current viewed height of the browser\r\n * @access private\r\n * @return {number}\r\n */\r\n function _getActualHeight() {\r\n return _actualHeight >= 0 ? _actualHeight : (_actualHeight = $(window).height());\r\n }\r\n\r\n /**\r\n * get lowercase tag name of an element\r\n * @access private\r\n * @param {object} element\r\n * @returns {string}\r\n */\r\n function _getElementTagName(element) {\r\n return element.tagName.toLowerCase();\r\n }\r\n\r\n /**\r\n * prepend image base to all srcset entries\r\n * @access private\r\n * @param {string} srcset\r\n * @param {string} imageBase\r\n * @returns {string}\r\n */\r\n function _getCorrectedSrcSet(srcset, imageBase) {\r\n if (imageBase) {\r\n // trim, remove unnecessary spaces and split entries\r\n var entries = srcset.split(',');\r\n srcset = '';\r\n\r\n for (var i = 0, l = entries.length; i < l; i++) {\r\n srcset += imageBase + entries[i].trim() + (i !== l - 1 ? ',' : '');\r\n }\r\n }\r\n\r\n return srcset;\r\n }\r\n\r\n /**\r\n * helper function to throttle down event triggering\r\n * @access private\r\n * @param {number} delay\r\n * @param {function} callback\r\n * @return {function}\r\n */\r\n function _throttle(delay, callback) {\r\n var timeout,\r\n lastExecute = 0;\r\n\r\n return function(event, ignoreThrottle) {\r\n var elapsed = +new Date() - lastExecute;\r\n\r\n function run() {\r\n lastExecute = +new Date();\r\n // noinspection JSUnresolvedFunction\r\n callback.call(instance, event);\r\n }\r\n\r\n timeout && clearTimeout(timeout); // jshint ignore : line\r\n\r\n if (elapsed > delay || !config.enableThrottle || ignoreThrottle) {\r\n run();\r\n }\r\n else {\r\n timeout = setTimeout(run, delay - elapsed);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * reduce count of awaiting elements to 'afterLoad' event and fire 'onFinishedAll' if reached zero\r\n * @access private\r\n * @return void\r\n */\r\n function _reduceAwaiting() {\r\n --_awaitingAfterLoad;\r\n\r\n // if no items were left trigger finished event\r\n if (!items.length && !_awaitingAfterLoad) {\r\n _triggerCallback('onFinishedAll');\r\n }\r\n }\r\n\r\n /**\r\n * single implementation to handle callbacks, pass element and set 'this' to current instance\r\n * @access private\r\n * @param {string|function} callback\r\n * @param {object} [element]\r\n * @param {*} [args]\r\n * @return {boolean}\r\n */\r\n function _triggerCallback(callback, element, args) {\r\n if ((callback = config[callback])) {\r\n // jQuery's internal '$(arguments).slice(1)' are causing problems at least on old iPads\r\n // below is shorthand of 'Array.prototype.slice.call(arguments, 1)'\r\n callback.apply(instance, [].slice.call(arguments, 1));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n // if event driven or window is already loaded don't wait for page loading\r\n if (config.bind === 'event' || windowLoaded) {\r\n _initialize();\r\n }\r\n\r\n // otherwise load initial items and start lazy after page load\r\n else {\r\n // noinspection JSUnresolvedVariable\r\n $(window).on(_load + '.' + namespace, _initialize);\r\n } \r\n }\r\n\r\n /**\r\n * lazy plugin class constructor\r\n * @constructor\r\n * @access private\r\n * @param {object} elements\r\n * @param {object} settings\r\n * @return {object|LazyPlugin}\r\n */\r\n function LazyPlugin(elements, settings) {\r\n /**\r\n * this lazy plugin instance\r\n * @access private\r\n * @type {object|LazyPlugin|LazyPlugin.prototype}\r\n */\r\n var _instance = this,\r\n\r\n /**\r\n * this lazy plugin instance configuration\r\n * @access private\r\n * @type {object}\r\n */\r\n _config = $.extend({}, _instance.config, settings),\r\n\r\n /**\r\n * instance generated event executed on container scroll or resize\r\n * packed in an object to be referenceable and short named because properties will not be minified\r\n * @access private\r\n * @type {object}\r\n */\r\n _events = {},\r\n\r\n /**\r\n * unique namespace for instance related events\r\n * @access private\r\n * @type {string}\r\n */\r\n _namespace = _config.name + '-' + (++lazyInstanceId);\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * wrapper to get or set an entry from plugin instance configuration\r\n * much smaller on minify as direct access\r\n * @access public\r\n * @type {function}\r\n * @param {string} entryName\r\n * @param {*} [value]\r\n * @return {LazyPlugin|*}\r\n */\r\n _instance.config = function(entryName, value) {\r\n if (value === undefined) {\r\n return _config[entryName];\r\n }\r\n\r\n _config[entryName] = value;\r\n return _instance;\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * add additional items to current instance\r\n * @access public\r\n * @param {Array|object|string} items\r\n * @return {LazyPlugin}\r\n */\r\n _instance.addItems = function(items) {\r\n _events.a && _events.a($.type(items) === 'string' ? $(items) : items); // jshint ignore : line\r\n return _instance;\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * get all left items of this instance\r\n * @access public\r\n * @returns {object}\r\n */\r\n _instance.getItems = function() {\r\n return _events.g ? _events.g() : {};\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * force lazy to load all items in loadable area right now\r\n * by default without throttle\r\n * @access public\r\n * @type {function}\r\n * @param {boolean} [useThrottle]\r\n * @return {LazyPlugin}\r\n */\r\n _instance.update = function(useThrottle) {\r\n _events.e && _events.e({}, !useThrottle); // jshint ignore : line\r\n return _instance;\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * force element(s) to load directly, ignoring the viewport\r\n * @access public\r\n * @param {Array|object|string} items\r\n * @return {LazyPlugin}\r\n */\r\n _instance.force = function(items) {\r\n _events.f && _events.f($.type(items) === 'string' ? $(items) : items); // jshint ignore : line\r\n return _instance;\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * force lazy to load all available items right now\r\n * this call ignores throttling\r\n * @access public\r\n * @type {function}\r\n * @return {LazyPlugin}\r\n */\r\n _instance.loadAll = function() {\r\n _events.e && _events.e({all: true}, true); // jshint ignore : line\r\n return _instance;\r\n };\r\n\r\n // noinspection JSUndefinedPropertyAssignment\r\n /**\r\n * destroy this plugin instance\r\n * @access public\r\n * @type {function}\r\n * @return undefined\r\n */\r\n _instance.destroy = function() {\r\n // unbind instance generated events\r\n // noinspection JSUnresolvedFunction, JSUnresolvedVariable\r\n $(_config.appendScroll).off('.' + _namespace, _events.e);\r\n // noinspection JSUnresolvedVariable\r\n $(window).off('.' + _namespace);\r\n\r\n // clear events\r\n _events = {};\r\n\r\n return undefined;\r\n };\r\n\r\n // start using lazy and return all elements to be chainable or instance for further use\r\n // noinspection JSUnresolvedVariable\r\n _executeLazy(_instance, _config, elements, _events, _namespace);\r\n return _config.chainable ? elements : _instance;\r\n }\r\n\r\n /**\r\n * settings and configuration data\r\n * @access public\r\n * @type {object|*}\r\n */\r\n LazyPlugin.prototype.config = {\r\n // general\r\n name : 'lazy',\r\n chainable : true,\r\n autoDestroy : true,\r\n bind : 'load',\r\n threshold : 500,\r\n visibleOnly : false,\r\n appendScroll : window,\r\n scrollDirection : 'both',\r\n imageBase : null,\r\n defaultImage : 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',\r\n placeholder : null,\r\n delay : -1,\r\n combined : false,\r\n\r\n // attributes\r\n attribute : 'data-src',\r\n srcsetAttribute : 'data-srcset',\r\n sizesAttribute : 'data-sizes',\r\n retinaAttribute : 'data-retina',\r\n loaderAttribute : 'data-loader',\r\n imageBaseAttribute : 'data-imagebase',\r\n removeAttribute : true,\r\n handledName : 'handled',\r\n loadedName : 'loaded',\r\n\r\n // effect\r\n effect : 'show',\r\n effectTime : 0,\r\n\r\n // throttle\r\n enableThrottle : true,\r\n throttle : 250,\r\n\r\n // callbacks\r\n beforeLoad : undefined,\r\n afterLoad : undefined,\r\n onError : undefined,\r\n onFinishedAll : undefined\r\n };\r\n\r\n // register window load event globally to prevent not loading elements\r\n // since jQuery 3.X ready state is fully async and may be executed after 'load' \r\n $(window).on('load', function() {\r\n windowLoaded = true;\r\n });\r\n})(window);","/*! jQuery UI - v1.11.2 - 2015-02-06\r\n* http://jqueryui.com\r\n* Includes: core.js, widget.js, mouse.js, position.js, autocomplete.js, menu.js\r\n* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n(function(e){\"function\"==typeof define&&define.amd?define([\"jquery\"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return\"area\"===r?(n=t.parentNode,a=n.name,t.href&&a&&\"map\"===n.nodeName.toLowerCase()?(o=e(\"img[usemap='#\"+a+\"']\")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:\"a\"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return\"hidden\"===e.css(this,\"visibility\")}).length}e.ui=e.ui||{},e.extend(e.ui,{version:\"1.11.2\",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css(\"position\"),s=\"absolute\"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&\"static\"===t.css(\"position\")?!1:n.test(t.css(\"overflow\")+t.css(\"overflow-y\")+t.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&e(this).removeAttr(\"id\")})}}),e.extend(e.expr[\":\"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,\"tabindex\")))},tabbable:function(i){var s=e.attr(i,\"tabindex\"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e(\"\").outerWidth(1).jquery||e.each([\"Width\",\"Height\"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,\"padding\"+this))||0,s&&(i-=parseFloat(e.css(t,\"border\"+this+\"Width\"))||0),a&&(i-=parseFloat(e.css(t,\"margin\"+this))||0)}),i}var n=\"Width\"===i?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn[\"inner\"+i]=function(t){return void 0===t?o[\"inner\"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+\"px\")})},e.fn[\"outer\"+i]=function(t,n){return\"number\"!=typeof t?o[\"outer\"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+\"px\")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e(\"\").data(\"a-b\",\"a\").removeData(\"a-b\").data(\"a-b\")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return\"number\"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.bind(e+\".ui-disableSelection\",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(\".ui-disableSelection\")},zIndex:function(t){if(void 0!==t)return this.css(\"zIndex\",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css(\"position\"),(\"absolute\"===i||\"relative\"===i||\"fixed\"===i)&&(s=parseInt(n.css(\"zIndex\"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var s=0,n=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,\"events\"),s&&s.remove&&e(n).triggerHandler(\"remove\")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(\".\")[0];return t=t.split(\".\")[1],n=l+\"-\"+t,s||(s=i,i=e.Widget),e.expr[\":\"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+\".\"+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,a=n.call(arguments,1),o=0,r=a.length;r>o;o++)for(i in a[o])s=a[o][i],a[o].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(a){var o=\"string\"==typeof a,r=n.call(arguments,1),h=this;return a=!o&&r.length?e.widget.extend.apply(null,[a].concat(r)):a,o?this.each(function(){var i,n=e.data(this,s);return\"instance\"===a?(h=n,!1):n?e.isFunction(n[a])&&\"_\"!==a.charAt(0)?(i=n[a].apply(n,r),i!==n&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error(\"no such method '\"+a+\"' for \"+t+\" widget instance\"):e.error(\"cannot call methods on \"+t+\" prior to initialization; \"+\"attempted to call method '\"+a+\"'\")}):this.each(function(){var t=e.data(this,s);t?(t.option(a||{}),t._init&&t._init()):e.data(this,s,new i(a,this))}),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"