/* Minification failed. Returning unminified contents.
(8280,132-133): run-time error JS1100: Expected ',': =
(8280,139-140): run-time error JS1002: Syntax error: ,
(8280,153-154): run-time error JS1100: Expected ',': =
(8832,48-49): run-time error JS1014: Invalid character: `
(8832,92-93): run-time error JS1003: Expected ':': {
(8832,101-102): run-time error JS1003: Expected ':': }
(8832,102-103): run-time error JS1014: Invalid character: `
(9234,36-37): run-time error JS1195: Expected expression: )
(9234,39-40): run-time error JS1195: Expected expression: >
(10389,26-34): run-time error JS1004: Expected ';': function
(10392,19-26): run-time error JS1004: Expected ';': AppleID
(10418,30-38): run-time error JS1004: Expected ';': function
(10740,46-47): run-time error JS1014: Invalid character: `
(10740,47-48): run-time error JS1195: Expected expression: /
(10740,54-55): run-time error JS1014: Invalid character: `
(10742,29-30): run-time error JS1014: Invalid character: `
(10742,35-36): run-time error JS1004: Expected ';': :
(10763,15-16): run-time error JS1014: Invalid character: `
(10763,50-51): run-time error JS1003: Expected ':': {
(10763,65-66): run-time error JS1003: Expected ':': }
(10763,78-79): run-time error JS5008: Illegal assignment: =
(10763,103-104): run-time error JS1014: Invalid character: `
(10763,104-105): run-time error JS1195: Expected expression: ,
(10763,128-129): run-time error JS1004: Expected ';': {
(10770,10-11): run-time error JS1195: Expected expression: )
(10773,59-60): run-time error JS1004: Expected ';': {
(10855,1-2): run-time error JS1002: Syntax error: }
(11012,7-8): run-time error JS1014: Invalid character: `
(11012,8-9): run-time error JS1195: Expected expression: .
(11012,14-15): run-time error JS1004: Expected ';': :
(11012,19-20): run-time error JS1014: Invalid character: #
(11012,39-40): run-time error JS1004: Expected ';': )
(11012,40-41): run-time error JS1014: Invalid character: `
(11019,27-28): run-time error JS1003: Expected ':': }
(11044,62-63): run-time error JS1195: Expected expression: >
(11044,71-72): run-time error JS1004: Expected ';': )
(11047,16-17): run-time error JS1014: Invalid character: `
(11047,41-42): run-time error JS1014: Invalid character: `
(11047,60-61): run-time error JS1003: Expected ':': }
(14640,54-55): run-time error JS1014: Invalid character: `
(14640,56-57): run-time error JS1100: Expected ',': {
(14640,75-76): run-time error JS1014: Invalid character: #
(14640,91-92): run-time error JS1014: Invalid character: `
(14640,94-95): run-time error JS1195: Expected expression: ,
(14640,100-101): run-time error JS1014: Invalid character: `
(14640,121-122): run-time error JS1014: Invalid character: #
(14640,137-138): run-time error JS1014: Invalid character: `
(14640,138-139): run-time error JS1004: Expected ';': )
(14643,17-22): run-time error JS1019: Can't have 'break' outside of loop: break
(14645,28-29): run-time error JS1197: Too many errors. The file might not be a JavaScript file: =
(14634,1-36): run-time error JS1301: End of file encountered before function is properly closed: function UserPreferenceUrlRewrite()
(14647,54-55): run-time error JS1014: Invalid character: `
(14647,56-57): run-time error JS1100: Expected ',': {
(14647,75-76): run-time error JS1014: Invalid character: #
(14647,85-86): run-time error JS1014: Invalid character: `
(14647,88-89): run-time error JS1195: Expected expression: ,
(14647,90-92): run-time error JS1197: Too many errors. The file might not be a JavaScript file: ''
 */
/*! jQuery UI - v1.12.1 - 2016-09-14
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.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},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});;
/*! jQuery-ui-Slider-Pips - v1.11.4 - 2016-09-04
* Copyright (c) 2016 Simon Goellner <simey.me@gmail.com>; Licensed MIT */

!function(e){"use strict";var i={pips:function(i){function l(i){var l,s,t,a,n,r=[],o=0;if(u.values()&&u.values().length){for(t=u.values(),a=e.map(t,function(e){return Math.abs(e-i)}),n=Math.min.apply(Math,a),l=0;l<a.length;l++)a[l]===n&&r.push(l);for(o=r[0],s=0;s<r.length;s++)u._lastChangedValue===r[s]&&(o=r[s]);u.options.range&&2===r.length&&(i>t[1]?o=r[1]:i<t[0]&&(o=r[0]))}return o}function s(){u.element.off(".selectPip").on("mousedown.slider",u.element.data("mousedown-original")).removeClass("ui-slider-pips").find(".ui-slider-pip").remove()}function t(i,s){if(!u.option("disabled")){var t=e(i).data("value"),a=l(t);u.values()&&u.values().length?u.options.values[a]=u._trimAlignValue(t):u.options.value=u._trimAlignValue(t),u._refreshValue(),u._change(s,a)}}function a(i){var l,s,t,a,r,o=i,p="ui-slider-pip",d="",f=u.value(),v=u.values();if("first"===i?o=0:"last"===i&&(o=h),t=c+u.options.step*o,a=t.toString().replace(".","-"),r=o+c-c,l="array"===e.type(g.labels)?g.labels[r]||"":"object"===e.type(g.labels)?"first"===i?g.labels.first||"":"last"===i?g.labels.last||"":"array"===e.type(g.labels.rest)?g.labels.rest[r-1]||"":t:t,"first"===i?(s="0%",p+=" ui-slider-pip-first",p+="label"===g.first?" ui-slider-pip-label":"",p+=g.first===!1?" ui-slider-pip-hide":""):"last"===i?(s="100%",p+=" ui-slider-pip-last",p+="label"===g.last?" ui-slider-pip-label":"",p+=g.last===!1?" ui-slider-pip-hide":""):(s=(100/h*i).toFixed(4)+"%",p+="label"===g.rest?" ui-slider-pip-label":"",p+=g.rest===!1?" ui-slider-pip-hide":""),p+=" ui-slider-pip-"+a,v&&v.length){for(n=0;n<v.length;n++)t===v[n]&&(p+=" ui-slider-pip-initial-"+(n+1),p+=" ui-slider-pip-selected-"+(n+1));u.options.range&&t>v[0]&&t<v[1]&&(p+=" ui-slider-pip-inrange")}else t===f&&(p+=" ui-slider-pip-initial",p+=" ui-slider-pip-selected"),u.options.range&&("min"===u.options.range&&f>t||"max"===u.options.range&&t>f)&&(p+=" ui-slider-pip-inrange");return d="horizontal"===u.options.orientation?"left: "+s:"bottom: "+s,'<span class="'+p+'" style="'+d+'"><span class="ui-slider-line"></span><span class="ui-slider-label" data-value="'+t+'">'+g.formatLabel(l)+"</span></span>"}var n,r,o,p,d,u=this,f="",c=u._valueMin(),v=u._valueMax(),h=(v-c)/u.options.step,m=u.element.find(".ui-slider-handle"),g={first:"label",last:"label",rest:"pip",labels:!1,prefix:"",suffix:"",step:h>100?Math.floor(.05*h):1,formatLabel:function(e){return this.prefix+e+this.suffix}};if("object"!==e.type(i)&&"undefined"!==e.type(i))return void("destroy"===i?s():"refresh"===i&&u.element.slider("pips",u.element.data("pips-options")));e.extend(g,i),u.element.data("pips-options",g),u.options.pipStep=Math.abs(Math.round(g.step))||1,u.element.off(".selectPip").addClass("ui-slider-pips").find(".ui-slider-pip").remove();var b={single:function(i){this.resetClasses(),d.filter(".ui-slider-pip-"+this.classLabel(i)).addClass("ui-slider-pip-selected"),u.options.range&&d.each(function(l,s){var t=e(s).children(".ui-slider-label").data("value");("min"===u.options.range&&i>t||"max"===u.options.range&&t>i)&&e(s).addClass("ui-slider-pip-inrange")})},range:function(i){for(this.resetClasses(),n=0;n<i.length;n++)d.filter(".ui-slider-pip-"+this.classLabel(i[n])).addClass("ui-slider-pip-selected-"+(n+1));u.options.range&&d.each(function(l,s){var t=e(s).children(".ui-slider-label").data("value");t>i[0]&&t<i[1]&&e(s).addClass("ui-slider-pip-inrange")})},classLabel:function(e){return e.toString().replace(".","-")},resetClasses:function(){var e=/(^|\s*)(ui-slider-pip-selected|ui-slider-pip-inrange)(-{1,2}\d+|\s|$)/gi;d.removeClass(function(i,l){return(l.match(e)||[]).join(" ")})}};for(f+=a("first"),o=u.options.pipStep;h>o;o+=u.options.pipStep)f+=a(o);for(f+=a("last"),u.element.append(f),d=u.element.find(".ui-slider-pip"),p=e._data(u.element.get(0),"events").mousedown&&e._data(u.element.get(0),"events").mousedown.length?e._data(u.element.get(0),"events").mousedown:u.element.data("mousedown-handlers"),u.element.data("mousedown-handlers",p.slice()),r=0;r<p.length;r++)"slider"===p[r].namespace&&u.element.data("mousedown-original",p[r].handler);u.element.off("mousedown.slider").on("mousedown.selectPip",function(i){var s=e(i.target),a=l(s.data("value")),n=m.eq(a);if(n.addClass("ui-state-active"),s.is(".ui-slider-label"))t(s,i),u.element.one("mouseup.selectPip",function(){n.removeClass("ui-state-active").focus()});else{var r=u.element.data("mousedown-original");r(i)}}),u.element.on("slide.selectPip slidechange.selectPip",function(i,l){var s=e(this),t=s.slider("value"),a=s.slider("values");l&&(t=l.value,a=l.values),u.values()&&u.values().length?b.range(a):b.single(t)})},"float":function(i){function l(){a.element.off(".sliderFloat").removeClass("ui-slider-float").find(".ui-slider-tip, .ui-slider-tip-label").remove()}function s(i){var l=[],s=e.map(i,function(e){return Math.ceil((e-n)/a.options.step)});if("array"===e.type(f.labels))for(t=0;t<i.length;t++)l[t]=f.labels[s[t]]||i[t];else if("object"===e.type(f.labels))for(t=0;t<i.length;t++)i[t]===n?l[t]=f.labels.first||n:i[t]===r?l[t]=f.labels.last||r:"array"===e.type(f.labels.rest)?l[t]=f.labels.rest[s[t]-1]||i[t]:l[t]=i[t];else for(t=0;t<i.length;t++)l[t]=i[t];return l}var t,a=this,n=a._valueMin(),r=a._valueMax(),o=a._value(),p=a._values(),d=[],u=a.element.find(".ui-slider-handle"),f={handle:!0,pips:!1,labels:!1,prefix:"",suffix:"",event:"slidechange slide",formatLabel:function(e){return this.prefix+e+this.suffix}};if("object"!==e.type(i)&&"undefined"!==e.type(i))return void("destroy"===i?l():"refresh"===i&&a.element.slider("float",a.element.data("float-options")));if(e.extend(f,i),a.element.data("float-options",f),n>o&&(o=n),o>r&&(o=r),p&&p.length)for(t=0;t<p.length;t++)p[t]<n&&(p[t]=n),p[t]>r&&(p[t]=r);if(a.element.addClass("ui-slider-float").find(".ui-slider-tip, .ui-slider-tip-label").remove(),f.handle)for(d=s(a.values()&&a.values().length?p:[o]),t=0;t<d.length;t++)u.eq(t).append(e('<span class="ui-slider-tip">'+f.formatLabel(d[t])+"</span>"));f.pips&&a.element.find(".ui-slider-label").each(function(i,l){var t,a,n=e(l),r=[n.data("value")];t=f.formatLabel(s(r)[0]),a=e('<span class="ui-slider-tip-label">'+t+"</span>").insertAfter(n)}),"slide"!==f.event&&"slidechange"!==f.event&&"slide slidechange"!==f.event&&"slidechange slide"!==f.event&&(f.event="slidechange slide"),a.element.off(".sliderFloat").on(f.event+".sliderFloat",function(i,l){var t="array"===e.type(l.value)?l.value:[l.value],a=f.formatLabel(s(t)[0]);e(l.handle).find(".ui-slider-tip").html(a)})}};e.extend(!0,e.ui.slider.prototype,i)}(jQuery);;
/*!
 * jQuery UI Touch Punch 0.2.3
 *
 * Copyright 2011–2014, Dave Furfero
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Depends:
 *  jquery.ui.widget.js
 *  jquery.ui.mouse.js
 */
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);;
/*!
 * jQuery Validation Plugin v1.15.0
 *
 * http://jqueryvalidation.org/
 *
 * Copyright (c) 2016 JÃ¶rn Zaefferer
 * Released under the MIT license
 */
(function(n){typeof define=="function"&&define.amd?define(["jquery"],n):typeof module=="object"&&module.exports?module.exports=n(require("jquery")):n(jQuery)})(function(n){n.extend(n.fn,{validate:function(t){if(!this.length){t&&t.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.");return}var i=n.data(this[0],"validator");if(i)return i;if(this.attr("novalidate","novalidate"),i=new n.validator(t,this[0]),n.data(this[0],"validator",i),i.settings.onsubmit){this.on("click.validate",":submit",function(t){i.settings.submitHandler&&(i.submitButton=t.target);n(this).hasClass("cancel")&&(i.cancelSubmit=!0);n(this).attr("formnovalidate")!==undefined&&(i.cancelSubmit=!0)});this.on("submit.validate",function(t){function r(){var u,r;return i.settings.submitHandler?(i.submitButton&&(u=n("<input type='hidden'/>").attr("name",i.submitButton.name).val(n(i.submitButton).val()).appendTo(i.currentForm)),r=i.settings.submitHandler.call(i,i.currentForm,t),i.submitButton&&u.remove(),r!==undefined)?r:!1:!0}return(i.settings.debug&&t.preventDefault(),i.cancelSubmit)?(i.cancelSubmit=!1,r()):i.form()?i.pendingRequest?(i.formSubmitted=!0,!1):r():(i.focusInvalid(),!1)})}return i},valid:function(){var t,i,r;return n(this[0]).is("form")?t=this.validate().form():(r=[],t=!0,i=n(this[0].form).validate(),this.each(function(){t=i.element(this)&&t;t||(r=r.concat(i.errorList))}),i.errorList=r),t},rules:function(t,i){if(this.length){var r=this[0],e,s,f,u,o,h;if(t){e=n.data(r.form,"validator").settings;s=e.rules;f=n.validator.staticRules(r);switch(t){case"add":n.extend(f,n.validator.normalizeRule(i));delete f.messages;s[r.name]=f;i.messages&&(e.messages[r.name]=n.extend(e.messages[r.name],i.messages));break;case"remove":return i?(h={},n.each(i.split(/\s/),function(t,i){h[i]=f[i];delete f[i];i==="required"&&n(r).removeAttr("aria-required")}),h):(delete s[r.name],f)}}return u=n.validator.normalizeRules(n.extend({},n.validator.classRules(r),n.validator.attributeRules(r),n.validator.dataRules(r),n.validator.staticRules(r)),r),u.required&&(o=u.required,delete u.required,u=n.extend({required:o},u),n(r).attr("aria-required","true")),u.remote&&(o=u.remote,delete u.remote,u=n.extend(u,{remote:o})),u}}});n.extend(n.expr[":"],{blank:function(t){return!n.trim(""+n(t).val())},filled:function(t){var i=n(t).val();return i!==null&&!!n.trim(""+i)},unchecked:function(t){return!n(t).prop("checked")}});n.validator=function(t,i){this.settings=n.extend(!0,{},n.validator.defaults,t);this.currentForm=i;this.init()};n.validator.format=function(t,i){return arguments.length===1?function(){var i=n.makeArray(arguments);return i.unshift(t),n.validator.format.apply(this,i)}:i===undefined?t:(arguments.length>2&&i.constructor!==Array&&(i=n.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),n.each(i,function(n,i){t=t.replace(new RegExp("\\{"+n+"\\}","g"),function(){return i})}),t)};n.extend(n.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:n([]),errorLabelContainer:n([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(n){this.lastActive=n;this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,n,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(n)))},onfocusout:function(n){!this.checkable(n)&&(n.name in this.submitted||!this.optional(n))&&this.element(n)},onkeyup:function(t,i){(i.which!==9||this.elementValue(t)!=="")&&n.inArray(i.keyCode,[16,17,18,20,35,36,37,38,39,40,45,144,225])===-1&&(t.name in this.submitted||t.name in this.invalid)&&this.element(t)},onclick:function(n){n.name in this.submitted?this.element(n):n.parentNode.name in this.submitted&&this.element(n.parentNode)},highlight:function(t,i,r){t.type==="radio"?this.findByName(t.name).addClass(i).removeClass(r):n(t).addClass(i).removeClass(r)},unhighlight:function(t,i,r){t.type==="radio"?this.findByName(t.name).removeClass(i).addClass(r):n(t).removeClass(i).addClass(r)}},setDefaults:function(t){n.extend(n.validator.defaults,t)},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:n.validator.format("Please enter no more than {0} characters."),minlength:n.validator.format("Please enter at least {0} characters."),rangelength:n.validator.format("Please enter a value between {0} and {1} characters long."),range:n.validator.format("Please enter a value between {0} and {1}."),max:n.validator.format("Please enter a value less than or equal to {0}."),min:n.validator.format("Please enter a value greater than or equal to {0}."),step:n.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function i(t){var r=n.data(this.form,"validator"),u="on"+t.type.replace(/^validate/,""),i=r.settings;i[u]&&!n(this).is(i.ignore)&&i[u].call(r,this,t)}this.labelContainer=n(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||n(this.currentForm);this.containers=n(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var r=this.groups={},t;n.each(this.settings.groups,function(t,i){typeof i=="string"&&(i=i.split(/\s/));n.each(i,function(n,i){r[i]=t})});t=this.settings.rules;n.each(t,function(i,r){t[i]=n.validator.normalizeRule(r)});n(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]",i).on("click.validate","select, option, [type='radio'], [type='checkbox']",i);if(this.settings.invalidHandler)n(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler);n(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),n.extend(this.submitted,this.errorMap),this.invalid=n.extend({},this.errorMap),this.valid()||n(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var n=0,t=this.currentElements=this.elements();t[n];n++)this.check(t[n]);return this.valid()},element:function(t){var i=this.clean(t),r=this.validationTargetFor(i),u=this,f=!0,e,o;return r===undefined?delete this.invalid[i.name]:(this.prepareElement(r),this.currentElements=n(r),o=this.groups[r.name],o&&n.each(this.groups,function(n,t){t===o&&n!==r.name&&(i=u.validationTargetFor(u.clean(u.findByName(n))),i&&i.name in u.invalid&&(u.currentElements.push(i),f=f&&u.check(i)))}),e=this.check(r)!==!1,f=f&&e,this.invalid[r.name]=e?!1:!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),n(t).attr("aria-invalid",!e)),f},showErrors:function(t){if(t){var i=this;n.extend(this.errorMap,t);this.errorList=n.map(this.errorMap,function(n,t){return{message:n,element:i.findByName(t)[0]}});this.successList=n.grep(this.successList,function(n){return!(n.name in t)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){n.fn.resetForm&&n(this.currentForm).resetForm();this.invalid={};this.submitted={};this.prepareForm();this.hideErrors();var t=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(t)},resetElements:function(n){var t;if(this.settings.unhighlight)for(t=0;n[t];t++)this.settings.unhighlight.call(this,n[t],this.settings.errorClass,""),this.findByName(n[t].name).removeClass(this.settings.validClass);else n.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(n){var t=0;for(var i in n)n[i]&&t++;return t},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(n){n.not(this.containers).text("");this.addWrapper(n).hide()},valid:function(){return this.size()===0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{n(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(t){}},findLastActive:function(){var t=this.lastActive;return t&&n.grep(this.errorList,function(n){return n.element.name===t.name}).length===1&&t},elements:function(){var t=this,i={};return n(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var r=this.name||n(this).attr("name");return(!r&&t.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=n(this).closest("form")[0]),r in i||!t.objectLength(n(this).rules()))?!1:(i[r]=!0,!0)})},clean:function(t){return n(t)[0]},errors:function(){var t=this.settings.errorClass.split(" ").join(".");return n(this.settings.errorElement+"."+t,this.errorContext)},resetInternals:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=n([]);this.toHide=n([])},reset:function(){this.resetInternals();this.currentElements=n([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},prepareElement:function(n){this.reset();this.toHide=this.errorsFor(n)},elementValue:function(t){var f=n(t),u=t.type,i,r;return u==="radio"||u==="checkbox"?this.findByName(t.name).filter(":checked").val():u==="number"&&typeof t.validity!="undefined"?t.validity.badInput?"NaN":f.val():(i=t.hasAttribute("contenteditable")?f.text():f.val(),u==="file")?i.substr(0,12)==="C:\\fakepath\\"?i.substr(12):(r=i.lastIndexOf("/"),r>=0)?i.substr(r+1):(r=i.lastIndexOf("\\"),r>=0)?i.substr(r+1):i:typeof i=="string"?i.replace(/\r/g,""):i},check:function(t){t=this.validationTargetFor(this.clean(t));var i=n(t).rules(),h=n.map(i,function(n,t){return t}).length,s=!1,u=this.elementValue(t),f,e,r;if(typeof i.normalizer=="function"){if(u=i.normalizer.call(t,u),typeof u!="string")throw new TypeError("The normalizer should return a string value.");delete i.normalizer}for(e in i){r={method:e,parameters:i[e]};try{if(f=n.validator.methods[e].call(this,u,t,r.parameters),f==="dependency-mismatch"&&h===1){s=!0;continue}if(s=!1,f==="pending"){this.toHide=this.toHide.not(this.errorsFor(t));return}if(!f)return this.formatAndAdd(t,r),!1}catch(o){this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+t.id+", check the '"+r.method+"' method.",o);o instanceof TypeError&&(o.message+=".  Exception occurred when checking element "+t.id+", check the '"+r.method+"' method.");throw o;}}if(!s)return this.objectLength(i)&&this.successList.push(t),!0},customDataMessage:function(t,i){return n(t).data("msg"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase())||n(t).data("msg")},customMessage:function(n,t){var i=this.settings.messages[n];return i&&(i.constructor===String?i:i[t])},findDefined:function(){for(var n=0;n<arguments.length;n++)if(arguments[n]!==undefined)return arguments[n];return undefined},defaultMessage:function(t,i){var r=this.findDefined(this.customMessage(t.name,i.method),this.customDataMessage(t,i.method),!this.settings.ignoreTitle&&t.title||undefined,n.validator.messages[i.method],"<strong>Warning: No message defined for "+t.name+"<\/strong>"),u=/\$?\{(\d+)\}/g;return typeof r=="function"?r=r.call(this,i.parameters,t):u.test(r)&&(r=n.validator.format(r.replace(u,"{$1}"),i.parameters)),r},formatAndAdd:function(n,t){var i=this.defaultMessage(n,t);this.errorList.push({message:i,element:n,method:t.method});this.errorMap[n.name]=i;this.submitted[n.name]=i},addWrapper:function(n){return this.settings.wrapper&&(n=n.add(n.parent(this.settings.wrapper))),n},defaultShowErrors:function(){for(var i,t,n=0;this.errorList[n];n++)t=this.errorList[n],this.settings.highlight&&this.settings.highlight.call(this,t.element,this.settings.errorClass,this.settings.validClass),this.showLabel(t.element,t.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(n=0;this.successList[n];n++)this.showLabel(this.successList[n]);if(this.settings.unhighlight)for(n=0,i=this.validElements();i[n];n++)this.settings.unhighlight.call(this,i[n],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 n(this.errorList).map(function(){return this.element})},showLabel:function(t,i){var u,s,e,o,r=this.errorsFor(t),h=this.idOrName(t),f=n(t).attr("aria-describedby");r.length?(r.removeClass(this.settings.validClass).addClass(this.settings.errorClass),r.html(i)):(r=n("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(i||""),u=r,this.settings.wrapper&&(u=r.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(u):this.settings.errorPlacement?this.settings.errorPlacement(u,n(t)):u.insertAfter(t),r.is("label")?r.attr("for",h):r.parents("label[for='"+this.escapeCssMeta(h)+"']").length===0&&(e=r.attr("id"),f?f.match(new RegExp("\\b"+this.escapeCssMeta(e)+"\\b"))||(f+=" "+e):f=e,n(t).attr("aria-describedby",f),s=this.groups[t.name],s&&(o=this,n.each(o.groups,function(t,i){i===s&&n("[name='"+o.escapeCssMeta(t)+"']",o.currentForm).attr("aria-describedby",r.attr("id"))}))));!i&&this.settings.success&&(r.text(""),typeof this.settings.success=="string"?r.addClass(this.settings.success):this.settings.success(r,t));this.toShow=this.toShow.add(r)},errorsFor:function(t){var r=this.escapeCssMeta(this.idOrName(t)),u=n(t).attr("aria-describedby"),i="label[for='"+r+"'], label[for='"+r+"'] *";return u&&(i=i+", #"+this.escapeCssMeta(u).replace(/\s+/g,", #")),this.errors().filter(i)},escapeCssMeta:function(n){return n.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(n){return this.groups[n.name]||(this.checkable(n)?n.name:n.id||n.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name)),n(t).not(this.settings.ignore)[0]},checkable:function(n){return/radio|checkbox/i.test(n.type)},findByName:function(t){return n(this.currentForm).find("[name='"+this.escapeCssMeta(t)+"']")},getLength:function(t,i){switch(i.nodeName.toLowerCase()){case"select":return n("option:selected",i).length;case"input":if(this.checkable(i))return this.findByName(i.name).filter(":checked").length}return t.length},depend:function(n,t){return this.dependTypes[typeof n]?this.dependTypes[typeof n](n,t):!0},dependTypes:{boolean:function(n){return n},string:function(t,i){return!!n(t,i.form).length},"function":function(n,t){return n(t)}},optional:function(t){var i=this.elementValue(t);return!n.validator.methods.required.call(this,i,t)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,n(t).addClass(this.settings.pendingClass),this.pending[t.name]=!0)},stopRequest:function(t,i){this.pendingRequest--;this.pendingRequest<0&&(this.pendingRequest=0);delete this.pending[t.name];n(t).removeClass(this.settings.pendingClass);i&&this.pendingRequest===0&&this.formSubmitted&&this.form()?(n(this.currentForm).submit(),this.formSubmitted=!1):!i&&this.pendingRequest===0&&this.formSubmitted&&(n(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(t,i){return n.data(t,"previousValue")||n.data(t,"previousValue",{old:null,valid:!0,message:this.defaultMessage(t,{method:i})})},destroy:function(){this.resetForm();n(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-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(t,i){t.constructor===String?this.classRuleSettings[t]=i:n.extend(this.classRuleSettings,t)},classRules:function(t){var i={},r=n(t).attr("class");return r&&n.each(r.split(" "),function(){this in n.validator.classRuleSettings&&n.extend(i,n.validator.classRuleSettings[this])}),i},normalizeAttributeRule:function(n,t,i,r){/min|max|step/.test(i)&&(t===null||/number|range|text/.test(t))&&(r=Number(r),isNaN(r)&&(r=undefined));r||r===0?n[i]=r:t===i&&t!=="range"&&(n[i]=!0)},attributeRules:function(t){var r={},f=n(t),e=t.getAttribute("type"),u,i;for(u in n.validator.methods)u==="required"?(i=t.getAttribute(u),i===""&&(i=!0),i=!!i):i=f.attr(u),this.normalizeAttributeRule(r,e,u,i);return r.maxlength&&/-1|2147483647|524288/.test(r.maxlength)&&delete r.maxlength,r},dataRules:function(t){var r={},f=n(t),e=t.getAttribute("type"),i,u;for(i in n.validator.methods)u=f.data("rule"+i.charAt(0).toUpperCase()+i.substring(1).toLowerCase()),this.normalizeAttributeRule(r,e,i,u);return r},staticRules:function(t){var i={},r=n.data(t.form,"validator");return r.settings.rules&&(i=n.validator.normalizeRule(r.settings.rules[t.name])||{}),i},normalizeRules:function(t,i){return n.each(t,function(r,u){if(u===!1){delete t[r];return}if(u.param||u.depends){var f=!0;switch(typeof u.depends){case"string":f=!!n(u.depends,i.form).length;break;case"function":f=u.depends.call(i,i)}f?t[r]=u.param!==undefined?u.param:!0:(n.data(i.form,"validator").resetElements(n(i)),delete t[r])}}),n.each(t,function(r,u){t[r]=n.isFunction(u)&&r!=="normalizer"?u(i):u}),n.each(["minlength","maxlength"],function(){t[this]&&(t[this]=Number(t[this]))}),n.each(["rangelength","range"],function(){var i;t[this]&&(n.isArray(t[this])?t[this]=[Number(t[this][0]),Number(t[this][1])]:typeof t[this]=="string"&&(i=t[this].replace(/[\[\]]/g,"").split(/[\s,]+/),t[this]=[Number(i[0]),Number(i[1])]))}),n.validator.autoCreateRanges&&(t.min!=null&&t.max!=null&&(t.range=[t.min,t.max],delete t.min,delete t.max),t.minlength!=null&&t.maxlength!=null&&(t.rangelength=[t.minlength,t.maxlength],delete t.minlength,delete t.maxlength)),t},normalizeRule:function(t){if(typeof t=="string"){var i={};n.each(t.split(/\s/),function(){i[this]=!0});t=i}return t},addMethod:function(t,i,r){n.validator.methods[t]=i;n.validator.messages[t]=r!==undefined?r:n.validator.messages[t];i.length<3&&n.validator.addClassRules(t,n.validator.normalizeRule(t))},methods:{required:function(t,i,r){if(!this.depend(r,i))return"dependency-mismatch";if(i.nodeName.toLowerCase()==="select"){var u=n(i).val();return u&&u.length>0}return this.checkable(i)?this.getLength(t,i)>0:t.length>0},email:function(n,t){return this.optional(t)||/^[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(n)},url:function(n,t){return this.optional(t)||/^(?:(?:(?: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(n)},date:function(n,t){return this.optional(t)||!/Invalid|NaN/.test(new Date(n).toString())},dateISO:function(n,t){return this.optional(t)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(n)},number:function(n,t){return this.optional(t)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(n)},digits:function(n,t){return this.optional(t)||/^\d+$/.test(n)},minlength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(t,i);return this.optional(i)||u>=r},maxlength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(t,i);return this.optional(i)||u<=r},rangelength:function(t,i,r){var u=n.isArray(t)?t.length:this.getLength(t,i);return this.optional(i)||u>=r[0]&&u<=r[1]},min:function(n,t,i){return this.optional(t)||n>=i},max:function(n,t,i){return this.optional(t)||n<=i},range:function(n,t,i){return this.optional(t)||n>=i[0]&&n<=i[1]},step:function(t,i,r){var u=n(i).attr("type"),f="Step attribute on input type "+u+" is not supported.",e=new RegExp("\\b"+u+"\\b"),o=u&&!e.test("text,number,range");if(o)throw new Error(f);return this.optional(i)||t%r==0},equalTo:function(t,i,r){var u=n(r);if(this.settings.onfocusout&&u.not(".validate-equalTo-blur").length)u.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){n(i).valid()});return t===u.val()},remote:function(t,i,r,u){if(this.optional(i))return"dependency-mismatch";u=typeof u=="string"&&u||"remote";var e=this.previousValue(i,u),f,o,s;return(this.settings.messages[i.name]||(this.settings.messages[i.name]={}),e.originalMessage=e.originalMessage||this.settings.messages[i.name][u],this.settings.messages[i.name][u]=e.message,r=typeof r=="string"&&{url:r}||r,s=n.param(n.extend({data:t},r.data)),e.old===s)?e.valid:(e.old=s,f=this,this.startRequest(i),o={},o[i.name]=t,n.ajax(n.extend(!0,{mode:"abort",port:"validate"+i.name,dataType:"json",data:o,context:f.currentForm,success:function(n){var r=n===!0||n==="true",o,s,h;f.settings.messages[i.name][u]=e.originalMessage;r?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(i),f.formSubmitted=h,f.successList.push(i),f.invalid[i.name]=!1,f.showErrors()):(o={},s=n||f.defaultMessage(i,{method:u,parameters:t}),o[i.name]=e.message=s,f.invalid[i.name]=!0,f.showErrors(o));e.valid=r;f.stopRequest(i,r)}},r)),"pending")}}});var t={},i;n.ajaxPrefilter?n.ajaxPrefilter(function(n,i,r){var u=n.port;n.mode==="abort"&&(t[u]&&t[u].abort(),t[u]=r)}):(i=n.ajax,n.ajax=function(r){var f=("mode"in r?r:n.ajaxSettings).mode,u=("port"in r?r:n.ajaxSettings).port;return f==="abort"?(t[u]&&t[u].abort(),t[u]=i.apply(this,arguments),t[u]):i.apply(this,arguments)})});;
/*
     _ _      _       _
 ___| (_) ___| | __  (_)___
/ __| | |/ __| |/ /  | / __|
\__ \ | | (__|   < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
                   |__/

 Version: 1.6.0
  Author: Ken Wheeler
 Website: http://kenwheeler.github.io
    Docs: http://kenwheeler.github.io/slick
    Repo: http://github.com/kenwheeler/slick
  Issues: http://github.com/kenwheeler/slick/issues

 */
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"undefined"!=typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";var b=window.Slick||{};b=function(){function c(c,d){var f,e=this;e.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:a(c),appendDots:a(c),arrows:!0,asNavFor:null,prevArrow:'<button type="button" data-role="none" class="slick-prev" aria-label="Previous" tabindex="0" role="button">Previous</button>',nextArrow:'<button type="button" data-role="none" class="slick-next" aria-label="Next" tabindex="0" role="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(b,c){return a('<button type="button" data-role="none" role="button" tabindex="0" />').text(c+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},e.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},a.extend(e,e.initials),e.activeBreakpoint=null,e.animType=null,e.animProp=null,e.breakpoints=[],e.breakpointSettings=[],e.cssTransitions=!1,e.focussed=!1,e.interrupted=!1,e.hidden="hidden",e.paused=!0,e.positionProp=null,e.respondTo=null,e.rowCount=1,e.shouldClick=!0,e.$slider=a(c),e.$slidesCache=null,e.transformType=null,e.transitionType=null,e.visibilityChange="visibilitychange",e.windowWidth=0,e.windowTimer=null,f=a(c).data("slick")||{},e.options=a.extend({},e.defaults,d,f),e.currentSlide=e.options.initialSlide,e.originalSettings=e.options,"undefined"!=typeof document.mozHidden?(e.hidden="mozHidden",e.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(e.hidden="webkitHidden",e.visibilityChange="webkitvisibilitychange"),e.autoPlay=a.proxy(e.autoPlay,e),e.autoPlayClear=a.proxy(e.autoPlayClear,e),e.autoPlayIterator=a.proxy(e.autoPlayIterator,e),e.changeSlide=a.proxy(e.changeSlide,e),e.clickHandler=a.proxy(e.clickHandler,e),e.selectHandler=a.proxy(e.selectHandler,e),e.setPosition=a.proxy(e.setPosition,e),e.swipeHandler=a.proxy(e.swipeHandler,e),e.dragHandler=a.proxy(e.dragHandler,e),e.keyHandler=a.proxy(e.keyHandler,e),e.instanceUid=b++,e.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,e.registerBreakpoints(),e.init(!0)}var b=0;return c}(),b.prototype.activateADA=function(){var a=this;a.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},b.prototype.addSlide=b.prototype.slickAdd=function(b,c,d){var e=this;if("boolean"==typeof c)d=c,c=null;else if(0>c||c>=e.slideCount)return!1;e.unload(),"number"==typeof c?0===c&&0===e.$slides.length?a(b).appendTo(e.$slideTrack):d?a(b).insertBefore(e.$slides.eq(c)):a(b).insertAfter(e.$slides.eq(c)):d===!0?a(b).prependTo(e.$slideTrack):a(b).appendTo(e.$slideTrack),e.$slides=e.$slideTrack.children(this.options.slide),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.append(e.$slides),e.$slides.each(function(b,c){a(c).attr("data-slick-index",b)}),e.$slidesCache=e.$slides,e.reinit()},b.prototype.animateHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.animate({height:b},a.options.speed)}},b.prototype.animateSlide=function(b,c){var d={},e=this;e.animateHeight(),e.options.rtl===!0&&e.options.vertical===!1&&(b=-b),e.transformsEnabled===!1?e.options.vertical===!1?e.$slideTrack.animate({left:b},e.options.speed,e.options.easing,c):e.$slideTrack.animate({top:b},e.options.speed,e.options.easing,c):e.cssTransitions===!1?(e.options.rtl===!0&&(e.currentLeft=-e.currentLeft),a({animStart:e.currentLeft}).animate({animStart:b},{duration:e.options.speed,easing:e.options.easing,step:function(a){a=Math.ceil(a),e.options.vertical===!1?(d[e.animType]="translate("+a+"px, 0px)",e.$slideTrack.css(d)):(d[e.animType]="translate(0px,"+a+"px)",e.$slideTrack.css(d))},complete:function(){c&&c.call()}})):(e.applyTransition(),b=Math.ceil(b),e.options.vertical===!1?d[e.animType]="translate3d("+b+"px, 0px, 0px)":d[e.animType]="translate3d(0px,"+b+"px, 0px)",e.$slideTrack.css(d),c&&setTimeout(function(){e.disableTransition(),c.call()},e.options.speed))},b.prototype.getNavTarget=function(){var b=this,c=b.options.asNavFor;return c&&null!==c&&(c=a(c).not(b.$slider)),c},b.prototype.asNavFor=function(b){var c=this,d=c.getNavTarget();null!==d&&"object"==typeof d&&d.each(function(){var c=a(this).slick("getSlick");c.unslicked||c.slideHandler(b,!0)})},b.prototype.applyTransition=function(a){var b=this,c={};b.options.fade===!1?c[b.transitionType]=b.transformType+" "+b.options.speed+"ms "+b.options.cssEase:c[b.transitionType]="opacity "+b.options.speed+"ms "+b.options.cssEase,b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.autoPlay=function(){var a=this;a.autoPlayClear(),a.slideCount>a.options.slidesToShow&&(a.autoPlayTimer=setInterval(a.autoPlayIterator,a.options.autoplaySpeed))},b.prototype.autoPlayClear=function(){var a=this;a.autoPlayTimer&&clearInterval(a.autoPlayTimer)},b.prototype.autoPlayIterator=function(){var a=this,b=a.currentSlide+a.options.slidesToScroll;a.paused||a.interrupted||a.focussed||(a.options.infinite===!1&&(1===a.direction&&a.currentSlide+1===a.slideCount-1?a.direction=0:0===a.direction&&(b=a.currentSlide-a.options.slidesToScroll,a.currentSlide-1===0&&(a.direction=1))),a.slideHandler(b))},b.prototype.buildArrows=function(){var b=this;b.options.arrows===!0&&(b.$prevArrow=a(b.options.prevArrow).addClass("slick-arrow"),b.$nextArrow=a(b.options.nextArrow).addClass("slick-arrow"),b.slideCount>b.options.slidesToShow?(b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.prependTo(b.options.appendArrows),b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.appendTo(b.options.appendArrows),b.options.infinite!==!0&&b.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},b.prototype.buildDots=function(){var c,d,b=this;if(b.options.dots===!0&&b.slideCount>b.options.slidesToShow){for(b.$slider.addClass("slick-dotted"),d=a("<ul />").addClass(b.options.dotsClass),c=0;c<=b.getDotCount();c+=1)d.append(a("<li />").append(b.options.customPaging.call(this,b,c)));b.$dots=d.appendTo(b.options.appendDots),b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden","false")}},b.prototype.buildOut=function(){var b=this;b.$slides=b.$slider.children(b.options.slide+":not(.slick-cloned)").addClass("slick-slide"),b.slideCount=b.$slides.length,b.$slides.each(function(b,c){a(c).attr("data-slick-index",b).data("originalStyling",a(c).attr("style")||"")}),b.$slider.addClass("slick-slider"),b.$slideTrack=0===b.slideCount?a('<div class="slick-track"/>').appendTo(b.$slider):b.$slides.wrapAll('<div class="slick-track"/>').parent(),b.$list=b.$slideTrack.wrap('<div aria-live="polite" class="slick-list"/>').parent(),b.$slideTrack.css("opacity",0),(b.options.centerMode===!0||b.options.swipeToSlide===!0)&&(b.options.slidesToScroll=1),a("img[data-lazy]",b.$slider).not("[src]").addClass("slick-loading"),b.setupInfinite(),b.buildArrows(),b.buildDots(),b.updateDots(),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.options.draggable===!0&&b.$list.addClass("draggable")},b.prototype.buildRows=function(){var b,c,d,e,f,g,h,a=this;if(e=document.createDocumentFragment(),g=a.$slider.children(),a.options.rows>1){for(h=a.options.slidesPerRow*a.options.rows,f=Math.ceil(g.length/h),b=0;f>b;b++){var i=document.createElement("div");for(c=0;c<a.options.rows;c++){var j=document.createElement("div");for(d=0;d<a.options.slidesPerRow;d++){var k=b*h+(c*a.options.slidesPerRow+d);g.get(k)&&j.appendChild(g.get(k))}i.appendChild(j)}e.appendChild(i)}a.$slider.empty().append(e),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},b.prototype.checkResponsive=function(b,c){var e,f,g,d=this,h=!1,i=d.$slider.width(),j=window.innerWidth||a(window).width();if("window"===d.respondTo?g=j:"slider"===d.respondTo?g=i:"min"===d.respondTo&&(g=Math.min(j,i)),d.options.responsive&&d.options.responsive.length&&null!==d.options.responsive){f=null;for(e in d.breakpoints)d.breakpoints.hasOwnProperty(e)&&(d.originalSettings.mobileFirst===!1?g<d.breakpoints[e]&&(f=d.breakpoints[e]):g>d.breakpoints[e]&&(f=d.breakpoints[e]));null!==f?null!==d.activeBreakpoint?(f!==d.activeBreakpoint||c)&&(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):(d.activeBreakpoint=f,"unslick"===d.breakpointSettings[f]?d.unslick(f):(d.options=a.extend({},d.originalSettings,d.breakpointSettings[f]),b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b)),h=f):null!==d.activeBreakpoint&&(d.activeBreakpoint=null,d.options=d.originalSettings,b===!0&&(d.currentSlide=d.options.initialSlide),d.refresh(b),h=f),b||h===!1||d.$slider.trigger("breakpoint",[d,h])}},b.prototype.changeSlide=function(b,c){var f,g,h,d=this,e=a(b.currentTarget);switch(e.is("a")&&b.preventDefault(),e.is("li")||(e=e.closest("li")),h=d.slideCount%d.options.slidesToScroll!==0,f=h?0:(d.slideCount-d.currentSlide)%d.options.slidesToScroll,b.data.message){case"previous":g=0===f?d.options.slidesToScroll:d.options.slidesToShow-f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide-g,!1,c);break;case"next":g=0===f?d.options.slidesToScroll:f,d.slideCount>d.options.slidesToShow&&d.slideHandler(d.currentSlide+g,!1,c);break;case"index":var i=0===b.data.index?0:b.data.index||e.index()*d.options.slidesToScroll;d.slideHandler(d.checkNavigable(i),!1,c),e.children().trigger("focus");break;default:return}},b.prototype.checkNavigable=function(a){var c,d,b=this;if(c=b.getNavigableIndexes(),d=0,a>c[c.length-1])a=c[c.length-1];else for(var e in c){if(a<c[e]){a=d;break}d=c[e]}return a},b.prototype.cleanUpEvents=function(){var b=this;b.options.dots&&null!==b.$dots&&a("li",b.$dots).off("click.slick",b.changeSlide).off("mouseenter.slick",a.proxy(b.interrupt,b,!0)).off("mouseleave.slick",a.proxy(b.interrupt,b,!1)),b.$slider.off("focus.slick blur.slick"),b.options.arrows===!0&&b.slideCount>b.options.slidesToShow&&(b.$prevArrow&&b.$prevArrow.off("click.slick",b.changeSlide),b.$nextArrow&&b.$nextArrow.off("click.slick",b.changeSlide)),b.$list.off("touchstart.slick mousedown.slick",b.swipeHandler),b.$list.off("touchmove.slick mousemove.slick",b.swipeHandler),b.$list.off("touchend.slick mouseup.slick",b.swipeHandler),b.$list.off("touchcancel.slick mouseleave.slick",b.swipeHandler),b.$list.off("click.slick",b.clickHandler),a(document).off(b.visibilityChange,b.visibility),b.cleanUpSlideEvents(),b.options.accessibility===!0&&b.$list.off("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().off("click.slick",b.selectHandler),a(window).off("orientationchange.slick.slick-"+b.instanceUid,b.orientationChange),a(window).off("resize.slick.slick-"+b.instanceUid,b.resize),a("[draggable!=true]",b.$slideTrack).off("dragstart",b.preventDefault),a(window).off("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).off("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.cleanUpSlideEvents=function(){var b=this;b.$list.off("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.off("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.cleanUpRows=function(){var b,a=this;a.options.rows>1&&(b=a.$slides.children().children(),b.removeAttr("style"),a.$slider.empty().append(b))},b.prototype.clickHandler=function(a){var b=this;b.shouldClick===!1&&(a.stopImmediatePropagation(),a.stopPropagation(),a.preventDefault())},b.prototype.destroy=function(b){var c=this;c.autoPlayClear(),c.touchObject={},c.cleanUpEvents(),a(".slick-cloned",c.$slider).detach(),c.$dots&&c.$dots.remove(),c.$prevArrow&&c.$prevArrow.length&&(c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.prevArrow)&&c.$prevArrow.remove()),c.$nextArrow&&c.$nextArrow.length&&(c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),c.htmlExpr.test(c.options.nextArrow)&&c.$nextArrow.remove()),c.$slides&&(c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){a(this).attr("style",a(this).data("originalStyling"))}),c.$slideTrack.children(this.options.slide).detach(),c.$slideTrack.detach(),c.$list.detach(),c.$slider.append(c.$slides)),c.cleanUpRows(),c.$slider.removeClass("slick-slider"),c.$slider.removeClass("slick-initialized"),c.$slider.removeClass("slick-dotted"),c.unslicked=!0,b||c.$slider.trigger("destroy",[c])},b.prototype.disableTransition=function(a){var b=this,c={};c[b.transitionType]="",b.options.fade===!1?b.$slideTrack.css(c):b.$slides.eq(a).css(c)},b.prototype.fadeSlide=function(a,b){var c=this;c.cssTransitions===!1?(c.$slides.eq(a).css({zIndex:c.options.zIndex}),c.$slides.eq(a).animate({opacity:1},c.options.speed,c.options.easing,b)):(c.applyTransition(a),c.$slides.eq(a).css({opacity:1,zIndex:c.options.zIndex}),b&&setTimeout(function(){c.disableTransition(a),b.call()},c.options.speed))},b.prototype.fadeSlideOut=function(a){var b=this;b.cssTransitions===!1?b.$slides.eq(a).animate({opacity:0,zIndex:b.options.zIndex-2},b.options.speed,b.options.easing):(b.applyTransition(a),b.$slides.eq(a).css({opacity:0,zIndex:b.options.zIndex-2}))},b.prototype.filterSlides=b.prototype.slickFilter=function(a){var b=this;null!==a&&(b.$slidesCache=b.$slides,b.unload(),b.$slideTrack.children(this.options.slide).detach(),b.$slidesCache.filter(a).appendTo(b.$slideTrack),b.reinit())},b.prototype.focusHandler=function(){var b=this;b.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*:not(.slick-arrow)",function(c){c.stopImmediatePropagation();var d=a(this);setTimeout(function(){b.options.pauseOnFocus&&(b.focussed=d.is(":focus"),b.autoPlay())},0)})},b.prototype.getCurrent=b.prototype.slickCurrentSlide=function(){var a=this;return a.currentSlide},b.prototype.getDotCount=function(){var a=this,b=0,c=0,d=0;if(a.options.infinite===!0)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else if(a.options.centerMode===!0)d=a.slideCount;else if(a.options.asNavFor)for(;b<a.slideCount;)++d,b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;else d=1+Math.ceil((a.slideCount-a.options.slidesToShow)/a.options.slidesToScroll);return d-1},b.prototype.getLeft=function(a){var c,d,f,b=this,e=0;return b.slideOffset=0,d=b.$slides.first().outerHeight(!0),b.options.infinite===!0?(b.slideCount>b.options.slidesToShow&&(b.slideOffset=b.slideWidth*b.options.slidesToShow*-1,e=d*b.options.slidesToShow*-1),b.slideCount%b.options.slidesToScroll!==0&&a+b.options.slidesToScroll>b.slideCount&&b.slideCount>b.options.slidesToShow&&(a>b.slideCount?(b.slideOffset=(b.options.slidesToShow-(a-b.slideCount))*b.slideWidth*-1,e=(b.options.slidesToShow-(a-b.slideCount))*d*-1):(b.slideOffset=b.slideCount%b.options.slidesToScroll*b.slideWidth*-1,e=b.slideCount%b.options.slidesToScroll*d*-1))):a+b.options.slidesToShow>b.slideCount&&(b.slideOffset=(a+b.options.slidesToShow-b.slideCount)*b.slideWidth,e=(a+b.options.slidesToShow-b.slideCount)*d),b.slideCount<=b.options.slidesToShow&&(b.slideOffset=0,e=0),b.options.centerMode===!0&&b.options.infinite===!0?b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)-b.slideWidth:b.options.centerMode===!0&&(b.slideOffset=0,b.slideOffset+=b.slideWidth*Math.floor(b.options.slidesToShow/2)),c=b.options.vertical===!1?a*b.slideWidth*-1+b.slideOffset:a*d*-1+e,b.options.variableWidth===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,b.options.centerMode===!0&&(f=b.slideCount<=b.options.slidesToShow||b.options.infinite===!1?b.$slideTrack.children(".slick-slide").eq(a):b.$slideTrack.children(".slick-slide").eq(a+b.options.slidesToShow+1),c=b.options.rtl===!0?f[0]?-1*(b.$slideTrack.width()-f[0].offsetLeft-f.width()):0:f[0]?-1*f[0].offsetLeft:0,c+=(b.$list.width()-f.outerWidth())/(b.options.centerMode===!0&&b.options.infinite===!1&&b.options.adjustLastSlide===!0&&a==b.slideCount-1?1.05:2))),c},b.prototype.getOption=b.prototype.slickGetOption=function(a){var b=this;return b.options[a]},b.prototype.getNavigableIndexes=function(){var e,a=this,b=0,c=0,d=[];for(a.options.infinite===!1?e=a.slideCount:(b=-1*a.options.slidesToScroll,c=-1*a.options.slidesToScroll,e=2*a.slideCount);e>b;)d.push(b),b=c+a.options.slidesToScroll,c+=a.options.slidesToScroll<=a.options.slidesToShow?a.options.slidesToScroll:a.options.slidesToShow;return d},b.prototype.getSlick=function(){return this},b.prototype.getSlideCount=function(){var c,d,e,b=this;return e=b.options.centerMode===!0?b.slideWidth*Math.floor(b.options.slidesToShow/2):0,b.options.swipeToSlide===!0?(b.$slideTrack.find(".slick-slide").each(function(c,f){return f.offsetLeft-e+a(f).outerWidth()/2>-1*b.swipeLeft?(d=f,!1):void 0}),c=Math.abs(a(d).attr("data-slick-index")-b.currentSlide)||1):b.options.slidesToScroll},b.prototype.goTo=b.prototype.slickGoTo=function(a,b){var c=this;c.changeSlide({data:{message:"index",index:parseInt(a)}},b)},b.prototype.init=function(b){var c=this;a(c.$slider).hasClass("slick-initialized")||(a(c.$slider).addClass("slick-initialized"),c.buildRows(),c.buildOut(),c.setProps(),c.startLoad(),c.loadSlider(),c.initializeEvents(),c.updateArrows(),c.updateDots(),c.checkResponsive(!0),c.focusHandler()),b&&c.$slider.trigger("init",[c]),c.options.accessibility===!0&&c.initADA(),c.options.autoplay&&(c.paused=!1,c.autoPlay())},b.prototype.initADA=function(){var b=this;b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),b.$slideTrack.attr("role","listbox"),b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c){a(this).attr({role:"option","aria-describedby":"slick-slide"+b.instanceUid+c})}),null!==b.$dots&&b.$dots.attr("role","tablist").find("li").each(function(c){a(this).attr({role:"presentation","aria-selected":"false","aria-controls":"navigation"+b.instanceUid+c,id:"slick-slide"+b.instanceUid+c})}).first().attr("aria-selected","true").end().find("button").attr("role","button").end().closest("div").attr("role","toolbar"),b.activateADA()},b.prototype.initArrowEvents=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},a.changeSlide),a.$nextArrow.off("click.slick").on("click.slick",{message:"next"},a.changeSlide))},b.prototype.initDotEvents=function(){var b=this;b.options.dots===!0&&b.slideCount>b.options.slidesToShow&&a("li",b.$dots).on("click.slick",{message:"index"},b.changeSlide),b.options.dots===!0&&b.options.pauseOnDotsHover===!0&&a("li",b.$dots).on("mouseenter.slick",a.proxy(b.interrupt,b,!0)).on("mouseleave.slick",a.proxy(b.interrupt,b,!1))},b.prototype.initSlideEvents=function(){var b=this;b.options.pauseOnHover&&(b.$list.on("mouseenter.slick",a.proxy(b.interrupt,b,!0)),b.$list.on("mouseleave.slick",a.proxy(b.interrupt,b,!1)))},b.prototype.initializeEvents=function(){var b=this;b.initArrowEvents(),b.initDotEvents(),b.initSlideEvents(),b.$list.on("touchstart.slick mousedown.slick",{action:"start"},b.swipeHandler),b.$list.on("touchmove.slick mousemove.slick",{action:"move"},b.swipeHandler),b.$list.on("touchend.slick mouseup.slick",{action:"end"},b.swipeHandler),b.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},b.swipeHandler),b.$list.on("click.slick",b.clickHandler),a(document).on(b.visibilityChange,a.proxy(b.visibility,b)),b.options.accessibility===!0&&b.$list.on("keydown.slick",b.keyHandler),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),a(window).on("orientationchange.slick.slick-"+b.instanceUid,a.proxy(b.orientationChange,b)),a(window).on("resize.slick.slick-"+b.instanceUid,a.proxy(b.resize,b)),a("[draggable!=true]",b.$slideTrack).on("dragstart",b.preventDefault),a(window).on("load.slick.slick-"+b.instanceUid,b.setPosition),a(document).on("ready.slick.slick-"+b.instanceUid,b.setPosition)},b.prototype.initUI=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.show(),a.$nextArrow.show()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.show()},b.prototype.keyHandler=function(a){var b=this;a.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===a.keyCode&&b.options.accessibility===!0?b.changeSlide({data:{message:b.options.rtl===!0?"next":"previous"}}):39===a.keyCode&&b.options.accessibility===!0&&b.changeSlide({data:{message:b.options.rtl===!0?"previous":"next"}}))},b.prototype.lazyLoad=function(){function g(c){a("img[data-lazy]",c).each(function(){var c=a(this),d=a(this).attr("data-lazy"),e=document.createElement("img");e.onload=function(){c.animate({opacity:0},100,function(){c.attr("src",d).animate({opacity:1},200,function(){c.removeAttr("data-lazy").removeClass("slick-loading")}),b.$slider.trigger("lazyLoaded",[b,c,d])})},e.onerror=function(){c.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),b.$slider.trigger("lazyLoadError",[b,c,d])},e.src=d})}var c,d,e,f,b=this;b.options.centerMode===!0?b.options.infinite===!0?(e=b.currentSlide+(b.options.slidesToShow/2+1),f=e+b.options.slidesToShow+2):(e=Math.max(0,b.currentSlide-(b.options.slidesToShow/2+1)),f=2+(b.options.slidesToShow/2+1)+b.currentSlide):(e=b.options.infinite?b.options.slidesToShow+b.currentSlide:b.currentSlide,f=Math.ceil(e+b.options.slidesToShow),b.options.fade===!0&&(e>0&&e--,f<=b.slideCount&&f++)),c=b.$slider.find(".slick-slide").slice(e,f),g(c),b.slideCount<=b.options.slidesToShow?(d=b.$slider.find(".slick-slide"),g(d)):b.currentSlide>=b.slideCount-b.options.slidesToShow?(d=b.$slider.find(".slick-cloned").slice(0,b.options.slidesToShow),g(d)):0===b.currentSlide&&(d=b.$slider.find(".slick-cloned").slice(-1*b.options.slidesToShow),g(d))},b.prototype.loadSlider=function(){var a=this;a.setPosition(),a.$slideTrack.css({opacity:1}),a.$slider.removeClass("slick-loading"),a.initUI(),"progressive"===a.options.lazyLoad&&a.progressiveLazyLoad()},b.prototype.next=b.prototype.slickNext=function(){var a=this;a.changeSlide({data:{message:"next"}})},b.prototype.orientationChange=function(){var a=this;a.checkResponsive(),a.setPosition()},b.prototype.pause=b.prototype.slickPause=function(){var a=this;a.autoPlayClear(),a.paused=!0},b.prototype.play=b.prototype.slickPlay=function(){var a=this;a.autoPlay(),a.options.autoplay=!0,a.paused=!1,a.focussed=!1,a.interrupted=!1},b.prototype.postSlide=function(a){var b=this;b.unslicked||(b.$slider.trigger("afterChange",[b,a]),b.animating=!1,b.setPosition(),b.swipeLeft=null,b.options.autoplay&&b.autoPlay(),b.options.accessibility===!0&&b.initADA())},b.prototype.prev=b.prototype.slickPrev=function(){var a=this;a.changeSlide({data:{message:"previous"}})},b.prototype.preventDefault=function(a){a.preventDefault()},b.prototype.progressiveLazyLoad=function(b){b=b||1;var e,f,g,c=this,d=a("img[data-lazy]",c.$slider);d.length?(e=d.first(),f=e.attr("data-lazy"),g=document.createElement("img"),g.onload=function(){e.attr("src",f).removeAttr("data-lazy").removeClass("slick-loading"),c.options.adaptiveHeight===!0&&c.setPosition(),c.$slider.trigger("lazyLoaded",[c,e,f]),c.progressiveLazyLoad()},g.onerror=function(){3>b?setTimeout(function(){c.progressiveLazyLoad(b+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),c.$slider.trigger("lazyLoadError",[c,e,f]),c.progressiveLazyLoad())},g.src=f):c.$slider.trigger("allImagesLoaded",[c])},b.prototype.refresh=function(b){var d,e,c=this;e=c.slideCount-c.options.slidesToShow,!c.options.infinite&&c.currentSlide>e&&(c.currentSlide=e),c.slideCount<=c.options.slidesToShow&&(c.currentSlide=0),d=c.currentSlide,c.destroy(!0),a.extend(c,c.initials,{currentSlide:d}),c.init(),b||c.changeSlide({data:{message:"index",index:d}},!1)},b.prototype.registerBreakpoints=function(){var c,d,e,b=this,f=b.options.responsive||null;if("array"===a.type(f)&&f.length){b.respondTo=b.options.respondTo||"window";for(c in f)if(e=b.breakpoints.length-1,d=f[c].breakpoint,f.hasOwnProperty(c)){for(;e>=0;)b.breakpoints[e]&&b.breakpoints[e]===d&&b.breakpoints.splice(e,1),e--;b.breakpoints.push(d),b.breakpointSettings[d]=f[c].settings}b.breakpoints.sort(function(a,c){return b.options.mobileFirst?a-c:c-a})}},b.prototype.reinit=function(){var b=this;b.$slides=b.$slideTrack.children(b.options.slide).addClass("slick-slide"),b.slideCount=b.$slides.length,b.currentSlide>=b.slideCount&&0!==b.currentSlide&&(b.currentSlide=b.currentSlide-b.options.slidesToScroll),b.slideCount<=b.options.slidesToShow&&(b.currentSlide=0),b.registerBreakpoints(),b.setProps(),b.setupInfinite(),b.buildArrows(),b.updateArrows(),b.initArrowEvents(),b.buildDots(),b.updateDots(),b.initDotEvents(),b.cleanUpSlideEvents(),b.initSlideEvents(),b.checkResponsive(!1,!0),b.options.focusOnSelect===!0&&a(b.$slideTrack).children().on("click.slick",b.selectHandler),b.setSlideClasses("number"==typeof b.currentSlide?b.currentSlide:0),b.setPosition(),b.focusHandler(),b.paused=!b.options.autoplay,b.autoPlay(),b.$slider.trigger("reInit",[b])},b.prototype.resize=function(){var b=this;a(window).width()!==b.windowWidth&&(clearTimeout(b.windowDelay),b.windowDelay=window.setTimeout(function(){b.windowWidth=a(window).width(),b.checkResponsive(),b.unslicked||b.setPosition()},50))},b.prototype.removeSlide=b.prototype.slickRemove=function(a,b,c){var d=this;return"boolean"==typeof a?(b=a,a=b===!0?0:d.slideCount-1):a=b===!0?--a:a,d.slideCount<1||0>a||a>d.slideCount-1?!1:(d.unload(),c===!0?d.$slideTrack.children().remove():d.$slideTrack.children(this.options.slide).eq(a).remove(),d.$slides=d.$slideTrack.children(this.options.slide),d.$slideTrack.children(this.options.slide).detach(),d.$slideTrack.append(d.$slides),d.$slidesCache=d.$slides,void d.reinit())},b.prototype.setCSS=function(a){var d,e,b=this,c={};b.options.rtl===!0&&(a=-a),d="left"==b.positionProp?Math.ceil(a)+"px":"0px",e="top"==b.positionProp?Math.ceil(a)+"px":"0px",c[b.positionProp]=a,b.transformsEnabled===!1?b.$slideTrack.css(c):(c={},b.cssTransitions===!1?(c[b.animType]="translate("+d+", "+e+")",b.$slideTrack.css(c)):(c[b.animType]="translate3d("+d+", "+e+", 0px)",b.$slideTrack.css(c)))},b.prototype.setDimensions=function(){var a=this;a.options.vertical===!1?a.options.centerMode===!0&&a.$list.css({padding:"0px "+a.options.centerPadding}):(a.$list.height(a.$slides.first().outerHeight(!0)*a.options.slidesToShow),a.options.centerMode===!0&&a.$list.css({padding:a.options.centerPadding+" 0px"})),a.listWidth=a.$list.width(),a.listHeight=a.$list.height(),a.options.vertical===!1&&a.options.variableWidth===!1?(a.slideWidth=Math.ceil(a.listWidth/a.options.slidesToShow),a.$slideTrack.width(Math.ceil(a.slideWidth*a.$slideTrack.children(".slick-slide").length))):a.options.variableWidth===!0?a.$slideTrack.width(5e3*a.slideCount):(a.slideWidth=Math.ceil(a.listWidth),a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0)*a.$slideTrack.children(".slick-slide").length)));var b=a.$slides.first().outerWidth(!0)-a.$slides.first().width();a.options.variableWidth===!1&&a.$slideTrack.children(".slick-slide").width(a.slideWidth-b)},b.prototype.setFade=function(){var c,b=this;b.$slides.each(function(d,e){c=b.slideWidth*d*-1,b.options.rtl===!0?a(e).css({position:"relative",right:c,top:0,zIndex:b.options.zIndex-2,opacity:0}):a(e).css({position:"relative",left:c,top:0,zIndex:b.options.zIndex-2,opacity:0})}),b.$slides.eq(b.currentSlide).css({zIndex:b.options.zIndex-1,opacity:1})},b.prototype.setHeight=function(){var a=this;if(1===a.options.slidesToShow&&a.options.adaptiveHeight===!0&&a.options.vertical===!1){var b=a.$slides.eq(a.currentSlide).outerHeight(!0);a.$list.css("height",b)}},b.prototype.setOption=b.prototype.slickSetOption=function(){var c,d,e,f,h,b=this,g=!1;if("object"===a.type(arguments[0])?(e=arguments[0],g=arguments[1],h="multiple"):"string"===a.type(arguments[0])&&(e=arguments[0],f=arguments[1],g=arguments[2],"responsive"===arguments[0]&&"array"===a.type(arguments[1])?h="responsive":"undefined"!=typeof arguments[1]&&(h="single")),"single"===h)b.options[e]=f;else if("multiple"===h)a.each(e,function(a,c){b.options[a]=c});else if("responsive"===h)for(d in f)if("array"!==a.type(b.options.responsive))b.options.responsive=[f[d]];else{for(c=b.options.responsive.length-1;c>=0;)b.options.responsive[c].breakpoint===f[d].breakpoint&&b.options.responsive.splice(c,1),c--;b.options.responsive.push(f[d])}g&&(b.unload(),b.reinit())},b.prototype.setPosition=function(){var a=this;a.setDimensions(),a.setHeight(),a.options.fade===!1?a.setCSS(a.getLeft(a.currentSlide)):a.setFade(),a.$slider.trigger("setPosition",[a])},b.prototype.setProps=function(){var a=this,b=document.body.style;a.positionProp=a.options.vertical===!0?"top":"left","top"===a.positionProp?a.$slider.addClass("slick-vertical"):a.$slider.removeClass("slick-vertical"),(void 0!==b.WebkitTransition||void 0!==b.MozTransition||void 0!==b.msTransition)&&a.options.useCSS===!0&&(a.cssTransitions=!0),a.options.fade&&("number"==typeof a.options.zIndex?a.options.zIndex<3&&(a.options.zIndex=3):a.options.zIndex=a.defaults.zIndex),void 0!==b.OTransform&&(a.animType="OTransform",a.transformType="-o-transform",a.transitionType="OTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.MozTransform&&(a.animType="MozTransform",a.transformType="-moz-transform",a.transitionType="MozTransition",void 0===b.perspectiveProperty&&void 0===b.MozPerspective&&(a.animType=!1)),void 0!==b.webkitTransform&&(a.animType="webkitTransform",a.transformType="-webkit-transform",a.transitionType="webkitTransition",void 0===b.perspectiveProperty&&void 0===b.webkitPerspective&&(a.animType=!1)),void 0!==b.msTransform&&(a.animType="msTransform",a.transformType="-ms-transform",a.transitionType="msTransition",void 0===b.msTransform&&(a.animType=!1)),void 0!==b.transform&&a.animType!==!1&&(a.animType="transform",a.transformType="transform",a.transitionType="transition"),a.transformsEnabled=a.options.useTransform&&null!==a.animType&&a.animType!==!1},b.prototype.setSlideClasses=function(a){var c,d,e,f,b=this;d=b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),b.$slides.eq(a).addClass("slick-current"),b.options.centerMode===!0?(c=Math.floor(b.options.slidesToShow/2),b.options.infinite===!0&&(a>=c&&a<=b.slideCount-1-c?b.$slides.slice(a-c,a+c+1).addClass("slick-active").attr("aria-hidden","false"):(e=b.options.slidesToShow+a,
d.slice(e-c+1,e+c+2).addClass("slick-active").attr("aria-hidden","false")),0===a?d.eq(d.length-1-b.options.slidesToShow).addClass("slick-center"):a===b.slideCount-1&&d.eq(b.options.slidesToShow).addClass("slick-center")),b.$slides.eq(a).addClass("slick-center")):a>=0&&a<=b.slideCount-b.options.slidesToShow?b.$slides.slice(a,a+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):d.length<=b.options.slidesToShow?d.addClass("slick-active").attr("aria-hidden","false"):(f=b.slideCount%b.options.slidesToShow,e=b.options.infinite===!0?b.options.slidesToShow+a:a,b.options.slidesToShow==b.options.slidesToScroll&&b.slideCount-a<b.options.slidesToShow?d.slice(e-(b.options.slidesToShow-f),e+f).addClass("slick-active").attr("aria-hidden","false"):d.slice(e,e+b.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false")),"ondemand"===b.options.lazyLoad&&b.lazyLoad()},b.prototype.setupInfinite=function(){var c,d,e,b=this;if(b.options.fade===!0&&(b.options.centerMode=!1),b.options.infinite===!0&&b.options.fade===!1&&(d=null,b.slideCount>b.options.slidesToShow)){for(e=b.options.centerMode===!0?b.options.slidesToShow+1:b.options.slidesToShow,c=b.slideCount;c>b.slideCount-e;c-=1)d=c-1,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d-b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned");for(c=0;e>c;c+=1)d=c,a(b.$slides[d]).clone(!0).attr("id","").attr("data-slick-index",d+b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned");b.$slideTrack.find(".slick-cloned").find("[id]").each(function(){a(this).attr("id","")})}},b.prototype.interrupt=function(a){var b=this;a||b.autoPlay(),b.interrupted=a},b.prototype.selectHandler=function(b){var c=this,d=a(b.target).is(".slick-slide")?a(b.target):a(b.target).parents(".slick-slide"),e=parseInt(d.attr("data-slick-index"));return e||(e=0),c.slideCount<=c.options.slidesToShow?(c.setSlideClasses(e),void c.asNavFor(e)):void c.slideHandler(e)},b.prototype.slideHandler=function(a,b,c){var d,e,f,g,j,h=null,i=this;return b=b||!1,i.animating===!0&&i.options.waitForAnimate===!0||i.options.fade===!0&&i.currentSlide===a||i.slideCount<=i.options.slidesToShow?void 0:(b===!1&&i.asNavFor(a),d=a,h=i.getLeft(d),g=i.getLeft(i.currentSlide),i.currentLeft=null===i.swipeLeft?g:i.swipeLeft,i.options.infinite===!1&&i.options.centerMode===!1&&(0>a||a>i.getDotCount()*i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):i.options.infinite===!1&&i.options.centerMode===!0&&(0>a||a>i.slideCount-i.options.slidesToScroll)?void(i.options.fade===!1&&(d=i.currentSlide,c!==!0?i.animateSlide(g,function(){i.postSlide(d)}):i.postSlide(d))):(i.options.autoplay&&clearInterval(i.autoPlayTimer),e=0>d?i.slideCount%i.options.slidesToScroll!==0?i.slideCount-i.slideCount%i.options.slidesToScroll:i.slideCount+d:d>=i.slideCount?i.slideCount%i.options.slidesToScroll!==0?0:d-i.slideCount:d,i.animating=!0,i.$slider.trigger("beforeChange",[i,i.currentSlide,e]),f=i.currentSlide,i.currentSlide=e,i.setSlideClasses(i.currentSlide),i.options.asNavFor&&(j=i.getNavTarget(),j=j.slick("getSlick"),j.slideCount<=j.options.slidesToShow&&j.setSlideClasses(i.currentSlide)),i.updateDots(),i.updateArrows(),i.options.fade===!0?(c!==!0?(i.fadeSlideOut(f),i.fadeSlide(e,function(){i.postSlide(e)})):i.postSlide(e),void i.animateHeight()):void(c!==!0?i.animateSlide(h,function(){i.postSlide(e)}):i.postSlide(e))))},b.prototype.startLoad=function(){var a=this;a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&(a.$prevArrow.hide(),a.$nextArrow.hide()),a.options.dots===!0&&a.slideCount>a.options.slidesToShow&&a.$dots.hide(),a.$slider.addClass("slick-loading")},b.prototype.swipeDirection=function(){var a,b,c,d,e=this;return a=e.touchObject.startX-e.touchObject.curX,b=e.touchObject.startY-e.touchObject.curY,c=Math.atan2(b,a),d=Math.round(180*c/Math.PI),0>d&&(d=360-Math.abs(d)),45>=d&&d>=0?e.options.rtl===!1?"left":"right":360>=d&&d>=315?e.options.rtl===!1?"left":"right":d>=135&&225>=d?e.options.rtl===!1?"right":"left":e.options.verticalSwiping===!0?d>=35&&135>=d?"down":"up":"vertical"},b.prototype.swipeEnd=function(a){var c,d,b=this;if(b.dragging=!1,b.interrupted=!1,b.shouldClick=b.touchObject.swipeLength>10?!1:!0,void 0===b.touchObject.curX)return!1;if(b.touchObject.edgeHit===!0&&b.$slider.trigger("edge",[b,b.swipeDirection()]),b.touchObject.swipeLength>=b.touchObject.minSwipe){switch(d=b.swipeDirection()){case"left":case"down":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide+b.getSlideCount()):b.currentSlide+b.getSlideCount(),b.currentDirection=0;break;case"right":case"up":c=b.options.swipeToSlide?b.checkNavigable(b.currentSlide-b.getSlideCount()):b.currentSlide-b.getSlideCount(),b.currentDirection=1}"vertical"!=d&&(b.slideHandler(c),b.touchObject={},b.$slider.trigger("swipe",[b,d]))}else b.touchObject.startX!==b.touchObject.curX&&(b.slideHandler(b.currentSlide),b.touchObject={})},b.prototype.swipeHandler=function(a){var b=this;if(!(b.options.swipe===!1||"ontouchend"in document&&b.options.swipe===!1||b.options.draggable===!1&&-1!==a.type.indexOf("mouse")))switch(b.touchObject.fingerCount=a.originalEvent&&void 0!==a.originalEvent.touches?a.originalEvent.touches.length:1,b.touchObject.minSwipe=b.listWidth/b.options.touchThreshold,b.options.verticalSwiping===!0&&(b.touchObject.minSwipe=b.listHeight/b.options.touchThreshold),a.data.action){case"start":b.swipeStart(a);break;case"move":b.swipeMove(a);break;case"end":b.swipeEnd(a)}},b.prototype.swipeMove=function(a){var d,e,f,g,h,b=this;return h=void 0!==a.originalEvent?a.originalEvent.touches:null,!b.dragging||h&&1!==h.length?!1:(d=b.getLeft(b.currentSlide),b.touchObject.curX=void 0!==h?h[0].pageX:a.clientX,b.touchObject.curY=void 0!==h?h[0].pageY:a.clientY,b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curX-b.touchObject.startX,2))),b.options.verticalSwiping===!0&&(b.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(b.touchObject.curY-b.touchObject.startY,2)))),e=b.swipeDirection(),"vertical"!==e?(void 0!==a.originalEvent&&b.touchObject.swipeLength>4&&a.cancelable&&a.preventDefault(),g=(b.options.rtl===!1?1:-1)*(b.touchObject.curX>b.touchObject.startX?1:-1),b.options.verticalSwiping===!0&&(g=b.touchObject.curY>b.touchObject.startY?1:-1),f=b.touchObject.swipeLength,b.touchObject.edgeHit=!1,b.options.infinite===!1&&(0===b.currentSlide&&"right"===e||b.currentSlide>=b.getDotCount()&&"left"===e)&&(f=b.touchObject.swipeLength*b.options.edgeFriction,b.touchObject.edgeHit=!0),b.options.vertical===!1?b.swipeLeft=d+f*g:b.swipeLeft=d+f*(b.$list.height()/b.listWidth)*g,b.options.verticalSwiping===!0&&(b.swipeLeft=d+f*g),b.options.fade===!0||b.options.touchMove===!1?!1:b.animating===!0?(b.swipeLeft=null,!1):void b.setCSS(b.swipeLeft)):void 0)},b.prototype.swipeStart=function(a){var c,b=this;return b.interrupted=!0,1!==b.touchObject.fingerCount||b.slideCount<=b.options.slidesToShow?(b.touchObject={},!1):(void 0!==a.originalEvent&&void 0!==a.originalEvent.touches&&(c=a.originalEvent.touches[0]),b.touchObject.startX=b.touchObject.curX=void 0!==c?c.pageX:a.clientX,b.touchObject.startY=b.touchObject.curY=void 0!==c?c.pageY:a.clientY,void(b.dragging=!0))},b.prototype.unfilterSlides=b.prototype.slickUnfilter=function(){var a=this;null!==a.$slidesCache&&(a.unload(),a.$slideTrack.children(this.options.slide).detach(),a.$slidesCache.appendTo(a.$slideTrack),a.reinit())},b.prototype.unload=function(){var b=this;a(".slick-cloned",b.$slider).remove(),b.$dots&&b.$dots.remove(),b.$prevArrow&&b.htmlExpr.test(b.options.prevArrow)&&b.$prevArrow.remove(),b.$nextArrow&&b.htmlExpr.test(b.options.nextArrow)&&b.$nextArrow.remove(),b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},b.prototype.unslick=function(a){var b=this;b.$slider.trigger("unslick",[b,a]),b.destroy()},b.prototype.updateArrows=function(){var b,a=this;b=Math.floor(a.options.slidesToShow/2),a.options.arrows===!0&&a.slideCount>a.options.slidesToShow&&!a.options.infinite&&(a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===a.currentSlide?(a.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-a.options.slidesToShow&&a.options.centerMode===!1?(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):a.currentSlide>=a.slideCount-1&&a.options.centerMode===!0&&(a.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},b.prototype.updateDots=function(){var a=this;null!==a.$dots&&(a.$dots.find("li").removeClass("slick-active").attr("aria-hidden","true"),a.$dots.find("li").eq(Math.floor(a.currentSlide/a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden","false"))},b.prototype.visibility=function(){var a=this;a.options.autoplay&&(document[a.hidden]?a.interrupted=!0:a.interrupted=!1)},a.fn.slick=function(){var f,g,a=this,c=arguments[0],d=Array.prototype.slice.call(arguments,1),e=a.length;for(f=0;e>f;f++)if("object"==typeof c||"undefined"==typeof c?a[f].slick=new b(a[f],c):g=a[f].slick[c].apply(a[f].slick,d),"undefined"!=typeof g)return g;return a}});;
/**
 * jquery.event.pointertouch
 * Lift touch and pointer event properties to the jQuery event object
 * @version v0.1.2
 * @license MIT
 */
(function(global, factory) {
	// AMD
	if (typeof define === 'function' && define.amd) {
		define(['jquery'], function(jQuery) { return factory(global, jQuery); });
	// CommonJS/Browserify
	} else if (typeof exports === 'object') {
		factory(global, require('jquery'));
	// Global
	} else {
		factory(global, global.jQuery);
	}
}(typeof window !== 'undefined' ? window : this, function(window, $) {
	'use strict';

	// Common properties to lift for touch or pointer events
	var list = 'over out down up move enter leave cancel'.split(' ');
	var hook = $.extend({}, $.event.mouseHooks);
	var events = {};

	// Support pointer events in IE11+ if available
	if ( window.PointerEvent ) {
		$.each(list, function( i, name ) {
			// Add event name to events property and add fixHook
			$.event.fixHooks[
				(events[name] = 'pointer' + name)
			] = hook;
		});
	} else {
		var mouseProps = hook.props;
		// Add touch properties for the touch hook
		hook.props = mouseProps.concat(['touches', 'changedTouches', 'targetTouches', 'altKey', 'ctrlKey', 'metaKey', 'shiftKey']);

		/**
		 * Support: Android
		 * Android sets pageX/Y to 0 for any touch event
		 * Attach first touch's pageX/pageY and clientX/clientY if not set correctly
		 */
		hook.filter = function( event, originalEvent ) {
			var touch;
			var i = mouseProps.length;
			if ( !originalEvent.pageX && originalEvent.touches && (touch = originalEvent.touches[0]) ) {
				// Copy over all mouse properties
				while(i--) {
					event[mouseProps[i]] = touch[mouseProps[i]];
				}
			}
			return event;
		};

		$.each(list, function( i, name ) {
			// No equivalent touch events for over and out
			if (i < 2) {
				events[ name ] = 'mouse' + name;
			} else {
				var touch = 'touch' +
					(name === 'down' ? 'start' : name === 'up' ? 'end' : name);
				// Add fixHook
				$.event.fixHooks[ touch ] = hook;
				// Add event names to events property
				events[ name ] = touch + ' mouse' + name;
			}
		});
	}

	$.pointertouch = events;

	return events;
}));
;
/*!
 * Bootstrap v3.3.5 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */

/*!
 * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=1386161f0ffc8f5ba01a0b419f0f20f9)
 * Config saved to config.json and https://gist.github.com/1386161f0ffc8f5ba01a0b419f0f20f9
 */
//if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(t){"use strict";function e(e){var n=e.attr("data-target");n||(n=e.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var a=n&&t(n);return a&&a.length?a:e.parent()}function n(n){n&&3===n.which||(t(i).remove(),t(r).each(function(){var a=t(this),i=e(a),r={relatedTarget:this};i.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(i[0],n.target)||(i.trigger(n=t.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(a.attr("aria-expanded","false"),i.removeClass("open").trigger(t.Event("hidden.bs.dropdown",r)))))}))}function a(e){return this.each(function(){var n=t(this),a=n.data("bs.dropdown");a||n.data("bs.dropdown",a=new s(this)),"string"==typeof e&&a[e].call(n)})}var i=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.6",s.prototype.toggle=function(a){var i=t(this);if(!i.is(".disabled, :disabled")){var r=e(i),s=r.hasClass("open");if(n(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",n);var o={relatedTarget:this};if(r.trigger(a=t.Event("show.bs.dropdown",o)),a.isDefaultPrevented())return;i.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger(t.Event("shown.bs.dropdown",o))}return!1}},s.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var a=t(this);if(n.preventDefault(),n.stopPropagation(),!a.is(".disabled, :disabled")){var i=e(a),s=i.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&i.find(r).trigger("focus"),a.trigger("click");var o=" li:not(.disabled):visible a",d=i.find(".dropdown-menu"+o);if(d.length){var l=d.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l<d.length-1&&l++,~l||(l=0),d.eq(l).trigger("focus")}}}};var o=t.fn.dropdown;t.fn.dropdown=a,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=o,this},t(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var a=t(this),i=a.data("bs.tab");i||a.data("bs.tab",i=new n(this)),"string"==typeof e&&i[e]()})}var n=function(e){this.element=t(e)};n.VERSION="3.3.6",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest("ul:not(.dropdown-menu)"),a=e.data("target");if(a||(a=e.attr("href"),a=a&&a.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var i=n.find(".active:last a"),r=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:i[0]});if(i.trigger(r),e.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var o=t(a);this.activate(e.closest("li"),n),this.activate(o,o.parent(),function(){i.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:i[0]})})}}},n.prototype.activate=function(e,a,i){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),o?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}var s=a.find("> .active"),o=i&&t.support.transition&&(s.length&&s.hasClass("fade")||!!a.find("> .fade").length);s.length&&o?s.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),s.removeClass("in")};var a=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=a,this};var i=function(n){n.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),+function(t){"use strict";function e(e){var n,a=e.attr("data-target")||(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return t(a)}function n(e){return this.each(function(){var n=t(this),i=n.data("bs.collapse"),r=t.extend({},a.DEFAULTS,n.data(),"object"==typeof e&&e);!i&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),i||n.data("bs.collapse",i=new a(this,r)),"string"==typeof e&&i[e]()})}var a=function(e,n){this.$element=t(e),this.options=t.extend({},a.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};a.VERSION="3.3.6",a.TRANSITION_DURATION=350,a.DEFAULTS={toggle:!0},a.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},a.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,i=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(i&&i.length&&(e=i.data("bs.collapse"),e&&e.transitioning))){var r=t.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){i&&i.length&&(n.call(i,"hide"),e||i.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var o=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return o.call(this);var d=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(o,this)).emulateTransitionEnd(a.TRANSITION_DURATION)[s](this.$element[0][d])}}}},a.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[n](0).one("bsTransitionEnd",t.proxy(i,this)).emulateTransitionEnd(a.TRANSITION_DURATION):i.call(this)}}},a.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},a.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(n,a){var i=t(a);this.addAriaAndCollapsedClass(e(i),i)},this)).end()},a.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass("in");t.attr("aria-expanded",n),e.toggleClass("collapsed",!n).attr("aria-expanded",n)};var i=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=a,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(a){var i=t(this);i.attr("data-target")||a.preventDefault();var r=e(i),s=r.data("bs.collapse"),o=s?"toggle":i.data();n.call(r,o)})}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,a=this;t(this).one("bsTransitionEnd",function(){n=!0});var i=function(){n||t(a).trigger(t.support.transition.end)};return setTimeout(i,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery);

if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery"); +function (t) { "use strict"; var e = t.fn.jquery.split(" ")[0].split("."); if (e[0] < 2 && e[1] < 9 || 1 == e[0] && 9 == e[1] && e[2] < 1 || e[0] > 3) throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4") }(jQuery), +function (t) { "use strict"; function e(e) { return this.each(function () { var n = t(this), a = n.data("bs.carousel"), s = t.extend({}, i.DEFAULTS, n.data(), "object" == typeof e && e), r = "string" == typeof e ? e : s.slide; a || n.data("bs.carousel", a = new i(this, s)), "number" == typeof e ? a.to(e) : r ? a[r]() : s.interval && a.pause().cycle() }) } var i = function (e, i) { this.$element = t(e), this.$indicators = this.$element.find(".carousel-indicators"), this.options = i, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", t.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", t.proxy(this.pause, this)).on("mouseleave.bs.carousel", t.proxy(this.cycle, this)) }; i.VERSION = "3.3.7", i.TRANSITION_DURATION = 600, i.DEFAULTS = { interval: 5e3, pause: "hover", wrap: !0, keyboard: !0 }, i.prototype.keydown = function (t) { if (!/input|textarea/i.test(t.target.tagName)) { switch (t.which) { case 37: this.prev(); break; case 39: this.next(); break; default: return }t.preventDefault() } }, i.prototype.cycle = function (e) { return e || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(t.proxy(this.next, this), this.options.interval)), this }, i.prototype.getItemIndex = function (t) { return this.$items = t.parent().children(".item"), this.$items.index(t || this.$active) }, i.prototype.getItemForDirection = function (t, e) { var i = this.getItemIndex(e), n = "prev" == t && 0 === i || "next" == t && i == this.$items.length - 1; if (n && !this.options.wrap) return e; var a = "prev" == t ? -1 : 1, s = (i + a) % this.$items.length; return this.$items.eq(s) }, i.prototype.to = function (t) { var e = this, i = this.getItemIndex(this.$active = this.$element.find(".item.active")); return t > this.$items.length - 1 || 0 > t ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function () { e.to(t) }) : i == t ? this.pause().cycle() : this.slide(t > i ? "next" : "prev", this.$items.eq(t)) }, i.prototype.pause = function (e) { return e || (this.paused = !0), this.$element.find(".next, .prev").length && t.support.transition && (this.$element.trigger(t.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this }, i.prototype.next = function () { return this.sliding ? void 0 : this.slide("next") }, i.prototype.prev = function () { return this.sliding ? void 0 : this.slide("prev") }, i.prototype.slide = function (e, n) { var a = this.$element.find(".item.active"), s = n || this.getItemForDirection(e, a), r = this.interval, o = "next" == e ? "left" : "right", l = this; if (s.hasClass("active")) return this.sliding = !1; var d = s[0], c = t.Event("slide.bs.carousel", { relatedTarget: d, direction: o }); if (this.$element.trigger(c), !c.isDefaultPrevented()) { if (this.sliding = !0, r && this.pause(), this.$indicators.length) { this.$indicators.find(".active").removeClass("active"); var h = t(this.$indicators.children()[this.getItemIndex(s)]); h && h.addClass("active") } var p = t.Event("slid.bs.carousel", { relatedTarget: d, direction: o }); return t.support.transition && this.$element.hasClass("slide") ? (s.addClass(e), s[0].offsetWidth, a.addClass(o), s.addClass(o), a.one("bsTransitionEnd", function () { s.removeClass([e, o].join(" ")).addClass("active"), a.removeClass(["active", o].join(" ")), l.sliding = !1, setTimeout(function () { l.$element.trigger(p) }, 0) }).emulateTransitionEnd(i.TRANSITION_DURATION)) : (a.removeClass("active"), s.addClass("active"), this.sliding = !1, this.$element.trigger(p)), r && this.cycle(), this } }; var n = t.fn.carousel; t.fn.carousel = e, t.fn.carousel.Constructor = i, t.fn.carousel.noConflict = function () { return t.fn.carousel = n, this }; var a = function (i) { var n, a = t(this), s = t(a.attr("data-target") || (n = a.attr("href")) && n.replace(/.*(?=#[^\s]+$)/, "")); if (s.hasClass("carousel")) { var r = t.extend({}, s.data(), a.data()), o = a.attr("data-slide-to"); o && (r.interval = !1), e.call(s, r), o && s.data("bs.carousel").to(o), i.preventDefault() } }; t(document).on("click.bs.carousel.data-api", "[data-slide]", a).on("click.bs.carousel.data-api", "[data-slide-to]", a), t(window).on("load", function () { t('[data-ride="carousel"]').each(function () { var i = t(this); e.call(i, i.data()) }) }) }(jQuery), +function (t) { "use strict"; function e(e) { var i = e.attr("data-target"); i || (i = e.attr("href"), i = i && /#[A-Za-z]/.test(i) && i.replace(/.*(?=#[^\s]*$)/, "")); var n = i && t(i); return n && n.length ? n : e.parent() } function i(i) { i && 3 === i.which || (t(a).remove(), t(s).each(function () { var n = t(this), a = e(n), s = { relatedTarget: this }; a.hasClass("open") && (i && "click" == i.type && /input|textarea/i.test(i.target.tagName) && t.contains(a[0], i.target) || (a.trigger(i = t.Event("hide.bs.dropdown", s)), i.isDefaultPrevented() || (n.attr("aria-expanded", "false"), a.removeClass("open").trigger(t.Event("hidden.bs.dropdown", s))))) })) } function n(e) { return this.each(function () { var i = t(this), n = i.data("bs.dropdown"); n || i.data("bs.dropdown", n = new r(this)), "string" == typeof e && n[e].call(i) }) } var a = ".dropdown-backdrop", s = '[data-toggle="dropdown"]', r = function (e) { t(e).on("click.bs.dropdown", this.toggle) }; r.VERSION = "3.3.7", r.prototype.toggle = function (n) { var a = t(this); if (!a.is(".disabled, :disabled")) { var s = e(a), r = s.hasClass("open"); if (i(), !r) { "ontouchstart" in document.documentElement && !s.closest(".navbar-nav").length && t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click", i); var o = { relatedTarget: this }; if (s.trigger(n = t.Event("show.bs.dropdown", o)), n.isDefaultPrevented()) return; a.trigger("focus").attr("aria-expanded", "true"), s.toggleClass("open").trigger(t.Event("shown.bs.dropdown", o)) } return !1 } }, r.prototype.keydown = function (i) { if (/(38|40|27|32)/.test(i.which) && !/input|textarea/i.test(i.target.tagName)) { var n = t(this); if (i.preventDefault(), i.stopPropagation(), !n.is(".disabled, :disabled")) { var a = e(n), r = a.hasClass("open"); if (!r && 27 != i.which || r && 27 == i.which) return 27 == i.which && a.find(s).trigger("focus"), n.trigger("click"); var o = " li:not(.disabled):visible a", l = a.find(".dropdown-menu" + o); if (l.length) { var d = l.index(i.target); 38 == i.which && d > 0 && d-- , 40 == i.which && d < l.length - 1 && d++ , ~d || (d = 0), l.eq(d).trigger("focus") } } } }; var o = t.fn.dropdown; t.fn.dropdown = n, t.fn.dropdown.Constructor = r, t.fn.dropdown.noConflict = function () { return t.fn.dropdown = o, this }, t(document).on("click.bs.dropdown.data-api", i).on("click.bs.dropdown.data-api", ".dropdown form", function (t) { t.stopPropagation() }).on("click.bs.dropdown.data-api", s, r.prototype.toggle).on("keydown.bs.dropdown.data-api", s, r.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", r.prototype.keydown) }(jQuery), +function (t) { "use strict"; function e(e) { return this.each(function () { var n = t(this), a = n.data("bs.tab"); a || n.data("bs.tab", a = new i(this)), "string" == typeof e && a[e]() }) } var i = function (e) { this.element = t(e) }; i.VERSION = "3.3.7", i.TRANSITION_DURATION = 150, i.prototype.show = function () { var e = this.element, i = e.closest("ul:not(.dropdown-menu)"), n = e.data("target"); if (n || (n = e.attr("href"), n = n && n.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) { var a = i.find(".active:last a"), s = t.Event("hide.bs.tab", { relatedTarget: e[0] }), r = t.Event("show.bs.tab", { relatedTarget: a[0] }); if (a.trigger(s), e.trigger(r), !r.isDefaultPrevented() && !s.isDefaultPrevented()) { var o = t(n); this.activate(e.closest("li"), i), this.activate(o, o.parent(), function () { a.trigger({ type: "hidden.bs.tab", relatedTarget: e[0] }), e.trigger({ type: "shown.bs.tab", relatedTarget: a[0] }) }) } } }, i.prototype.activate = function (e, n, a) { function s() { r.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), o ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu").length && e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), a && a() } var r = n.find("> .active"), o = a && t.support.transition && (r.length && r.hasClass("fade") || !!n.find("> .fade").length); r.length && o ? r.one("bsTransitionEnd", s).emulateTransitionEnd(i.TRANSITION_DURATION) : s(), r.removeClass("in") }; var n = t.fn.tab; t.fn.tab = e, t.fn.tab.Constructor = i, t.fn.tab.noConflict = function () { return t.fn.tab = n, this }; var a = function (i) { i.preventDefault(), e.call(t(this), "show") }; t(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', a).on("click.bs.tab.data-api", '[data-toggle="pill"]', a) }(jQuery), +function (t) { "use strict"; function e(e) { var i, n = e.attr("data-target") || (i = e.attr("href")) && i.replace(/.*(?=#[^\s]+$)/, ""); return t(n) } function i(e) { return this.each(function () { var i = t(this), a = i.data("bs.collapse"), s = t.extend({}, n.DEFAULTS, i.data(), "object" == typeof e && e); !a && s.toggle && /show|hide/.test(e) && (s.toggle = !1), a || i.data("bs.collapse", a = new n(this, s)), "string" == typeof e && a[e]() }) } var n = function (e, i) { this.$element = t(e), this.options = t.extend({}, n.DEFAULTS, i), this.$trigger = t('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle() }; n.VERSION = "3.3.7", n.TRANSITION_DURATION = 350, n.DEFAULTS = { toggle: !0 }, n.prototype.dimension = function () { var t = this.$element.hasClass("width"); return t ? "width" : "height" }, n.prototype.show = function () { if (!this.transitioning && !this.$element.hasClass("in")) { var e, a = this.$parent && this.$parent.children(".panel").children(".in, .collapsing"); if (!(a && a.length && (e = a.data("bs.collapse"), e && e.transitioning))) { var s = t.Event("show.bs.collapse"); if (this.$element.trigger(s), !s.isDefaultPrevented()) { a && a.length && (i.call(a, "hide"), e || a.data("bs.collapse", null)); var r = this.dimension(); this.$element.removeClass("collapse").addClass("collapsing")[r](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1; var o = function () { this.$element.removeClass("collapsing").addClass("collapse in")[r](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse") }; if (!t.support.transition) return o.call(this); var l = t.camelCase(["scroll", r].join("-")); this.$element.one("bsTransitionEnd", t.proxy(o, this)).emulateTransitionEnd(n.TRANSITION_DURATION)[r](this.$element[0][l]) } } } }, n.prototype.hide = function () { if (!this.transitioning && this.$element.hasClass("in")) { var e = t.Event("hide.bs.collapse"); if (this.$element.trigger(e), !e.isDefaultPrevented()) { var i = this.dimension(); this.$element[i](this.$element[i]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1; var a = function () { this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse") }; return t.support.transition ? void this.$element[i](0).one("bsTransitionEnd", t.proxy(a, this)).emulateTransitionEnd(n.TRANSITION_DURATION) : a.call(this) } } }, n.prototype.toggle = function () { this[this.$element.hasClass("in") ? "hide" : "show"]() }, n.prototype.getParent = function () { return t(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(t.proxy(function (i, n) { var a = t(n); this.addAriaAndCollapsedClass(e(a), a) }, this)).end() }, n.prototype.addAriaAndCollapsedClass = function (t, e) { var i = t.hasClass("in"); t.attr("aria-expanded", i), e.toggleClass("collapsed", !i).attr("aria-expanded", i) }; var a = t.fn.collapse; t.fn.collapse = i, t.fn.collapse.Constructor = n, t.fn.collapse.noConflict = function () { return t.fn.collapse = a, this }, t(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function (n) { var a = t(this); a.attr("data-target") || n.preventDefault(); var s = e(a), r = s.data("bs.collapse"), o = r ? "toggle" : a.data(); i.call(s, o) }) }(jQuery), +function (t) { "use strict"; function e() { var t = document.createElement("bootstrap"), e = { WebkitTransition: "webkitTransitionEnd", MozTransition: "transitionend", OTransition: "oTransitionEnd otransitionend", transition: "transitionend" }; for (var i in e) if (void 0 !== t.style[i]) return { end: e[i] }; return !1 } t.fn.emulateTransitionEnd = function (e) { var i = !1, n = this; t(this).one("bsTransitionEnd", function () { i = !0 }); var a = function () { i || t(n).trigger(t.support.transition.end) }; return setTimeout(a, e), this }, t(function () { t.support.transition = e(), t.support.transition && (t.event.special.bsTransitionEnd = { bindType: t.support.transition.end, delegateType: t.support.transition.end, handle: function (e) { return t(e.target).is(this) ? e.handleObj.handler.apply(this, arguments) : void 0 } }) }) }(jQuery);;
/* ========================================================================
 * Bootstrap: tooltip.js v3.3.6
 * http://getbootstrap.com/javascript/#tooltip
 * Inspired by the original jQuery.tipsy by Jason Frame
 * ========================================================================
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */


+function ($) {
    'use strict';

    // TOOLTIP PUBLIC CLASS DEFINITION
    // ===============================
    var Tooltip = function (element, options) {
        this.type = null
        this.options = null
        this.enabled = null
        this.timeout = null
        this.hoverState = null
        this.$element = null
        this.inState = null

        this.init('tooltip', element, options)
    }

    Tooltip.VERSION = '3.3.6'

    Tooltip.TRANSITION_DURATION = 150

    Tooltip.DEFAULTS = {
        animation: true,
        allowHover: false,
        placement: 'top',
        selector: false,
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: 'hover focus',
        title: '',
        delay: 0,
        html: false,
        container: false,
        viewport: {
            selector: 'body',
            padding: 0
        }
    }

    Tooltip.module = null;

    Tooltip.prototype.init = function (type, element, options) {
        this.enabled = true
        this.type = type
        this.$element = $(element)
        this.options = this.getOptions(options)
        this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
        this.inState = { click: false, hover: false, focus: false }
        if (this.$element[0] instanceof document.constructor && !this.options.selector) {
            throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
        }
        Tooltip.module = this;

        var triggers = this.options.trigger.split(' ')

        for (var i = triggers.length; i--;) {
            var trigger = triggers[i]

            if (trigger == 'click') {
                this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
            } else if (trigger != 'manual') {
                var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
                var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'

                this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
                this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
            }
        }

        this.options.selector ?
            (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
            this.fixTitle()
    }

    Tooltip.prototype.getDefaults = function () {
        return Tooltip.DEFAULTS
    }

    Tooltip.prototype.getOptions = function (options) {
        options = $.extend({}, this.getDefaults(), this.$element.data(), options)

        if (options.delay && typeof options.delay == 'number') {
            options.delay = {
                show: options.delay,
                hide: options.delay
            }
        }

        return options
    }

    Tooltip.prototype.getDelegateOptions = function () {
        var options = {}
        var defaults = this.getDefaults()

        this._options && $.each(this._options, function (key, value) {
            if (defaults[key] != value) options[key] = value
        })

        return options
    }

    Tooltip.prototype.enter = function (obj) {
        var self = obj instanceof this.constructor ?
            obj : $(obj.currentTarget).data('bs.' + this.type)

        if (!self) {
            self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
            $(obj.currentTarget).data('bs.' + this.type, self)
        }

        if (obj instanceof $.Event) {
            self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
        }

        if (self.tip().hasClass('in') || self.hoverState == 'in') {
            self.hoverState = 'in'
            return
        }

        clearTimeout(self.timeout)

        self.hoverState = 'in'

        if (!self.options.delay || !self.options.delay.show) return self.show()

        self.timeout = setTimeout(function () {
            if (self.hoverState == 'in') self.show()
        }, self.options.delay.show)
    }

    Tooltip.prototype.isInStateTrue = function () {
        for (var key in this.inState) {
            if (this.inState[key]) return true
        }

        return false
    }

    Tooltip.prototype.leave = function (obj) {
        var self = obj instanceof this.constructor ?
            obj : $(obj.currentTarget).data('bs.' + this.type)

        if (Tooltip.module.isHoverTooltip) {
            self = Tooltip.module;
        }

        if (!self) {
            self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
            $(obj.currentTarget).data('bs.' + this.type, self)
        }

        if (obj instanceof $.Event) {
            self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
        }

        if (self.isInStateTrue()) return

        clearTimeout(self.timeout)

        self.hoverState = 'out'

        if (!self.options.delay || !self.options.delay.hide) return self.hide()

        self.timeout = setTimeout(function () {
            if (self.hoverState == 'out') self.hide()
        }, self.options.delay.hide)
    }

    Tooltip.prototype.show = function () {
        var e = $.Event('show.bs.' + this.type)

        if (this.hasContent() && this.enabled) {
            this.$element.trigger(e)

            var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
            if (e.isDefaultPrevented() || !inDom) return
            var that = this

            var $tip = this.tip()

            var tipId = this.getUID(this.type)

            this.setContent()
            $tip.attr('id', tipId)
            this.$element.attr('aria-describedby', tipId)

            if (this.options.animation) $tip.addClass('fade')

            var placement = typeof this.options.placement == 'function' ?
                this.options.placement.call(this, $tip[0], this.$element[0]) :
                this.options.placement

            var autoToken = /\s?auto?\s?/i
            var autoPlace = autoToken.test(placement)
            if (autoPlace) placement = placement.replace(autoToken, '') || 'top'

            $tip
                .detach()
                .css({ top: 0, left: 0, display: 'block' })
                .addClass(placement)
                .data('bs.' + this.type, this)

            this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
            this.$element.trigger('inserted.bs.' + this.type)

            var pos = this.getPosition()
            var actualWidth = $tip[0].offsetWidth
            var actualHeight = $tip[0].offsetHeight

            if (autoPlace) {
                var orgPlacement = placement
                var viewportDim = this.getPosition(this.$viewport)

                placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
                    placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
                        placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
                            placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
                                placement

                $tip
                    .removeClass(orgPlacement)
                    .addClass(placement)
            }

            var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)

            this.applyPlacement(calculatedOffset, placement)

            var complete = function () {
                var prevHoverState = that.hoverState
                that.$element.trigger('shown.bs.' + that.type)
                that.hoverState = null

                if (prevHoverState == 'out') that.leave(that)
            }

            $.support.transition && this.$tip.hasClass('fade') ?
                $tip
                    .one('bsTransitionEnd', complete)
                    .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
                complete()
        }
    }

    Tooltip.prototype.onTooltipHover = function (e) {
        self.hoverState = 'in';
    }
    
    Tooltip.prototype.applyPlacement = function (offset, placement) {
        var $tip = this.tip()
        var width = $tip[0].offsetWidth
        var height = $tip[0].offsetHeight

        // manually read margins because getBoundingClientRect includes difference
        var marginTop = parseInt($tip.css('margin-top'), 10)
        var marginLeft = parseInt($tip.css('margin-left'), 10)

        // we must check for NaN for ie 8/9
        if (isNaN(marginTop)) marginTop = 0
        if (isNaN(marginLeft)) marginLeft = 0

        offset.top += marginTop
        offset.left += marginLeft

        // $.fn.offset doesn't round pixel values
        // so we use setOffset directly with our own function B-0
        $.offset.setOffset($tip[0], $.extend({
            using: function (props) {
                $tip.css({
                    top: Math.round(props.top),
                    left: Math.round(props.left)
                })
            }
        }, offset), 0)

        $tip.addClass('in')

        // check to see if placing tip in new offset caused the tip to resize itself
        var actualWidth = $tip[0].offsetWidth
        var actualHeight = $tip[0].offsetHeight

        if (placement == 'top' && actualHeight != height) {
            offset.top = offset.top + height - actualHeight
        }

        var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)

        if (delta.left) offset.left += delta.left
        else offset.top += delta.top

        var isVertical = /top|bottom/.test(placement)
        var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
        var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'

        $tip.offset(offset)
        this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
    }

    Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
        this.arrow()
            .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
            .css(isVertical ? 'top' : 'left', '')
    }

    Tooltip.prototype.setContent = function () {
        var $tip = this.tip()
        var title = this.getTitle()

        $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
        $tip.removeClass('fade in top bottom left right')
    }

    Tooltip.prototype.hide = function (callback) {
        var that = this
        var $tip = $(this.$tip)
        var e = $.Event('hide.bs.' + this.type)

        function complete() {
            if (that.hoverState != 'in') $tip.detach()
            that.$element
                .removeAttr('aria-describedby')
                .trigger('hidden.bs.' + that.type)
            callback && callback()
        }

        this.$element.trigger(e)

        if (e.isDefaultPrevented()) return

        $tip.removeClass('in')

        $.support.transition && $tip.hasClass('fade') ?
            $tip
                .one('bsTransitionEnd', complete)
                .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
            complete()

        this.hoverState = null

        return this
    }

    Tooltip.prototype.fixTitle = function () {
        var $e = this.$element
        if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
            $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
        }
    }

    Tooltip.prototype.hasContent = function () {
        return this.getTitle()
    }

    Tooltip.prototype.getPosition = function ($element) {
        $element = $element || this.$element

        var el = $element[0]
        var isBody = el.tagName == 'BODY'

        var elRect = el.getBoundingClientRect()
        if (elRect.width == null) {
            // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
            elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
        }
        var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
        var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
        var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
        if (Tooltip.module.options.allowHover) {
            var plc = Tooltip.module.options.placement;
            if (plc == "bottom")
                elOffset.top -= 10;
            if (plc == "top")
                elOffset.top += 10;
        }
        return $.extend({}, elRect, scroll, outerDims, elOffset)
    }

    Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
        return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
            placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
                placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }

    }

    Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
        var delta = { top: 0, left: 0 }
        if (!this.$viewport) return delta

        var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
        var viewportDimensions = this.getPosition(this.$viewport)

        if (/right|left/.test(placement)) {
            var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
            var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
            if (topEdgeOffset < viewportDimensions.top) { // top overflow
                delta.top = viewportDimensions.top - topEdgeOffset
            } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
                delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
            }
        } else {
            var leftEdgeOffset = pos.left - viewportPadding
            var rightEdgeOffset = pos.left + viewportPadding + actualWidth
            if (leftEdgeOffset < viewportDimensions.left) { // left overflow
                delta.left = viewportDimensions.left - leftEdgeOffset
            } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
                delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
            }
        }

        return delta
    }

    Tooltip.prototype.getTitle = function () {
        var title
        var $e = this.$element
        var o = this.options

        title = $e.attr('data-original-title')
            || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)

        return title
    }

    Tooltip.prototype.getUID = function (prefix) {
        do prefix += ~~(Math.random() * 1000000)
        while (document.getElementById(prefix))
        return prefix
    }

    Tooltip.prototype.tip = function () {
        if (!this.$tip) {
            this.$tip = $(this.options.template);
            if (this.options.allowHover) {
                this.$tip.css("margin","0");
            }
            if (this.$tip.length != 1) {
                throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
            }
        }
        return this.$tip
    }

    Tooltip.prototype.arrow = function () {
        return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
    }

    Tooltip.prototype.enable = function () {
        this.enabled = true
    }

    Tooltip.prototype.disable = function () {
        this.enabled = false
    }

    Tooltip.prototype.toggleEnabled = function () {
        this.enabled = !this.enabled
    }

    Tooltip.prototype.toggle = function (e) {
        var self = this
        if (e) {
            self = $(e.currentTarget).data('bs.' + this.type)
            if (!self) {
                self = new this.constructor(e.currentTarget, this.getDelegateOptions())
                $(e.currentTarget).data('bs.' + this.type, self)
            }
        }

        if (e) {
            self.inState.click = !self.inState.click
            if (self.isInStateTrue()) self.enter(self)
            else self.leave(self)
        } else {
            self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
        }
    }

    Tooltip.prototype.destroy = function () {
        var that = this
        clearTimeout(this.timeout)
        this.hide(function () {
            that.$element.off('.' + that.type).removeData('bs.' + that.type)
            if (that.$tip) {
                that.$tip.detach()
            }
            that.$tip = null
            that.$arrow = null
            that.$viewport = null
        })
    }


    // TOOLTIP PLUGIN DEFINITION
    // =========================

    function Plugin(option) {
        return this.each(function () {
            var $this = $(this)
            var data = $this.data('bs.tooltip')
            var options = typeof option == 'object' && option

            if (!data && /destroy|hide/.test(option)) return
            if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
            if (typeof option == 'string') data[option]()
        })
    }

    var old = $.fn.tooltip

    $.fn.tooltip = Plugin
    $.fn.tooltip.Constructor = Tooltip


    // TOOLTIP NO CONFLICT
    // ===================

    $.fn.tooltip.noConflict = function () {
        $.fn.tooltip = old
        return this
    }

}(jQuery);
;
/* ========================================================================
 * Bootstrap: popover.js v3.3.6
 * http://getbootstrap.com/javascript/#popovers
 * ========================================================================
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */


+function ($) {
  'use strict';

  // POPOVER PUBLIC CLASS DEFINITION
  // ===============================

  var Popover = function (element, options) {
    this.init('popover', element, options)
  }

  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')

  Popover.VERSION  = '3.3.6'

  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
    placement: 'right',
    trigger: 'click',
    content: '',
    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
  })


  // NOTE: POPOVER EXTENDS tooltip.js
  // ================================

  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)

  Popover.prototype.constructor = Popover

  Popover.prototype.getDefaults = function () {
    return Popover.DEFAULTS
  }

  Popover.prototype.setContent = function () {
    var $tip    = this.tip()
    var title   = this.getTitle()
    var content = this.getContent()

    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
    ](content)

    $tip.removeClass('fade top bottom left right in')

    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
    // this manually by checking the contents.
    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
  }

  Popover.prototype.hasContent = function () {
    return this.getTitle() || this.getContent()
  }

  Popover.prototype.getContent = function () {
    var $e = this.$element
    var o  = this.options

    return $e.attr('data-content')
      || (typeof o.content == 'function' ?
            o.content.call($e[0]) :
            o.content)
  }

  Popover.prototype.arrow = function () {
    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
  }


  // POPOVER PLUGIN DEFINITION
  // =========================

  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.popover')
      var options = typeof option == 'object' && option

      if (!data && /destroy|hide/.test(option)) return
      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }

  var old = $.fn.popover

  $.fn.popover             = Plugin
  $.fn.popover.Constructor = Popover


  // POPOVER NO CONFLICT
  // ===================

  $.fn.popover.noConflict = function () {
    $.fn.popover = old
    return this
  }

}(jQuery);
;
/* ========================================================================
 * Bootstrap: modal.js v3.3.6
 * http://getbootstrap.com/javascript/#modals
 * ========================================================================
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * ======================================================================== */


+function ($) {
  'use strict';

  // MODAL CLASS DEFINITION
  // ======================

  var Modal = function (element, options) {
    this.options             = options
    this.$body               = $(document.body)
    this.$element            = $(element)
    this.$dialog             = this.$element.find('.modal-dialog')
    this.$backdrop           = null
    this.isShown             = null
    this.originalBodyPad     = null
    this.scrollbarWidth      = 0
    this.ignoreBackdropClick = false

    if (this.options.remote) {
      this.$element
        .find('.modal-content')
        .load(this.options.remote, $.proxy(function () {
          this.$element.trigger('loaded.bs.modal')
        }, this))
    }
  }

  Modal.VERSION  = '3.3.6'

  Modal.TRANSITION_DURATION = 300
  Modal.BACKDROP_TRANSITION_DURATION = 150

  Modal.DEFAULTS = {
    backdrop: true,
    keyboard: true,
    show: true
  }

  Modal.prototype.toggle = function (_relatedTarget) {
    return this.isShown ? this.hide() : this.show(_relatedTarget)
  }

  Modal.prototype.show = function (_relatedTarget) {
    var that = this
    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })

    this.$element.trigger(e)

    if (this.isShown || e.isDefaultPrevented()) return

    this.isShown = true

    this.checkScrollbar()
    this.setScrollbar()
    this.$body.addClass('modal-open')

    this.escape()
    this.resize()

    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))

    this.$dialog.on('mousedown.dismiss.bs.modal', function () {
      that.$element.one('mouseup.dismiss.bs.modal', function (e) {
        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
      })
    })

    this.backdrop(function () {
      var transition = $.support.transition && that.$element.hasClass('fade')

      if (!that.$element.parent().length) {
        that.$element.appendTo(that.$body) // don't move modals dom position
      }

      that.$element
        .show()
        .scrollTop(0)

      that.adjustDialog()

      if (transition) {
        that.$element[0].offsetWidth // force reflow
      }

      that.$element.addClass('in')

      that.enforceFocus()

      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })

      transition ?
        that.$dialog // wait for modal to slide in
          .one('bsTransitionEnd', function () {
            that.$element.trigger('focus').trigger(e)
          })
          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
        that.$element.trigger('focus').trigger(e)
    })
  }

  Modal.prototype.hide = function (e) {
    if (e) e.preventDefault()

    e = $.Event('hide.bs.modal')

    this.$element.trigger(e)

    if (!this.isShown || e.isDefaultPrevented()) return

    this.isShown = false

    this.escape()
    this.resize()

    $(document).off('focusin.bs.modal')

    this.$element
      .removeClass('in')
      .off('click.dismiss.bs.modal')
      .off('mouseup.dismiss.bs.modal')

    this.$dialog.off('mousedown.dismiss.bs.modal')

    $.support.transition && this.$element.hasClass('fade') ?
      this.$element
        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
      this.hideModal()
  }

  Modal.prototype.enforceFocus = function () {
    $(document)
      .off('focusin.bs.modal') // guard against infinite focus loop
      .on('focusin.bs.modal', $.proxy(function (e) {
        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
          this.$element.trigger('focus')
        }
      }, this))
  }

  Modal.prototype.escape = function () {
    if (this.isShown && this.options.keyboard) {
      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
        e.which == 27 && this.hide()
      }, this))
    } else if (!this.isShown) {
      this.$element.off('keydown.dismiss.bs.modal')
    }
  }

  Modal.prototype.resize = function () {
    if (this.isShown) {
      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
    } else {
      $(window).off('resize.bs.modal')
    }
  }

  Modal.prototype.hideModal = function () {
    var that = this
    this.$element.hide()
    this.backdrop(function () {
      that.$body.removeClass('modal-open')
      that.resetAdjustments()
      that.resetScrollbar()
      that.$element.trigger('hidden.bs.modal')
    })
  }

  Modal.prototype.removeBackdrop = function () {
    this.$backdrop && this.$backdrop.remove()
    this.$backdrop = null
  }

  Modal.prototype.backdrop = function (callback) {
    var that = this
    var animate = this.$element.hasClass('fade') ? 'fade' : ''

    if (this.isShown && this.options.backdrop) {
        var doAnimate = $.support.transition && animate
    
        if ($(".modal-backdrop").length > 0) {
            this.$backdrop = $(".modal-backdrop");
        } else {
            this.$backdrop = $(document.createElement('div'))
              .addClass('modal-backdrop ' + animate)
              .appendTo(this.$body)
        }

        this.$element.on('hide.bs.modal', $.proxy(function (e) {
            if (mixpanel) {
                if (!$(e.target).attr("ignore-mixpanel-close-event"))
                    mixpanel.track("Close Pop-Up");
            }
        }, this))

        this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {

             //Send close popup Event to mixpanel 

        if (this.ignoreBackdropClick) {
          this.ignoreBackdropClick = false
          return
        }
        if (e.target !== e.currentTarget) return
        this.options.backdrop == 'static'
          ? this.$element[0].focus()
          : this.hide()
      }, this))

      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow

      this.$backdrop.addClass('in')

      if (!callback) return

      doAnimate ?
        this.$backdrop
          .one('bsTransitionEnd', callback)
          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
        callback()

    } else if (!this.isShown && this.$backdrop) {
      this.$backdrop.removeClass('in')

      var callbackRemove = function () {
        that.removeBackdrop()
        callback && callback()
      }
      $.support.transition && this.$element.hasClass('fade') ?
        this.$backdrop
          .one('bsTransitionEnd', callbackRemove)
          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
        callbackRemove()

    } else if (callback) {
      callback()
    }
  }

  // these following methods are used to handle overflowing modals

  Modal.prototype.handleUpdate = function () {
    this.adjustDialog()
  }

  Modal.prototype.adjustDialog = function () {
    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight

    this.$element.css({
      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
    })
  }

  Modal.prototype.resetAdjustments = function () {
    this.$element.css({
      paddingLeft: '',
      paddingRight: ''
    })
  }

  Modal.prototype.checkScrollbar = function () {
    var fullWindowWidth = window.innerWidth
    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
      var documentElementRect = document.documentElement.getBoundingClientRect()
      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
    }
    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
    this.scrollbarWidth = this.measureScrollbar()
  }

  Modal.prototype.setScrollbar = function () {
    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
    this.originalBodyPad = document.body.style.paddingRight || ''
    //if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
  }

  Modal.prototype.resetScrollbar = function () {
    this.$body.css('padding-right', this.originalBodyPad)
  }

  Modal.prototype.measureScrollbar = function () { // thx walsh
    var scrollDiv = document.createElement('div')
    scrollDiv.className = 'modal-scrollbar-measure'
    this.$body.append(scrollDiv)
    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
    this.$body[0].removeChild(scrollDiv)
    return scrollbarWidth
  }


  // MODAL PLUGIN DEFINITION
  // =======================

  function Plugin(option, _relatedTarget) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.modal')
      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)

      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
      if (typeof option == 'string') data[option](_relatedTarget)
      else if (options.show) data.show(_relatedTarget)
    })
  }

  var old = $.fn.modal

  $.fn.modal             = Plugin
  $.fn.modal.Constructor = Modal


  // MODAL NO CONFLICT
  // =================

  $.fn.modal.noConflict = function () {
    $.fn.modal = old
    return this
  }


  // MODAL DATA-API
  // ==============

  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
    var $this   = $(this)
    var href    = $this.attr('href')
    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())

    if ($this.is('a')) e.preventDefault()

    $target.one('show.bs.modal', function (showEvent) {
      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
      $target.one('hidden.bs.modal', function () {
        $this.is(':visible') && $this.trigger('focus')
      })
    })
    Plugin.call($target, option, this)
  })

}(jQuery);
;
/*
 * Dexie.js - a minimalistic wrapper for IndexedDB
 * ===============================================
 *
 * By David Fahlander, david.fahlander@gmail.com
 *
 * Version 3.0.2, Fri Jul 31 2020
 *
 * http://dexie.org
 *
 * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/
 */
 
(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
	typeof define === 'function' && define.amd ? define(factory) :
	(global.Dexie = factory());
}(this, (function () { 'use strict';

var __assign = function() {
    __assign = Object.assign || function __assign(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};










function __spreadArrays() {
    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
    for (var r = Array(s), k = 0, i = 0; i < il; i++)
        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
            r[k] = a[j];
    return r;
}

var keys = Object.keys;
var isArray = Array.isArray;
var _global = typeof self !== 'undefined' ? self :
    typeof window !== 'undefined' ? window :
        global;
if (typeof Promise !== 'undefined' && !_global.Promise) {
    _global.Promise = Promise;
}
function extend(obj, extension) {
    if (typeof extension !== 'object')
        return obj;
    keys(extension).forEach(function (key) {
        obj[key] = extension[key];
    });
    return obj;
}
var getProto = Object.getPrototypeOf;
var _hasOwn = {}.hasOwnProperty;
function hasOwn(obj, prop) {
    return _hasOwn.call(obj, prop);
}
function props(proto, extension) {
    if (typeof extension === 'function')
        extension = extension(getProto(proto));
    keys(extension).forEach(function (key) {
        setProp(proto, key, extension[key]);
    });
}
var defineProperty = Object.defineProperty;
function setProp(obj, prop, functionOrGetSet, options) {
    defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ?
        { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } :
        { value: functionOrGetSet, configurable: true, writable: true }, options));
}
function derive(Child) {
    return {
        from: function (Parent) {
            Child.prototype = Object.create(Parent.prototype);
            setProp(Child.prototype, "constructor", Child);
            return {
                extend: props.bind(null, Child.prototype)
            };
        }
    };
}
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
function getPropertyDescriptor(obj, prop) {
    var pd = getOwnPropertyDescriptor(obj, prop);
    var proto;
    return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);
}
var _slice = [].slice;
function slice(args, start, end) {
    return _slice.call(args, start, end);
}
function override(origFunc, overridedFactory) {
    return overridedFactory(origFunc);
}
function assert(b) {
    if (!b)
        throw new Error("Assertion Failed");
}
function asap(fn) {
    if (_global.setImmediate)
        setImmediate(fn);
    else
        setTimeout(fn, 0);
}

function arrayToObject(array, extractor) {
    return array.reduce(function (result, item, i) {
        var nameAndValue = extractor(item, i);
        if (nameAndValue)
            result[nameAndValue[0]] = nameAndValue[1];
        return result;
    }, {});
}

function tryCatch(fn, onerror, args) {
    try {
        fn.apply(null, args);
    }
    catch (ex) {
        onerror && onerror(ex);
    }
}
function getByKeyPath(obj, keyPath) {
    if (hasOwn(obj, keyPath))
        return obj[keyPath];
    if (!keyPath)
        return obj;
    if (typeof keyPath !== 'string') {
        var rv = [];
        for (var i = 0, l = keyPath.length; i < l; ++i) {
            var val = getByKeyPath(obj, keyPath[i]);
            rv.push(val);
        }
        return rv;
    }
    var period = keyPath.indexOf('.');
    if (period !== -1) {
        var innerObj = obj[keyPath.substr(0, period)];
        return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));
    }
    return undefined;
}
function setByKeyPath(obj, keyPath, value) {
    if (!obj || keyPath === undefined)
        return;
    if ('isFrozen' in Object && Object.isFrozen(obj))
        return;
    if (typeof keyPath !== 'string' && 'length' in keyPath) {
        assert(typeof value !== 'string' && 'length' in value);
        for (var i = 0, l = keyPath.length; i < l; ++i) {
            setByKeyPath(obj, keyPath[i], value[i]);
        }
    }
    else {
        var period = keyPath.indexOf('.');
        if (period !== -1) {
            var currentKeyPath = keyPath.substr(0, period);
            var remainingKeyPath = keyPath.substr(period + 1);
            if (remainingKeyPath === "")
                if (value === undefined) {
                    if (isArray(obj) && !isNaN(parseInt(currentKeyPath)))
                        obj.splice(currentKeyPath, 1);
                    else
                        delete obj[currentKeyPath];
                }
                else
                    obj[currentKeyPath] = value;
            else {
                var innerObj = obj[currentKeyPath];
                if (!innerObj)
                    innerObj = (obj[currentKeyPath] = {});
                setByKeyPath(innerObj, remainingKeyPath, value);
            }
        }
        else {
            if (value === undefined) {
                if (isArray(obj) && !isNaN(parseInt(keyPath)))
                    obj.splice(keyPath, 1);
                else
                    delete obj[keyPath];
            }
            else
                obj[keyPath] = value;
        }
    }
}
function delByKeyPath(obj, keyPath) {
    if (typeof keyPath === 'string')
        setByKeyPath(obj, keyPath, undefined);
    else if ('length' in keyPath)
        [].map.call(keyPath, function (kp) {
            setByKeyPath(obj, kp, undefined);
        });
}
function shallowClone(obj) {
    var rv = {};
    for (var m in obj) {
        if (hasOwn(obj, m))
            rv[m] = obj[m];
    }
    return rv;
}
var concat = [].concat;
function flatten(a) {
    return concat.apply([], a);
}
var intrinsicTypeNames = "Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set"
    .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; });
var intrinsicTypes = intrinsicTypeNames.map(function (t) { return _global[t]; });
var intrinsicTypeNameSet = arrayToObject(intrinsicTypeNames, function (x) { return [x, true]; });
function deepClone(any) {
    if (!any || typeof any !== 'object')
        return any;
    var rv;
    if (isArray(any)) {
        rv = [];
        for (var i = 0, l = any.length; i < l; ++i) {
            rv.push(deepClone(any[i]));
        }
    }
    else if (intrinsicTypes.indexOf(any.constructor) >= 0) {
        rv = any;
    }
    else {
        rv = any.constructor ? Object.create(any.constructor.prototype) : {};
        for (var prop in any) {
            if (hasOwn(any, prop)) {
                rv[prop] = deepClone(any[prop]);
            }
        }
    }
    return rv;
}
var toString = {}.toString;
function toStringTag(o) {
    return toString.call(o).slice(8, -1);
}
var getValueOf = function (val, type) {
    return type === "Array" ? '' + val.map(function (v) { return getValueOf(v, toStringTag(v)); }) :
        type === "ArrayBuffer" ? '' + new Uint8Array(val) :
            type === "Date" ? val.getTime() :
                ArrayBuffer.isView(val) ? '' + new Uint8Array(val.buffer) :
                    val;
};
function getObjectDiff(a, b, rv, prfx) {
    rv = rv || {};
    prfx = prfx || '';
    keys(a).forEach(function (prop) {
        if (!hasOwn(b, prop))
            rv[prfx + prop] = undefined;
        else {
            var ap = a[prop], bp = b[prop];
            if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {
                var apTypeName = toStringTag(ap);
                var bpTypeName = toStringTag(bp);
                if (apTypeName === bpTypeName) {
                    if (intrinsicTypeNameSet[apTypeName]) {
                        if (getValueOf(ap, apTypeName) !== getValueOf(bp, bpTypeName)) {
                            rv[prfx + prop] = b[prop];
                        }
                    }
                    else {
                        getObjectDiff(ap, bp, rv, prfx + prop + ".");
                    }
                }
                else {
                    rv[prfx + prop] = b[prop];
                }
            }
            else if (ap !== bp)
                rv[prfx + prop] = b[prop];
        }
    });
    keys(b).forEach(function (prop) {
        if (!hasOwn(a, prop)) {
            rv[prfx + prop] = b[prop];
        }
    });
    return rv;
}
var iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator;
var getIteratorOf = iteratorSymbol ? function (x) {
    var i;
    return x != null && (i = x[iteratorSymbol]) && i.apply(x);
} : function () { return null; };
var NO_CHAR_ARRAY = {};
function getArrayOf(arrayLike) {
    var i, a, x, it;
    if (arguments.length === 1) {
        if (isArray(arrayLike))
            return arrayLike.slice();
        if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string')
            return [arrayLike];
        if ((it = getIteratorOf(arrayLike))) {
            a = [];
            while (x = it.next(), !x.done)
                a.push(x.value);
            return a;
        }
        if (arrayLike == null)
            return [arrayLike];
        i = arrayLike.length;
        if (typeof i === 'number') {
            a = new Array(i);
            while (i--)
                a[i] = arrayLike[i];
            return a;
        }
        return [arrayLike];
    }
    i = arguments.length;
    a = new Array(i);
    while (i--)
        a[i] = arguments[i];
    return a;
}
var isAsyncFunction = typeof Symbol !== 'undefined'
    ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; }
    : function () { return false; };

var debug = typeof location !== 'undefined' &&
    /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);
function setDebug(value, filter) {
    debug = value;
    libraryFilter = filter;
}
var libraryFilter = function () { return true; };
var NEEDS_THROW_FOR_STACK = !new Error("").stack;
function getErrorWithStack() {
    if (NEEDS_THROW_FOR_STACK)
        try {
            throw new Error();
        }
        catch (e) {
            return e;
        }
    return new Error();
}
function prettyStack(exception, numIgnoredFrames) {
    var stack = exception.stack;
    if (!stack)
        return "";
    numIgnoredFrames = (numIgnoredFrames || 0);
    if (stack.indexOf(exception.name) === 0)
        numIgnoredFrames += (exception.name + exception.message).split('\n').length;
    return stack.split('\n')
        .slice(numIgnoredFrames)
        .filter(libraryFilter)
        .map(function (frame) { return "\n" + frame; })
        .join('');
}

var dexieErrorNames = [
    'Modify',
    'Bulk',
    'OpenFailed',
    'VersionChange',
    'Schema',
    'Upgrade',
    'InvalidTable',
    'MissingAPI',
    'NoSuchDatabase',
    'InvalidArgument',
    'SubTransaction',
    'Unsupported',
    'Internal',
    'DatabaseClosed',
    'PrematureCommit',
    'ForeignAwait'
];
var idbDomErrorNames = [
    'Unknown',
    'Constraint',
    'Data',
    'TransactionInactive',
    'ReadOnly',
    'Version',
    'NotFound',
    'InvalidState',
    'InvalidAccess',
    'Abort',
    'Timeout',
    'QuotaExceeded',
    'Syntax',
    'DataClone'
];
var errorList = dexieErrorNames.concat(idbDomErrorNames);
var defaultTexts = {
    VersionChanged: "Database version changed by other database connection",
    DatabaseClosed: "Database has been closed",
    Abort: "Transaction aborted",
    TransactionInactive: "Transaction has already completed or failed"
};
function DexieError(name, msg) {
    this._e = getErrorWithStack();
    this.name = name;
    this.message = msg;
}
derive(DexieError).from(Error).extend({
    stack: {
        get: function () {
            return this._stack ||
                (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2));
        }
    },
    toString: function () { return this.name + ": " + this.message; }
});
function getMultiErrorMessage(msg, failures) {
    return msg + ". Errors: " + Object.keys(failures)
        .map(function (key) { return failures[key].toString(); })
        .filter(function (v, i, s) { return s.indexOf(v) === i; })
        .join('\n');
}
function ModifyError(msg, failures, successCount, failedKeys) {
    this._e = getErrorWithStack();
    this.failures = failures;
    this.failedKeys = failedKeys;
    this.successCount = successCount;
    this.message = getMultiErrorMessage(msg, failures);
}
derive(ModifyError).from(DexieError);
function BulkError(msg, failures) {
    this._e = getErrorWithStack();
    this.name = "BulkError";
    this.failures = failures;
    this.message = getMultiErrorMessage(msg, failures);
}
derive(BulkError).from(DexieError);
var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {});
var BaseException = DexieError;
var exceptions = errorList.reduce(function (obj, name) {
    var fullName = name + "Error";
    function DexieError(msgOrInner, inner) {
        this._e = getErrorWithStack();
        this.name = fullName;
        if (!msgOrInner) {
            this.message = defaultTexts[name] || fullName;
            this.inner = null;
        }
        else if (typeof msgOrInner === 'string') {
            this.message = "" + msgOrInner + (!inner ? '' : '\n ' + inner);
            this.inner = inner || null;
        }
        else if (typeof msgOrInner === 'object') {
            this.message = msgOrInner.name + " " + msgOrInner.message;
            this.inner = msgOrInner;
        }
    }
    derive(DexieError).from(BaseException);
    obj[name] = DexieError;
    return obj;
}, {});
exceptions.Syntax = SyntaxError;
exceptions.Type = TypeError;
exceptions.Range = RangeError;
var exceptionMap = idbDomErrorNames.reduce(function (obj, name) {
    obj[name + "Error"] = exceptions[name];
    return obj;
}, {});
function mapError(domError, message) {
    if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])
        return domError;
    var rv = new exceptionMap[domError.name](message || domError.message, domError);
    if ("stack" in domError) {
        setProp(rv, "stack", { get: function () {
                return this.inner.stack;
            } });
    }
    return rv;
}
var fullNameExceptions = errorList.reduce(function (obj, name) {
    if (["Syntax", "Type", "Range"].indexOf(name) === -1)
        obj[name + "Error"] = exceptions[name];
    return obj;
}, {});
fullNameExceptions.ModifyError = ModifyError;
fullNameExceptions.DexieError = DexieError;
fullNameExceptions.BulkError = BulkError;

function nop() { }
function mirror(val) { return val; }
function pureFunctionChain(f1, f2) {
    if (f1 == null || f1 === mirror)
        return f2;
    return function (val) {
        return f2(f1(val));
    };
}
function callBoth(on1, on2) {
    return function () {
        on1.apply(this, arguments);
        on2.apply(this, arguments);
    };
}
function hookCreatingChain(f1, f2) {
    if (f1 === nop)
        return f2;
    return function () {
        var res = f1.apply(this, arguments);
        if (res !== undefined)
            arguments[0] = res;
        var onsuccess = this.onsuccess,
        onerror = this.onerror;
        this.onsuccess = null;
        this.onerror = null;
        var res2 = f2.apply(this, arguments);
        if (onsuccess)
            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
        if (onerror)
            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
        return res2 !== undefined ? res2 : res;
    };
}
function hookDeletingChain(f1, f2) {
    if (f1 === nop)
        return f2;
    return function () {
        f1.apply(this, arguments);
        var onsuccess = this.onsuccess,
        onerror = this.onerror;
        this.onsuccess = this.onerror = null;
        f2.apply(this, arguments);
        if (onsuccess)
            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
        if (onerror)
            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
    };
}
function hookUpdatingChain(f1, f2) {
    if (f1 === nop)
        return f2;
    return function (modifications) {
        var res = f1.apply(this, arguments);
        extend(modifications, res);
        var onsuccess = this.onsuccess,
        onerror = this.onerror;
        this.onsuccess = null;
        this.onerror = null;
        var res2 = f2.apply(this, arguments);
        if (onsuccess)
            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;
        if (onerror)
            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;
        return res === undefined ?
            (res2 === undefined ? undefined : res2) :
            (extend(res, res2));
    };
}
function reverseStoppableEventChain(f1, f2) {
    if (f1 === nop)
        return f2;
    return function () {
        if (f2.apply(this, arguments) === false)
            return false;
        return f1.apply(this, arguments);
    };
}

function promisableChain(f1, f2) {
    if (f1 === nop)
        return f2;
    return function () {
        var res = f1.apply(this, arguments);
        if (res && typeof res.then === 'function') {
            var thiz = this, i = arguments.length, args = new Array(i);
            while (i--)
                args[i] = arguments[i];
            return res.then(function () {
                return f2.apply(thiz, args);
            });
        }
        return f2.apply(this, arguments);
    };
}

var INTERNAL = {};
var LONG_STACKS_CLIP_LIMIT = 100;
var MAX_LONG_STACKS = 20;
var ZONE_ECHO_LIMIT = 100;
var _a = typeof Promise === 'undefined' ?
    [] :
    (function () {
        var globalP = Promise.resolve();
        if (typeof crypto === 'undefined' || !crypto.subtle)
            return [globalP, globalP.__proto__, globalP];
        var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0]));
        return [
            nativeP,
            nativeP.__proto__,
            globalP
        ];
    })();
var resolvedNativePromise = _a[0];
var nativePromiseProto = _a[1];
var resolvedGlobalPromise = _a[2];
var nativePromiseThen = nativePromiseProto && nativePromiseProto.then;
var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;
var patchGlobalPromise = !!resolvedGlobalPromise;
var stack_being_generated = false;
var schedulePhysicalTick = resolvedGlobalPromise ?
    function () { resolvedGlobalPromise.then(physicalTick); }
    :
        _global.setImmediate ?
            setImmediate.bind(null, physicalTick) :
            _global.MutationObserver ?
                function () {
                    var hiddenDiv = document.createElement("div");
                    (new MutationObserver(function () {
                        physicalTick();
                        hiddenDiv = null;
                    })).observe(hiddenDiv, { attributes: true });
                    hiddenDiv.setAttribute('i', '1');
                } :
                function () { setTimeout(physicalTick, 0); };
var asap$1 = function (callback, args) {
    microtickQueue.push([callback, args]);
    if (needsNewPhysicalTick) {
        schedulePhysicalTick();
        needsNewPhysicalTick = false;
    }
};
var isOutsideMicroTick = true;
var needsNewPhysicalTick = true;
var unhandledErrors = [];
var rejectingErrors = [];
var currentFulfiller = null;
var rejectionMapper = mirror;
var globalPSD = {
    id: 'global',
    global: true,
    ref: 0,
    unhandleds: [],
    onunhandled: globalError,
    pgp: false,
    env: {},
    finalize: function () {
        this.unhandleds.forEach(function (uh) {
            try {
                globalError(uh[0], uh[1]);
            }
            catch (e) { }
        });
    }
};
var PSD = globalPSD;
var microtickQueue = [];
var numScheduledCalls = 0;
var tickFinalizers = [];
function DexiePromise(fn) {
    if (typeof this !== 'object')
        throw new TypeError('Promises must be constructed via new');
    this._listeners = [];
    this.onuncatched = nop;
    this._lib = false;
    var psd = (this._PSD = PSD);
    if (debug) {
        this._stackHolder = getErrorWithStack();
        this._prev = null;
        this._numPrev = 0;
    }
    if (typeof fn !== 'function') {
        if (fn !== INTERNAL)
            throw new TypeError('Not a function');
        this._state = arguments[1];
        this._value = arguments[2];
        if (this._state === false)
            handleRejection(this, this._value);
        return;
    }
    this._state = null;
    this._value = null;
    ++psd.ref;
    executePromiseTask(this, fn);
}
var thenProp = {
    get: function () {
        var psd = PSD, microTaskId = totalEchoes;
        function then(onFulfilled, onRejected) {
            var _this = this;
            var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);
            if (possibleAwait)
                decrementExpectedAwaits();
            var rv = new DexiePromise(function (resolve, reject) {
                propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd));
            });
            debug && linkToPreviousPromise(rv, this);
            return rv;
        }
        then.prototype = INTERNAL;
        return then;
    },
    set: function (value) {
        setProp(this, 'then', value && value.prototype === INTERNAL ?
            thenProp :
            {
                get: function () {
                    return value;
                },
                set: thenProp.set
            });
    }
};
props(DexiePromise.prototype, {
    then: thenProp,
    _then: function (onFulfilled, onRejected) {
        propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD));
    },
    catch: function (onRejected) {
        if (arguments.length === 1)
            return this.then(null, onRejected);
        var type = arguments[0], handler = arguments[1];
        return typeof type === 'function' ? this.then(null, function (err) {
            return err instanceof type ? handler(err) : PromiseReject(err);
        })
            : this.then(null, function (err) {
                return err && err.name === type ? handler(err) : PromiseReject(err);
            });
    },
    finally: function (onFinally) {
        return this.then(function (value) {
            onFinally();
            return value;
        }, function (err) {
            onFinally();
            return PromiseReject(err);
        });
    },
    stack: {
        get: function () {
            if (this._stack)
                return this._stack;
            try {
                stack_being_generated = true;
                var stacks = getStack(this, [], MAX_LONG_STACKS);
                var stack = stacks.join("\nFrom previous: ");
                if (this._state !== null)
                    this._stack = stack;
                return stack;
            }
            finally {
                stack_being_generated = false;
            }
        }
    },
    timeout: function (ms, msg) {
        var _this = this;
        return ms < Infinity ?
            new DexiePromise(function (resolve, reject) {
                var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms);
                _this.then(resolve, reject).finally(clearTimeout.bind(null, handle));
            }) : this;
    }
});
if (typeof Symbol !== 'undefined' && Symbol.toStringTag)
    setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');
globalPSD.env = snapShot();
function Listener(onFulfilled, onRejected, resolve, reject, zone) {
    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
    this.onRejected = typeof onRejected === 'function' ? onRejected : null;
    this.resolve = resolve;
    this.reject = reject;
    this.psd = zone;
}
props(DexiePromise, {
    all: function () {
        var values = getArrayOf.apply(null, arguments)
            .map(onPossibleParallellAsync);
        return new DexiePromise(function (resolve, reject) {
            if (values.length === 0)
                resolve([]);
            var remaining = values.length;
            values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) {
                values[i] = x;
                if (!--remaining)
                    resolve(values);
            }, reject); });
        });
    },
    resolve: function (value) {
        if (value instanceof DexiePromise)
            return value;
        if (value && typeof value.then === 'function')
            return new DexiePromise(function (resolve, reject) {
                value.then(resolve, reject);
            });
        var rv = new DexiePromise(INTERNAL, true, value);
        linkToPreviousPromise(rv, currentFulfiller);
        return rv;
    },
    reject: PromiseReject,
    race: function () {
        var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
        return new DexiePromise(function (resolve, reject) {
            values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); });
        });
    },
    PSD: {
        get: function () { return PSD; },
        set: function (value) { return PSD = value; }
    },
    newPSD: newScope,
    usePSD: usePSD,
    scheduler: {
        get: function () { return asap$1; },
        set: function (value) { asap$1 = value; }
    },
    rejectionMapper: {
        get: function () { return rejectionMapper; },
        set: function (value) { rejectionMapper = value; }
    },
    follow: function (fn, zoneProps) {
        return new DexiePromise(function (resolve, reject) {
            return newScope(function (resolve, reject) {
                var psd = PSD;
                psd.unhandleds = [];
                psd.onunhandled = reject;
                psd.finalize = callBoth(function () {
                    var _this = this;
                    run_at_end_of_this_or_next_physical_tick(function () {
                        _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]);
                    });
                }, psd.finalize);
                fn();
            }, zoneProps, resolve, reject);
        });
    }
});
if (NativePromise) {
    if (NativePromise.allSettled)
        setProp(DexiePromise, "allSettled", function () {
            var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
            return new DexiePromise(function (resolve) {
                if (possiblePromises.length === 0)
                    resolve([]);
                var remaining = possiblePromises.length;
                var results = new Array(remaining);
                possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; })
                    .then(function () { return --remaining || resolve(results); }); });
            });
        });
    if (NativePromise.any && typeof AggregateError !== 'undefined')
        setProp(DexiePromise, "any", function () {
            var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);
            return new DexiePromise(function (resolve, reject) {
                if (possiblePromises.length === 0)
                    reject(new AggregateError([]));
                var remaining = possiblePromises.length;
                var failures = new Array(remaining);
                possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) {
                    failures[i] = failure;
                    if (!--remaining)
                        reject(new AggregateError(failures));
                }); });
            });
        });
}
function executePromiseTask(promise, fn) {
    try {
        fn(function (value) {
            if (promise._state !== null)
                return;
            if (value === promise)
                throw new TypeError('A promise cannot be resolved with itself.');
            var shouldExecuteTick = promise._lib && beginMicroTickScope();
            if (value && typeof value.then === 'function') {
                executePromiseTask(promise, function (resolve, reject) {
                    value instanceof DexiePromise ?
                        value._then(resolve, reject) :
                        value.then(resolve, reject);
                });
            }
            else {
                promise._state = true;
                promise._value = value;
                propagateAllListeners(promise);
            }
            if (shouldExecuteTick)
                endMicroTickScope();
        }, handleRejection.bind(null, promise));
    }
    catch (ex) {
        handleRejection(promise, ex);
    }
}
function handleRejection(promise, reason) {
    rejectingErrors.push(reason);
    if (promise._state !== null)
        return;
    var shouldExecuteTick = promise._lib && beginMicroTickScope();
    reason = rejectionMapper(reason);
    promise._state = false;
    promise._value = reason;
    debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () {
        var origProp = getPropertyDescriptor(reason, "stack");
        reason._promise = promise;
        setProp(reason, "stack", {
            get: function () {
                return stack_being_generated ?
                    origProp && (origProp.get ?
                        origProp.get.apply(reason) :
                        origProp.value) :
                    promise.stack;
            }
        });
    });
    addPossiblyUnhandledError(promise);
    propagateAllListeners(promise);
    if (shouldExecuteTick)
        endMicroTickScope();
}
function propagateAllListeners(promise) {
    var listeners = promise._listeners;
    promise._listeners = [];
    for (var i = 0, len = listeners.length; i < len; ++i) {
        propagateToListener(promise, listeners[i]);
    }
    var psd = promise._PSD;
    --psd.ref || psd.finalize();
    if (numScheduledCalls === 0) {
        ++numScheduledCalls;
        asap$1(function () {
            if (--numScheduledCalls === 0)
                finalizePhysicalTick();
        }, []);
    }
}
function propagateToListener(promise, listener) {
    if (promise._state === null) {
        promise._listeners.push(listener);
        return;
    }
    var cb = promise._state ? listener.onFulfilled : listener.onRejected;
    if (cb === null) {
        return (promise._state ? listener.resolve : listener.reject)(promise._value);
    }
    ++listener.psd.ref;
    ++numScheduledCalls;
    asap$1(callListener, [cb, promise, listener]);
}
function callListener(cb, promise, listener) {
    try {
        currentFulfiller = promise;
        var ret, value = promise._value;
        if (promise._state) {
            ret = cb(value);
        }
        else {
            if (rejectingErrors.length)
                rejectingErrors = [];
            ret = cb(value);
            if (rejectingErrors.indexOf(value) === -1)
                markErrorAsHandled(promise);
        }
        listener.resolve(ret);
    }
    catch (e) {
        listener.reject(e);
    }
    finally {
        currentFulfiller = null;
        if (--numScheduledCalls === 0)
            finalizePhysicalTick();
        --listener.psd.ref || listener.psd.finalize();
    }
}
function getStack(promise, stacks, limit) {
    if (stacks.length === limit)
        return stacks;
    var stack = "";
    if (promise._state === false) {
        var failure = promise._value, errorName, message;
        if (failure != null) {
            errorName = failure.name || "Error";
            message = failure.message || failure;
            stack = prettyStack(failure, 0);
        }
        else {
            errorName = failure;
            message = "";
        }
        stacks.push(errorName + (message ? ": " + message : "") + stack);
    }
    if (debug) {
        stack = prettyStack(promise._stackHolder, 2);
        if (stack && stacks.indexOf(stack) === -1)
            stacks.push(stack);
        if (promise._prev)
            getStack(promise._prev, stacks, limit);
    }
    return stacks;
}
function linkToPreviousPromise(promise, prev) {
    var numPrev = prev ? prev._numPrev + 1 : 0;
    if (numPrev < LONG_STACKS_CLIP_LIMIT) {
        promise._prev = prev;
        promise._numPrev = numPrev;
    }
}
function physicalTick() {
    beginMicroTickScope() && endMicroTickScope();
}
function beginMicroTickScope() {
    var wasRootExec = isOutsideMicroTick;
    isOutsideMicroTick = false;
    needsNewPhysicalTick = false;
    return wasRootExec;
}
function endMicroTickScope() {
    var callbacks, i, l;
    do {
        while (microtickQueue.length > 0) {
            callbacks = microtickQueue;
            microtickQueue = [];
            l = callbacks.length;
            for (i = 0; i < l; ++i) {
                var item = callbacks[i];
                item[0].apply(null, item[1]);
            }
        }
    } while (microtickQueue.length > 0);
    isOutsideMicroTick = true;
    needsNewPhysicalTick = true;
}
function finalizePhysicalTick() {
    var unhandledErrs = unhandledErrors;
    unhandledErrors = [];
    unhandledErrs.forEach(function (p) {
        p._PSD.onunhandled.call(null, p._value, p);
    });
    var finalizers = tickFinalizers.slice(0);
    var i = finalizers.length;
    while (i)
        finalizers[--i]();
}
function run_at_end_of_this_or_next_physical_tick(fn) {
    function finalizer() {
        fn();
        tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);
    }
    tickFinalizers.push(finalizer);
    ++numScheduledCalls;
    asap$1(function () {
        if (--numScheduledCalls === 0)
            finalizePhysicalTick();
    }, []);
}
function addPossiblyUnhandledError(promise) {
    if (!unhandledErrors.some(function (p) { return p._value === promise._value; }))
        unhandledErrors.push(promise);
}
function markErrorAsHandled(promise) {
    var i = unhandledErrors.length;
    while (i)
        if (unhandledErrors[--i]._value === promise._value) {
            unhandledErrors.splice(i, 1);
            return;
        }
}
function PromiseReject(reason) {
    return new DexiePromise(INTERNAL, false, reason);
}
function wrap(fn, errorCatcher) {
    var psd = PSD;
    return function () {
        var wasRootExec = beginMicroTickScope(), outerScope = PSD;
        try {
            switchToZone(psd, true);
            return fn.apply(this, arguments);
        }
        catch (e) {
            errorCatcher && errorCatcher(e);
        }
        finally {
            switchToZone(outerScope, false);
            if (wasRootExec)
                endMicroTickScope();
        }
    };
}
var task = { awaits: 0, echoes: 0, id: 0 };
var taskCounter = 0;
var zoneStack = [];
var zoneEchoes = 0;
var totalEchoes = 0;
var zone_id_counter = 0;
function newScope(fn, props$$1, a1, a2) {
    var parent = PSD, psd = Object.create(parent);
    psd.parent = parent;
    psd.ref = 0;
    psd.global = false;
    psd.id = ++zone_id_counter;
    var globalEnv = globalPSD.env;
    psd.env = patchGlobalPromise ? {
        Promise: DexiePromise,
        PromiseProp: { value: DexiePromise, configurable: true, writable: true },
        all: DexiePromise.all,
        race: DexiePromise.race,
        allSettled: DexiePromise.allSettled,
        any: DexiePromise.any,
        resolve: DexiePromise.resolve,
        reject: DexiePromise.reject,
        nthen: getPatchedPromiseThen(globalEnv.nthen, psd),
        gthen: getPatchedPromiseThen(globalEnv.gthen, psd)
    } : {};
    if (props$$1)
        extend(psd, props$$1);
    ++parent.ref;
    psd.finalize = function () {
        --this.parent.ref || this.parent.finalize();
    };
    var rv = usePSD(psd, fn, a1, a2);
    if (psd.ref === 0)
        psd.finalize();
    return rv;
}
function incrementExpectedAwaits() {
    if (!task.id)
        task.id = ++taskCounter;
    ++task.awaits;
    task.echoes += ZONE_ECHO_LIMIT;
    return task.id;
}
function decrementExpectedAwaits(sourceTaskId) {
    if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id))
        return;
    if (--task.awaits === 0)
        task.id = 0;
    task.echoes = task.awaits * ZONE_ECHO_LIMIT;
}
if (('' + nativePromiseThen).indexOf('[native code]') === -1) {
    incrementExpectedAwaits = decrementExpectedAwaits = nop;
}
function onPossibleParallellAsync(possiblePromise) {
    if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {
        incrementExpectedAwaits();
        return possiblePromise.then(function (x) {
            decrementExpectedAwaits();
            return x;
        }, function (e) {
            decrementExpectedAwaits();
            return rejection(e);
        });
    }
    return possiblePromise;
}
function zoneEnterEcho(targetZone) {
    ++totalEchoes;
    if (!task.echoes || --task.echoes === 0) {
        task.echoes = task.id = 0;
    }
    zoneStack.push(PSD);
    switchToZone(targetZone, true);
}
function zoneLeaveEcho() {
    var zone = zoneStack[zoneStack.length - 1];
    zoneStack.pop();
    switchToZone(zone, false);
}
function switchToZone(targetZone, bEnteringZone) {
    var currentZone = PSD;
    if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {
        enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);
    }
    if (targetZone === PSD)
        return;
    PSD = targetZone;
    if (currentZone === globalPSD)
        globalPSD.env = snapShot();
    if (patchGlobalPromise) {
        var GlobalPromise_1 = globalPSD.env.Promise;
        var targetEnv = targetZone.env;
        nativePromiseProto.then = targetEnv.nthen;
        GlobalPromise_1.prototype.then = targetEnv.gthen;
        if (currentZone.global || targetZone.global) {
            Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);
            GlobalPromise_1.all = targetEnv.all;
            GlobalPromise_1.race = targetEnv.race;
            GlobalPromise_1.resolve = targetEnv.resolve;
            GlobalPromise_1.reject = targetEnv.reject;
            if (targetEnv.allSettled)
                GlobalPromise_1.allSettled = targetEnv.allSettled;
            if (targetEnv.any)
                GlobalPromise_1.any = targetEnv.any;
        }
    }
}
function snapShot() {
    var GlobalPromise = _global.Promise;
    return patchGlobalPromise ? {
        Promise: GlobalPromise,
        PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"),
        all: GlobalPromise.all,
        race: GlobalPromise.race,
        allSettled: GlobalPromise.allSettled,
        any: GlobalPromise.any,
        resolve: GlobalPromise.resolve,
        reject: GlobalPromise.reject,
        nthen: nativePromiseProto.then,
        gthen: GlobalPromise.prototype.then
    } : {};
}
function usePSD(psd, fn, a1, a2, a3) {
    var outerScope = PSD;
    try {
        switchToZone(psd, true);
        return fn(a1, a2, a3);
    }
    finally {
        switchToZone(outerScope, false);
    }
}
function enqueueNativeMicroTask(job) {
    nativePromiseThen.call(resolvedNativePromise, job);
}
function nativeAwaitCompatibleWrap(fn, zone, possibleAwait) {
    return typeof fn !== 'function' ? fn : function () {
        var outerZone = PSD;
        if (possibleAwait)
            incrementExpectedAwaits();
        switchToZone(zone, true);
        try {
            return fn.apply(this, arguments);
        }
        finally {
            switchToZone(outerZone, false);
        }
    };
}
function getPatchedPromiseThen(origThen, zone) {
    return function (onResolved, onRejected) {
        return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false));
    };
}
var UNHANDLEDREJECTION = "unhandledrejection";
function globalError(err, promise) {
    var rv;
    try {
        rv = promise.onuncatched(err);
    }
    catch (e) { }
    if (rv !== false)
        try {
            var event, eventData = { promise: promise, reason: err };
            if (_global.document && document.createEvent) {
                event = document.createEvent('Event');
                event.initEvent(UNHANDLEDREJECTION, true, true);
                extend(event, eventData);
            }
            else if (_global.CustomEvent) {
                event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData });
                extend(event, eventData);
            }
            if (event && _global.dispatchEvent) {
                dispatchEvent(event);
                if (!_global.PromiseRejectionEvent && _global.onunhandledrejection)
                    try {
                        _global.onunhandledrejection(event);
                    }
                    catch (_) { }
            }
            if (debug && event && !event.defaultPrevented) {
                console.warn("Unhandled rejection: " + (err.stack || err));
            }
        }
        catch (e) { }
}
var rejection = DexiePromise.reject;

function tempTransaction(db, mode, storeNames, fn) {
    if (!db._state.openComplete && (!PSD.letThrough)) {
        if (!db._state.isBeingOpened) {
            if (!db._options.autoOpen)
                return rejection(new exceptions.DatabaseClosed());
            db.open().catch(nop);
        }
        return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); });
    }
    else {
        var trans = db._createTransaction(mode, storeNames, db._dbSchema);
        try {
            trans.create();
        }
        catch (ex) {
            return rejection(ex);
        }
        return trans._promise(mode, function (resolve, reject) {
            return newScope(function () {
                PSD.trans = trans;
                return fn(resolve, reject, trans);
            });
        }).then(function (result) {
            return trans._completion.then(function () { return result; });
        });
    }
}

var DEXIE_VERSION = '3.0.2';
var maxString = String.fromCharCode(65535);
var minKey = -Infinity;
var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
var STRING_EXPECTED = "String expected.";
var connections = [];
var isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);
var hasIEDeleteObjectStoreBug = isIEOrEdge;
var hangsOnDeleteLargeKeyRange = isIEOrEdge;
var dexieStackFrameFilter = function (frame) { return !/(dexie\.js|dexie\.min\.js)/.test(frame); };
var DBNAMES_DB = '__dbnames';
var READONLY = 'readonly';
var READWRITE = 'readwrite';

function combine(filter1, filter2) {
    return filter1 ?
        filter2 ?
            function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :
            filter1 :
        filter2;
}

var AnyRange = {
    type: 3          ,
    lower: -Infinity,
    lowerOpen: false,
    upper: [[]],
    upperOpen: false
};

var Table =               (function () {
    function Table() {
    }
    Table.prototype._trans = function (mode, fn, writeLocked) {
        var trans = this._tx || PSD.trans;
        var tableName = this.name;
        function checkTableInTransaction(resolve, reject, trans) {
            if (!trans.schema[tableName])
                throw new exceptions.NotFound("Table " + tableName + " not part of transaction");
            return fn(trans.idbtrans, trans);
        }
        var wasRootExec = beginMicroTickScope();
        try {
            return trans && trans.db === this.db ?
                trans === PSD.trans ?
                    trans._promise(mode, checkTableInTransaction, writeLocked) :
                    newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) :
                tempTransaction(this.db, mode, [this.name], checkTableInTransaction);
        }
        finally {
            if (wasRootExec)
                endMicroTickScope();
        }
    };
    Table.prototype.get = function (keyOrCrit, cb) {
        var _this = this;
        if (keyOrCrit && keyOrCrit.constructor === Object)
            return this.where(keyOrCrit).first(cb);
        return this._trans('readonly', function (trans) {
            return _this.core.get({ trans: trans, key: keyOrCrit })
                .then(function (res) { return _this.hook.reading.fire(res); });
        }).then(cb);
    };
    Table.prototype.where = function (indexOrCrit) {
        if (typeof indexOrCrit === 'string')
            return new this.db.WhereClause(this, indexOrCrit);
        if (isArray(indexOrCrit))
            return new this.db.WhereClause(this, "[" + indexOrCrit.join('+') + "]");
        var keyPaths = keys(indexOrCrit);
        if (keyPaths.length === 1)
            return this
                .where(keyPaths[0])
                .equals(indexOrCrit[keyPaths[0]]);
        var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {
            return ix.compound &&
                keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) &&
                ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; });
        })[0];
        if (compoundIndex && this.db._maxKey !== maxString)
            return this
                .where(compoundIndex.name)
                .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; }));
        if (!compoundIndex && debug)
            console.warn("The query " + JSON.stringify(indexOrCrit) + " on " + this.name + " would benefit of a " +
                ("compound index [" + keyPaths.join('+') + "]"));
        var idxByName = this.schema.idxByName;
        var idb = this.db._deps.indexedDB;
        function equals(a, b) {
            try {
                return idb.cmp(a, b) === 0;
            }
            catch (e) {
                return false;
            }
        }
        var _a = keyPaths.reduce(function (_a, keyPath) {
            var prevIndex = _a[0], prevFilterFn = _a[1];
            var index = idxByName[keyPath];
            var value = indexOrCrit[keyPath];
            return [
                prevIndex || index,
                prevIndex || !index ?
                    combine(prevFilterFn, index && index.multi ?
                        function (x) {
                            var prop = getByKeyPath(x, keyPath);
                            return isArray(prop) && prop.some(function (item) { return equals(value, item); });
                        } : function (x) { return equals(value, getByKeyPath(x, keyPath)); })
                    : prevFilterFn
            ];
        }, [null, null]), idx = _a[0], filterFunction = _a[1];
        return idx ?
            this.where(idx.name).equals(indexOrCrit[idx.keyPath])
                .filter(filterFunction) :
            compoundIndex ?
                this.filter(filterFunction) :
                this.where(keyPaths).equals('');
    };
    Table.prototype.filter = function (filterFunction) {
        return this.toCollection().and(filterFunction);
    };
    Table.prototype.count = function (thenShortcut) {
        return this.toCollection().count(thenShortcut);
    };
    Table.prototype.offset = function (offset) {
        return this.toCollection().offset(offset);
    };
    Table.prototype.limit = function (numRows) {
        return this.toCollection().limit(numRows);
    };
    Table.prototype.each = function (callback) {
        return this.toCollection().each(callback);
    };
    Table.prototype.toArray = function (thenShortcut) {
        return this.toCollection().toArray(thenShortcut);
    };
    Table.prototype.toCollection = function () {
        return new this.db.Collection(new this.db.WhereClause(this));
    };
    Table.prototype.orderBy = function (index) {
        return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ?
            "[" + index.join('+') + "]" :
            index));
    };
    Table.prototype.reverse = function () {
        return this.toCollection().reverse();
    };
    Table.prototype.mapToClass = function (constructor) {
        this.schema.mappedClass = constructor;
        var readHook = function (obj) {
            if (!obj)
                return obj;
            var res = Object.create(constructor.prototype);
            for (var m in obj)
                if (hasOwn(obj, m))
                    try {
                        res[m] = obj[m];
                    }
                    catch (_) { }
            return res;
        };
        if (this.schema.readHook) {
            this.hook.reading.unsubscribe(this.schema.readHook);
        }
        this.schema.readHook = readHook;
        this.hook("reading", readHook);
        return constructor;
    };
    Table.prototype.defineClass = function () {
        function Class(content) {
            extend(this, content);
        }
        
        return this.mapToClass(Class);
    };
    Table.prototype.add = function (obj, key) {
        var _this = this;
        return this._trans('readwrite', function (trans) {
            return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [obj] });
        }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; })
            .then(function (lastResult) {
            if (!_this.core.schema.primaryKey.outbound) {
                try {
                    setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);
                }
                catch (_) { }
                
            }
            return lastResult;
        });
    };
    Table.prototype.update = function (keyOrObject, modifications) {
        if (typeof modifications !== 'object' || isArray(modifications))
            throw new exceptions.InvalidArgument("Modifications must be an object.");
        if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {
            keys(modifications).forEach(function (keyPath) {
                setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);
            });
            var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);
            if (key === undefined)
                return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key"));
            return this.where(":id").equals(key).modify(modifications);
        }
        else {
            return this.where(":id").equals(keyOrObject).modify(modifications);
        }
    };
    Table.prototype.put = function (obj, key) {
        var _this = this;
        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [obj], keys: key != null ? [key] : null }); })
            .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; })
            .then(function (lastResult) {
            if (!_this.core.schema.primaryKey.outbound) {
                try {
                    setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);
                }
                catch (_) { }
                
            }
            return lastResult;
        });
    };
    Table.prototype.delete = function (key) {
        var _this = this;
        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); })
            .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; });
    };
    Table.prototype.clear = function () {
        var _this = this;
        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); })
            .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; });
    };
    Table.prototype.bulkGet = function (keys$$1) {
        var _this = this;
        return this._trans('readonly', function (trans) {
            return _this.core.getMany({
                keys: keys$$1,
                trans: trans
            }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); });
        });
    };
    Table.prototype.bulkAdd = function (objects, keysOrOptions, options) {
        var _this = this;
        var keys$$1 = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;
        options = options || (keys$$1 ? undefined : keysOrOptions);
        var wantResults = options ? options.allKeys : undefined;
        return this._trans('readwrite', function (trans) {
            var outbound = _this.core.schema.primaryKey.outbound;
            if (!outbound && keys$$1)
                throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");
            if (keys$$1 && keys$$1.length !== objects.length)
                throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length");
            var numObjects = objects.length;
            return _this.core.mutate({ trans: trans, type: 'add', keys: keys$$1, values: objects, wantResults: wantResults })
                .then(function (_a) {
                var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures;
                var result = wantResults ? results : lastResult;
                if (numFailures === 0)
                    return result;
                throw new BulkError(_this.name + ".bulkAdd(): " + numFailures + " of " + numObjects + " operations failed", Object.keys(failures).map(function (pos) { return failures[pos]; }));
            });
        });
    };
    Table.prototype.bulkPut = function (objects, keysOrOptions, options) {
        var _this = this;
        var keys$$1 = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;
        options = options || (keys$$1 ? undefined : keysOrOptions);
        var wantResults = options ? options.allKeys : undefined;
        return this._trans('readwrite', function (trans) {
            var outbound = _this.core.schema.primaryKey.outbound;
            if (!outbound && keys$$1)
                throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");
            if (keys$$1 && keys$$1.length !== objects.length)
                throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length");
            var numObjects = objects.length;
            return _this.core.mutate({ trans: trans, type: 'put', keys: keys$$1, values: objects, wantResults: wantResults })
                .then(function (_a) {
                var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures;
                var result = wantResults ? results : lastResult;
                if (numFailures === 0)
                    return result;
                throw new BulkError(_this.name + ".bulkPut(): " + numFailures + " of " + numObjects + " operations failed", Object.keys(failures).map(function (pos) { return failures[pos]; }));
            });
        });
    };
    Table.prototype.bulkDelete = function (keys$$1) {
        var _this = this;
        var numKeys = keys$$1.length;
        return this._trans('readwrite', function (trans) {
            return _this.core.mutate({ trans: trans, type: 'delete', keys: keys$$1 });
        }).then(function (_a) {
            var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures;
            if (numFailures === 0)
                return lastResult;
            throw new BulkError(_this.name + ".bulkDelete(): " + numFailures + " of " + numKeys + " operations failed", failures);
        });
    };
    return Table;
}());

function Events(ctx) {
    var evs = {};
    var rv = function (eventName, subscriber) {
        if (subscriber) {
            var i = arguments.length, args = new Array(i - 1);
            while (--i)
                args[i - 1] = arguments[i];
            evs[eventName].subscribe.apply(null, args);
            return ctx;
        }
        else if (typeof (eventName) === 'string') {
            return evs[eventName];
        }
    };
    rv.addEventType = add;
    for (var i = 1, l = arguments.length; i < l; ++i) {
        add(arguments[i]);
    }
    return rv;
    function add(eventName, chainFunction, defaultFunction) {
        if (typeof eventName === 'object')
            return addConfiguredEvents(eventName);
        if (!chainFunction)
            chainFunction = reverseStoppableEventChain;
        if (!defaultFunction)
            defaultFunction = nop;
        var context = {
            subscribers: [],
            fire: defaultFunction,
            subscribe: function (cb) {
                if (context.subscribers.indexOf(cb) === -1) {
                    context.subscribers.push(cb);
                    context.fire = chainFunction(context.fire, cb);
                }
            },
            unsubscribe: function (cb) {
                context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });
                context.fire = context.subscribers.reduce(chainFunction, defaultFunction);
            }
        };
        evs[eventName] = rv[eventName] = context;
        return context;
    }
    function addConfiguredEvents(cfg) {
        keys(cfg).forEach(function (eventName) {
            var args = cfg[eventName];
            if (isArray(args)) {
                add(eventName, cfg[eventName][0], cfg[eventName][1]);
            }
            else if (args === 'asap') {
                var context = add(eventName, mirror, function fire() {
                    var i = arguments.length, args = new Array(i);
                    while (i--)
                        args[i] = arguments[i];
                    context.subscribers.forEach(function (fn) {
                        asap(function fireEvent() {
                            fn.apply(null, args);
                        });
                    });
                });
            }
            else
                throw new exceptions.InvalidArgument("Invalid event config");
        });
    }
}

function makeClassConstructor(prototype, constructor) {
    derive(constructor).from({ prototype: prototype });
    return constructor;
}

function createTableConstructor(db) {
    return makeClassConstructor(Table.prototype, function Table$$1(name, tableSchema, trans) {
        this.db = db;
        this._tx = trans;
        this.name = name;
        this.schema = tableSchema;
        this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {
            "creating": [hookCreatingChain, nop],
            "reading": [pureFunctionChain, mirror],
            "updating": [hookUpdatingChain, nop],
            "deleting": [hookDeletingChain, nop]
        });
    });
}

function isPlainKeyRange(ctx, ignoreLimitFilter) {
    return !(ctx.filter || ctx.algorithm || ctx.or) &&
        (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);
}
function addFilter(ctx, fn) {
    ctx.filter = combine(ctx.filter, fn);
}
function addReplayFilter(ctx, factory, isLimitFilter) {
    var curr = ctx.replayFilter;
    ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory;
    ctx.justLimit = isLimitFilter && !curr;
}
function addMatchFilter(ctx, fn) {
    ctx.isMatch = combine(ctx.isMatch, fn);
}
function getIndexOrStore(ctx, coreSchema) {
    if (ctx.isPrimKey)
        return coreSchema.primaryKey;
    var index = coreSchema.getIndexByKeyPath(ctx.index);
    if (!index)
        throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed");
    return index;
}
function openCursor(ctx, coreTable, trans) {
    var index = getIndexOrStore(ctx, coreTable.schema);
    return coreTable.openCursor({
        trans: trans,
        values: !ctx.keysOnly,
        reverse: ctx.dir === 'prev',
        unique: !!ctx.unique,
        query: {
            index: index,
            range: ctx.range
        }
    });
}
function iter(ctx, fn, coreTrans, coreTable) {
    var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;
    if (!ctx.or) {
        return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);
    }
    else {
        var set_1 = {};
        var union = function (item, cursor, advance) {
            if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) {
                var primaryKey = cursor.primaryKey;
                var key = '' + primaryKey;
                if (key === '[object ArrayBuffer]')
                    key = '' + new Uint8Array(primaryKey);
                if (!hasOwn(set_1, key)) {
                    set_1[key] = true;
                    fn(item, cursor, advance);
                }
            }
        };
        return Promise.all([
            ctx.or._iterate(union, coreTrans),
            iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)
        ]);
    }
}
function iterate(cursorPromise, filter, fn, valueMapper) {
    var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn;
    var wrappedFn = wrap(mappedFn);
    return cursorPromise.then(function (cursor) {
        if (cursor) {
            return cursor.start(function () {
                var c = function () { return cursor.continue(); };
                if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; }))
                    wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; });
                c();
            });
        }
    });
}

var Collection =               (function () {
    function Collection() {
    }
    Collection.prototype._read = function (fn, cb) {
        var ctx = this._ctx;
        return ctx.error ?
            ctx.table._trans(null, rejection.bind(null, ctx.error)) :
            ctx.table._trans('readonly', fn).then(cb);
    };
    Collection.prototype._write = function (fn) {
        var ctx = this._ctx;
        return ctx.error ?
            ctx.table._trans(null, rejection.bind(null, ctx.error)) :
            ctx.table._trans('readwrite', fn, "locked");
    };
    Collection.prototype._addAlgorithm = function (fn) {
        var ctx = this._ctx;
        ctx.algorithm = combine(ctx.algorithm, fn);
    };
    Collection.prototype._iterate = function (fn, coreTrans) {
        return iter(this._ctx, fn, coreTrans, this._ctx.table.core);
    };
    Collection.prototype.clone = function (props$$1) {
        var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);
        if (props$$1)
            extend(ctx, props$$1);
        rv._ctx = ctx;
        return rv;
    };
    Collection.prototype.raw = function () {
        this._ctx.valueMapper = null;
        return this;
    };
    Collection.prototype.each = function (fn) {
        var ctx = this._ctx;
        return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); });
    };
    Collection.prototype.count = function (cb) {
        var _this = this;
        return this._read(function (trans) {
            var ctx = _this._ctx;
            var coreTable = ctx.table.core;
            if (isPlainKeyRange(ctx, true)) {
                return coreTable.count({
                    trans: trans,
                    query: {
                        index: getIndexOrStore(ctx, coreTable.schema),
                        range: ctx.range
                    }
                }).then(function (count) { return Math.min(count, ctx.limit); });
            }
            else {
                var count = 0;
                return iter(ctx, function () { ++count; return false; }, trans, coreTable)
                    .then(function () { return count; });
            }
        }).then(cb);
    };
    Collection.prototype.sortBy = function (keyPath, cb) {
        var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1;
        function getval(obj, i) {
            if (i)
                return getval(obj[parts[i]], i - 1);
            return obj[lastPart];
        }
        var order = this._ctx.dir === "next" ? 1 : -1;
        function sorter(a, b) {
            var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex);
            return aVal < bVal ? -order : aVal > bVal ? order : 0;
        }
        return this.toArray(function (a) {
            return a.sort(sorter);
        }).then(cb);
    };
    Collection.prototype.toArray = function (cb) {
        var _this = this;
        return this._read(function (trans) {
            var ctx = _this._ctx;
            if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {
                var valueMapper_1 = ctx.valueMapper;
                var index = getIndexOrStore(ctx, ctx.table.core.schema);
                return ctx.table.core.query({
                    trans: trans,
                    limit: ctx.limit,
                    values: true,
                    query: {
                        index: index,
                        range: ctx.range
                    }
                }).then(function (_a) {
                    var result = _a.result;
                    return valueMapper_1 ? result.map(valueMapper_1) : result;
                });
            }
            else {
                var a_1 = [];
                return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; });
            }
        }, cb);
    };
    Collection.prototype.offset = function (offset) {
        var ctx = this._ctx;
        if (offset <= 0)
            return this;
        ctx.offset += offset;
        if (isPlainKeyRange(ctx)) {
            addReplayFilter(ctx, function () {
                var offsetLeft = offset;
                return function (cursor, advance) {
                    if (offsetLeft === 0)
                        return true;
                    if (offsetLeft === 1) {
                        --offsetLeft;
                        return false;
                    }
                    advance(function () {
                        cursor.advance(offsetLeft);
                        offsetLeft = 0;
                    });
                    return false;
                };
            });
        }
        else {
            addReplayFilter(ctx, function () {
                var offsetLeft = offset;
                return function () { return (--offsetLeft < 0); };
            });
        }
        return this;
    };
    Collection.prototype.limit = function (numRows) {
        this._ctx.limit = Math.min(this._ctx.limit, numRows);
        addReplayFilter(this._ctx, function () {
            var rowsLeft = numRows;
            return function (cursor, advance, resolve) {
                if (--rowsLeft <= 0)
                    advance(resolve);
                return rowsLeft >= 0;
            };
        }, true);
        return this;
    };
    Collection.prototype.until = function (filterFunction, bIncludeStopEntry) {
        addFilter(this._ctx, function (cursor, advance, resolve) {
            if (filterFunction(cursor.value)) {
                advance(resolve);
                return bIncludeStopEntry;
            }
            else {
                return true;
            }
        });
        return this;
    };
    Collection.prototype.first = function (cb) {
        return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);
    };
    Collection.prototype.last = function (cb) {
        return this.reverse().first(cb);
    };
    Collection.prototype.filter = function (filterFunction) {
        addFilter(this._ctx, function (cursor) {
            return filterFunction(cursor.value);
        });
        addMatchFilter(this._ctx, filterFunction);
        return this;
    };
    Collection.prototype.and = function (filter) {
        return this.filter(filter);
    };
    Collection.prototype.or = function (indexName) {
        return new this.db.WhereClause(this._ctx.table, indexName, this);
    };
    Collection.prototype.reverse = function () {
        this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev");
        if (this._ondirectionchange)
            this._ondirectionchange(this._ctx.dir);
        return this;
    };
    Collection.prototype.desc = function () {
        return this.reverse();
    };
    Collection.prototype.eachKey = function (cb) {
        var ctx = this._ctx;
        ctx.keysOnly = !ctx.isMatch;
        return this.each(function (val, cursor) { cb(cursor.key, cursor); });
    };
    Collection.prototype.eachUniqueKey = function (cb) {
        this._ctx.unique = "unique";
        return this.eachKey(cb);
    };
    Collection.prototype.eachPrimaryKey = function (cb) {
        var ctx = this._ctx;
        ctx.keysOnly = !ctx.isMatch;
        return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });
    };
    Collection.prototype.keys = function (cb) {
        var ctx = this._ctx;
        ctx.keysOnly = !ctx.isMatch;
        var a = [];
        return this.each(function (item, cursor) {
            a.push(cursor.key);
        }).then(function () {
            return a;
        }).then(cb);
    };
    Collection.prototype.primaryKeys = function (cb) {
        var ctx = this._ctx;
        if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {
            return this._read(function (trans) {
                var index = getIndexOrStore(ctx, ctx.table.core.schema);
                return ctx.table.core.query({
                    trans: trans,
                    values: false,
                    limit: ctx.limit,
                    query: {
                        index: index,
                        range: ctx.range
                    }
                });
            }).then(function (_a) {
                var result = _a.result;
                return result;
            }).then(cb);
        }
        ctx.keysOnly = !ctx.isMatch;
        var a = [];
        return this.each(function (item, cursor) {
            a.push(cursor.primaryKey);
        }).then(function () {
            return a;
        }).then(cb);
    };
    Collection.prototype.uniqueKeys = function (cb) {
        this._ctx.unique = "unique";
        return this.keys(cb);
    };
    Collection.prototype.firstKey = function (cb) {
        return this.limit(1).keys(function (a) { return a[0]; }).then(cb);
    };
    Collection.prototype.lastKey = function (cb) {
        return this.reverse().firstKey(cb);
    };
    Collection.prototype.distinct = function () {
        var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index];
        if (!idx || !idx.multi)
            return this;
        var set = {};
        addFilter(this._ctx, function (cursor) {
            var strKey = cursor.primaryKey.toString();
            var found = hasOwn(set, strKey);
            set[strKey] = true;
            return !found;
        });
        return this;
    };
    Collection.prototype.modify = function (changes) {
        var _this = this;
        var ctx = this._ctx;
        return this._write(function (trans) {
            var modifyer;
            if (typeof changes === 'function') {
                modifyer = changes;
            }
            else {
                var keyPaths = keys(changes);
                var numKeys = keyPaths.length;
                modifyer = function (item) {
                    var anythingModified = false;
                    for (var i = 0; i < numKeys; ++i) {
                        var keyPath = keyPaths[i], val = changes[keyPath];
                        if (getByKeyPath(item, keyPath) !== val) {
                            setByKeyPath(item, keyPath, val);
                            anythingModified = true;
                        }
                    }
                    return anythingModified;
                };
            }
            var coreTable = ctx.table.core;
            var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey;
            var limit = 'testmode' in Dexie ? 1 : 2000;
            var cmp = _this.db.core.cmp;
            var totalFailures = [];
            var successCount = 0;
            var failedKeys = [];
            var applyMutateResult = function (expectedCount, res) {
                var failures = res.failures, numFailures = res.numFailures;
                successCount += expectedCount - numFailures;
                for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) {
                    var pos = _a[_i];
                    totalFailures.push(failures[pos]);
                }
            };
            return _this.clone().primaryKeys().then(function (keys$$1) {
                var nextChunk = function (offset) {
                    var count = Math.min(limit, keys$$1.length - offset);
                    return coreTable.getMany({ trans: trans, keys: keys$$1.slice(offset, offset + count) }).then(function (values) {
                        var addValues = [];
                        var putValues = [];
                        var putKeys = outbound ? [] : null;
                        var deleteKeys = [];
                        for (var i = 0; i < count; ++i) {
                            var origValue = values[i];
                            var ctx_1 = {
                                value: deepClone(origValue),
                                primKey: keys$$1[offset + i]
                            };
                            if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) {
                                if (ctx_1.value == null) {
                                    deleteKeys.push(keys$$1[offset + i]);
                                }
                                else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) {
                                    deleteKeys.push(keys$$1[offset + i]);
                                    addValues.push(ctx_1.value);
                                }
                                else {
                                    putValues.push(ctx_1.value);
                                    if (outbound)
                                        putKeys.push(keys$$1[offset + i]);
                                }
                            }
                        }
                        return Promise.resolve(addValues.length > 0 &&
                            coreTable.mutate({ trans: trans, type: 'add', values: addValues })
                                .then(function (res) {
                                for (var pos in res.failures) {
                                    deleteKeys.splice(parseInt(pos), 1);
                                }
                                applyMutateResult(addValues.length, res);
                            })).then(function (res) { return putValues.length > 0 &&
                            coreTable.mutate({ trans: trans, type: 'put', keys: putKeys, values: putValues })
                                .then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return deleteKeys.length > 0 &&
                            coreTable.mutate({ trans: trans, type: 'delete', keys: deleteKeys })
                                .then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () {
                            return keys$$1.length > offset + count && nextChunk(offset + limit);
                        });
                    });
                };
                return nextChunk(0).then(function () {
                    if (totalFailures.length > 0)
                        throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys);
                    return keys$$1.length;
                });
            });
        });
    };
    Collection.prototype.delete = function () {
        var ctx = this._ctx, range = ctx.range;
        if (isPlainKeyRange(ctx) &&
            ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3          ))
         {
            return this._write(function (trans) {
                var primaryKey = ctx.table.core.schema.primaryKey;
                var coreRange = range;
                return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) {
                    return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange })
                        .then(function (_a) {
                        var failures = _a.failures, lastResult = _a.lastResult, results = _a.results, numFailures = _a.numFailures;
                        if (numFailures)
                            throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures);
                        return count - numFailures;
                    });
                });
            });
        }
        return this.modify(function (value, ctx) { return ctx.value = null; });
    };
    return Collection;
}());

function createCollectionConstructor(db) {
    return makeClassConstructor(Collection.prototype, function Collection$$1(whereClause, keyRangeGenerator) {
        this.db = db;
        var keyRange = AnyRange, error = null;
        if (keyRangeGenerator)
            try {
                keyRange = keyRangeGenerator();
            }
            catch (ex) {
                error = ex;
            }
        var whereCtx = whereClause._ctx;
        var table = whereCtx.table;
        var readingHook = table.hook.reading.fire;
        this._ctx = {
            table: table,
            index: whereCtx.index,
            isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),
            range: keyRange,
            keysOnly: false,
            dir: "next",
            unique: "",
            algorithm: null,
            filter: null,
            replayFilter: null,
            justLimit: true,
            isMatch: null,
            offset: 0,
            limit: Infinity,
            error: error,
            or: whereCtx.or,
            valueMapper: readingHook !== mirror ? readingHook : null
        };
    });
}

function simpleCompare(a, b) {
    return a < b ? -1 : a === b ? 0 : 1;
}
function simpleCompareReverse(a, b) {
    return a > b ? -1 : a === b ? 0 : 1;
}

function fail(collectionOrWhereClause, err, T) {
    var collection = collectionOrWhereClause instanceof WhereClause ?
        new collectionOrWhereClause.Collection(collectionOrWhereClause) :
        collectionOrWhereClause;
    collection._ctx.error = T ? new T(err) : new TypeError(err);
    return collection;
}
function emptyCollection(whereClause) {
    return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0);
}
function upperFactory(dir) {
    return dir === "next" ?
        function (s) { return s.toUpperCase(); } :
        function (s) { return s.toLowerCase(); };
}
function lowerFactory(dir) {
    return dir === "next" ?
        function (s) { return s.toLowerCase(); } :
        function (s) { return s.toUpperCase(); };
}
function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {
    var length = Math.min(key.length, lowerNeedle.length);
    var llp = -1;
    for (var i = 0; i < length; ++i) {
        var lwrKeyChar = lowerKey[i];
        if (lwrKeyChar !== lowerNeedle[i]) {
            if (cmp(key[i], upperNeedle[i]) < 0)
                return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);
            if (cmp(key[i], lowerNeedle[i]) < 0)
                return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);
            if (llp >= 0)
                return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);
            return null;
        }
        if (cmp(key[i], lwrKeyChar) < 0)
            llp = i;
    }
    if (length < lowerNeedle.length && dir === "next")
        return key + upperNeedle.substr(key.length);
    if (length < key.length && dir === "prev")
        return key.substr(0, upperNeedle.length);
    return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));
}
function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) {
    var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length;
    if (!needles.every(function (s) { return typeof s === 'string'; })) {
        return fail(whereClause, STRING_EXPECTED);
    }
    function initDirection(dir) {
        upper = upperFactory(dir);
        lower = lowerFactory(dir);
        compare = (dir === "next" ? simpleCompare : simpleCompareReverse);
        var needleBounds = needles.map(function (needle) {
            return { lower: lower(needle), upper: upper(needle) };
        }).sort(function (a, b) {
            return compare(a.lower, b.lower);
        });
        upperNeedles = needleBounds.map(function (nb) { return nb.upper; });
        lowerNeedles = needleBounds.map(function (nb) { return nb.lower; });
        direction = dir;
        nextKeySuffix = (dir === "next" ? "" : suffix);
    }
    initDirection("next");
    var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); });
    c._ondirectionchange = function (direction) {
        initDirection(direction);
    };
    var firstPossibleNeedle = 0;
    c._addAlgorithm(function (cursor, advance, resolve) {
        var key = cursor.key;
        if (typeof key !== 'string')
            return false;
        var lowerKey = lower(key);
        if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {
            return true;
        }
        else {
            var lowestPossibleCasing = null;
            for (var i = firstPossibleNeedle; i < needlesLen; ++i) {
                var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction);
                if (casing === null && lowestPossibleCasing === null)
                    firstPossibleNeedle = i + 1;
                else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) {
                    lowestPossibleCasing = casing;
                }
            }
            if (lowestPossibleCasing !== null) {
                advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });
            }
            else {
                advance(resolve);
            }
            return false;
        }
    });
    return c;
}
function createRange(lower, upper, lowerOpen, upperOpen) {
    return {
        type: 2            ,
        lower: lower,
        upper: upper,
        lowerOpen: lowerOpen,
        upperOpen: upperOpen
    };
}
function rangeEqual(value) {
    return {
        type: 1            ,
        lower: value,
        upper: value
    };
}

var WhereClause =               (function () {
    function WhereClause() {
    }
    Object.defineProperty(WhereClause.prototype, "Collection", {
        get: function () {
            return this._ctx.table.db.Collection;
        },
        enumerable: true,
        configurable: true
    });
    WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) {
        includeLower = includeLower !== false;
        includeUpper = includeUpper === true;
        try {
            if ((this._cmp(lower, upper) > 0) ||
                (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))
                return emptyCollection(this);
            return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); });
        }
        catch (e) {
            return fail(this, INVALID_KEY_ARGUMENT);
        }
    };
    WhereClause.prototype.equals = function (value) {
        return new this.Collection(this, function () { return rangeEqual(value); });
    };
    WhereClause.prototype.above = function (value) {
        if (value == null)
            return fail(this, INVALID_KEY_ARGUMENT);
        return new this.Collection(this, function () { return createRange(value, undefined, true); });
    };
    WhereClause.prototype.aboveOrEqual = function (value) {
        if (value == null)
            return fail(this, INVALID_KEY_ARGUMENT);
        return new this.Collection(this, function () { return createRange(value, undefined, false); });
    };
    WhereClause.prototype.below = function (value) {
        if (value == null)
            return fail(this, INVALID_KEY_ARGUMENT);
        return new this.Collection(this, function () { return createRange(undefined, value, false, true); });
    };
    WhereClause.prototype.belowOrEqual = function (value) {
        if (value == null)
            return fail(this, INVALID_KEY_ARGUMENT);
        return new this.Collection(this, function () { return createRange(undefined, value); });
    };
    WhereClause.prototype.startsWith = function (str) {
        if (typeof str !== 'string')
            return fail(this, STRING_EXPECTED);
        return this.between(str, str + maxString, true, true);
    };
    WhereClause.prototype.startsWithIgnoreCase = function (str) {
        if (str === "")
            return this.startsWith(str);
        return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString);
    };
    WhereClause.prototype.equalsIgnoreCase = function (str) {
        return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], "");
    };
    WhereClause.prototype.anyOfIgnoreCase = function () {
        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
        if (set.length === 0)
            return emptyCollection(this);
        return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, "");
    };
    WhereClause.prototype.startsWithAnyOfIgnoreCase = function () {
        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
        if (set.length === 0)
            return emptyCollection(this);
        return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString);
    };
    WhereClause.prototype.anyOf = function () {
        var _this = this;
        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
        var compare = this._cmp;
        try {
            set.sort(compare);
        }
        catch (e) {
            return fail(this, INVALID_KEY_ARGUMENT);
        }
        if (set.length === 0)
            return emptyCollection(this);
        var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); });
        c._ondirectionchange = function (direction) {
            compare = (direction === "next" ?
                _this._ascending :
                _this._descending);
            set.sort(compare);
        };
        var i = 0;
        c._addAlgorithm(function (cursor, advance, resolve) {
            var key = cursor.key;
            while (compare(key, set[i]) > 0) {
                ++i;
                if (i === set.length) {
                    advance(resolve);
                    return false;
                }
            }
            if (compare(key, set[i]) === 0) {
                return true;
            }
            else {
                advance(function () { cursor.continue(set[i]); });
                return false;
            }
        });
        return c;
    };
    WhereClause.prototype.notEqual = function (value) {
        return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });
    };
    WhereClause.prototype.noneOf = function () {
        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
        if (set.length === 0)
            return new this.Collection(this);
        try {
            set.sort(this._ascending);
        }
        catch (e) {
            return fail(this, INVALID_KEY_ARGUMENT);
        }
        var ranges = set.reduce(function (res, val) { return res ?
            res.concat([[res[res.length - 1][1], val]]) :
            [[minKey, val]]; }, null);
        ranges.push([set[set.length - 1], this.db._maxKey]);
        return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });
    };
    WhereClause.prototype.inAnyRange = function (ranges, options) {
        var _this = this;
        var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max;
        if (ranges.length === 0)
            return emptyCollection(this);
        if (!ranges.every(function (range) {
            return range[0] !== undefined &&
                range[1] !== undefined &&
                ascending(range[0], range[1]) <= 0;
        })) {
            return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument);
        }
        var includeLowers = !options || options.includeLowers !== false;
        var includeUppers = options && options.includeUppers === true;
        function addRange(ranges, newRange) {
            var i = 0, l = ranges.length;
            for (; i < l; ++i) {
                var range = ranges[i];
                if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {
                    range[0] = min(range[0], newRange[0]);
                    range[1] = max(range[1], newRange[1]);
                    break;
                }
            }
            if (i === l)
                ranges.push(newRange);
            return ranges;
        }
        var sortDirection = ascending;
        function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }
        var set;
        try {
            set = ranges.reduce(addRange, []);
            set.sort(rangeSorter);
        }
        catch (ex) {
            return fail(this, INVALID_KEY_ARGUMENT);
        }
        var rangePos = 0;
        var keyIsBeyondCurrentEntry = includeUppers ?
            function (key) { return ascending(key, set[rangePos][1]) > 0; } :
            function (key) { return ascending(key, set[rangePos][1]) >= 0; };
        var keyIsBeforeCurrentEntry = includeLowers ?
            function (key) { return descending(key, set[rangePos][0]) > 0; } :
            function (key) { return descending(key, set[rangePos][0]) >= 0; };
        function keyWithinCurrentRange(key) {
            return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);
        }
        var checkKey = keyIsBeyondCurrentEntry;
        var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); });
        c._ondirectionchange = function (direction) {
            if (direction === "next") {
                checkKey = keyIsBeyondCurrentEntry;
                sortDirection = ascending;
            }
            else {
                checkKey = keyIsBeforeCurrentEntry;
                sortDirection = descending;
            }
            set.sort(rangeSorter);
        };
        c._addAlgorithm(function (cursor, advance, resolve) {
            var key = cursor.key;
            while (checkKey(key)) {
                ++rangePos;
                if (rangePos === set.length) {
                    advance(resolve);
                    return false;
                }
            }
            if (keyWithinCurrentRange(key)) {
                return true;
            }
            else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) {
                return false;
            }
            else {
                advance(function () {
                    if (sortDirection === ascending)
                        cursor.continue(set[rangePos][0]);
                    else
                        cursor.continue(set[rangePos][1]);
                });
                return false;
            }
        });
        return c;
    };
    WhereClause.prototype.startsWithAnyOf = function () {
        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);
        if (!set.every(function (s) { return typeof s === 'string'; })) {
            return fail(this, "startsWithAnyOf() only works with strings");
        }
        if (set.length === 0)
            return emptyCollection(this);
        return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; }));
    };
    return WhereClause;
}());

function createWhereClauseConstructor(db) {
    return makeClassConstructor(WhereClause.prototype, function WhereClause$$1(table, index, orCollection) {
        this.db = db;
        this._ctx = {
            table: table,
            index: index === ":id" ? null : index,
            or: orCollection
        };
        var indexedDB = db._deps.indexedDB;
        if (!indexedDB)
            throw new exceptions.MissingAPI("indexedDB API missing");
        this._cmp = this._ascending = indexedDB.cmp.bind(indexedDB);
        this._descending = function (a, b) { return indexedDB.cmp(b, a); };
        this._max = function (a, b) { return indexedDB.cmp(a, b) > 0 ? a : b; };
        this._min = function (a, b) { return indexedDB.cmp(a, b) < 0 ? a : b; };
        this._IDBKeyRange = db._deps.IDBKeyRange;
    });
}

function safariMultiStoreFix(storeNames) {
    return storeNames.length === 1 ? storeNames[0] : storeNames;
}

function getMaxKey(IdbKeyRange) {
    try {
        IdbKeyRange.only([[]]);
        return [[]];
    }
    catch (e) {
        return maxString;
    }
}

function eventRejectHandler(reject) {
    return wrap(function (event) {
        preventDefault(event);
        reject(event.target.error);
        return false;
    });
}



function preventDefault(event) {
    if (event.stopPropagation)
        event.stopPropagation();
    if (event.preventDefault)
        event.preventDefault();
}

var Transaction =               (function () {
    function Transaction() {
    }
    Transaction.prototype._lock = function () {
        assert(!PSD.global);
        ++this._reculock;
        if (this._reculock === 1 && !PSD.global)
            PSD.lockOwnerFor = this;
        return this;
    };
    Transaction.prototype._unlock = function () {
        assert(!PSD.global);
        if (--this._reculock === 0) {
            if (!PSD.global)
                PSD.lockOwnerFor = null;
            while (this._blockedFuncs.length > 0 && !this._locked()) {
                var fnAndPSD = this._blockedFuncs.shift();
                try {
                    usePSD(fnAndPSD[1], fnAndPSD[0]);
                }
                catch (e) { }
            }
        }
        return this;
    };
    Transaction.prototype._locked = function () {
        return this._reculock && PSD.lockOwnerFor !== this;
    };
    Transaction.prototype.create = function (idbtrans) {
        var _this = this;
        if (!this.mode)
            return this;
        var idbdb = this.db.idbdb;
        var dbOpenError = this.db._state.dbOpenError;
        assert(!this.idbtrans);
        if (!idbtrans && !idbdb) {
            switch (dbOpenError && dbOpenError.name) {
                case "DatabaseClosedError":
                    throw new exceptions.DatabaseClosed(dbOpenError);
                case "MissingAPIError":
                    throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);
                default:
                    throw new exceptions.OpenFailed(dbOpenError);
            }
        }
        if (!this.active)
            throw new exceptions.TransactionInactive();
        assert(this._completion._state === null);
        idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode);
        idbtrans.onerror = wrap(function (ev) {
            preventDefault(ev);
            _this._reject(idbtrans.error);
        });
        idbtrans.onabort = wrap(function (ev) {
            preventDefault(ev);
            _this.active && _this._reject(new exceptions.Abort(idbtrans.error));
            _this.active = false;
            _this.on("abort").fire(ev);
        });
        idbtrans.oncomplete = wrap(function () {
            _this.active = false;
            _this._resolve();
        });
        return this;
    };
    Transaction.prototype._promise = function (mode, fn, bWriteLock) {
        var _this = this;
        if (mode === 'readwrite' && this.mode !== 'readwrite')
            return rejection(new exceptions.ReadOnly("Transaction is readonly"));
        if (!this.active)
            return rejection(new exceptions.TransactionInactive());
        if (this._locked()) {
            return new DexiePromise(function (resolve, reject) {
                _this._blockedFuncs.push([function () {
                        _this._promise(mode, fn, bWriteLock).then(resolve, reject);
                    }, PSD]);
            });
        }
        else if (bWriteLock) {
            return newScope(function () {
                var p = new DexiePromise(function (resolve, reject) {
                    _this._lock();
                    var rv = fn(resolve, reject, _this);
                    if (rv && rv.then)
                        rv.then(resolve, reject);
                });
                p.finally(function () { return _this._unlock(); });
                p._lib = true;
                return p;
            });
        }
        else {
            var p = new DexiePromise(function (resolve, reject) {
                var rv = fn(resolve, reject, _this);
                if (rv && rv.then)
                    rv.then(resolve, reject);
            });
            p._lib = true;
            return p;
        }
    };
    Transaction.prototype._root = function () {
        return this.parent ? this.parent._root() : this;
    };
    Transaction.prototype.waitFor = function (promiseLike) {
        var root = this._root();
        var promise = DexiePromise.resolve(promiseLike);
        if (root._waitingFor) {
            root._waitingFor = root._waitingFor.then(function () { return promise; });
        }
        else {
            root._waitingFor = promise;
            root._waitingQueue = [];
            var store = root.idbtrans.objectStore(root.storeNames[0]);
            (function spin() {
                ++root._spinCount;
                while (root._waitingQueue.length)
                    (root._waitingQueue.shift())();
                if (root._waitingFor)
                    store.get(-Infinity).onsuccess = spin;
            }());
        }
        var currentWaitPromise = root._waitingFor;
        return new DexiePromise(function (resolve, reject) {
            promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () {
                if (root._waitingFor === currentWaitPromise) {
                    root._waitingFor = null;
                }
            });
        });
    };
    Transaction.prototype.abort = function () {
        this.active && this._reject(new exceptions.Abort());
        this.active = false;
    };
    Transaction.prototype.table = function (tableName) {
        var memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));
        if (hasOwn(memoizedTables, tableName))
            return memoizedTables[tableName];
        var tableSchema = this.schema[tableName];
        if (!tableSchema) {
            throw new exceptions.NotFound("Table " + tableName + " not part of transaction");
        }
        var transactionBoundTable = new this.db.Table(tableName, tableSchema, this);
        transactionBoundTable.core = this.db.core.table(tableName);
        memoizedTables[tableName] = transactionBoundTable;
        return transactionBoundTable;
    };
    return Transaction;
}());

function createTransactionConstructor(db) {
    return makeClassConstructor(Transaction.prototype, function Transaction$$1(mode, storeNames, dbschema, parent) {
        var _this = this;
        this.db = db;
        this.mode = mode;
        this.storeNames = storeNames;
        this.schema = dbschema;
        this.idbtrans = null;
        this.on = Events(this, "complete", "error", "abort");
        this.parent = parent || null;
        this.active = true;
        this._reculock = 0;
        this._blockedFuncs = [];
        this._resolve = null;
        this._reject = null;
        this._waitingFor = null;
        this._waitingQueue = null;
        this._spinCount = 0;
        this._completion = new DexiePromise(function (resolve, reject) {
            _this._resolve = resolve;
            _this._reject = reject;
        });
        this._completion.then(function () {
            _this.active = false;
            _this.on.complete.fire();
        }, function (e) {
            var wasActive = _this.active;
            _this.active = false;
            _this.on.error.fire(e);
            _this.parent ?
                _this.parent._reject(e) :
                wasActive && _this.idbtrans && _this.idbtrans.abort();
            return rejection(e);
        });
    });
}

function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) {
    return {
        name: name,
        keyPath: keyPath,
        unique: unique,
        multi: multi,
        auto: auto,
        compound: compound,
        src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath)
    };
}
function nameFromKeyPath(keyPath) {
    return typeof keyPath === 'string' ?
        keyPath :
        keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : "";
}

function createTableSchema(name, primKey, indexes) {
    return {
        name: name,
        primKey: primKey,
        indexes: indexes,
        mappedClass: null,
        idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; })
    };
}

function getKeyExtractor(keyPath) {
    if (keyPath == null) {
        return function () { return undefined; };
    }
    else if (typeof keyPath === 'string') {
        return getSinglePathKeyExtractor(keyPath);
    }
    else {
        return function (obj) { return getByKeyPath(obj, keyPath); };
    }
}
function getSinglePathKeyExtractor(keyPath) {
    var split = keyPath.split('.');
    if (split.length === 1) {
        return function (obj) { return obj[keyPath]; };
    }
    else {
        return function (obj) { return getByKeyPath(obj, keyPath); };
    }
}

function getEffectiveKeys(primaryKey, req) {
    if (req.type === 'delete')
        return req.keys;
    return req.keys || req.values.map(primaryKey.extractKey);
}
function getExistingValues(table, req, effectiveKeys) {
    return req.type === 'add' ? Promise.resolve(new Array(req.values.length)) :
        table.getMany({ trans: req.trans, keys: effectiveKeys });
}

function arrayify(arrayLike) {
    return [].slice.call(arrayLike);
}

var _id_counter = 0;
function getKeyPathAlias(keyPath) {
    return keyPath == null ?
        ":id" :
        typeof keyPath === 'string' ?
            keyPath :
            "[" + keyPath.join('+') + "]";
}
function createDBCore(db, indexedDB, IdbKeyRange, tmpTrans) {
    var cmp = indexedDB.cmp.bind(indexedDB);
    function extractSchema(db, trans) {
        var tables = arrayify(db.objectStoreNames);
        return {
            schema: {
                name: db.name,
                tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) {
                    var keyPath = store.keyPath, autoIncrement = store.autoIncrement;
                    var compound = isArray(keyPath);
                    var outbound = keyPath == null;
                    var indexByKeyPath = {};
                    var result = {
                        name: store.name,
                        primaryKey: {
                            name: null,
                            isPrimaryKey: true,
                            outbound: outbound,
                            compound: compound,
                            keyPath: keyPath,
                            autoIncrement: autoIncrement,
                            unique: true,
                            extractKey: getKeyExtractor(keyPath)
                        },
                        indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); })
                            .map(function (index) {
                            var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath;
                            var compound = isArray(keyPath);
                            var result = {
                                name: name,
                                compound: compound,
                                keyPath: keyPath,
                                unique: unique,
                                multiEntry: multiEntry,
                                extractKey: getKeyExtractor(keyPath)
                            };
                            indexByKeyPath[getKeyPathAlias(keyPath)] = result;
                            return result;
                        }),
                        getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; }
                    };
                    indexByKeyPath[":id"] = result.primaryKey;
                    if (keyPath != null) {
                        indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;
                    }
                    return result;
                })
            },
            hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&
                !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&
                    !/(Chrome\/|Edge\/)/.test(navigator.userAgent) &&
                    [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604)
        };
    }
    function makeIDBKeyRange(range) {
        if (range.type === 3          )
            return null;
        if (range.type === 4            )
            throw new Error("Cannot convert never type to IDBKeyRange");
        var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen;
        var idbRange = lower === undefined ?
            upper === undefined ?
                null :
                IdbKeyRange.upperBound(upper, !!upperOpen) :
            upper === undefined ?
                IdbKeyRange.lowerBound(lower, !!lowerOpen) :
                IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);
        return idbRange;
    }
    function createDbCoreTable(tableSchema) {
        var tableName = tableSchema.name;
        function mutate(_a) {
            var trans = _a.trans, type = _a.type, keys$$1 = _a.keys, values = _a.values, range = _a.range, wantResults = _a.wantResults;
            return new Promise(function (resolve, reject) {
                resolve = wrap(resolve);
                var store = trans.objectStore(tableName);
                var outbound = store.keyPath == null;
                var isAddOrPut = type === "put" || type === "add";
                if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')
                    throw new Error("Invalid operation type: " + type);
                var length = (keys$$1 || values || { length: 1 }).length;
                if (keys$$1 && values && keys$$1.length !== values.length) {
                    throw new Error("Given keys array must have same length as given values array.");
                }
                if (length === 0)
                    return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined });
                var results = wantResults && __spreadArrays((keys$$1 ?
                    keys$$1 :
                    getEffectiveKeys(tableSchema.primaryKey, { type: type, keys: keys$$1, values: values })));
                var req;
                var failures = [];
                var numFailures = 0;
                var errorHandler = function (event) {
                    ++numFailures;
                    preventDefault(event);
                    if (results)
                        results[event.target._reqno] = undefined;
                    failures[event.target._reqno] = event.target.error;
                };
                var setResult = function (_a) {
                    var target = _a.target;
                    results[target._reqno] = target.result;
                };
                if (type === 'deleteRange') {
                    if (range.type === 4            )
                        return resolve({ numFailures: numFailures, failures: failures, results: results, lastResult: undefined });
                    if (range.type === 3          )
                        req = store.clear();
                    else
                        req = store.delete(makeIDBKeyRange(range));
                }
                else {
                    var _a = isAddOrPut ?
                        outbound ?
                            [values, keys$$1] :
                            [values, null] :
                        [keys$$1, null], args1 = _a[0], args2 = _a[1];
                    if (isAddOrPut) {
                        for (var i = 0; i < length; ++i) {
                            req = (args2 && args2[i] !== undefined ?
                                store[type](args1[i], args2[i]) :
                                store[type](args1[i]));
                            req._reqno = i;
                            if (results && results[i] === undefined) {
                                req.onsuccess = setResult;
                            }
                            req.onerror = errorHandler;
                        }
                    }
                    else {
                        for (var i = 0; i < length; ++i) {
                            req = store[type](args1[i]);
                            req._reqno = i;
                            req.onerror = errorHandler;
                        }
                    }
                }
                var done = function (event) {
                    var lastResult = event.target.result;
                    if (results)
                        results[length - 1] = lastResult;
                    resolve({
                        numFailures: numFailures,
                        failures: failures,
                        results: results,
                        lastResult: lastResult
                    });
                };
                req.onerror = function (event) {
                    errorHandler(event);
                    done(event);
                };
                req.onsuccess = done;
            });
        }
        function openCursor(_a) {
            var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique;
            return new Promise(function (resolve, reject) {
                resolve = wrap(resolve);
                var index = query.index, range = query.range;
                var store = trans.objectStore(tableName);
                var source = index.isPrimaryKey ?
                    store :
                    store.index(index.name);
                var direction = reverse ?
                    unique ?
                        "prevunique" :
                        "prev" :
                    unique ?
                        "nextunique" :
                        "next";
                var req = values || !('openKeyCursor' in source) ?
                    source.openCursor(makeIDBKeyRange(range), direction) :
                    source.openKeyCursor(makeIDBKeyRange(range), direction);
                req.onerror = eventRejectHandler(reject);
                req.onsuccess = wrap(function (ev) {
                    var cursor = req.result;
                    if (!cursor) {
                        resolve(null);
                        return;
                    }
                    cursor.___id = ++_id_counter;
                    cursor.done = false;
                    var _cursorContinue = cursor.continue.bind(cursor);
                    var _cursorContinuePrimaryKey = cursor.continuePrimaryKey;
                    if (_cursorContinuePrimaryKey)
                        _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);
                    var _cursorAdvance = cursor.advance.bind(cursor);
                    var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); };
                    var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); };
                    cursor.trans = trans;
                    cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;
                    cursor.fail = wrap(reject);
                    cursor.next = function () {
                        var _this = this;
                        var gotOne = 1;
                        return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; });
                    };
                    cursor.start = function (callback) {
                        var iterationPromise = new Promise(function (resolveIteration, rejectIteration) {
                            resolveIteration = wrap(resolveIteration);
                            req.onerror = eventRejectHandler(rejectIteration);
                            cursor.fail = rejectIteration;
                            cursor.stop = function (value) {
                                cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;
                                resolveIteration(value);
                            };
                        });
                        var guardedCallback = function () {
                            if (req.result) {
                                try {
                                    callback();
                                }
                                catch (err) {
                                    cursor.fail(err);
                                }
                            }
                            else {
                                cursor.done = true;
                                cursor.start = function () { throw new Error("Cursor behind last entry"); };
                                cursor.stop();
                            }
                        };
                        req.onsuccess = wrap(function (ev) {
                            req.onsuccess = guardedCallback;
                            guardedCallback();
                        });
                        cursor.continue = _cursorContinue;
                        cursor.continuePrimaryKey = _cursorContinuePrimaryKey;
                        cursor.advance = _cursorAdvance;
                        guardedCallback();
                        return iterationPromise;
                    };
                    resolve(cursor);
                }, reject);
            });
        }
        function query(hasGetAll) {
            return function (request) {
                return new Promise(function (resolve, reject) {
                    resolve = wrap(resolve);
                    var trans = request.trans, values = request.values, limit = request.limit, query = request.query;
                    var nonInfinitLimit = limit === Infinity ? undefined : limit;
                    var index = query.index, range = query.range;
                    var store = trans.objectStore(tableName);
                    var source = index.isPrimaryKey ? store : store.index(index.name);
                    var idbKeyRange = makeIDBKeyRange(range);
                    if (limit === 0)
                        return resolve({ result: [] });
                    if (hasGetAll) {
                        var req = values ?
                            source.getAll(idbKeyRange, nonInfinitLimit) :
                            source.getAllKeys(idbKeyRange, nonInfinitLimit);
                        req.onsuccess = function (event) { return resolve({ result: event.target.result }); };
                        req.onerror = eventRejectHandler(reject);
                    }
                    else {
                        var count_1 = 0;
                        var req_1 = values || !('openKeyCursor' in source) ?
                            source.openCursor(idbKeyRange) :
                            source.openKeyCursor(idbKeyRange);
                        var result_1 = [];
                        req_1.onsuccess = function (event) {
                            var cursor = req_1.result;
                            if (!cursor)
                                return resolve({ result: result_1 });
                            result_1.push(values ? cursor.value : cursor.primaryKey);
                            if (++count_1 === limit)
                                return resolve({ result: result_1 });
                            cursor.continue();
                        };
                        req_1.onerror = eventRejectHandler(reject);
                    }
                });
            };
        }
        return {
            name: tableName,
            schema: tableSchema,
            mutate: mutate,
            getMany: function (_a) {
                var trans = _a.trans, keys$$1 = _a.keys;
                return new Promise(function (resolve, reject) {
                    resolve = wrap(resolve);
                    var store = trans.objectStore(tableName);
                    var length = keys$$1.length;
                    var result = new Array(length);
                    var keyCount = 0;
                    var callbackCount = 0;
                    var valueCount = 0;
                    var req;
                    var successHandler = function (event) {
                        var req = event.target;
                        if ((result[req._pos] = req.result) != null)
                            ++valueCount;
                        if (++callbackCount === keyCount)
                            resolve(result);
                    };
                    var errorHandler = eventRejectHandler(reject);
                    for (var i = 0; i < length; ++i) {
                        var key = keys$$1[i];
                        if (key != null) {
                            req = store.get(keys$$1[i]);
                            req._pos = i;
                            req.onsuccess = successHandler;
                            req.onerror = errorHandler;
                            ++keyCount;
                        }
                    }
                    if (keyCount === 0)
                        resolve(result);
                });
            },
            get: function (_a) {
                var trans = _a.trans, key = _a.key;
                return new Promise(function (resolve, reject) {
                    resolve = wrap(resolve);
                    var store = trans.objectStore(tableName);
                    var req = store.get(key);
                    req.onsuccess = function (event) { return resolve(event.target.result); };
                    req.onerror = eventRejectHandler(reject);
                });
            },
            query: query(hasGetAll),
            openCursor: openCursor,
            count: function (_a) {
                var query = _a.query, trans = _a.trans;
                var index = query.index, range = query.range;
                return new Promise(function (resolve, reject) {
                    var store = trans.objectStore(tableName);
                    var source = index.isPrimaryKey ? store : store.index(index.name);
                    var idbKeyRange = makeIDBKeyRange(range);
                    var req = idbKeyRange ? source.count(idbKeyRange) : source.count();
                    req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); });
                    req.onerror = eventRejectHandler(reject);
                });
            }
        };
    }
    var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll;
    var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); });
    var tableMap = {};
    tables.forEach(function (table) { return tableMap[table.name] = table; });
    return {
        stack: "dbcore",
        transaction: db.transaction.bind(db),
        table: function (name) {
            var result = tableMap[name];
            if (!result)
                throw new Error("Table '" + name + "' not found");
            return tableMap[name];
        },
        cmp: cmp,
        MIN_KEY: -Infinity,
        MAX_KEY: getMaxKey(IdbKeyRange),
        schema: schema
    };
}

function createMiddlewareStack(stackImpl, middlewares) {
    return middlewares.reduce(function (down, _a) {
        var create = _a.create;
        return (__assign(__assign({}, down), create(down)));
    }, stackImpl);
}
function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) {
    var IDBKeyRange = _a.IDBKeyRange, indexedDB = _a.indexedDB;
    var dbcore = createMiddlewareStack(createDBCore(idbdb, indexedDB, IDBKeyRange, tmpTrans), middlewares.dbcore);
    return {
        dbcore: dbcore
    };
}
function generateMiddlewareStacks(db, tmpTrans) {
    var idbdb = tmpTrans.db;
    var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);
    db.core = stacks.dbcore;
    db.tables.forEach(function (table) {
        var tableName = table.name;
        if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) {
            table.core = db.core.table(tableName);
            if (db[tableName] instanceof db.Table) {
                db[tableName].core = table.core;
            }
        }
    });
}

function setApiOnPlace(db, objs, tableNames, dbschema) {
    tableNames.forEach(function (tableName) {
        var schema = dbschema[tableName];
        objs.forEach(function (obj) {
            if (!(tableName in obj)) {
                if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {
                    setProp(obj, tableName, {
                        get: function () { return this.table(tableName); },
                        set: function (value) {
                            defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true });
                        }
                    });
                }
                else {
                    obj[tableName] = new db.Table(tableName, schema);
                }
            }
        });
    });
}
function removeTablesApi(db, objs) {
    objs.forEach(function (obj) {
        for (var key in obj) {
            if (obj[key] instanceof db.Table)
                delete obj[key];
        }
    });
}
function lowerVersionFirst(a, b) {
    return a._cfg.version - b._cfg.version;
}
function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) {
    var globalSchema = db._dbSchema;
    var trans = db._createTransaction('readwrite', db._storeNames, globalSchema);
    trans.create(idbUpgradeTrans);
    trans._completion.catch(reject);
    var rejectTransaction = trans._reject.bind(trans);
    var transless = PSD.transless || PSD;
    newScope(function () {
        PSD.trans = trans;
        PSD.transless = transless;
        if (oldVersion === 0) {
            keys(globalSchema).forEach(function (tableName) {
                createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);
            });
            generateMiddlewareStacks(db, idbUpgradeTrans);
            DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction);
        }
        else
            updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);
    });
}
function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) {
    var queue = [];
    var versions = db._versions;
    var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);
    var anyContentUpgraderHasRun = false;
    var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; });
    versToRun.forEach(function (version) {
        queue.push(function () {
            var oldSchema = globalSchema;
            var newSchema = version._cfg.dbschema;
            adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);
            adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);
            globalSchema = db._dbSchema = newSchema;
            var diff = getSchemaDiff(oldSchema, newSchema);
            diff.add.forEach(function (tuple) {
                createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);
            });
            diff.change.forEach(function (change) {
                if (change.recreate) {
                    throw new exceptions.Upgrade("Not yet support for changing primary key");
                }
                else {
                    var store_1 = idbUpgradeTrans.objectStore(change.name);
                    change.add.forEach(function (idx) { return addIndex(store_1, idx); });
                    change.change.forEach(function (idx) {
                        store_1.deleteIndex(idx.name);
                        addIndex(store_1, idx);
                    });
                    change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); });
                }
            });
            var contentUpgrade = version._cfg.contentUpgrade;
            if (contentUpgrade && version._cfg.version > oldVersion) {
                generateMiddlewareStacks(db, idbUpgradeTrans);
                anyContentUpgraderHasRun = true;
                var upgradeSchema_1 = shallowClone(newSchema);
                diff.del.forEach(function (table) {
                    upgradeSchema_1[table] = oldSchema[table];
                });
                removeTablesApi(db, [db.Transaction.prototype]);
                setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1);
                trans.schema = upgradeSchema_1;
                var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade);
                if (contentUpgradeIsAsync_1) {
                    incrementExpectedAwaits();
                }
                var returnValue_1;
                var promiseFollowed = DexiePromise.follow(function () {
                    returnValue_1 = contentUpgrade(trans);
                    if (returnValue_1) {
                        if (contentUpgradeIsAsync_1) {
                            var decrementor = decrementExpectedAwaits.bind(null, null);
                            returnValue_1.then(decrementor, decrementor);
                        }
                    }
                });
                return (returnValue_1 && typeof returnValue_1.then === 'function' ?
                    DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; }));
            }
        });
        queue.push(function (idbtrans) {
            if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {
                var newSchema = version._cfg.dbschema;
                deleteRemovedTables(newSchema, idbtrans);
            }
            removeTablesApi(db, [db.Transaction.prototype]);
            setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);
            trans.schema = db._dbSchema;
        });
    });
    function runQueue() {
        return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :
            DexiePromise.resolve();
    }
    return runQueue().then(function () {
        createMissingTables(globalSchema, idbUpgradeTrans);
    });
}
function getSchemaDiff(oldSchema, newSchema) {
    var diff = {
        del: [],
        add: [],
        change: []
    };
    var table;
    for (table in oldSchema) {
        if (!newSchema[table])
            diff.del.push(table);
    }
    for (table in newSchema) {
        var oldDef = oldSchema[table], newDef = newSchema[table];
        if (!oldDef) {
            diff.add.push([table, newDef]);
        }
        else {
            var change = {
                name: table,
                def: newDef,
                recreate: false,
                del: [],
                add: [],
                change: []
            };
            if (oldDef.primKey.src !== newDef.primKey.src &&
                !isIEOrEdge
            ) {
                change.recreate = true;
                diff.change.push(change);
            }
            else {
                var oldIndexes = oldDef.idxByName;
                var newIndexes = newDef.idxByName;
                var idxName = void 0;
                for (idxName in oldIndexes) {
                    if (!newIndexes[idxName])
                        change.del.push(idxName);
                }
                for (idxName in newIndexes) {
                    var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName];
                    if (!oldIdx)
                        change.add.push(newIdx);
                    else if (oldIdx.src !== newIdx.src)
                        change.change.push(newIdx);
                }
                if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {
                    diff.change.push(change);
                }
            }
        }
    }
    return diff;
}
function createTable(idbtrans, tableName, primKey, indexes) {
    var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ?
        { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :
        { autoIncrement: primKey.auto });
    indexes.forEach(function (idx) { return addIndex(store, idx); });
    return store;
}
function createMissingTables(newSchema, idbtrans) {
    keys(newSchema).forEach(function (tableName) {
        if (!idbtrans.db.objectStoreNames.contains(tableName)) {
            createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);
        }
    });
}
function deleteRemovedTables(newSchema, idbtrans) {
    for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) {
        var storeName = idbtrans.db.objectStoreNames[i];
        if (newSchema[storeName] == null) {
            idbtrans.db.deleteObjectStore(storeName);
        }
    }
}
function addIndex(store, idx) {
    store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });
}
function buildGlobalSchema(db, idbdb, tmpTrans) {
    var globalSchema = {};
    var dbStoreNames = slice(idbdb.objectStoreNames, 0);
    dbStoreNames.forEach(function (storeName) {
        var store = tmpTrans.objectStore(storeName);
        var keyPath = store.keyPath;
        var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true);
        var indexes = [];
        for (var j = 0; j < store.indexNames.length; ++j) {
            var idbindex = store.index(store.indexNames[j]);
            keyPath = idbindex.keyPath;
            var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false);
            indexes.push(index);
        }
        globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);
    });
    return globalSchema;
}
function readGlobalSchema(db, idbdb, tmpTrans) {
    db.verno = idbdb.version / 10;
    var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);
    db._storeNames = slice(idbdb.objectStoreNames, 0);
    setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);
}
function adjustToExistingIndexNames(db, schema, idbtrans) {
    var storeNames = idbtrans.db.objectStoreNames;
    for (var i = 0; i < storeNames.length; ++i) {
        var storeName = storeNames[i];
        var store = idbtrans.objectStore(storeName);
        db._hasGetAll = 'getAll' in store;
        for (var j = 0; j < store.indexNames.length; ++j) {
            var indexName = store.indexNames[j];
            var keyPath = store.index(indexName).keyPath;
            var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]";
            if (schema[storeName]) {
                var indexSpec = schema[storeName].idxByName[dexieName];
                if (indexSpec) {
                    indexSpec.name = indexName;
                    delete schema[storeName].idxByName[dexieName];
                    schema[storeName].idxByName[indexName] = indexSpec;
                }
            }
        }
    }
    if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&
        !/(Chrome\/|Edge\/)/.test(navigator.userAgent) &&
        _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&
        [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) {
        db._hasGetAll = false;
    }
}
function parseIndexSyntax(primKeyAndIndexes) {
    return primKeyAndIndexes.split(',').map(function (index, indexNum) {
        index = index.trim();
        var name = index.replace(/([&*]|\+\+)/g, "");
        var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name;
        return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0);
    });
}

var Version =               (function () {
    function Version() {
    }
    Version.prototype._parseStoresSpec = function (stores, outSchema) {
        keys(stores).forEach(function (tableName) {
            if (stores[tableName] !== null) {
                var indexes = parseIndexSyntax(stores[tableName]);
                var primKey = indexes.shift();
                if (primKey.multi)
                    throw new exceptions.Schema("Primary key cannot be multi-valued");
                indexes.forEach(function (idx) {
                    if (idx.auto)
                        throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)");
                    if (!idx.keyPath)
                        throw new exceptions.Schema("Index must have a name and cannot be an empty string");
                });
                outSchema[tableName] = createTableSchema(tableName, primKey, indexes);
            }
        });
    };
    Version.prototype.stores = function (stores) {
        var db = this.db;
        this._cfg.storesSource = this._cfg.storesSource ?
            extend(this._cfg.storesSource, stores) :
            stores;
        var versions = db._versions;
        var storesSpec = {};
        var dbschema = {};
        versions.forEach(function (version) {
            extend(storesSpec, version._cfg.storesSource);
            dbschema = (version._cfg.dbschema = {});
            version._parseStoresSpec(storesSpec, dbschema);
        });
        db._dbSchema = dbschema;
        removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);
        setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);
        db._storeNames = keys(dbschema);
        return this;
    };
    Version.prototype.upgrade = function (upgradeFunction) {
        this._cfg.contentUpgrade = upgradeFunction;
        return this;
    };
    return Version;
}());

function createVersionConstructor(db) {
    return makeClassConstructor(Version.prototype, function Version$$1(versionNumber) {
        this.db = db;
        this._cfg = {
            version: versionNumber,
            storesSource: null,
            dbschema: {},
            tables: {},
            contentUpgrade: null
        };
    });
}

var databaseEnumerator;
function DatabaseEnumerator(indexedDB) {
    var hasDatabasesNative = indexedDB && typeof indexedDB.databases === 'function';
    var dbNamesTable;
    if (!hasDatabasesNative) {
        var db = new Dexie(DBNAMES_DB, { addons: [] });
        db.version(1).stores({ dbnames: 'name' });
        dbNamesTable = db.table('dbnames');
    }
    return {
        getDatabaseNames: function () {
            return hasDatabasesNative
                ?
                    DexiePromise.resolve(indexedDB.databases()).then(function (infos) { return infos
                        .map(function (info) { return info.name; })
                        .filter(function (name) { return name !== DBNAMES_DB; }); })
                :
                    dbNamesTable.toCollection().primaryKeys();
        },
        add: function (name) {
            return !hasDatabasesNative && name !== DBNAMES_DB && dbNamesTable.put({ name: name }).catch(nop);
        },
        remove: function (name) {
            return !hasDatabasesNative && name !== DBNAMES_DB && dbNamesTable.delete(name).catch(nop);
        }
    };
}
function initDatabaseEnumerator(indexedDB) {
    try {
        databaseEnumerator = DatabaseEnumerator(indexedDB);
    }
    catch (e) { }
}

function vip(fn) {
    return newScope(function () {
        PSD.letThrough = true;
        return fn();
    });
}

function dexieOpen(db) {
    var state = db._state;
    var indexedDB = db._deps.indexedDB;
    if (state.isBeingOpened || db.idbdb)
        return state.dbReadyPromise.then(function () { return state.dbOpenError ?
            rejection(state.dbOpenError) :
            db; });
    debug && (state.openCanceller._stackHolder = getErrorWithStack());
    state.isBeingOpened = true;
    state.dbOpenError = null;
    state.openComplete = false;
    var resolveDbReady = state.dbReadyResolve,
    upgradeTransaction = null;
    return DexiePromise.race([state.openCanceller, new DexiePromise(function (resolve, reject) {
            if (!indexedDB)
                throw new exceptions.MissingAPI("indexedDB API not found. If using IE10+, make sure to run your code on a server URL " +
                    "(not locally). If using old Safari versions, make sure to include indexedDB polyfill.");
            var dbName = db.name;
            var req = state.autoSchema ?
                indexedDB.open(dbName) :
                indexedDB.open(dbName, Math.round(db.verno * 10));
            if (!req)
                throw new exceptions.MissingAPI("IndexedDB API not available");
            req.onerror = eventRejectHandler(reject);
            req.onblocked = wrap(db._fireOnBlocked);
            req.onupgradeneeded = wrap(function (e) {
                upgradeTransaction = req.transaction;
                if (state.autoSchema && !db._options.allowEmptyDB) {
                    req.onerror = preventDefault;
                    upgradeTransaction.abort();
                    req.result.close();
                    var delreq = indexedDB.deleteDatabase(dbName);
                    delreq.onsuccess = delreq.onerror = wrap(function () {
                        reject(new exceptions.NoSuchDatabase("Database " + dbName + " doesnt exist"));
                    });
                }
                else {
                    upgradeTransaction.onerror = eventRejectHandler(reject);
                    var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion;
                    db.idbdb = req.result;
                    runUpgraders(db, oldVer / 10, upgradeTransaction, reject);
                }
            }, reject);
            req.onsuccess = wrap(function () {
                upgradeTransaction = null;
                var idbdb = db.idbdb = req.result;
                var objectStoreNames = slice(idbdb.objectStoreNames);
                if (objectStoreNames.length > 0)
                    try {
                        var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');
                        if (state.autoSchema)
                            readGlobalSchema(db, idbdb, tmpTrans);
                        else
                            adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);
                        generateMiddlewareStacks(db, tmpTrans);
                    }
                    catch (e) {
                    }
                connections.push(db);
                idbdb.onversionchange = wrap(function (ev) {
                    state.vcFired = true;
                    db.on("versionchange").fire(ev);
                });
                databaseEnumerator.add(dbName);
                resolve();
            }, reject);
        })]).then(function () {
        state.onReadyBeingFired = [];
        return DexiePromise.resolve(vip(db.on.ready.fire)).then(function fireRemainders() {
            if (state.onReadyBeingFired.length > 0) {
                var remainders = state.onReadyBeingFired.reduce(promisableChain, nop);
                state.onReadyBeingFired = [];
                return DexiePromise.resolve(vip(remainders)).then(fireRemainders);
            }
        });
    }).finally(function () {
        state.onReadyBeingFired = null;
    }).then(function () {
        state.isBeingOpened = false;
        return db;
    }).catch(function (err) {
        try {
            upgradeTransaction && upgradeTransaction.abort();
        }
        catch (e) { }
        state.isBeingOpened = false;
        db.close();
        state.dbOpenError = err;
        return rejection(state.dbOpenError);
    }).finally(function () {
        state.openComplete = true;
        resolveDbReady();
    });
}

function awaitIterator(iterator) {
    var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow);
    function step(getNext) {
        return function (val) {
            var next = getNext(val), value = next.value;
            return next.done ? value :
                (!value || typeof value.then !== 'function' ?
                    isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :
                    value.then(onSuccess, onError));
        };
    }
    return step(callNext)();
}

function extractTransactionArgs(mode, _tableArgs_, scopeFunc) {
    var i = arguments.length;
    if (i < 2)
        throw new exceptions.InvalidArgument("Too few arguments");
    var args = new Array(i - 1);
    while (--i)
        args[i - 1] = arguments[i];
    scopeFunc = args.pop();
    var tables = flatten(args);
    return [mode, tables, scopeFunc];
}
function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) {
    return DexiePromise.resolve().then(function () {
        var transless = PSD.transless || PSD;
        var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);
        var zoneProps = {
            trans: trans,
            transless: transless
        };
        if (parentTransaction) {
            trans.idbtrans = parentTransaction.idbtrans;
        }
        else {
            trans.create();
        }
        var scopeFuncIsAsync = isAsyncFunction(scopeFunc);
        if (scopeFuncIsAsync) {
            incrementExpectedAwaits();
        }
        var returnValue;
        var promiseFollowed = DexiePromise.follow(function () {
            returnValue = scopeFunc.call(trans, trans);
            if (returnValue) {
                if (scopeFuncIsAsync) {
                    var decrementor = decrementExpectedAwaits.bind(null, null);
                    returnValue.then(decrementor, decrementor);
                }
                else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {
                    returnValue = awaitIterator(returnValue);
                }
            }
        }, zoneProps);
        return (returnValue && typeof returnValue.then === 'function' ?
            DexiePromise.resolve(returnValue).then(function (x) { return trans.active ?
                x
                : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); })
            : promiseFollowed.then(function () { return returnValue; })).then(function (x) {
            if (parentTransaction)
                trans._resolve();
            return trans._completion.then(function () { return x; });
        }).catch(function (e) {
            trans._reject(e);
            return rejection(e);
        });
    });
}

function pad(a, value, count) {
    var result = isArray(a) ? a.slice() : [a];
    for (var i = 0; i < count; ++i)
        result.push(value);
    return result;
}
function createVirtualIndexMiddleware(down) {
    return __assign(__assign({}, down), { table: function (tableName) {
            var table = down.table(tableName);
            var schema = table.schema;
            var indexLookup = {};
            var allVirtualIndexes = [];
            function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) {
                var keyPathAlias = getKeyPathAlias(keyPath);
                var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);
                var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;
                var isVirtual = keyTail > 0;
                var virtualIndex = __assign(__assign({}, lowLevelIndex), { isVirtual: isVirtual, isPrimaryKey: !isVirtual && lowLevelIndex.isPrimaryKey, keyTail: keyTail,
                    keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique });
                indexList.push(virtualIndex);
                if (!virtualIndex.isPrimaryKey) {
                    allVirtualIndexes.push(virtualIndex);
                }
                if (keyLength > 1) {
                    var virtualKeyPath = keyLength === 2 ?
                        keyPath[0] :
                        keyPath.slice(0, keyLength - 1);
                    addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);
                }
                indexList.sort(function (a, b) { return a.keyTail - b.keyTail; });
                return virtualIndex;
            }
            var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);
            indexLookup[":id"] = [primaryKey];
            for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) {
                var index = _a[_i];
                addVirtualIndexes(index.keyPath, 0, index);
            }
            function findBestIndex(keyPath) {
                var result = indexLookup[getKeyPathAlias(keyPath)];
                return result && result[0];
            }
            function translateRange(range, keyTail) {
                return {
                    type: range.type === 1             ?
                        2             :
                        range.type,
                    lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),
                    lowerOpen: true,
                    upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),
                    upperOpen: true
                };
            }
            function translateRequest(req) {
                var index = req.query.index;
                return index.isVirtual ? __assign(__assign({}, req), { query: {
                        index: index,
                        range: translateRange(req.query.range, index.keyTail)
                    } }) : req;
            }
            var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) {
                    return table.count(translateRequest(req));
                },
                query: function (req) {
                    return table.query(translateRequest(req));
                },
                openCursor: function (req) {
                    var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength;
                    if (!isVirtual)
                        return table.openCursor(req);
                    function createVirtualCursor(cursor) {
                        function _continue(key) {
                            key != null ?
                                cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :
                                req.unique ?
                                    cursor.continue(pad(cursor.key, req.reverse ? down.MIN_KEY : down.MAX_KEY, keyTail)) :
                                    cursor.continue();
                        }
                        var virtualCursor = Object.create(cursor, {
                            continue: { value: _continue },
                            continuePrimaryKey: {
                                value: function (key, primaryKey) {
                                    cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);
                                }
                            },
                            key: {
                                get: function () {
                                    var key = cursor.key;
                                    return keyLength === 1 ?
                                        key[0] :
                                        key.slice(0, keyLength);
                                }
                            },
                            value: {
                                get: function () {
                                    return cursor.value;
                                }
                            }
                        });
                        return virtualCursor;
                    }
                    return table.openCursor(translateRequest(req))
                        .then(function (cursor) { return cursor && createVirtualCursor(cursor); });
                } });
            return result;
        } });
}
var virtualIndexMiddleware = {
    stack: "dbcore",
    name: "VirtualIndexMiddleware",
    level: 1,
    create: createVirtualIndexMiddleware
};

var hooksMiddleware = {
    stack: "dbcore",
    name: "HooksMiddleware",
    level: 2,
    create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) {
            var downTable = downCore.table(tableName);
            var primaryKey = downTable.schema.primaryKey;
            var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) {
                    var dxTrans = PSD.trans;
                    var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating;
                    switch (req.type) {
                        case 'add':
                            if (creating.fire === nop)
                                break;
                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
                        case 'put':
                            if (creating.fire === nop && updating.fire === nop)
                                break;
                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
                        case 'delete':
                            if (deleting.fire === nop)
                                break;
                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);
                        case 'deleteRange':
                            if (deleting.fire === nop)
                                break;
                            return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true);
                    }
                    return downTable.mutate(req);
                    function addPutOrDelete(req) {
                        var dxTrans = PSD.trans;
                        var keys$$1 = req.keys || getEffectiveKeys(primaryKey, req);
                        if (!keys$$1)
                            throw new Error("Keys missing");
                        req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys$$1, wantResults: true }) :
                         __assign({}, req);
                        if (req.type !== 'delete')
                            req.values = __spreadArrays(req.values);
                        if (req.keys)
                            req.keys = __spreadArrays(req.keys);
                        return getExistingValues(downTable, req, keys$$1).then(function (existingValues) {
                            var contexts = keys$$1.map(function (key, i) {
                                var existingValue = existingValues[i];
                                var ctx = { onerror: null, onsuccess: null };
                                if (req.type === 'delete') {
                                    deleting.fire.call(ctx, key, existingValue, dxTrans);
                                }
                                else if (req.type === 'add' || existingValue === undefined) {
                                    var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);
                                    if (key == null && generatedPrimaryKey != null) {
                                        key = generatedPrimaryKey;
                                        req.keys[i] = key;
                                        if (!primaryKey.outbound) {
                                            setByKeyPath(req.values[i], primaryKey.keyPath, key);
                                        }
                                    }
                                }
                                else {
                                    var objectDiff = getObjectDiff(existingValue, req.values[i]);
                                    var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);
                                    if (additionalChanges_1) {
                                        var requestedValue_1 = req.values[i];
                                        Object.keys(additionalChanges_1).forEach(function (keyPath) {
                                            setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]);
                                        });
                                    }
                                }
                                return ctx;
                            });
                            return downTable.mutate(req).then(function (_a) {
                                var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult;
                                for (var i = 0; i < keys$$1.length; ++i) {
                                    var primKey = results ? results[i] : keys$$1[i];
                                    var ctx = contexts[i];
                                    if (primKey == null) {
                                        ctx.onerror && ctx.onerror(failures[i]);
                                    }
                                    else {
                                        ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ?
                                            req.values[i] :
                                            primKey
                                        );
                                    }
                                }
                                return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult };
                            }).catch(function (error) {
                                contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); });
                                return Promise.reject(error);
                            });
                        });
                    }
                    function deleteRange(req) {
                        return deleteNextChunk(req.trans, req.range, 10000);
                    }
                    function deleteNextChunk(trans, range, limit) {
                        return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit })
                            .then(function (_a) {
                            var result = _a.result;
                            return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) {
                                if (res.numFailures > 0)
                                    return Promise.reject(res.failures[0]);
                                if (result.length < limit) {
                                    return { failures: [], numFailures: 0, lastResult: undefined };
                                }
                                else {
                                    return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit);
                                }
                            });
                        });
                    }
                } });
            return tableMiddleware;
        } })); }
};

var Dexie =               (function () {
    function Dexie(name, options) {
        var _this = this;
        this._middlewares = {};
        this.verno = 0;
        var deps = Dexie.dependencies;
        this._options = options = __assign({
            addons: Dexie.addons, autoOpen: true,
            indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange }, options);
        this._deps = {
            indexedDB: options.indexedDB,
            IDBKeyRange: options.IDBKeyRange
        };
        var addons = options.addons;
        this._dbSchema = {};
        this._versions = [];
        this._storeNames = [];
        this._allTables = {};
        this.idbdb = null;
        var state = {
            dbOpenError: null,
            isBeingOpened: false,
            onReadyBeingFired: null,
            openComplete: false,
            dbReadyResolve: nop,
            dbReadyPromise: null,
            cancelOpen: nop,
            openCanceller: null,
            autoSchema: true
        };
        state.dbReadyPromise = new DexiePromise(function (resolve) {
            state.dbReadyResolve = resolve;
        });
        state.openCanceller = new DexiePromise(function (_, reject) {
            state.cancelOpen = reject;
        });
        this._state = state;
        this.name = name;
        this.on = Events(this, "populate", "blocked", "versionchange", { ready: [promisableChain, nop] });
        this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) {
            return function (subscriber, bSticky) {
                Dexie.vip(function () {
                    var state = _this._state;
                    if (state.openComplete) {
                        if (!state.dbOpenError)
                            DexiePromise.resolve().then(subscriber);
                        if (bSticky)
                            subscribe(subscriber);
                    }
                    else if (state.onReadyBeingFired) {
                        state.onReadyBeingFired.push(subscriber);
                        if (bSticky)
                            subscribe(subscriber);
                    }
                    else {
                        subscribe(subscriber);
                        var db_1 = _this;
                        if (!bSticky)
                            subscribe(function unsubscribe() {
                                db_1.on.ready.unsubscribe(subscriber);
                                db_1.on.ready.unsubscribe(unsubscribe);
                            });
                    }
                });
            };
        });
        this.Collection = createCollectionConstructor(this);
        this.Table = createTableConstructor(this);
        this.Transaction = createTransactionConstructor(this);
        this.Version = createVersionConstructor(this);
        this.WhereClause = createWhereClauseConstructor(this);
        this.on("versionchange", function (ev) {
            if (ev.newVersion > 0)
                console.warn("Another connection wants to upgrade database '" + _this.name + "'. Closing db now to resume the upgrade.");
            else
                console.warn("Another connection wants to delete database '" + _this.name + "'. Closing db now to resume the delete request.");
            _this.close();
        });
        this.on("blocked", function (ev) {
            if (!ev.newVersion || ev.newVersion < ev.oldVersion)
                console.warn("Dexie.delete('" + _this.name + "') was blocked");
            else
                console.warn("Upgrade '" + _this.name + "' blocked by other connection holding version " + ev.oldVersion / 10);
        });
        this._maxKey = getMaxKey(options.IDBKeyRange);
        this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, parentTransaction); };
        this._fireOnBlocked = function (ev) {
            _this.on("blocked").fire(ev);
            connections
                .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; })
                .map(function (c) { return c.on("versionchange").fire(ev); });
        };
        this.use(virtualIndexMiddleware);
        this.use(hooksMiddleware);
        addons.forEach(function (addon) { return addon(_this); });
    }
    Dexie.prototype.version = function (versionNumber) {
        if (isNaN(versionNumber) || versionNumber < 0.1)
            throw new exceptions.Type("Given version is not a positive number");
        versionNumber = Math.round(versionNumber * 10) / 10;
        if (this.idbdb || this._state.isBeingOpened)
            throw new exceptions.Schema("Cannot add version when database is open");
        this.verno = Math.max(this.verno, versionNumber);
        var versions = this._versions;
        var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0];
        if (versionInstance)
            return versionInstance;
        versionInstance = new this.Version(versionNumber);
        versions.push(versionInstance);
        versions.sort(lowerVersionFirst);
        versionInstance.stores({});
        this._state.autoSchema = false;
        return versionInstance;
    };
    Dexie.prototype._whenReady = function (fn) {
        var _this = this;
        return this._state.openComplete || PSD.letThrough ? fn() : new DexiePromise(function (resolve, reject) {
            if (!_this._state.isBeingOpened) {
                if (!_this._options.autoOpen) {
                    reject(new exceptions.DatabaseClosed());
                    return;
                }
                _this.open().catch(nop);
            }
            _this._state.dbReadyPromise.then(resolve, reject);
        }).then(fn);
    };
    Dexie.prototype.use = function (_a) {
        var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name;
        if (name)
            this.unuse({ stack: stack, name: name });
        var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);
        middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name });
        middlewares.sort(function (a, b) { return a.level - b.level; });
        return this;
    };
    Dexie.prototype.unuse = function (_a) {
        var stack = _a.stack, name = _a.name, create = _a.create;
        if (stack && this._middlewares[stack]) {
            this._middlewares[stack] = this._middlewares[stack].filter(function (mw) {
                return create ? mw.create !== create :
                    name ? mw.name !== name :
                        false;
            });
        }
        return this;
    };
    Dexie.prototype.open = function () {
        return dexieOpen(this);
    };
    Dexie.prototype.close = function () {
        var idx = connections.indexOf(this), state = this._state;
        if (idx >= 0)
            connections.splice(idx, 1);
        if (this.idbdb) {
            try {
                this.idbdb.close();
            }
            catch (e) { }
            this.idbdb = null;
        }
        this._options.autoOpen = false;
        state.dbOpenError = new exceptions.DatabaseClosed();
        if (state.isBeingOpened)
            state.cancelOpen(state.dbOpenError);
        state.dbReadyPromise = new DexiePromise(function (resolve) {
            state.dbReadyResolve = resolve;
        });
        state.openCanceller = new DexiePromise(function (_, reject) {
            state.cancelOpen = reject;
        });
    };
    Dexie.prototype.delete = function () {
        var _this = this;
        var hasArguments = arguments.length > 0;
        var state = this._state;
        return new DexiePromise(function (resolve, reject) {
            var doDelete = function () {
                _this.close();
                var req = _this._deps.indexedDB.deleteDatabase(_this.name);
                req.onsuccess = wrap(function () {
                    databaseEnumerator.remove(_this.name);
                    resolve();
                });
                req.onerror = eventRejectHandler(reject);
                req.onblocked = _this._fireOnBlocked;
            };
            if (hasArguments)
                throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()");
            if (state.isBeingOpened) {
                state.dbReadyPromise.then(doDelete);
            }
            else {
                doDelete();
            }
        });
    };
    Dexie.prototype.backendDB = function () {
        return this.idbdb;
    };
    Dexie.prototype.isOpen = function () {
        return this.idbdb !== null;
    };
    Dexie.prototype.hasBeenClosed = function () {
        var dbOpenError = this._state.dbOpenError;
        return dbOpenError && (dbOpenError.name === 'DatabaseClosed');
    };
    Dexie.prototype.hasFailed = function () {
        return this._state.dbOpenError !== null;
    };
    Dexie.prototype.dynamicallyOpened = function () {
        return this._state.autoSchema;
    };
    Object.defineProperty(Dexie.prototype, "tables", {
        get: function () {
            var _this = this;
            return keys(this._allTables).map(function (name) { return _this._allTables[name]; });
        },
        enumerable: true,
        configurable: true
    });
    Dexie.prototype.transaction = function () {
        var args = extractTransactionArgs.apply(this, arguments);
        return this._transaction.apply(this, args);
    };
    Dexie.prototype._transaction = function (mode, tables, scopeFunc) {
        var _this = this;
        var parentTransaction = PSD.trans;
        if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1)
            parentTransaction = null;
        var onlyIfCompatible = mode.indexOf('?') !== -1;
        mode = mode.replace('!', '').replace('?', '');
        var idbMode, storeNames;
        try {
            storeNames = tables.map(function (table) {
                var storeName = table instanceof _this.Table ? table.name : table;
                if (typeof storeName !== 'string')
                    throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");
                return storeName;
            });
            if (mode == "r" || mode === READONLY)
                idbMode = READONLY;
            else if (mode == "rw" || mode == READWRITE)
                idbMode = READWRITE;
            else
                throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode);
            if (parentTransaction) {
                if (parentTransaction.mode === READONLY && idbMode === READWRITE) {
                    if (onlyIfCompatible) {
                        parentTransaction = null;
                    }
                    else
                        throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");
                }
                if (parentTransaction) {
                    storeNames.forEach(function (storeName) {
                        if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {
                            if (onlyIfCompatible) {
                                parentTransaction = null;
                            }
                            else
                                throw new exceptions.SubTransaction("Table " + storeName +
                                    " not included in parent transaction.");
                        }
                    });
                }
                if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {
                    parentTransaction = null;
                }
            }
        }
        catch (e) {
            return parentTransaction ?
                parentTransaction._promise(null, function (_, reject) { reject(e); }) :
                rejection(e);
        }
        var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);
        return (parentTransaction ?
            parentTransaction._promise(idbMode, enterTransaction, "lock") :
            PSD.trans ?
                usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) :
                this._whenReady(enterTransaction));
    };
    Dexie.prototype.table = function (tableName) {
        if (!hasOwn(this._allTables, tableName)) {
            throw new exceptions.InvalidTable("Table " + tableName + " does not exist");
        }
        return this._allTables[tableName];
    };
    return Dexie;
}());

var Dexie$1 = Dexie;
props(Dexie$1, __assign(__assign({}, fullNameExceptions), {
    delete: function (databaseName) {
        var db = new Dexie$1(databaseName);
        return db.delete();
    },
    exists: function (name) {
        return new Dexie$1(name, { addons: [] }).open().then(function (db) {
            db.close();
            return true;
        }).catch('NoSuchDatabaseError', function () { return false; });
    },
    getDatabaseNames: function (cb) {
        return databaseEnumerator ?
            databaseEnumerator.getDatabaseNames().then(cb) :
            DexiePromise.resolve([]);
    },
    defineClass: function () {
        function Class(content) {
            extend(this, content);
        }
        return Class;
    },
    ignoreTransaction: function (scopeFunc) {
        return PSD.trans ?
            usePSD(PSD.transless, scopeFunc) :
            scopeFunc();
    },
    vip: vip, async: function (generatorFn) {
        return function () {
            try {
                var rv = awaitIterator(generatorFn.apply(this, arguments));
                if (!rv || typeof rv.then !== 'function')
                    return DexiePromise.resolve(rv);
                return rv;
            }
            catch (e) {
                return rejection(e);
            }
        };
    }, spawn: function (generatorFn, args, thiz) {
        try {
            var rv = awaitIterator(generatorFn.apply(thiz, args || []));
            if (!rv || typeof rv.then !== 'function')
                return DexiePromise.resolve(rv);
            return rv;
        }
        catch (e) {
            return rejection(e);
        }
    },
    currentTransaction: {
        get: function () { return PSD.trans || null; }
    }, waitFor: function (promiseOrFunction, optionalTimeout) {
        var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ?
            Dexie$1.ignoreTransaction(promiseOrFunction) :
            promiseOrFunction)
            .timeout(optionalTimeout || 60000);
        return PSD.trans ?
            PSD.trans.waitFor(promise) :
            promise;
    },
    Promise: DexiePromise,
    debug: {
        get: function () { return debug; },
        set: function (value) {
            setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter);
        }
    },
    derive: derive, extend: extend, props: props, override: override,
    Events: Events,
    getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, asap: asap,
    minKey: minKey,
    addons: [],
    connections: connections,
    errnames: errnames,
    dependencies: (function () {
        try {
            return {
                indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,
                IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange
            };
        }
        catch (e) {
            return { indexedDB: null, IDBKeyRange: null };
        }
    })(),
    semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.')
        .map(function (n) { return parseInt(n); })
        .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }),
    default: Dexie$1,
    Dexie: Dexie$1 }));
Dexie$1.maxKey = getMaxKey(Dexie$1.dependencies.IDBKeyRange);

initDatabaseEnumerator(Dexie.dependencies.indexedDB);
DexiePromise.rejectionMapper = mapError;
setDebug(debug, dexieStackFrameFilter);

return Dexie;

})));
;
/*
*	TypeWatch 3
*
*	Examples/Docs: github.com/dennyferra/TypeWatch
*  
*  Dual licensed under the MIT and GPL licenses:
*  http://www.opensource.org/licenses/mit-license.php
*  http://www.gnu.org/licenses/gpl.html
*/

!function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        factory(require('jquery'));
    } else {
        factory(root.jQuery);
    }
}(this, function ($) {
    'use strict';
    $.fn.typeWatch = function (o) {
        // The default input types that are supported
        var _supportedInputTypes =
			['TEXT', 'TEXTAREA', 'PASSWORD', 'TEL', 'SEARCH', 'URL', 'EMAIL', 'DATETIME', 'DATE', 'MONTH', 'WEEK', 'TIME', 'DATETIME-LOCAL', 'NUMBER', 'RANGE', 'DIV'];

        // Options
        var options = $.extend({
            wait: 750,
            callback: function () { },
            highlight: true,
            captureLength: 2,
            allowSubmit: false,
            inputTypes: _supportedInputTypes
        }, o);

        function checkElement(timer, override) {
            var value = timer.type === 'DIV'
				? jQuery(timer.el).html()
				: jQuery(timer.el).val();

            // If has capture length and has changed value
            // Or override and has capture length or allowSubmit option is true
            // Or capture length is zero and changed value
            if ((value.length >= options.captureLength && value != timer.text)
				|| (override && (value.length >= options.captureLength || options.allowSubmit))
				|| (value.length == 0 && timer.text)) {
                timer.text = value;
                timer.cb.call(timer.el, value);
            }
        };

        function watchElement(elem) {
            var elementType = (elem.type || elem.nodeName).toUpperCase();
            if (jQuery.inArray(elementType, options.inputTypes) >= 0) {

                // Allocate timer element
                var timer = {
                    timer: null,
                    text: (elementType === 'DIV') ? jQuery(elem).html() : jQuery(elem).val(),
                    cb: options.callback,
                    el: elem,
                    type: elementType,
                    wait: options.wait
                };

                // Set focus action (highlight)
                if (options.highlight && elementType !== 'DIV')
                    jQuery(elem).focus(function () { this.select(); });

                // Key watcher / clear and reset the timer
                var startWatch = function (evt) {
                    var timerWait = timer.wait;
                    var overrideBool = false;
                    var evtElementType = elementType;

                    // If enter key is pressed and not a TEXTAREA or DIV
                    if (typeof evt.keyCode != 'undefined' && evt.keyCode == 13
						&& evtElementType !== 'TEXTAREA' && elementType !== 'DIV') {
                        console.log('OVERRIDE');
                        timerWait = 1;
                        overrideBool = true;
                    }

                    var timerCallbackFx = function () {
                        checkElement(timer, overrideBool)
                    }

                    // Clear timer
                    clearTimeout(timer.timer);
                    timer.timer = setTimeout(timerCallbackFx, timerWait);
                };

                jQuery(elem).on('keydown paste cut input', startWatch);
            }
        };

        // Watch each element
        return this.each(function () {
            watchElement(this);
        });
    };
});;
/*! lazysizes - v5.3.2 */

!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});;
; (function ($) {
    var on = $.fn.on, timer;
    $.fn.on = function () {
        var args = Array.apply(null, arguments);
        var last = args[args.length - 1];

        if (isNaN(last) || (last === 1 && args.pop())) return on.apply(this, args);

        var delay = args.pop();
        var fn = args.pop();

        args.push(function () {
            var self = this, params = arguments;
            clearTimeout(timer);
            timer = setTimeout(function () {
                fn.apply(self, params);
            }, delay);
        });

        return on.apply(this, args);
    };
}(this.jQuery));

//function dynamicPhotoSwipeGallery(_dynArray, _options, callback) {
//    var options = $.extend({
//        index: 0,
//        pinchToClose: false,
//        closeOnScroll: false,
//        closeOnVerticalDrag: false,
//        allowUserZoom: false,
//        shareButtons: [
//            { id: 'facebook', label: 'Share on Facebook', url: 'https://www.facebook.com/sharer/sharer.php?u={{url}}' },
//            { id: 'twitter', label: 'Tweet', url: 'https://twitter.com/intent/tweet?text={{text}}&url={{url}}' },
//            { id: 'pinterest', label: 'Pin it', url: 'http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}' },
//        ]
//        //getDoubleTapZoom: function (isMouseClick, item) {
//        //    if (!item.zoomLevel) {
//        //        item.zoomLevel = item.initialZoomLevel
//        //    }
//        //    var res;
//        //    if (item.zoomLevel > 2) {
//        //        res = item.initialZoomLevel;
//        //        $(".pswp").removeClass("pswp__zoomout");
//        //    }
//        //    else {
//        //        res = item.zoomLevel + 0.5;
//        //        if (item.zoomLevel > 1.5) {
//        //            $(".pswp").addClass("pswp__zoomout");
//        //        }
//        //    }

//        //    item.zoomLevel = res;
//        //    return res;
//        //},
//    }, _options);

//    AddScriptStyleResources(window['PhotoSwipe'] && window['PhotoSwipeUI_Default'],
//        "/assets/js/photoswipe",
//        ["/assets/photoswipe/css"], function (isLoad) {
//            if (isLoad) {
//                $("body").append(' <div class=pswp tabindex=-1 role=dialog aria-hidden=true> <div class=pswp__bg></div><div class=pswp__scroll-wrap> <div class=pswp__container> <div class=pswp__item></div><div class=pswp__item></div><div class=pswp__item></div></div><div class="pswp__ui pswp__ui--hidden"> <div class=pswp__top-bar> <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"> <i class="m-icon-keyboard_arrow_left"></i> </button> <div class=pswp__counter> </div><button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"> <i class="m-icon-keyboard_arrow_right"></i> </button> <button class="pswp__button pswp__button--close" title="Close (Esc)"> &times; </button> <div class="pswp-zoom-btns"> <button class="pswp__button pswp__button--zoom --zoomin" title="Zoom in"> + </button> <button class="pswp__button pswp__button--zoom --zoomout" title="Zoom out"> – </button> </div><div class=pswp__preloader> <div class=pswp__preloader__icn> <div class=pswp__preloader__cut> <div class=pswp__preloader__donut></div></div></div></div></div><div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"> <div class=pswp__share-tooltip></div></div><div class=pswp__caption> <div class=pswp__caption__center></div></div></div></div></div>');
//            }
//            var pswpElement = document.querySelectorAll('.pswp')[0];
//            var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, _dynArray, options);
//            gallery.listen("beforeChange", function () {
//                mixpanel.track("click view next image", { "Navigation Source": "Photo Gallery" });
//            });
//            gallery.listen('imageLoadComplete', function (index, item) {
//                gallery.viewportSize = {
//                    x: gallery.scrollWrap.clientWidth,
//                    y: gallery.scrollWrap.clientHeight
//                };
//                gallery.SetupTransforms();
//            });
//            $("body").addClass("photoswipe-active")
//            gallery.listen('close', function () {
//                $("body").removeClass("photoswipe-active");
//            });
//            var maxZoom = 2.5, minZoom = .1, step = 0.5;
//            gallery.init();

//            $(gallery.template).on("click", ".pswp__button--zoom", function () {
//                var curZoom = gallery.getZoomLevel();
//                var isZoomIn = $(this).hasClass("--zoomin");
//                if (isZoomIn && ((curZoom + step) < maxZoom)) {
//                    window.gallery.zoomTo(curZoom + step, { x: gallery.viewportSize.x / 2, y: gallery.viewportSize.y / 2 }, 200, false);
//                } else if (!isZoomIn && ((curZoom - step) > minZoom)) {
//                    window.gallery.zoomTo(curZoom - step, { x: gallery.viewportSize.x / 2, y: gallery.viewportSize.y / 2 }, 200, false);
//                } else {
//                    window.gallery.zoomTo(curZoom, { x: gallery.viewportSize.x / 2, y: gallery.viewportSize.y / 2 }, 200, false);
//                }
//                //window.gallery.zoomTo(gallery.currItem.initialZoomLevel, { x: gallery.viewportSize.x / 2, y: gallery.viewportSize.y / 2 }, 200, false)
//            })
//            //window.gallery.zoomTo(gallery.currItem.initialZoomLevel, { x: gallery.viewportSize.x / 2, y: gallery.viewportSize.y / 2 }, 200, false)
//            if (callback)
//                callback(gallery);
//        });
//}

var marker;
var markers = [];
var gmap;
var greyMapStyle = [{ "featureType": "landscape", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "transit", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "poi", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "water", "elementType": "labels", "stylers": [{ "visibility": "off" }] }, { "featureType": "road", "elementType": "labels.icon", "stylers": [{ "visibility": "off" }] }, { "stylers": [{ "hue": "#00aaff" }, { "saturation": -100 }, { "gamma": 2.15 }, { "lightness": 12 }] }, { "featureType": "road", "elementType": "labels.text.fill", "stylers": [{ "visibility": "on" }, { "lightness": 24 }] }, { "featureType": "road", "elementType": "geometry", "stylers": [{ "lightness": 57 }] }];
var isAfterSearch = false;
var mapCount;
var that;

function InitFollowButtons() {
    window.FollowButtonModules = [];
    $("[data-module=follow]").each(function (i, e) {
        new FollowButtonModule(e).init();
    });
}

if (location.href.indexOf('redirectUrlTo=') !== -1)
    location.href = getParameterByName("redirectUrlTo", window.location.href);

// -------------------------- DOCUMENT READY ----------------------------------------------- //

$(document).ready(function () {
    mapCount = 0;
    if (window['MAApp'])
        MAApp.init();

    //MAPF-6726
    if (IsPage('artist_auctionresults', 'artist_artworks-for-sale')) {
        GTM_Send("event", "Page Load", page_name, page_name);
    }

    //toggling grid and list view
    //if (IsPage('artist_auctionresults')) {
    //    if (JSON.parse(localStorage.getItem('showGridView')) || document.location.href.indexOf('?viewmode=grid') > 0) {
    //        ShowGridView();
    //    }
    //}

    if (!isLoggedIn()) {
        window.addEventListener('UserRegistration', function () {
            localStorage.setItem('ArtworkDetailsViewCount', 0);
        });
    }

    $("input[type=number][maxlength]").on("keydown paste", function (e) {
        var keyCode = (e.keyCode > 0) ? e.keyCode : e.charCode;
        var isAllowed = keyCode == 37 || keyCode == 39 || keyCode == 8;

        var value = $(e.target).val();
        var max_value = $(e.target).attr("maxlength");
        if (value.length >= max_value && !isAllowed) {
            return false;
        }
    });

    $("body").on('click', '[data-gtm]', function (e) {
        if (e && e.target) {
            var args = e.target.getAttribute('data-gtm') ? e.target.getAttribute('data-gtm') : e.target.parentElement.getAttribute('data-gtm');
            if (args)
                GTM_Send.apply(this, args.split(','));
        }
    });

    //$("#performance").prevAll(".margin-top-50").first().find(".row").css("background-color", "transparent");

    //$('.event-listing .list').last().css({ 'border': 'none', 'padding-bottom': '0' });

    $('.related-items').last().css({ 'padding-bottom': '60px' });

    $('.big-width').last().css({ 'padding-bottom': '0' });

    //setLotsImgs();

    $('#search-inline-results').removeClass('active').hide();
    $('.top-navbar-ac').hide();

    // Set the effect type
    var effect = 'none';

    // Set the options for the effect type chosen
    var options = { direction: 'right' };

    // Set the duration (default: 400 milliseconds)
    var duration = 300;

    globalSearchInit();
    faSlickOn();
    sliderArrowHeight();
    sliderBlur();
    if (!IsPage('home'))
        initSelects();
    $("body").append($("<script>setTimeout( runCommand, 200);</script>"));
    //setTimeout(runCommand,500);

    //$("body").append($("<script>setTimeout( runReferral, 200);</script>"));
    $("body").append($("<script>setTimeout( runVoucher, 200);</script>"));
    $("body").append($("<script>setTimeout( function(){runNoDefaultSelect('noDefaultSelect')}, 200);</script>"));

    $('#featured-artists-carousel-slick').on('beforeChange', function (event, slick, currentSlide, nextSlide) {
        $('.featured-artists-carousel .blur-ie')
            .stop()
            .animate({ 'opacity': '0.1' }, 200);
    });
    $('#featured-artists-carousel-slick').on('afterChange', function (event, slick, currentSlide, nextSlide) {
        sliderBlurOnSlide();
    });

    dotsWidth();
    awSlickOn();
    awDiscoverySlickOn();
    lotSlickOn();
    artAuSlickOn();
    apcSwitch();
    rilSwitch();

    if ($('.testimonials-slick').length > 0)
        tstmsSwitch();

    patchAutocomplete();
    initShowMore();
    setActivePlanValue();

    ////
    ////  Filter menu start
    ////

    var mobSwitcherWidth = 768;

    ////
    ////  Filter menu finish
    ////

    if ($('.map-page').length) {
        $('.filters-line').prependTo($('#advanced-filters'));

        if ($('body').width() < mobSwitcherWidth && window['serchBoxMap']) {
            $(serchBoxMap).hide();
        }
    }

    // clear button show end

    filterLineUpdate();

    $('.show-btn').click(function () {
        $(this).toggleClass('active');
    });

    edsSwitch();

    if ($('.following-carousel-slick').length > 0) {
        var $fcs = $('.following-carousel-slick');

        $fcs.on('init', function (event, slick) {
            $fcs.show();
        });

        $fcs.slick({
            dots: true,
            infinite: false,
            //            slidesToShow: 5,
            slidesToScroll: 1,
            variableWidth: true,
            swipeToSlide: true,
            touchMove: true,
            swipe: true,
            touchThreshold: 95,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        speed: 200,
                        arrows: false,
                    }
                },
                {
                    breakpoint: 480,
                    settings: {
                        speed: 200,
                        arrows: false,
                    }
                }
            ]
        });
    }

    tabSwitcherAuctionHouse();

    $('.slider-row').each(function () {
        sliderOn($(this));
    });

    $('.icon-switcher .btn').click(function () {
        var slider = $(this).closest('.slider-row');
        $(slider).find('.btn').each(function () {
            $(this).removeClass('active');
        });
        $(this).addClass('active');
        $(slider).find('.slider-range').attr('icoright', $(this).val());
        sliderOn(slider);
    });

    $('.advanced-search').click(function () {
        if ($(this).hasClass('popupactive')) {
            $(this).removeClass('popupactive');
            $('.receive-alerts.current').removeClass('current');
            $('.popup-parent.current').removeClass('current');
        }
    });
    $('.email-popup').click(function (event) {
        event.preventDefault();
        event.stopPropagation();
    });

    if ($('#save, #receive-alerts').length > 0) {
        $('#save, #receive-alerts').click(function (event) {
            event.preventDefault();
            event.stopPropagation();
            $(this).toggleClass('current');
            $(this).parent().toggleClass('current');
            $('.advanced-search').addClass('popupactive');

            if ($('body').width() < 767) {
                $('#receive-alerts').addClass('mobile');
            } else {
                $('#receive-alerts').removeClass('mobile');
            }

            /* addd by yechezkel*/
            $("#refreshGroupList").click()
        });

        // close bottom-popup
        $('body').on('click', function (event) {
            if ($('.save.current').length > 0) {
                if (!$(event.target).hasClass('save')) {
                    var $popup = $(event.target).closest('.bottom-popup');
                    if (!$popup.length > 0) {
                        $('.actions .current').removeClass('current');
                    }
                }
            }
        });

        $('#receive-alerts-btn').click(function () {
            var userinput = $(this).closest('.bottom-popup').find('.email').val();
            var pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
            var t = '';
            var m = $(this).closest('.bottom-popup').find('.message');
            if (!pattern.test(userinput)) {
                t = userinput + ' - not a valid e-mail address';
                $(m).empty().addClass('text-error').removeClass('text-success').text(t);
            } else {
                t = userinput + ' - valid e-mail address!';
                $(m).empty().addClass('text-success').removeClass('text-error').text(t);
                setTimeout(function () {
                    $('.email-popup').fadeOut(500);
                    setTimeout(function () {
                        $('.receive-alerts').closest('.popup-parent').removeClass('current');
                    }, 500);
                }, 1000);
            }
        });
    }

    if ($('.lot-group').length) {
        $('.lot-group').each(function () {
            $(this).click(function () {
                $(this).toggleClass('checked');
            });
        });
    }

    checkerReplace();

    if ($('.checkbox-box').length) {
        auctionTableVerticalAlign();

        /**************************** yechezkel ****************************/

        //$('.checkbox-box').each(function () {
        //    $(this).click(function () {
        //        $(this).find('input').toggleClass('checked');
        //        checkerSelected();
        //    });
        //});
        //$('#select-all').click(checkerSelectAll);
        //$('#clear-all').click(checkerSelectNone);
    }

    daterHeight();

    if ($('.dater-block').length) {
        $('.dater-block .dater').each(function () {
            $(this).click(function () {
                $(this).parent().find('.dater').each(function () {
                    $(this).removeClass('active');
                });
                $(this).addClass('active');
            });
        });
    }

    //i change this if Asaf shay
    //Near Exhibition Map Start
    if ($('#nearExMap').length) {
        var map;

        function initMapNearExhibition(pos) {
            var latitude = 51.51226;
            var longitude = -0.08410;
            //var ip;

            var ip = locationIP.toString();

            ipRegex = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
            if ($.trim(ip) !== '' && ipRegex.test(ip)) {
                if (pos) {
                    latitude = pos.location.lat;
                    longitude = pos.location.lng;

                    //console.log('google.maps.Map - initMapNearExhibition');

                    map = new google.maps.Map(document.getElementById('nearExMap'), {
                        center: { lat: latitude, lng: longitude },
                        zoom: 14,
                        zoomControl: false,
                        fullscreenControl: false,
                        disableDoubleClickZoom: true,
                        mapTypeControl: false,
                        mapTypeControlOptions: {
                            style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
                        },
                        scaleControl: false,
                        scrollwheel: false,
                        panControl: false,
                        streetViewControl: false,
                        draggable: false,
                        overviewMapControl: false,
                        overviewMapControlOptions: {
                            opened: false,
                        },
                        mapTypeId: google.maps.MapTypeId.ROADMAP,
                        //styles: [{"featureType":"landscape","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"stylers":[{"hue":"#00aaff"},{"saturation":-100},{"gamma":2.15},{"lightness":12}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"lightness":24}]},{"featureType":"road","elementType":"geometry","stylers":[{"lightness":57}]}]
                        styles: greyMapStyle
                    });
                };
            }
        }

        $.post("https://www.googleapis.com/geolocation/v1/geolocate?key=" + gMapsKey, {}, initMapNearExhibition);
        //initMapNearExhibition();
    }

    if ($('.sort-by').length) {
        $('.sort-by').each(function () {
            $(this).click(function () {
                $(this).toggleClass('active');
            });
        });
    }

    if ($('.saved-lots-block .del-btn').length) {
        $('.saved-lots-block .del-btn').each(function () {
            $(this).click(function () {
                $(this).closest('.saved-lots-block').fadeOut();
            });
        });
    }

    if ($('.account-page-tabs').length) {
        $('.account-page-tabs').tabs();
    }

    if ($('.ui-tabs .nav-tabs-ui').length) {
        if ($('body').width() < 768 || (IsPage('account_settings') && $('body').width() < 1025)) {
            $('.ui-tabs .nav-tabs-ui').click(function () {
                $(this).toggleClass('active');
            });
        }
    }

    $('.saved-search-block .item').each(function () {
        $(this).click(function () {
            $(this).toggleClass('active');
        });
    });

    $('.help-support-question-block').click(function () {
        if ($(this).closest('.help-support-block').hasClass('active')) {
            $(this).closest('.help-support-block')
                .removeClass('active')
                .find('.help-support-answer-block')
                .slideUp();
        } else {
            $(this).closest('.help-support-list')
                .find('.active')
                .removeClass('active')
                .find('.help-support-answer-block').slideUp();
            $(this).closest('.help-support-block')
                .addClass('active')
                .find('.help-support-answer-block')
                .slideDown();
        }
    });

    $('.new-help-support-type-heading-block').click(function () {
        if ($(this).closest('.new-help-support-type-block').hasClass('active')) {
            $(this).closest('.new-help-support-type-block')
                .removeClass('active')
                .find('.new-help-support-type-body-block')
                .slideUp();
        } else {
            $(this).closest('.new-help-support-type-list')
                .find('.active')
                .removeClass('active')
                .find('.new-help-support-type-body-block').slideUp();
            $(this).closest('.new-help-support-type-block')
                .addClass('active')
                .find('.new-help-support-type-body-block')
                .slideDown();
            var top = $(this).offset().top - 70 /* height of nav */;
            $('body, html').scrollTop(top);
            setTimeout(function () {
                $('#ma-navigation').addClass('collapsed');
                $('#ma-navigation').removeClass('mobile-collapsed');
            }, 100);
        }
    });

    $('.new-help-support-question-heading-block').click(function () {
        if ($(this).closest('.new-help-support-question-block').hasClass('active')) {
            $(this).closest('.new-help-support-question-block')
                .removeClass('active')
                .find('.new-help-support-question-body-block')
                .slideUp();
        } else {
            $(this).closest('.new-help-support-type-body-block')
                .find('.new-help-support-question-block.active')
                .removeClass('active')
                .find('.new-help-support-question-body-block').slideUp();
            $(this).closest('.new-help-support-question-block')
                .addClass('active')
                .find('.new-help-support-question-body-block')
                .slideDown();
        }
    });

    var billingBlocks = $('.upgrade.billing-block.annual');

    if (billingBlocks.length > 0) {
        billingBlocks.on("click", upgradeClickAnnual);

        if (billingBlocks.length == 1)
            billingBlocks[0].click();
    }

    $(window).scroll(function () {
        fixedProgressForDesktop();
    });

    //$("#fine-uploader").fineUploader({
    //    /* options go here */
    //    //uploaderType: 'basic'
    //});

    //if ($('.art-appraisal-file .square-loader, .art-appraisal-additional-file .square-loader').length) {
    //    $('.art-appraisal-file .square-loader,.art-appraisal-additional-file .square-loader').each(function () {
    //        loaderInfinity($(this), 300);
    //    });
    //}

    fileLoaderPosition();

    $(window).resize(function () {
        setTimeout(function () {
            apcSwitch();
            rilSwitch();
            tstmsSwitch();
            dotsWidth();
            edsSwitch();
            checkerReplace();
            daterHeight();
            if ($('.checkbox-box').length) {
                auctionTableVerticalAlign();
            }
            //filterLineReplace();
            fileLoaderPosition();
        }, 100);
    });

    // popover

    var estimatorPopTemplate = [
        '<div class="popover estimator-pop-container" role="tooltip">\n\
          <div class="arrow"></div>\n\
          <div class="popover-title"></div>\n\
          <div class="popover-content"></div>\n\
        </div>'
    ].join('');

    if ($('[data-toggle="estimator-popover"]').length > 0) {
        $('[data-toggle="estimator-popover"]').popover({
            trigger: 'hover',
            template: estimatorPopTemplate
        });
    }

    // breadcrumbs
    //if ($("#breadcrumbs").length > 0)
    //    $("#breadcrumbs").rcrumbs({ ellipsis: true });

    // Sign In step 4 Building dashboard – loading

    if ($('.sing-up-loading-content').length > 0)
        buildingDashboard(1000);

    $('.show-more-accrordion .show-more').click(function () {
        var $this = $(this);
        $this.toggleClass('active');
        $this.closest('.show-more-accrordion').find('.show-more-content').slideToggle();
    });

    $(".plan-payment-type input").click(function () {
        var plan = $(this).val();
        var other = (plan != "annually" ? "annually" : "monthly");

        $(".plan-" + other).hide();
        $(".plan-" + plan).show();

        if (plan == "monthly") {
            $(".plan-block-yearly-only").addClass("plan-disabled");
        } else {
            $(".plan-block-yearly-only").removeClass("plan-disabled");
        }
    });

    if (getCookie('showGridView')) {
        const isGridView = getCookie('showGridView') === '1';
        const activeIcon = isGridView ? $('.m-icon-Grid-View') : $('.m-icon-List-View');
        const nonActiveIcon = isGridView ? $('.m-icon-List-View') : $('.m-icon-Grid-View');
        activeIcon.removeClass('icon-color-gray').addClass('active');
        nonActiveIcon.removeClass('active').addClass('icon-color-gray');
    }

    // -------------------------- FUNCTIONS ---------------------------------------------------- //

    function initSelects() {
        if ($(".select-menu").length > 0) {
            $(".select-menu").click(selectMenuClick);
            //$(window).resize(selectWinResize); //Why??
            $(".select-item").click(selectItemClick);

            $(document).mouseup(function (e) {
                var container = $(".select-menu.show");

                // if the target of the click isn't the container nor a descendant of the container
                if (!container.is(e.target) && container.has(e.target).length === 0) {
                    container.removeClass("show");
                    container.find(".please-select-item").toggleClass("hide");
                }
            });

            $(".select-menu").each(function () {
                var checkedInput = $(this).find("input[type=radio]:checked");
                if (checkedInput.length > 0)
                    this.dataset["value"] = checkedInput.val();
            });

            setSelected();

            function setSelected() {
                $(".select-menu").each(function () {
                    var checked = $(this).find("input[checked]");

                    if (checked.length > 0) {
                        $(this).prepend($(checked.closest(".select-item")[0].outerHTML));
                        var gray_select = checked.parent();
                    } else {
                        $(this).prepend($($(this).find(".select-item")[0].outerHTML));
                        var gray_select = $(this).find(".select-item:nth-child(2)");
                    }

                    gray_select.addClass("gray-light");
                });
            }

            function selectWinResize() {
                $(".select-menu").each(function () {
                    $(this).removeClass("show");
                    this.style.width == "";
                    initSize(this);
                });
            }

            function selectMenuClick() {
                $(this).toggleClass("show");
                $(this).find(".please-select-item").toggleClass("hide");
                $(this).find(".selected-item").toggleClass("hide");

                if (this.style.width == "")
                    initSize(this);
            }

            function selectItemClick() {
                var first = $(this).parent().find(".select-item")[0];
                var parent = $(this).parent();
                var selected_item = this;

                if (this == first)
                    return;

                if (typeof (parent[0].dataset["firstWidth"]) == "undefined") {
                    parent[0].dataset["firstWidth"] = $(parent).find(".select-item")[0].style.width;

                    first.style.width = this.style.width;
                }

                $(first).remove();

                parent.prepend($($(this)[0].outerHTML)).append(function () {
                    var first = $(parent).find(".select-item:first-child");
                    var input = first.find("input[type=radio]")[0];
                    input.checked = true;

                    first[0].style.width = selected_item.offsetWidth;//parent[0].dataset["firstWidth"];

                    $(parent).find(".select-item").removeClass("active");

                    $(selected_item).addClass("active");
                    $(".gray-light").removeClass("gray-light");
                    $(selected_item).addClass("gray-light");

                    if (typeof (parent[0].dataset["value"]) == "undefined" || parent[0].dataset["value"] != input.value)
                        $(parent).trigger("change");
                });
            }

            function initSize(menu_obj) {
                if ($(menu_obj).find(".select-item").hasClass("initialized"))
                    return;
                var longest = 0;

                menu_obj.style.width = "";

                $(menu_obj).find(".select-item").css("width", "").addClass("initialized");

                $(menu_obj).find(".select-item").each(function () {
                    if (this.offsetWidth > longest)
                        longest = this.offsetWidth;
                });

                var paddingRightWidth = 0;

                if (isMobile()) {
                    paddingRightWidth = 35;
                }

                $(menu_obj).find(".select-item").each(function (i) {
                    if (i == 0) {
                        this.style.width = this.offsetWidth + paddingRightWidth + "px";
                    } else if (longest > 0) {
                        this.style.width = longest + paddingRightWidth + "px";
                    }
                });

                if (longest > 0)
                    menu_obj.style.width = longest + paddingRightWidth + "px";
            }

            //if ($(".select-menu.no-resize").length)
            //    initSize($(".select-menu.no-resize")[0]);
        }
    }

    function buildingDashboard(timeout) {
        var dashboardLoadingText = [
            'Fetching <b>artists</b>',
            'Fetching <b>exhibition</b>',
            'Fetching <b>auction information</b>',
            'Fetching <b>articles</b>',
            'Setting up <b>email alerts</b>',
            'Putting your <b>dashboard</b> together'
        ];

        var i = 0;
        var j = 0;
        var textElement = 0;
        var doStuff;
        var squareClass = 'square';

        var $squareLoader = $('.square-loader-sign-up');
        var $text = $('.sing-up-loading-content .dash-description');

        doStuff = setInterval(function () {
            if (i > 23) {
                clearInterval(doStuff);
            }

            $squareLoader.removeClass().addClass('square-loader square-loader-sign-up ' + squareClass + (j + 1).toString());

            if (!(j % 4) && i > 2) {
                $text.hide().html(dashboardLoadingText[textElement]).fadeIn(500);

                console.log(j);
            }

            j++;
            i++;

            if (!(j % 4)) {
                j = 0;
                textElement++;
            }
        }, timeout);
    }

    function clearFilters() {
        $('.checkbox-filter span').each(function () {
            if ($(this).parent().hasClass('activefilter')) {
                $(this).trigger('click');
            }
        });
    }

    function clearInputText() {
        $('.search-form .advanced-search input.form-control')
            .each(function () {
                $(this).val('');
            });
    }

    // clear button show start
    function clearFilterBtnShow() {
        var activefilterQ = 0;
        $('.activefilter').each(function () {
            activefilterQ++;
        });
        if (activefilterQ > 0) {
            $('.filter-only-block').show();
        } else {
            $('.filter-only-block').hide();
        }
    }

    function tabSwitcherAuctionHouse() {
        $('.tab-btn').click(function () {
            if ($('.lot-listing').length) {
                if ($(this).hasClass('active')) {
                    // nothing
                } else {
                    $(this).parent().find('.active').removeClass('active');
                    $(this).addClass('active');
                    $('.lot-listing').hide().fadeIn();
                }
            }
        });
    }

    function sliderOn(sliderRowBlock) {
        var slider = $(sliderRowBlock).find(".slider-range");

        var mi = $(slider).parent().find('.amount-min');
        var mx = $(slider).parent().find('.amount-max');

        var miV = 0;
        if ($(mi).text()) {
            miV = parseInt($(mi).text());
        }
        var maV = 100;
        if ($(mi).text()) {
            maV = parseInt($(mx).text());
        }

        var min = 0;
        if ($(slider).attr('min')) {
            min = parseInt($(slider).attr('min'));
        }
        var max = 100;
        if ($(slider).attr('max')) {
            max = parseInt($(slider).attr('max'));
        }

        var icoleft = '';
        if ($(slider).attr('icoleft')) {
            icoleft = $(slider).attr('icoleft');
        }
        var icoright = '';
        if ($(slider).attr('icoright')) {
            icoright = $(slider).attr('icoright');
        }

        $(slider).slider({
            range: true,
            min: min,
            max: max,
            values: [miV, maV],
            slide: function (event, ui) {
                $(mi).text(icoleft + ui.values[0] + icoright);
                $(mx).text(icoleft + ui.values[1] + icoright);
            }
        });
        $(mi).text(icoleft + $(slider).slider("values", 0) + icoright);
        $(mx).text(icoleft + $(slider).slider("values", 1) + icoright);
    }

    function fileLoaderPosition() {
        if ($('.art-appraisal-file .square-loader, .art-appraisal-additional-file .square-loader').length) {
            $('.art-appraisal-file .square-loader, .art-appraisal-additional-file .square-loader').each(function () {
                var ph = $(this).parent().outerHeight();
                var pw = $(this).parent().outerWidth();
                var lh = $(this).outerHeight();
                var lw = $(this).outerWidth();
                $(this).css({
                    'top': (ph - lh) / 2,
                    'left': (pw - lw) / 2
                });
            });
        }
    }

    //filter ad
    //Assaf Bab JS  - make onclick
    function filterLineUpdate() {
        if ($('.filters-line').length) {
            $(document).on('click', ".checkbox-filter span", function () {
                var t = $(this).text();
                var data = $(this).parent().attr('for');

                if ($(this).parent().hasClass('activefilter')) {
                    $(this).parent().removeClass('activefilter');
                    $('#filter-' + data).remove();
                } else {
                    $(this).parent().addClass('activefilter');
                    $('.filters-line .clear')
                        .before('<div class="btn filter-btn" id="filter-'
                            + data + '">' + t + '</div>');
                    $('#filter-' + data).bind('click');
                }
                clearFilterBtnShow();
            });
        }
    }

    function filterLineReplace() {
        if ($('.fb-with-fl').length > 0) {
            var filters = $('.fb-with-fl');
            if ($('body').width() < 745) {
                $(filters).prependTo($('#advanced-filters')).addClass('row').show();
            } else {
                $('.more-filters-btn').append($(filters));
            }
        }
    }

    //exhibition-detail-slick - eds
    function edsOn() {
        $('.exhibition-detail-slick').addClass('slick-on').slick({
            dots: true,
            infinite: false,
            slidesToShow: 1,
            slidesToScroll: 1,
            infinite: false,
            variableWidth: true
        });
    }

    function edsOff() {
        $('.exhibition-detail-slick').removeClass('slick-on').slick('unslick');
    }

    function edsSwitch() {
        if ($('.exhibition-detail-slick').width() > 1) {
            if ($('.exhibition-detail-slick').hasClass('slick-on'))
                edsOff();

            edsOn();
        }
    }

    function checkerSelected() {
        var ch = 0;
        $('.auction-table-items-section .table-row, #art-au-lot-carousel-slick .slider-description').each(function () {
            if ($(this).find('input').is(":checked")) {
                ch++;
            }
        });
        $('#selected').text(ch);
        if (ch > 0) {
            $('.artist-auction-bottom-bar').show();
        } else {
            $('.artist-auction-bottom-bar').hide();
        }

        if (ch > 1) {
            $('#compare-no-active').hide();
            $('#compare').show();
        } else {
            $('#compare-no-active').show();
            $('#compare').hide();
        }
    }

    function checkerSelectAll() {
        $('.auction-table-items-section .table-row, #art-au-lot-carousel-slick .slider-description').each(function () {
            $(this).find('input').addClass('checked');
            $(this).find('input').prop('checked', true);
        });
        checkerSelected();
    }

    function checkerSelectNone() {
        $('.auction-table-items-section .table-row, #art-au-lot-carousel-slick .slider-description').each(function () {
            $(this).find('input').removeClass('checked');
            $(this).find('input').prop('checked', false)
        });
        checkerSelected();
    }

    function checkerReplace() {
        if ($('.checkbox-box').length) {
            $('.checkbox-box').each(function () {
                if ($('body').width() > 767) {
                    $(this).closest('.table-row').find('.img-box').before($(this));
                } else {
                    //$(this).closest('.table-row').find('.name-box').before($(this));
                    $(this).closest('.table-row').find('.artist').before($(this));
                }
                $(this).css({ 'visibility': 'visible' });
            });
        }
    }

    function auctionTableVerticalAlign() {
        $('.table-row').each(function () {
            var H = $(this).height();

            $(this).find('.vertical-block').each(function () {
                var h = $(this).height();
                if (h < H) {
                    $(this).css({
                        'top': ((H - h) / 2)
                    });
                }
            });
        });
    }

    function daterHeight() {
        if ($('.dater-block').length) {
            $('.dater-block .dater').each(function () {
                var w = $(this).width();
                $(this).css({ 'height': w });
            });
        }
    }

    function upgradeClickAnnual() {
        if ($(this).hasClass("active"))
            return;

        $(".coupon-success").html("");
        $(".billing-blocks-row").removeClass("error");
        $(this).closest('.upgrade-billing').find('.billing-block.annual.active').toggleClass('active');
        $(this).toggleClass('active');
        var cost = 0;

        cost = parseInt($(this).find('.cost span').text().replace(/,/g, ""));

        var total = $(this).closest('.upgrade-billing').find('.billing-block.total');
        var totalMob = $('.show-xs .billing-block.total');

        $(total, totalMob).addClass('active');
        $(total, totalMob).find('.desc').text("");
        $(total, totalMob).find('.cost span').text((cost));

        setActivePlanValue();

        /* Hide coupon field on monthly premium memberships */
        //if ($(this).is('.monthly.active')) {
        //    $("#CouponId").val("");
        //    $(".coupon-row, .coupon-error").addClass("hide");
        //}
        //else {
        //    $(".coupon-row, .coupon-error").removeClass("hide");
        //}

        var val = this.dataset["val"];

        $(".upgrade_show_" + val).show();
        $(".upgrade_hide_" + val).hide();
    }

    function setActivePlanValue() {
        var active_block = $(".upgrade.billing-block.active");

        if (active_block.length > 0)
            $("#PlanId").val(active_block.data("val"));
    }

    function fixedProgressForDesktop() { // By Meytal
        if ($('.appraisal-progress').length > 0) {
            var headerHeight = $('#header').outerHeight();
            var scroll = $(window).scrollTop();
            var p = $('.appraisal-progress');
            var h = p.outerHeight(true);
            var sc = 0;
            var hf = h + headerHeight + sc;
            if (!navbar.IsMobileMode()) {
                if (scroll > hf) {
                    $('#header').css({ 'margin-bottom': h });
                    $(p).stop().addClass('fixed').animate({ top: "65px" }, 500);
                } else {
                    $(p).stop().animate({ top: -150 }, 100, function () {
                        $(this).removeClass('fixed');
                        $('#header').css({ 'margin-bottom': 0 });
                    });
                }
            } else {
                // do nothing
            }
        }
    }

    function setLotsImgs() {
        $(".lot-listing img").each(function () {
            // Calculate aspect ratio and store it in HTML data- attribute
            var aspectRatio = $(this).width() / $(this).height();
            $(this).data("aspect-ratio", aspectRatio);

            // Conditional statement
            if (aspectRatio > 1) {
                // Image is landscape
                $(this).css({
                    maxWidth: "100%",
                    maxHeight: "100%",
                    width: "100%",
                    height: "auto"
                });
            } else if (aspectRatio < 1) {
                // Image is portrait
                $(this).css({
                    maxWidth: "100%",
                    width: "auto",
                    height: "100%"
                });
            } else {
                // Image is square
                $(this).css({
                    maxWidth: "100%",
                    maxHeight: "100%",
                    width: "auto",
                    height: "auto"
                });
            }
        });
    }

    function sliderArrowHeight() {
        if ($('#featured-artists-carousel-slick').width() > 1) {
            var arrowHeight = $('#featured-artists-carousel-slick').height();
            $('#featured-artists-carousel-buttons .fac-arrow').css({ 'height': arrowHeight });
        }
    }

    //Blured bg for the carousel
    function sliderBlur() {
        $('#featured-artists-carousel-slick .slick-current').each(function () {
            var bglink = $(this).find('.img-block img').attr('src');

            $('.featured-artists-carousel .blur-ie .svg-image-container image').attr('href', bglink);
        });
        sliderArrowHeight();
    }

    function sliderBlurOnSlide() {
        $('#featured-artists-carousel-slick .slick-current').each(function () {
            var bglink = $(this).find('.img-block img').attr('src');

            $('.featured-artists-carousel .blur-ie')
                .stop()
                .animate({ 'opacity': '1' }, 1000);
            $('.featured-artists-carousel .blur-ie .svg-image-container image').attr('href', bglink);
        });
    }

    function dotsWidth() {
        var dots = $('#featured-artists-carousel-slick .slick-dots');
        if ($(dots).width() > 1) {
            var mw = $('#featured-artists-carousel-slick').find('.container-fluid').width();
            $(dots).css({
                'max-width': mw
            });
        }
    }

    //Lot carousel
    function artAuSlickOn() {
        if ($('#art-au-lot-carousel-slick').length) {
            $('#art-au-lot-carousel-slick').slick({
                slidesToShow: 1,
                slidesToScroll: 1,
                infinite: false,
                responsive: [
                    {
                        breakpoint: 768,
                        settings: {
                            arrows: false
                        }
                    }
                ]
            });
        }
    }

    //Artist performance carousel On
    function apcOn() {
        $('#artist-performance-slick').addClass('slick-on').slick({
            dots: true,
            infinite: false,
            slidesToShow: 1,
            slidesToScroll: 1,
            variableWidth: true
        });
    }

    //Artist performance carousel Off
    function apcOff() {
        $('#artist-performance-slick').removeClass('slick-on').slick('unslick');
    }

    //Artist performance carousel On/Off
    function apcSwitch() {
        if ($('#artist-performance-slick').width() > 1) {
            if ($('body').width() < 1101) {
                if (!$('#artist-performance-slick').hasClass('slick-on'))
                    apcOn();
            } else {
                if ($('#artist-performance-slick').hasClass('slick-on'))
                    apcOff();
            }
        }
    }

    //Related items list - ril
    function rilOn() {
        if ($('.similar-artists.related-items-list-slick, .similar-artists .related-items-list-slick').hasClass("enable-slick")) {
            $('.similar-artists.related-items-list-slick.enable-slick, .similar-artists .related-items-list-slick.enable-slick')
                .addClass('slick-on')
                .slick(
                    {
                        dots: false,
                        infinite: true,
                        speed: 300,
                        slidesToShow: 4,
                        slidesToScroll: 4,
                        prevArrow: "<a class='slicks-left slick-arrow'><i class='m-icon-keyboard_arrow_left'></i></a>",
                        nextArrow: "<a class='slicks-right slick-arrow'><i class='m-icon-keyboard_arrow_right'></i></a>",
                        responsive: [
                            {
                                breakpoint: 1025,
                                settings: {
                                    slidesToShow: 3,
                                    slidesToScroll: 3,
                                    arrows: false,
                                    dots: true,
                                }
                            },
                            {
                                breakpoint: 769,
                                settings: {
                                    slidesToShow: 2,
                                    slidesToScroll: 2,
                                    arrows: false,
                                    dots: true,
                                }
                            },
                            {
                                breakpoint: 480,
                                settings: {
                                    slidesToShow: 1,
                                    slidesToScroll: 1,
                                    arrows: false,
                                    dots: true,
                                }
                            }
                        ]
                    }
                );
        }
        else if ($('.related-items-list-slick').width() > 1) {
            $('.related-items-list-slick').addClass('slick-on').slick({
                dots: true,
                infinite: false,
                slidesToShow: 1,
                slidesToScroll: 1,
                variableWidth: true
            });
        }
    }

    function rilOff() {
        if ($('.related-items-list-slick').width() > 1) {
            $('.related-items-list-slick').not(".enable-slick").removeClass('slick-on').slick('unslick');
        }
    }

    function rilSwitch() {
        if ($('.related-items-list-slick').width() > 1) {
            if ($('body').width() < 768) {
                if (!$('.related-items-list-slick').hasClass('slick-on'))
                    rilOn();
            } else {
                if ($('.related-items-list-slick').hasClass('slick-on'))
                    rilOff();
            }
        }
    }

    // testimonials - tstms
    function tstmsOn() {
        if ($('.testimonials-slick').length) {
            $('.testimonials-slick').addClass('slick-on').slick({
                dots: true,
                infinite: false,
                slidesToShow: 1,
                slidesToScroll: 1
            });
        }
    }

    function tstmsOff() {
        if ($('.testimonials-slick').length) {
            $('.testimonials-slick').removeClass('slick-on').slick('unslick');
        }
    }

    function tstmsSwitch() {
        if ($('body').width() < 768) {
            if (!$('.testimonials-slick').hasClass('slick-on')) {
                $('.testimonials-slick').on('init', function (event, slick) {
                    $('.testimonials-slick').show();
                });
                tstmsOn();
            }
        } else {
            if ($('.testimonials-slick').hasClass('slick-on'))
                tstmsOff();
        }
    }

    //Test text for the Autocomplete for the white background

    //styled autocomplete
    function patchAutocomplete() {
        if ($.ui) {
            $.ui.autocomplete.prototype._renderItem = function (ul, item) {
                var re = new RegExp("" + this.term, "i");
                var t = item.label.replace(re, "<strong>" + this.term + "</strong>");

                t = t.replace("(", "<small>(");
                t = t.replace(")", ")</small>");

                return $("<li></li>")
                    .data("item.autocomplete", item)
                    .append(t)
                    .appendTo(ul);
            };
        }
    }

    function globalSearchInit() {
        $('#search').click(function () {
            GTM_Send('event', 'navigation', 'Click search');

            $('#sir').stop(true, true).slideDown();

            $('.navbar .container-fluid').css({ 'visibility': 'hidden' });
            $('#sir').css({ 'visibility': 'visible' });

            $('.search-inline-results.search-inline.autocomplete-search-bar').css({ 'visibility': 'visible' });

            $('#sir').show();

            $('#sir .search-form').toggle();
            $('#sir .search-form .form-control').focus();

            var resList = $("#sir #SearchResultsList")[0];

            if (resList.style.width == "")
                resList.style.width = $("#sir input[name=q]")[0].offsetWidth + "px";
        });

        $('#sir.search-inline.autocomplete-search-bar .btn').click(function () {
            $('#search-inline-results').removeClass('active').hide();

            $('.top-navbar-ac').hide();

            $('#sir').hide();
            $('#sir .search-form').hide();
            $('#sir .result-block').hide();
            $('#sir .search-result-all-block').hide();

            $('.navbar .container-fluid').css({ 'visibility': 'visible' });
        });

        $("#sir .search-form input.form-control").on("change keyup paste", function () {
            $('#sir .result-block').slideDown(300, function () {
                $('#sir .search-result-all-block').slideDown(100, function () {
                });
            });
        });
    }

    //Featured artists carousel
    function faSlickOn() {
        if ($('#featured-artists-carousel-slick').width() > 1) {
            var faSlider = $('#featured-artists-carousel-slick');
            $(faSlider).slick({
                dots: true,
                infinite: false,
                //fade: true,
                prevArrow: "#fac-prev",
                nextArrow: "#fac-next"
            });
            $('#featured-artists-carousel-buttons').find('.fac-arrow').each(function () {
                $(this).css({
                    'height': $(faSlider).height()
                });
            });
        }
    }

    function faSlickOff() {
        if ($('#featured-artists-carousel-slick').width() > 1) {
            $('#featured-artists-carousel-slick').slick('unslick');
        }
    }

    var scrollToTopBtn = $('#scrollToTop');

    $(window).scroll(function () {
        if ($(window).scrollTop() > 300) {
            scrollToTopBtn.addClass('show');
        } else {
            scrollToTopBtn.removeClass('show');
        }
    });

    scrollToTopBtn.on('click', function (e) {
        e.preventDefault();
        $('html, body').animate({ scrollTop: 0 }, '300');
    });

    if (getParameterByName('trigger') === 'followArtist') {
        if (IsPage('artwork')) {
            $('.artwork-top-button').find('[data-command^="follow-"].btn-follow').click();
        }
        else if (IsPage('artist')) {
            $('.name-block .follow-container .btn-follow').eq(0).click();
        }
        RemovePageParameterFromURL('trigger');
    }

    $('.all-artworks-reulst').on('click', '[data-link]', function () {
        var link = $(this).data('link');
        if (link) {
            var newWindow = window.open(link, '_blank');
            if (newWindow) {
                newWindow.focus();
            }
        }
    });
});

function initShowMore() {
    $(".showmore[data-target]").each(function (i, e) {
        var t = $($(e).data("target"))[0];
        if (t.scrollHeight > t.clientHeight) {
            $(this).show();
        } else {
            $(this).hide();
        }
    });
    $(".showmore").off('click', onShowMore);
    $(".showmore").on('click', onShowMore);
}

function onShowMore() {
    $(this).parent().find("> p").css("max-height", "none");
    $(this).hide();
}
//Artwork carousel
//Lot carousel
function awSlickOn() {
    if ($('#artwork-carousel-slick').length > 0) {
        $('#artwork-carousel-slick').slick({
            dots: true,
            infinite: false,
            initialSlide: 1,
            arrows: true,
            slidesToShow: 3,
            slidesToScroll: 1,
            centerMode: true,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        initialSlide: 0,
                        slidesToShow: 1,
                    }
                }
            ]
        });
        //var elements = document.getElementsByClassName('slide-content');

        //var elementHeights = Array.prototype.map.call(elements, function (el) {
        //    return el.clientHeight;
        //});

        //var maxHeight = Math.max.apply(null, elementHeights);

        //Array.prototype.forEach.call(elements, function (el) {
        //    el.style.height = maxHeight + "px";
        //});
    }

    if ($('#gallery-artwork-carousel-slick').length > 0) {
        $('#gallery-artwork-carousel-slick').slick({
            dots: true,
            infinite: false,
            initialSlide: 1,
            arrows: true,
            slidesToShow: 3,
            slidesToScroll: 1,
            centerMode: true,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        initialSlide: 0,
                        slidesToShow: 1,
                    }
                }
            ]
        });
    }
}
function lotSlickOn() {
    if ($('#lot-carousel-slick').length && $("#lot-carousel-slick .img-block img").length > 1) {
        $('#lot-carousel-slick').on('init', function () {
            $('#lot-carousel-slick').parent().addClass("init-lot-carousel");
            $('#lot-carousel-slick .preload-wrapper').removeClass("preload-wrapper");
            $('#lot-carousel-slick .img-block').removeAttr("style");
            $('#lot-carousel-slick .img-loader').remove();
        });

        $('#lot-carousel-slick').slick({
            dots: true,
            infinite: false,
            slidesToShow: 1,
            slidesToScroll: 1,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        arrows: false
                    }
                }
            ]
        });
        $('#lot-carousel-slick > ul.slick-dots > li').on('click', function () {
            //mixpanel.track("click view next image", { "Navigation Source": "Slick Dots" });
            GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', 'click view next image');
        });
    }
}
function awDiscoverySlickOn() {
    if ($('#artworkDiscovery-carousel-slick').length > 0) {
        $('#artworkDiscovery-carousel-slick').slick({
            dots: false,
            infinite: false,
            initialSlide: 1,
            arrows: true,
            slidesToShow: 1,
            slidesToScroll: 1,
            centerMode: true,
            variableWidth: true,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        initialSlide: 0,
                    }
                }
            ]
        });
    }
}
function initAnalysisArtistPerformanceLowTitleInMobile() {
    if (isMobile()) {
        var analysisArtistPicItem = $('#analysisArtistPerformanceList').find(".analysis-artist-pic.hidden-xs").first();
        $('<div class="row no-margin margin-bottom-10"><span class="gray-light-title col-sm-12">Low performing artists</span></div>').insertAfter(analysisArtistPicItem);
    }
}
// ---------------------------------- FUNCTIONS END --------------------------------------------------- //

(function (window, $, google) {
    var MAApp = function () {
        function init() {
            //login
            setTimeout(function () {
                if (window.location.hash.toLowerCase().indexOf("login") > -1)
                    $("#login").trigger("click");
            }, 10);

            initAnalysisArtistPerformanceLowTitleInMobile();

            // map initialization on the search results page
            if (typeof google != "undefined") {
                if ($('.map-page').length)
                    initMapMapPoints();

                if ($('.exhibition-gate-page').length) {
                    moveSearchInputResponsive();
                    $(window).resize(function () {
                        moveSearchInputResponsive();
                    });
                }
            }
            initEnlargePopup();

            if ($('.input-daterange').length) {
                initDateRangePicker();
            }
            if ($('.datepicker').length) {
                initDatePicker($('.datepicker'));
            }
        }

        function GMap(container, scrollwheel, lati, long) {
            var map = init(container, scrollwheel, lati, long),
                currentMarker,
                $mobileInfoBox = $('.map-infobox-cont.mobile');

            function init(container, scrollwheel, lati, long) {
                var mLat = 51.51420;
                var mLng = -0.08410;

                if (!scrollwheel) {
                    scrollwheel = false;
                } else {
                    scrollwheel = true;
                }

                if (lati && long) {
                    mLat = lati;
                    mLng = long;
                }
                console.log('google.maps.Map - init');

                var map = new google.maps.Map($(container)[0], {
                    center: { lat: mLat, lng: mLng },
                    disableDefaultUI: true,
                    zoom: 13,
                    scrollwheel: scrollwheel,
                    //                    styles: [
                    //                        {
                    //                            featureType: "all",
                    //                            elementType: "labels.icon",
                    //                            stylers: [
                    //                                {visibility: "off"}
                    //                            ]
                    //                        }
                    //                    ],
                    styles: greyMapStyle
                }),
                    $zoomInBtn = $('<button class="map-zoom-btn zoom-in">'),
                    $zoomOutBtn = $('<button class="map-zoom-btn zoom-out">');

                map.addListener('click', function () {
                    if ($mobileInfoBox.is(':visible')) {
                        unsetCurrentMarker();
                    }
                });

                $zoomInBtn.off('click').on('click', function () {
                    map.setZoom(map.getZoom() + 1);
                });
                $zoomOutBtn.off('click').on('click', function () {
                    map.setZoom(map.getZoom() - 1);
                });

                $(container).wrap('<div class="gmap-wrapper">')
                    .parent()
                    .append($zoomInBtn)
                    .append($zoomOutBtn);

                //=== ASSAF BA ============================================
                var viewportBox;

                map.setOptions({ minZoom: 8 });

                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                    google.maps.event.addListener(map,
                        'idle',
                        function (event) {
                            //debugger;
                            var bounds = map.getBounds();
                            var currentZoom = map.getZoom();
                            var currentCenter = map.getCenter();
                            var ne = bounds.getNorthEast();
                            var sw = bounds.getSouthWest();

                            var viewportPoints = [
                                ne, new google.maps.LatLng(ne.lat(), sw.lng()),
                                sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
                            ];

                            mapCount = mapCount + 1;
                            var isFirstTimeHash = (document.location.hash.length === 0);

                            document.location.hash =
                                "ne=" + ne.lat() + "," + ne.lng() +
                                "&sw=" + sw.lat() + "," + sw.lng() +
                                "&z=" + currentZoom +
                                "&c=" + currentCenter.lat() + ',' + currentCenter.lng();

                            window.onhashchange = function () {
                                var hash = document.location.hash;

                                var mapChanged = (hash.indexOf("#ne") > -1 && hash.indexOf("&sw") > -1);

                                if (mapChanged) {
                                    if (!isFirstTimeHash)
                                        setTimeout(function () { $('#mapBtn').trigger('click'); }, 500);

                                    var searchString = createQuerystringOnApply();
                                    var artistSearchParam = '';

                                    if (paramExists("Artist")) {
                                        artistSearchParam = 'Artist=' + getParameterByName('Artist');

                                        searchString = removeParam(searchString, "Artist");

                                        searchString = searchString +
                                            (searchString.indexOf("?") > -1 ? "&" : "?") +
                                            artistSearchParam;
                                    }

                                    searchString = removeParam(searchString, "ne");
                                    searchString = removeParam(searchString, "sw");

                                    //Rewrite Url with Geo location
                                    var loc = window.location.pathname +
                                        searchString +
                                        (searchString.indexOf("?") > -1 ? "&" : "?") +
                                        window.location.hash.substring(1) +
                                        window.location.hash;

                                    window.history.pushState("page1", "pageTitle", loc);
                                }
                            }

                            function paramExists(param) {
                                return window.location.search.indexOf(param + "=") > -1;
                            }

                            function removeParam(searchString, param) {
                                if (!paramExists(param))
                                    return searchString;
                                var toReplace = param + '=' + getParameterByName(param);
                                searchString = searchString.replace('?' + toReplace, '').replace('&' + toReplace, '');
                                return searchString;
                            }

                            $('#mapDrawPointsBtn')
                                .unbind('click')
                                .bind('click',
                                    function (event) {
                                        //debugger;
                                        updateMapPoints();
                                    });

                            if (!isFirstTimeHash) {
                                $('.searchByCity').val('');
                                $('.searchByCity').attr("placeholder", "Current map location");
                            }
                        });
                }
                //===========================================================

                return map;
            }

            function buildInfoBox(info) {
                var $cont = $($('#map-infobox-tpl').html()),
                    $eventRow = $cont.find('.event-line').clone(),
                    infowindow;

                $cont.find('.event-line').remove();
                $cont.find('.place-name').text(info.place);

                //debugger;
                //=== Assaf Baba ==========
                $cont.find('.place-link').attr('href', info.placeLink);
                //=========================

                $(info.events).each(function (i, evnt) {
                    var $row = $eventRow.clone();

                    //=== Assaf Baba ==========
                    $row.first('.event-line').attr('href', evnt.eventLink);
                    //=========================

                    $row.find('.img-box img').attr('src', evnt.img);
                    $row.find('.event-name').text(evnt.name);
                    $row.find('.start .month').text(evnt.start.m);
                    $row.find('.start .day').text(evnt.start.d);
                    $row.find('.start .year').text(evnt.start.y);
                    $row.find('.end .month').text(evnt.end.m);
                    $row.find('.end .day').text(evnt.end.d);
                    $row.find('.end .year').text(evnt.end.y);
                    $cont.find('.event-lines').append($row);
                });

                infowindow = new google.maps.InfoWindow({
                    content: $cont.html()
                });

                infowindow.addListener('closeclick', function () {
                    unsetCurrentMarker();
                });

                return infowindow;
            }

            function addMarker(lat, lng, info) {
                var pinIcon = new google.maps.MarkerImage(
                    '/img/map-marker.svg',
                    null,
                    null,
                    null,
                    new google.maps.Size(30, 38)
                );

                marker = new google.maps.Marker({
                    position: { lat: lat, lng: lng },
                    map: map,
                    title: info.place,
                    icon: pinIcon
                }),
                    infowindow = buildInfoBox(info);

                marker.infobox = infowindow;
                marker.addListener('click',
                    function () {
                        if (currentMarker !== this) {
                            setCurrentMarker(this);
                        }
                    });

                markers.push(marker);
                return marker;
            }

            function setCurrentMarker(marker) {
                unsetCurrentMarker();
                var pinIcon = new google.maps.MarkerImage(
                    '/img/map-marker-current.svg',
                    null, null, null,
                    new google.maps.Size(30, 38)
                );
                currentMarker = marker;
                marker.setIcon(pinIcon);
                if (!$('.navbar .navbar-toggle.collapsed').is(':visible')) {
                    marker.infobox.open(map, marker);
                } else {
                    $mobileInfoBox
                        .removeClass('hidden-on-mobile')
                        .find('.map-infobox')
                        .html(marker.infobox.getContent());

                    centerMapOnMobile();
                }
            }

            function unsetCurrentMarker() {
                if ($mobileInfoBox.is(':visible')) {
                    $mobileInfoBox.addClass('hidden-on-mobile');
                    centerMapOnMobile();
                }
                if (currentMarker) {
                    currentMarker.infobox.close();
                    var pinIcon = new google.maps.MarkerImage(
                        '/img/map-marker.svg',
                        null, null, null,
                        new google.maps.Size(30, 38)
                    );
                    currentMarker.setIcon(pinIcon);
                }
                currentMarker = null;
            }

            function addMarkerGroup(opts) {
                opts = $.extend({
                    styles: [
                        {
                            url: '/img/map-ellipse.svg',
                            textColor: '#fff',
                            height: 73,
                            width: 73,
                            anchor: [0, 0],
                            textSize: 11
                        }
                    ],
                    maxZoom: 15
                }, opts);

                return new MarkerClusterer(map, [], opts);
            }

            function setMapOnAll(map) {
                for (var i = 0; i < markers.length; i++) {
                    markers[i].setMap(map);
                }
            }

            function clearMarkers() {
                setMapOnAll(null);
            }

            function deleteMarkers() {
                clearMarkers();
                markers = [];
            }

            function clearClusters() {
                deleteMarkers();
            }

            function centerMapOnMobile() {
                if (!currentMarker) {
                    return;
                }
                var $mapCont = $(map.getDiv()).parent(),
                    newBottom = $mobileInfoBox.is(':visible') ? $mobileInfoBox.outerHeight() : 0;

                $mapCont.css('bottom', newBottom);
                google.maps.event.trigger(map, 'resize');
                map.panTo(currentMarker.getPosition());
            }

            return {
                'init': init,
                'addMarker': addMarker,
                'addMarkerGroup': addMarkerGroup,
                'clearClusters': clearClusters,
                'map': map
            };
        }

        function initMapMapPoints() {
            var mLatitude = null;
            var mLongitude = null;

            var locationName = htm2txt(getLocationNameFromUrl());

            if (locationName) {
                var geocoder = new google.maps.Geocoder();
                //async function
                console.log('google.maps.Geocoder - initMapMapPoints');

                geocoder.geocode({ 'address': locationName },
                    function (results, status) {
                        //debugger;
                        if (status === google.maps.GeocoderStatus.OK) {
                            //Center map by params from Query string
                            var lastCenter = getCoordinatesFromUrl();
                            if (lastCenter) {
                                mLatitude = parseInt(lastCenter[0], 10);
                                mLongitude = parseInt(lastCenter[1], 10);;
                            } else {
                                //Center Map By Google Api
                                mLatitude = results[0].geometry.location.lat();
                                mLongitude = results[0].geometry.location.lng();
                                //gmap.map.setCenter(new google.maps.LatLng(mLatitude, mLongitude));
                            }

                            if (exhibitionsMap.length > 0) {
                                if (exhibitionsMap[0].lat) {
                                    mLatitude = exhibitionsMap[0].lat;
                                    mLongitude = exhibitionsMap[0].lng;
                                }
                            }

                            gmap = new GMap('#gmap', null, mLatitude, mLongitude),
                                mrkGrp = gmap.addMarkerGroup(),
                                testLocations = exhibitionsMap;

                            //updateMapPoints();

                            setTimeout(function () {
                                $('#mapBtn').trigger('click');
                            }, 1500);

                            //gmap.map.setCenter(new google.maps.LatLng(mLatitude, mLongitude));

                            //updateMapPoints();
                            $('.searchByCity').val(locationName);
                        } else {
                            initMapMapPointsByFirstCall();
                            centerMapByUrlHash();
                        }

                        var lastZoom = getParameterByName('z');
                        if (lastZoom) {
                            var zoomNum = parseInt(lastZoom, 10);
                            gmap.map.setZoom(zoomNum);
                        }

                        //updateMapPoints();
                    });
            } else {
                initMapMapPointsByFirstCall();
                centerMapByUrlHash();
            }

            //CallInitMap(mLat, mLng, '');

            if (window.location.search.indexOf("Artist=") > -1) {
                setTimeout(function () {
                    $('#artistReload').trigger('click');
                }, 2000);
            }
        }

        function centerMapByUrlHash() {
            var lastCenter = getCoordinatesFromUrl();
            if (lastCenter) {
                gmap.map.setCenter(new google.maps.LatLng(lastCenter[0], lastCenter[1]));
            }
        }

        function getCoordinatesFromUrl() {
            var retVal = null;
            var lastCenter = getParameterByName('c');
            if (lastCenter) {
                retVal = lastCenter.split(',');
            }

            return retVal;
        }

        function initMapMapPointsByFirstCall() {
            if (typeof (testLocations) == "undefined") testLocations = exhibitionsMap;
            if (typeof (gmap) == "undefined") gmap = new GMap('#gmap');
            if (typeof (mrkGrp) == "undefined") mrkGrp = gmap.addMarkerGroup();

            var mLat = null;
            var mLng = null;

            $(testLocations).each(function (i, loc) {
                if (loc.lat) {
                    var mrk = gmap.addMarker(loc.lat, loc.lng, { place: loc.place, events: loc.events, placeLink: loc.placeLink });
                    mrkGrp.addMarker(mrk);

                    if (loc.lat !== null && loc.lng !== null) {
                        mLat = loc.lat;
                        mLng = loc.lng;
                    }
                }
            });

            //if (mLat === null) {
            //    mLat = 51.51420;
            //    mLng = -0.08410;
            //}
            //gmap.map.setCenter(new google.maps.LatLng(mLat, mLng));
        }

        function getLocationNameFromUrl() {
            var locationName = null;
            var cutFrom = 'BrowseMap';
            var indexCutFrom = window.location.pathname.indexOf(cutFrom);

            if (indexCutFrom > 0) {
                locationName = window.location.pathname.substr(indexCutFrom + cutFrom.length + 1);
                var indexCutTo = locationName.indexOf('/');
                locationName = locationName.substring(0, indexCutTo);
                locationName = replaceAll(locationName, '--', ', ');
                locationName = replaceAll(locationName, '-', ' ');
            }

            return locationName;
        }

        function updateMapPoints() {
            var mLat = null;
            var mLng = null;

            //var gmap = GMap('#gmap'),
            //    mrkGrp = gmap.addMarkerGroup(),
            //    testLocations = exhibitionsMap;

            //gmap.clearClusters();
            //gmap.mrkGrp = [];
            //gmap.mrkGrp = null;

            //gmap.testLocations = [];

            //debugger;
            //gmap.clearClusters();
            gmap.mrkGrp = gmap.addMarkerGroup();
            gmap.testLocations = exhibitionsMap;

            //1. Assaf Bab - if not found response in center map - Get data from first response
            if (mapCount < 3 && exhibitionsMap.length === 0) {
                gmap.testLocations = exhibitionsFirstTimeMap;
            }

            $(gmap.testLocations).each(function (i, loc) {
                if (loc.lat) {
                    //debugger;
                    var mrk = gmap.addMarker(loc.lat, loc.lng, { place: loc.place, events: loc.events, placeLink: loc.placeLink });
                    gmap.mrkGrp.addMarker(mrk);

                    mLat = loc.lat;
                    mLng = loc.lng;

                    //2. Assaf Bab - if not found response in center map - Get data from first response
                    if (mapCount < 3 && exhibitionsMap.length === 0) {
                        if (loc.lat !== null && loc.lng !== null) {
                            gmap.map.setCenter(new google.maps.LatLng(mLat, mLng));
                            var locationName = getLocationNameFromUrl();
                            $('.searchByCity').val(locationName);
                            document.location.hash = '';
                            setTimeout(function () {
                                $('#mapBtn').trigger('click');
                            }, 500);
                        }
                    }
                }
            });
        }

        function moveSearchInputResponsive() {
            var _isMobile = $('.navbar .navbar-toggle.collapsed').is(':visible'),
                $search = $('.search-form-exhibition'),
                $desctopCont = $('.autocomplete-search-bar-wide'),
                $mobileCont = $('#autocomplete-search-bar-small');

            if (_isMobile) {
                if ($search.parent()[0] === $desctopCont[0]) {
                    $mobileCont.append($search);
                }
            } else {
                if ($search.parent()[0] === $mobileCont[0]) {
                    $desctopCont.append($search);
                }
            }
            $mobileCont.toggleClass('hidden', !_isMobile);
            $desctopCont.toggleClass('hidden', _isMobile);
        }

        function onZoomIn(e) {
            var $e = $(".lg-outer");
            var z = $e.data("zoom") || 0;
            if (z >= 6) {
                $("#lg-zoom-in").css("pointer-events", "none");
                return false;
            }
            $e.data("zoom", z + 1);
        }

        function onZoomOut(e) {
            var $e = $(".lg-outer");
            var z = $e.data("zoom") || 0;
            if (z > 0) {
                $e.data("zoom", z - 1);
                $("#lg-zoom-in").css("pointer-events", "auto");
            }
        }

        function initEnlargePopup() {
            $('body').on('click', '.enlarge', function (event) {
                var $nearest = $(event.target).parents(".lot-carousel-slick");
                var $carousel = $("#lot-carousel-slick").length ? $("#lot-carousel-slick") :
                    ($nearest.length ? $nearest : $(".lot-carousel-slick"));

                startLodder("#lot-carousel-slick", true);
                event.stopPropagation();
                GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'Enlarge Image');
                mixpanel.track("View image full screen");

                var mapper = function (i, e) {
                    return {
                        src: e.dataset.src || e.dataset.srcLarge,
                        //thumb: e.src,
                        //w: e.dataset.w,
                        //h: e.dataset.h,
                        //pid: 'gimg_' + i
                    };
                }
                var dynArr = [];
                if (!$carousel.length && $(event.target).is("img")) {
                    dynArr = [mapper(i, event.target)];
                } else {
                    dynArr = $carousel.find("img[data-src]").map(mapper).toArray();
                }

                if (dynArr.length) {
                    if (!$(".swiper-container-modal").length) {
                        $("body").prepend('<div class="swiper-container-modal" style="display:none;"> <div class="swiper-container"> <div class="swiper-wrapper"></div><div class="swiper-pagination"></div><div class="swiper-button-next"></div><div class="swiper-button-prev"></div><div class="swiper-controls"> <button class="sw sw-zoomout"><i class="m-icon-zoom_out"></i></button> <button class="sw sw-zoomin"><i class="m-icon-zoom_in"></i></button> <button class="sw sw-close"><i class="m-icon-menu-close"></i></button> </div></div></div>');
                    }

                    if (dynArr.length == 1) {
                        $(".swiper-container .swiper-button-next, .swiper-container .swiper-button-prev").hide();
                    } else {
                        $(".swiper-container .swiper-button-next, .swiper-container .swiper-button-prev").show();
                    }

                    self.isManualSlideChange = false;
                    $(".swiper-container-modal").fadeIn(200);
                    AddScriptStyleResources(window.Swiper, cloud_cache_dir + "/assets/swiper/swiper-bundle.min.js", [cloud_cache_dir + "/assets/swiper/swiper-bundle.min.css"],
                        function (isLoad) {
                            stopLodder("#lot-carousel-slick")
                            $("html, body").css("overflow", "hidden");
                            var di = $(event.target).parents("[data-slick-index]").data("slick-index");
                            var isPinch = false;
                            var lastZoom = 1;
                            self.isManualSlideChange = di > 0;
                            if (isLoad || (window.ArtworkSwiper == null || window.ArtworkSwiper.destroyed === true)) {
                                window.ArtworkSwiper = new Swiper('.swiper-container', {
                                    centeredSlides: true,
                                    zoom: true,
                                    observer: true,
                                    observeParents: true,
                                    initialSlide: di,
                                    virtual: {
                                        slides: (function () {
                                            var slides = [];
                                            for (var i = 0; i < dynArr.length; i += 1) {
                                                slides.push('<div class="swiper-zoom-container"><img src="{0}" /></div>'.format(dynArr[i].src));
                                            }
                                            return slides;
                                        }())
                                    },
                                    // If we need pagination
                                    pagination: {
                                        el: '.swiper-pagination',
                                        type: 'fraction',
                                    },
                                    // Navigation arrows
                                    navigation: {
                                        nextEl: '.swiper-button-next',
                                        prevEl: '.swiper-button-prev',
                                    },
                                    breakpoints: {
                                    },
                                    on: {
                                        doubleTap: function () {
                                            GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', 'Double tap zoom');
                                            //mixpanel.track("Double tap zoom");
                                        },
                                        slideChange: function () {
                                            isPinch = false;
                                            if (!self.isManualSlideChange) {
                                                GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', 'change slide');
                                            }
                                            self.isManualSlideChange = false;
                                            //mixpanel.track("Change slide");
                                        },
                                        zoomChange: function (sw, scale, imageEl, slideEl) {
                                            if (!isPinch && scale % 1 !== 0) {
                                                GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', scale > lastZoom ? 'Pinch in' : 'Pinch out');
                                                //mixpanel.track(scale > lastZoom ? 'Pinch in' : 'Pinch out');
                                                isPinch = true;
                                            }
                                            lastZoom = scale;
                                        }
                                    }
                                });
                                $(".sw-close").on("click", function () {
                                    if (ArtworkSwiper && !$('.lot-detail-page').length && !$('.v2__l-artwork-detail').length) {
                                        ArtworkSwiper.destroy();
                                        $(".swiper-container-modal").remove();
                                    }
                                    $("html, body").css("overflow", "initial");
                                    $(".swiper-container-modal").fadeOut(200);
                                });
                                $(".sw-zoomin").click(function () {
                                    window.ArtworkSwiper.zoom.in();
                                    GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', 'zoom in');
                                    //mixpanel.track("Zoom in");
                                });
                                $(".sw-zoomout").click(function () {
                                    window.ArtworkSwiper.zoom.out();
                                    GTM_Send('event', GTM_EVENT_TYPE.ARTWORK, 'click', 'zoom out');
                                    //mixpanel.track("Zoom out");
                                });
                            } else {
                                window.ArtworkSwiper.slideTo(di);
                                window.ArtworkSwiper.update();
                            }
                        });
                }
            });
        }

        function initDateRangePicker() {
            $('.input-daterange').each(function () {
                initDatePicker($(this));
            }).on('show', function (e) {
                var dp = $(e.currentTarget).data('datepicker');
                $(dp.pickers).each(function (i) {
                    var $days = $(this.picker).find('.datepicker-days tbody td');
                    $days.on('mouseover', function () {
                        if ($days.filter('.selected').length === 1) {
                            var $selected = $days.filter('.selected'),
                                $this = $(this),
                                s1 = i ? $days.index($selected) : $days.index($this),
                                s2 = i ? $days.index($this) : $days.index($selected);
                            $days.each(function (i) {
                                if (i > s1 && i < s2) {
                                    $(this).addClass('range');
                                } else {
                                    $(this).removeClass('range');
                                }
                            });
                        }
                    });
                });
            });
        }

        function initDatePicker($elem) {
            if ($elem.children("input[type='date']").length)
                return;
            $.fn.datepicker.dates['en']['daysMin'] = ["S", "M", "T", "W", "T", "F", "S"];
            $elem.datepicker({
                format: {
                    toDisplay: function (date) {
                        return $.datepicker.formatDate("d M", new Date(date));
                    },
                    toValue: function (date) {
                        return $.datepicker.formatDate("yy-mm-dd", new Date(date));
                    }
                },
                templates: {
                    leftArrow: '&nbsp;',
                    rightArrow: '&nbsp;'
                },
                orientation: 'bottom',
                autoclose: true
            })
                .on('show', function (e) {
                    var dp = $(e.currentTarget).data('datepicker'),
                        pickers = [];
                    if (dp.pickers) {
                        $(dp.pickers).each(function () {
                            pickers.push(this.picker);
                        });
                    } else {
                        pickers = [dp.picker];
                    }
                    $(pickers).each(function (i) {
                        var $days = $(this).find('.datepicker-days tbody td');
                        $days.each(function () {
                            var $td = $(this),
                                txt = $td.text();
                            $td.html('<span class="day">' + txt + '</span>');
                        });
                    });
                });
            return $(this);
        }

        return {
            "init": init,
            "initDatePicker": initDatePicker,
            "GMap": GMap
        };
    };

    window['MAApp'] = new MAApp;
})(window, jQuery, window['google']);

$(window).on('load', function () {
    if ($('.grid-masonry').length && !IsPage('artist_discovery')) {
        $('.grid-masonry').masonry();
        InitFollowButtons();
    }
});

function loaderInfinity(el, timeout) {
    var i = 0, j = 0, loader;
    var squareClass = 'square';
    //var $squareLoader = $('.square-loader');
    var $squareLoader = el;
    $squareLoader.removeClass().addClass('square-loader ' + squareClass + (j + 1).toString());
    loader = setInterval(function () {
        //todo - clear interval if we need it
        //if (i > 23) {clearInterval(loader);}
        if (j > 3) {
            j = 0;
        }
        $squareLoader.removeClass().addClass('square-loader square-loader-sign-up ' + squareClass + (j + 1).toString());
        j++;
        i++;
    }, timeout);
}

function uploadImageClick(imageDiv) {
    if ($(imageDiv).hasClass('loading') || $(imageDiv).hasClass('loaded')) {
        //do nothing
    } else {
        if (!($(imageDiv).hasClass('loaded')) || typeof (that) == "undefined")
            that = $(imageDiv);

        $("#fileupload").trigger('click');

        if ($(imageDiv).hasClass('loaded'))
            $(imageDiv).removeClass('loaded');
    }
}

function positionFileLoader(loader) {
    var ph = $(loader).parent().outerHeight();
    var pw = $(loader).parent().outerWidth();
    var lh = $(loader).outerHeight();
    var lw = $(loader).outerWidth();
    $(loader).css({
        'top': ((ph - lh) / 2) - 15,
        'left': (pw - lw) / 2
    });
}

function uploadeImageDelete(imageDiv) {
    that = $(imageDiv);
    removeImage();
}
function uploadeImageEdit(imageDiv) {
    var imageId = $(imageDiv).closest('.img-bg').find('img').attr('id');
    if (window["Cropper"] === undefined) {
        $("<link/>", {
            rel: "stylesheet",
            type: "text/css",
            href: "/js/cropper/cropper.min.css"
        }).appendTo("head");
        $.getScript("/js/cropper/cropper.min.js", function (x) {
            CustomAjaxLoad(null, $(".collectionResourcePartialEdit-load"), self.EditResourceID, null,
                function (html) {
                    OnLoadEditResource(html);
                    if (!self._EditResourceCropActive)
                        StopLoader(tableElm);
                });
        });
    }
    console.log(imageDiv);
}

function htm2txt(text) {
    var Converts = getConverts();

    var has = Array("&#", "&", "%", "%");

    for (var col = 0; col <= 3; col++) {
        for (var row = 0; text.split(has[col]).length > 1 && row < Converts.length; row++) {
            text = text.replace(Converts[row][col], Converts[row][4]);
            text = text.replace(Converts[row][col].toLowerCase(), Converts[row][4]);
        }
    }

    return text;

    function getConverts() {
        return Array(
            Array("&#192;", "&Agrave;", "%C3%80", "%C0", "À"),
            Array("&#193;", "&Aacute;", "%C3%81", "%C1", "Á"),
            Array("&#194;", "&Acirc;", "%C3%82", "%C2", "Â"),
            Array("&#195;", "&Atilde;", "%C3%83", "%C3", "Ã"),
            Array("&#196;", "&Auml;", "%C3%84", "%C4", "Ä"),
            Array("&#197;", "&Aring;", "%C3%85", "%C5", "Å"),
            Array("&#198;", "&AElig;", "%C3%86", "%C6", "Æ"),
            Array("&#199;", "&Ccedil;", "%C3%87", "%C7", "Ç"),
            Array("&#200;", "&Egrave;", "%C3%88", "%C8", "È"),
            Array("&#201;", "&Eacute;", "%C3%89", "%C9", "É"),
            Array("&#202;", "&Ecirc;", "%C3%8A", "%CA", "Ê"),
            Array("&#203;", "&Euml;", "%C3%8B", "%CB", "Ë"),
            Array("&#204;", "&Igrave;", "%C3%8C", "%CC", "Ì"),
            Array("&#205;", "&Iacute;", "%C3%8D", "%CD", "Í"),
            Array("&#206;", "&Icirc;", "%C3%8E", "%CE", "Î"),
            Array("&#207;", "&Iuml;", "%C3%8F", "%CF", "Ï"),
            Array("&#208;", "&ETH;", "%C3%90", "%D0", "Ð"),
            Array("&#209;", "&Ntilde;", "%C3%91", "%D1", "Ñ"),
            Array("&#210;", "&Ograve;", "%C3%92", "%D2", "Ò"),
            Array("&#211;", "&Oacute;", "%C3%93", "%D3", "Ó"),
            Array("&#212;", "&Ocirc;", "%C3%94", "%D4", "Ô"),
            Array("&#213;", "&Otilde;", "%C3%95", "%D5", "Õ"),
            Array("&#214;", "&Ouml;", "%C3%96", "%D6", "Ö"),
            Array("&#216;", "&Oslash;", "%C3%98", "%D8", "Ø"),
            Array("&#217;", "&Ugrave;", "%C3%99", "%D9", "Ù"),
            Array("&#218;", "&Uacute;", "%C3%9A", "%DA", "Ú"),
            Array("&#219;", "&Ucirc;", "%C3%9B", "%DB", "Û"),
            Array("&#220;", "&Uuml;", "%C3%9C", "%DC", "Ü"),
            Array("&#221;", "&Yacute;", "%C3%9D", "%DD", "Ý"),
            Array("&#222;", "&THORN;", "%C3%9E", "%DE", "Þ"),
            Array("&#223;", "&szlig;", "%C3%9F", "%DF", "ß"),
            Array("&#224;", "&agrave;", "%C3%A0", "%E0", "à"),
            Array("&#225;", "&aacute;", "%C3%A1", "%E1", "á"),
            Array("&#226;", "&acirc;", "%C3%A2", "%E2", "â"),
            Array("&#227;", "&atilde;", "%C3%A3", "%E3", "ã"),
            Array("&#228;", "&auml;", "%C3%A4", "%E4", "ä"),
            Array("&#229;", "&aring;", "%C3%A5", "%E5", "å"),
            Array("&#230;", "&aelig;", "%C3%A6", "%E6", "æ"),
            Array("&#231;", "&ccedil;", "%C3%A7", "%E7", "ç"),
            Array("&#232;", "&egrave;", "%C3%A8", "%E8", "è"),
            Array("&#233;", "&eacute;", "%C3%A9", "%E9", "é"),
            Array("&#234;", "&ecirc;", "%C3%AA", "%EA", "ê"),
            Array("&#235;", "&euml;", "%C3%AB", "%EB", "ë"),
            Array("&#236;", "&igrave;", "%C3%AC", "%EC", "ì"),
            Array("&#237;", "&iacute;", "%C3%AD", "%ED", "í"),
            Array("&#238;", "&icirc;", "%C3%AE", "%EE", "î"),
            Array("&#239;", "&iuml;", "%C3%AF", "%EF", "ï"),
            Array("&#240;", "&eth;", "%C3%B0", "%F0", "ð"),
            Array("&#241;", "&ntilde;", "%C3%B1", "%F1", "ñ"),
            Array("&#242;", "&ograve;", "%C3%B2", "%F2", "ò"),
            Array("&#243;", "&oacute;", "%C3%B3", "%F3", "ó"),
            Array("&#244;", "&ocirc;", "%C3%B4", "%F4", "ô"),
            Array("&#245;", "&otilde;", "%C3%B5", "%F5", "õ"),
            Array("&#246;", "&ouml;", "%C3%B6", "%F6", "ö"),
            Array("&#248;", "&oslash;", "%C3%B8", "%F8", "ø"),
            Array("&#249;", "&ugrave;", "%C3%B9", "%F9", "ù"),
            Array("&#250;", "&uacute;", "%C3%BA", "%FA", "ú"),
            Array("&#251;", "&ucirc;", "%C3%BB", "%FB", "û"),
            Array("&#252;", "&uuml;", "%C3%BC", "%FC", "ü"),
            Array("&#253;", "&yacute;", "%C3%BD", "%FD", "ý"),
            Array("&#254;", "&thorn;", "%C3%BE", "%FE", "þ"),
            Array("&#255;", "&yuml;", "%C3%BF", "%FF", "ÿ"),
            Array("&#338;", "&OElig;", "%C5%92", "%u0152", "Œ"),
            Array("&#339;", "&oelig;", "%C5%93", "%u0153", "œ"),
            Array("&#352;", "&Scaron;", "%C5%A0", "%u0160", "Š"),
            Array("&#353;", "&scaron;", "%C5%A1", "%u0161", "š"),
            Array("&#376;", "&Yuml;", "%C5%B8", "%u0178", "Ÿ"),
            Array("&#402;", "&fnof;", "%C6%92", "%u0192", "ƒ")
        );
    }
}

function AddPageParamter(key, value) {
    if (value) {
        var search = location.search;
        if (search.indexOf(key) > 0) return;
        search += (search.startsWith("?") ? "&" : "?") + key + "=" + value;
        window.history.pushState("page1", "pageTitle", location.origin + location.pathname + search);
    }
}

function RemovePageParameterFromURL(param) {
    if (getParameterByName(param) != null) {
        var page = RemovePageParameter(window.location.href, param.toLowerCase());

        window.history.replaceState({
            urlPath: page
        }, "", page);

        CleanURLend();
    }
}

function RemovePageParameter(page, param) {
    var retPage = "";
    var parts = page.replace("?", "&").split("&");

    for (var i = 0; i < parts.length; i++)
        if (parts[i].length >= 2 && (parts[i].substr(0, param.length + 1).toLowerCase() != param + "="))
            retPage += parts[i] + "&";
    retPage = retPage.replace("&", "?");
    if (retPage.length > 1 && retPage[retPage.length - 1] == "&")
        retPage = retPage.substring(0, retPage.length - 1);
    return retPage;
}

function CleanHash() {
    window.location.hash = "";
    CleanURLend();
}

function CleanURLend() {
    var page = window.location.href;
    if (page.substr(-1) == "#") page = page.replace("#", "");
    //if (page.substr(-1) == "&") page = page.replace("&", "");
    if (page.substr(-1) == "?") page = page.replace("?", "");

    window.history.replaceState({ urlPath: page }, "", page);
}

function runCommand() {
    var cmd = getParameterByName("command");
    var elm = $("[data-command='" + cmd + "']");
    if (cmd && elm.length > 0) {
        if (cmd.indexOf('follow-') !== -1) {
            RemovePageParameterFromURL("command");
            return;
        }
        elm.trigger("click");
        RemovePageParameterFromURL("command");
    }
}

//function runReferral() {
//    var dataObj = sessionStorage["refferal_orderid_send"];

//    if (dataObj != null) {
//        dataObj = JSON.parse(dataObj);

//        var urlImg = "https://www.ref-r.com/campaign/t1/settings?bid_e=E568BF5F55AAA395A70CD0D882CE602F&bid=25976&t=420&event=sale&email=" + dataObj.email + "&orderID=" + dataObj.orderID + "&purchaseValue=" + dataObj.purchaseValue + "&fname=" + dataObj.fname;
//        $("head").append('<img style="display:none;" src="' + urlImg + '">');

//        sessionStorage.removeItem("refferal_orderid_send");
//    }
//}

function runVoucher() {
    var voucher = getParameterByName("voucher");
    //var refferal_orderid = getParameterByName("ir_co");

    if (voucher) {
        sessionStorage["voucher"] = voucher;
        RemovePageParameterFromURL("voucher");
        if ($("#couponCode").length && !IsPage('upgrade')) {
            $([document.documentElement, document.body]).animate({
                scrollTop: $("#couponCode").offset().top
            }, 2000);
        }
    }
    //if (refferal_orderid) {
    //    sessionStorage["refferal_orderid"] = refferal_orderid;
    //    RemovePageParameterFromURL("refferal_orderid");
    //}
}
function runNoDefaultSelect(name) {
    var voucher = getParameterByName(name);

    if (voucher) {
        sessionStorage[name] = voucher;
        RemovePageParameterFromURL(name);
    }
}
function constructButton(btn) {
    var tag = btn.tag || "a";
    var attributes = "";
    for (var att in btn.atts) {
        attributes += "{0}='{1}' ".format(btn.atts[att]["name"], btn.atts[att]["value"]);
    }
    return "<{0} {1}>{2}</{0}>".format(tag, attributes, btn.text);
}
function maAlertMessage(message, buttons, callback, header, nextButtonCss, popupName, afterText, popupclass, afterCreationCallback = null , preventHide = false) {
    if (window['navbar'] && window['navbar'].IsMobileMode() && $("body").hasClass("menu-open")) {
        window['navbar'].ToggleOpen();
    }
    var position = $(window).scrollTop();
    var headerText = "";
    if (header) {
        headerText = '<div class="modal-header">' + header + '</div>';
    }
    var html = '<div class="plans-popup ma-alert-message modal fade cancel-popup {0}" role="dialog">'.format(popupclass || "") +
        '<div class="modal-dialog" ><div class="modal-content"><button type="button" id="modal_close_btn"  name="_close" class="close" data-dismiss="modal" aria-label="Close"></button>' +
        headerText +
        '<div class="modal-body text-center text-[#131721]">' + message + '<div class="row"><div class="button-container margin-top-25 mt-6">';
    var isObject = false;
    for (var btn in buttons) {
        var curButton = buttons[btn];
        if (typeof (curButton) == "string") {
            if (btn == 0) {
                html += '<a class="ma-btn bordered small" id="modal_btn" name="' + curButton + '" >' + curButton + '</a>'
            }
            else {
                if (!nextButtonCss) {
                    nextButtonCss = "ma-btn small margin-left-10 ml-2";
                }
                html += '<a class="' + nextButtonCss + '" id="modal_btn" data-dismiss="modal" name="' + curButton + '">' + curButton + '</a>'
            }
        } else if (typeof (curButton) == "object") {
            isObject = true;
            html += constructButton(curButton);
        }
    }
    html += "</div>";
    if (afterText) {
        html += afterText;
    }

    html += '</div></div></div></div></div>';
    sendMixpanelPopupDetails(popupName, formatPageName(page_name), message, null)

    function onclickMA(e) {
        if (!$(e.target).parents(".modal-dialog").length && !$(e.target).hasClass("modal-dialog")) {
            callback("clickout");
            $(document).unbind("click", onclickMA);
        }
    }
    var $modal = null;
    var $html = $(html);

    AppendPopupToBody($html);

    if (preventHide) {
        console.log('prevent hide called');
        $modal = $html.modal({ backdrop: 'static', keyboard: false });
    } else {
        $modal = $html.modal();
    }

    $modal.on("hidden.bs.modal", function (e) {
        EmitEvent("MaAlertMessageClose", {});
        this.remove();
        $("body").css("padding-right", "");
    })

    if (typeof afterCreationCallback == "function" && afterCreationCallback)
        setTimeout(afterCreationCallback, 200);

    $modal.find(".button-container > a, .button-container > button").on("click", function (e) {
        if (callback) {
            callback(isObject ? e.target : e.target.name);
            $(document).unbind("click", onclickMA);
        }
        $('.cancel-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });
    $modal.find("#modal_close_btn").on("click", function (e) {
        if (callback) {
            callback(e.target.name);
            $(document).unbind("click", onclickMA);
        }
        $('.cancel-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });
    if (callback) {
        $(document).on('click', onclickMA);
    }
}

function maInfoAlertPopup(message, buttons, callback, header, nextButtonCss, popupName, afterText, popupclass, afterCreationCallback) {
    if (window['navbar'] && window['navbar'].IsMobileMode() && $("body").hasClass("menu-open")) {
        window['navbar'].ToggleOpen();
    }
    var position = $(window).scrollTop();
    var headerText = "";
    if (header) {
        headerText = '<div class="title text-center font-size-24 line-height-36">' + header + '</div>';
    }
    var html = '<div class="ma-alert-message-2 modal fade cancel-popup {0}" role="dialog">'.format(popupclass || "") +
        '<div class="modal-dialog" ><div class="modal-content">' +
        headerText +
        '<div><div class="body font-size-16 line-height-24">' + message + '</div><div><div class="button-container">';
    var isObject = false;


    for (var btn in buttons) {
        var curButton = buttons[btn];
         
        if (typeof (curButton) == "string") {
            if (buttons.length == 1) {
                html += '<a class="button-primary btn-md w-100 justify-content-center align-items-center" id="modal_btn" name="' + curButton + '">' + curButton + '</a>';
            } else {
                let buttonClass = "";
                if (btn == 0) {
                    buttonClass = "button-ghost-red w-100 align-items-center"; // First button
                } else if (btn == 1) {
                    buttonClass = "button-primary w-100 justify-content-center align-items-center"; // Second button
                }

                html += '<a class="' + buttonClass + '" id="modal_btn" data-dismiss="modal" name="' + curButton + '">' + curButton + '</a>';
            }
        } else if (typeof (curButton) == "object") {
            isObject = true;
            html += constructButton(curButton);
        }
    }
    html += "</div>";
    if (afterText) {
        html += afterText;
    }

    html += '</div></div></div></div></div>';
    sendMixpanelPopupDetails(popupName, formatPageName(page_name), message, null)

    if (isMobile()) {
        jQuery(window).scrollTop(0);
    }

    function onclickMA(e) {
        if (!$(e.target).parents(".modal-dialog").length && !$(e.target).hasClass("modal-dialog")) {
            callback("clickout");
            $(document).unbind("click", onclickMA);
        }
    }
    var $modal = $(html).modal();

    $modal.on("hidden.bs.modal", function (e) {
        EmitEvent("MaAlertMessageClose", {});
        this.remove();
        $("body").css("padding-right", "");
    })

    if (typeof afterCreationCallback == "function" && afterCreationCallback)
        setTimeout(afterCreationCallback, 200);

    $modal.find(".button-container > a, .button-container > button").on("click", function (e) {
        if (callback) {
            callback(isObject ? e.target : e.target.name);
            $(document).unbind("click", onclickMA);
        }
        $('.cancel-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });
    $modal.find("#modal_close_btn").on("click", function (e) {
        if (callback) {
            callback(e.target.name);
            $(document).unbind("click", onclickMA);
        }
        $('.cancel-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });
    if (callback) {
        $(document).on('click', onclickMA);
    }
}

function upgradeToFollowMorePopup(message) {
    if (window['navbar'] && window['navbar'].IsMobileMode() && $("body").hasClass("menu-open")) {
        window['navbar'].ToggleOpen();
    }

    var position = $(window).scrollTop();
    var headerText = '<div class="title text-center font-size-24 line-height-36">Upgrade to follow more</div>';

    var html = '<div class="upgrade-to-follow-more-popup ma-alert-message modal fade upgrade-popup" role="dialog">' +
        '<div class="modal-dialog"><div class="modal-content">' +
        '<button type="button" id="modal_close_btn" name="_close" class="close" data-dismiss="modal" aria-label="Close"></button>' +
        headerText +
        '<div class="body font-size-16">' + message + '</div><div class="footer d-flex text-align-center">' +
        '<a class="button-ghost-red w-100 align-items-center" id="view_plans_btn" name="View Plans">VIEW PLANS</a>' +
        '<a class="button-primary w-100 justify-content-center align-items-center" id="upgrade_now_btn" name="Upgrade Now">UPGRADE NOW</a>' +
        '</div></div></div></div>';

    var $modal = $(html).modal();

    $modal.on("hidden.bs.modal", function (e) {
        this.remove();
        $("body").css("padding-right", "");
    });

    $modal.find("#view_plans_btn, #upgrade_now_btn").on("click", function (e) {
        var selectedBtn = e.target.name;
        if (selectedBtn === "View Plans") {
            location.href = "/plans";
        } else if (selectedBtn === "Upgrade Now") {
            var params = { cta: "Upgrade Now!", source_page: page_name };
            location.href = addAnalyticsParamsToUrl("/upgrade", params);
        }
        $('.upgrade-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });

    $modal.find("#modal_close_btn").on("click", function (e) {
        $('.upgrade-popup').modal('hide');
        if (isMobile()) {
            jQuery(window).scrollTop(position);
        }
    });
}

function isNormalInteger(str) {
    // return /^\+?(0|[1-9]\d*)$/.test(str);
    return /^\d+$/.test(str);
}
function appendQs(url, key, value) {
    if (value) {
        return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value);
    }

    return url;
};
function optiMonkVariables(sorgKey, onlyForSession) {
    var thisobj = this;
    var logout_clean_key = "logout_clean";

    window.OptiMonkOnReady = function () {
        var adapter = OptiMonk.Visitor.createAdapter();
        var o = getObj();

        for (var i in o) {
            adapter.attr(i, o[i])
        }
    };

    this.increment = function (key) {
        var o = getObj();

        if (!o[key])
            o[key] = 0;

        o[key]++;

        setObj(o);
    }

    this.setVariable = function (key, value) {
        var o = getObj();

        // if (!o[key])
        o[key] = value;

        setObj(o);
    }

    this.getVariable = function (key) {
        var o = getObj();

        return o[key];
    }

    this.deleteVariable = function (key) {
        var o = getObj();

        delete o[key];

        setObj(o);
    }

    this.setVariableToCleanOnLogout = function (key) {
        var keys = thisobj.getVariable(logout_clean_key) || [];

        if (keys.indexOf(key) < 0) {
            keys.push(key)
            thisobj.setVariable(logout_clean_key, keys);
        }
    }

    this.logout = function () {
        var keys = thisobj.getVariable(logout_clean_key) || [];
        var o = getObj();

        for (var i in keys) {
            delete o[keys[i]];
        }

        setObj(o);
    }

    function getObj() {
        //var storage = getStorage();
        //return JSON.parse(storage[sorgKey] || "{}");
        const storedValue = onlyForSession ? sessionStorage.getItem(sorgKey) : localStorage.getItem(sorgKey);
        return JSON.parse(storedValue || "{}");
    }

    function setObj(obj) {
        //var storage = getStorage(); 
        //return storage[sorgKey] = JSON.stringify(obj);
        if (onlyForSession) {
            return sessionStorage.setItem(sorgKey, JSON.stringify(obj));
        }
        else {
            return localStorage.setItem(sorgKey, JSON.stringify(obj));
        }
    }

    function getStorage() {
        return onlyForSession ? sessionStorage : localStorage;
    }
}

function insertParam(key, value) {
    if (history.pushState) {
        // var newurl = window.location.protocol + "//" + window.location.host + search.pathname + '?myNewUrlQuery=1';
        var currentUrl = window.location.href;
        //remove any param for the same key
        var currentUrl = removeURLParameter(currentUrl, key);

        //figure out if we need to add the param with a ? or a &
        var queryStart;
        if (currentUrl.indexOf('?') !== -1) {
            queryStart = '&';
        } else {
            queryStart = '?';
        }

        var newurl = currentUrl + queryStart + key + '=' + value
        window.history.pushState({ path: newurl }, '', newurl);
    }
}

maSessionVariables = new optiMonkVariables("MA", true);
maStorageVariables = new optiMonkVariables("MA", false);

function ExhibitionRefresh() {
    refreshResult(null, function () {
        //LoadContent(".artist_list", null, function () {
        //    manager.loadSingleModule("ex_artist_list").setSelected([]);
        //});
    });
}
function CalcViewDimensions() {
    var vh = window.innerHeight * 0.01;
    var vw = window.innerWidth * 0.01;
    document.documentElement.style.setProperty('--vh', vh + 'px');
    document.documentElement.style.setProperty('--vw', vw + 'px');
}
window.addEventListener('resize', function () {
    CalcViewDimensions();
});

$(document).ready(function () {
    CalcViewDimensions();
    $("body").on("click", ".auction-results-banner .close-banner", function (e) {
        $(this).parent().fadeOut(200);
        setCookie('ma_cb', 1);
        e.preventDefault();
        mixpanel.track('Click to hide Private Sale Banner');
        return false;
    });
    $("body").on("click", ".auction-results-banner, a[data-roni]", function (e) {
        //AlertRoni
        var from = $(this).hasClass("from-auction") ? "From Auction Results" : "From Header";
        var identifierObject = mixpanelMngo.getIdentifierObject(e.target);
        mixpanel.track('Click on Private Sale Banner', {
            "Identifier": identifierObject ? identifierObject.event.identifier : "",
            "Artist Name": $(".artist-header-bar h1.name").text().trim(),
            "Path Name": window.location.pathname
        });
        if (unique_id) {
            setCookie('ma_cb', 1);
            //PostMessage(function (res) {
            //    $(".auction-results-banner").fadeOut(200, null, function () {
            //        $(this).parents(".item").remove();
            //    });
            //}, window.entity_id, from);
            //maAlertMessage('', ["Close"], function (msg) { }, !unique_id ? "Please <a href='/login'>Login</a> or <a href='/signup'>Sign up</a> to continue" : "Thank you, an introductory email will be sent to you shortly."
            //    , null, null, null, 'v2');
        }
    });

    function PostMessage(callback, artist, from) {
        $.ajax({
            type: "POST",
            url: "/Ajax/Contact/SendFeedback",
            data: {
                artist: artist,
                suggestion: 'roni',
                url: window.location.href,
                feedback: from
            },
            success: callback
        });
    }

    $(window).on("FinishLoadAll", CheckPrint);
    RemovePageParameterFromURL("refID");
});
function CheckPrint() {
    if (getParameterByName("print") == "1") {
        setTimeout(function () {
            window.print();
        }, 250)
        RemovePageParameterFromURL("print");
    }
}
function onLoadSavedArtworks(e) {
    $("#dashboardResultsCount").text('(' + (_resultsCount || '0') + ')');
}

var dynamicJSList = [];
function LoadScript(url) {
    if ($.inArray(url, dynamicJSList) < 0) {
        var script = document.createElement('script');
        script.setAttribute('src', url);
        script.setAttribute('async', false);
        document.head.appendChild(script);
        dynamicJSList.push(url);
    }
}

function redirectToReferralPage(defaultPage) {
    var redirectUrl = getCookie("RedirectUrl");

    if (redirectUrl) {
        location.href = redirectUrl;
    }
    else if (defaultPage) {
        location.href = defaultPage;
    }
    else {
        return false;
    }
}

//use when if user on userpreferences page then user is click on My Appraisal menu because on userpreferences page tab have  manage using hash
function rediracttomymyAppraisalTab() {
    if (IsPage("account_settings")) {
        window.location.hash = "#my-appraisals";
        window.location.reload()
    }
}

//check if zendesk script is loaded
function checkZendeskLoaded(retryCount) {
    if (typeof zE !== 'undefined') {
        zE(function () {
            zE('messenger', 'hide');
        })
    } else if (retryCount > 0) {
        setTimeout(function () {
            checkZendeskLoaded(retryCount - 1);
        }, 200);
    } else {
        Sentry.captureMessage("Zendesk not loaded");
    }
}

//functions for toggling between list view and grid view
function ShowGridView() {
    $('#grid-icon').removeClass('icon-color-gray');
    $('#grid-icon-top-menu').removeClass('icon-color-gray');
    $('#list-icon').addClass('icon-color-gray');
    $('#list-icon-top-menu').addClass('icon-color-gray');
    setCookie('showGridView', 1);
    var data = mp_track_auction_results_data;
    if (data) {
        data["Screen View"] = "Grid View";
        mixpanel.track("Select View", data);
    }
    dataStorage.setRndmNumber();
    window.scroll_obj && window.scroll_obj.clearScrollAndPosition();
    refreshResult();
}

function ShowListView() {
    $('#grid-icon-top-menu').addClass('icon-color-gray');
    $('#grid-icon').addClass('icon-color-gray');
    $('#list-icon-top-menu').removeClass('icon-color-gray');
    $('#list-icon').removeClass('icon-color-gray');
    setCookie('showGridView', 0);
    var data = mp_track_auction_results_data;
    if (data) {
        data["Screen View"] =  "List View";
        mixpanel.track("Select View", data);
    }
    dataStorage.setRndmNumber();
    window.scroll_obj && window.scroll_obj.clearScrollAndPosition();
    refreshResult();
}

function cookieConsent(type, from) {
    var consent = {}
    if (type == 'accept') {
        consent = { necessary: true, functionality: true, advertising: true, analytics: true };
        mixpanel.track('User allows all cookies', { "Identifier": from });
    } else if (type == 'decline-opt') {
        consent = { necessary: true, functionality: false, advertising: false, analytics: false };
        mixpanel.track('User declines optional cookies', { "Identifier": from });
    } else {
        consent = {
            necessary: $("#necessary-cookies").is(':checked'),
            functionality: $("#functionality-cookies").is(':checked'),
            advertising: $("#advertising-cookies").is(':checked'),
            analytics: $("#analytics-cookies").is(':checked'),
        }
        mixpanel.track('User allows selected cookies', { "Identifier": from });
    }
    localStorage.setItem('cookieConsent', JSON.stringify(consent));
    setCookie("UserCookieConsent", localStorage.getItem('cookieConsent'), 1);
    GTM_SendGoogleConsentEvent();
    UET_SendUETConsentEvent();
    $('#cookie-consent').hide();
    $('#manageCookies_dialog').modal("hide");
    
}


function LogoutUser() {
    setCookie(".ASPXFORMSAUTH", getCookie(".ASPXFORMSAUTH"), -1, location.host);
    setCookie(".ASPXFORMSAUTH", getCookie(".ASPXFORMSAUTH"), -1, ".mutualart.com");
    setCookie(".ASPXFORMSAUTH", getCookie(".ASPXFORMSAUTH"), -1);
}

function clickOnContactGalleryButton() { $('[data-contact-popup-name="contactVenue"]').click(); }


function confirmUnFollowPopup(artistName, successCallback, cancelCallback, artistId) {

    maAlertMessage("<div class=message><p class=info>Before you decide, take a moment to customize your alerts and only get the updates that truly matter to you.</p></div>",
        [
            {
                tag: "a", text: "CUSTOMIZE MY ALERTS", atts: [
                    { "name": "class", "value": "button-primary customise-alerts-btn" },
                    { "name": "href", "value": `/my-preferences/followed-artists?artistId=${artistId}` }
                ]
            },
            {
                tag: "a", text: "I want to keep following", atts: [{
                    "name": "class", "value": "ma-btn bordered keep-following-btn",
                }]
            },
            {
                tag: "div", text: "If you stop following, you'll no longer receive notifications or see updates about this artist on your dashboard.",
                atts: [{
                    "name": "class", "value": "msgBottomAB",
                }]
            },
            {
                tag: "a", text: "I want to unfollow", atts: [{
                    "name": "class", "value": "v2__link--primary",
                }]
            }
        ], function (res) {
            if (res.innerText == "I want to unfollow") {
                successCallback();
            }
            else {
                cancelCallback();
            }
        }, "Thinking of unfollowing " + artistName + "?", null, "Unfollow", "", "unfollow-popup-AB");
} 

function getScreenViewType() {
    return { "Screen View": getCookie('showGridView') === '1' ? 'Grid View' : 'List View' };
}

function getArtistAndGalleryArtistNames() {
    var artistData = $('#similarArtists .related-items-list-slick .slick-track .slick-slide .follow-container a');
    var logic = $('#similarArtists').attr('data-logic');
    if (!artistData.length || !logic.length) {
        return null;
    }

    var artistNames = [];
    var galleryArtistNames = [];

    artistData.each(function () {
        var name = $(this).attr('data-name');
        var isGalleryArtist = $(this).attr('data-is-gallery-artist');

        if (name && artistNames.indexOf(name) === -1) {
            artistNames.push(name);
        }

        if (name && isGalleryArtist === "True" && galleryArtistNames.indexOf(name) === -1) {
            galleryArtistNames.push(name);
        }
    });

    var result = {
        "Artists": artistNames,
        "Logic": logic
    };

    if (galleryArtistNames.length > 0) {
        result["Galleries Artists"] = galleryArtistNames;
    }
    return result;
}

function AppendPopupToBody(data) {
    var backdrop = $("<div class='modal-backdrop fade in'></div>");
    var isGalleryPage = $('body').hasClass('gallery-page');
    var html = isGalleryPage
        ? $('<div class="mutualart-page"></div>').append(data).append(backdrop)
        : data;

    $("body").append(html);
};
function share_open(n,t,i,r){var u=null;t=t||660;i=i||450;try{if(r&&(n=decodeURI(n)),n.startsWith("mailto:")){window.location.href=n;return}u=window.open(n,"_blank","toolbar=0,status=0,width="+t+",height="+i)}catch(f){}return u===null}function isURL(n){var t=new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");return t.test(n)}function getMeta(n,t,i){var u=document.getElementsByTagName("meta"),r;for(t=t||"content",i=i||"name",r=0;r<u.length;r++)if(u[r].getAttribute(t)===n)return u[r].getAttribute(i);return""}function removeParams(n,t){var r;if(t=t||arguments,t.length<2)return n;var o=Array.prototype.slice.call(t,1,t.length),u=n.split("?")[0],f,i=[],e=n.indexOf("?")!==-1?n.split("?")[1]:"";if(e!==""){for(i=e.split("&"),r=i.length-1;r>=0;r-=1)f=i[r].split("=")[0],o.indexOf(f)!==-1&&i.splice(r,1);u=u+"?"+i.join("&")}return u}function constructAndShareURL(n,t,i,r,u,f){var e={},s={},o,h;f||(s.utm_source="mutualart",s.utm_medium=f?"collection_artwork_share":"share",s.utm_content=n,s.utm_campaign=window.mixpanel?window.mixpanel.get_distinct_id():"unknown",t+=(t.indexOf("?")>0?"&":"?")+$.param(s));o="";h=!0;switch(n){case"facebook":o="https://www.facebook.com/sharer/sharer.php?";i=encodeURIComponent(i);r=encodeURIComponent(r);e.u=t;e.caption=i;e.description=r;e.picture=u;h=!1;break;case"twitter":o="https://twitter.com/intent/tweet?";i=encodeURI(i);r=encodeURI(r);e.text=i;e.url=encodeURI(t);break;case"pinterest":o="http://pinterest.com/pin/create/link/?";i=encodeURIComponent(i);r=encodeURIComponent(r);e.url=encodeURI(t);e.media=u;e.description=i;break;case"whatsapp":o="https://wa.me/?";e.text=i+" "+t;break;case"mail":o="mailto:?";e.subject=encodeURIComponent(i);e.body=t+encodeURIComponent("\r\n\r\nLog in with your MutualArt account to view all the artwork information. If you are not currently a member, sign up today - It’s FREE.\r\nhttps://mutualart.com");break;case"flipboard":o="https://share.flipboard.com/bookmarklet/popout?";e.v=i;e.url=t}isURL(u)||(delete e.media,delete e.picture);share_open(o+$.param(e),null,null,h)}function HandleSocialShare(){var t=$(this).parents(".collection-toolbar").length,i=$(this).data("social");if(i){mixpanel.track("User Share a Link",{"Collection Share":t?!0:!1,"Source Page":formatPageName(page_name),"CTA Name":null,Platform:i});var r=new URL(window.location.href),n=t?$(this).parents(".collection-toolbar").find(".artworkurl input").val():$(this).data("url")||removeParams(r.href,["utm_source","utm_medium","utm_campaign","utm_content","refID"]);if(n.startsWith("https://")||(n="https://"+n),i=="print"){t?window.open(n+"?print=1"):window.print();return}var u=$(this).data("title")||document.title,f=getMeta("description"),e=getMeta("og:image","property","content");constructAndShareURL(i,n,u,f,e,t)}}$("body").on("click","[data-social]",HandleSocialShare);;
var popupelement = null;
var GTM_PopupAction = "open-popup";

function initPopups() {
    $(document).on('click', '.popup', ShowClickPopup);
    if (location.href.toLowerCase().indexOf("?promo=") > 0) {
        $("#signup").click();
    }

    function ShowClickPopup() {
        var url = '/Ajax/AjaxLoader/Popup';
        var elem = $(this);
        var id = elem.data("id") || elem.attr("id");
        var eventName = elem.data('mixpanel-popup-name');
        var reload = elem.data("reload");
        var triggerMixpanelEvent = elem.attr("data-mixpanel-trigger-event") != undefined ? JSON.parse(elem.attr("data-mixpanel-trigger-event")) : true;
        var post =
        {
            popupName: id
        }

        popupelement = elem;

        // MAPF-6441
        // 27-Sep-2020
        // Keeping elem.attr('popup')... for other popup compatibility
        //------------------------------------------------------------
        //var popupParams = elem.attr('popup');
        //if (popupParams) {
        //    post = JSON.parse(popupParams);
        //}
        var popupParams = elem.data('popup');

        if (popupParams) {
            if (typeof (popupParams) === 'object') {
                post = popupParams;
            }
            else {
                post = JSON.parse(popupParams);
            }
        }
        else {
            popupParams = elem.attr('popup');
            if (popupParams) {
                post = JSON.parse(popupParams);
            }
        }

        var popupDynamicContent = elem.data("popup-dynamic");
        if (popupDynamicContent) {
            post["dynamicContent"] = popupDynamicContent;
        }
        //------------------------------------------------------------

        popupQuery = elem.attr('query');
        popupCustomClass = elem.attr("popup-class");

        if (!popupQuery)
            popupQuery = "";

        if (id === "login_mobile" || id == "login_started") {
            $("#login").click();
            return;
        }
        else if (id === "signup_mobile" || id == "signup_started") {
            $("#signup").click();
            return;
        }
        if (elem.data('query')) {
            url = url + '?' + elem.data('query');
        }

        $("body").append($("<div class='modal-backdrop fade in'></div>"));

        //$.abortAllAjax();
        //Check if popup already exists
        var fdb = elem.data("feedback");
        var optTitle = elem.data("title");
        var dq = elem.data("query");
        if ($("#" + id + "_dialog").length && reload != true) {
            if (id == "manageCookies") {
                mixpanel.track('View ' + (eventName ? eventName : id) + '  Popup', {
                    "Source Page": formatPageName(page_name),
                    "CTA Name": elem.data("cta") ? elem.data("cta") : elem.text(),
                    "Type": elem.attr("data-type")
                });
            }
            $("#" + id + "_dialog").modal();
            if (fdb) {
                $("#reason > select").val(fdb);
            }
            if (dq)
                $("#feedbackText").val(dq);

            if (optTitle) {
                $("#title").text(optTitle);
            }
        }
        else {
            if ($("#" + id + "_dialog").length)
                $("#" + id + "_dialog").remove();
            $.ajax({
                method: 'POST',
                url: url,
                data: post,
                success: function (data) {
                    setCookie("AfterRegUrl", window.location.href, 3);

                    AppendPopupToBody(data);

                    if (parent) {
                        parent.postMessage('hideCloseIcon', '*')
                    };
                    if (popupCustomClass)
                        $(".two-column-modal").addClass(popupCustomClass);

                    if (triggerMixpanelEvent) {
                        mixpanel.track('View ' + (eventName ? eventName : id) + '  Popup', {
                            "Source Page": formatPageName(page_name),
                            "CTA Name": elem.data("cta") ? elem.data("cta") : elem.text(),
                            "Type": elem.attr("data-type")
                        });
                    }

                    $("#" + id + "_dialog").modal();
                    if (fdb) {
                        $("#reason > select").val(fdb);
                        //if (fdb == "privatesales") {
                        //    //var fromHeader = elem.hasClass("from-header");
                        //    //$("#feedbackText").text()
                        //}
                    }
                    if (dq)
                        $("#feedbackText").val(dq);

                    if (optTitle) {
                        $("#title").text(optTitle);
                    }

                    $("#" + id + "_dialog [data-toggle='tooltip']").tooltip();

                    EmitEvent('ajaxPopupLoaded', {
                        id: id
                    });
                }
            });
        }
        if (id == "login" || id == "signup")
            GTM_Send('event', 'navigation', GTM_PopupAction, id);

        if (id == "signup" && GTM_PopupAction == "open-exitoverlay-popup")
            GTM_PopupAction_exit = "exit-overlay-signup";
        else GTM_PopupAction_exit = "exit-signup";

        GTM_PopupAction = 'open-popup';
    }

    var Messages = Array("welcome", "upgrade", "learn-more", "plan-upgrade", "comming-soon", /*"access_credit","access_credit_lead",*/
        "success_access", "done_access", "intelligence_quote", "appraisal_campaign", "complete_appraisal", "upgradecollection", "data-enquiry",
        "GetMoreAccounts", "ManageDevices", "DeviceLoggedOutMessage");

    ShowMessage();
    ShowUnsubscribeMessage();
    ShowDeletionConfirmationPopup();

    function ShowMessage() {
        var msgParam = getParameterByName("msg");
        if (!msgParam && window.popupIdParam) msgParam = window.popupIdParam;
        /// If the welcome popup is enabled, then the follow filter popup will not be displayed.
        if (!msgParam) {
            showIdelPopup($('.follow-filter-idel-user'), false);
        }

        if (msgParam + "" == "" || Messages.indexOf(msgParam) === -1 || getParameterByName('p') === '1')
            return false;
        RemovePageParameterFromURL("msg");
        $.ajax({
            method: 'POST',
            url: '/Ajax/AjaxLoader/Popup',
            data: { popupName: msgParam, entity_id: entity_id, page_name: formatPageName(page_name) },
            success: function (data) {
                AppendPopupToBody(data);
                $("#message.modal,*[data-message]").modal();
                EmitEvent('ajaxPopupLoaded', { msg: msgParam });
                //mixpanel.track('View ' + msgParam + '  Popup', {
                //    "Source Page": page_name,
                //    "Type": msgParam
                //});

                sendMixpanelPopupDetails($("#message.modal,*[data-message]").data("popup-display-name") || msgParam, formatPageName(page_name), null, $("#message.modal,*[data-message]").data("identifier"));

                if (isMobile()) {
                    document.body.scrollTop = 0;
                    window.scrollTo(0, 0)
                }
            }
        });

        // Check for message parameter
        // Remove parameter
    }
    function ShowDeletionConfirmationPopup() {
        var item = localStorage.getItem("userDeletion");
        if (item && item == "1") {
            localStorage.removeItem("userDeletion");
            msgParam = "deletionConfirmation";
            $.ajax({
                method: 'POST',
                url: '/Ajax/AjaxLoader/Popup',
                data: { popupName: msgParam, entity_id: entity_id, page_name: formatPageName(page_name) },
                success: function (data) {
                    AppendPopupToBody(data);
                    $("#deletionConfirmation_dialog").modal();
                    if (isMobile()) {
                        document.body.scrollTop = 0;
                        window.scrollTo(0, 0)
                    }
                }
            });
        }
    }
}

function ShowUnsubscribeMessage() {
    var msgParam = getParameterByName("gid");
    if (msgParam && IsPage('exhibition')) {
        var checkUnsubscribeurl = "/Ajax/Unsubscribe/CheckIsGalleryUnsubscribed";
        $.post(checkUnsubscribeurl, jQuery.param({ galleryId: msgParam }))
            .done(function (response) {
                if (response == "True") {
                    maInfoAlertPopup("You will no longer receive email updates about your exhibitions being published on MutualArt.<br><br>Please note that you may still receive emails from us within the next 48 hours as the changes take full effect.",
                        ["close"],
                        function () { },
                        "Your Email Preferences");
                } else {
                    maInfoAlertPopup("You will no longer receive email updates about your exhibitions being published on MutualArt.<br><br> Are you sure you want to proceed?",
                        ["Yes, unsubscribe", "No, keep me informed"],
                        function (selectedBtn) {
                            if (selectedBtn == 'Yes, unsubscribe') {
                                var url = "/Ajax/Unsubscribe/UnsubscribeGallery";
                                $.post(url, jQuery.param({ galleryId: msgParam }))
                                    .done(function () {
                                        maInfoAlertPopup("You will no longer receive email updates about your exhibitions being published on MutualArt.<br><br>Please note that you may still receive emails from us within the next 48 hours as the changes take full effect.",
                                            ["close"],
                                            function () { },
                                            "Your Email Preferences");
                                    })
                                    .fail(function () {

                                    });
                            }
                        }, "Your Email Preferences");
                }
            })
    }
}

function sendMixpanelPopupDetails(popupName, pageName, text, identifier) {
    if ((typeof (mixpanel) != 'undefined')) {
        if (popupName == null || popupName == "") {
            if (text) {
                var words = text.split(" ");
                popupName = words.splice(0, 4).join(' ');
            }
            else {
                popupName = 'Unknown';
            }
        }
        var mixpanelProps = {
            "Source Page": formatPageName(pageName),
            "Type": popupName,
            "Popup Text": text
        };
        if (identifier) mixpanelProps.Identifier = identifier;
        mixpanel.track('View ' + popupName + '  Popup', mixpanelProps);
    }
}

var popupQuery;

function initAjaxStop() {
    top.xhrPool = [];

    $.abortAllAjax = function () {
        $.each(top.xhrPool, function () {
            this.abort();
        });

        top.xhrPool = [];
    };

    $.ajaxSetup({
        beforeSend: function (jqXHR) {
            top.xhrPool.push(jqXHR);
        }
    });
}
$(document).ready(initPopups);
initAjaxStop();

function onClosePaywallPopup() {
    if ($(".page-content").css("filter") != "none") {
        setTimeout(function () {
            $("#signup_dialog").modal('show');
            $("body").addClass("modal-open");
        }, 500);
    }
}

function showIdelPopup(idleElement, isDontShowToRecentUsers) {
    if (isLoggedIn()) {
        if (idleElement && idleElement.length) {
            const dataQuery = idleElement.data('query');
            if (!dataQuery) return;

            /// Get the name of the cookie from query
            const cookieName = (dataQuery.match(/Name=([^&]+)/) || [])[1];

            const idleTimeout = idleElement.data('timeout');

            const storageKey = idleElement.data('storageKey');
            if ((isNaN(idleTimeout) || (isDontShowToRecentUsers && dontShowToRecentUsers(storageKey))) || !(cookieName && !getCookie(cookieName))) return;

            let idleTime = 0;
            const intervalId = setInterval(checkIdleTime, 1000);
            const resetIdleTime = () => idleTime = 0;

            /// Bind events 
            document.addEventListener('keydown', resetIdleTime);
            document.addEventListener('mousemove', resetIdleTime);

            function checkIdleTime() {
                idleTime += 1000;

                if (idleTime >= idleTimeout) {

                    const cookieValue = getCookie(cookieName);
                    if (!cookieValue || cookieValue.trim() === '') {
                        /// Click event will trigger the function to open the popup
                        idleElement.click();
                    }

                    clearInterval(intervalId);

                    /// Unbind events 
                    document.removeEventListener('keydown', resetIdleTime);
                    document.removeEventListener('mousemove', resetIdleTime);
                }
            }

            function dontShowToRecentUsers(storageKey) {
                if (storageKey) {
                    let artworkPageCount = localStorage.getItem(storageKey);
                    if (isNaN(artworkPageCount)) {
                        return false;
                    }
                    else {
                        artworkPageCount = artworkPageCount > 0 ? parseInt(artworkPageCount) : 0;
                        if (artworkPageCount < 5) {
                            localStorage.setItem(storageKey, artworkPageCount + 1);
                            return true;
                        }
                        else if (!getCookie(cookieName)) {
                            return false;
                        }
                        else {
                            localStorage.removeItem(storageKey);
                            return false;
                        }
                    }
                }
                return false;
            }
        }
    }
};
var upload_images_counter = 0;
var loading_image_html = "<img src='/img/ajax-loader.gif'/>";
var emailRegex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;;

function sendForgotPassword() {
    if (!$("#forgotPasswordForm").valid()) {
        return;
    }
    var email = $("#userForgotPasswordEmail").val();
    $("#forgotPasswordBody").html(loading_image_html);
    $.post("/Ajax/ForgotPassword/SendForgotPassword", { email: email })
        .done(function (data) {
            if (data === "OK") {
                var okMsg = "An email has been sent to " + email + ". This email describes how to reset your password. Please be patient; the delivery of email may be delayed. Remember to check your junk or spam folder or filter if you do not receive this email. <br><br>PLEASE NOTE: The link in this email is only valid for the next 30 minutes.";
                $("#forgotPasswordBody").html("<div>" + okMsg + "</div>");

            } else if (data === "ErrorUser") {
                mixpanel.track("Forgot Password Error", { "Error": "We were unable to access your information. Please try again." });
                $("#forgotPasswordBody").html("<div style='color:red'>We were unable to access your information. Please try again.</div>");
            } else {
                $("#forgotPasswordBody").html("<div style='color:red'>Error in sending. Please try again later.</div>");
                mixpanel.track("Forgot Password Error", { "Error": "Error in sending. Please try again later." });

            }

        })
        .fail(function () {
            $("#forgotPasswordBody").html("<div style='color:red'>Error in sending. Please try again later.</div>");
            mixpanel.track("Forgot Password Error", { "Error": "Error in sending. Please try again later." });
        });
}

function sendResetPassword() {
    if (!$("#resetPasswordFrm").valid()) {
        return;
    }

    var guid = window.location.pathname.substr(window.location.pathname.indexOf('ForgotPassword/') + 15);
    var password=$("#password").val();
    var confirmPassword=$("#confirmPassword").val();

    if (password !== confirmPassword) {
        $('#errorMsg').html("<div style='color:red'>Your new password and confirm password are not the same or empty. Please reenter.</div>")
        return;
    }

    $.post("/Ajax/ForgotPassword/ChangePassword", { userGuid: guid, newPassword: password })
        .done(function (data) {
            if (data === "OK") {
                $("#resetPassword").html("<div>Your password was changed successfully.<br/>Please <a href='https://www.mutualart.com/#Login'>click here</a> to login.</div>");
                $('#resetPassword').addClass("margin-left-4")
            } else {
                $("#resetPassword").html("<div style='color:red'>Error in change password. Please try again later.</div>");
            }

        })
        .fail(function () {
            $("#resetPassword").html("<div style='color:red'>Error in change password. Please try again later.</div>");
        });


}

function sendLoginLink() {
    if (!$("#loginWithoutPasswordForm").valid()) {
        return;
    }
    var email = $("#userLoginWithoutPasswordEmail").val();
    $("#loginWithoutPasswordBody").html(loading_image_html);
    var msg = "If there's a MutualArt account associated with " + email + " you'll get an email with a link to automatically log in. The link will expire in 7 days. <br/><br/>Your existing password still works, should you want to log in with it later. <br/><br/>Still need help ? <a href='/contact-us'><u>Contact us.</u></a><br/><br/><br/>"
    $("#loginWithoutPasswordBody").html("<div>" + msg + "</div>");
    var redirectUrl = "";

    if (location.href.indexOf('redirectUrl=') !== -1) {
        redirectUrl = "&redirectUrlTo=" + getParameterByName("redirectUrl", window.location.href);
    } else if (IsPage('auth') && (window && window.parent && window.parent.location && window.parent.location.pathname)) {
        redirectUrl = "&redirectUrlTo=" + window.parent.location.pathname;
    }

    $.post("/Ajax/ForgotPassword/SendLoginLink", { email: email, redirectUrl: redirectUrl })
        .done(function (data) {
            if (data === "OK") {
                // do nothing
            } else if (data === "ErrorUser") {
                mixpanel.track("Login Without Password Error", { "Error": "We were unable to access your information. Please try again." });
                // do nothing
            } else {
                mixpanel.track("Login Without Password Error", { "Error": "Error in sending. Please try again later." });
                // do nothing
            }

        })
        .fail(function () {
            mixpanel.track("Login Without Password Error", { "Error": "Error in sending. Please try again later." });
            // do nothing
        });
};
function ClaimSummerPromotion() {
    $.ajax({
        type: "POST",
        url: "/Ajax/account_settings/ClaimSummerPromotion",
        success: function (res) {
            if (res) {
                if (res.Item2 == 0) {
                    $('.modal-backdrop').remove(); $('#summerPromotion_dialog').remove();
                    $(".reward-claim").addClass("claimed").html('<div class="ok-arrow"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 130.2 130.2"><circle class="path circle" fill="none" stroke="#73AF55" stroke- width="6" stroke- miterlimit="10" cx="65.1" cy="65.1" r="62.1" /><polyline class="path check" fill="none" stroke="#73AF55" stroke-width="6" stroke-linecap="round" stroke-miterlimit="10" points="100.2,40.2 51.5,88.8 29.8,67.5 " /></svg></div><span class="reward-claimed-text">' + res.Item1 + '</span>');
                } else {
                    maAlertMessage(res.Item1, ["OK"], function () { });
                }
            } else {
                maAlertMessage(res.Item1, ["OK"], function () { });
            }
        },
        error: function () {
            maAlertMessage('There seems to be an issue claiming your reward, please contact support.', ["OK"], function () { });
        }
    });
};
function SendFeedback() {
    if (!$("#feedbackForm").valid()) {
        return;
    }

    //Add this check becuase this can reuse for another form that not have phone field 
    if (typeof MA.Modules.objPhoneField != "undefined") {
        if (!MA.Modules.objPhoneField.CheckValid().isValid) {
            $(".form-messages").html("<div style='color:red'>Please provide a valid phone number.</div>");
            return;
        }
    }
   

    $('#feedback_url').val(window.location.href);

    if (localStorage["abtesting"] !== undefined && localStorage["abtesting"] === "noinvisiblecaptcha") {
        feedback();
    }
    else {
        if (window['grecaptcha'])
            grecaptcha.execute();
        else
            maAlertMessage("An error has occurred while trying to upload the reCAPTCHA service to validate that you are not a robot. Please try using another browser with a valid internet connection in order to sign up or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Signup Verification Error");
    }
}

function feedback() {
    //Add this check becuase this can reuse for another form that not have phone field 
    if (typeof MA.Modules.objPhoneField != "undefined") {
        $("#userPhone").val(MA.Modules.objPhoneField.GetNumber());
    }
    var data = $("#feedbackForm").serialize();
    let selectedReason = $("#feedbackForm #reason select").children("option:selected").val();
    //startLoader();
    $("#feedbackForm .form-messages").html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/Contact/SendFeedback",
        data: data,
        success: function (res) {
            //stopLoader();
            if (res === "OK") {
                $(".modal-header").css('display', 'none');
                $("#feedbackForm").html("<div class='feedback-result'>Thank you for reaching out.</br> Your message has been received and </br>we will get back to you soon.</div>");
                mixpanel.track("Submit feedback popup", { "Reason": selectedReason });
            } else if (res === 'Error in captcha') {
                //$("#feedbackForm").html("<div style='color:red'>Error in captcha. Please try again later.</div>");
                $(".form-messages").html("<div style='color:red'>Error in captcha. Please try again later.</div>");
            }
            else {
                $("#feedbackForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
            }
        },
        error: function () {
            $("#feedbackForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
        }
    });
}
;
function SendViolation() {
    if (!$("#violationForm").valid()) {
        return;
    }
    //checkCaptch("feedback");
    if (localStorage["abtesting"] !== undefined && localStorage["abtesting"] === "noinvisiblecaptcha") {
        violation();
    }
    else {
        if (window['grecaptcha'])
            grecaptcha.execute();
        else
            maAlertMessage("An error has occurred while trying to upload the reCAPTCHA service to validate that you are not a robot. Please try using another browser with a valid internet connection in order to sign up or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Signup Verification Error");
    }
}

function violation() {
    var data = $("#violationForm").serialize();
    $("#violationForm").html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/CopyrightViolation/SendViolationForm",
        data: data,
        success: function (res) {
            if (res === "OK") {
                $("#violationForm").html("<div>An email has been sent");
            } else if (res === 'Error in captcha') {
                $("#violationForm").html("<div style='color:red'>Error in captcha. Please try again later.</div>");
            }
            else {
                $("#violationForm").html('<div style="color:red">' + res + '</div>');
            }
        },
        error: function () {
            $("#violationForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
        }
    });
}


function SendDataEnquiry() {
    if (!$("#DataEnquiryForm").valid()) {
        return;
    }
    //checkCaptch("feedback");
    if (localStorage["abtesting"] !== undefined && localStorage["abtesting"] === "noinvisiblecaptcha") {
        DataEnquiry();
    }
    else {
        if (window['grecaptcha'])
            grecaptcha.execute();
        else
            maAlertMessage("An error has occurred while trying to upload the reCAPTCHA service to validate that you are not a robot. Please try using another browser with a valid internet connection in order to sign up or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Signup Verification Error");
    }
}

function DataEnquiry() {
    var data = $("#DataEnquiryForm").serialize();
    $("#DataEnquiryForm").html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/CopyrightViolation/SendDataEnquiryForm",
        data: data,
        success: function (res) {
            if (res === "OK") {
                $("#DataEnquiryForm").html("<div>An email has been sent");
            } else if (res === 'Error in captcha') {
                $("#DataEnquiryForm").html("<div style='color:red'>Error in captcha. Please try again later.</div>");
            }
            else {
                $("#DataEnquiryForm").html('<div style="color:red">' + res + '</div>');
            }
        },
        error: function () {
            $("#DataEnquiryForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
        }
    });
};
function sendShareUrl() {
    postSendShareUrl();
    //checkCaptch("postSendShareUrl");
}

function postSendShareUrl() {
    if ($("#shareUrlForm").valid()) {
        $("#shareUrlValue").val(entitySelection.getCompareUrl());
        var data = $("#shareUrlForm").serialize();
        $("#shareUrlForm").html(loading_image_html);

        $.ajax({
            type: "POST",
            url: "/Ajax/Contact/SendShareUrl",
            data: data,
            success: function (res) {
                if (res === "OK") {
                    $("#shareUrlForm").html("<div>An email has been sent");
                } else {
                    $("#shareUrlForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
                }
            },
            error: function () {
                $("#shareUrlForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
            }
        });
    }
};
function SendInquiry() {
    if (!$("#inquiryForm").valid()) {
        return;
    }
    $('#feedback_url').val(window.location.href);

    if (localStorage["abtesting"] !== undefined && localStorage["abtesting"] === "noinvisiblecaptcha") {
        inquiry();
    }
    else {
        if (window['grecaptcha'])
            grecaptcha.execute();
        else
            maAlertMessage("An error has occurred while trying to upload the reCAPTCHA service to validate that you are not a robot. Please try using another browser with a valid internet connection in order to sign up or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Signup Verification Error");
    }
}

function inquiry() {
    var data = $("#inquiryForm").serialize(); 
    $("#inquiryForm").html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/Contact/SendInquiry",
        data: data,
        success: function (res) {
            if (res === "OK") {
                $("#inquiryForm").html("<div>An email has been sent");
            }else if (res === 'Error in captcha') {
                $("#inquiryForm").html("<div style='color:red'>Error in captcha. Please try again later.</div>");
            }
            else {
                $("#inquiryForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
            }
        },
        error: function () {
            $("#inquiryForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
        }
    });
};
function SendAccessCreditLead(form) {
    var data = $(form).serialize();
    $(form).html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/Contact/SendAccessCreditLead",
        data: data,
        success: function (res) {
            if (res === "OK") {
                $(form).parent().html("<div>We have received your request and we will contact you soon.</div>");
            } else {
                $(form).parent().html("<div style='color:red'>Error in sending. Please contact support.</div>");
            }
        },
        error: function () {
            $(form).parent().html("<div style='color:red'>Error in sending. Please contact support.</div>");
        }
    });
};
$(document).ready(function () {
   
    $('#PersonTypesBtn').click(stepOneContinue);

    $("#InterestsBtn").click(stepTwoContinue);

    if (window.location.pathname === '/SignUp') {
        setEnableOrDisableContinueBtn();
        initCheckFirstStepBtnSelected();
    }

    //$("body").on("mouseleave", SignUpAutoOpen);

});

//function SignUpAutoOpen() {
//    if (typeof(top.skip_signup_auto_open) != "undefined")
//        return;

//    if (isMobile()
//        || sessionStorage.getItem("signup_showed")
//        || $(".modal.fade").is(":visible")
//        || window.location.search.getValueByKey("utm_medium") == "cpc" )
//        return;

//    GTM_PopupAction    = "open-exitoverlay-popup";
//    GTM_nonInteraction = true;

//    $("#signup").click();

//    sessionStorage.setItem("signup_showed", "true" );
//}


var stepOneContinue = function() {
    
    var personTypes = [];
    var personTypeTxt = $('#otherText').val();

    var selectedOption = $("#personType input:checked");

    for (var i = 0; i < selectedOption.length; i++)
        personTypes.push($(selectedOption[i]).data("val"));

    var opts = { selectedPersonTypes: personTypes, personTypeText: personTypeTxt };

    $.post("/Ajax/account_settings/SavePersonTypes", opts ,
        function(rText, status, request) {
            if (rText === "error") {
                alert("Error in save details");
                return;
            }

            window.location = '/SignUp/Register/User/StepTwo' + window.location.search;
            
        }).fail(function(e) {
        //alert("Error in save details");
    });
}


var stepTwoContinue = function () {
    var personInterests = [];
    var selectedOption = $("#personInterests input:checked");

    for (var i = 0; i < selectedOption.length; i++)
        personInterests.push($(selectedOption[i]).data("val"));

    $.post("/Ajax/account_settings/SavePersonInterests", { selectedPersonInterests: personInterests },
        function (rText, status, request) {
            if (rText === "error") {
                alert("Error in save details");
            } else {
                if (window.location.search != "") {
                    var plan = window.location.search.getValueByKey("plan");

                    if( plan == "silver" )
                             window.location = "/Upgrade?Offer=vip";
                        else window.location = "/Upgrade";
                    event.preventDefault();
                }
            }
        }
    ).fail(function () { /* alert("Error in save details"); */ });
}

function initCheckFirstStepBtnSelected() {
    $('#personType .btn-check-label .btn-check').on('click',
        function () {
            //Unchecked all btn
            $('.btn-check-label input:checkbox:checked').attr("checked", false);

            setTimeout(function () {
                setEnableOrDisableContinueBtn();
                setSelectOtherShowTextBox();
            }, 100);

            
        });
}

function setEnableOrDisableContinueBtn() {
    var selectedOption = $('#personType .btn-check-label input:checkbox:checked');
    var _OTHER = 16;

    if (selectedOption.length == 0) {
        $('#PersonTypesBtn').attr("disabled", true);
        $('#PersonTypesBtn').unbind('click');
        return;
    }

    if (selectedOption.data('val') != _OTHER) { 
        $('#PersonTypesBtn').attr("disabled", false);
        $('#PersonTypesBtn').off().click(stepOneContinue);
    } else {
        //=== First time ==============
        if ($('#otherText').val().length > 0) {
            $('#PersonTypesBtn').attr("disabled", false);
            $('#saveAcountDetailsBtn').off().click(saveAcount);
        } else {
            $('#PersonTypesBtn').attr("disabled", true);
            $('#PersonTypesBtn').unbind('click');

        }
        //=========================

        jQuery('#otherText').on('input propertychange paste', function () {
            if ($('#otherText').val().length > 0) {
                $('#PersonTypesBtn').attr("disabled", false);
                $('#PersonTypesBtn').off().click(stepOneContinue);
            } else {
                $('#PersonTypesBtn').attr("disabled", true);
            }
        });
    }
}

function setSelectOtherShowTextBox() {
    var selectedOption = $('#personType .btn-check-label input:checkbox:checked');
    var _OTHER = 16;

    if (selectedOption.length == 0)
        return;

    if (selectedOption.data('val') === _OTHER) { $('.otherText-block').show(); }
                                          else { $('.otherText-block').hide(); }
}



function initFollowingCarousel() {
    if ($('.following-carousel-slick').length > 0) {

        var $fcs = $('.following-carousel-slick');

        $fcs.on('init', function (event, slick) {
            $fcs.show();
        });

        $fcs.slick({
            dots: true,
            infinite: false,
            //            slidesToShow: 5,
            slidesToScroll: 1,
            variableWidth: true,
            swipeToSlide: true,
            touchMove: true,
            swipe: true,
            touchThreshold: 95,
            responsive: [
                {
                    breakpoint: 768,
                    settings: {
                        speed: 200,
                        arrows: false,
                    }
                },
                {
                    breakpoint: 480,
                    settings: {
                        speed: 200,
                        arrows: false,
                    }
                }
            ]
        });
    }
}

function SetFollowPerson(id) {
    var post =
        {
            objectId: id,
            isChecked: true
        }

    $.ajax({
        method: 'POST',
        url: '/Ajax/Follow/SetPersonPreferences',
        dataType: "json",
        data: post,
        success: function (data) {
           
        }
    });
};


function checkCaptch(callbackFunction) {
    var captchaObj = $("#CaptchaCode").get(0).Captcha;
    var params = {}
    params.CaptchaId = captchaObj.Id;
    params.InstanceId = captchaObj.InstanceId;
    params.UserInput = $("#CaptchaCode").val();

    $.getJSON('/Ajax/Captcha/CheckCaptcha', params, function (result) {
        if (true === result) {
            window[callbackFunction]();
        } else {
            alert("error in captcha");
            // always change Captcha code if validation fails
            captchaObj.ReloadImage();
        }
    });
};
var GTM_PopupAction_exit = "exit-registeration";

back_to_url = typeof (back_to_url) != 'undefined' ? back_to_url : "";

$('#Privacy').change(function () {
    if ($(this).is(':checked')) {
        $(".privacy-error-message").hide();
    }
});

if ($.validator) {
    $.validator.addMethod('userpassword', function (value, element) {
        return this.optional(element) || (value.match(/[a-zA-Z]/) && value.match(/[0-9]/));
    },
        'Password must contain at least one numeric and one alphabetic character.');

    $.validator.addMethod("email", function (value, element) {
        return this.optional(element) || emailRegex.test(value);
    }, "Please enter a valid email address.");
}
function CheckKeyEvent() {
    if (event.keyCode == 13) {
        if (isAbUser) {
            if (document.getElementById('signupForm').hidden == true) {
                event.preventDefault();
                showFullSignupForm();
                return;
            }
        }

        $("#btnSubmitReg").trigger("click");
    }
}
function validateRegistration() {
    var SucceededValidTerm = true;
    var SucceededValidPrivacy = true;

    if (!isAbUser() && $("#Terms").length && $("#Terms:checked").length == 0) {
        $("#termslabel").addClass("err");
        $(".terms-error-message").show();
        SucceededValidTerm = false;
    }

    if (!isAbUser() && $("#Privacy").length && $("#Privacy:checked").length == 0) {
        $("#privacylabel").addClass("err");
        $(".privacy-error-message").show();
        SucceededValidPrivacy = false;
    }

    var $form = $("#signupForm");
    if (!$($form).valid() || !SucceededValidTerm || !SucceededValidPrivacy) {
        return;
    }

    if (localStorage["abtesting"] !== undefined && localStorage["abtesting"] === "noinvisiblecaptcha") {
        sendRegistration();
    } else {
        if (window['grecaptcha'])
            grecaptcha.execute();
        else
            maAlertMessage("An error has occurred while trying to upload the reCAPTCHA service to validate that you are not a robot. Please try using another browser with a valid internet connection in order to sign up or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Signup Verification Error");
    }
}

function sendRegistration() {
    var $form = $("#signupForm");

    var object = getFormData($form);

    object.email = document.getElementById('submitInputEmail1').value;

    //if (localStorage.getItem("backtoafterpayment")) {
    //    object.backtoafterpayment = localStorage.getItem("backtoafterpayment");
    //}

    if (getCookie("RedirectUrl")) {
        object.backtoafterpayment = getCookie("RedirectUrl");
    }

    if (window["mixpanel"]["get_distinct_id"]) {
        object.mixpaneIdentity = mixpanel.get_distinct_id() || '';
    }
    var submitBtn = $form.children(".form-group").children("div[type=submit]");
    var submitBtnWrap = submitBtn.closest(".form-group");
    submitBtn.attr("disabled", true);
    submitBtnWrap.addClass("submit_button_wrapper_loader");

    object.entity_id = localStorage.getItem("entity_id");
    object.entity_type = localStorage.getItem("entity_type");
    if (location.pathname.toLowerCase().indexOf("artworks-for-sale") > -1) {
        object.entity_type = "artwork";
    }

    if (localStorage.getItem("cookieConsent")) {
        object.cookieConsent = localStorage.getItem("cookieConsent");
    }

    $.post("/Ajax/Registration/RegisterBasic", object)

        .done(function (data) {
            if (data.Success) {
                EmitEvent('UserRegistration', object);
                var command = getParameterByName("command");
                if (command) {
                    setCookie("RedirectUrl", appendQs(getCookie("RedirectUrl"), "command", command));
                    back_to_url = getCookie("RedirectUrl");
                }

                var backto;
                if (location.pathname.toLowerCase().indexOf("art-appraisal") > -1) {
                    GTM_Send('event', 'registration', "appraisal", "", function () {
                        $("#userId").val("2");
                        unique_id = true;
                        PostArtworkDetails();
                    });
                    setTimeout(function () {
                        submitBtn.attr("disabled", false);
                        submitBtnWrap.removeClass("submit_button_wrapper_loader");
                    }, 2000);
                    return true;
                } else if (location.pathname.toLowerCase().indexOf("artworks-for-sale") > -1 ||
                    location.pathname.toLowerCase().indexOf("auctionresults") > -1 ||
                    location.pathname.toLowerCase().indexOf("artwork") > -1) {
                    var artId = $("#encrypted-artwork-id").val();
                    var est = $('#current-estimate').val();
                    if (artId != null && artId != '' && est != null && est != '') {
                        back_to_url = back_to_url.replace("?msg=welcome", "");
                        backto = appendQs(back_to_url, "artworkId", artId);
                        backto = appendQs(backto, "estPrice", est);
                        maStorageVariables.setVariable("ShowAvailabilityPopup", true);
                    } else {
                        backto = back_to_url;
                    }
                } else if (location.pathname.toLowerCase().indexOf('organization') > -1 ||
                    location.pathname.toLowerCase().indexOf('exhibition') > -1 || 
                    (location.pathname.toLowerCase().indexOf('auctionhouse') > -1)) {
                    back_to_url = back_to_url.replace("?msg=welcome", "");
                    var objectId = $("#current-objectid").val();
                    var currentMethod = $('#current-method').val();
                    var currentModule = $('#current-module').val();
                    if (objectId != null && currentMethod != '' && currentModule != null && currentModule != '') {
                        backto = appendQs(back_to_url, "objectId", objectId);
                        backto = appendQs(backto, "currentMethod", currentMethod);
                        backto = appendQs(backto, "currentModule", currentModule);
                        maStorageVariables.setVariable("showContactVenuePopup", true);
                    } else {
                        backto = back_to_url;
                    }
                }
                else {
                    var msg = "welcome";
                    var label = "";

                    if (back_to_url) {
                        backto = back_to_url;
                        label = "before_payment"
                        label = "from_price_details"
                        if (backto.indexOf('msg=welcome') === -1) {
                            backto = appendQs(back_to_url, "msg", msg); // getCookie("AfterRegUrl");
                        }
                        if (backto.toLowerCase().indexOf('appraisalid') !== -1) {
                            backto = appendQs(back_to_url, "p", 1);
                        }
                    }
                    else {
                        backto = appendQs("/my-preferences", "msg", msg);
                        label = "general_registration"
                    }
                }
                if (data.IsCollectionTrial) {
                    backto = "/Collection?msg=upgradecollection";
                    setCookie("RedirectUrl", appendQs("/Collection?msg=upgradecollection", "command", command));
                    label = "general_registration";
                    GTM_Send('event', 'MyCollection', 'StartFreeTrial', 'register');
                    mixpanel.track('Collection Trial Subscription ', {
                        "Source Page": formatPageName(page_name),
                        'CTA Name': 'Collection Trial Subscription',
                        "Collection Plan": data.CollectionPlan,
                        "Collection Plan Code": data.CollectionPlanCode
                    });
                }

                var paywallViewsCount = maStorageVariables.getVariable("paywallViewsCount");
                var paywallViewsLimit = maStorageVariables.getVariable("paywallViewsLimit");
                var label2 = backto;

                var qcol = getParameterByName('collection');
                if (qcol && qcol.length && backto.indexOf('collection=') === -1) {
                    backto = backto + (backto.indexOf('?') === -1 ? '?' : '&') + 'collection=' + qcol;
                }

                if (typeof (paywallViewsLimit) != 'undefined' && typeof (paywallViewsCount) != 'undefined') {
                    var viewLimitText = "_Group_" + (paywallViewsLimit > 0 ? paywallViewsLimit : "NoLimit");
                    // var viewCountText = " paywallViewsCount:" + paywallViewsCount;
                    label += (viewLimitText);
                    label2 = paywallViewsCount >= paywallViewsLimit ? "reachLimit" : "No";
                }

                backto = appendQs(backto, "signup", 1);
                if (location.href.indexOf('redirectUrl=') !== -1)
                    backto = getParameterByName("redirectUrl", window.location.href);

                setCookie("UserCookieConsent", localStorage.getItem('cookieConsent'), -1);

                localStorage.removeItem("visitedPageNo");
                localStorage.removeItem("userSessionCount");
                localStorage.removeItem("userSessionDate");
                initializeUserSession(true)

                if ((!(location.pathname.toLowerCase().indexOf("art-appraisal") > -1))) {
                    GTM_Send('event', 'registration', label, label2, function () { location.href = backto; });
                }
                else {
                    location.href = backto;
                }

                if (parent) {
                    parent.postMessage(galleryAuthPostMessage, '*')
                };

                //}, 100);
                //}

                //GTM_Send('event', 'navigation', GTM_PopupAction_exit, "signup", success_function);
            } else {
                $(".form-messages").html('<p class="form-error-message">' + data.RegistrationError + '</p>');
                submitBtn.attr("disabled", false);
                submitBtnWrap.removeClass("submit_button_wrapper_loader");
                grecaptcha.reset();
                mixpanelMngo.SendErrorReport(data.RegistrationError);
            }
        })
        .fail(function () {
            $(".form-messages").html('<p class="form-error-message">Error in sign up</p>');
            submitBtn.attr("disabled", false);
            submitBtnWrap.removeClass("submit_button_wrapper_loader");
            grecaptcha.reset();
            mixpanelMngo.SendErrorReport("Error in sign up");
        });
}

function logout() {
    if (window['history_module'] && window['history_module'].length && window['history_module'][0]["ExternalClearDB"])
        window['history_module'][0].ExternalClearDB();
    maStorageVariables.setVariableToCleanOnLogout("paywallViewsCount")
    RemovePageParameterFromURL("login");
    RemovePageParameterFromURL("signup");
    mixpanel.track('Logout', {
        "Source Page": formatPageName(page_name)
    });
    mixpanel.reset();
    maStorageVariables.logout();
    maSessionVariables.logout()
    localStorage.removeItem("entity_id");
    localStorage.removeItem("entity_type");
    localStorage && (localStorage.removeItem("accessToken") || localStorage.removeItem("refID"));
    //document.location.replace("/Ajax/Login/LogoutAndRedirect");
    LogoutAndRedirect();
}

function showLiveChat() {
    document.body.classList.remove('menu-open');
    document.getElementById('ma-navigation').classList.remove('open');
    zE(function () {
        zE('messenger', 'show');
        zE('messenger', 'open');
    });
}

function showFullSignupForm() {
    var $form = $("#signupForm2");
    if (!$($form).valid()) {
        FormChangedPostMessage();
        return;
    }
    
    if (document.getElementById('btnSubmitReg').textContent == "Log in") {

        if ($(".par-with-popup").length == 1) {
            var emailInputElement = document.getElementById('exampleInputEmail1')
            if (emailInputElement) {
                document.getElementById('login_email').value = emailInputElement.value;
                if (emailInputElement.value.trim() !== '') {
                    $('#login_dialog').on('shown.bs.modal', function (e) {
                        var passwordField = $("#login_passw");
                        passwordField.focus();
                    });
                }
            }
            $(".par-with-popup").click();
            return
        }

        //document.getElementById('btnSubmitReg').setAttribute('onclick', '');
        var isSignupLogin = window.location.pathname == "/login" || location.pathname.toLowerCase().indexOf("/signup") > -1;
        var showNewSignUp = document.getElementById("showNewSignUp").value;
        $("body").append("<p class='par-with-popup popup' data-query='isSignupLoginPage=" + isSignupLogin + "&showNewSignUp=" + showNewSignUp + "' id='login' data-dismiss='modal'>Log in</p>");
        $(".par-with-popup").click();
        FormChangedPostMessage();
        return;
    }

    var object = getFormData($form);
    document.getElementById("submitInputEmail1").value = object.email;
    document.getElementById('back-button').hidden = false;

    $("#signupForm2").hide();
    $("#signupForm").show();

    document.getElementById('txtSignupPassword').focus();

    FormChangedPostMessage();
}

function FormChangedPostMessage() {
    if (parent) {
        parent.postMessage("galleryAuthBodyChanged", '*');
    };
}

function enableEmail(id) {    
    document.getElementById(id).removeAttribute('disabled');
    document.getElementById(id).focus();
    document.getElementById(id).style.color = "#131721";
    document.getElementById('editIcon').style.color = "#131721";
}

function hideFullSignupForm() {
    $("#signupForm").hide();
    $("#signupForm2").show();
    document.getElementById('back-button').hidden = true;
    document.getElementById('submitInputEmail1').setAttribute('disabled', 'true');
    document.getElementById('submitInputEmail1').style.color = "#aaaaaa";
    document.getElementById('editIcon').style.color = "#aaaaaa";
}

function toggleLoginForm(showLogin) {
    event.preventDefault();
    var loginDialog = document.getElementById('login_dialog');
    if (window.location.pathname == "/signup" && loginDialog) {
        if (loginDialog.style.display == "block") {
            loginDialog.style.display = "none";
        }
    }
    $("#signupForm2").show();
    $("#signupForm").hide();
    var showNewSignUp = document.getElementById("showNewSignUp").value;
    var loginTitle = showNewSignUp == "true" ? "Welcome Back" : "Log in to your account";
    var signupTitle = showNewSignUp == "true" ? "Sign up to Continue" : "Join MutualArt (FREE!)";
    document.getElementById('joinFree').textContent = showLogin ? loginTitle : signupTitle;
    document.getElementsByClassName('google-btn')[0].innerHTML = "<span></span>" + (showLogin ? "Log in " : "Sign up ") + "with Google";
    document.getElementsByClassName('fb-btn')[0].innerHTML = "<span></span>" + (showLogin ? "Log in " : "Sign up ") + "with Facebook";
    document.getElementsByClassName('apple-btn')[0].innerHTML = "<span></span>" + (showLogin ? "Log in " : "Sign up ") + "with Apple";
    document.getElementById('loginWithoutPassword').hidden = !showLogin ? true : false;
    document.getElementById('signupText').hidden = showLogin ? true : false;
    document.getElementById('loginText').hidden = !showLogin ? true : false;
    document.getElementById('btnSubmitReg').setAttribute('onclick', 'showFullSignupForm()');
    document.getElementById('btnSubmitReg').innerHTML = showLogin ? "Log in" : "Sign up";
    document.getElementById('back-button').hidden = true;
    $('.modal-body').removeClass(!showLogin ? 'login-modal' : 'signup-modal').addClass(showLogin ? 'login-modal' : 'signup-modal');
    FormChangedPostMessage();
}

function togglePasswordVisibility(id) {
    var passwordField = document.getElementById(id);
    var eye = id == 'login_passw' ? '#eye-icon2' : '#eye-icon';
    var type = passwordField.getAttribute('type') == 'password' ? 'text' : 'password';
    if (type == 'text') {
        $(eye).removeClass('m-icon-eye-blocked');
        $(eye).addClass('m-icon-eye');
    } else {
        $(eye).removeClass('m-icon-eye');
        $(eye).addClass('m-icon-eye-blocked');
    }
    passwordField.setAttribute('type', type);
    passwordField.focus();
}

function LogoutAndRedirect() {
    var logoutUserAndRedirect = function () {
        LogoutUser();
        document.location.replace("/Ajax/Login/LogoutAndRedirect");
    }
    $.post("/Ajax/Login/LogoutUser")
        .done(function (data) {
            logoutUserAndRedirect()
        })
        .fail(function () {
            logoutUserAndRedirect()
        });
}

$(document).ready(function () {
    $("#logoutLink").on('click', logout);
    $("#signupForm input").keydown(function (event) {
        if (event.keyCode == 13) {
            validateRegistration();
        }
    });
});;
var initiateLogin;
var manageDevicesPageNumber = 0;
var isUserReachedDeviceLimit = false;
var userLogin;
function loadFacebook() {
    LoadScript('https://connect.facebook.net/en_US/all.js');
    if (!window.fbJSInit && typeof (FB) == 'undefined') {
        fbJSInit = true;
        window.fbAsyncInit = function () {
            if (typeof (FB) != 'undefined') {
                FB.init({
                    appId: facebokkAppId,
                    autoLogAppEvents: true,
                    xfbml: true,
                    version: 'v5.0'
                });
                fbApiInit = true;
            }
        }
    };
}

function fbEnsureInit(callback, options) {
    if (!window.fbApiInit) {
        loadFacebook();
        setTimeout(function () { fbEnsureInit(callback); }, 50);
    } else {
        if (callback) {
            callback(options);
        }
    }
}

function getCheckAvailabilityURL(goToUrl) {
    if (location.pathname.toLowerCase().indexOf("artworks-for-sale") > -1 ||
        location.pathname.toLowerCase().indexOf("auctionresults") > -1 ||
        location.pathname.toLowerCase().indexOf("artwork") > -1) {
        var artId = $("#encrypted-artwork-id").val();
        var est = $('#current-estimate').val();
        if (artId != null && artId != '' && est != null && est != '') {
            goToUrl = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "artworkId=" + artId + "&estPrice=" + est;
            maStorageVariables.setVariable("ShowAvailabilityPopup", true);
        }
    }
    return goToUrl;
}

function getContactVenueURL(goToUrl) {
    if (location.pathname.toLowerCase().indexOf('organization') > -1 ||
        location.pathname.toLowerCase().indexOf('exhibition') > -1 ||
        (location.pathname.toLowerCase().indexOf('auctionhouse') > -1)) {
        var objectId = $("#current-objectid").val();
        var currentMethod = $('#current-method').val();
        var currentModule = $('#current-module').val();
        if (objectId != null && currentMethod != '' && currentModule != null && currentModule != '') {
            goToUrl = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "objectId=" + objectId + "&currentModule=" + currentModule + "&currentMethod=" + currentMethod;
            maStorageVariables.setVariable("showContactVenuePopup", true);
        }
    }
    return goToUrl;
}

function handleLoginAPIResponse(thisObj, result, label) {
    var command = getParameterByName("command");
    if (command) {
        back_to_url = appendQs(getCookie("RedirectUrl"), "command", command);
        setCookie("RedirectUrl", back_to_url);
    }

    if (!result.IsNewUser && back_to_url && back_to_url.indexOf("msg=welcome") > -1) {
        back_to_url = back_to_url.replace(back_to_url.indexOf("?msg=welcome") > -1 ? "?msg=welcome" : "&msg=welcome", "");
    }
    var goToUrl = back_to_url || result.GoToUrl;    

    if (location.href.indexOf('redirectUrl=') !== -1)
        goToUrl = getParameterByName("redirectUrl", window.location.href);

    if (result.GoToUrl && result.GoToUrl.indexOf('my-collection') > -1)
        goToUrl = result.GoToUrl;

    setCookie("UserCookieConsent", localStorage.getItem('cookieConsent'), -1);
    var func = function () {
        if (thisObj.options.onsuccess) {
            thisObj.options.onsuccess(result);
        }
        else {
            goToUrl = getCheckAvailabilityURL(goToUrl)
            if (!_login_appraisl_redirect_to_payment_page()) {
                location.href = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "login=1";
            }
        }
    };
    if (result.IsNewUser) {
        if (!_login_appraisl_redirect_to_payment_page()) {
            var paywallViewsCount = maStorageVariables.getVariable("paywallViewsCount");
            var paywallViewsLimit = maStorageVariables.getVariable("paywallViewsLimit");
            var label2 = goToUrl;
            if (typeof (paywallViewsLimit) != 'undefined' && typeof (paywallViewsCount) != 'undefined') {
                var viewLimitText = " Group" + (paywallViewsLimit > 0 ? paywallViewsLimit : "NoLimit");
                // var viewCountText = " paywallViewsCount:" + paywallViewsCount;
                label += viewLimitText;
                label2 = paywallViewsCount >= paywallViewsLimit ? "reachLimit" : "No";
            }
            
            GTM_Send('event', 'registration', label, label2, function () {
                goToUrl = getCheckAvailabilityURL(goToUrl)
                if (goToUrl.indexOf('msg=upgradecollection') > -1)
                    location.href = goToUrl;
                else if (goToUrl.indexOf('artworkId') > -1 && goToUrl.indexOf('estPrice') > -1)
                    location.href = goToUrl;
                else
                    location.href = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "msg=welcome";
            });
        }
    }
    else {
        if (isUserReachedDeviceLimit) {
            goToUrl = appendQs(goToUrl, "msg", "GetMoreAccounts");
        }
        func();
    }

    if (parent) {
        parent.postMessage(galleryAuthPostMessage, '*')
    };
}

function ma_apple() {
    this.options = {
        onsuccess: null
    };
    this.uniqueId = '';
    this.isInitiated = false;

    var thisObj = this;
    thisObj.url = '/Ajax/Login/AppleLogin';

    this.doLogin = async function () {
        thisObj.initAppleId();
        if (thisObj.isInitiated) {
            await AppleID.auth.signIn().then(function (response) {
                thisObj.maLogin(response);
            }).catch(function (error) {
                console.log(error);
            });
        }
        else {
            setTimeout(function () { thisObj.doLogin(); }, 50);
        }
    }

    this.initAppleId = function () {
        if (window['_appleSignInClientId']) {
            thisObj.uniqueId = Math.random().toString(36).substring(2, 10);
            AppleID.auth.init({
                usePopup: true,
                scope: 'name email',
                nonce: thisObj.uniqueId,
                clientId: window['_appleSignInClientId'],
                redirectURI: location.origin + thisObj.url,
                state: 'Initial user authentication request'
            });
            thisObj.isInitiated = true;
        }
    }

    this.checkStatus = async function () {
        $(".form-messages").html('');
        AddScriptStyleResources(window["AppleJS"], "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js", null, function (res) {
            thisObj.doLogin();
            window["AppleJS"] = true;
        });
    }

    this.maLogin = function (meData) {
        if (isLoggedIn()) {
            document.location.reload(true);
            return;
        }
        meData.isOneTapNoName = false;
        meData.uniqueId = thisObj.uniqueId;

        if (window["mixpanel"]["get_distinct_id"]) {
            meData.mixpaneIdentity = mixpanel.get_distinct_id() || '';
        }

        meData.entity_id = localStorage.getItem("entity_id");
        meData.backtoafterpayment = getCookie("RedirectUrl");
        meData.entity_type = localStorage.getItem("entity_type");
        meData.planId = typeof (planId) == 'undefined' ? '' : planId;

        if (window["mixpanel"]["get_distinct_id"]) {
            meData.mixpaneIdentity = mixpanel.get_distinct_id() || '';
        }
        $.post(thisObj.url, meData, function (result) {
            if (result.Success) {
                handleLoginAPIResponse(thisObj, result, 'Apple');
            }
            else if (result.IsUserReachedDeviceLimit) {
                initiateLogin = function () { thisObj.maLogin(meData); }
                openManageDevicesPopup(result.Login);
            }
            else {
                $(".form-messages").html("<p class='form-error-message'>" + result.Msg + "</p>");
            }
        });
    }
}

var maApple = new ma_apple();

function ma_fb() {
    this.fbloginStatus = null;
    this.options = {
        onsuccess: null
    };

    var thisObj = this;

    this.checkResponseStatus = function (loginStatusResponse) {
        thisObj.fbloginStatus = loginStatusResponse;

        if (loginStatusResponse.status == 'connected') {
            thisObj.maLogin(loginStatusResponse);
        }
        else {
            //do nothing, user cancel or reject login
        }
    }

    this.checkStatus = function (options) {
        fbEnsureInit(this.checkStatusAsync, options);
    }

    this.checkStatusAsync = function (options) {
        jQuery.extend(thisObj.options, options);
        /*
        else {
        */
        //FB.getLoginStatus(function (loginStatusResponse) {
        if (thisObj.fbloginStatus && thisObj.fbloginStatus.status != 'unknown') {
            thisObj.doLogin(thisObj.fbloginStatus);
        }
        else {
            if (typeof (FB) != 'undefined') {
                FB.login(function (loginStatusResponse) {
                    thisObj.fbloginStatus = loginStatusResponse;
                    thisObj.doLogin(thisObj.fbloginStatus);
                }, { scope: "email", return_scopes: true });
            }
        }
        //}
    }

    this.curStatus = function () {
        return thisObj.fbloginStatus;
    }
    this.onOneTapSignin = function () {
        if (isLoggedIn()) {
            document.location.reload(true);
            return;
        }
        if (typeof (FB) != 'undefined') {
            FB.getLoginStatus(function (response) {
                thisObj.checkResponseStatus(response);
            });
        }
    }
    this.doLogin = function (loginStatusResponse) {
        if (loginStatusResponse.status == 'connected') {
            thisObj.maLogin(loginStatusResponse);
        }
        else {
            //thisObj.fbLogin();
        }
    }

    this.maLogin = function (loginStatusResponse) {
        if (isLoggedIn()) {
            document.location.reload(true);
            return;
        }
        if (typeof (FB) != 'undefined') {
            FB.api('/me', { fields: 'first_name,last_name,email' }, function (meData) {
                var url = "/Ajax/LogIn/FbUserLogIn";
                meData.planId = typeof (planId) == 'undefined' ? '' : planId;
                if (window["mixpanel"]["get_distinct_id"]) {
                    meData.mixpaneIdentity = mixpanel.get_distinct_id() || '';
                }

                var data = $.extend(meData, loginStatusResponse.authResponse);

                if (getCookie("RedirectUrl")) {
                    data.backtoafterpayment = getCookie("RedirectUrl");
                }

                data.entity_id = localStorage.getItem("entity_id");
                data.entity_type = localStorage.getItem("entity_type");

                //console.log(loginStatusResponse.authResponse);
                //console.log(data);
                $.post(url, data,

                    function (res) {
                        var result = res;

                        var goToUrl = back_to_url || result.GoToUrl || '';

                        if (location.href.indexOf('redirectUrl=') !== -1)
                            goToUrl = getParameterByName("redirectUrl", window.location.href);

                        if (!result.IsNewUser && goToUrl.indexOf('?msg=welcome') > -1) {
                            goToUrl = removeURLParameter(goToUrl, 'msg');
                        }
                        var command = getParameterByName("command");
                        if (command) {
                            goToUrl = appendQs(goToUrl, "command", command);
                        }

                        if (result.GoToUrl && result.GoToUrl.indexOf('my-collection') > -1)
                            goToUrl = result.GoToUrl;

                        if (result.IsUserReachedDeviceLimit) {
                            initiateLogin = function () { thisObj.maLogin(loginStatusResponse); }
                            openManageDevicesPopup(result.Login);
                        }
                        else if (!result || typeof (result.Success) == 'undefined') {
                            alert('Error!');
                        }
                        else if (result.Success) {
                            setCookie("UserCookieConsent", localStorage.getItem('cookieConsent'), -1);
                            var func = function () {
                                if (thisObj.options.onsuccess) {
                                    thisObj.options.onsuccess(result);
                                }
                                else {
                                    goToUrl = getCheckAvailabilityURL(goToUrl)
                                    if (!_login_appraisl_redirect_to_payment_page()) {
                                        location.href = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "login=1";
                                    }
                                }
                            };

                            if (result.IsNewUser) {
                                //GTM_Send('event', 'registration', 'fb', result.GoToUrl, func);
                                if (!_login_appraisl_redirect_to_payment_page()) {
                                    var paywallViewsCount = maStorageVariables.getVariable("paywallViewsCount");
                                    var paywallViewsLimit = maStorageVariables.getVariable("paywallViewsLimit");
                                    var label = "fb";
                                    var label2 = goToUrl

                                    if (typeof (paywallViewsLimit) != 'undefined' && typeof (paywallViewsCount) != 'undefined') {
                                        var viewLimitText = "_Group_" + (paywallViewsLimit > 0 ? paywallViewsLimit : "NoLimit");
                                        // var viewCountText = " paywallViewsCount:" + paywallViewsCount;
                                        label += viewLimitText
                                        label2 = paywallViewsCount >= paywallViewsLimit ? "reachLimit" : "No";
                                    }

                                    GTM_Send('event', 'registration', label, label2, function () {
                                        goToUrl = getCheckAvailabilityURL(goToUrl)
                                        location.href = goToUrl + ((goToUrl.indexOf('?') >= 0) ? "&" : "?") + "login=1";;
                                    });
                                }
                            }
                            else {
                                if (isUserReachedDeviceLimit) {
                                    goToUrl = appendQs(goToUrl, "msg", "GetMoreAccounts");
                                }
                                func();
                            }

                            if (parent) {
                                parent.postMessage(galleryAuthPostMessage, '*')
                            };
                        }
                        else {
                            alert(result.Msg)
                        }
                    });
            });
        }
    }

    this.fbLogin = function () {
        if (typeof (FB) != 'undefined') {
            FB.Event.subscribe('auth.statusChange', thisObj.checkResponseStatus);
            FB.login(thisObj.checkResponseStatus, { scope: 'email', return_scopes: true })
        }
    }

    this.hideOneTap = function myfunction() {
        $(".fb-wrap-tap").fadeOut(500);
        maStorageVariables.setVariable('lastClostFBOneTap', Date.now() + 2 * 24 * 60 * 60 * 1000);
    }
    this.showOneTap = function () {
        var lastClose = maStorageVariables.getVariable('lastClostFBOneTap');
        if (!lastClose || lastClose < Date.now()) {
            if (typeof (FB) != 'undefined') {
                FB.getLoginStatus(function (response) {
                    thisObj.fbloginStatus = response;
                    if (response.status === 'not_authorized' || response.status === 'connected') {
                        if (response.status === 'not_authorized')
                            $(".fb-wrap-tap .sign-up-message").show();

                        $(".fb-wrap-tap").fadeIn(500);
                        //mixpanel.track('View FB one tap');
                        GTM_Send('event', 'social', 'click', 'View FB one tap');
                    }
                });
            }
        }
    }
}

function _login_appraisl_redirect_to_payment_page() {
    if (IsPage("artappraisalform2")) {
        GTM_Send('event', 'registration', "appraisal", "", function () {
            $("#userId").val("2");
            PostArtworkDetails();
        });
        setTimeout(function () {
            submitBtn.attr("disabled", false);
            submitBtnWrap.removeClass("submit_button_wrapper_loader");
        }, 2000);

        return true;
    }

    return false
}

var mafb = new ma_fb()

function ma_goo() {
    var self = this;

    if (!IsPage('art_appraisal') && !IsPage('art_appraisalform') && !IsPage('art_appraisalform2') && !IsPage('auth') && !IsPage('portal') && !IsPage('galleryauth')) {
        $(window).on("load", function () {
            if (window['google'] && window['google']['accounts']) {
                google.accounts.id.initialize({
                    client_id: clientId,
                    scopes: scopes,
                    callback: self.onOneTapSignin,
                    //moment_callback: onShowUI,
                    cancel_on_tap_outside: false,
                    auto_select: false,
                    itp_support: false,
                    use_fedcm_for_prompt: true
                });
                google.accounts.id.prompt();
                //fbEnsureInit(mafb.showOneTap);
                //google.accounts.id.prompt(function (notification) {
                //    if (!notification.isNotDisplayed() && !notification.getSkippedReason()) {
                //        onShowUI();
                //    } else {
                //        fbEnsureInit(mafb.showOneTap);
                //    }
                //});
            }
        });
    }

    this.options = {
        onsuccess: null
    };

    var thisObj = this;
    this.first_try_login_immediate = true;

    var clientId = '359909624727-7tr3rsf1cbugqp29tsm9ar4qrr1d87a6.apps.googleusercontent.com';
    var apiKey = 'ABQIAAAAOdMW2Z_VBdY6OgY4XJNmZhTv7LpeZ6HgrASlK_RgKPD24o0NHBR0OYAi77Z4fSIXOqZHZsuvMnU7Vg';
    var scopes = ['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'];
    this.checkStatusInit = function (options) {
        jQuery.extend(thisObj.options, options);

        if (gapi) {
            gapi.client.setApiKey(apiKey);
        }
    }

    this.checkStatus = function (options) {
        if (IsPage("auth") || IsPage("galleryauth")) {
            jQuery.extend(thisObj.options, options);
            checkAuth();
        }
        else {
            var redirectUrl = window.location.origin;
            var isSignUpPage = $('.modal-body .signup-modal').length == 1
            if (isSignUpPage) redirectUrl += `/signup`
            else redirectUrl += '/login'
            location.href = `https://accounts.google.com/o/oauth2/v2/auth?scope=${scopes.join(" ")}&response_type=code&redirect_uri=${redirectUrl}&client_id=${clientId}&state=${redirectUrl}`;
        }
    }

    this.onOneTapSignin = function (token) {
        //checkAuth();
        //this.checkStatus();
        //gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false }, handleAuthResult);
        //makeApiCall(token, true);
        maLogin({}, token.credential, true);
    }

    function checkAuth() {
        //        gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: thisObj.first_try_login_immediate }, handleAuthResult);
        gapi.client.setApiKey(apiKey);
        gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false }, handleAuthResult);

        thisObj.first_try_login_immediate = false;
    }

    this.getGoogleAccessToken = function (googleAuthCode, googleAuthRedirectUrl) {
        $.get(`/Ajax/LogIn/GetGAccessToken?code=${googleAuthCode}&redirectUrl=${googleAuthRedirectUrl}`, function (authResult) {
            if (authResult.access_token) {
                handleAuthResult(authResult)
            }
            else {
                handleAuthError(authResult, true)
            }
        });
    }

    function handleAuthResult(authResult, isOneTapNoName) {
        if (authResult && !authResult.error) {
            var access_token = authResult.access_token || authResult.credentials;
            makeApiCall(access_token, false, isOneTapNoName);
        }
        else {
            handleAuthError(authResult, authResult.error === "idpiframe_initialization_failed" && authResult.cookie_policy === "single_host_origin")
            //gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false }, handleAuthResult);
        }
    }
    function handleAuthError(authResult, showAlertMessage) {
        if (showAlertMessage) {
            maAlertMessage("There is an error that prevents us from completing the Sign-in operation. This could be because of an active ad blocker or due to Incognito mode.<br/><br/>"
                + "Who is affected?<br/>"
                + "Users that Sign-in using their Google account while in Incognito tab or with active ad blocker.<br/><br/>"
                + "How to solve it?<br/>"
                + "You can disable your ad blocker or use a regular tab to Sign-in using your Google account.<br/><br/>"
                + "Who can I speak with?<br/>"
                + "Please don’t hesitate to contact us directly at support@mutualart.com.", ["OK"], null, "Uh-oh");
        }
        mixpanel.track("Google auth error", {
            "Details": authResult.details,
            "Error": authResult.error,
            "Cookie Policy": authResult.cookie_policy
        });
    }

    // Load the API and make an API call.  Display the results on the screen.
    function makeApiCall(access_token, oneTap, isOneTapNoName) {
        $.get('https://www.googleapis.com/oauth2/v1/userinfo?' + (oneTap ? 'id_token=' : 'access_token=') + access_token, function (res) {
            maLogin(res, access_token, null, isOneTapNoName);
        });
    }

    function maLogin(data, access_token, isOneTap, isOneTapNoName) {
        if (isLoggedIn()) {
            document.location.reload(true);
            return;
        }
        data.accessToken = access_token;
        if (getCookie("RedirectUrl")) {
            data.backtoafterpayment = getCookie("RedirectUrl");
        }

        var url = isOneTap ? '/Ajax/Login/OneTapLogin' : '/Ajax/LogIn/GUserLogIn';
        //data.planId = planId;
        data.planId = (typeof planId === "undefined" ? null : planId);
        data.isOneTapNoName = isOneTapNoName;
        if (window["mixpanel"]["get_distinct_id"]) {
            data.mixpaneIdentity = mixpanel.get_distinct_id() || '';
        }

        data.entity_id = localStorage.getItem("entity_id");
        data.entity_type = localStorage.getItem("entity_type");

        $.post(url, data, function (res) {
            var result = res;

            if (isOneTap && result.IsNewUser && !result.Success) {
                gapi.auth.authorize({ client_id: clientId, scope: scopes, immediate: false },
                    function (authResult) { handleAuthResult(authResult, true) });
                return;
            }

            if (result.IsUserReachedDeviceLimit) {
                initiateLogin = function () { maLogin(data, access_token, isOneTap, isOneTapNoName) };
                openManageDevicesPopup(result.Login);
            }
            else if (!result || typeof (result.Success) == 'undefined') {
                alert('Error!');
            }
            else if (result.Success) {
                handleLoginAPIResponse(thisObj, result, 'google');
                if (parent) {
                    parent.postMessage(galleryAuthPostMessage, '*')
                };
            }
            else {
                alert(result.Msg)
            }
        });
    }
}

var magoo = new ma_goo()

var urlParams = new URLSearchParams(window.location.search);
var googleAuthCode = urlParams.get('code');
var googleAuthRedirectUrl = urlParams.get('state');
if (googleAuthCode && googleAuthRedirectUrl) {
    magoo.getGoogleAccessToken(googleAuthCode, googleAuthRedirectUrl)
}

// Copyright 2012 Google Inc. All Rights Reserved.

/**
* @fileoverview A simple script to automatically track Facebook and Twitter
* buttons using Google Analytics social tracking feature.
* @author api.nickm@gmail.com (Nick Mihailovski)
* @author api.petef@gmail.com (Pete Frisella)
*/

/**
* Namespace.
* @type {Object}.
*/
var _ga = _ga || {};

/**
* Ensure global _gaq Google Analytics queue has been initialized.
* @type {Array}
*/
var _gaq = _gaq || [];

/**
* Tracks social interactions by iterating through each tracker object
* of the page, and calling the _trackSocial method. This function
* should be pushed onto the _gaq queue. For details on parameters see
* http://code.google.com/apis/analytics/docs/gaJS/gaJSApiSocialTracking.html
* @param {string} network The network on which the action occurs.
* @param {string} socialAction The type of action that happens.
* @param {string} opt_target Optional text value that indicates the
*     subject of the action.
* @param {string} opt_pagePath Optional page (by path, not full URL)
*     from which the action occurred.
* @return a function that iterates over each tracker object
*    and calls the _trackSocial method.
* @private
*/
_ga.getSocialActionTrackers_ = function (
    network, socialAction, opt_target, opt_pagePath) {
    return function () {
        var trackers = _gat._getTrackers();
        for (var i = 0, tracker; tracker = trackers[i]; i++) {
            tracker._trackSocial(network, socialAction, opt_target, opt_pagePath);
        }
    };
};

/**
* Tracks Facebook likes, unlikes and sends by suscribing to the Facebook
* JSAPI event model. Note: This will not track facebook buttons using the
* iframe method.
* @param {string} opt_pagePath An optional URL to associate the social
*     tracking with a particular page.
*/
_ga.trackFacebook = function (opt_pagePath) {
    try {
        if (typeof (FB) != 'undefined' && FB.Event && FB.Event.subscribe) {
            FB.Event.subscribe('edge.create', function (opt_target) {
                _gaq.push(_ga.getSocialActionTrackers_('facebook', 'like',
                    opt_target, opt_pagePath));
            });
            FB.Event.subscribe('edge.remove', function (opt_target) {
                _gaq.push(_ga.getSocialActionTrackers_('facebook', 'unlike',
                    opt_target, opt_pagePath));
            });
            FB.Event.subscribe('message.send', function (opt_target) {
                _gaq.push(_ga.getSocialActionTrackers_('facebook', 'send',
                    opt_target, opt_pagePath));
            });
        }
    } catch (e) { }
};

/**
* Handles tracking for Twitter click and tweet Intent Events which occur
* everytime a user Tweets using a Tweet Button, clicks a Tweet Button, or
* clicks a Tweet Count. This method should be binded to Twitter click and
* tweet events and used as a callback function.
* Details here: http://dev.twitter.com/docs/intents/events
* @param {object} intent_event An object representing the Twitter Intent Event
*     passed from the Tweet Button.
* @param {string} opt_pagePath An optional URL to associate the social
*     tracking with a particular page.
* @private
*/
_ga.trackTwitterHandler_ = function (intent_event, opt_pagePath) {
    var opt_target; //Default value is undefined
    if (intent_event && intent_event.type == 'tweet' ||
        intent_event.type == 'click') {
        if (intent_event.target.nodeName == 'IFRAME') {
            opt_target = _ga.extractParamFromUri_(intent_event.target.src, 'url');
        }
        var socialAction = intent_event.type + ((intent_event.type == 'click') ?
            '-' + intent_event.region : ''); //append the type of click to action
        _gaq.push(_ga.getSocialActionTrackers_('twitter', socialAction, opt_target,
            opt_pagePath));
    }
};

/**
* Binds Twitter Intent Events to a callback function that will handle
* the social tracking for Google Analytics. This function should be called
* once the Twitter widget.js file is loaded and ready.
* @param {string} opt_pagePath An optional URL to associate the social
*     tracking with a particular page.
*/
_ga.trackTwitter = function (opt_pagePath) {
    intent_handler = function (intent_event) {
        _ga.trackTwitterHandler_(intent_event, opt_pagePath);
    };

    //bind twitter Click and Tweet events to Twitter tracking handler
    twttr.events.bind('click', intent_handler);
    twttr.events.bind('tweet', intent_handler);
};

/**
* Extracts a query parameter value from a URI.
* @param {string} uri The URI from which to extract the parameter.
* @param {string} paramName The name of the query paramater to extract.
* @return {string} The un-encoded value of the query paramater. undefined
*     if there is no URI parameter.
* @private
*/
_ga.extractParamFromUri_ = function (uri, paramName) {
    if (!uri) {
        return;
    }
    var regex = new RegExp('[\\?&#]' + paramName + '=([^&#]*)');
    var params = regex.exec(uri);
    if (params != null) {
        return unescape(params[1]);
    }
    return;
};

//function onOneTapSignin(token, csrf) {
//    magoo.onOneTapSignin(token.credential, token.clientId)
//}

function onShowUI(e) {
    //mixpanel.track("View Google One-Tap");
    GTM_Send('event', 'social', 'click', 'View Google One-Tap');
    $("#credential_picker_iframe").css("z-index", "99999999");
}

function openDevicePopup(popupName, mixpanelEventName, successCallback) {
    $(`.modal:not(#${popupName}_dialog)`).modal('hide');
    if ($("#" + popupName + "_dialog").length) {
        $("#" + popupName + "_dialog").remove()
    }
    $.ajax({
        method: 'POST',
        url: '/Ajax/AjaxLoader/Popup',
        data: { popupName },
        headers: { UserLogin: userLogin },
        success: function (data) {
            $("body").append(data);
            mixpanel.track(mixpanelEventName, {
                "Source Page": formatPageName(page_name)
            });
            setTimeout(function () {
                successCallback();
            }, 300)
        }
    });
}

function openManageDevicesPopup(usrLogin) {
    isUserReachedDeviceLimit = true;
    userLogin = usrLogin;
    var popupName = "ManageDevices";
    openDevicePopup(popupName, "View too many devices pop up", function () {
        initManageDevicePopup()
    })
}

function removeUserDevices() {
    var checkedDevices = $("input[name='manage-devices-checkbox']:checked")
    var idUserDevices = Object.values(checkedDevices).map(x => x.value);
    try {
        $("#manage-device-login-button").prop('disabled', true);
        $.post(`/Ajax/LogIn/RemoveDevice`, { idUserDevices }, function (authResult) {
            if (authResult.Success) {
                mixpanel.track("Click LOG IN");
                initiateLogin();
            }
        });
    } catch (e) {
        $("#manage-device-login-button").prop('disabled', false);
    }
}

function goToNextDevices() {
    if (manageDevicesPageNumber < manageDevicesTotalPages) {
        $('#manage-devices-slick').slick('slickGoTo', ++manageDevicesPageNumber);
    }
}

function goToPreviousDevices() {
    if (manageDevicesPageNumber > 0) {
        $('#manage-devices-slick').slick('slickGoTo', --manageDevicesPageNumber);
    }
}

function disableLoginForm(isDisabled) {
    $("#login_dialog #login_email").prop('disabled', isDisabled);
    $("#login_dialog #login_passw").prop('disabled', isDisabled);
    $("#login_dialog .login-btn-custom").prop('disabled', isDisabled);
    $("#login_dialog #editIcon").prop('disabled', isDisabled);
    $("#login_dialog #showHideLoginPassword").prop('disabled', isDisabled);
};
function initFacebook(facebokkAppId) {
    window.fbAsyncInit = function () {
        if (typeof(FB) != 'undefined') { FB.init({ status: false, appId: facebokkAppId }); }
    };
    window.onbeforeunload = function (e) {
        if (CheckGlobal("gapi") && window["gapi"].auth) {
            gapi.auth.signOut();
        }
    };
}

function Hotjur_record() {
    (function (h, o, t, j, a, r) {
        h.hj = h.hj || function () { (h.hj.q = h.hj.q || []).push(arguments) };
        h._hjSettings = { hjid: 266794, hjsv: 5 };
        a = o.getElementsByTagName('head')[0];
        r = o.createElement('script'); r.async = 1;
        r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
        a.appendChild(r);
    })(window, document, '//static.hotjar.com/c/hotjar-', '.js?sv=');
};
function Coordinates(lat, lng) {
    this.lat = lat;
    this.lng = lng;
}

Coordinates.prototype.coordinate = function () {
    return this.lat + ',' + this.lng;
};


function checkCoordinates(locationAddress, localCoordinates, idAddress, OptionalCallback) {
    var googleRetValCoordinate = null;
    if (localCoordinates.latitude != null && localCoordinates.longitude != null) {
        CallInitMap(latitude, longitude, nameOnMap);
    }

    if (locationAddress) {
        var geocoder = new google.maps.Geocoder();
        console.log('google.maps.Geocoder');
        //async function
        geocoder.geocode({ 'address': locationAddress },
            function (results, status) {
                if (status === google.maps.GeocoderStatus.OK) {
                    if (results.length) {
                        var latitude = results[0].geometry.location.lat()
                        var longitude = results[0].geometry.location.lng();

                        googleRetValCoordinate = new Coordinates(latitude, longitude);

                        if (localCoordinates.latitude == null || localCoordinates.longitude == null) {
                            CallInitMap(latitude, longitude, nameOnMap);
                        }

                        //if (!isEqualLocalAndGoogleCoordinates(localCoordinates, googleRetValCoordinate)) {
                        //    updateGoogleAddressCoordinates(googleRetValCoordinate,
                        //        localCoordinates,
                        //        locationAddress,
                        //        google.maps.GeocoderStatus.OK,
                        //        idAddress);
                        //}
                    }
                } else {//Fail
                    //updateGoogleAddressCoordinates(googleRetValCoordinate, null, null, status, idAddress);
                }
                if (OptionalCallback)
                    OptionalCallback();
            });
    }
}

function isEqualLocalAndGoogleCoordinates(localCoordinates, googleCoordinates) {
    var retVal = false;

    if (localCoordinates && googleCoordinates) {
        if (localCoordinates.lat && localCoordinates.lng && googleCoordinates.lat && googleCoordinates.lng) {
            if ((localCoordinates.lat === googleCoordinates.lat) && (localCoordinates.lng === googleCoordinates.lng)) {
                retVal = true;
            }
        }
    }

    return retVal;
}

function updateGoogleAddressCoordinates(googleCoordinatesData, localCoordinatesData, locationAddressData, statusData, idAddressData) {
    $.ajax({
        method: 'POST',
        url: '/Ajax/AjaxLoader/UpdateGoogleAddressCoordinates',
        dataType: "json",
        data: {
            address: unescapeHtml(locationAddressData),
            googleCoordinates: googleCoordinatesData.coordinate(),
            oldCoordinates: localCoordinatesData.coordinate(),
            status: statusData,
            idAddress: idAddressData
        },

        success: function (data) {
            //console.log(data);
        },
        error: function (jqXHR, exception) {
            console.log(exception);
            var msg = '';
        }
    });
}

//function CallInitMap(latitude, longitude, nameOnMap) {
//    initMapWithLocation('cdm',
//        {
//            lat: parseFloat(latitude),
//            lng: parseFloat(longitude),
//            place: nameOnMap
//        },
//        false);
//}

//var ___map;

//function initMapWithLocation(cont, loc, scrollwheel) {
//    ___map = new google.maps.Map(document.getElementById(cont), {
//        center: loc,
//        zoom: 8
//    });

//    var marker = new google.maps.Marker({
//        position: loc,
//        map: ___map
//    });

//    //var mrk = gmap.addMarker(loc.lat, loc.lng, { place: loc.place, events: loc.events, placeLink: loc.placeLink });
//    //mrk.setIcon('/img/map-marker-current.png');
//}



function CallInitMap(latitude, longitude, nameOnMap) {
    initMapWithLocation('#cdm',
        {
            lat: parseFloat(latitude),
            lng: parseFloat(longitude),
            place: nameOnMap
        },
        false);
}

function initMapWithLocation(cont, loc, scrollwheel) {
    var gmap = MAApp.GMap(cont, scrollwheel);
    console.log('MAApp.GMap - initMapWithLocation');

    gmap.map.setCenter(new google.maps.LatLng(loc.lat, loc.lng));
    var mrk = gmap.addMarker(loc.lat, loc.lng, { place: loc.place, events: loc.events, placeLink: loc.placeLink });
    mrk.setIcon('/img/map-marker-current.png');
};
//====== Google Analytics Search ========================================
function googleAnalyticsExhibitionSearch(term) {
    GTM_Send('event', 'search', 'exhibition-search', term);
}

function googleAnalyticsFilters(pageName, term) {
    GTM_Send('event', 'filter', pageName + '-filter', term);
}

function googleAnalyticsAdvandedFilters(pageName) {
    GTM_Send('event', 'search', pageName + '-advancedfilter', 'press');
}

function googleAnalyticsBuyAndSale(pageName, term) {
    GTM_Send('event', 'filter', pageName + '-buyAndSale', term);
}
//=======================================================================

//====== Google Analytics Presented =====================================
function googleAnalyticsShowMoreBtnInDashboard(pageNum) {
    GTM_Send('event', 'navigation', 'Show More', 'Show more X ' + pageNum);
}
//=======================================================================

var GTM_nonInteraction = 0;

var GTM_EVENT_TYPE = {
    ARTWORK: 'artwork',
    NAVIGATION: 'navigation',
    LOCATION: 'location',
    PAYMENT: 'payment',
    ARTIST: 'artist'
}

function GTM_PageView(title, _location, path) {
    gtag('event', 'page_view', {
        page_title: title || page_name,
        page_location: _location || window.location.href,
        page_path: path || window.location.pathname
    })
    //gtag('config', _uat, $.extend({}, {
    //    page_path: location.pathname,
    //    location: location.href
    //}, extra || {}));
}

function GTM_Send(event, eventCategory, eventAction, eventLabel, callback, nonInteraction, event_value, extra) {
    if (callback) {
        callback = function (suc_callback) {
            var call_excuted = false;

            var ret_callback = function () {
                if (!call_excuted) {
                    call_excuted = true;

                    if (suc_callback) {
                        suc_callback();
                    }
                }
            }

            setTimeout(function () { console.log("setTimeout"); ret_callback(); }, 2000)

            return ret_callback;
        }(callback);
    }

    if (nonInteraction) {
        GTM_nonInteraction = nonInteraction;
    }

    //  ga('send', event, eventCategory, eventAction, eventLabel, {
    //nonInteraction: GTM_nonInteraction,
    //hitCallback: function() {
    //          if (callback) {
    //              callback();
    //          }
    //      }
    //  });
    var _data = $.extend({}, {
        'event_category': eventCategory,
        'event_label': eventLabel,
        'value': event_value
    }, extra);
    
    if (callback)
        _data['event_callback'] = callback

    gtag(event, eventAction, _data);

    window.uetq = window.uetq || [];
    window.uetq.push(event, eventAction, { 'event_category': eventCategory, 'event_label': eventLabel, 'event_value': isNaN(event_value) || event_value == null ? 0 : event_value });
    if (window['fbq']) {
        fbq('trackCustom', eventCategory, { 'event_action': eventAction, 'event_label': eventLabel, 'event_value': isNaN(event_value) || event_value == null ? 0 : event_value });
    }

    GTM_nonInteraction = 0;
}

function UET_Send(event, eventCategory, eventAction, eventLabel, event_value) {
    window.uetq = window.uetq || [];
    window.uetq.push(event, eventAction, { 'event_label': eventLabel, 'event_value': isNaN(event_value) || event_value == null ? 0 : event_value, 'event_category': eventCategory });
}

function GTM_SendGoogleConsentEvent() {
    var GDPRCountries = ["4E562B2333CCD71B", "7A7BFEC2B03F4597", "4ECDCF7DC305DA1D", "C5223B3BCDA0A5E2", "7505DE26958EADC2", "043B559C31AFF3A8", "E9939C0F19398684", "18B5AEEF2E14A8EB", "A971F46A0C63A2B5", "BBE8AA9F4D9C9124", "7C93EBCAF5AD7D4D", "94DA07DF8BD39D56", "6D43E9AD83324CE4", "1EF3DB395E0F5321", "869F77102C4968E4", "F85D38E2F95A4E4F", "4435869938F352D5", "E4F0139ACF3C108D", "F5AF4ECB3A5408BB", "FA86B873A1DC95AC", "A65CBECEB4E9E447", "1AE4705184F375FC", "8AC410C3FC6C9A92", "1F2419484012E7CD", "8F8860B1A1105430", "5A7B37AECBBFC290", "B260F10CB64D2590", "5A5F6C147C648681", "5B7979EF6C18CF51", "10899245E3FE8E22", "FB7AA01D70707FB3", "C0C79799C861CBC8", "D0BF3F8A893BC51B", "5A2B9E3AC0EF2DD9"];

    var cookieValue = getCookie('IdLocation');
    if (cookieValue)
    {
        var parts = cookieValue.split(',');
        var country = parts[parts.length - 1];

        if (GDPRCountries.includes(country)) {
            if (getCookie('UserCookieConsent')) {
                var objCookie = JSON.parse(getCookie('UserCookieConsent'));
                gtag('consent', 'update', {
                    'ad_storage': objCookie['functionality'],
                    'ad_user_data': objCookie['necessary'],
                    'ad_personalization': objCookie['advertising'],
                    'analytics_storage': objCookie['analytics']
                });
            } else {
                gtag('consent', 'default', {
                    'ad_storage': true,
                    'ad_user_data': true,
                    'ad_personalization': true,
                    'analytics_storage': true
                });
            }
        
        }
    }
}

function UET_SendUETConsentEvent() {
    var uetConsentCountries = ["84FFB49EF5919E6A", "C0C79799C861CBC8", "FB7AA01D70707FB3"]; //UK, Europe and Switzerland
    var cookieValue = getCookie('IdLocation');
    if (cookieValue)
    {
        var parts = cookieValue.split(',');
        var country = parts[parts.length - 1];
        if (uetConsentCountries.includes(country)) {
            if (getCookie('UserCookieConsent')) {
                var objCookie = JSON.parse(getCookie('UserCookieConsent'));
                window.uetq = window.uetq || [];
                window.uetq.push('consent', 'update', {
                    'ad_storage': objCookie['necessary'] == true ? 'granted' : 'denied'
                });
            } else {
                window.uetq = window.uetq || [];
                window.uetq.push('consent', 'update', {
                    'ad_storage': 'granted'
                });
            }
        }
        else {
            window.uetq = window.uetq || [];
            window.uetq.push('consent', 'update', {
                'ad_storage': 'granted'
            });
        }
    }
};
function AlertModule(n) {
  function o(n) {
    var t = $(this).data("href");
    return t = appendQs(t, "al_index", $(this).data("index")), window.location.href = t, n.preventDefault(), !1;
  }

  function s() {
    t._elem.find(".alert-tooltip").fadeOut(200);

    t._elem.find("#chk_alertMessageShow").is(":checked") && maStorageVariables.setVariable("al_tooltip_seen", !0);
    mixpanel.track("Click got it on web alert tutorial", {
      "Do not show again": t._elem.find("#chk_alertMessageShow").is(":checked")
    });
    GTM_Send("event", "Web Alert", "Click", "Got-it");
  }

  function h(n) {
    return Math.round((n + Number.EPSILON) * 100) / 100;
  }

  function c(n) {
    var i = n.target,
        r;
    t.lastScroll = i.offsetHeight + i.scrollTop;
    r = h(t.lastScroll / i.scrollHeight);

    t._alertProgress.css("width", r * 100 + "%");
  }

  function l(n) {
    t._elem.addClass("intl").show();

    t._elem.html(LOADER_HTML);

    $.ajax({
      method: "GET",
      url: "/ajax/alert/GetAlert",
      data: {
        Id: t.idItem,
        ShowTooltip: !maStorageVariables.getVariable("al_tooltip_seen")
      },
      cache: !0,
      headers: {
        cache: "true"
      },
      success: n,
      error: function error(n) {
        console.error(n);
        i();
      }
    });
  }

  function a(n) {
    n ? (t._elem.html(n), u(), f()) : i();
  }

  function f(n) {
    var r, i;

    t._elem.show();

    t._elem.hasClass("collapsed") || (n && t.lastScroll ? t.lastScroll && (t._alertContent[0].scrollTop = t.lastScroll) : (r = getParameterByName("al_index"), r && (i = t._alertContent.find("[data-index='{0}']".format(r)), i && i.length && i[0].scrollIntoView())));
  }

  function v(n) {
    n.preventDefault();
    localStorage.removeItem("alertID");
    mixpanel.track("Click to close web alert");
    GTM_Send("event", "Web Alert", "Click", "Close");
    i();
  }

  function y() {
    t._elem.toggleClass("collapsed");

    t._alertContainer.trigger("scroll");

    mixpanel.track("Email web view action", {
      Action: t._elem.hasClass("collapsed") ? "Collapse" : "Expand"
    });
    t._elem.hasClass("collapsed") ? (t.lastScroll = t._alertContainer[0].offsetHeight + t._alertContainer[0].scrollTop, GTM_Send("event", "Web Alert", "View Action", "Collapse"), $(".social-toolbar.fixed").show()) : (f(!0), GTM_Send("event", "Web Alert", "View Action", "Expand"), $(".social-toolbar.fixed").hide());
  }

  function i() {
    localStorage.removeItem("alertID");

    t._elem.remove();
  }

  var t = this,
      r,
      u,
      e;
  return t.lastScroll = 0, t._elem = $(n), r = function r() {
    return t.idItem = localStorage.getItem("alertID"), t.idItem && (l(a), RemovePageParameterFromURL("alertID")), e;
  }, u = function u() {
    t._alertContainer = t._elem.find(".alert-container");
    t._alertContent = t._elem.find(".alert-content");
    t._alertProgress = t._elem.find(".alert-progress");
    t._alertNav = t._alertContainer.find(".alert-navigation");
    t._title = t._elem.find(".alert-navigation .title");

    t._elem.on("click", ".alert-navigation", y);

    t._elem.on("click", ".btn-close", v);

    t._elem.on("click", ".alert-tooltip a.got-it", s);

    if (t.idItem) {
      t._alertContainer.on("scroll", c);

      t._alertContent.on("click", "a[data-index][data-href]", o);

      getParameterByName("open") == "true" && (t._elem.find(".alert-navigation").click(), RemovePageParameterFromURL("open"));
    } else i();
  }, e = {
    init: r,
    name: "AlertModule"
  };
}
//# sourceMappingURL=AlertModule.min.js.map;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

var ExpanderModules = {
  modules: [],
  reload: function reload() {
    for (var i in this.modules) {
      this.modules[i].Reload();
    }
  },
  init: InitExpanderModules
};

function InitExpanderModules(parent) {
  var $expanders = parent && parent.length ? $(parent).find('[data-module-expander]') : $("[data-module-expander]");
  $expanders.each(function (i, e) {
    var ex = new ExpanderModule(e).init();
    if (ex) ExpanderModules.modules.push(ex);
  });
}

function ExpanderModule(elem) {
  var self = this;
  self._elem = $(elem);
  if (!self._elem.length || self._elem.data('init') === true) return;

  var init = function init() {
    self.settings = self._elem.data();
    self.expanded = self.settings.expanded || false;
    self.initHeight = self.settings.initHeight || self._elem.css("style") || self._elem[0].clientHeight;
    self._expander = self._elem.next();

    self._elem.data("init", true);

    if (!self._expander.hasClass('text-expander')) {
      self._expander = $('<a class="text-expander link-secondary-light" data-is-see-more-mixpanel="true"  data-mixpanel=\'{"CTA Name": "See More"}\'><span></span> <i class="icon-see-more-arrow-down"></i></a>'.format(self.settings.expandClass));

      self._elem.after(self._expander);
    }

    reloadConfiguration();

    self._expander.on('click', onExpand);

    return _export;
  };

  function reloadConfiguration() {
    if (Math.min(self.initHeight, self._elem[0].clientHeight) >= realHeight()) {
      //Text too small
      self._expander.removeClass("active");

      self._elem.addClass("expanded");
    } else {
      //Text size enough to set expander
      self._expander.addClass("active");

      self._elem.animate({
        "maxHeight": self.initHeight
      });

      self._elem.removeClass("expanded");
    }
  } //Get element real height


  function realHeight() {
    var h = self._elem ? self._elem[0].scrollHeight : 0;

    if (self._elem.find("span.br").length) {
      h += self._elem.find("span.br").length * 28;
    }

    return h;
  }

  function updateMixpanelProps(e, isExpanded) {
    var parentElement = null;

    if (e && e.target && e.target.parentElement) {
      parentElement = $(e.target.parentElement);
    }

    if (parentElement) {
      if (!parentElement.data('is-see-more-mixpanel')) {
        return;
      }

      var mixpanelData = null;
      var jsonData = $(e.target.parentElement).data('mixpanel');

      if (isJson(jsonData)) {
        if (_typeof(jsonData) != 'object') {
          mixpanelData = JSON.parse(jsonData);
        } else {
          mixpanelData = jsonData;
        }
      }

      if (mixpanelData && typeof mixpanelData['CTA Name'] != "undefined") {
        mixpanelData['CTA Name'] = isExpanded ? 'See Less' : 'See More';
        $(e.target.parentElement).data('mixpanel', JSON.stringify(mixpanelData));
        $(e.target.parentElement).attr('data-mixpanel', JSON.stringify(mixpanelData));
      }
    }
  }

  function onExpand(e) {
    var moreTextIcon = $(this).find("i");

    if (self._elem.hasClass("expanded")) {
      updateMixpanelProps(e, true);

      self._elem.animate({
        "maxHeight": self.initHeight
      }, null, function () {
        if (self.settings.lines) self._elem.css("-webkit-line-clamp", self.settings.lines.toString());
      });

      self._elem.removeClass("expanded");

      moreTextIcon.removeClass("icon-see-less-arrow-up");
      moreTextIcon.addClass("icon-see-more-arrow-down");
    } else {
      updateMixpanelProps(e, false);

      self._elem.css("-webkit-line-clamp", "unset");

      self._elem.animate({
        "maxHeight": realHeight()
      });

      self._elem.addClass("expanded");

      moreTextIcon.addClass("icon-see-less-arrow-up");
      moreTextIcon.removeClass("icon-see-more-arrow-down");
    }
  }

  var _export = {
    init: init,
    Reload: reloadConfiguration
  };
  return _export;
}

ExpanderModules.init();

function onExpandAll() {
  var artworks = $(".results-wrapper .artwork-expander");
  var seeTexts = $(".results-wrapper .see-text");
  var arrowIcons = $(".results-wrapper .arrow-icon");
  var expanded = artworks[0].classList.contains('expanded');
  var mixpanelProp = {};

  for (var i = 0; i < artworks.length; i++) {
    var artwork = artworks[i];
    var seeText = seeTexts[i];
    var arrowIcon = arrowIcons[i];

    if (expanded) {
      artwork.classList.remove("expanded");
      artwork.style.webkitLineClamp = "unset";
      artwork.classList.add("display-none");
      seeText.innerHTML = "See more";
      arrowIcon.classList.add('m-icon-expand_arrow');
      arrowIcon.classList.remove('m-icon-collapse_arrow');
      mixpanelProp['View'] = "Less";
    } else {
      artwork.classList.add("expanded");
      artwork.classList.remove("display-none");
      seeText.innerHTML = "See less";
      arrowIcon.classList.add('m-icon-collapse_arrow');
      arrowIcon.classList.remove('m-icon-expand_arrow');
      mixpanelProp['View'] = "More";
    }
  }

  mixpanelProp['Artists'] = document.getElementById('artist-name').textContent;
  mixpanel.track('Artwork Details', mixpanelProp);
}
//# sourceMappingURL=ExpanderModule.js.map;
function ArtistBioModule(element) {
  var self = this;

  var init = function init() {
    //self._elem = $(element);
    //self._items = self._elem.find(".artist-biography-item");
    //self._currentItem = self._elem.find(".artist-biography-item.current");
    //self._items.css({ "position": "relative", "opacity": 0, "left": "100px" });
    //self._currentItem.css({ "opacity": 1, "left": "0" });
    //self._elem.find("[data-next]").on("click", Next);
    //self._elem.find("[data-prev]").on("click", Prev);
    //return _export;
    var sliderID = "#artistQuotes";
    $(sliderID).slick({
      arrows: true,
      dots: false,
      infinite: true,
      slidesToShow: 3,
      slidesToScroll: 1,
      variableWidth: false,
      variableHeight: true,
      dotsClass: "slick-dots",
      appendDots: $("#artistQuotesNavigation"),
      prevArrow: '<a class="nav-hov active left" ><button data-gtm="event,artist,Click on previous quote" data-mixpanel=\'{ "CTA Name": "on next quote" }\' class="bio-prev" data-prev><i class="m-icon-keyboard_arrow_left"></i></button></a>',
      nextArrow: '<a class="nav-hov active right" ><button data-gtm="event,artist,Click on next quote" data-mixpanel=\'{ "CTA Name": "on next quote" }\' class="bio-next" data-next><i class="m-icon-keyboard_arrow_right"></i></button></a>',
      responsive: [{
        breakpoint: 1441,
        settings: {
          slidesToShow: 3,
          slidesToScroll: 1,
          centerPadding: '40px'
        }
      }, {
        breakpoint: 1281,
        settings: {
          slidesToShow: 3,
          slidesToScroll: 1,
          centerPadding: '40px'
        }
      }, {
        breakpoint: 1025,
        settings: {
          dots: true,
          slidesToShow: 1,
          slidesToScroll: 1,
          centerPadding: '10px'
        }
      }, {
        breakpoint: 800,
        settings: {
          dots: true,
          slidesToShow: 1,
          centerMode: true,
          slidesToScroll: 1,
          centerPadding: '10px'
        }
      }, {
        breakpoint: 480,
        settings: {
          dots: true,
          arrows: false,
          slidesToShow: 1,
          centerMode: true,
          slidesToScroll: 1,
          centerPadding: '2px'
        }
      }]
    });
    unSlickIfRequired(sliderID);

    function unSlickIfRequired(sliderID) {
      var curSlider = $(sliderID).slick('getSlick');
      var slidesToShow = curSlider.options.slidesToShow;

      if (curSlider && curSlider.slideCount <= slidesToShow) {
        curSlider.unslick();
        $(sliderID).addClass('no-slider');
        setTimeout(function () {
          adjustNonSlickWidth(sliderID, slidesToShow);
        }, 500);
      }
    }

    function adjustNonSlickWidth(sliderID, slidesToShow) {
      var containerWidth = $(sliderID).width();
      var sliderItemPadding = slidesToShow * 40 * 2; //  40 = padding + margin

      var itemWidth = (containerWidth - sliderItemPadding) / slidesToShow;
      $(sliderID).children('.homepage_artists_spaceing').each(function (index, item) {
        $(item).css('width', itemWidth);
      });
    }
  };

  function Next(e) {
    var nextElm = self._currentItem.next();

    if (nextElm.length) {
      SetActive(nextElm, false);
    } else {
      SetActive(self._elem.find(".artist-biography-item:first"), false);
    }

    ReloadExpanders();
  }

  function Prev(e) {
    var nextElm = self._currentItem.prev();

    if (nextElm.length) {
      SetActive(nextElm, true);
    } else {
      SetActive(self._elem.find(".artist-biography-item:last"), true);
    }

    ReloadExpanders();
  }

  function SetActive($next, isNext) {
    if ($next) {
      if (isNext) {
        // forward
        self._currentItem.animate({
          "opacity": 0,
          "left": "-100px"
        }, 300);

        $next.css({
          "position": "relative",
          "opacity": 0,
          "left": "-100px"
        });
      } else {
        // backwards
        self._currentItem.animate({
          "opacity": 0,
          "left": "100px"
        }, 300);

        $next.css({
          "position": "relative",
          "opacity": 0,
          "left": "100px"
        });
      }

      $next.addClass("current");

      self._currentItem.removeClass("current");

      $next.animate({
        left: 0,
        opacity: 1
      }, 300);
      initShowMore();
      self._currentItem = self._elem.find(".artist-biography-item.current");
    }
  }

  function SlideNext(target) {}

  function ReloadExpanders() {
    if (window['ExpanderModules']) window['ExpanderModules']['reload']();
  }

  var _export = {
    init: init,
    next: Next,
    elm: self
  };
  return _export;
}

$(document).ready(function () {
  $(".artist-biography-component").each(function (i, e) {
    window["artistBio_" + i] = new ArtistBioModule(e).init();
  });

  if (!unique_id) {
    if (IsPage("artist_graphs") && document.getElementById('isSampleArtist').value == "true") {
      var popup = '<p class="par-with-cta popup" hidden id = "signup" > <a class="cta hidden_signup" href="" data-dismiss="modal" data-toggle="modal" data-target="#signUp"></a></p > ';
      $("body").append(popup);
      setTimeout(function () {
        $(".cta.hidden_signup").click();
        $(".page-content").addClass("blur-5x");
      }, 500);
    }
  }

  RemovePageParameterFromURL("uad");
});

function onCloseSignUpPopup() {
  $(".page-content").removeClass("blur-5x");
}

$(document).on('click', function (e) {
  var $t = $(e.target);

  if ($t.attr("id") == "floating-promo-body" || $t.parents("#floating-promo-body").length) {
    if (!$t.attr("href")) {
      e.preventDefault();
      return false;
    }
  } else {
    if (!$('#floating-promo-body').hasClass("active") && ($t.attr("id") == "floating-promo" || $t.hasClass("artist-snapshot-promo-alert") || $t.parent().hasClass("bell-icon-container") || $t.parent().hasClass("artist-snapshot-promo-alert"))) {
      mixpanel.track("Click on alerts icon");
      GTM_Send('event', GTM_EVENT_TYPE.ARTIST, 'Click', 'Alerts icon');
      $('#floating-promo-body').addClass("active");
    } else {
      $('#floating-promo-body').removeClass("active");
    }
  }
});

var ArtistModule = function () {
  function add_event_listeners() {}

  ;

  init = function init() {
    //add_event_listeners();
    if ($(".artist-filter-save").length) $(".artist-filter-save").css("display", manager.hasQuery() ? "block" : "none");

    if (window['_isResultsMode'] && window['_resultsCount']) {
      var rowcount = parseInt(window['_resultsCount'] || 0);
      var resultCountContainer = $("span#resultsCount, span.resultsCountText");
      resultCountContainer.html((rowcount == 5000 ? 'Top ' + rowcount : rowcount == 0 ? 'No' : rowcount) + ' Results');
    }
  };

  var payment = {//stam: function () {
    //},
  };

  hide_all_steps = function hide_all_steps() {
    $(".filter_save_popup_wrap div[class^='filter_save_step']").each(function (index, element) {
      if (!$(element).hasClass("filter_save_step_1")) $(element).addClass("hidden");
    });
  };

  close_filter_popup = function close_filter_popup() {
    sessionStorage["filter_popup_closed"] = true;
    hide_all_steps();
    $(".artist-filter-save.mobile-btn-create-filter").removeClass("open-save");
    $(".filter_save_popup_wrap .filter_save_step_1").removeClass("hidden");
    $('.filter_save_popup_wrap').css('position', '');
    $('.filter_save_popup_wrap').css('zIndex', '');
    $('.filter_save_popup_wrap').css('margin-top', '');
    var ele_dashboard_list = $('.dashboard_list');
    var ele_filters_container = $('.mobile-filters-container-body');
    var isMobileView = IsMobileView();

    if (!isMobileView && ele_dashboard_list.length > 0 && ele_filters_container.length > 0) {
      var distance_Y = ele_filters_container.offset().top - ele_dashboard_list.offset().top;
      var prop_marginTop = 'marginTop';

      if (IsPage("exhibitionsearchresults") && $('.find-exhibitions-switch').css(prop_display) == 'none') {
        ele_dashboard_list.css(prop_marginTop, 50 + distance_Y);
      } else {
        ele_dashboard_list.css(prop_marginTop, distance_Y);
      }
    }
  };

  open_step_three = function open_step_three() {
    if (!$(".filter_save_popup_wrap .filter_save_step_3").hasClass('hidden')) return;
    var follow_button = $(".btn-follow[href]");

    if (follow_button.length > 0) {
      location.href = '/signup?command=alert';
      return;
    }

    hide_all_steps();
    $(".artist-filter-save.mobile-btn-create-filter").addClass("open-save");
    $(".filter_save_popup_wrap .filter_save_step_3").removeClass("hidden"); //$(".filter_save_popup_wrap .filter_save_step_3").find("input").val('');

    $(".filter_save_popup_wrap .filter_save_step_title").removeClass("hidden"); //var postTitle = "";
    //postTitle = AddToTitle(postTitle, GetSelectedArtistTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedSaleTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedPriceTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedMediaTitle());
    //postTitle = AddToTitle(postTitle, GetCreationYearTitle());
    //postTitle = AddToTitle(postTitle, GetHeightTitle());
    //postTitle = AddToTitle(postTitle, GetWidthTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedLotTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedTitleTitle());
    //postTitle = AddToTitle(postTitle, GetOrganizationTitle());
    //postTitle = AddToTitle(postTitle, GetSelectedAuctionHouseTitle());

    $(".filter_save_popup_wrap .filter_save_step_3").find("input").val(manager.getFilterText());
    mixpanel.track('Click to Create Custom filter');
    var $filter_save_popup_wrap = $('.filter_save_popup_wrap');
    var $filter_bubble_section = $('.filter-bubble-section');
    var $filters_container = $('.mobile-filters-container-body');
    $filter_save_popup_wrap.css('position', 'relative');
    $filter_save_popup_wrap.css('zIndex', '2');
    var isMobileView = IsMobileView();

    if (!isMobileView && $filter_bubble_section.length > 0 && $filters_container.length > 0) {
      var marginTopStr = $filter_save_popup_wrap.parent().css('margin-top');
      var containerMarginTop = marginTopStr ? +marginTopStr.replace(/\D/g, "") : 0;
      var savePopupDistanceFromBubbles = $filter_bubble_section.offset().top - $filter_save_popup_wrap.offset().top;
      var bubbleSectionHeight = $filter_bubble_section.height();
      var bubblesDistanceFromFilterContainer = $filters_container.offset().top - $filter_bubble_section.offset().top - bubbleSectionHeight;
      $filter_save_popup_wrap.css('margin-top', savePopupDistanceFromBubbles + containerMarginTop + bubbleSectionHeight + bubblesDistanceFromFilterContainer);
      $('.dashboard_list').css('margin-top', '0');
    }
  };

  open_step_four = function open_step_four() {
    var val = $(".filter_save_popup_wrap .filter_save_step_3").find("input").val();

    if (val == "") {
      return;
    }

    save_filter();
    hide_all_steps();
    $(".filter_save_popup_wrap .filter_save_step_4").removeClass("hidden");
    $(".filter_save_popup_wrap .filter_save_step_title").removeClass("hidden");
    $(".filter_save_popup_wrap .filter_save_step_4").find("input").val(val);

    if (IsPage('auction_search')) {
      close_filter_popup();
      maAlertMessage("<p>The filter has been added to your" + "<a class='link-primary' href='/my-preferences/saved-filters'> Saved Filters. </a>" + " </p><p>You will receive email alerts whenever a new artwork that meets your selected criteria is published. </p><p>You can see your saved filters, turn alerts on/off or delete them under My Preferences > Saved Filters.</p>", ["OK"], function () {}, null, null, "the Follow Filter");
    }
  };

  check_status_filter_saved_popup = function check_status_filter_saved_popup() {
    if (typeof sessionStorage["filter_popup_closed"] !== "undefined") {
      close_filter_popup();
    } else {
      hide_all_steps();
      $(".filter_save_popup_wrap .filter_save_step_2").removeClass("hidden");
    }
  };

  save_filter = function save_filter() {
    var postTitle = $(".filter_save_popup_wrap .filter_save_step_3").find("input").val();
    var postUrl = window.location.pathname + window.location.search;
    var post = {
      title: postTitle,
      isChecked: true,
      url: postUrl
    };
    $.ajax({
      method: 'POST',
      url: '/Ajax/Follow/SetFiltersPreferences',
      dataType: "json",
      data: post,
      success: function success(data) {
        if (data.IsSuccess == true) {
          GTM_Send('event', 'save', 'search', postTitle); // mixpanel.track("Save Custom Filter", { "Custom Filter Name": postTitle });
          //if (post.isChecked) {
          //    elem.removeClass("forms");
          //    elem.html("Remove alert for this filter");
          //    GTM_Send('event', 'save', 'search', postTitle);
          //}
          //else {
          //    elem.addClass("forms");
          //    elem.data('command', 'alert');
          //    elem.html("Create alert for this filter");
          //}
        } else {
          maAlertMessage(data.Message, ["OK"], function () {}); //elem.addClass("forms");
          //elem.data('command', 'alert');
          //elem.html("Create alert for this filter");
        }

        var appliedFiltersTabName = manager.getAppliedFilterTabNames();
        var uniquesAppliedFiltersTabName = new Set(appliedFiltersTabName).values().toArray();
        mixpanel.track("Save Custom Filter", {
          "CTA Name": "Saved Follow filter",
          "Custom Filter Name": postTitle,
          "Filtered": uniquesAppliedFiltersTabName.join(', ').replace(/,([^,]*)$/, ' and$1')
        });
      }
    });
  };

  function AddToTitle(title, values) {
    if (values == "" || values == undefined) return title;
    if (title != "" && title != undefined) title += ", ";
    title += values;
    return title;
  }

  function GetSelectedArtistTitle() {
    return GetSelectedCheckboxesTitle("artistBlock");
  }

  function GetSelectedCheckboxesTitle(boxId) {
    var selectedLabels = $("#" + boxId + " input[checked]").parent().find("label");
    var cnt = selectedLabels.length;
    if (cnt == 0) return "";
    if (cnt == 1) return selectedLabels.html();

    if (cnt == 2) {
      return selectedLabels[0].innerHTML + ", " + selectedLabels[cnt - 1].innerHTML;
    }

    var title = selectedLabels[0].innerHTML + " ... " + selectedLabels[cnt - 1].innerHTML;
    if (cnt > 2) title += " (" + cnt + ")";
    return title;
  }

  function GetSelectedSaleTitle() {
    var selectedArtistsLabels = $("#saleOutcomeBlock input[checked]").parent().find("label");
    var cnt = selectedArtistsLabels.length;
    if (cnt == 0) return "";
    var title = "";
    if (cnt == 1 && selectedArtistsLabels[0].innerHTML == "All") return "";
    selectedArtistsLabels.each(function (i) {
      var label = selectedArtistsLabels[i];
      if (i > 0) title += "+";
      title += selectedArtistsLabels[i].innerHTML;
    });
    return title;
  }

  function GetSelectedPriceTitle() {
    var title = "";
    var minVal = $("#startingPrice").val();
    var maxVal = $("#maxPrice").val();
    var minExists = minVal != "" && parseInt(minVal) > 0;
    var maxExists = maxVal != "" && parseInt(maxVal) > 0;

    if (minExists) {
      title = "$" + minVal;
      if (!maxExists) title += " Min";
    }

    if (maxExists) {
      if (minExists) title += "-";
      title += "$" + maxVal;
      if (!minExists) title += " Max";
    }

    return title;
  }

  function GetCreationYearTitle() {
    var title = "";
    var minVal = $("#startingYear").val();
    var maxVal = $("#maxYear").val();
    var minExists = minVal != "" && parseInt(minVal) > 0;
    var maxExists = maxVal != "" && parseInt(maxVal) > 0;
    if (minExists || maxExists) title += "Year: ";

    if (minExists) {
      title = minVal;
      if (!maxExists) title += " Min";
    }

    if (maxExists) {
      if (minExists) title += "-";
      title += maxVal;
      if (!minExists) title += " Max";
    }

    return title;
  }

  function GetHeightTitle() {
    var title = "";
    var minVal = $("#startingHeight").val();
    var maxVal = $("#maxHeight").val();
    var minExists = minVal != "" && parseInt(minVal) > 0;
    var maxExists = maxVal != "" && parseInt(maxVal) > 0;

    if (minExists || maxExists) {
      var msr = $(".measureTitle")[0].innerHTML;
      title += "Height: ";
    }

    if (minExists) {
      title = minVal + msr;
      if (!maxExists) title += " Min";
    }

    if (maxExists) {
      if (minExists) title += "-";
      title += maxVal + msr;
      if (!minExists) title += " Max";
    }

    return title;
  }

  function GetWidthTitle() {
    var title = "";
    var minVal = $("#startingWidth").val();
    var maxVal = $("#maxWidth").val();
    var minExists = minVal != "" && parseInt(minVal) > 0;
    var maxExists = maxVal != "" && parseInt(maxVal) > 0;

    if (minExists || maxExists) {
      var msr = $(".measureTitle")[0].innerHTML;
      title += "Width: ";
    }

    if (minExists) {
      title = minVal + msr;
      if (!maxExists) title += " Min";
    }

    if (maxExists) {
      if (minExists) title += "-";
      title += maxVal + msr;
      if (!minExists) title += " Max";
    }

    return title;
  }

  function GetOrganizationTitle() {
    var title = GetSelectedCheckboxesTitle("organizationBlock");
    if (title != "" && title != undefined) title = "Organization: " + title;
    return title;
  }

  function GetSelectedMediaTitle() {
    var title = GetSelectedCheckboxesTitle("mediaBlock");
    if (title != "" && title != undefined) title = "Media: " + title;
    return title;
  }

  function GetSelectedAuctionHouseTitle() {
    var title = GetSelectedCheckboxesTitle("houseBlock");
    if (title != "" && title != undefined) title = "Auction House: " + title;
    return title;
  }

  function GetSelectedLotTitle() {
    var title = $("#lotNumber").val();
    if (title == undefined) return "";
    if (title != "") title = "Lot: " + title;
    return title;
  }

  function GetSelectedTitleTitle() {
    return $("#keyword").val();
  }

  return {
    init: init,
    payment: payment,
    close_filter_popup: close_filter_popup,
    open_step_three: open_step_three,
    open_step_four: open_step_four,
    check_status_filter_saved_popup: check_status_filter_saved_popup,
    save_filter: save_filter,
    PageID: 'artist\auctionresults'
  };
}();
//# sourceMappingURL=ArtistModule.js.map;
var ArtworksModule = function () {
  function add_event_listeners() {}

  ;

  init = function init() {
    var showAvailabilityPopup = maStorageVariables.getVariable("ShowAvailabilityPopup");

    if (typeof showAvailabilityPopup != 'undefined') {
      if (showAvailabilityPopup) {
        ShowCheckAvailabilityPopup();
      }
    }

    add_event_listeners();
  };

  function ShowCheckAvailabilityPopup() {
    var artworkId = document.location.search.getValueByKey('artworkId');
    var estPrice = document.location.search.getValueByKey('estPrice');

    if (artworkId != null && artworkId != '' && estPrice != null && estPrice != '') {
      setTimeout(ShowPopup("artworkId=" + artworkId + "&estPrice=" + estPrice), 2000);
    }
  }

  function ShowPopup(query) {
    var popup = "<a class='popup private' hidden data-no-overlay='true' data-id='privateSalesBuyNow' data-reload='true' data-query='" + query + "' > CHECK AVAILABILITY </a>";
    $("body").append(popup);
    $(".private").click();
    maStorageVariables.deleteVariable("ShowAvailabilityPopup");
  }

  var payment = {
    stam: function stam() {}
  };
  return {
    init: init,
    payment: payment
  };
}();
//# sourceMappingURL=ArtworksModule.js.map;
var filtersAPIProxy = function () {
    const server = '/api/';
    const endpoints = {
        pageContentTMP: 'page/content/{moduleId}/{methodName}/{objectId}/{controllerName}'
    };

    return {
        getPageContent: function (pageNum, resultContainer, ajaxData, callback) {
            // defaults
            /// resultContainer = resultContainer || panel;

            startLodder(resultContainer);

            var query = document.location.search;

            if (ScopedVariables && ScopedVariables.etag) {
                query = appendQueryParam(query, 'ETag', ScopedVariables.etag);
            }

            query = handleHideRecommendation(query);

            var endpoint = endpoints.pageContentTMP
                .replace('{moduleId}', ajaxData.moduleId)
                .replace('{methodName}', ajaxData.methodName)
                .replace('{objectId}', ajaxData.objId || '')
                .replace('{controllerName}', ajaxData.controllerName)

            if (dataStorage.getRndmNumber()) {
                query = appendQueryParam(query, "_", dataStorage.getRndmNumber())
            }

            $.ajax({
                type: 'GET',
                url: server.concat(endpoint, query),
                dataType: 'json',
                contentType: 'application/json',
                /*
                data: JSON.stringify({
                    moduleId: ajaxData.moduleId,
                    methodName: ajaxData.methodName,
                    objId: ajaxData.objId
                }),
                */
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getPageContent] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        }
    }
};

var autocompleteAPIProxy = function () {
    var self = this;
    const server = '/api/';
    const endpoints = {
        getArtistsTMP: 'artists/autoComplete/',
        getArtworksTMP: 'artworks/autoComplete/{contains}',
        getLocationsTMP: 'locations/autoComplete/{contains}',
        getAuctionVenuesTMP: 'auctionVenues/autoComplete/{contains}',
        searchAllTMP: 'searchAll/autoComplete/{contains}/{type}',
        globalSearchTMP: 'globalSearch/autoComplete/{type}',
        getAllByTypesTMP: 'searchAll/autocomplete/{contains}'
    };

    return {
        getAllByTypes: function (contains, callback, options) {
            var endpoint = endpoints.getAllByTypesTMP
                .replace('{contains}', escape(contains));
            if (self.curXhr) {
                self.curXhr.abort();
            }

            self.curXhr = $.ajax({
                type: 'POST',
                url: server.concat(endpoint),
                data: options,
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getAllByTypes] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        getArtists: function (contains, callback, onlyFollowed, onlyNames, hasGraph, onlyLinked, isCollection) {
            var endpoint = endpoints.getArtistsTMP + "?query=" + encodeURIComponent(contains);
            if (onlyFollowed) {

                var isOnlyFollowed = onlyFollowed == "1" ? true : false;
                endpoint += endpoint.indexOf("?") !== -1 ? "&onlyFollowed=" + isOnlyFollowed : "?onlyFollowed=" + isOnlyFollowed;
            }
            if (onlyNames)
                endpoint += endpoint.indexOf("?") !== -1 ? "&onlyNames=true" : "?onlyNames=true";
            if (hasGraph)
                endpoint += endpoint.indexOf("?") !== -1 ? "&hasGraph=true" : "?hasGraph=true";
            if (onlyLinked)
                endpoint += endpoint.indexOf("?") !== -1 ? "&onlyLinked=true" : "?onlyLinked=true";
            if (isCollection)
                endpoint += endpoint.indexOf("?") !== -1 ? "&isCollection=true" : "?isCollection=true";
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getArtists] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        getArtworks: function (contains, callback, options) {
            var endpoint = endpoints.getArtworksTMP
                .replace('{contains}', escape(contains));
            if (entity_id)
                endpoint += '?artistId=' + entity_id;
            if (options) {
                endpoint += '&' + $.param(options);
            }
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getArtworks] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        getLocations: function (contains, callback) {
            var endpoint = endpoints.getLocationsTMP
                .replace('{contains}', escape(contains));
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getLocations] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        getAuctionVenues: function (contains, callback, isOpenAuction) {
            var endpoint = endpoints.getAuctionVenuesTMP
                .replace('{contains}', escape(contains));
            if (isOpenAuction) {
                endpoint += "?getOpenAuction=" + isOpenAuction
            }

            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[getAuctionVenues] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        searchAll: function (contains, callback, type) {
            while (contains[contains.length - 1] === ".")
                contains = contains.slice(0, -1);

            var endpoint = endpoints.searchAllTMP
                .replace('{contains}', encodeURIComponent(contains)).replace('{type}', escape(type));
            if (!type)
                endpoint = endpoint.replace("/undefined", "");
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[searchALL] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        globalSearch: function (contains, callback, type, length, isUserAB) {
            while (contains[contains.length - 1] === ".")
                contains = contains.slice(0, -1);

            var endpoint = endpoints.globalSearchTMP.replace('{type}', escape(type)) + "?query=" + encodeURIComponent(contains)
                + "&length=" + (length || 25) + "&isab=" + isUserAB;
            if (!type)
                endpoint = endpoint.replace("/undefined", "");
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server.concat(endpoint),
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    callback.call(null, 'OK', data);
                },
                error: function (xhr, message) {
                    console.log('[globalSearch] STATUS = ' + xhr.status);
                    callback.call(null, 'ERROR', '[' + xhr.status + '] ' + message);
                }
            });
        },
        artistInfo: function (idp, callback) {
            if (self.curXhr) {
                self.curXhr.abort();
            }
            self.curXhr = $.ajax({
                type: 'GET',
                url: server + 'artists/stats/' + idp,
                contentType: 'application/json',
                dataType: 'json',
                success: callback,
                error: callback
            });
        }
        //multiTypeSearch: function (contains, callback, divertEndpoint) {
        //    if (divertEndpoint == "all")
        //        this.searchAll(contains, callback);
        //    else if (this["get" + divertEndpoint]) {
        //        this["get" + divertEndpoint](contains, callback);
        //    }
        //}
    }
} ;
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

$(document).ready(function () {
  InitFollowButtons();
  $(document).on('click', ".btn-follow[href*='login']", function (event) {
    GTM_Send('event', 'follow', 'unregistered-user-artist-follow', $(this).parent().data("name"));
  });
});
$(window).on('load', function () {
  var followModules = [];

  if (!window._followButtonRevalidation) {
    $('.follow-button-revalidate').each(function (i, event) {
      $(event).find('[data-module=follow]').each(function (i, e) {
        followModules.push(new FollowButtonModule(e).init());
      });
      followButtonValidation(followModules);
    });
  }

  window._followButtonRevalidation = true;
});

function FollowButtonModule(element) {
  var self = this;
  var objectTypeList = ['', 'Artist', 'Organization', 'Location', 'Artwork'];

  var init = function init() {
    self._elem = $(element);
    self._troggleFollowButton = troggleFollowButton;
    self.idType = self._elem.data('type');
    self.preference = self._elem.attr("preferences");
    self.id = self._elem.data('id');
    self._tootlipCss = self._elem.data("tooltip-css");
    self._followHTML = self._elem.data('followhtml');
    self._unFollowHTML = self._elem.data('unfollowhtml');
    self._followIconCSS = self._elem.data("followicon-css");
    self._unFollowIconCSS = self._elem.data("unfollowicon-css");
    self._tootlipFollow = self._elem.data("tooltip-follow");
    self._tootlipUnFollow = self._elem.data("tooltip-unfollow");
    if (self._elem.data("initialized") == true) return self;
    self._hasCollection = self._elem.hasClass("bubble-tooltip");
    self.guid = uuidv4();

    self._elem.attr("guid", self.guid);

    self._enabled = self._elem.data("enabled");
    if (self._enabled) return self;

    self._elem.attr("data-enabled", "true");

    self.itsIcon = self._elem.data('itsicon');
    self._initial = self._elem.data("initial");
    $(document).on('FollowModuleAction', OnSetPreferencesHandler);

    switch (self.preference) {
      case "follow":
        self.onClickCallback = SetPersonPreferences;
        break;

      case "save":
        self.onClickCallback = SaveArtwork;

        if (self._hasCollection) {
          self._elem.on('click', 'form.form-group button', SaveArtworkSettings);
        }

        break;
    }

    if (self.onClickCallback) {
      self._elem.on('click', self.onClickCallback);
    }

    self._elem.data("initialized", true);

    return self;
  }; //HELPERS


  function getDataName(elem) {
    return htmlDecode($(elem).data("name"));
  }

  function SetPreferencesCallback(data) {
    var follow = self._elem.hasClass("btn-follow");

    if (self.itsIcon && follow) {
      SuccessSnackbar('You are now following ' + self._elem.data("name"));
    }

    var detailData = {
      response: data,
      id: self.id,
      idType: self.idType,
      target: self._elem
    };
    OnSetPreferencesHandler({
      detail: detailData
    }, true, true);
    EmitEvent("FollowModuleAction", detailData, document);
  }

  function SuccessSnackbar(text, _timeout) {
    if ($.snackbar) $.snackbar({
      content: text,
      style: "snackbar success-snackbar snackbar-top",
      timeout: _timeout || 4000,
      htmlAllowed: true
    });
  }

  function PostSetPreferences(request, callback) {
    $.ajax({
      method: 'POST',
      url: '/Ajax/Follow/SetEntityPreferences',
      dataType: "json",
      data: request,
      success: callback
    });
  }

  function OnFollowPopupAction(btnText) {
    switch (btnText.innerText) {
      case 'TURN MY EMAIL UPDATES ON':
        mixpanel.track("Follow Alert Popup Action", {
          "CTA Name": btnText.innerText
        });
        SaveEmailSettings(null, null, null, true, null, function (e) {});
        break;

      case 'I DON\'T WANT TO RECEIVE ARTIST UPDATES BY MAIL':
        mixpanel.track("Follow Alert Popup Action", {
          "CTA Name": btnText.innerText
        });
        break;
    }
  } //isDisplayMAAlert param used for restrict maAlertMessage display multiple times


  function OnSetPreferencesHandler(e, override) {
    var isDisplayMAAlert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
    var data = e.detail;

    if (data.id == self.id && data.idType == self.idType && (override === true || self._elem.attr("guid") != data.target.attr("guid"))) {
      if (data.response.OK) {
        //Follow
        var name = getDataName(self._elem);

        var label = self._elem.attr("utm");

        var isChecked = self._elem.hasClass("btn-follow");

        var id = $(self._elem).data("id");
        troggleFollowButton(isChecked);

        if (isDisplayMAAlert && data.response.HasAlerts == false && isChecked) {
          maAlertMessage("<p>We've noticed that your updates service (Alerts) is currently turned off for <strong>" + data.response.UserEmail + "</strong>.<br />This means that <strong>you are not receiving any email updates</strong> for your followed artists.</p>", [{
            tag: 'button',
            text: 'Turn my email updates ON',
            atts: [{
              name: 'class',
              value: 'btn-theme btn-theme-inverse-hover btn-theme-large btn-theme-primary btn-theme-bold'
            }]
          }, {
            tag: 'button',
            text: 'I don\'t want to receive artist updates by mail',
            atts: [{
              name: 'class',
              value: 'btn-theme btn-theme-inverse-hover btn-theme-border btn-theme-small'
            }]
          }], OnFollowPopupAction, '<i class="m-icon-email-bell"></i>', null, 'Follow Alert Popup', '<small>*You can always change this setting in your <a href="/account-settings">account setting</a></small>', 'alert-follow-popup');
        }

        if (isChecked && isDisplayMAAlert && data.response.CheckForRefresh) {
          refreshPageForPAUser(name, id);
        }
      } else if (isDisplayMAAlert && data.response.Message) {
        GTM_Send('event', 'View reaches follow limitation popup', null, null);
        upgradeToFollowMorePopup(data.response.Message);
      }

      self._elem.removeClass('disabled-follow');
    }
  }

  function refreshPageForPAUser(artistName, id) {
    if (window.refreshPageOnGoing) {
      return;
    }

    var arrayStatusHtml = $("[data-artist-id=\"".concat(id, "\"] #upcoming"));
    var lockIconLink = $("[data-artist-id=\"".concat(id, "\"] .lock-icon-link"));
    var artworkDetail = $("[data-artist-id=\"".concat(id, "\"] #artworkDetail.upcoming .m-icon-locked"));

    if (!(arrayStatusHtml.length && lockIconLink.length) && !artworkDetail.length) {
      return;
    }

    var pageRefresh = new PageRefreshModule();
    window.refreshPageOnGoing = true;
    maAlertMessage("<div class=\"message\"><p class=\"info\"> The page will automatically reload in <span id=\"countdown\">10</span> seconds to display the details.</p> <div>", [{
      tag: 'button',
      text: 'RELOAD NOW',
      atts: [{
        name: 'class',
        value: 'button-primary reload-btn hideme'
      }]
    }], pageRefresh.manualRefresh, "<strong> <p class=\"info\"> Great! You've just unlocked upcoming sale details for the artist ".concat(artistName.replace(/ /g, '&nbsp;'), ".</p></strong>"), null, "unlock lot details pop up", null, 'unlock-lot-details ', pageRefresh.start(9800), true);
  }

  function PageRefreshModule() {
    var refreshTimeout = null;
    var countdownInterval = null;

    function start(milisecond) {
      var counter = 10;
      countdownInterval = setInterval(function () {
        counter--;
        $('#countdown').text(counter); // Stop the countdown at 0

        if (counter <= 0) {
          clearInterval(countdownInterval);
        }
      }, 1000);
      setTimeout(function () {
        $(".unlock-lot-details .reload-btn").removeClass('hideme');
        $(".unlock-lot-details .reload-btn").addClass('showme');
      }, 1800);
      refreshTimeout = setTimeout(function () {
        location.reload();
      }, milisecond);
    }

    function manualRefresh(event) {
      clearInterval(countdownInterval);
      clearTimeout(refreshTimeout);
      location.reload();
    }

    return {
      start: start,
      manualRefresh: manualRefresh
    };
  }

  function troggleFollowButton(isFollow) {
    var sendEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;

    if (isFollow) //Follow
      {
        dataStorage.setRndmNumber();

        if (self._tootlipUnFollow) {
          self._elem.attr('data-tooltip', self._tootlipUnFollow);
        }

        if (self._unFollowIconCSS) {
          self._elem.find('i').removeClass(self._followIconCSS).addClass(self._unFollowIconCSS);
        }

        if (self._unFollowHTML) {
          self._elem.html(self._unFollowHTML);
        }

        self._elem.removeClass("btn-follow " + self._tootlipCss).addClass("btn-unfollow");

        sendEvent ? GTM_Send('event', 'follow', 'artist-follow', name) : null;
        $(".Pulsar").hide();
      } else //UNFOLLOW
      {
        if (self._tootlipFollow) {
          self._elem.attr('data-tooltip', self._tootlipFollow);
        }

        if (self._followIconCSS) {
          self._elem.find('i').removeClass(self._unFollowIconCSS).addClass(self._followIconCSS);
        }

        if (self._elem.hasClass("isRight")) {
          self._elem.removeClass("float-right-btn-follow");
        }

        if (self._followHTML) {
          self._elem.html(self._followHTML);
        }

        var classToAdd = "btn-follow ";
        if (self._tootlipCss) classToAdd += self._tootlipCss;

        self._elem.removeClass("btn-unfollow").addClass("btn-follow " + classToAdd);

        sendEvent ? GTM_Send('event', 'unfollow', 'artist-unfollow', name) : null;
      }
  } //On save artwork settings menu


  function SaveArtworkSettings(e) {
    if (self._hasCollection) {
      var formData = getFormData(self._elem.find("form.form-group"));
      formData["ID"] = self._elem.data("id");
      formData["itsIconCall"] = self.itsIcon; //formData["SaveArtwork"]

      $.post(baseDomain + '/Ajax/Compare/AddToDefault', formData, SaveArtworkCallback);
    }

    $(".bubble-tooltip").removeClass("active");
    e.preventDefault();
    return false;
  } //Main Functions


  function SetPersonPreferences(e) {
    self._elem.addClass('disabled-follow');

    setTimeout(function () {
      if (mixpanel) {
        var entityName = objectTypeList[self._elem.context.dataset.type];

        var moduleProps = _defineProperty({
          "Entity Name": entityName,
          "Entity Id": self._elem.context.dataset.id
        }, entityName + " Followed", getDataName(self._elem));

        if (typeof similarArtistLogic !== 'undefined') {
          moduleProps["Logic"] = similarArtistLogic;
        }

        var selectedSort = $('.filter-sort .filter-dropdown select option:selected').text().trim();

        if ((self._elem.hasClass('btn-follow-for-sale') || self._elem.parent('div').hasClass('follow-icon-container')) && selectedSort) {
          moduleProps["Logic"] = selectedSort;
        }

        var extraProps = $(self._elem).attr("data-mp_props");

        if (isJson(extraProps)) {
          var jsonData = JSON.parse(extraProps);

          if (jsonData) {
            $.extend(moduleProps, jsonData);
          }
        }

        if (self._elem.context.dataset.hasOwnProperty('isGalleryArtist') && self._elem.hasClass("btn-follow")) {
          if (IsPage('artist') && location.pathname.toLowerCase().includes('artist') || IsPage('artwork') && location.pathname.toLowerCase().includes('artwork')) {
            // Corrected parenthesis here
            moduleProps["IsGalleryArtist"] = self._elem.context.dataset.isGalleryArtist;
          }
        }

        mixpanel.track("Click To " + (self._elem.hasClass("btn-follow") ? "FOLLOW" : "UNFOLLOW"), moduleProps);
      }
    }, 0);

    if (self._elem.attr("id") === "signup") {
      GTM_Send('event', 'follow', 'unregistered-user-artist-follow', getDataName(self._elem));
      return;
    }

    var follow = self._elem.hasClass("btn-follow"); //if Artist detail for sale tab has no data, And follow text only follow, but should not unfollow


    if (self._elem.attr("disable-unfollow") && !follow) {
      return;
    }

    var post = {
      objectId: self._elem.data("id"),
      objectType: self._elem.data("type"),
      isChecked: follow,
      itsIconCall: self.itsIcon
    };

    if (!follow) {
      confirmUnFollowPopup(getDataName(self._elem), function () {
        PostSetPreferences(post, SetPreferencesCallback);
      }, function () {
        self._elem.removeClass('disabled-follow');
      }, self._elem.data("id"));
    } else PostSetPreferences(post, SetPreferencesCallback);
  }

  function SaveArtworkCallback(e) {
    if (e.msg && e.msg.length) {
      e.msg = "<div id='renew-collection-plan' class='renew-collection-popup'><div>" + e.msg + "</div></div>";
      maAlertMessage(e.msg);

      self._elem.find("#chk_saveCollection").prop('checked', false);

      if (e.toggle) {
        self._elem.removeClass("btn-follow").addClass("btn-unfollow");
      } else {
        self._elem.removeClass("btn-unfollow").addClass("btn-follow");
      }

      return;
    }

    if (e.toggle) //Follow
      {
        if (self._tootlipUnFollow) {
          self._elem.attr('data-tooltip', self._tootlipUnFollow);
        }

        if (self._unFollowIconCSS) {
          self._elem.find('i').removeClass(self._followIconCSS).addClass(self._unFollowIconCSS);
        }

        self._elem.removeClass("btn-follow").addClass("btn-unfollow");

        GTM_Send('event', 'follow', 'artwork-follow', name);
        $(".Pulsar").hide();
      } else //UNFOLLOW
      {
        if (self._tootlipFollow) {
          self._elem.attr('data-tooltip', self._tootlipFollow);
        }

        if (self._followIconCSS) {
          self._elem.find('i').removeClass(self._unFollowIconCSS).addClass(self._followIconCSS);
        }

        self._elem.removeClass("btn-unfollow").addClass("btn-follow");

        GTM_Send('event', 'unfollow', 'artist-unfollow', name);
      } //used when same artwork with multiple save artwork buttons that time


    if ($('[data-id="' + self.id + '"]').length > 0) {
      var saveArtworkCheckBoxEnabled = false;
      var saveCollectionCheckBoxEnabled = false;

      var checkBoxesCurrentElement = self._elem.find(".form-group input");

      if (checkBoxesCurrentElement.length > 0) {
        checkBoxesCurrentElement.each(function (i, ele) {
          if (ele.id.indexOf("chk_saveCollection") !== -1) {
            saveCollectionCheckBoxEnabled = ele.checked;
          }

          if (ele.id.indexOf("chk_saveArtwork") !== -1) {
            saveArtworkCheckBoxEnabled = ele.checked;
          }
        });
      }

      $('[data-id="' + self.id + '"]').each(function (i, ele) {
        var isFolllowModule = $(ele).attr('data-module') == 'follow';

        if (isFolllowModule) {
          var followIconCSS = "m-icon-artwork_save";
          var unfollowIconCss = "m-icon-artwork_saved";
          var iconElement = $(ele).find('i');

          if (e.toggle) //Follow
            {
              if (iconElement) {
                iconElement.removeClass(followIconCSS).addClass(unfollowIconCss);
              }

              $(ele).removeClass("btn-follow").addClass("btn-unfollow");
            } else //UNFOLLOW
            {
              if (iconElement) {
                iconElement.removeClass(unfollowIconCss).addClass(followIconCSS);
              }

              $(ele).removeClass("btn-unfollow").addClass("btn-follow");
            }

          var checkBoxesGroup = $(ele).find(".form-group input");

          if (checkBoxesGroup.length > 0) {
            checkBoxesGroup.each(function (i, elemCheckbox) {
              if (elemCheckbox.id.indexOf("chk_saveCollection") !== -1) {
                $(elemCheckbox).prop('checked', saveCollectionCheckBoxEnabled);
              }

              if (elemCheckbox.id.indexOf("chk_saveArtwork") !== -1) {
                $(elemCheckbox).prop('checked', saveArtworkCheckBoxEnabled);
              }
            });
          }
        }
      });
    }
  }

  function SaveArtwork(e) {
    if (!self._hasCollection) {
      var params = {
        'ID': self._elem.data("id"),
        'SaveArtwork': self._elem.hasClass("btn-follow") ? "1" : "0",
        itsIconCall: self.itsIcon
      };
      $.post(baseDomain + '/Ajax/Compare/AddToDefault', params, SaveArtworkCallback);
    }
  }

  var _export = {
    init: init,
    enabled: self._enabled
  };
  return _export;
}
//# sourceMappingURL=FollowModule.js.map;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function NavigationSearchModule(element, navigationModule) {
  var self = this;
  var delayExecutionTimer;
  self._last_query = '';
  self._typing_speed = 150;
  self._current_query = '';
  self._current_filter = 'all';
  self._current_result_count = 0;
  self._enableSuggestions = false;
  self._keyExemptions = [33, 34, 35, 36, 37, 38, 39, 40, 45];
  self._isUserAB = isAbUser();
  var dbOptions = {
    db: "navigation_search",
    stores: {
      history: {
        name: "history",
        columns: "dateAdded,searchTerm"
      }
    }
  };
  var NavigationModule = navigationModule;

  if (self._isUserAB) {
    var topSearchModule = new TopSearchModule($("#top_search_dialog"), execSearch).init();
  }

  ;
  self.outside = false;

  var init = function init() {
    self._elem = $(element);

    self._elem.submit(function () {
      return false;
    }); //input element


    self._input = self._elem.find("input.form-control"); //loader element

    self._loader = self._elem.find(".progress"); //results container element

    self._resultsContainer = $(".result-block-container");
    self._topSearchDialog = $("#top_search_dialog");
    self._resultBlock = $(".search-trending");
    self._historyContainer = self._resultsContainer.find(".promoted-results.search-history .promoted-content");
    self._historyResults = $(".search-history .result");
    self._historyTopSearch = $(".search-history"); //search results element

    self._searchResults = self._resultsContainer.find(".search-results > ul");

    self._resultsContainer.on('click', '.search-results > ul > li > a', onResultItemClick);

    self._resultsContainer.on('click', '.promoted-results.search-history .promoted-header button', onDeleteHistory);

    self._topSearchDialog.on('click', '.search-history span button', onDeleteHistory);

    self._resultsContainer.on('click', ".promoted-content a, .search-results .didyoumean > a", onClickPromotion);

    self._topSearchDialog.on('click', ".search-history .result a, .search-trending .result a", onClickPromotion);

    self._elem.on('click', '.clear-search-results', onClearInput);

    self._input.on('keyup', onKeyUpHandler);

    self._input[0].addEventListener('textInput', function (e) {
      self._input.trigger('keyup');
    });

    self._input.on('drop', function () {
      self.termSuggester = "";
      setTimeout(function () {
        self._input.trigger('keyup');
      }, 0);
    });

    self._input.on('paste', function () {
      self.termSuggester = "";
      setTimeout(function () {
        self._input.trigger('keyup');
      }, 0);
    });

    self._elem.on('click', '.search-button', goToSearchResults);

    self._api = autocompleteAPIProxy();

    NavigationModule._topHeader.on('click', '#menu-mobile-search', {
      toggle: true
    }, ToggleMobileSearch);

    NavigationModule._topHeader.on('click', '.mobile-search-back', {
      toggle: false
    }, ToggleMobileSearch);

    self._input.on('focus', onSearchFocus);

    self._resultsContainer.on("click", ".search-expand", onSearchExpand); //self._input.on('blur', onSearchFocusOut);


    initDB();
    $("body").on("mousedown", onBeforeOutsideClick);
    $("body").on("click", onOutsideClick);
    $(window).on("resize", onResizeWindow);

    if (isIOS()) {
      document.ontouchend = function () {
        if (self._input && document.activeElement.isEqualNode(self._input[0])) {
          document.activeElement.blur();

          self._input.blur();

          setTimeout(function () {
            $('html, body').stop().animate({
              scrollTop: top
            }, 500, function () {});
          }, 10);
        }
      };
    } //$(window).scroll({ toggle: false }, ToggleMobileSearch);


    if (self._input.is(":focus")) {
      self._input.trigger("focus");
    }

    return _export;
  }; //*************DB START************//


  function initDB() {
    self.db = new Dexie(dbOptions.db);
    var store = {};
    store[dbOptions.stores.history.name] = dbOptions.stores.history.columns;
    self.db.version(1).stores(store);
    self.db.history.count(function (count) {
      if (count > 0) {
        self.db.history.orderBy("dateAdded").reverse().limit(10).each(function (data) {
          self._historyContainer.append('<a>{0}</a>'.format(data.searchTerm));

          if (self._isUserAB) {
            self._historyResults.append('<a>{0}</a>'.format(data.searchTerm));
          }
        });
      } else {
        self._historyContainer.parent().remove();

        if (self._isUserAB) self._historyTopSearch.remove();
      }
    });
  }

  function AddSearchHistory(term) {
    if (term && term.length) {
      return self.db.history.where("searchTerm").equalsIgnoreCase(term).delete().then(function (dc) {
        return self.db.history.add({
          dateAdded: +new Date(),
          searchTerm: term
        });
      });
    }
  }

  function onDeleteHistory(e) {
    maAlertMessage('Are you sure you want to delete your search history?', ["Yes", "No"], function (msg) {
      if (msg == "Yes") {
        self.db.history.clear();

        self._historyContainer.parent().remove();

        if (self._isUserAB) self._historyTopSearch.remove();
        mixpanel.track("Delete Search History");
      }
    }, null, null, null, null, "high-priority-popup");
  } //**************DB END**************//


  function onResizeWindow(e) {
    if (window.innerWidth > 1024) {//ToggleMobileSearch({ data: { toggle: false } });
    }

    if (window['navbar'] && !window['navbar']['IsMobileMode']()) {
      var rect = self._input[0].getBoundingClientRect();

      self._resultsContainer.width(rect.width + "px").css({
        top: rect.y + 38 + "px",
        left: rect.x + "px"
      });
    } else {
      self._resultsContainer.css({
        top: "auto",
        left: "auto",
        width: "auto"
      });
    } //Overflowing content
    //var resultW = self._resultsContainer.width();
    //var resultH = self._resultsContainer.height();

  }

  function handleExpandRefresh() {
    self._resultsContainer.find(".promoted-content").each(function (i, e) {
      if (e.scrollHeight > e.clientHeight && !$(e).hasClass("expanded")) {
        var $curExpand = $(e).parent().find(".search-expand");

        if (!$curExpand.length) {
          $(e).after('<a class="search-expand"><i class="m-icon-expand"></i></a>');
        } //else if ($curExpand.is(":hidden")) {
        //}

      }
    });
  }

  function onSearchExpand(e) {
    var abutton = e.target.tagName == "A" ? e.target : e.target.parentElement;
    mixpanel.track("Expand Search Suggestions", {
      "Suggestion Category": $(abutton).prev().prev().text().trim()
    });
    $(abutton.previousElementSibling).addClass("expanded");
    $(abutton).hide();
  }

  function onClearInput(e) {
    if (self._input.val() === "") {
      ToggleMobileSearch({
        data: {
          toggle: false
        }
      });
    } else {
      self._input.val('').trigger('keyup');

      self._input.focus();
    }
  } //On search result item click


  function onResultItemClick(e) {
    AddSearchHistory(self._current_query); //mixpanel.track("Search", {
    //    "Search Term": self._current_query,
    //    "Search Character Length": self._current_query.length,
    //    "Search Item Index": $(this).parent().index(),
    //    "Search Item Label": $(this).text(),
    //});

    var clickedUrl = e ? e.currentTarget.href : '';
    var type = clickedUrl.includes('/Artist') ? 'artists' : null;
    $.ajax({
      method: 'POST',
      url: '/Ajax/AutoComplete/SendSearchResultToMixpanel',
      dataType: "json",
      data: {
        q: self._current_query,
        q_type: type,
        resCount: self._current_result_count || 0,
        searchModule: "Navigation Search",
        itemIndex: e ? $(this).parent().index() : 0,
        itemLabel: e ? $(this).text() : self._current_query,
        suggestCat: self.termSuggester
      }
    });
  }

  function hasAttr(attr) {
    return _typeof(attr) !== (typeof undefined === "undefined" ? "undefined" : _typeof(undefined)) && attr !== false;
  }

  function onBeforeOutsideClick(e) {
    var $t = $(e.target);

    if (navbar.IsMobileMode() || !NavigationModule._topHeader.hasClass("input-focus") || $t.parents().hasClass("high-priority-popup") || hasAttr($t.attr("data-navigation-search-component")) || $t.hasClass('.result-block-container').length || $t.parents('[data-navigation-search-component]').length || $t.parents('.result-block-container').length || e.target.id == "menu-mobile-search" || e.target.parentElement.id == "menu-mobile-search") {
      self.outside = false;
    } else self.outside = true;
  }

  function onOutsideClick(e) {
    var $t = $(e.target); //var attr = $t.attr("data-navigation-search-component");

    if (!self.outside) {
      return true;
    } else {
      $("body").removeClass("nav-search-open");

      NavigationModule._topHeader.removeClass("input-focus");

      toggleResults(false);
      FadeSearch(false);
      self.outside = false;
    }
  }

  function onClickPromotion(e) {
    self.termSuggester = $(e.target).parent().hasClass("didyoumean") ? "did you mean" : $(e.target).parent().prev().text().trim();
    mixpanel.track("Click on Search Suggestion", {
      "Suggestion Category": self.termSuggester,
      "Suggestion": e.target.innerText
    });

    self._input.val(e.target.innerText).trigger("keyup");
  }

  function SetLoader(show) {
    if (show == true) self._loader.addClass("active");else self._loader.removeClass("active");
  }

  function cleanResults() {
    self._current_query = ""; //self._searchResults.html('');
  }

  function constructResultItem(item, queryVal) {
    var regex = new RegExp(queryVal, 'gi');
    var itemText = item.name.replace(regex, function (str) {
      return "<strong>{0}</strong>".format(str);
    });

    if (item.description) {
      itemText += "<span class='item-desc'> - {0}</span>".format(item.description.replace(/_/g, ' '));
    }

    var newTab = item.url.includes('/ExternalArticle') ? ' target="_blank"' : '';
    return "<li><a href='{0}'{1}>{2}</a></li>".format(appendTopSearchUAD(item.url), newTab, itemText);
  }

  function appendTopSearchUAD(item) {
    var lower = item.toLowerCase();
    var param = "";

    if (lower.includes("/artist/")) {
      param = "uad=Artistsresults";
    } else if (lower.includes("/artwork/")) {
      param = "uad=TopSearch";
    }

    if (!param) return item;
    return item.includes("?") ? "".concat(item, "&").concat(param) : "".concat(item, "?").concat(param);
  }

  function ToggleMobileSearch(e) {
    if (e.data.toggle) {
      navbar.closeSubmenues(true);
      $('html, body').css('overflow', 'hidden');

      NavigationModule._elem.find(".search-component input.form-control").focus();

      if (self._isUserAB) {
        topSearchModule.openSearchDialog();
      } //if (navigationModule.IsMobileMode()) {
      //}
      //self._resultsContainer.toggle("slide", { direction: "down" }, 200);


      FadeSearch(true);
    } else {
      $('html, body').css('overflow', 'auto');
      $("body").removeClass("nav-search-open"); //self._resultsContainer.toggle("slide", { direction: "down" }, 200);

      FadeSearch(false);

      if (self._isUserAB) {
        topSearchModule.toggleTopSearchContent(true);
        topSearchModule.onclickMA(e);

        self._input.val('');
      }
    }
  }

  function onSearchFocus() {
    if (self._isUserAB) {
      self._resultsContainer.addClass('display-none');

      topSearchModule.openSearchDialog();
    } else {
      self._topSearchDialog.addClass('display-none');

      $("body").addClass("nav-search-open");
      onResizeWindow();

      NavigationModule._topHeader.addClass("input-focus");

      if (!NavigationModule._topHeader.hasClass("input-focus")) {
        mixpanel.track("Click To Open Search");
      }

      FadeSearch(true, null, handleExpandRefresh);
    }
  }

  function FadeSearch(toggle, ease, callback) {
    var none = self._resultsContainer.css("display") == "none";

    NavigationModule._topHeader.find(".nav-search-container.search-component")[toggle ? 'addClass' : 'removeClass']("search-active");

    if (toggle && none) {
      self._resultsContainer.fadeIn(150, null, callback);
    } else if (!toggle && !none) {
      self._resultsContainer.fadeOut(150, null, callback);

      self._topSearchDialog.hide();

      if (self._isUserAB) topSearchModule.removeStopScroll();
    }
  } //Handles the keyup event on the search input


  function onKeyUpHandler(e) {
    if ((e.keyCode ? e.keyCode : e.which) == 13) {
      goToSearchResults();
    }

    if (self._input.val().trim().length >= 1) {
      if (e.keyCode) self.termSuggester = ""; //remove suggester
      //if (self._keyExemptions.indexOf(e.keyCode) === -1)
      //    self._button.addClass("active");
    } else {
      //self._button.removeClass("active");
      self._input.val('');

      self._resultsContainer.removeClass("input-valid");

      if (self._isUserAB) topSearchModule.toggleTopSearchContent(true);
    }

    if (self._input.val().trim().length > 2) {
      self._elem.addClass("has-input");

      if (self._keyExemptions.indexOf(e.keyCode) === -1) {
        execSearch();
      }
    } else {
      clearTimeout(delayExecutionTimer);
      toggleResults(false);
      SetLoader(false);

      self._elem.removeClass("has-input");

      cleanResults();
    }
  }

  function StripAlphaNumeric(s) {
    return s && s.length ? s.replace(/[\W_]+/g, " ") : s;
  }

  function goToSearchResults() {
    self._current_query = self._input.val().trim();

    if (self._current_query.length) {
      onResultItemClick();
      window.location.href = "/Results/search?q={0}".format(self._current_query);
    } else self._input.focus();
  }

  function toggleResults(show) {
    show ? self._searchResults.addClass("active") : show == null ? self._searchResults.toggleClass("active") : self._searchResults.removeClass("active");
  } //Executes a search with the input text as the query


  function execSearch() {
    self._current_query = self._input.val().trim();

    if (self._current_query) {
      SetLoader(true);

      if (self._current_query == "") {
        toggleResults(false);
        clearTimeout(delayExecutionTimer);
        return;
      }

      var searchType = self._isUserAB ? topSearchModule.getSelectedTab(self._current_query) + 's' : "all";
      searchType = searchType === "venues" ? "organizations" : searchType === "events" ? "exhibitions" : searchType;
      execSearchRequest(searchType);
    } else if (self._isUserAB) {
      topSearchModule.toggleTopSearchContent(true);
    }
  }

  function execSearchRequest(searchType) {
    clearTimeout(delayExecutionTimer);
    delayExecutionTimer = setTimeout(function () {
      self._api.globalSearch(self._current_query, function (status, data) {
        self._last_query = self._current_query;
        SetLoader(false);

        if (status == 'OK') {
          if (!self._isUserAB) {
            handleSearchResults(data, self._current_query);
          } else {
            AddSearchHistory(self._current_query);
            topSearchModule.handleSearchPopup(data, self._current_query);
          }
        }
      }, searchType, 20, self._isUserAB);
    }, 500);
  }

  function handleSearchResults(data, queryVal) {
    var dataToMap = data.data || data;
    self._current_result_count = dataToMap.length;
    var resultURL = "/Results/query?q={0}".format(queryVal);
    var html = "<li><a class='main' href='{0}'>View all results for <em>\"{1}\"</em></a><li>".format(resultURL, queryVal);

    if (!dataToMap.length) {
      html = "<li><a>No results found</a></li>";

      if (data.suggestions && data.suggestions.length) {
        html += "<li class='didyoumean'>Did you mean ";
        html += data.suggestions.map(function (item) {
          return "<a>{0}</a>, ".format(item);
        }).join('');
        if (html.endsWith(', ')) html = html.slice(0, -2);
        html += "</li>";
      }
    } else {
      html += dataToMap.map(function (item) {
        return constructResultItem(item, queryVal);
      }).join('');
    }

    var filter_html = ""; //self._resultsContainer.find(".search-filter-results .all-results")
    //    .attr("href", resultURL)
    //    .html("View all results for <strong>'{0}'</strong>".format(queryVal));

    self._resultsContainer.addClass("input-valid");

    self._searchResults.html(html);

    toggleResults(true);
  }

  function FocusInput() {
    if (navbar.IsMobileMode()) {
      window.scrollTo(0, 0);
      $("#menu-mobile-search").click();
    } else {
      self._input.focus();
    }
  }

  var _export = {
    init: init,
    focus: FocusInput
  };
  return _export;
}
//# sourceMappingURL=NavigationSearchModule.js.map;
initModule();
initModuleReload();

function initModule() {
  $(document).ready(function () {
    $("[data-navigation-bar]").each(function (i, e) {
      window["navbar"] = new NavigationBarModule(i, e).init();
    });
  });
}

function initModuleReload() {
  window.addEventListener('message', function (event) {
    if (event.data === 'headerReloaded') {
      initModule();
    }
  });
}

function NavigationBarModule(index, element) {
  var self = this;
  var lastScrollTop = 0;
  self.sentHoverEvent = false;
  self.UpperMenuToggleLimit = 0.2;
  self.LowerMenuToggleLimit = 0.8;
  self.preTexts = [];
  self.curZoom = 1.0;
  var loadedAlerts = false;

  var init = function init() {
    self._elem = $(element);
    self.IsCollection = self._elem.hasClass('collection-navigation');
    self.IsTransparent = $("body").hasClass("transparent-header");
    self._subMenuContainer = $("#submenu-container");
    self._topHeader = self._elem.find(".nav-header");
    self._navMenu = self._elem.find(".nav-menu");
    self._profileBubble = self._elem.find("#user-settings + .user-settings-bubble");
    self._alertBubble = self._elem.find("#alerts-notification + .alerts-bubble");

    self._elem.on('click', "data-activate-alerts", function (e) {
      SaveEmailSettings(null, null, null, true, null, function (e) {});
    });

    self._burger = self._elem.find("#menu-burger");
    self._accessibility = self._elem.find("#accessibility-helper"); //Bindings

    if (!IsMobileMode()) {
      self._navMenu.on("mouseenter", ".nav-menu-submenu", onSubMenuOver);

      self._navMenu.on("mouseleave", ".nav-menu-submenu", onSubMenuOut);
    }

    self._navMenu.on("click", "> ul > li > a", onSubMenuClick);

    $(".nav-menu-submenu .mobile-back").on("click", onSubMenuBackClick);

    self._navMenu.on("mouseenter", "> ul > li > a", onMenuItemHover); //self._topHeader.on('click', '#menu-mobile-search', { toggle: true }, ToggleMobileSearch);
    //self._topHeader.on('click', '.mobile-search-back', { toggle: false }, ToggleMobileSearch);


    self._burger.on("click", onBurgerClick);

    self._topHeader.on("click", "#user-settings", onToggleUserSettings);

    self._topHeader.on("click", "#alerts-notification, #menu-mobile-alerts-notification", onToggleAlertNotifications);

    if (self._elem.find("[data-navigation-search-component]").length) self.SearchModule = new NavigationSearchModule(self._elem.find("[data-navigation-search-component]"), self).init();
    $(window).scroll(onScroll);
    $(window).resize(onWindowResize);
    isMobileByPlatform() ? self._navMenu.css({
      "overflow-x": "hidden",
      "overflow-y": "scroll"
    }) : "";

    if (self._accessibility && self._accessibility.length && window.innerWidth >= 345) {
      self._accessibility.on("click", onAccessibilityClick);

      $("body").on("click", onOutsideAccessibilityClick);
      var zoomLevel = maStorageVariables.getVariable("zoom");

      if (zoomLevel) {
        self.curZoom = parseFloat(zoomLevel); //if (zoomLevel > 1)
        //    TransformTextSize(self.curZoom - ((self.curZoom - 1) / 2) + 0.05);
      }
    }

    if (self.IsTransparent) {
      _onScrollTransparentMenu();
    }

    SwitchPlatform(IsMobileMode());
    setupMixpanelEventsForMenu();

    if (self.IsCollection && self._elem.find('.inline-items a').length) {// Collection Plans
    }

    if (self.IsCollection && $(".collection-tab-navigation").length) {
      _onScrollCollectionMenu();
    }

    if (window['lazySizes']) {
      if (self._elem.find(".auction-results-banner img").length) window['lazySizes']['loader'].unveil(self._elem.find(".auction-results-banner img")[0]);
      if (self._elem.find(".mobile-banner .reward-image img").length) window['lazySizes']['loader'].unveil(self._elem.find(".mobile-banner .reward-image img")[0]);
    } //LoadAlerts();
    //$(window).on("FinishLoadAll", LoadAlerts);
    //dynamic sub-menu contents


    self._analysisRegisterNow = self._elem.find("#analysis-register-now");
    self._analysisUpgradeNow = self._elem.find("#analysis-upgrade-now");
    self._artistIntelligence = self._elem.find("#artist-intelligence");

    self._analysisRegisterNow.hide();

    self._analysisUpgradeNow.hide();

    if (!window.unique_id) {
      self._analysisRegisterNow.show();

      self._artistIntelligence.addClass('new-menu-separator');
    } else {
      if (window.subscription_type_id != window.ScopedVariables.price_subscription_types.premium && window.subscription_type_id != window.ScopedVariables.price_subscription_types.vip) {
        self._analysisUpgradeNow.show();

        self._artistIntelligence.addClass('new-menu-separator');
      }
    }

    return _export;
  }; //ACTIONS


  function LoadAlerts() {
    if (self._alertBubble.length && !loadedAlerts) {
      self._alReq = $.ajax({
        method: "GET",
        url: "/ajax/alert/LatestAlerts",
        data: {
          uid: unique_id
        },
        cache: true,
        headers: {
          "cache": "true"
        },
        success: function success(html) {
          self._alertBubble.find(".alert-notification-items").html(html);
        },
        error: function error(err) {
          console.error(err);
        }
      });
      loadedAlerts = true;
    }
  }

  self.ToggleUserSettings = function (set) {
    if (set === undefined) {
      self._profileBubble.toggleClass("active");

      self._profileBubble.parent().toggleClass("active");
    } else {
      set ? self._profileBubble.addClass("active") : self._profileBubble.removeClass("active");
      set ? self._profileBubble.parent().addClass("active") : self._profileBubble.parent().removeClass("active");
    }
  };

  self.ToggleAlertNotifications = function (set) {
    LoadAlerts();

    if (set === undefined) {
      self._alertBubble.toggleClass("active");

      self._alertBubble.parent().toggleClass("active");

      if (window.innerWidth <= 768) {
        self.LockBodyScroll(self._alertBubble.hasClass("active"));
      }
    } else {
      set ? self._alertBubble.addClass("active") : self._alertBubble.removeClass("active");
      set ? self._alertBubble.parent().addClass("active") : self._alertBubble.parent().removeClass("active");
      if (!set || window.innerWidth <= 768) self.LockBodyScroll(set);
    }
  };

  self.LockBodyScroll = function (lock) {
    if (lock === true) {
      $('body').width($('body').width());
      $('body').css('overflow', 'hidden');
      $('#shadow').css('display', 'block'); //$("body").addClass("lock-body");
    } else {
      $('body, #shadow').removeAttr('style');
    } //else { $("body").toggleClass("lock-body"); }

  }; //HTML ZOOM


  function SetActiveZoomElement() {
    var _span = self._accessibility.find("span[data-value='{0}']".format(self.curZoom));

    _span.addClass("active");

    if (self.curZoom == 1.2) {
      _span.parent().addClass("last-active");
    } else _span.parent().removeClass("last-active");
  }

  function TransformTextSize(multiplication) {
    document.getElementById("zoomStyle").innerHTML = "html { zoom: " + multiplication + " }";
  }

  function LazyLoadImages(parent) {
    parent.find("[real-src],[real-background]").each(function (i, e) {
      var $e = $(e);

      if ($e.attr("real-background")) {
        $e.css("background-image", "url(" + $e.attr("real-background") + ")");
        $e.removeAttr("real-background");
      } else if ($e.attr("real-src")) {
        $e.attr("src", $e.attr("real-src"));
        $e.removeAttr("real-src");
      }
    });
  }

  function IsMobileMode() {
    return self._elem.find("#menu-burger:visible").length ? true : false;
  }

  function ToggleMenuMode() {
    self._elem.toggleClass("open");

    $("body").toggleClass("menu-open");

    if (window['lazySizes']) {
      if (self._elem.find(".mobile-banner .reward-image img").length) window['lazySizes']['loader'].unveil(self._elem.find(".mobile-banner .reward-image img")[0]);
    }
  } //EVENTS


  function onBurgerClick(e) {
    var isOpenToClose = self._elem.hasClass("open");

    if (IsMobileMode()) {
      //self.LockBodyScroll(!isOpenToClose);
      if (isOpenToClose) {
        closeSubmenues(true);

        self._navMenu.css("transform", "translate(-200%, 0)");

        setTimeout(function () {
          self._elem.removeClass("submenu-open");

          self._navMenu.find("ul > li > a.hover").removeClass("hover");

          ToggleMenuMode();

          self._navMenu.removeAttr("style");
        }, 10);
      } else {
        self._navMenu.find("ul > li > a.hover").removeClass("hover");

        self._navMenu.removeAttr("style");

        self._navMenu.css({
          "overflow-x": "hidden",
          "overflow-y": "scroll"
        });

        ToggleMenuMode();
      }
    }
  }

  function onWindowResize() {
    if (window.innerWidth > 1025 && !IsMobileMode()) {
      //Desktop
      self._elem.removeClass("open");

      $("body").removeClass("menu-open");

      self._navMenu.removeAttr("style");

      SwitchPlatform(false);
    } else {
      //Mobile
      SwitchPlatform(true);
    }
  }

  function setupMixpanelEventsForMenu() {
    var MOBILE_MENUS_TO_TRACK = [{
      selector: '#submenu-auctions-mobile',
      name: 'Auctions'
    }, {
      selector: '#submenu-artmarket-mobile',
      name: 'Analysis'
    }];
    MOBILE_MENUS_TO_TRACK.forEach(function (menu) {
      var $menuTrackers = $(menu.selector + ' .track-cta');
      $menuTrackers.on('click', function () {
        mixpanel.track("Click Button", {
          "Identifier": "Menu - " + menu.name
        });
      });
    });
  }

  function SwitchPlatform(toMobile) {
    var shouldSwitchToMobile = toMobile === true && !self.mobileActive;
    var shouldSwitchToDesktop = !toMobile && (self.mobileActive === true || self.mobileActive == null);

    self._navMenu.find("a[data-submenu]").each(function (i, e) {
      if (shouldSwitchToMobile) {
        var mobileSubmenu = $($(e).data("submenu") + '-mobile');
        mobileSubmenu.appendTo(self._subMenuContainer);
        self.mobileActive = true;
      } else if (shouldSwitchToDesktop) {
        var desktopSubmenu = $($(e).data("submenu"));
        desktopSubmenu.appendTo($(e).parent());
        self.mobileActive = false;
      }
    });
  }

  function onSubMenuOver() {
    $(this).prev().addClass("hover");
  }

  function onSubMenuOut() {
    $(this).prev().removeClass("hover");
  }

  function onSubMenuClick(e) {
    if (IsMobileMode() && e.target.className.indexOf("link-on-mobile") === -1) {
      var targetSub = $(this).data("submenu");

      if (targetSub) {
        self._currentSubMenu = $(targetSub + '-mobile');

        self._currentSubMenu.parent().toggle("slide", {
          direction: "right"
        }, 200);

        self._currentSubMenu.addClass("active-submenu");
      } else {
        $(this).addClass("hover");
      }

      if (self._navMenu.find("ul > li > a").hasClass("hover")) {
        self._elem.addClass("submenu-open");

        self._navMenu.removeAttr("style");
      }

      if (targetSub) {
        e.preventDefault();
        return false;
      }
    } else {
      navbar.ToggleOpen();
    }
  }

  function onSubMenuBackClick() {
    var $elm = $(this).parent();
    $elm.prev().removeClass("hover");
    $elm.css("z-index", "999");

    self._elem.removeClass("submenu-open");

    setTimeout(function () {
      $elm.removeAttr("style");
      isMobileByPlatform() ? self._navMenu.css({
        "overflow-x": "hidden",
        "overflow-y": "scroll"
      }) : "";
    }, 200);
    closeSubmenues();
  }

  function closeSubmenues(isMenuClose) {
    if (self._currentSubMenu) {
      self._currentSubMenu.parent().toggle("slide", {
        direction: isMenuClose ? "left" : "right"
      }, 200);

      self._currentSubMenu.removeClass("active-submenu");

      self._currentSubMenu = null;
    }
  }

  function onToggleUserSettings() {
    self.ToggleAlertNotifications(false);
    self.ToggleUserSettings();

    if (self._profileBubble.hasClass("active")) {
      $("body").on("click", onProfileMenuOuterClick);
    } else $("body").off("click", onProfileMenuOuterClick);

    GTM_Send("event", GTM_EVENT_TYPE.NAVIGATION, "Toggle User Settings", self._profileBubble.hasClass("active") ? "Open" : "Close");
  }

  function onToggleAlertNotifications() {
    self.ToggleUserSettings(false);
    self.ToggleAlertNotifications();
    if (self._alertBubble.hasClass("active")) $("body").on("click", onProfileMenuOuterClick);else $("body").off("click", onProfileMenuOuterClick);
    GTM_Send("event", GTM_EVENT_TYPE.NAVIGATION, "Toggle Alerts Menu", self._alertBubble.hasClass("active") ? "Open" : "Close");
    mixpanel.track("Click on email alerts icon", {
      Action: self._alertBubble.hasClass("active") ? "Open" : "Close"
    });
  }

  function onProfileMenuOuterClick(e) {
    if (!$(e.target).hasClass("close") && ($(e.target).parents("#alerts-notification,#user-settings, #menu-mobile-alerts-notification").length || ['alerts-notification', 'user-settings', 'menu-mobile-alerts-notification'].indexOf(e.target.id) > -1)) return;
    self.ToggleUserSettings(false);
    self.ToggleAlertNotifications(false);
    $("body").off("click", onProfileMenuOuterClick);
  }

  function _onScrollCollectionMenu() {
    var scrollTop = $(window).scrollTop(); //var css = 80 - scrollTop;
    //css = css < 0 ? 0 : css;

    if (scrollTop <= 80) //$(".collection-tab-navigation").css("transform", "translate(0," + (css) + "px)");
      $(".collection-tab-navigation").removeClass("menu-stuck");else {
      //$(".collection-tab-navigation").css("transform", "translate(0,0)");
      $(".collection-tab-navigation").addClass("menu-stuck");
    }
  }

  function _onScrollTransparentMenu() {
    var scrollTop = $(window).scrollTop();
    var height = $(window).height();
    var percent = 1 - (height - scrollTop) / height;
    percent = percent > 1 ? 1 : percent;

    self._elem.css({
      'background-color': 'rgba(19,23,33,' + percent + ')'
    });

    if (percent == 1) self._topHeader.removeAttr("style");else {
      self._topHeader.css({
        'border-color': 'rgba(90,90,90,0)'
      });
    }
  }

  function onScroll() {
    self._navMenu.removeAttr("style"); //if (isMobile())
    //    self._navMenu.css({ "overflow-x": "hidden", "overflow-y": "scroll" });


    var st = $(this).scrollTop();
    docRatio = st / document.body.clientHeight;
    var IsShowMenuScroll = docRatio < self.UpperMenuToggleLimit || docRatio > self.LowerMenuToggleLimit;

    if (IsMobileMode()) {
      self._elem.removeClass("collapsed");

      $("body").removeClass("collapsed");
      $(document).trigger('navMenuCollapsed', false);

      if (self._elem.hasClass("open")) {
        lastScrollTop = st;
        return;
      }

      if (st > lastScrollTop) {
        //up
        if (st > 200) {
          self._elem.addClass("mobile-collapsed");

          $("body").addClass("mobile-collapsed"); //self.ToggleAlertNotifications(false);

          $(document).trigger('navMenuCollapsed', true);
        }
      } else if (IsShowMenuScroll) {
        //down
        self._elem.removeClass("mobile-collapsed");

        $("body").removeClass("mobile-collapsed");
        $(document).trigger('navMenuCollapsed', false);
      }
    } else {
      self._elem.removeClass("mobile-collapsed");

      $("body").removeClass("mobile-collapsed");
      $(document).trigger('navMenuCollapsed', false);

      if (st > 200) {
        // downscroll code
        self._elem.addClass("collapsed");

        $("body").addClass("collapsed");
        $(document).trigger('navMenuCollapsed', true);
      } else if (IsShowMenuScroll) {
        // upscroll code
        if ($('body').css('position') !== 'fixed') {
          //MAPF-9385
          self._elem.removeClass("collapsed");

          $("body").removeClass("collapsed");
          $(document).trigger('navMenuCollapsed', false);
        }
      }
    }

    lastScrollTop = st;

    if (self.IsTransparent) {
      _onScrollTransparentMenu();
    }

    if (self.IsCollection && $(".collection-tab-navigation").length) {
      _onScrollCollectionMenu();
    }
  }

  function onAccessibilityClick(e) {
    var zoomVal = e.target.getAttribute('data-value');

    if (zoomVal && !isNaN(zoomVal)) {
      //Click on enlarge
      self.curZoom = parseFloat(zoomVal);
      onResizeText();
      TransformTextSize(self.curZoom);
      maStorageVariables.setVariable("zoom", self.curZoom);

      self._elem.find("#accessibility-tool span").removeClass("active"); //$(e.target).addClass("active");
      //self._accessibility.toggleClass("open");

    } else {
      if (!self._elem.find("#accessibility-tool").length) {
        setTimeout(function () {
          self._accessibility.addClass("open");
        }, 0);

        self._accessibility.append("<div class='txt-ignore' id='accessibility-tool'><span data-value='1'>A</span><span data-value='1.1'>A</span><span data-value='1.2'>A</span></div>");
      } else {
        self._accessibility.toggleClass("open");
      }
    }

    SetActiveZoomElement();
  }

  function onOutsideAccessibilityClick(e) {
    if (e.target.id == "accessibility-tool" || $(e.target).parents("#accessibility-helper").length) return true;else self._accessibility.removeClass("open");
  } //MIXPANEL


  function onResizeText() {
    var fSize = self.curZoom <= 1 ? "Normal" : self.curZoom <= 1.1 ? "Medium" : "Large";
    mixpanel.track("Click to resize text", {
      "Font size": fSize
    });
    mixpanel.register({
      'Text Size': fSize
    });
    GTM_Send("event", "Resize text", "Resize to " + fSize, page_name);
  }

  function onMenuItemHover(e) {
    var $next = $(this).next();

    if (!self.sentHoverEvent && !isMobileByPlatform() && $next && $next.hasClass("nav-menu-submenu")) {
      if ($(this).text() !== "MAGAZINE" || window.innerWidth > 1023) {
        GTM_Send("event", GTM_EVENT_TYPE.NAVIGATION, "Open Submenu");
        self.sentHoverEvent = true;
      }
    }

    LazyLoadImages($(e.target.nextElementSibling));
  }

  function OnBackClick() {
    mixpanel.track("Click back");
    window.history.back();
  }

  var _export = {
    init: init,
    onWindowResize: onWindowResize,
    onScroll: onScroll,
    TransformTextSize: TransformTextSize,
    searchBar: function searchBar() {
      return self.SearchModule;
    },
    closeSubmenues: closeSubmenues,
    LockBodyScroll: self.LockBodyScroll,
    IsMobileMode: IsMobileMode,
    OnBackClick: OnBackClick,
    ToggleOpen: onBurgerClick,
    LoadAlerts: LoadAlerts
  };
  return _export;
}
//# sourceMappingURL=NavigationBarModule.js.map;
$("[data-module='top-menu']").each(function (i, e) {
  new TopMenuModule(e);
});

function TopMenuModule(elem) {
  var self = this;
  self._elem = $(elem);
  var defaults = {
    isClientMode: false
  };
  var settings = $.extend({}, defaults, self._elem[0].dataset);
  self._nav = window['AnalyticsHubModule'] || self._elem.hasClass("collection-tab-navigation") ? self._elem.find("nav") : self._elem.find("nav ul");
  self._controls = self._elem.find(".nav-hov"); // menu navigation

  self._controls.click(handleMoveNav);

  $(window).on("resize", handleMoveNav);

  self._nav.scroll(handleMoveNav);

  handleMoveNav();

  var selected = self._nav.find("li a.active, li a.selected, .extra-navigation a.active");

  if (selected.length) {
    selected = selected.first();

    self._nav.animate({
      scrollLeft: selected.offset().left - window.innerWidth / 2 + selected.width() / 2
    });
  }

  function handleMoveNav() {
    var leftPos = self._nav.scrollLeft();

    if ($(this).hasClass("nav-hov")) {
      var isRight = $(this).hasClass("right");

      if (isRight) {
        self._nav.animate({
          scrollLeft: leftPos + 120
        }, 200);

        leftPos += 120;
      } else {
        self._nav.animate({
          scrollLeft: leftPos - 120
        }, 200);

        leftPos -= 120;
      }
    }

    if (self._nav[0].scrollWidth > self._nav[0].clientWidth) {
      $(self._elem).removeClass('nowrap');
      $(self._nav).addClass('show-scroll');
    } else {
      $(self._nav).removeClass('show-scroll');
    }

    if (self._nav[0].clientWidth + leftPos >= self._nav[0].scrollWidth) self._controls.first().removeClass("active");else self._controls.first().addClass("active");
    if (leftPos <= 10) self._controls.last().removeClass("active");else self._controls.last().addClass("active");
  }

  $(document).ready(function () {
    if (!isMobileByPlatform() && $(self._nav).hasClass('show-scroll') && typeof DragSwipe === 'function') {
      var slider = new DragSwipe($('.scroll-module')[0]);

      if (slider) {
        var sliderWidth = $(slider).width();
        var menuItem = $(slider).find('.selected');

        if (menuItem && $(menuItem).position().left + $(menuItem).outerWidth(true) > sliderWidth) {
          $(slider).animate({
            scrollLeft: $(menuItem).position().left + $(menuItem).outerWidth(true) - $(slider).width() + 32
          }, 500);
        } else if (menuItem && $(menuItem).position().left < 35) {
          $(slider).animate({
            scrollLeft: $(menuItem).position().left - 35
          }, 500);
        }
      }
    }

    if ($(self._nav).hasClass('show-scroll')) {
      jQuery.each($(self._nav).find('a.menu-link'), function (index, link) {
        $(link).attr('draggable', false);
        $(link).addClass('not-draggable');
      });
    }
  });
  var _export = {};
  return _export;
}
//# sourceMappingURL=TopMenuModule.js.map;

/*
             page_name == "artist" || page_name == "artist_artworks" ||
            page_name == "artist_exhibitions" || page_name == "artist_auctionresults" ||
            page_name == "artist_articles" || page_name == "artist_graphs" || page_name == "artist_biography" ||
            page_name == "artwork" || page_name == "article"
        )

 */
$(document).ready(function () {

    if ((typeof (unique_id) == 'undefined' ? null : unique_id) == null) {

        if ($("body").hasClass("is-not-accessible-for-free")) {
            var paywallViewsCount = maStorageVariables.getVariable("paywallViewsCount") || 0;
            var paywallViewsLimit = getRandomTimesOfViews(); //maStorageVariables.getVariable("paywallViewsLimit");

            //if (typeof (paywallViewsLimit) == 'undefined') {

            //    //maStorageVariables.setVariable("paywallViewsLimit", getRandomTimesOfViews());
            //    maStorageVariables.setVariable("paywallViewsCount", 1);
            //    maStorageVariables.setVariableToCleanOnLogout("paywallViewsCount")
            //    maStorageVariables.setVariable("paywallStartDate", Date.now());
            //    //paywallViewsLimit = maStorageVariables.getVariable("paywallViewsLimit");

            //    //console.log("paywallViewsLimit: " + paywallViewsLimit);
            //    //var gText = "Group_" + (paywallViewsLimit > 0 ? paywallViewsLimit : "Nolimit");
            //    //amplitude.getInstance().setUserProperties({ 'paywallGroup': gText });
            //    //GTM_Send('event', 'EnterPaywallProccess', gText, null, null, true);

            //}
            //else {

            //if ((typeof (paywallViewsCount) == 'undefined' ? 0 : paywallViewsCount) >= 0) {

            //paywallViewsCount = typeof (paywallViewsCount) == 'undefined' ? 0 : paywallViewsCount;

            var startDate = maStorageVariables.getVariable("paywallStartDate");
            if (typeof (startDate) != 'undefined') {

                if (((Date.now() - startDate) / (1000 * 60 * 60 * 24)) >= 30) {
                    maStorageVariables.setVariable("paywallStartDate", Date.now());
                    paywallViewsCount = 0;
                }
            }

            paywallViewsCount++;
            maStorageVariables.setVariable("paywallViewsCount", (paywallViewsCount));
            maStorageVariables.setVariableToCleanOnLogout("paywallViewsCount");
            //}

            if (paywallViewsCount >= paywallViewsLimit && paywallViewsLimit > 0 && getParameterByName("freeunlock") == null) {
                if ($(".modal.fade.in").length === 0 && ((popupIdParam && !popupIdParam.length) || !popupIdParam)) {
                    if ($("#isShowSignupWall").val() != 'false') {
                        $("body").append(
                            '<p class="par-with-cta popup" hidden id="signup"><a class="cta hidden_signup" href="" data-type="Paywall" data-dismiss="modal" data-toggle="modal" data-target="#signUp">Paywall</a></p>'
                        )
                    }
                    setTimeout(function () {
                        $(window).on('ajaxPopupLoaded', function (d) {
                            //if (d.detail.id == "signup") {
                            //    var snoozeCount = maStorageVariables.getVariable('snoozeCount');
                            //    if (!snoozeCount || snoozeCount < 1) {
                            //        $(".snooze-paywall").show().addClass("active");
                            //        $("body").on("click", ".snooze-paywall", onSnoozePaywall);
                            //    }
                            //}
                        });
                        $(".cta.hidden_signup").click();
                        setPaywall();

                        GTM_Send('event', 'Registration_popup', paywallViewsLimit > 0 ? ' Group_' + paywallViewsLimit : "Group_Nolimit", paywallViewsCount, null);



                        //try {
                        //    hj('trigger', 'paywall');
                        //} catch (e) { }

                    }, 1100);
                }
                else {
                    console.log("Info: The registration wall wasn't displayed because another popup was already visible on the screen.");
                }
            }
        }
        function onSnoozePaywall() {
            maStorageVariables.setVariable('paywallViewsCount', 2);
            window.location.reload();
            mixpanel.track("click on snooze");
            GTM_Send('event', "clicks", "click on snooze", page_name);
            maStorageVariables.setVariable("snoozeCount", 1);
        }
    }


});
function showRegistrationPopup(currentPage,limit) {
    if ($("body").hasClass("is-not-accessible-for-free") && currentPage > limit) {
      
        $("body").append(
            '<p class="par-with-cta popup" hidden id="signup"><a class="cta hidden_signup" href="" data-type="Paywall" data-dismiss="modal" data-toggle="modal" data-target="#signUp">Paywall</a></p>'
        )
        setTimeout(function () {
            $(".cta.hidden_signup").click();
            setPaywall();
            GTM_Send('event', 'Registration_popup', ' Group_' + currentPage + 1, 4, null);

        }, 500);
        return true;
    }
    return false;
}
function setPaywall() {
    if ($(".modal-content-two-col").length == 0) {
        setTimeout(setPaywall, 100);
        return;
    }
    $(".modal-content-two-col").addClass("paywall");
    $(".paywall-popup").removeClass("inactive");
    $(".appraisal-popup").addClass("inactive");
    $(".close").remove();
    $(".v2__header_container").css("z-index", 999999);
    $(".v2__header_container").css("position", "relative");
    $(".page-content").css("filter", "blur(5px)");
}
function getRandomTimesOfViews() {
    return 5;

}

Date.prototype.addDays = function (days) {
    this.setDate(this.getDate() + parseInt(days));
    return this;
};;
var cta = "cta";
var source_page = "source_page";

function addAnalyticsParamsToUrl(url, paramsArray) {

    var baseUrl = url;
    for (var key in paramsArray) {
        baseUrl = appendQs(baseUrl, key, paramsArray[key])
      //  console.log("key " + key + " has value " + paramsArray[key]);
    }

    return baseUrl;   
};
/**
 * FingerprintJS v3.3.2 - Copyright (c) FingerprintJS, Inc, 2022 (https://fingerprintjs.com)
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
 *
 * This software contains code from open-source projects:
 * MurmurHash3 by Karan Lyons (https://github.com/karanlyons/murmurHash3.js)
 */
var FingerprintJS = function (e) { "use strict"; var t = function () { return (t = Object.assign || function (e) { for (var t, n = 1, r = arguments.length; n < r; n++)for (var a in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, a) && (e[a] = t[a]); return e }).apply(this, arguments) }; function n(e, t, n, r) { return new (n || (n = Promise))((function (a, o) { function i(e) { try { u(r.next(e)) } catch (t) { o(t) } } function c(e) { try { u(r.throw(e)) } catch (t) { o(t) } } function u(e) { var t; e.done ? a(e.value) : (t = e.value, t instanceof n ? t : new n((function (e) { e(t) }))).then(i, c) } u((r = r.apply(e, t || [])).next()) })) } function r(e, t) { var n, r, a, o, i = { label: 0, sent: function () { if (1 & a[0]) throw a[1]; return a[1] }, trys: [], ops: [] }; return o = { next: c(0), throw: c(1), return: c(2) }, "function" == typeof Symbol && (o[Symbol.iterator] = function () { return this }), o; function c(o) { return function (c) { return function (o) { if (n) throw new TypeError("Generator is already executing."); for (; i;)try { if (n = 1, r && (a = 2 & o[0] ? r.return : o[0] ? r.throw || ((a = r.return) && a.call(r), 0) : r.next) && !(a = a.call(r, o[1])).done) return a; switch (r = 0, a && (o = [2 & o[0], a.value]), o[0]) { case 0: case 1: a = o; break; case 4: return i.label++, { value: o[1], done: !1 }; case 5: i.label++, r = o[1], o = [0]; continue; case 7: o = i.ops.pop(), i.trys.pop(); continue; default: if (!(a = i.trys, (a = a.length > 0 && a[a.length - 1]) || 6 !== o[0] && 2 !== o[0])) { i = 0; continue } if (3 === o[0] && (!a || o[1] > a[0] && o[1] < a[3])) { i.label = o[1]; break } if (6 === o[0] && i.label < a[1]) { i.label = a[1], a = o; break } if (a && i.label < a[2]) { i.label = a[2], i.ops.push(o); break } a[2] && i.ops.pop(), i.trys.pop(); continue }o = t.call(e, i) } catch (c) { o = [6, c], r = 0 } finally { n = a = 0 } if (5 & o[0]) throw o[1]; return { value: o[0] ? o[1] : void 0, done: !0 } }([o, c]) } } } function a() { for (var e = 0, t = 0, n = arguments.length; t < n; t++)e += arguments[t].length; var r = Array(e), a = 0; for (t = 0; t < n; t++)for (var o = arguments[t], i = 0, c = o.length; i < c; i++, a++)r[a] = o[i]; return r } function o(e, t) { return new Promise((function (n) { return setTimeout(n, e, t) })) } function i(e, t) { try { var n = e(); (r = n) && "function" == typeof r.then ? n.then((function (e) { return t(!0, e) }), (function (e) { return t(!1, e) })) : t(!0, n) } catch (a) { t(!1, a) } var r } function c(e, t, a) { return void 0 === a && (a = 16), n(this, void 0, void 0, (function () { var n, i, c; return r(this, (function (r) { switch (r.label) { case 0: n = Date.now(), i = 0, r.label = 1; case 1: return i < e.length ? (t(e[i], i), (c = Date.now()) >= n + a ? (n = c, [4, o(0)]) : [3, 3]) : [3, 4]; case 2: r.sent(), r.label = 3; case 3: return ++i, [3, 1]; case 4: return [2] } })) })) } function u(e, t) { e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]], t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]; var n = [0, 0, 0, 0]; return n[3] += e[3] + t[3], n[2] += n[3] >>> 16, n[3] &= 65535, n[2] += e[2] + t[2], n[1] += n[2] >>> 16, n[2] &= 65535, n[1] += e[1] + t[1], n[0] += n[1] >>> 16, n[1] &= 65535, n[0] += e[0] + t[0], n[0] &= 65535, [n[0] << 16 | n[1], n[2] << 16 | n[3]] } function s(e, t) { e = [e[0] >>> 16, 65535 & e[0], e[1] >>> 16, 65535 & e[1]], t = [t[0] >>> 16, 65535 & t[0], t[1] >>> 16, 65535 & t[1]]; var n = [0, 0, 0, 0]; return n[3] += e[3] * t[3], n[2] += n[3] >>> 16, n[3] &= 65535, n[2] += e[2] * t[3], n[1] += n[2] >>> 16, n[2] &= 65535, n[2] += e[3] * t[2], n[1] += n[2] >>> 16, n[2] &= 65535, n[1] += e[1] * t[3], n[0] += n[1] >>> 16, n[1] &= 65535, n[1] += e[2] * t[2], n[0] += n[1] >>> 16, n[1] &= 65535, n[1] += e[3] * t[1], n[0] += n[1] >>> 16, n[1] &= 65535, n[0] += e[0] * t[3] + e[1] * t[2] + e[2] * t[1] + e[3] * t[0], n[0] &= 65535, [n[0] << 16 | n[1], n[2] << 16 | n[3]] } function l(e, t) { return 32 === (t %= 64) ? [e[1], e[0]] : t < 32 ? [e[0] << t | e[1] >>> 32 - t, e[1] << t | e[0] >>> 32 - t] : (t -= 32, [e[1] << t | e[0] >>> 32 - t, e[0] << t | e[1] >>> 32 - t]) } function d(e, t) { return 0 === (t %= 64) ? e : t < 32 ? [e[0] << t | e[1] >>> 32 - t, e[1] << t] : [e[1] << t - 32, 0] } function f(e, t) { return [e[0] ^ t[0], e[1] ^ t[1]] } function h(e) { return e = f(e, [0, e[0] >>> 1]), e = f(e = s(e, [4283543511, 3981806797]), [0, e[0] >>> 1]), e = f(e = s(e, [3301882366, 444984403]), [0, e[0] >>> 1]) } function v(e, t) { t = t || 0; var n, r = (e = e || "").length % 16, a = e.length - r, o = [0, t], i = [0, t], c = [0, 0], v = [0, 0], p = [2277735313, 289559509], m = [1291169091, 658871167]; for (n = 0; n < a; n += 16)c = [255 & e.charCodeAt(n + 4) | (255 & e.charCodeAt(n + 5)) << 8 | (255 & e.charCodeAt(n + 6)) << 16 | (255 & e.charCodeAt(n + 7)) << 24, 255 & e.charCodeAt(n) | (255 & e.charCodeAt(n + 1)) << 8 | (255 & e.charCodeAt(n + 2)) << 16 | (255 & e.charCodeAt(n + 3)) << 24], v = [255 & e.charCodeAt(n + 12) | (255 & e.charCodeAt(n + 13)) << 8 | (255 & e.charCodeAt(n + 14)) << 16 | (255 & e.charCodeAt(n + 15)) << 24, 255 & e.charCodeAt(n + 8) | (255 & e.charCodeAt(n + 9)) << 8 | (255 & e.charCodeAt(n + 10)) << 16 | (255 & e.charCodeAt(n + 11)) << 24], c = l(c = s(c, p), 31), o = u(o = l(o = f(o, c = s(c, m)), 27), i), o = u(s(o, [0, 5]), [0, 1390208809]), v = l(v = s(v, m), 33), i = u(i = l(i = f(i, v = s(v, p)), 31), o), i = u(s(i, [0, 5]), [0, 944331445]); switch (c = [0, 0], v = [0, 0], r) { case 15: v = f(v, d([0, e.charCodeAt(n + 14)], 48)); case 14: v = f(v, d([0, e.charCodeAt(n + 13)], 40)); case 13: v = f(v, d([0, e.charCodeAt(n + 12)], 32)); case 12: v = f(v, d([0, e.charCodeAt(n + 11)], 24)); case 11: v = f(v, d([0, e.charCodeAt(n + 10)], 16)); case 10: v = f(v, d([0, e.charCodeAt(n + 9)], 8)); case 9: v = s(v = f(v, [0, e.charCodeAt(n + 8)]), m), i = f(i, v = s(v = l(v, 33), p)); case 8: c = f(c, d([0, e.charCodeAt(n + 7)], 56)); case 7: c = f(c, d([0, e.charCodeAt(n + 6)], 48)); case 6: c = f(c, d([0, e.charCodeAt(n + 5)], 40)); case 5: c = f(c, d([0, e.charCodeAt(n + 4)], 32)); case 4: c = f(c, d([0, e.charCodeAt(n + 3)], 24)); case 3: c = f(c, d([0, e.charCodeAt(n + 2)], 16)); case 2: c = f(c, d([0, e.charCodeAt(n + 1)], 8)); case 1: c = s(c = f(c, [0, e.charCodeAt(n)]), p), o = f(o, c = s(c = l(c, 31), m)) }return o = u(o = f(o, [0, e.length]), i = f(i, [0, e.length])), i = u(i, o), o = u(o = h(o), i = h(i)), i = u(i, o), ("00000000" + (o[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (o[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (i[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (i[1] >>> 0).toString(16)).slice(-8) } function p(e) { return parseInt(e) } function m(e) { return parseFloat(e) } function g(e, t) { return "number" == typeof e && isNaN(e) ? t : e } function b(e) { return e.reduce((function (e, t) { return e + (t ? 1 : 0) }), 0) } function w(e, t) { if (void 0 === t && (t = 1), Math.abs(t) >= 1) return Math.round(e / t) * t; var n = 1 / t; return Math.round(e * n) / n } function y(e) { return e && "object" == typeof e && "message" in e ? e : { message: e } } function k(e, t, a) { var u = Object.keys(e).filter((function (e) { return !function (e, t) { for (var n = 0, r = e.length; n < r; ++n)if (e[n] === t) return !0; return !1 }(a, e) })), s = Array(u.length); return c(u, (function (n, r) { s[r] = function (e, t) { var n = function (e) { return "function" != typeof e }, r = new Promise((function (r) { var a = Date.now(); i(e.bind(null, t), (function () { for (var e = [], t = 0; t < arguments.length; t++)e[t] = arguments[t]; var o = Date.now() - a; if (!e[0]) return r((function () { return { error: y(e[1]), duration: o } })); var c = e[1]; if (n(c)) return r((function () { return { value: c, duration: o } })); r((function () { return new Promise((function (e) { var t = Date.now(); i(c, (function () { for (var n = [], r = 0; r < arguments.length; r++)n[r] = arguments[r]; var a = o + Date.now() - t; if (!n[0]) return e({ error: y(n[1]), duration: a }); e({ value: n[1], duration: a }) })) })) })) })) })); return function () { return r.then((function (e) { return e() })) } }(e[n], t) })), function () { return n(this, void 0, void 0, (function () { var e, t, n, a, i, l; return r(this, (function (d) { switch (d.label) { case 0: for (e = {}, t = 0, n = u; t < n.length; t++)a = n[t], e[a] = void 0; i = Array(u.length), l = function () { var t; return r(this, (function (n) { switch (n.label) { case 0: return t = !0, [4, c(u, (function (n, r) { i[r] || (s[r] ? i[r] = s[r]().then((function (t) { return e[n] = t })) : t = !1) }))]; case 1: return n.sent(), t ? [2, "break"] : [4, o(1)]; case 2: return n.sent(), [2] } })) }, d.label = 1; case 1: return [5, l()]; case 2: if ("break" === d.sent()) return [3, 4]; d.label = 3; case 3: return [3, 1]; case 4: return [4, Promise.all(i)]; case 5: return d.sent(), [2, e] } })) })) } } function C() { var e = window, t = navigator; return b(["MSCSSMatrix" in e, "msSetImmediate" in e, "msIndexedDB" in e, "msMaxTouchPoints" in t, "msPointerEnabled" in t]) >= 4 } function A() { var e = window, t = navigator; return b(["msWriteProfilerMark" in e, "MSStream" in e, "msLaunchUri" in t, "msSaveBlob" in t]) >= 3 && !C() } function S() { var e = window, t = navigator; return b(["webkitPersistentStorage" in t, "webkitTemporaryStorage" in t, 0 === t.vendor.indexOf("Google"), "webkitResolveLocalFileSystemURL" in e, "BatteryManager" in e, "webkitMediaStream" in e, "webkitSpeechGrammar" in e]) >= 5 } function x() { var e = window, t = navigator; return b(["ApplePayError" in e, "CSSPrimitiveValue" in e, "Counter" in e, 0 === t.vendor.indexOf("Apple"), "getStorageUpdates" in t, "WebKitMediaKeys" in e]) >= 4 } function M() { var e = window; return b(["safari" in e, !("DeviceMotionEvent" in e), !("ongestureend" in e), !("standalone" in navigator)]) >= 3 } function _() { var e, t, n = window; return b(["buildID" in navigator, "MozAppearance" in (null !== (t = null === (e = document.documentElement) || void 0 === e ? void 0 : e.style) && void 0 !== t ? t : {}), "onmozfullscreenchange" in n, "mozInnerScreenX" in n, "CSSMozDocumentRule" in n, "CanvasCaptureMediaStream" in n]) >= 4 } function P() { var e = document; return e.fullscreenElement || e.msFullscreenElement || e.mozFullScreenElement || e.webkitFullscreenElement || null } function T() { var e = S(), t = _(); if (!e && !t) return !1; var n = window; return b(["onorientationchange" in n, "orientation" in n, e && !("SharedWorker" in n), t && /android/i.test(navigator.appVersion)]) >= 2 } function E(e) { var t = new Error(e); return t.name = e, t } function D(e, t, a) { var i, c, u; return void 0 === a && (a = 50), n(this, void 0, void 0, (function () { var n, s; return r(this, (function (r) { switch (r.label) { case 0: n = document, r.label = 1; case 1: return n.body ? [3, 3] : [4, o(a)]; case 2: return r.sent(), [3, 1]; case 3: s = n.createElement("iframe"), r.label = 4; case 4: return r.trys.push([4, , 10, 11]), [4, new Promise((function (e, r) { var a = !1, o = function () { a = !0, e() }; s.onload = o, s.onerror = function (e) { a = !0, r(e) }; var i = s.style; i.setProperty("display", "block", "important"), i.position = "absolute", i.top = "0", i.left = "0", i.visibility = "hidden", t && "srcdoc" in s ? s.srcdoc = t : s.src = "about:blank", n.body.appendChild(s); var c = function () { var e, t; a || ("complete" === (null === (t = null === (e = s.contentWindow) || void 0 === e ? void 0 : e.document) || void 0 === t ? void 0 : t.readyState) ? o() : setTimeout(c, 10)) }; c() }))]; case 5: r.sent(), r.label = 6; case 6: return (null === (c = null === (i = s.contentWindow) || void 0 === i ? void 0 : i.document) || void 0 === c ? void 0 : c.body) ? [3, 8] : [4, o(a)]; case 7: return r.sent(), [3, 6]; case 8: return [4, e(s, s.contentWindow)]; case 9: return [2, r.sent()]; case 10: return null === (u = s.parentNode) || void 0 === u || u.removeChild(s), [7]; case 11: return [2] } })) })) } function L(e) { for (var t = function (e) { for (var t, n, r = "Unexpected syntax '" + e + "'", a = /^\s*([a-z-]*)(.*)$/i.exec(e), o = a[1] || void 0, i = {}, c = /([.:#][\w-]+|\[.+?\])/gi, u = function (e, t) { i[e] = i[e] || [], i[e].push(t) }; ;) { var s = c.exec(a[2]); if (!s) break; var l = s[0]; switch (l[0]) { case ".": u("class", l.slice(1)); break; case "#": u("id", l.slice(1)); break; case "[": var d = /^\[([\w-]+)([~|^$*]?=("(.*?)"|([\w-]+)))?(\s+[is])?\]$/.exec(l); if (!d) throw new Error(r); u(d[1], null !== (n = null !== (t = d[4]) && void 0 !== t ? t : d[5]) && void 0 !== n ? n : ""); break; default: throw new Error(r) } } return [o, i] }(e), n = t[0], r = t[1], a = document.createElement(null != n ? n : "div"), o = 0, i = Object.keys(r); o < i.length; o++) { var c = i[o]; a.setAttribute(c, r[c].join(" ")) } return a } var z = ["monospace", "sans-serif", "serif"], I = ["sans-serif-thin", "ARNO PRO", "Agency FB", "Arabic Typesetting", "Arial Unicode MS", "AvantGarde Bk BT", "BankGothic Md BT", "Batang", "Bitstream Vera Sans Mono", "Calibri", "Century", "Century Gothic", "Clarendon", "EUROSTILE", "Franklin Gothic", "Futura Bk BT", "Futura Md BT", "GOTHAM", "Gill Sans", "HELV", "Haettenschweiler", "Helvetica Neue", "Humanst521 BT", "Leelawadee", "Letter Gothic", "Levenim MT", "Lucida Bright", "Lucida Sans", "Menlo", "MS Mincho", "MS Outlook", "MS Reference Specialty", "MS UI Gothic", "MT Extra", "MYRIAD PRO", "Marlett", "Meiryo UI", "Microsoft Uighur", "Minion Pro", "Monotype Corsiva", "PMingLiU", "Pristina", "SCRIPTINA", "Segoe UI Light", "Serifa", "SimHei", "Small Fonts", "Staccato222 BT", "TRAJAN PRO", "Univers CE 55 Medium", "Vrinda", "ZWAdobeF"]; function B(e) { return e.rect(0, 0, 10, 10), e.rect(2, 2, 6, 6), !e.isPointInPath(5, 5, "evenodd") } function F(e, t) { e.width = 240, e.height = 60, t.textBaseline = "alphabetic", t.fillStyle = "#f60", t.fillRect(100, 1, 62, 20), t.fillStyle = "#069", t.font = '11pt "Times New Roman"'; var n = "Cwm fjordbank gly " + String.fromCharCode(55357, 56835); return t.fillText(n, 2, 15), t.fillStyle = "rgba(102, 204, 0, 0.2)", t.font = "18pt Arial", t.fillText(n, 4, 45), R(e) } function O(e, t) { e.width = 122, e.height = 110, t.globalCompositeOperation = "multiply"; for (var n = 0, r = [["#f2f", 40, 40], ["#2ff", 80, 40], ["#ff2", 60, 80]]; n < r.length; n++) { var a = r[n], o = a[0], i = a[1], c = a[2]; t.fillStyle = o, t.beginPath(), t.arc(i, c, 40, 0, 2 * Math.PI, !0), t.closePath(), t.fill() } return t.fillStyle = "#f9c", t.arc(60, 60, 60, 0, 2 * Math.PI, !0), t.arc(60, 60, 20, 0, 2 * Math.PI, !0), t.fill("evenodd"), R(e) } function R(e) { return e.toDataURL() } var G, j; function U() { var e = this; return function () { if (void 0 === j) { var e = function () { var t = W(); N(t) ? j = setTimeout(e, 2500) : (G = t, j = void 0) }; e() } }(), function () { return n(e, void 0, void 0, (function () { var e; return r(this, (function (t) { switch (t.label) { case 0: return N(e = W()) ? G ? [2, a(G)] : P() ? [4, (n = document, (n.exitFullscreen || n.msExitFullscreen || n.mozCancelFullScreen || n.webkitExitFullscreen).call(n))] : [3, 2] : [3, 2]; case 1: t.sent(), e = W(), t.label = 2; case 2: return N(e) || (G = e), [2, e] }var n })) })) } } function W() { var e = screen; return [g(m(e.availTop), null), g(m(e.width) - m(e.availWidth) - g(m(e.availLeft), 0), null), g(m(e.height) - m(e.availHeight) - g(m(e.availTop), 0), null), g(m(e.availLeft), null)] } function N(e) { for (var t = 0; t < 4; ++t)if (e[t]) return !1; return !0 } var q = { abpIndo: ["#Iklan-Melayang", "#Kolom-Iklan-728", "#SidebarIklan-wrapper", 'a[title="7naga poker" i]', '[title="ALIENBOLA" i]'], abpvn: ["#quangcaomb", ".iosAdsiosAds-layout", ".quangcao", '[href^="https://r88.vn/"]', '[href^="https://zbet.vn/"]'], adBlockFinland: [".mainostila", ".sponsorit", ".ylamainos", 'a[href*="/clickthrgh.asp?"]', 'a[href^="https://app.readpeak.com/ads"]'], adBlockPersian: ["#navbar_notice_50", 'a[href^="http://g1.v.fwmrm.net/ad/"]', ".kadr", 'TABLE[width="140px"]', "#divAgahi"], adBlockWarningRemoval: ["#adblock-honeypot", ".adblocker-root", ".wp_adblock_detect"], adGuardAnnoyances: ['amp-embed[type="zen"]', ".hs-sosyal", "#cookieconsentdiv", 'div[class^="app_gdpr"]', ".as-oil"], adGuardBase: ["#ad-after", "#ad-p3", ".BetterJsPopOverlay", "#ad_300X250", "#bannerfloat22"], adGuardChinese: ['#piao_div_0[style*="width:140px;"]', 'a[href*=".ttz5.cn"]', 'a[href*=".yabovip2027.com/"]', ".tm3all2h4b", ".cc5278_banner_ad"], adGuardFrench: [".zonepub", '[class*="_adLeaderboard"]', '[id^="block-xiti_oas-"]', 'a[href^="http://ptapjmp.com/"]', 'a[href^="https://go.alvexo.com/"]'], adGuardGerman: [".banneritemwerbung_head_1", ".boxstartwerbung", ".werbung3", 'a[href^="http://www.eis.de/index.phtml?refid="]', 'a[href^="https://www.tipico.com/?affiliateId="]'], adGuardJapanese: ["#kauli_yad_1", "#ad-giftext", "#adsSPRBlock", 'a[href^="http://ad2.trafficgate.net/"]', 'a[href^="http://www.rssad.jp/"]'], adGuardMobile: ["amp-auto-ads", "#mgid_iframe", ".amp_ad", 'amp-embed[type="24smi"]', "#mgid_iframe1"], adGuardRussian: ['a[href^="https://ya-distrib.ru/r/"]', 'a[href^="https://ad.letmeads.com/"]', ".reclama", 'div[id^="smi2adblock"]', 'div[id^="AdFox_banner_"]'], adGuardSocial: ['a[href^="//www.stumbleupon.com/submit?url="]', 'a[href^="//telegram.me/share/url?"]', ".etsy-tweet", "#inlineShare", ".popup-social"], adGuardSpanishPortuguese: ["#barraPublicidade", "#Publicidade", "#publiEspecial", "#queTooltip", '[href^="http://ads.glispa.com/"]'], adGuardTrackingProtection: ['amp-embed[type="taboola"]', "#qoo-counter", 'a[href^="http://click.hotlog.ru/"]', 'a[href^="http://hitcounter.ru/top/stat.php"]', 'a[href^="http://top.mail.ru/jump"]'], adGuardTurkish: ["#backkapat", "#reklami", 'a[href^="http://adserv.ontek.com.tr/"]', 'a[href^="http://izlenzi.com/campaign/"]', 'a[href^="http://www.installads.net/"]'], bulgarian: ["td#freenet_table_ads", "#adbody", "#ea_intext_div", ".lapni-pop-over", "#xenium_hot_offers"], easyList: ["#AD_banner_bottom", "#Ads_google_02", "#N-ad-article-rightRail-1", "#ad-fullbanner2", "#ad-zone-2"], easyListChina: ['a[href*=".wensixuetang.com/"]', 'A[href*="/hth107.com/"]', '.appguide-wrap[onclick*="bcebos.com"]', ".frontpageAdvM", "#taotaole"], easyListCookie: ["#adtoniq-msg-bar", "#CoockiesPage", "#CookieModal_cookiemodal", "#DO_CC_PANEL", "#ShowCookie"], easyListCzechSlovak: ["#onlajny-stickers", "#reklamni-box", ".reklama-megaboard", ".sklik", '[id^="sklikReklama"]'], easyListDutch: ["#advertentie", "#vipAdmarktBannerBlock", ".adstekst", 'a[href^="https://xltube.nl/click/"]', "#semilo-lrectangle"], easyListGermany: ['a[href^="http://www.hw-area.com/?dp="]', 'a[href^="https://ads.sunmaker.com/tracking.php?"]', ".werbung-skyscraper2", ".bannergroup_werbung", ".ads_rechts"], easyListItaly: [".box_adv_annunci", ".sb-box-pubbliredazionale", 'a[href^="http://affiliazioniads.snai.it/"]', 'a[href^="https://adserver.html.it/"]', 'a[href^="https://affiliazioniads.snai.it/"]'], easyListLithuania: [".reklamos_tarpas", ".reklamos_nuorodos", 'img[alt="Reklaminis skydelis"]', 'img[alt="Dedikuoti.lt serveriai"]', 'img[alt="Hostingas Serveriai.lt"]'], estonian: ['A[href*="http://pay4results24.eu"]'], fanboyAnnoyances: ["#feedback-tab", "#taboola-below-article", ".feedburnerFeedBlock", ".widget-feedburner-counter", '[title="Subscribe to our blog"]'], fanboyAntiFacebook: [".util-bar-module-firefly-visible"], fanboyEnhancedTrackers: [".open.pushModal", "#issuem-leaky-paywall-articles-zero-remaining-nag", "#sovrn_container", 'div[class$="-hide"][zoompage-fontsize][style="display: block;"]', ".BlockNag__Card"], fanboySocial: [".td-tags-and-social-wrapper-box", ".twitterContainer", ".youtube-social", 'a[title^="Like us on Facebook"]', 'img[alt^="Share on Digg"]'], frellwitSwedish: ['a[href*="casinopro.se"][target="_blank"]', 'a[href*="doktor-se.onelink.me"]', "article.category-samarbete", "div.holidAds", "ul.adsmodern"], greekAdBlock: ['A[href*="adman.otenet.gr/click?"]', 'A[href*="http://axiabanners.exodus.gr/"]', 'A[href*="http://interactive.forthnet.gr/click?"]', "DIV.agores300", "TABLE.advright"], hungarian: ['A[href*="ad.eval.hu"]', 'A[href*="ad.netmedia.hu"]', 'A[href*="daserver.ultraweb.hu"]', "#cemp_doboz", ".optimonk-iframe-container"], iDontCareAboutCookies: ['.alert-info[data-block-track*="CookieNotice"]', ".ModuleTemplateCookieIndicator", ".o--cookies--container", ".cookie-msg-info-container", "#cookies-policy-sticky"], icelandicAbp: ['A[href^="/framework/resources/forms/ads.aspx"]'], latvian: ['a[href="http://www.salidzini.lv/"][style="display: block; width: 120px; height: 40px; overflow: hidden; position: relative;"]', 'a[href="http://www.salidzini.lv/"][style="display: block; width: 88px; height: 31px; overflow: hidden; position: relative;"]'], listKr: ['a[href*="//kingtoon.slnk.kr"]', 'a[href*="//playdsb.com/kr"]', "div.logly-lift-adz", 'div[data-widget_id="ml6EJ074"]', "ins.daum_ddn_area"], listeAr: [".geminiLB1Ad", ".right-and-left-sponsers", 'a[href*=".aflam.info"]', 'a[href*="booraq.org"]', 'a[href*="dubizzle.com/ar/?utm_source="]'], listeFr: ['a[href^="http://promo.vador.com/"]', "#adcontainer_recherche", 'a[href*="weborama.fr/fcgi-bin/"]', ".site-pub-interstitiel", 'div[id^="crt-"][data-criteo-id]'], officialPolish: ["#ceneo-placeholder-ceneo-12", '[href^="https://aff.sendhub.pl/"]', 'a[href^="http://advmanager.techfun.pl/redirect/"]', 'a[href^="http://www.trizer.pl/?utm_source"]', "div#skapiec_ad"], ro: ['a[href^="//afftrk.altex.ro/Counter/Click"]', 'a[href^="/magazin/"]', 'a[href^="https://blackfridaysales.ro/trk/shop/"]', 'a[href^="https://event.2performant.com/events/click"]', 'a[href^="https://l.profitshare.ro/"]'], ruAd: ['a[href*="//febrare.ru/"]', 'a[href*="//utimg.ru/"]', 'a[href*="://chikidiki.ru"]', "#pgeldiz", ".yandex-rtb-block"], thaiAds: ["a[href*=macau-uta-popup]", "#ads-google-middle_rectangle-group", ".ads300s", ".bumq", ".img-kosana"], webAnnoyancesUltralist: ["#mod-social-share-2", "#social-tools", ".ctpl-fullbanner", ".zergnet-recommend", ".yt.btn-link.btn-md.btn"] }; function H(e) { var t; return n(this, void 0, void 0, (function () { var n, a, i, c, u, s, l; return r(this, (function (r) { switch (r.label) { case 0: for (n = document, a = n.createElement("div"), i = new Array(e.length), c = {}, J(a), l = 0; l < e.length; ++l)u = L(e[l]), J(s = n.createElement("div")), s.appendChild(u), a.appendChild(s), i[l] = u; r.label = 1; case 1: return n.body ? [3, 3] : [4, o(50)]; case 2: return r.sent(), [3, 1]; case 3: n.body.appendChild(a); try { for (l = 0; l < e.length; ++l)i[l].offsetParent || (c[e[l]] = !0) } finally { null === (t = a.parentNode) || void 0 === t || t.removeChild(a) } return [2, c] } })) })) } function J(e) { e.style.setProperty("display", "block", "important") } function V(e) { return matchMedia("(inverted-colors: " + e + ")").matches } function $(e) { return matchMedia("(forced-colors: " + e + ")").matches } function K(e) { return matchMedia("(prefers-contrast: " + e + ")").matches } function X(e) { return matchMedia("(prefers-reduced-motion: " + e + ")").matches } function Y(e) { return matchMedia("(dynamic-range: " + e + ")").matches } var Z = Math, Q = function () { return 0 }; var ee = { default: [], apple: [{ font: "-apple-system-body" }], serif: [{ fontFamily: "serif" }], sans: [{ fontFamily: "sans-serif" }], mono: [{ fontFamily: "monospace" }], min: [{ fontSize: "1px" }], system: [{ fontFamily: "system-ui" }] }; var te = { fonts: function () { return D((function (e, t) { var n = t.document, r = n.body; r.style.fontSize = "48px"; var a = n.createElement("div"), o = {}, i = {}, c = function (e) { var t = n.createElement("span"), r = t.style; return r.position = "absolute", r.top = "0", r.left = "0", r.fontFamily = e, t.textContent = "mmMwWLliI0O&1", a.appendChild(t), t }, u = z.map(c), s = function () { for (var e = {}, t = function (t) { e[t] = z.map((function (e) { return function (e, t) { return c("'" + e + "'," + t) }(t, e) })) }, n = 0, r = I; n < r.length; n++) { t(r[n]) } return e }(); r.appendChild(a); for (var l = 0; l < z.length; l++)o[z[l]] = u[l].offsetWidth, i[z[l]] = u[l].offsetHeight; return I.filter((function (e) { return t = s[e], z.some((function (e, n) { return t[n].offsetWidth !== o[e] || t[n].offsetHeight !== i[e] })); var t })) })) }, domBlockers: function (e) { var t = (void 0 === e ? {} : e).debug; return n(this, void 0, void 0, (function () { var e, n, a, o; return r(this, (function (r) { switch (r.label) { case 0: return x() || T() ? (e = Object.keys(q), [4, H((o = []).concat.apply(o, e.map((function (e) { return q[e] }))))]) : [2, void 0]; case 1: return n = r.sent(), t && function (e) { for (var t = "DOM blockers debug:\n```", n = 0, r = Object.keys(q); n < r.length; n++) { var a = r[n]; t += "\n" + a + ":"; for (var o = 0, i = q[a]; o < i.length; o++) { var c = i[o]; t += "\n  " + c + " " + (e[c] ? "🚫" : "➡️") } } console.log(t + "\n```") }(n), (a = e.filter((function (e) { var t = q[e]; return b(t.map((function (e) { return n[e] }))) > .6 * t.length }))).sort(), [2, a] } })) })) }, fontPreferences: function () { return function (e, t) { void 0 === t && (t = 4e3); return D((function (n, r) { var o = r.document, i = o.body, c = i.style; c.width = t + "px", c.webkitTextSizeAdjust = c.textSizeAdjust = "none", S() ? i.style.zoom = "" + 1 / r.devicePixelRatio : x() && (i.style.zoom = "reset"); var u = o.createElement("div"); return u.textContent = a(Array(t / 20 << 0)).map((function () { return "word" })).join(" "), i.appendChild(u), e(o, i) }), '<!doctype html><html><head><meta name="viewport" content="width=device-width, initial-scale=1">') }((function (e, t) { for (var n = {}, r = {}, a = 0, o = Object.keys(ee); a < o.length; a++) { var i = o[a], c = ee[i], u = c[0], s = void 0 === u ? {} : u, l = c[1], d = void 0 === l ? "mmMwWLliI0fiflO&1" : l, f = e.createElement("span"); f.textContent = d, f.style.whiteSpace = "nowrap"; for (var h = 0, v = Object.keys(s); h < v.length; h++) { var p = v[h], m = s[p]; void 0 !== m && (f.style[p] = m) } n[i] = f, t.appendChild(e.createElement("br")), t.appendChild(f) } for (var g = 0, b = Object.keys(ee); g < b.length; g++) { r[i = b[g]] = n[i].getBoundingClientRect().width } return r })) }, audio: function () { var e = window, t = e.OfflineAudioContext || e.webkitOfflineAudioContext; if (!t) return -2; if (x() && !M() && !function () { var e = window; return b(["DOMRectList" in e, "RTCPeerConnectionIceEvent" in e, "SVGGeometryElement" in e, "ontransitioncancel" in e]) >= 3 }()) return -1; var n = new t(1, 5e3, 44100), r = n.createOscillator(); r.type = "triangle", r.frequency.value = 1e4; var a = n.createDynamicsCompressor(); a.threshold.value = -50, a.knee.value = 40, a.ratio.value = 12, a.attack.value = 0, a.release.value = .25, r.connect(a), a.connect(n.destination), r.start(0); var o = function (e) { var t = 3, n = 500, r = 500, a = 5e3, o = function () { }; return [new Promise((function (i, c) { var u = !1, s = 0, l = 0; e.oncomplete = function (e) { return i(e.renderedBuffer) }; var d = function () { setTimeout((function () { return c(E("timeout")) }), Math.min(r, l + a - Date.now())) }, f = function () { try { switch (e.startRendering(), e.state) { case "running": l = Date.now(), u && d(); break; case "suspended": document.hidden || s++, u && s >= t ? c(E("suspended")) : setTimeout(f, n) } } catch (r) { c(r) } }; f(), o = function () { u || (u = !0, l > 0 && d()) } })), o] }(n), i = o[0], c = o[1], u = i.then((function (e) { return function (e) { for (var t = 0, n = 0; n < e.length; ++n)t += Math.abs(e[n]); return t }(e.getChannelData(0).subarray(4500)) }), (function (e) { if ("timeout" === e.name || "suspended" === e.name) return -3; throw e })); return u.catch((function () { })), function () { return c(), u } }, screenFrame: function () { var e = this, t = U(); return function () { return n(e, void 0, void 0, (function () { var e, n; return r(this, (function (r) { switch (r.label) { case 0: return [4, t()]; case 1: return e = r.sent(), [2, [(n = function (e) { return null === e ? null : w(e, 10) })(e[0]), n(e[1]), n(e[2]), n(e[3])]] } })) })) } }, osCpu: function () { return navigator.oscpu }, languages: function () { var e, t = navigator, n = [], r = t.language || t.userLanguage || t.browserLanguage || t.systemLanguage; if (void 0 !== r && n.push([r]), Array.isArray(t.languages)) S() && b([!("MediaSettingsRange" in (e = window)), "RTCEncodedAudioFrame" in e, "" + e.Intl == "[object Intl]", "" + e.Reflect == "[object Reflect]"]) >= 3 || n.push(t.languages); else if ("string" == typeof t.languages) { var a = t.languages; a && n.push(a.split(",")) } return n }, colorDepth: function () { return window.screen.colorDepth }, deviceMemory: function () { return g(m(navigator.deviceMemory), void 0) }, screenResolution: function () { var e = screen, t = function (e) { return g(p(e), null) }, n = [t(e.width), t(e.height)]; return n.sort().reverse(), n }, hardwareConcurrency: function () { return g(p(navigator.hardwareConcurrency), void 0) }, timezone: function () { var e, t = null === (e = window.Intl) || void 0 === e ? void 0 : e.DateTimeFormat; if (t) { var n = (new t).resolvedOptions().timeZone; if (n) return n } var r, a = (r = (new Date).getFullYear(), -Math.max(m(new Date(r, 0, 1).getTimezoneOffset()), m(new Date(r, 6, 1).getTimezoneOffset()))); return "UTC" + (a >= 0 ? "+" : "") + Math.abs(a) }, sessionStorage: function () { try { return !!window.sessionStorage } catch (e) { return !0 } }, localStorage: function () { try { return !!window.localStorage } catch (e) { return !0 } }, indexedDB: function () { if (!C() && !A()) try { return !!window.indexedDB } catch (e) { return !0 } }, openDatabase: function () { return !!window.openDatabase }, cpuClass: function () { return navigator.cpuClass }, platform: function () { var e = navigator.platform; return "MacIntel" === e && x() && !M() ? function () { if ("iPad" === navigator.platform) return !0; var e = screen, t = e.width / e.height; return b(["MediaSource" in window, !!Element.prototype.webkitRequestFullscreen, t > .65 && t < 1.53]) >= 2 }() ? "iPad" : "iPhone" : e }, plugins: function () { var e = navigator.plugins; if (e) { for (var t = [], n = 0; n < e.length; ++n) { var r = e[n]; if (r) { for (var a = [], o = 0; o < r.length; ++o) { var i = r[o]; a.push({ type: i.type, suffixes: i.suffixes }) } t.push({ name: r.name, description: r.description, mimeTypes: a }) } } return t } }, canvas: function () { var e = function () { var e = document.createElement("canvas"); return e.width = 1, e.height = 1, [e, e.getContext("2d")] }(), t = e[0], n = e[1]; return function (e, t) { return !(!t || !e.toDataURL) }(t, n) ? { winding: B(n), geometry: O(t, n), text: F(t, n) } : { winding: !1, geometry: "", text: "" } }, touchSupport: function () { var e, t = navigator, n = 0; void 0 !== t.maxTouchPoints ? n = p(t.maxTouchPoints) : void 0 !== t.msMaxTouchPoints && (n = t.msMaxTouchPoints); try { document.createEvent("TouchEvent"), e = !0 } catch (r) { e = !1 } return { maxTouchPoints: n, touchEvent: e, touchStart: "ontouchstart" in window } }, vendor: function () { return navigator.vendor || "" }, vendorFlavors: function () { for (var e = [], t = 0, n = ["chrome", "safari", "__crWeb", "__gCrWeb", "yandex", "__yb", "__ybro", "__firefox__", "__edgeTrackingPreventionStatistics", "webkit", "oprt", "samsungAr", "ucweb", "UCShellJava", "puffinDevice"]; t < n.length; t++) { var r = n[t], a = window[r]; a && "object" == typeof a && e.push(r) } return e.sort() }, cookiesEnabled: function () { var e = document; try { e.cookie = "cookietest=1; SameSite=Strict;"; var t = -1 !== e.cookie.indexOf("cookietest="); return e.cookie = "cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT", t } catch (n) { return !1 } }, colorGamut: function () { for (var e = 0, t = ["rec2020", "p3", "srgb"]; e < t.length; e++) { var n = t[e]; if (matchMedia("(color-gamut: " + n + ")").matches) return n } }, invertedColors: function () { return !!V("inverted") || !V("none") && void 0 }, forcedColors: function () { return !!$("active") || !$("none") && void 0 }, monochrome: function () { if (matchMedia("(min-monochrome: 0)").matches) { for (var e = 0; e <= 100; ++e)if (matchMedia("(max-monochrome: " + e + ")").matches) return e; throw new Error("Too high value") } }, contrast: function () { return K("no-preference") ? 0 : K("high") || K("more") ? 1 : K("low") || K("less") ? -1 : K("forced") ? 10 : void 0 }, reducedMotion: function () { return !!X("reduce") || !X("no-preference") && void 0 }, hdr: function () { return !!Y("high") || !Y("standard") && void 0 }, math: function () { var e, t = Z.acos || Q, n = Z.acosh || Q, r = Z.asin || Q, a = Z.asinh || Q, o = Z.atanh || Q, i = Z.atan || Q, c = Z.sin || Q, u = Z.sinh || Q, s = Z.cos || Q, l = Z.cosh || Q, d = Z.tan || Q, f = Z.tanh || Q, h = Z.exp || Q, v = Z.expm1 || Q, p = Z.log1p || Q; return { acos: t(.12312423423423424), acosh: n(1e308), acoshPf: (e = 1e154, Z.log(e + Z.sqrt(e * e - 1))), asin: r(.12312423423423424), asinh: a(1), asinhPf: function (e) { return Z.log(e + Z.sqrt(e * e + 1)) }(1), atanh: o(.5), atanhPf: function (e) { return Z.log((1 + e) / (1 - e)) / 2 }(.5), atan: i(.5), sin: c(-1e300), sinh: u(1), sinhPf: function (e) { return Z.exp(e) - 1 / Z.exp(e) / 2 }(1), cos: s(10.000000000123), cosh: l(1), coshPf: function (e) { return (Z.exp(e) + 1 / Z.exp(e)) / 2 }(1), tan: d(-1e300), tanh: f(1), tanhPf: function (e) { return (Z.exp(2 * e) - 1) / (Z.exp(2 * e) + 1) }(1), exp: h(1), expm1: v(1), expm1Pf: function (e) { return Z.exp(e) - 1 }(1), log1p: p(10), log1pPf: function (e) { return Z.log(1 + e) }(10), powPI: function (e) { return Z.pow(Z.PI, e) }(-100) } } }; function ne(e) { var t = function (e) { if (T()) return .4; if (x()) return M() ? .5 : .3; var t = e.platform.value || ""; if (/^Win/.test(t)) return .6; if (/^Mac/.test(t)) return .5; return .7 }(e), n = function (e) { return w(.99 + .01 * e, 1e-4) }(t); return { score: t, comment: "$ if upgrade to Pro: https://fpjs.dev/pro".replace(/\$/g, "" + n) } } function re(e) { return JSON.stringify(e, (function (e, n) { return n instanceof Error ? t({ name: (r = n).name, message: r.message, stack: null === (a = r.stack) || void 0 === a ? void 0 : a.split("\n") }, r) : n; var r, a }), 2) } function ae(e) { return v(function (e) { for (var t = "", n = 0, r = Object.keys(e).sort(); n < r.length; n++) { var a = r[n], o = e[a], i = o.error ? "error" : JSON.stringify(o.value); t += (t ? "|" : "") + a.replace(/([:|\\])/g, "\\$1") + ":" + i } return t }(e)) } function oe(e) { return void 0 === e && (e = 50), function (e, t) { void 0 === t && (t = 1 / 0); var n = window.requestIdleCallback; return n ? new Promise((function (e) { return n.call(window, (function () { return e() }), { timeout: t }) })) : o(Math.min(e, t)) }(e, 2 * e) } function ie(e, t) { var a = Date.now(); return { get: function (o) { return n(this, void 0, void 0, (function () { var n, i, c; return r(this, (function (r) { switch (r.label) { case 0: return n = Date.now(), [4, e()]; case 1: return i = r.sent(), c = function (e) { var t; return { get visitorId() { return void 0 === t && (t = ae(this.components)), t }, set visitorId(e) { t = e }, confidence: ne(e), components: e, version: "3.3.2" } }(i), (t || (null == o ? void 0 : o.debug)) && console.log("Copy the text below to get the debug data:\n\n```\nversion: " + c.version + "\nuserAgent: " + navigator.userAgent + "\ntimeBetweenLoadAndGet: " + (n - a) + "\nvisitorId: " + c.visitorId + "\ncomponents: " + re(i) + "\n```"), [2, c] } })) })) } } } function ce(e) { var t = void 0 === e ? {} : e, a = t.delayFallback, o = t.debug; t.monitoring; return n(this, void 0, void 0, (function () { return r(this, (function (e) { switch (e.label) { case 0: return [4, oe(a)]; case 1: return e.sent(), [2, ie(k(te, { debug: o }, []), o)] } })) })) } var ue = { load: ce, hashComponents: ae, componentsToDebugString: re }, se = v; return e.componentsToDebugString = re, e.default = ue, e.getFullscreenElement = P, e.getScreenFrame = U, e.hashComponents = ae, e.isAndroid = T, e.isChromium = S, e.isDesktopSafari = M, e.isEdgeHTML = A, e.isGecko = _, e.isTrident = C, e.isWebKit = x, e.load = ce, e.loadSources = k, e.murmurX64Hash128 = se, e.prepareForSources = oe, e.sources = te, e }({});
;
$(document).ready(function () {
    $(".confirmPasswordWrap").hide();
    $('#otherReason').hide();

    $("#edit-email").on('click', function (e) {
        maAlertMessage("Note - This is your account's main email used for logging into your account and receiving email alerts. Are you sure you want to change your email?"
            , ["Yes", "No"], function (msg) {
                switch (msg) {
                    case "Yes":
                        $(e.target).addClass("hide");
                        $("#email").removeAttr("disabled");
                        $("#email").focus();
                        var val = $("#email").val();
                        $("#email").val('');
                        $("#email").val(val);

                        $(".confirmPasswordWrap").show();
                        $("#email").addClass("display-block");
                        break;
                }
            });
    });

    $("#set-new-password").on('click', function () {
        var currPassword = $("#currPassword").val();
        if (currPassword === "") {
            alert("Please provide Current password");
            mixpanelMngo.SendErrorReport("Please provide Current password");
            return;
        }

        var newPassword = $("#newPassword").val();
        if (newPassword === "") {
            alert("Please provide New password");
            mixpanelMngo.SendErrorReport("Please provide New password");
            return;
        }
        if (newPassword.length < 7) {
            alert("The new password you entered is not long enough, please enter a new password with at least 7 characters");
            mixpanelMngo.SendErrorReport("The new password you entered is not long enough, please enter a new password with at least 7 characters");
            return;
        }
        if (!(newPassword.match(/[a-zA-Z]/) && newPassword.match(/[0-9]/))) {
            alert("Password must contain at least one numeric and one alphabetic character");
            mixpanelMngo.SendErrorReport("Password must contain at least one numeric and one alphabetic character");
            return;
        }
        ChangeUserPassword($("#email").val(), currPassword, newPassword);
    });

    //saveAcount();
    $('#saveAcountDetailsBtn').click(saveAcount);
    $("#btnClaimAppraisalReward").click(ClaimAppraisalReward);
    $("#btnActivateAppraisalReward").click(ActivateAppraisalReward);
    //function SaveAcountDetailsBtn1()
    //{
    //    var personTypes = [];
    //    var temp = $("#personType input:checked");
    //    for (var i = 0; i < temp.length; i++) {
    //        personTypes.push($(temp[i]).data("val"));
    //    }
    //    var currId = $(".radios input:checked").data("val");
    //    SaveAccountDetails($("#lastName").val(), $("#firstName").val(), $("#email").val(), personTypes, currId);
    //}

    $("#saveEmailSettingsBtn").on('click', function () {
        if (!$(this).attr('disabled')) {
            var thatEle = this;
            var alertTypes = [];
            var temp = $("#emailAlertsList input:checked");
            for (var i = 0; i < temp.length; i++) {
                alertTypes.push($(temp[i]).data("val"));
            }
            var newsletterSubscription = $("#onqqNewsletterSubscription").is(":checked");
            var promotionalSubscription = $("#onqqPromotionalSubscription").is(":checked");
            var artworkOffersSubscription = $("#onqqArtworkOffersSubscription").is(":checked");
            var receiveAlertsSubscription = $("#onqqReceiveAlertsSubscription").is(":checked");
            var salesSmsNotificationSubscription = $("#onqqSalesSmsNotificationSubscription").is(":checked");

            const urlParams = new URLSearchParams(window.location.search);
            var userNameParam;
            if (urlParams.has("Name")) {
                userNameParam = urlParams.get('Name');
            }
            
            var current_state = {
                "alerts": receiveAlertsSubscription,
                "Newsletter": newsletterSubscription,
                "promotional": promotionalSubscription,
                "Artwork_Offers": artworkOffersSubscription,
                "Sales_Sms_Notification": salesSmsNotificationSubscription,
            }

            send_to_google_analytics_when_unsubscribe(current_state);
            mixpanel.track('User Customize Email Settings', current_state);
            SaveEmailSettings(newsletterSubscription, promotionalSubscription, artworkOffersSubscription, receiveAlertsSubscription, alertTypes, null, thatEle, salesSmsNotificationSubscription, userNameParam);
        }
    });

    $(".unsubscribeEmailSettingsBtn").on('click', function () {
        var alertTypes = [];
        //var temp = $("#emailAlertsList input:checked");
        var temp = $("#emailAlertsList input:checked");
        for (var i = 0; i < temp.length; i++) {
            alertTypes.push($(temp[i]).data("val"));
        }
        var email = $('#emailTxt').html();
        var newsletterSubscription = $("#onqqNewsletterSubscription").is(":checked");
        var promotionalSubscription = $("#onqqPromotionalSubscription").is(":checked");
        var artworkOffersSubscription = $("#onqqArtworkOffersSubscription").is(":checked");
        var receiveAlertsSubscription = $("#onqqReceiveAlertsSubscription").is(":checked");
        var salesSmsNotificationSubscription = $("#onqqSalesSmsNotificationSubscription").is(":checked");

        var current_state = {
            "alerts": receiveAlertsSubscription,
            "Newsletter": newsletterSubscription,
            "promotional": promotionalSubscription,
            "Artwork_Offers": artworkOffersSubscription,
            "Sales_Sms_Notification": salesSmsNotificationSubscription,
        }

        send_to_google_analytics_when_unsubscribe(current_state);

        UnsubscribeEmailSettings(email, newsletterSubscription, promotionalSubscription, artworkOffersSubscription, receiveAlertsSubscription, alertTypes, salesSmsNotificationSubscription);
    });

    if ($(".top-menu.format-3 ul li.selected").length > 0) {
        $(".top-menu.format-3 ul").animate({
            scrollLeft: $(".top-menu.format-3 ul li.selected")
                .offset().left - (($(".top-menu.format-3 ul").width() / 2) - $(".top-menu.format-3 ul li.selected").width() / 2)
        });
    }

    UserPreferenceUrlRewrite();
    checkHashForTabsInit();
    toggleTabs();
    initHowWouldYouDefineSelected();
    intChangeInputFields();
    InitbtnChangeBillingPlan();
    initbtnContinue();
    // initChangeToAnuualMembership();
    InitChangePlanPage();

    InitfakeRadioChange();
    initCancelHideShow();
    InitSelected();
});

window.onload = function () {
    if (IsPage('userpreferences') && location.hash) {
        if (IsMobileView()) {
            window.scrollTo({
                top: 0,
                behavior: "smooth"
            });
        } else {
            var titleHeight = $(".section-title").get(0).getBoundingClientRect().height;
            var offsetPosition = titleHeight + 45;
            window.scrollTo({
                top: offsetPosition,
                behavior: "smooth"
            });
        }
    }
};

function UserPreferenceUrlRewrite() {
    if (IsPage('account_settings')) {
        switch (location.hash) {
            case '#tab-1':
                let elTab1 = $('.account-page-tabs ul li a[href="#account-details"]');
                if (elTab1.length > 0) {
                    window.history.pushState({ href: `${location.pathname}#account-details` }, '', `${location.pathname}#account-details`);
                    elTab1.click();
                }
                break;
            case '#tab-2':
                let elTab2 = $('.account-page-tabs ul li a[href="#your-plan"]');
                if (elTab2.length > 0) {
                    window.history.pushState({ href: `${location.pathname}#your-plan` }, '', `${location.pathname}#your-plan`);
                    elTab2.click();
                }
                break;
            case '#tab-3':
                let elTab3 = $('.account-page-tabs ul li a[href="#email-settings"]');
                if (elTab3.length > 0) {
                    window.history.pushState({ href: `${location.pathname}#email-settings` }, '', `${location.pathname}#email-settings`);
                    elTab3.click();
                }
                break;
            case '#tab-4':
                let elTab4 = $('.account-page-tabs ul li a[href="#my-appraisals"]');
                if (elTab4.length > 0) {
                    window.history.pushState({ href: `${location.pathname}#my-appraisals` }, '', `${location.pathname}#my-appraisals`);
                    elTab4.click();
                }
                break;
            case '#reward-tab':
                let elTabReward = $('.account-page-tabs ul li a[href="#rewards"]');
                if (elTabReward.length > 0) {
                    window.history.pushState({ href: `${location.pathname}#rewards` }, '', `${location.pathname}#rewards`);
                    elTabReward.click();
                }
                break;
            case '':
                if ($(".ui-tabs-active a").attr('href') === "#rewards") {
                    window.history.pushState({ href: `${location.pathname}#rewards` }, '', `${location.pathname}#rewards`);
                }
                break;
        }
    }
}

function send_to_google_analytics_when_unsubscribe(current_state) {
    if (typeof initialState == "undefined") {
        return;
    }

    var unsbscribe = [];

    for (var key in initialState) {
        if (initialState[key] == true) {
            if (current_state[key] == false) {
                unsbscribe.push(key);
            }
        }
    }

    if (unsbscribe.length > 0) {
        GTM_Send('event', 'unsbscribe', 'Email Preferences', unsbscribe.toString());
    }
}

function initCancelHideShow() {
    $('#btnCancelMembership').on("click", function () {
        mixpanel.track('Click to Cancel Membership');
        $('*[data-method="CancelMembership"]').addClass("active");
        $('*[data-method="CancelMembership"]').show();
        $('#reason').show();
        $('#btnChangePlan').css('display', 'block');

        $('#showCancelLink').hide();
    });    
    $('#cancellationPlanGeneral').on("click", function () {
        mixpanel.track('Click to Cancel Membership');
    });
    $('#collectionCancellationPlanGeneral').on("click", function () {
        mixpanel.track('Click to Cancel MyCollection Membership');
 
    });
}
function initbtnContinue() {
    $('#btnContinue-div').hide();
    $('#btnContinue').on("click", function () {
        window.location.href = "/my-preferences";
    });
}
function InitChangePlanPage() {
    $(".billing-block").removeClass("active");
    $('.changePlan-cancelmessage').hide();
    $('.changePlan-message').hide();
    if ($("#method").val() === "ChangeToMonthly") {
        $('*[data-method="ChangeToAnnual"]').addClass("active");
        $('#btnChangePlan').attr("disabled", true);
    }
    else if ($("#method").val() === "ChangeToAnnual") {
        $('*[data-method="ChangeToMonthly"]').addClass("active");
        $('#btnChangePlan').attr("disabled", true);
    }
}

function enableSubmit() {
    if ($(".billing-block.active").data("method") !== $("#method").val()) {
        $('#btnChangePlan').attr("disabled", true);
        $('.changePlan-message').hide();
        $('.changePlan-cancelmessage').hide();
    }
    else {
        $('#btnChangePlan').attr("disabled", false);
        $('.changePlan-cancelmessage').hide();
        $('.changePlan-message').show();
    }

    if ($(".billing-block.active").data("method") === "CancelMembership") {
        $('#btnChangePlan').attr("disabled", false);
        $('.changePlan-message').hide();
        $('.changePlan-cancelmessage').show();
    }
}

function InitfakeRadioChange() {
    var billingBlocks = $('.billing-block');

    if (billingBlocks.length > 0) {
        billingBlocks.on("click", enableSubmit);
    }
}
function checkHashForTabsInit() {
    var hash = window.location.hash.substr(1);
    if (hash) {
        switch (hash) {
            case "details":
                {
                    $("#ui-id-1").trigger('click');
                    break;
                }
            case "membership":
                {
                    $("#ui-id-2").trigger('click');
                    break;
                }
            case "email":
                {
                    $("#ui-id-3").trigger('click');
                    break;
                }
            case "appraisal":
                {
                    $("#ui-id-4").trigger('click');
                    break;
                }
        }
    }
}

var saveAcount = function () {
    if ($('#personType label input:checkbox:checked').length == 0) {
        if ($.snackbar)
            $.snackbar({
                content: `<div class="snackbar-content-container">
                            <div class="icon-wrapper">
                                <img src="/img/Info_red.svg">
                            </div>
                            <div class="text-wrapper">
                                <p>
                                    Changes couldn’t be saved. <br>
                                    Please complete “How would you define yourself?”.
                                    <a href="#definePersona">Go to section></a>
                                </p>
                            </div>
                        </div>`,
                style: "snackbar danger-snackbar snackbar-top",
                timeout: 4000,
                htmlAllowed: true
            });
        return;
    }
    var thatEle = this;
    $("#confirmPassword").siblings().remove();
    if ($("#acountDetailsForm").valid()
        && (!$("#confirmPassword").is(":visible") || ($("#confirmPassword").is(":visible") && $("#confirmPassword").valid()))
        && (MA.Modules.objPhoneField.GetNumber().trim() == '' || MA.Modules.objPhoneField.CheckValid().isValid)) {
        var personTypes = [];
        var phone = MA.Modules.objPhoneField.GetNumber();
        var temp = $("#personType input:checked");
        for (var i = 0; i < temp.length; i++) {
            personTypes.push($(temp[i]).data("val"));
        }
        var currId = $("input:radio[name ='ra']:checked").data('val');;
        var measurementTypeId = $("input:radio[name ='measurementType']:checked").data('val');
        var dateFormatId = $("input:radio[name ='userPreffereddateFormat']:checked").data('val');
        var personTypeTxt = $('#otherText').val();
        SaveAccountDetails($("#lastName").val(),
            $("#firstName").val(),
            $("#email").val(),
            personTypes,
            currId,
            $("#confirmPassword").val(),
            phone,
            personTypeTxt,
            ($("#easyNav:checked").length ? true : false),
            thatEle,
            measurementTypeId,
            dateFormatId);
    } else {
        MA.Modules.objPhoneField.ValidateInput();
        $('#confirmPassword-error-label').removeClass('hide');
        $("#acountDetailsForm").get(0).scrollIntoView();
    }
    // });
};

function SaveEmailSettings(newsletterSubscription, promotionalSubscription, artworkOffersSubscription, receiveAlertsSubscription, emailAlertsTypes, callback, loaderEle, salesSmsNotificationSubscription, userEmail) {
    if (!callback && loaderEle) {
        if ($(loaderEle).attr("disabled")) {
            return;
        }
        startLodder(loaderEle, true, true);
        $(loaderEle).attr("disabled", true);
    }

    $.post("/Ajax/account_settings/SaveEmailSettings", {
        newsletterSubscription: newsletterSubscription,
        promotionalSubscription: promotionalSubscription,
        artworkOffersSubscription: artworkOffersSubscription,
        receiveAlertsSubscription: receiveAlertsSubscription,
        emailAlertsTypes: emailAlertsTypes,
        salesSmsNotificationSubscription: salesSmsNotificationSubscription,
        userEmail: userEmail
    }, callback || function (rText, status, request) {
        if (loaderEle) {
            stopLodder(loaderEle);
            $(loaderEle).attr("disabled", false);
        }
        if (rText === "failed") {
            maAlertMessage('Save failed.', ["Close"], function () { });
        }
        else {
            var unsbscribe = [];
            var current_state = {
                "alerts": receiveAlertsSubscription,
                "Newsletter": newsletterSubscription,
                "promotional": promotionalSubscription,
                "Artwork_Offers": artworkOffersSubscription,
                "Sales_Sms_Notification": salesSmsNotificationSubscription,
            }

            for (var key in initialState) {
                if (initialState[key] == true) {
                    if (current_state[key] == false) {
                        unsbscribe.push(key);
                    }
                }
            }

            if (unsbscribe.length > 0) {
                maInfoAlertPopup("Your email preferences have been saved successfully.<br> <br>Please note that you may still receive emails or SMS from us within the next 48 hours as the changes take full effect.", ["Close"], function () { }, "Your Email Preferences");
            } else {
                maInfoAlertPopup("Your email preferences have been updated successfully.", ["Close"], function () { },"Your Email Preferences");
            }
            initialState = current_state;
        }
    }
    ).fail(function () {
        alert("error");
        if (loaderEle) {
            stopLodder(loaderEle);
            $(loaderEle).attr("disabled", false);
        }
    });
}

function UnsubscribeEmailSettings(userLogin, newsletterSubscription, promotionalSubscription, artworkOffersSubscription, receiveAlertsSubscription, emailAlertsTypes, salesSmsNotificationSubscription) {
    $.post("/Ajax/Unsubscribe/UnsubscribeUser", { userLogin: userLogin, newsletterSubscription: newsletterSubscription, promotionalSubscription: promotionalSubscription, artworkOffersSubscription: artworkOffersSubscription, receiveAlertsSubscription: receiveAlertsSubscription, emailAlertsTypes: emailAlertsTypes, salesSmsNotificationSubscription: salesSmsNotificationSubscription }, function (rText, status, request) {
        if (rText === "failed") {
            alert('Save failed.');
        }
        else {
            //$('#emailAlerts1').hide();
            //$('#successUnsubscribe').show();
            //alert('Saved successfully.');
        }
    }
    ).fail(function () {
        maAlertMessage('error', ["OK"], function () { });
    });
}

function SaveAccountDetails(lName, fName, e_mail, personTypes, currId, confirmPassword, phone, personTypeTxt, easyNavigation, loaderEle, measurementTypeId, dateFormatId) {
    if (loaderEle) {
        if ($(loaderEle).attr("disabled")) {
            return;
        }
        startLodder(loaderEle, true, true);
        $(loaderEle).attr("disabled", true);
    }
    $.post("/Ajax/account_settings/SaveAccountDetails", {
        lastName: lName, firstName: fName,
        email: e_mail, selectedPersonTypes: personTypes, currencyId: currId,
        confirmPassword: confirmPassword, personTypeText: personTypeTxt,
        easyNavigationEnabled: easyNavigation,
        phoneNumber: phone,
        measurementTypeId: measurementTypeId,
        idDateFormat: dateFormatId
    }, function (rText, status, request) {
        var idb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
        if (!easyNavigation && idb) {
            //idb.deleteDatabase("personal-history");
            //var req = idb.open('personal-history');
            //req.onsuccess = function (e) {
            //    if (e.target.result.objectStoreNames.contains("history")) {
            //        var tran = e.target.result.transaction(['history'], 'readwrite');
            //        var objStore = tran.objectStore('history')
            //        if (objStore)
            //            objStore.clear();
            //    }
            //}
        }
        if (rText === "UserLocked") {
            document.location = '/LockedUser';
        }

        if (rText === "Wrong password") {
            $("#confirmPassword").after("<span id='confirmPassword-error' class='error' for='confirmPassword'>Wrong password.</span>");
            $("#confirmPassword").addClass("error");
            $("#confirmPassword").attr('aria-invalid', true);
            $(".confirmPasswordWrap").get(0).scrollIntoView();
        }

        dataStorage.setRndmNumber();

        if (rText === "SameUserExist") {
            maAlertMessage('This email address is already associated with an account. Please use a different email address or log in with this email if it belongs to you', ["OK"], function () { });
        }
        else {
            maAlertMessage('Your changes have been saved successfully.', ["OK"], function () { });
        }

        if (loaderEle) {
            stopLodder(loaderEle);
            $(loaderEle).attr("disabled", false);
        }
    }
    ).fail(function (e) {
        if (loaderEle) {
            stopLodder(loaderEle);
            $(loaderEle).attr("disabled", false);
        }
        maAlertMessage( 'error' , ["OK"], function () { });
    });
}

function ChangeUserPassword(e_mail, oldPswd, newPswd) {
    $.post("/Ajax/account_settings/ChangeUserPassword", { email: e_mail, oldPassword: oldPswd, newPassword: newPswd }, function (rText, status, request) {
        if (rText === "InvalidPassword") {
            maAlertMessage('Old Password is invalid', ["OK"], function () { });
            mixpanel.track("Set New Password Error", { "Error reason": "Old Password is invalid" });
        }
        else if (rText === "DuplicateUserName") {
            mixpanel.track("Set New Password Error", { "Error reason": "Email already in use" });
            maAlertMessage('Email already in use', ["OK"], function () { });
        }
        else if (rText === "UserLocked") {
            mixpanel.track("Set New Password Error", { "Error reason": "UserLocked" });
            document.location = '/LockedUser';
        }
        else {
            mixpanel.track('Set New Password');
            maAlertMessage('Your changes have been saved successfully.', ["OK"], function () { });
        }
    }
    ).fail(function () {
        mixpanel.track("Set New Password Error", { "Error reason": "General fail" });
        maAlertMessage('error', ["OK"], function () { });
    });
}

function SetEasyNavigation(isDisabled) {
    $.post("/Ajax/account_settings/ToggleEasyNavigation", { disabled: (isDisabled ? true : false) }, function (res, status, request) {
    }).fail(function () {
        mixpanel.track("Set Easy Navigation Error", { "Error reason": "General fail" });
        maAlertMessage('error', ["OK"], function () { });
    });
}

function ClaimAppraisalReward() {
    $.post("/Ajax/account_settings/ClaimAppraisalReward", function (response) {
        mixpanel.track("Click to Claim Reward - Free Appraisal");
        if (response.success) {
            var alreadyClaimed = $(".reward-claimed-text").hasClass("claimed");
            if (!alreadyClaimed) {
                $(".reward-claimed-text").addClass("claimed").html(response.message);
                $(".reward-claim").hide();
                $("#btnActivateAppraisalRewardDisabled").removeClass("hidden");
            }
        } else {
            maAlertMessage('It seems your not elligble to receive this reward.', ["OK"], function () { });
        }
    }).fail(function () {
        mixpanel.track("Claim Appraisal Reward Error", { "Error reason": "General fail" });
        maAlertMessage('error', ["OK"], function () { });
    });
}

function ActivateAppraisalReward() {
    mixpanel.track("Click to Activate Reward - Free Appraisal");
    $.post("/Ajax/account_settings/ActivateAppraisalReward", function (response) {
        maInfoAlertPopup(response.message || 'It seems your not elligble to activate this reward.', ["CLOSE"], function () {
            response.success && AfterActivationHandler();
        },'Your free artwork appraisal credit');
        $(".my-appr").on('click', AfterActivationHandler);
    }).fail(function () {
        mixpanel.track("Activate Appraisal Reward Error", { "Error reason": "General fail" });
        maAlertMessage('error', ["OK"], function () { });
    });

    function AfterActivationHandler() {
        window.location.href = window.location.href.split('#')[0] + '#my-appraisals';
        window.location.reload();
    }
}

function initHowWouldYouDefineSelected() {
    $('#personType label input').on('click',
        function () {
            setTimeout(function () {
                if ($("#acountDetailsForm").length > 0)
                    $("#acountDetailsForm").valid();
            }, 100);
        });
}

function removeTextError(inputId, errorId) {
    $('#' + inputId).removeClass("error");
    $('#' + errorId).remove();
}

function addTextError(inputId, errorId, errorText) {
    if ($("#" + errorId).length === 0) {
        $("#" + inputId).after("<span id='" + errorId + "' class='error' for='" + inputId + "'>" + errorText + "</span>");
    }
    $("#" + inputId).addClass("error");
}

function addOtherTextError() {
    addTextError("otherText", "otherText-error", "Please fill your role");
}

function removeOtherTextError() {
    removeTextError("otherText", "otherText-error");
}

function intChangeInputFields() {
    $('.ignore').on('input',
        function (e) {
            var self = this;
            var inputLabel = $(self).attr('id') + '-error-label';
            if ($(self).val()) {
                $('#' + inputLabel).addClass('hide');
                $(self).removeClass('error');
            }
            else {
                $('#' + inputLabel).removeClass('hide');
                $(self).addClass('error');
                $('#saveAcountDetailsBtn').attr("disabled", true);
                $('#saveAcountDetailsBtn').unbind('click');
            }
            setEnableOrDisableSaveChangesBtn();
        });
    $('#email').on('input',
        function (e) {
            var $email = $(this);
            var errorLabel = $('#email-error-label');
            var validEmail = emailRegex.test($email.val())

            if (!$email.val() || !validEmail) {
                if (!$email.val()) {
                    errorLabel.html('Required');
                }
                else {
                    errorLabel.html('Enter valid address');
                }
                errorLabel.removeClass('hide');
                $(email).addClass('error');
                $('#saveAcountDetailsBtn').attr("disabled", true);
                $('#saveAcountDetailsBtn').unbind('click');
            }
            else {
                errorLabel.addClass('hide');
                $email.removeClass('error');
            }
            setEnableOrDisableSaveChangesBtn();
        });
}
function setEnableOrDisableSaveChangesBtn() {
    if ($('.account-details #firstName').val() && $('.account-details #lastName').val() && $('.account-details #email').val()) {
        $('#saveAcountDetailsBtn').attr("disabled", false);
        $('#saveAcountDetailsBtn').off().click(saveAcount);
    }
    else {
        $('#saveAcountDetailsBtn').attr("disabled", true);
        $('#saveAcountDetailsBtn').unbind('click');
    }
}

//function initChangeToAnuualMembership() {
//    $("#btnChangeToAnnual").on("click", function () {
//        var url = "/Ajax/Payments/CancelUserSubscription";
//        $.post(url)
//       .done(function (data) {
//           if (data === "OK") {
//               $(".form-messages").html('<p class="form-error-message">Cancel success</div>');
//               $(".form-messages").focus();
//               setTimeout(function () {
//                   location.href = "/userpreferences#membership";
//               }, 3000);
//           } else {
//               $(".form-messages").html('<p class="form-error-message">We are unable to cancel membership at this time.<br />Please contact <a href="mailto:support@mutualart.com?Subject=Update%20CC%20details" target="_top">support@mutualart.com</a></div>');
//               $(".form-messages").focus();
//           }
//       })
//     .fail(function () {
//     });
//    });
//}

//EFi

function InitbtnChangeBillingPlan() {
    $("#btnChangeBillingPlan").on("click", function () {
        $(".form-messages").html(loading_image_html);

        var url = "/Ajax/Payments/IsCanChangePlan";
        $.post(url)
            .done(function (data) {
                if (data.IsSuccess) {
                    window.location.href = "/ChangeBillingPlan";
                } else {
                    $(".form-messages").html('<div class="container-fluid"><div class="input-group-block"><h5 class="input-group-title">' + data.Message + '</h5></div></div>');
                    mixpanelMngo.SendErrorReport(data.Message);
                    $(".form-messages").focus();
                    $('#btnContinue-div').show()
                    $('#changePlanDiv').hide();
                }
            })
            .fail(function () {
                $(".form-messages").html('<p class="form-error-message">We are unable to change membership at this time.<br />Please contact <a href="mailto:support@mutualart.com?Subject=Update%20CC%20details" target="_top">support@mutualart.com</a></div>');
                mixpanelMngo.SendErrorReport("We are unable to cancel membership at this time.");
                $(".form-messages").focus();
            });
    });
}

$('#cancellationReason').change(function () {
    if ($(this).val() === 'Other') {
        $('#otherReason').show();
        $('#otherReason').prop('required', true);
    }
    else {
        $('#otherReason').hide();
        $('#otherReason').prop('required', false);
    }
});

//function initChangeToAnuualMembership() {
//    //var $form = $("#ChangePlanForm");
//  //  var object = getFormData($form);
//    $("#btnChangeToAnnual").on("click", function () {
//    //    console.log(object);
//        var url = "/Ajax/Payments/ChangeToAnnual";
//       // $.post(url, { model: object })
//        $.post(url)
//            .done(function (data) {
//                if (data === "OK") {
//                    $(".form-messages").html('<p class="form-error-message">Change to Annual successfuly</div>');
//                    $(".form-messages").focus();
//                    //setTimeout(function () {
//                    //    location.href = "/userpreferences#membership";
//                    //}, 3000);
//                } else {
//                    $(".form-messages").html('<p class="form-error-message">We are unable to change membership at this time.<br />Please contact <a href="mailto:support@mutualart.com?Subject=Update%20CC%20details" target="_top">support@mutualart.com</a></div>');
//                    $(".form-messages").focus();
//                }
//            })
//            .fail(function () {
//            });
//    });
//}

function toggleTabs() {
    $('.account-page-tabs .top-menu.format-3 ul li').on('click', function () {
        $('ul li.ui-state-active').addClass('selected');
        $('ul li:not(.ui-state-active)').removeClass('selected');

    })
}

function InitSelected() {
    var all = $('nav.top-menu.format-3 > ul > li');
    var selected = all.filter('.selected').find('a');
    var active = all.filter('.ui-state-active').find('a');

    if (selected.length == 0 && active.length > 0) {
        $('nav.top-menu.format-3 > ul > li.ui-state-active').addClass('selected');
    }
    else if (selected.length == 0 && active.length == 0) {
        $('nav.top-menu.format-3 > ul > li:first').addClass('selected');
    }
};
var STORAGE_KEYS = {
    visitedPages: "visitedPageNo",
    sessionCount: "userSessionCount",
    sessionDate: "userSessionDate",
    isNewRegistration: "isNewRegistration"
};

function getCurrentDate() {
    return new Date().toLocaleDateString('en-CA');
}

function saveCurrentSessionDate() {
    localStorage.setItem(STORAGE_KEYS.sessionDate, getCurrentDate());
}

function initializeUserSession(isNewRegistration = false) {

    if (isNewRegistration) {
        localStorage.setItem(STORAGE_KEYS.isNewRegistration, "true");
    }

    if (localStorage.getItem(STORAGE_KEYS.visitedPages) === null) {
        localStorage.setItem(STORAGE_KEYS.visitedPages, 0);
    }

    if (localStorage.getItem(STORAGE_KEYS.sessionCount) === null) {
        localStorage.setItem(STORAGE_KEYS.sessionCount, 1);
    }

    if (localStorage.getItem(STORAGE_KEYS.sessionDate) === null) {
        saveCurrentSessionDate();
    }
}
function updateSessionMetrics() {
    const lastSessionDate = localStorage.getItem(STORAGE_KEYS.sessionDate);
    const today = getCurrentDate();

    if (lastSessionDate !== today) {
        if (localStorage.getItem(STORAGE_KEYS.visitedPages) < 5 && localStorage.getItem(STORAGE_KEYS.isNewRegistration) === "true") {
            localStorage.removeItem(STORAGE_KEYS.isNewRegistration);
        }
        let sessionCount = parseInt(localStorage.getItem(STORAGE_KEYS.sessionCount) || 1, 10);
        localStorage.setItem(STORAGE_KEYS.sessionCount, sessionCount + 1);
        if (!localStorage.getItem(STORAGE_KEYS.isNewRegistration) === "true") {
            localStorage.setItem(STORAGE_KEYS.visitedPages, 0);
        }
        localStorage.setItem(STORAGE_KEYS.visitedPages, 0);
       
        saveCurrentSessionDate();
    } else {
        let visitedPages = parseInt(localStorage.getItem(STORAGE_KEYS.visitedPages) || 0, 10);
        const excludedPages = [
            "account_settings",
            "auction_search",
            "upgrade",
            "change_plan",
            "art_appraisalpayment",
            "sell_artwork",
            "art_appraisal",
            "artist_sell-artwork",
            "plans",
            "my_collection/change-plan",
            "my_collection/plans",
            "art_appraisalform2",
            "art_appraisalform"
        ];

        var isExcludedPage = excludedPages.includes(page_name.toLowerCase());
        var isGalleryPage = window.location.href.includes("/galleries/");
        var isModalOpen = $('body').hasClass("modal-open") || $('.modal.fade.in').length > 0;
        if (!isExcludedPage && !isModalOpen && !isGalleryPage) {
            localStorage.setItem(STORAGE_KEYS.visitedPages, visitedPages + 1);
        }
    }
}
function shouldShowPopup() {
    const sessionCount = Number(localStorage.getItem(STORAGE_KEYS.sessionCount));
    const visitedPages = Number(localStorage.getItem(STORAGE_KEYS.visitedPages));
    const isNewRegistration = localStorage.getItem(STORAGE_KEYS.isNewRegistration) === "true";

    if (isNewRegistration && visitedPages >= 5) { // New users
        $("body").append('<p class="popup" hidden id="userCategorization"></p>');
        $("#userCategorization").click();
        mixpanel.track("View Popup", {
            "Page Name": page_name,
            "Source Page": formatPageName(page_name),
            "Type": "User Categorization",
            "Identifier": "User Categorization",
            "Text": "Who are you in the art world?"
        });
        localStorage.removeItem(STORAGE_KEYS.isNewRegistration);
    }
    else if (!isNewRegistration) {
        if (visitedPages === getVisitedPageCountforRegistered()) {
            if (sessionCount === 1 || sessionCount === 3) {

                $("body").append('<p class="popup" hidden id="userCategorization"></p>');
                $("#userCategorization").click();
                mixpanel.track("View Popup", {
                    "Page Name": page_name,
                    "Source Page": formatPageName(page_name),
                    "Type": "User Categorization",
                    "Identifier": "User Categorization",
                    "Text": "Who are you in the art world?"
                }); 
            }
            else if ([4, 5].includes(sessionCount)) {
                if (!($('body').hasClass('modal-open'))) {
                    $.snackbar({
                        content: `
                        <div class="user-pref-snackbar-header">
                        <button type="button" class="user-pref-close categorization"></button>
                        <p class="snackbar-text">
                            Complete your profile: Tell us your role <br>
                            in the art world for a personalized experience.
                            </p>
                        </div>
                        <div class="user-pref-snackbar-actions">                          
                            <button class="btn-primary update-preference-btn skip-btn">SKIP FOR NOW</button>
                            <button class="btn-primary update-preference-btn update-btn" onclick="loadUserCategorizationPopup()">UPDATE</button>
                        </div>
                        `,
                        style: "snackbar success-snackbar snackbar-top user-category-snackbar",
                        timeout: 0,
                        htmlAllowed: true
                    });

                    mixpanel.track("View Notification", {
                        "Page Name": page_name,
                        "Source Page": formatPageName(page_name),
                        "Type": "User Categorization",
                        "Identifier": "User Categorization"
                    }); 
                }
                return false;
            }
        }
    }
    return false;
}

function loadUserCategorizationPopup() {
    $.ajax({
        method: 'POST',
        url: '/Ajax/AjaxLoader/Popup',
        data: { popupName: "userCategorization", entity_id: entity_id, page_name: formatPageName(page_name) },
        success: function (response) {
            $("body").append(response);
            $("#message.modal,*[data-message]").modal();
            $("#userCategorization_dialog").modal();

            mixpanel.track("View Popup", {
                "Page Name": page_name,
                "Source Page": formatPageName(page_name),
                "Type": "User Categorization",
                "Text":"Who are you in the art world?"
            });
        }
    });
}

function getVisitedPageCountforRegistered() {
    return 3;
}

$(document).ready(function () {
    if (isLoggedIn()) {
        initializeUserSession();
        updateSessionMetrics();
        if (userProfileCompleted === 'false') {
            shouldShowPopup();
        }
    }
});;
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function TopSearchModule(element, execSearch) {
  var self = this;
  self._topSearchDialog = element; //$("#top_search_dialog")

  self._isUserAB = isAbUser();
  self._selectedTab = "all";
  self._navBar = self._topSearchDialog.find('.top-search-nav ul');
  self._tabsContent = self._topSearchDialog.find(".tabs-content");
  self._badgeFilters;
  self._current_query;
  self.resultEntityTemplates = {
    'artist': "<div itemscope=\"\" class=\"item\">\n                <div class=\"related-item-container\">\n                    <div class=\"img-container\">\n                        <a href=${url} class=\"thumbnail artist-thumbnail m-event\" data-cta=\"${name}\">\n                            <img loading=\"lazy\" src=${AvatarImage} alt=${name} title=${name}>\n                        </a>\n                    </div>\n                    <div class=\"desc\">\n                        <p class=\"name\" itemprop=\"name\">\n                            <a href=\"${url}\" class=\"link-secondary artist-thumbnail m-event\" data-cta=\"${name}\" itemprop=\"url\">\n                                <span>${displayName}<br>\n                            </a>\n                            <span class=\"color-neutral-600\"> ${personalDetails}</span><br>\n                        </p>\n                    </div>\n                </div>\n            </div>",
    'artwork': "<div class=\"item\" data-type=${lotType}>\n                <a class=\"img-box m-event\" href=${url} data-cta=\"${name}\">\n                    <img loading=\"lazy\" src=${image} alt=${name} title=${name}>\n                </a>\n                <div class=\"artwork-detail\">\n                    <h4 class=\"artwork-title\">\n                        <a href=${url} class=\"m-event\" data-cta=\"${name}\">\n                            ${displayName}${dateText}\n                        </a>\n                    </h4>\n                    <div class=\"artist-title\">\n                        <span> ${artistName} </span>\n                    </div>\n                    <div class=\"auctionhouse-title\">\n                        ${locationname}\n                    </div>\n                </div>\n            </div>",
    'event': "<div class=\"list row item\" data-type=${type}>\n                <div class=\"event-list\">\n                    <a href=${url} class=\"thumbnail m-event\" data-cta=\"${name}\"> <img loading=\"lazy\" src=${image} alt=${name} title=${name}> </a>\n                </div>\n                <div class=\"event-description\">\n                    <div class=\"desc\">\n                        <div class=\"list-nearby\">\n                            <a href=${url} class=\"m-event\" data-cta=\"${name}\">\n                                ${displayName}\n                            </a>\n                        </div>\n                        <div class=\"venue-location\">\n                            <span class=\"describe venue link\">\n                                ${mainOrg}\n                            </span>\n                            <div class=\"location\">\n                                <span class=\"icon icon-current_exhibitions_map_marker\"></span>\n                                <span class=\"link-secondary\">${location}</span>\n                            </div>\n                        </div>\n                        <div>\n                            <span class=\"date\">${date}</span>\n                            <div class=\"btn-group save-to-calendar\" title=\"Save to Calendar\" data-placement=\"top\" data-toggle=\"tooltip\">\n                                <i class='btn calendar m-icon-calendar_vector' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'></i>\n                                <ul class=\"dropdown-menu\">\n                                    <li><a rel=\"nofollow\" href=\"${iCalUrl}\" target=\"_blank\">Outlook</a></li>\n                                    <li><a rel=\"nofollow\" href=\"${googleUrl}\" target=\"_blank\">Google Calendar</a></li>\n                                    <li><a rel=\"nofollow\" href=\"${iCalUrl}\" target=\"_blank\">iCalendar</a></li>\n                                </ul>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>",
    'venue': "<div class=\"item col-xs-12 col-sm-4\" data-type=${type}>\n                <h5><a href=${url} class=\"m-event\" data-cta=\"${name}\">${displayName}</a></h5>\n                <div class=\"location\"><span class=\"icon icon-current_exhibitions_map_marker \"></span> ${label} </div>\n            </div>",
    'article': "<div class=\"row list\">\n                <div class=\"article\">\n                    <a target=\"_blank\" href=${url} class=\"thumbnail m-event\" data-cta=\"${name}\">\n                        <img loading=\"lazy\" src=${image} alt=${name} title=${name}>\n                    </a>\n                    <div class=\"texter\">\n                        <div class=\"desc\">\n                            <div class=\"rel-articles\">\n                                <a class=\"external-link m-event\" href=${url} target=\"'_blank' data-cta=\"${name}\">\n                                    ${displayName}\n                                    &nbsp;<i class=\"m-icon-external_link font-size-16\"></i>\n                                </a>\n                            </div>\n                            <span class=\"date\">${publicationDate}</span>\n                        </div>\n                        <p class=\"hidden-xs\"> ${shortDescription}</p>\n                    </div>\n                </div>\n            </div>",
    'noresult': "<div class=\"no-result-found\">\n                    <div>\n                        <i class=\"m-icon-search-img\"></i>\n                        <p>\n                            <span>No matches were found for your search term.</span>\n                            <span><br /><a href=\"${url}\" class=\"click-here\">Click here</a> for search suggestions.</span>\n                        </p>\n                    </div>\n                </div>"
  };

  var init = function init() {
    //popup close button click event
    self._topSearchDialog.on("click", '#topsearch_close_btn', function () {
      self._topSearchDialog.removeClass("in");

      $(".modal-backdrop.fade.in").remove();
      removeStopScroll();
      setTimeout(function () {
        self._topSearchDialog.hide();
      }, 150);
      goToTopResults();
    }); //each tab click event (ex: topresults, artists, artworks)


    self._navBar.on("click", "li", function () {
      var tabId = $(this).attr("id");
      var tabDivId = ".tabs-content#content-" + tabId;
      self._selectedTab = $(this).data("tab");

      if (!$(this).hasClass("selected")) {
        self._navBar.find("li").removeClass("selected");

        $(this).addClass("selected");

        self._tabsContent.removeClass("active");

        $(tabDivId).addClass("active");
        updateBadge(tabDivId);
        if (execSearch) execSearch();
      }

      self._badgeFilters = self._topSearchDialog.find(".tabs-content.active .badge-filter-pills a");
      $(".no-result-found").addClass("display-none");
      scrollToTop();
      toggleViewMoreButton("add");
      mixpanel.track("View New Search Results in ".concat(capitalizeFirstWord(tabId, false)), {
        "CTA Name": tabId,
        "Tab Name": tabId
      });
    }); //view more results / view all results button event


    self._topSearchDialog.on("click", ".btn-line", function () {
      var attrId = $(this).attr("id");
      var tabDivId = ".tabs-content#content-" + attrId;

      if (attrId) {
        self._navBar.find("li").removeClass("selected");

        self._navBar.find("li#" + attrId).addClass("selected");

        self._selectedTab = attrId.slice(0, -1);

        self._tabsContent.removeClass("active");

        $(tabDivId).addClass("active");
        if (execSearch) execSearch();
      }
    }); //send mixpanel event when click on any search result found 


    self._topSearchDialog.on("click", ".m-event", function () {
      sendMixPanelEvent(self._current_query, self._selectedTab);
    }); //sub-header(filters) click events (ex: event -> All, Exhibitions, Auctions)


    self._topSearchDialog.on("click", "#content-artworks .badge-filter-pills a, #content-events .badge-filter-pills a, #content-venues .badge-filter-pills a", function () {
      self._badgeFilters.removeClass("selected");

      $(this).addClass('selected');
      var activeTab = $(this).closest('.tabs-content.active');
      activeTab.find('.view-all').removeClass('display-none');
      var tabContent = activeTab.find('.main-content-section');
      tabContent.removeClass('display-block');
      tabContent.find('.no-result-found').remove();
      var selectedFilter = $(this).html() != 'All' ? capitalizeFirstWord($(this).html(), false) : 'All ' + capitalizeFirstWord(self._selectedTab, true);
      activeTab.find('.topsearch-result-header span').html(selectedFilter);
      $(this).closest('.tabs-content').find('.main-content-section .item').removeClass('display-none');
      var target = $(this).data('target');

      if (target !== 'all') {
        $(this).closest('.tabs-content').find('.main-content-section .item:not([data-type="' + target + '"])').addClass('display-none');

        if (tabContent.find('.item:not(.display-none)').length == 0) {
          var urlData = [{
            'url': redirectionURLs[self._selectedTab] + self._current_query
          }];
          tabContent.append(renderTemplate(self.resultEntityTemplates['noresult'], urlData));
          tabContent.addClass('display-block');

          if (tabContent.find('.no-result-found').length > 0) {
            activeTab.find('.view-all').addClass('display-none');
          }
        }
      }
    }); //send mixpanel event when click view more buttons in topresults tab


    self._topSearchDialog.on("click", "#content-top-results .btn-line", function () {
      mixpanel.track("View New Search Results in ".concat(capitalizeFirstWord($(this).attr("id"), false)), {
        "CTA Name": "view more results",
        "Tab Name": $(this).attr("id")
      });
    });

    return _export;
  };

  function sendMixPanelEvent(query, type) {
    $.ajax({
      method: 'POST',
      url: '/Ajax/AutoComplete/SendSearchResultToMixpanel',
      dataType: "json",
      data: {
        q: query,
        q_type: type,
        resCount: self._resultCount || 0,
        searchModule: "Top Search",
        itemIndex: 0,
        itemLabel: query,
        suggestCat: null
      }
    });
  }

  function updateBadge(tabDivId) {
    //reset back to All as filter if any other filter selected
    var $tabDiv = $(tabDivId);

    if ($tabDiv.find('.badge-filter-pills').length) {
      $tabDiv.find('.badge-filter-pills a').removeClass('selected').filter('[data-target="all"]').addClass('selected');
      $tabDiv.find('.main-content-section').removeClass('display-block').empty();
      $tabDiv.find('.topsearch-result-header span').html('All ' + capitalizeFirstWord(self._selectedTab, true));
      $tabDiv.find('.view-all').removeClass('display-none');
    }
  }

  function onclickMA(e) {
    //close popup when click outside
    if (!$(e.target).hasClass('topsearch-dialog') && $(e.target).closest('.topsearch-dialog').length == 0 && $(e.target).closest('.search-form').length == 0) {
      self._topSearchDialog.removeClass("in");

      $(".modal-backdrop.fade.in").remove();
      removeStopScroll();
      setTimeout(function () {
        self._topSearchDialog.hide();
      }, 150);
      goToTopResults();
      $(document).off('mousedown', onclickMA);
    }
  }

  function capitalizeFirstWord(str, plurize) {
    var formattedStr = str.replace(/-/g, ' ') // Replace hyphen with space
    .replace(/\b\w/g, function (c) {
      return c.toUpperCase();
    }); // Capitalize each word

    return plurize ? formattedStr + "s" : formattedStr;
  }

  function getSelectedTab(queryVal) {
    return self._current_query != queryVal ? "all" : self._selectedTab;
  }

  function removeStopScroll() {
    $("body").removeClass('modal-open');
  }

  function addStopScroll() {
    if (window.innerWidth > 1032) $("body").addClass('modal-open');
  }

  function scrollToTop() {
    $('.topsearch-result').animate({
      scrollTop: 0
    }, 400);
  }

  function openSearchDialog() {
    //responsible to open popup
    if (!IsMobileView()) {
      $(document).on('mousedown', onclickMA);
      addStopScroll();
    }

    self._topSearchDialog.show();

    if (!$('.top-search-modal').hasClass('in')) scrollToTop();
    setTimeout(function () {
      self._topSearchDialog.addClass("in");

      if ($(".modal-backdrop.fade.in").length === 0) {
        $("body").append('<div class="modal-backdrop fade in"></div>');
      }
    }, 50);
  }

  function checkIsMobile() {
    return window.innerWidth < 744 ? true : false;
  }

  var redirectionURLs = {
    'artist': '/ArtistsResults/?q=',
    'artwork': '/LotsResults/?q=',
    'event': '/EventsResults/?q=',
    'venue': '/OrganizationsResults/?q=',
    'article': '/ArticlesResults/?q=',
    'all': '/Results/search?q='
  };

  function appendTopSearchUAD(item, source) {
    var param = "uad=" + source;
    if (!source) return item;
    return item.includes("?") ? "".concat(item, "&").concat(param) : "".concat(item, "?").concat(param);
  }

  function highlightName(receivedName, suppliedName) {
    var escapedName = receivedName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    var regex = new RegExp("(".concat(escapedName, ")"), 'gi');
    return suppliedName.replace(regex, '<strong>$1</strong>');
  }

  function hanldeMobileNav() {
    //add navigation bar with arrows in mobile
    var leftPos = $("#search-main-nav").scrollLeft();

    if ($(this).hasClass("nav-hov")) {
      var isRight = $(this).hasClass("right");

      if (isRight) {
        $("#search-main-nav").animate({
          scrollLeft: leftPos + 120
        }, 200);
        leftPos += 120;
      } else {
        $("#search-main-nav").animate({
          scrollLeft: leftPos - 120
        }, 200);
        leftPos -= 120;
      }
    }

    if ($(window).width() + leftPos >= 580) $(".nav-hov.right").removeClass("active");else $(".nav-hov.right").addClass("active");
    if (leftPos <= 10) $(".nav-hov.left").removeClass("active");else $(".nav-hov.left").addClass("active");
  }

  function toggleTopSearchContent(showSearch) {
    //to show history, trending section or content for search query
    if (showSearch) {
      self._topSearchDialog.find(".search-init-res").removeClass("display-none");

      self._topSearchDialog.find(".top-search-nav").addClass("display-none");

      self._topSearchDialog.find(".topsearch-result").addClass("display-none");
    } else {
      self._topSearchDialog.find(".search-init-res").addClass("display-none");

      if (self._topSearchDialog.find(".top-search-nav").hasClass("display-none")) {
        self._topSearchDialog.find(".top-search-nav").removeClass("display-none");

        mixpanel.track("View New Search Results in Top Results", {
          "CTA Name": "Top Results",
          "Tab Name": "Top Results"
        });
      }

      if (self._topSearchDialog.find(".topsearch-result").hasClass("display-none")) {
        self._topSearchDialog.find(".topsearch-result").removeClass("display-none");
      }

      if (checkIsMobile()) {
        self._topSearchDialog.find('.top-search-nav .right').addClass('active');

        self._topSearchDialog.find('.top-search-nav .right').on("click", hanldeMobileNav);

        self._topSearchDialog.find('.top-search-nav .left').on("click", hanldeMobileNav);
      }
    }
  }

  function initializeSlickSlider(selector) {
    //slick slider initialization
    if ($(selector).hasClass('slick-on')) $(selector).removeClass('slick-on').slick('unslick');
    $(selector).addClass('slick-on').slick({
      infinite: false,
      dots: true,
      slidesToShow: 1,
      slidesToScroll: 1,
      variableWidth: true
    });
  }

  function goToTopResults() {
    //close popup or search then activates the top result tab
    $('.top-search-nav ul li').removeClass('selected');
    $('.top-search-nav ul li#top-results').addClass('selected');
    $('.tabs-content').removeClass('active');
    $('#content-top-results').addClass('active');
    self._selectedTab = "all";
  }

  function toggleViewMoreButton(action) {
    if (action == "add") {
      $('.tabs-content.active .btn-line').addClass("display-none");
    } else if (action == "remove") {
      $('.tabs-content.active .btn-line').removeClass("display-none");
    }
  }

  function toggleClassForTabs(action) {
    //adds/removes display none conditionally on top result tab
    var resArr = ["article", "artwork", "artist", "venue", "event"];
    resArr.forEach(function (key) {
      var element = $("#topresult-".concat(key, "s"));

      if (action === "add") {
        element.addClass("display-none");
      } else if (action === "remove") {
        element.removeClass("display-none");
      }

      $(".no-result-found").removeClass("display-none");
    });
  }

  function handleSearchPopup(data, queryVal) {
    var _data$capitalizeFirst;

    //to populate api response after search
    if (self._selectedTab == "all") {
      toggleClassForTabs("remove");
    }

    if (self._current_query != queryVal) {
      goToTopResults();
    }

    self._current_query = queryVal;
    self._resultCount = data.length;
    toggleTopSearchContent(false);
    updateBadge(".tabs-content#content-" + self._selectedTab + "s"); //show no result found content when no related data found from response

    if ((self._selectedTab === "all" || self._selectedTab === "alls") && data.Articles.length === 0 && data.Artworks.length === 0 && data.Events.length === 0 && data.Organizations.length === 0 && data.Artists.length === 0) {
      var _activeTab = $('.tabs-content.active');

      toggleClassForTabs("add");
      var urlData = [{
        'url': redirectionURLs[self._selectedTab] + self._current_query
      }];
      if (!_activeTab.find('.no-result-found').length) _activeTab.append(renderTemplate(self.resultEntityTemplates['noresult'], urlData));
      return;
    } else if ((self._selectedTab != "all" || self._selectedTab != "alls") && ((_data$capitalizeFirst = data[capitalizeFirstWord(self._selectedTab != "venue" ? self._selectedTab : "organization", true)]) === null || _data$capitalizeFirst === void 0 ? void 0 : _data$capitalizeFirst.length) === 0) {
      var _activeTab2 = $('.tabs-content.active');

      $("#content-".concat(self._selectedTab, "s")).find("*").not(".no-result-found").addClass("display-none");
      toggleClassForTabs("add");
      var _urlData = [{
        'url': redirectionURLs[self._selectedTab] + self._current_query
      }];

      _activeTab2.append(renderTemplate(self.resultEntityTemplates['noresult'], _urlData));

      return;
    }

    $('.tabs-content.active *').removeClass("display-none");
    $('.tabs-content.active .no-result-found').addClass("display-none");
    toggleViewMoreButton("remove");
    var resultData = {
      //organizing api response in meaningfull json obj
      article: data.Articles && data.Articles.length ? data.Articles.map(function (article) {
        var _article$ArticleImage;

        return {
          url: article.url,
          image: article.ArticleImage ? (_article$ArticleImage = article.ArticleImage) === null || _article$ArticleImage === void 0 ? void 0 : _article$ArticleImage.Image338 : "https://media.mutualart.com/Images/System_Init/1/Default_article_338.png",
          displayName: highlightName(self._current_query, article.name),
          name: article.name,
          publicationDate: article.PublicationDate,
          shortDescription: article.ShortDescription ? article.ShortDescription : ''
        };
      }) : [],
      artwork: data.Artworks && data.Artworks.length ? data.Artworks.map(function (artwork) {
        var _artwork$ArtworkImage, _artwork$ArtworkImage2, _artwork$ArtworkArtis, _artwork$ArtworkArtis2, _artwork$ArtworkArtis3, _artwork$ArtworkArtis4, _artwork$Lot, _artwork$Lot$Event, _artwork$Lot$Event$Ma, _artwork$Lot2, _artwork$Lot2$Event;

        return {
          url: appendTopSearchUAD(artwork.url, "TopSearch"),
          image: (_artwork$ArtworkImage = artwork.ArtworkImage) !== null && _artwork$ArtworkImage !== void 0 && _artwork$ArtworkImage.length ? (_artwork$ArtworkImage2 = artwork.ArtworkImage[0]) === null || _artwork$ArtworkImage2 === void 0 ? void 0 : _artwork$ArtworkImage2.Image338 : "https://media.mutualart.com/Images/System_Init/1/Default_artwork_570.png",
          displayName: highlightName(self._current_query, artwork.name),
          name: artwork.name,
          artistName: Array.isArray(artwork.ArtworkArtist) && artwork.ArtworkArtist.length > 0 && (_artwork$ArtworkArtis = artwork.ArtworkArtist[0]) !== null && _artwork$ArtworkArtis !== void 0 && (_artwork$ArtworkArtis2 = _artwork$ArtworkArtis.Artist) !== null && _artwork$ArtworkArtis2 !== void 0 && _artwork$ArtworkArtis2.name ? 'By ' + ((_artwork$ArtworkArtis3 = artwork.ArtworkArtist[0]) === null || _artwork$ArtworkArtis3 === void 0 ? void 0 : (_artwork$ArtworkArtis4 = _artwork$ArtworkArtis3.Artist) === null || _artwork$ArtworkArtis4 === void 0 ? void 0 : _artwork$ArtworkArtis4.name) : '',
          dateText: artwork.DateText ? "," + parseInt(artwork.DateText.replace(/\D/g, ""), 10) : '',
          locationname: (_artwork$Lot = artwork.Lot) === null || _artwork$Lot === void 0 ? void 0 : (_artwork$Lot$Event = _artwork$Lot.Event) === null || _artwork$Lot$Event === void 0 ? void 0 : (_artwork$Lot$Event$Ma = _artwork$Lot$Event.MainOrganization) === null || _artwork$Lot$Event$Ma === void 0 ? void 0 : _artwork$Lot$Event$Ma.name,
          lotType: ((_artwork$Lot2 = artwork.Lot) === null || _artwork$Lot2 === void 0 ? void 0 : (_artwork$Lot2$Event = _artwork$Lot2.Event) === null || _artwork$Lot2$Event === void 0 ? void 0 : _artwork$Lot2$Event.StartDate) > Date.now() ? 'upcoming' : 'auctionresults'
        };
      }) : [],
      artist: data.Artists && data.Artists.length ? data.Artists.map(function (artist) {
        var _artist$AvatarImage, _artist$AvatarImage$, _artist$ArtworkImage, _artist$ArtworkImage$, _artist$PrimaryImage, _artist$PrimaryImage$;

        return {
          url: appendTopSearchUAD(artist.url, "Artistsresults"),
          AvatarImage: Array.isArray(artist.ArtworkArtist) && artist.ArtworkArtist.length > 0 && ((_artist$AvatarImage = artist.AvatarImage) === null || _artist$AvatarImage === void 0 ? void 0 : (_artist$AvatarImage$ = _artist$AvatarImage[0]) === null || _artist$AvatarImage$ === void 0 ? void 0 : _artist$AvatarImage$.Image273) || ((_artist$ArtworkImage = artist.ArtworkImage) === null || _artist$ArtworkImage === void 0 ? void 0 : (_artist$ArtworkImage$ = _artist$ArtworkImage[0]) === null || _artist$ArtworkImage$ === void 0 ? void 0 : _artist$ArtworkImage$.Image273) || ((_artist$PrimaryImage = artist.PrimaryImage) === null || _artist$PrimaryImage === void 0 ? void 0 : (_artist$PrimaryImage$ = _artist$PrimaryImage[0]) === null || _artist$PrimaryImage$ === void 0 ? void 0 : _artist$PrimaryImage$.Image273) || "https://media.mutualart.com/Images/System_Init/1/Default_artist_273.png",
          displayName: highlightName(self._current_query, artist.name),
          name: artist.name,
          nationality: artist.nationality,
          birthDateWithCirca: artist.birthDateWithCirca,
          deathDateWithCirca: artist.deathDateWithCirca,
          personalDetails: artist.nationality ? artist.nationality + (artist.birthDateWithCirca && artist.deathDateWithCirca ? " | " + artist.birthDateWithCirca + " - " + artist.deathDateWithCirca : artist.birthDateWithCirca || artist.deathDateWithCirca ? " | " + (artist.birthDateWithCirca || artist.deathDateWithCirca) : "") : artist.birthDateWithCirca && artist.deathDateWithCirca ? artist.birthDateWithCirca + " - " + artist.deathDateWithCirca : artist.birthDateWithCirca || artist.deathDateWithCirca || ""
        };
      }) : [],
      venue: data.Organizations && data.Organizations.length ? data.Organizations.map(function (organization) {
        var _organization$Locatio;

        return {
          url: organization.url,
          displayName: highlightName(self._current_query, organization.name),
          label: Array.isArray(organization.Location) && organization.Location.length > 0 && ((_organization$Locatio = organization.Location[0]) === null || _organization$Locatio === void 0 ? void 0 : _organization$Locatio.Label),
          type: organization.OrganizationType
        };
      }) : [],
      event: data.Events && data.Events.length ? data.Events.map(function (event) {
        var _event$Image, _event$Image$, _event$MainOrganizati;

        return {
          url: event.url,
          displayName: highlightName(self._current_query, event.name),
          name: event.name,
          image: (_event$Image = event.Image) !== null && _event$Image !== void 0 && _event$Image.length ? (_event$Image$ = event.Image[0]) === null || _event$Image$ === void 0 ? void 0 : _event$Image$.Image338 : 'https://media.mutualart.com/Images/System_Init/1/Default_exhibition_338.png',
          mainOrg: (_event$MainOrganizati = event.MainOrganization) === null || _event$MainOrganizati === void 0 ? void 0 : _event$MainOrganizati.name,
          location: event.City && event.Country ? "".concat(event.City, " | ").concat(event.Country) : event.City || event.Country || '',
          date: event.StartDate && event.EndDate ? formatDateRange(event.StartDate, event.EndDate) : event.StartDate || event.EndDate || '',
          type: event.Type,
          iCalUrl: createCalendarUrl(event.id, "iCal"),
          googleUrl: createCalendarUrl(event.id, "Google")
        };
      }) : []
    };
    var limits = {
      //all: { artist: 10, artwork: 3, event: 3, venue: 3, article: 3 },
      artist: {
        artist: 10
      },
      artwork: {
        artwork: 15
      },
      event: {
        event: 10
      },
      venue: {
        venue: 10
      },
      article: {
        article: 10
      }
    };
    if (checkIsMobile()) limits.all = {
      artist: 3,
      artwork: 3,
      event: 3,
      venue: 3,
      article: 3
    };
    var selectedLimit = limits[self._selectedTab] || {};
    Object.keys(selectedLimit).forEach(function (key) {
      //limit the api response
      if (resultData[key].length > selectedLimit[key]) {
        resultData[key].splice(selectedLimit[key]);
      }
    });

    if (self._selectedTab == "all") {
      Object.entries(resultData).forEach(function (_ref) {
        var _ref2 = _slicedToArray(_ref, 2),
            key = _ref2[0],
            value = _ref2[1];

        if (value.length === 0) {
          //show only content which has length > 0
          $("#topresult-".concat(key, "s")).addClass("display-none");
        }
      });
    }

    scrollToTop();
    $('.topresult-section:not(.display-none)').find('.section-separator').show();
    $('.topresult-section:not(.display-none)').last().find('.section-separator').hide();
    var types = self._selectedTab == "all" ? ["artist", "artwork", "article", "venue", "event"] : [self._selectedTab];
    var activeTab = $(".tabs-content.active");

    for (var i = 0; i < types.length; i++) {
      var entityType = types[i];
      var template = self.resultEntityTemplates[entityType];

      if (activeTab.length > 0) {
        //populate the content with temaplate and api response
        var container = activeTab.find("#topresult-".concat(entityType, "-container"));
        if ($(container).hasClass('slick-on')) $(container).removeClass('slick-on').slick('unslick');
        container.html(renderTemplate(String(template), resultData[entityType]));
      }
    }

    removePastEventCalendars();
    var btnLine = activeTab.length > 0 ? activeTab.find(".btn-line") : null;

    if (btnLine.length) {
      var anchor = btnLine.find("a"); //update the anchor link with search query

      if (anchor.length && anchor.attr("href")) {
        var currentHref = anchor.attr("href") || "";
        var baseUrl = currentHref.split("?q=")[0];
        anchor.attr("href", "".concat(baseUrl, "?q=").concat(queryVal));
      }
    }

    if (checkIsMobile()) {
      initializeSlickSlider('#topresult-artist-container');
      initializeSlickSlider('#topresult-artwork-container');
    }
  }

  function removePastEventCalendars() {
    //add clendar icon for events
    $('#topresult-event-container .list').each(function () {
      var dateRangeText = $(this).find('.date').text().trim();
      var dates = dateRangeText.split(" - ");

      if (dates.length === 2) {
        //show icon if the event is currently running or upcoming
        var startDate = new Date(dates[0]);
        var endDate = new Date(dates[1]);
        var currentDate = new Date();
        var isUpcoming = startDate >= currentDate || startDate <= currentDate && endDate >= currentDate;

        if (!isUpcoming) {
          $(this).find('.save-to-calendar').remove();
        }
      }
    });
  }

  function formatDateRange(start, end) {
    var options = {
      year: 'numeric',
      month: 'long',
      day: 'numeric'
    };
    var startDate = new Date(start).toLocaleDateString('en-US', options);
    var endDate = new Date(end).toLocaleDateString('en-US', options);
    return "".concat(startDate, " - ").concat(endDate);
  }

  function createCalendarUrl(eventId, cal) {
    return "/Service/Calendar/".concat(cal, "?ItemID=").concat(eventId);
  }

  function renderTemplate(template, data) {
    //to replace the placeholder data with api response
    if (typeof template !== "string") {
      console.error("renderTemplate expects 'template' to be a string");
    }

    if (Array.isArray(data) && data.length) {
      return data.map(function (item) {
        return template.replace(/\$\{(.*?)\}/g, function (match, key) {
          return item[key.trim()] || '';
        });
      }).join('');
    }
  }

  var _export = {
    init: init,
    openSearchDialog: openSearchDialog,
    getSelectedTab: getSelectedTab,
    handleSearchPopup: handleSearchPopup,
    toggleTopSearchContent: toggleTopSearchContent,
    onclickMA: onclickMA,
    removeStopScroll: removeStopScroll
  };
  return _export;
}
//# sourceMappingURL=TopSearchModule.js.map;
