/* Minification failed. Returning unminified contents.
(12332,132-133): run-time error JS1100: Expected ',': =
(12332,139-140): run-time error JS1002: Syntax error: ,
(12332,153-154): run-time error JS1100: Expected ',': =
(12884,48-49): run-time error JS1014: Invalid character: `
(12884,92-93): run-time error JS1003: Expected ':': {
(12884,101-102): run-time error JS1003: Expected ':': }
(12884,102-103): run-time error JS1014: Invalid character: `
(14165,36-37): run-time error JS1195: Expected expression: )
(14165,39-40): run-time error JS1195: Expected expression: >
(14345,27-28): run-time error JS1014: Invalid character: `
(14345,29-30): run-time error JS1004: Expected ';': {
(14345,35-36): run-time error JS1004: Expected ';': {
(14345,95-96): run-time error JS1195: Expected expression: /
(14345,121-122): run-time error JS1195: Expected expression: ?
(14345,160-161): run-time error JS1014: Invalid character: `
(15986,54-55): run-time error JS1014: Invalid character: `
(15986,56-57): run-time error JS1100: Expected ',': {
(15986,75-76): run-time error JS1014: Invalid character: #
(15986,91-92): run-time error JS1014: Invalid character: `
(15986,94-95): run-time error JS1195: Expected expression: ,
(15986,100-101): run-time error JS1014: Invalid character: `
(15986,121-122): run-time error JS1014: Invalid character: #
(15986,137-138): run-time error JS1014: Invalid character: `
(15986,138-139): run-time error JS1004: Expected ';': )
(15989,17-22): run-time error JS1019: Can't have 'break' outside of loop: break
(15993,54-55): run-time error JS1014: Invalid character: `
(15993,56-57): run-time error JS1100: Expected ',': {
(15993,75-76): run-time error JS1014: Invalid character: #
(15993,85-86): run-time error JS1014: Invalid character: `
(15993,88-89): run-time error JS1195: Expected expression: ,
(15993,94-95): run-time error JS1014: Invalid character: `
(15993,115-116): run-time error JS1014: Invalid character: #
(15993,125-126): run-time error JS1014: Invalid character: `
(15993,126-127): run-time error JS1004: Expected ';': )
(15996,17-22): run-time error JS1019: Can't have 'break' outside of loop: break
(15997,26-27): run-time error JS1197: Too many errors. The file might not be a JavaScript file: :
(15980,1-36): run-time error JS1301: End of file encountered before function is properly closed: function UserPreferenceUrlRewrite()
(16000,54-55): run-time error JS1014: Invalid character: `
(16000,56-57): run-time error JS1100: Expected ',': {
(16000,75-76): run-time error JS1014: Invalid character: #
(16000,90-91): run-time error JS1014: Invalid character: `
(16000,93-94): run-time error JS1195: Expected expression: ,
(16000,95-97): 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)})});;
!function (a) { "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof exports ? module.exports = a(require("jquery")) : a(jQuery) }(function (a) { function b(a) { return void 0 !== a && null !== a } a(document).ready(function () { a("body").append("<div id=snackbar-container/>") }); var c = { events: {}, on: function (a, b) { this.events[a] = this.events[a] || [], this.events[a].push(b) }, off: function (a) { this.events[a] && delete this.events[a] }, emit: function (a, b) { this.events[a] && this.events[a].forEach(function (a) { a(b) }) } }; a(document).on("click", "[data-toggle=snackbar]", function () { a(this).snackbar("toggle") }).on("click", "#snackbar-container .snackbar", function () { a(this).snackbar("hide") }), a.snackbar = function (d) { if (b(d) && d === Object(d)) { var e, f = !1; d = Object.assign({}, a.snackbar.defaults, d), b(d.id) ? a("#" + d.id).length ? e = a("#" + d.id) : (e = a("<div/>").attr("id", "" + d.id).attr("class", "snackbar"), f = !0) : (d.id = "snackbar" + Date.now(), e = a("<div/>").attr("id", d.id).attr("class", "snackbar"), f = !0); var g = e.hasClass("snackbar-opened"); b(d.style) ? (g ? e.attr("class", "snackbar snackbar-opened " + d.style) : e.attr("class", "snackbar " + d.style), e.attr("data-style", d.style)) : g ? e.attr("class", "snackbar snackbar-opened") : e.attr("class", "snackbar"), d.htmlAllowed = !!b(d.htmlAllowed) && d.htmlAllowed, d.timeout = b(d.timeout) ? d.timeout : 3e3, e.attr("data-timeout", d.timeout), d.content = d.htmlAllowed ? d.content : a("<p>" + d.content + "</p>").text(), b(d.onClose) && c.on(d.id, d.onClose), b(d.htmlAllowed) && e.attr("data-html-allowed", d.htmlAllowed), b(d.content) && (e.find(".snackbar-content").length ? e.find(".snackbar-content").html(d.content) : e.prepend("<span class=snackbar-content>" + d.content + "</span>"), e.attr("data-content", d.content)), f ? e.appendTo("#snackbar-container") : e.insertAfter("#snackbar-container .snackbar:last-child"), b(d.action) && "toggle" == d.action && (d.action = g ? "hide" : "show"); var h = Date.now(); e.data("animationId1", h), setTimeout(function () { e.data("animationId1") === h && (b(d.action) && "show" != d.action ? b(d.action) && "hide" == d.action && (e.removeClass("snackbar-opened"), c.emit(d.id), c.off(d.id)) : e.addClass("snackbar-opened")) }, 50); var i = Date.now(); return e.data("animationId2", i), 0 !== d.timeout && setTimeout(function () { e.data("animationId2") === i && (e.removeClass("snackbar-opened"), c.emit(d.id), c.off(d.id)) }, d.timeout), e } return !1 }, a.snackbar.defaults = {}, a.fn.snackbar = function (c) { if (void 0 !== c) { var d = {}; if (this.hasClass("snackbar")) return d = { id: this.attr("id"), content: a(this).attr("data-content"), style: a(this).attr("data-style"), timeout: parseInt(a(this).attr("data-timeout")), htmlAllowed: a(this).attr("data-html-allowed") }, "show" !== c && "hide" !== c && "toggle" != c || (d.action = c), a.snackbar(d); b(c) && "show" !== c && "hide" !== c && "toggle" != c || (d = { content: a(this).attr("data-content"), style: a(this).attr("data-style"), timeout: a(this).attr("data-timeout"), htmlAllowed: a(this).attr("data-html-allowed") }), b(c) && (d.id = this.attr("data-snackbar-id"), "show" !== c && "hide" !== c && "toggle" != c || (d.action = c)); var e = a.snackbar(d); return this.attr("data-snackbar-id", e.attr("id")), e } } });;
// Spectrum Colorpicker v1.8.1
// https://github.com/bgrins/spectrum
// Author: Brian Grinstead
// License: MIT

(function (factory) {
    "use strict";

    if (typeof define === 'function' && define.amd) { // AMD
        define(['jquery'], factory);
    }
    else if (typeof exports == "object" && typeof module == "object") { // CommonJS
        module.exports = factory(require('jquery'));
    }
    else { // Browser
        factory(jQuery);
    }
})(function($, undefined) {
    "use strict";

    var defaultOpts = {

        // Callbacks
        beforeShow: noop,
        move: noop,
        change: noop,
        show: noop,
        hide: noop,

        // Options
        color: false,
        flat: false,
        showInput: false,
        allowEmpty: false,
        showButtons: true,
        clickoutFiresChange: true,
        showInitial: false,
        showPalette: false,
        showPaletteOnly: false,
        hideAfterPaletteSelect: false,
        togglePaletteOnly: false,
        showSelectionPalette: true,
        localStorageKey: false,
        appendTo: "body",
        maxSelectionSize: 7,
        cancelText: "cancel",
        chooseText: "choose",
        togglePaletteMoreText: "more",
        togglePaletteLessText: "less",
        clearText: "Clear Color Selection",
        noColorSelectedText: "No Color Selected",
        preferredFormat: false,
        className: "", // Deprecated - use containerClassName and replacerClassName instead.
        containerClassName: "",
        replacerClassName: "",
        showAlpha: false,
        theme: "sp-light",
        palette: [["#ffffff", "#000000", "#ff0000", "#ff8000", "#ffff00", "#008000", "#0000ff", "#4b0082", "#9400d3"]],
        selectionPalette: [],
        disabled: false,
        offset: null
    },
    spectrums = [],
    IE = !!/msie/i.exec( window.navigator.userAgent ),
    rgbaSupport = (function() {
        function contains( str, substr ) {
            return !!~('' + str).indexOf(substr);
        }

        var elem = document.createElement('div');
        var style = elem.style;
        style.cssText = 'background-color:rgba(0,0,0,.5)';
        return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');
    })(),
    replaceInput = [
        "<div class='sp-replacer'>",
            "<div class='sp-preview'><div class='sp-preview-inner'></div></div>",
            "<div class='sp-dd'>&#9660;</div>",
        "</div>"
    ].join(''),
    markup = (function () {

        // IE does not support gradients with multiple stops, so we need to simulate
        //  that for the rainbow slider with 8 divs that each have a single gradient
        var gradientFix = "";
        if (IE) {
            for (var i = 1; i <= 6; i++) {
                gradientFix += "<div class='sp-" + i + "'></div>";
            }
        }

        return [
            "<div class='sp-container sp-hidden'>",
                "<div class='sp-palette-container'>",
                    "<div class='sp-palette sp-thumb sp-cf'></div>",
                    "<div class='sp-palette-button-container sp-cf'>",
                        "<button type='button' class='sp-palette-toggle'></button>",
                    "</div>",
                "</div>",
                "<div class='sp-picker-container'>",
                    "<div class='sp-top sp-cf'>",
                        "<div class='sp-fill'></div>",
                        "<div class='sp-top-inner'>",
                            "<div class='sp-color'>",
                                "<div class='sp-sat'>",
                                    "<div class='sp-val'>",
                                        "<div class='sp-dragger'></div>",
                                    "</div>",
                                "</div>",
                            "</div>",
                            "<div class='sp-clear sp-clear-display'>",
                            "</div>",
                            "<div class='sp-hue'>",
                                "<div class='sp-slider'></div>",
                                gradientFix,
                            "</div>",
                        "</div>",
                        "<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>",
                    "</div>",
                    "<div class='sp-input-container sp-cf'>",
                        "<input class='sp-input' type='text' spellcheck='false'  />",
                    "</div>",
                    "<div class='sp-initial sp-thumb sp-cf'></div>",
                    "<div class='sp-button-container sp-cf'>",
                        "<a class='sp-cancel' href='#'></a>",
                        "<button type='button' class='sp-choose'></button>",
                    "</div>",
                "</div>",
            "</div>"
        ].join("");
    })();

    function paletteTemplate (p, color, className, opts) {
        var html = [];
        for (var i = 0; i < p.length; i++) {
            var current = p[i];
            if(current) {
                var tiny = tinycolor(current);
                var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light";
                c += (tinycolor.equals(color, current)) ? " sp-thumb-active" : "";
                var formattedString = tiny.toString(opts.preferredFormat || "rgb");
                var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter();
                html.push('<span title="' + formattedString + '" data-color="' + tiny.toRgbString() + '" class="' + c + '"><span class="sp-thumb-inner" style="' + swatchStyle + ';"></span></span>');
            } else {
                var cls = 'sp-clear-display';
                html.push($('<div />')
                    .append($('<span data-color="" style="background-color:transparent;" class="' + cls + '"></span>')
                        .attr('title', opts.noColorSelectedText)
                    )
                    .html()
                );
            }
        }
        return "<div class='sp-cf " + className + "'>" + html.join('') + "</div>";
    }

    function hideAll() {
        for (var i = 0; i < spectrums.length; i++) {
            if (spectrums[i]) {
                spectrums[i].hide();
            }
        }
    }

    function instanceOptions(o, callbackContext) {
        var opts = $.extend({}, defaultOpts, o);
        opts.callbacks = {
            'move': bind(opts.move, callbackContext),
            'change': bind(opts.change, callbackContext),
            'show': bind(opts.show, callbackContext),
            'hide': bind(opts.hide, callbackContext),
            'beforeShow': bind(opts.beforeShow, callbackContext)
        };

        return opts;
    }

    function spectrum(element, o) {

        var opts = instanceOptions(o, element),
            flat = opts.flat,
            showSelectionPalette = opts.showSelectionPalette,
            localStorageKey = opts.localStorageKey,
            theme = opts.theme,
            callbacks = opts.callbacks,
            resize = throttle(reflow, 10),
            visible = false,
            isDragging = false,
            dragWidth = 0,
            dragHeight = 0,
            dragHelperHeight = 0,
            slideHeight = 0,
            slideWidth = 0,
            alphaWidth = 0,
            alphaSlideHelperWidth = 0,
            slideHelperHeight = 0,
            currentHue = 0,
            currentSaturation = 0,
            currentValue = 0,
            currentAlpha = 1,
            palette = [],
            paletteArray = [],
            paletteLookup = {},
            selectionPalette = opts.selectionPalette.slice(0),
            maxSelectionSize = opts.maxSelectionSize,
            draggingClass = "sp-dragging",
            shiftMovementDirection = null;

        var doc = element.ownerDocument,
            body = doc.body,
            boundElement = $(element),
            disabled = false,
            container = $(markup, doc).addClass(theme),
            pickerContainer = container.find(".sp-picker-container"),
            dragger = container.find(".sp-color"),
            dragHelper = container.find(".sp-dragger"),
            slider = container.find(".sp-hue"),
            slideHelper = container.find(".sp-slider"),
            alphaSliderInner = container.find(".sp-alpha-inner"),
            alphaSlider = container.find(".sp-alpha"),
            alphaSlideHelper = container.find(".sp-alpha-handle"),
            textInput = container.find(".sp-input"),
            paletteContainer = container.find(".sp-palette"),
            initialColorContainer = container.find(".sp-initial"),
            cancelButton = container.find(".sp-cancel"),
            clearButton = container.find(".sp-clear"),
            chooseButton = container.find(".sp-choose"),
            toggleButton = container.find(".sp-palette-toggle"),
            isInput = boundElement.is("input"),
            isInputTypeColor = isInput && boundElement.attr("type") === "color" && inputTypeColorSupport(),
            shouldReplace = isInput && !flat,
            replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),
            offsetElement = (shouldReplace) ? replacer : boundElement,
            previewElement = replacer.find(".sp-preview-inner"),
            initialColor = opts.color || (isInput && boundElement.val()),
            colorOnShow = false,
            currentPreferredFormat = opts.preferredFormat,
            clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,
            isEmpty = !initialColor,
            allowEmpty = opts.allowEmpty && !isInputTypeColor;

        function applyOptions() {

            if (opts.showPaletteOnly) {
                opts.showPalette = true;
            }

            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);

            if (opts.palette) {
                palette = opts.palette.slice(0);
                paletteArray = Array.isArray(palette[0]) ? palette : [palette];
                paletteLookup = {};
                for (var i = 0; i < paletteArray.length; i++) {
                    for (var j = 0; j < paletteArray[i].length; j++) {
                        var rgb = tinycolor(paletteArray[i][j]).toRgbString();
                        paletteLookup[rgb] = true;
                    }
                }
            }

            container.toggleClass("sp-flat", flat);
            container.toggleClass("sp-input-disabled", !opts.showInput);
            container.toggleClass("sp-alpha-enabled", opts.showAlpha);
            container.toggleClass("sp-clear-enabled", allowEmpty);
            container.toggleClass("sp-buttons-disabled", !opts.showButtons);
            container.toggleClass("sp-palette-buttons-disabled", !opts.togglePaletteOnly);
            container.toggleClass("sp-palette-disabled", !opts.showPalette);
            container.toggleClass("sp-palette-only", opts.showPaletteOnly);
            container.toggleClass("sp-initial-disabled", !opts.showInitial);
            container.addClass(opts.className).addClass(opts.containerClassName);

            reflow();
        }

        function initialize() {

            if (IE) {
                container.find("*:not(input)").attr("unselectable", "on");
            }

            applyOptions();

            if (shouldReplace) {
                boundElement.after(replacer).hide();
            }

            if (!allowEmpty) {
                clearButton.hide();
            }

            if (flat) {
                boundElement.after(container).hide();
            }
            else {

                var appendTo = opts.appendTo === "parent" ? boundElement.parent() : $(opts.appendTo);
                if (appendTo.length !== 1) {
                    appendTo = $("body");
                }

                appendTo.append(container);
            }

            updateSelectionPaletteFromStorage();

            offsetElement.on("click.spectrum touchstart.spectrum", function (e) {
                if (!disabled) {
                    toggle();
                }

                e.stopPropagation();

                if (!$(e.target).is("input")) {
                    e.preventDefault();
                }
            });

            if(boundElement.is(":disabled") || (opts.disabled === true)) {
                disable();
            }

            // Prevent clicks from bubbling up to document.  This would cause it to be hidden.
            container.on("click", stopPropagation);

            // Handle user typed input
            textInput.on("change", setFromTextInput);
            textInput.on("paste", function () {
                setTimeout(setFromTextInput, 1);
            });
            textInput.on("keydown", function (e) { if (e.keyCode == 13) { setFromTextInput(); } });

            cancelButton.text(opts.cancelText);
            cancelButton.on("click.spectrum", function (e) {
                e.stopPropagation();
                e.preventDefault();
                revert();
                hide();
            });

            clearButton.attr("title", opts.clearText);
            clearButton.on("click.spectrum", function (e) {
                e.stopPropagation();
                e.preventDefault();
                isEmpty = true;
                move();

                if(flat) {
                    //for the flat style, this is a change event
                    updateOriginalInput(true);
                }
            });

            chooseButton.text(opts.chooseText);
            chooseButton.on("click.spectrum", function (e) {
                e.stopPropagation();
                e.preventDefault();

                if (IE && textInput.is(":focus")) {
                    textInput.trigger('change');
                }

                if (isValid()) {
                    updateOriginalInput(true);
                    hide();
                }
            });

            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);
            toggleButton.on("click.spectrum", function (e) {
                e.stopPropagation();
                e.preventDefault();

                opts.showPaletteOnly = !opts.showPaletteOnly;

                // To make sure the Picker area is drawn on the right, next to the
                // Palette area (and not below the palette), first move the Palette
                // to the left to make space for the picker, plus 5px extra.
                // The 'applyOptions' function puts the whole container back into place
                // and takes care of the button-text and the sp-palette-only CSS class.
                if (!opts.showPaletteOnly && !flat) {
                    container.css('left', '-=' + (pickerContainer.outerWidth(true) + 5));
                }
                applyOptions();
            });

            draggable(alphaSlider, function (dragX, dragY, e) {
                currentAlpha = (dragX / alphaWidth);
                isEmpty = false;
                if (e.shiftKey) {
                    currentAlpha = Math.round(currentAlpha * 10) / 10;
                }

                move();
            }, dragStart, dragStop);

            draggable(slider, function (dragX, dragY) {
                currentHue = parseFloat(dragY / slideHeight);
                isEmpty = false;
                if (!opts.showAlpha) {
                    currentAlpha = 1;
                }
                move();
            }, dragStart, dragStop);

            draggable(dragger, function (dragX, dragY, e) {

                // shift+drag should snap the movement to either the x or y axis.
                if (!e.shiftKey) {
                    shiftMovementDirection = null;
                }
                else if (!shiftMovementDirection) {
                    var oldDragX = currentSaturation * dragWidth;
                    var oldDragY = dragHeight - (currentValue * dragHeight);
                    var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY);

                    shiftMovementDirection = furtherFromX ? "x" : "y";
                }

                var setSaturation = !shiftMovementDirection || shiftMovementDirection === "x";
                var setValue = !shiftMovementDirection || shiftMovementDirection === "y";

                if (setSaturation) {
                    currentSaturation = parseFloat(dragX / dragWidth);
                }
                if (setValue) {
                    currentValue = parseFloat((dragHeight - dragY) / dragHeight);
                }

                isEmpty = false;
                if (!opts.showAlpha) {
                    currentAlpha = 1;
                }

                move();

            }, dragStart, dragStop);

            if (!!initialColor) {
                set(initialColor);

                // In case color was black - update the preview UI and set the format
                // since the set function will not run (default color is black).
                updateUI();
                currentPreferredFormat = opts.preferredFormat || tinycolor(initialColor).format;

                addColorToSelectionPalette(initialColor);
            }
            else {
                updateUI();
            }

            if (flat) {
                show();
            }

            function paletteElementClick(e) {
                if (e.data && e.data.ignore) {
                    set($(e.target).closest(".sp-thumb-el").data("color"));
                    move();
                }
                else {
                    set($(e.target).closest(".sp-thumb-el").data("color"));
                    move();

                    // If the picker is going to close immediately, a palette selection
                    // is a change.  Otherwise, it's a move only.
                    if (opts.hideAfterPaletteSelect) {
                        updateOriginalInput(true);
                        hide();
                    } else {
                        updateOriginalInput();
                    }
                }

                return false;
            }

            var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
            paletteContainer.on(paletteEvent, ".sp-thumb-el", paletteElementClick);
            initialColorContainer.on(paletteEvent, ".sp-thumb-el:nth-child(1)", { ignore: true }, paletteElementClick);
        }

        function updateSelectionPaletteFromStorage() {

            if (localStorageKey && window.localStorage) {

                // Migrate old palettes over to new format.  May want to remove this eventually.
                try {
                    var oldPalette = window.localStorage[localStorageKey].split(",#");
                    if (oldPalette.length > 1) {
                        delete window.localStorage[localStorageKey];
                        $.each(oldPalette, function(i, c) {
                             addColorToSelectionPalette(c);
                        });
                    }
                }
                catch(e) { }

                try {
                    selectionPalette = window.localStorage[localStorageKey].split(";");
                }
                catch (e) { }
            }
        }

        function addColorToSelectionPalette(color) {
            if (showSelectionPalette) {
                var rgb = tinycolor(color).toRgbString();
                if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) {
                    selectionPalette.push(rgb);
                    while(selectionPalette.length > maxSelectionSize) {
                        selectionPalette.shift();
                    }
                }

                if (localStorageKey && window.localStorage) {
                    try {
                        window.localStorage[localStorageKey] = selectionPalette.join(";");
                    }
                    catch(e) { }
                }
            }
        }

        function getUniqueSelectionPalette() {
            var unique = [];
            if (opts.showPalette) {
                for (var i = 0; i < selectionPalette.length; i++) {
                    var rgb = tinycolor(selectionPalette[i]).toRgbString();

                    if (!paletteLookup[rgb]) {
                        unique.push(selectionPalette[i]);
                    }
                }
            }

            return unique.reverse().slice(0, opts.maxSelectionSize);
        }

        function drawPalette() {

            var currentColor = get();

            var html = $.map(paletteArray, function (palette, i) {
                return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i, opts);
            });

            updateSelectionPaletteFromStorage();

            if (selectionPalette) {
                html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection", opts));
            }

            paletteContainer.html(html.join(""));
        }

        function drawInitial() {
            if (opts.showInitial) {
                var initial = colorOnShow;
                var current = get();
                initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial", opts));
            }
        }

        function dragStart() {
            if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) {
                reflow();
            }
            isDragging = true;
            container.addClass(draggingClass);
            shiftMovementDirection = null;
            boundElement.trigger('dragstart.spectrum', [ get() ]);
        }

        function dragStop() {
            isDragging = false;
            container.removeClass(draggingClass);
            boundElement.trigger('dragstop.spectrum', [ get() ]);
        }

        function setFromTextInput() {

            var value = textInput.val();

            if ((value === null || value === "") && allowEmpty) {
                set(null);
                move();
                updateOriginalInput();
            }
            else {
                var tiny = tinycolor(value);
                if (tiny.isValid()) {
                    set(tiny);
                    move();
                    updateOriginalInput();
                }
                else {
                    textInput.addClass("sp-validation-error");
                }
            }
        }

        function toggle() {
            if (visible) {
                hide();
            }
            else {
                show();
            }
        }

        function show() {
            var event = $.Event('beforeShow.spectrum');

            if (visible) {
                reflow();
                return;
            }

            boundElement.trigger(event, [ get() ]);

            if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {
                return;
            }

            hideAll();
            visible = true;

            $(doc).on("keydown.spectrum", onkeydown);
            $(doc).on("click.spectrum", clickout);
            $(window).on("resize.spectrum", resize);
            replacer.addClass("sp-active");
            container.removeClass("sp-hidden");

            reflow();
            updateUI();

            colorOnShow = get();

            drawInitial();
            callbacks.show(colorOnShow);
            boundElement.trigger('show.spectrum', [ colorOnShow ]);
        }

        function onkeydown(e) {
            // Close on ESC
            if (e.keyCode === 27) {
                hide();
            }
        }

        function clickout(e) {
            // Return on right click.
            if (e.button == 2) { return; }

            // If a drag event was happening during the mouseup, don't hide
            // on click.
            if (isDragging) { return; }

            if (clickoutFiresChange) {
                updateOriginalInput(true);
            }
            else {
                revert();
            }
            hide();
        }

        function hide() {
            // Return if hiding is unnecessary
            if (!visible || flat) { return; }
            visible = false;

            $(doc).off("keydown.spectrum", onkeydown);
            $(doc).off("click.spectrum", clickout);
            $(window).off("resize.spectrum", resize);

            replacer.removeClass("sp-active");
            container.addClass("sp-hidden");

            callbacks.hide(get());
            boundElement.trigger('hide.spectrum', [ get() ]);
        }

        function revert() {
            set(colorOnShow, true);
            updateOriginalInput(true);
        }

        function set(color, ignoreFormatChange) {
            if (tinycolor.equals(color, get())) {
                // Update UI just in case a validation error needs
                // to be cleared.
                updateUI();
                return;
            }

            var newColor, newHsv;
            if (!color && allowEmpty) {
                isEmpty = true;
            } else {
                isEmpty = false;
                newColor = tinycolor(color);
                newHsv = newColor.toHsv();

                currentHue = (newHsv.h % 360) / 360;
                currentSaturation = newHsv.s;
                currentValue = newHsv.v;
                currentAlpha = newHsv.a;
            }
            updateUI();

            if (newColor && newColor.isValid() && !ignoreFormatChange) {
                currentPreferredFormat = opts.preferredFormat || newColor.getFormat();
            }
        }

        function get(opts) {
            opts = opts || { };

            if (allowEmpty && isEmpty) {
                return null;
            }

            return tinycolor.fromRatio({
                h: currentHue,
                s: currentSaturation,
                v: currentValue,
                a: Math.round(currentAlpha * 1000) / 1000
            }, { format: opts.format || currentPreferredFormat });
        }

        function isValid() {
            return !textInput.hasClass("sp-validation-error");
        }

        function move() {
            updateUI();

            callbacks.move(get());
            boundElement.trigger('move.spectrum', [ get() ]);
        }

        function updateUI() {

            textInput.removeClass("sp-validation-error");

            updateHelperLocations();

            // Update dragger background color (gradients take care of saturation and value).
            var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });
            dragger.css("background-color", flatColor.toHexString());

            // Get a format that alpha will be included in (hex and names ignore alpha)
            var format = currentPreferredFormat;
            if (currentAlpha < 1 && !(currentAlpha === 0 && format === "name")) {
                if (format === "hex" || format === "hex3" || format === "hex6" || format === "name") {
                    format = "rgb";
                }
            }

            var realColor = get({ format: format }),
                displayColor = '';

             //reset background info for preview element
            previewElement.removeClass("sp-clear-display");
            previewElement.css('background-color', 'transparent');

            if (!realColor && allowEmpty) {
                // Update the replaced elements background with icon indicating no color selection
                previewElement.addClass("sp-clear-display");
            }
            else {
                var realHex = realColor.toHexString(),
                    realRgb = realColor.toRgbString();

                // Update the replaced elements background color (with actual selected color)
                if (rgbaSupport || realColor.alpha === 1) {
                    previewElement.css("background-color", realRgb);
                }
                else {
                    previewElement.css("background-color", "transparent");
                    previewElement.css("filter", realColor.toFilter());
                }

                if (opts.showAlpha) {
                    var rgb = realColor.toRgb();
                    rgb.a = 0;
                    var realAlpha = tinycolor(rgb).toRgbString();
                    var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")";

                    if (IE) {
                        alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));
                    }
                    else {
                        alphaSliderInner.css("background", "-webkit-" + gradient);
                        alphaSliderInner.css("background", "-moz-" + gradient);
                        alphaSliderInner.css("background", "-ms-" + gradient);
                        // Use current syntax gradient on unprefixed property.
                        alphaSliderInner.css("background",
                            "linear-gradient(to right, " + realAlpha + ", " + realHex + ")");
                    }
                }

                displayColor = realColor.toString(format);
            }

            // Update the text entry input as it changes happen
            if (opts.showInput) {
                textInput.val(displayColor);
            }

            if (opts.showPalette) {
                drawPalette();
            }

            drawInitial();
        }

        function updateHelperLocations() {
            var s = currentSaturation;
            var v = currentValue;

            if(allowEmpty && isEmpty) {
                //if selected color is empty, hide the helpers
                alphaSlideHelper.hide();
                slideHelper.hide();
                dragHelper.hide();
            }
            else {
                //make sure helpers are visible
                alphaSlideHelper.show();
                slideHelper.show();
                dragHelper.show();

                // Where to show the little circle in that displays your current selected color
                var dragX = s * dragWidth;
                var dragY = dragHeight - (v * dragHeight);
                dragX = Math.max(
                    -dragHelperHeight,
                    Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)
                );
                dragY = Math.max(
                    -dragHelperHeight,
                    Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)
                );
                dragHelper.css({
                    "top": dragY + "px",
                    "left": dragX + "px"
                });

                var alphaX = currentAlpha * alphaWidth;
                alphaSlideHelper.css({
                    "left": (alphaX - (alphaSlideHelperWidth / 2)) + "px"
                });

                // Where to show the bar that displays your current selected hue
                var slideY = (currentHue) * slideHeight;
                slideHelper.css({
                    "top": (slideY - slideHelperHeight) + "px"
                });
            }
        }

        function updateOriginalInput(fireCallback) {
            var color = get(),
                displayColor = '',
                hasChanged = !tinycolor.equals(color, colorOnShow);

            if (color) {
                displayColor = color.toString(currentPreferredFormat);
                // Update the selection palette with the current color
                addColorToSelectionPalette(color);
            }

            if (isInput) {
                boundElement.val(displayColor);
            }

            if (fireCallback && hasChanged) {
                callbacks.change(color);
                boundElement.trigger('change', [ color ]);
            }
        }

        function reflow() {
            if (!visible) {
                return; // Calculations would be useless and wouldn't be reliable anyways
            }
            dragWidth = dragger.width();
            dragHeight = dragger.height();
            dragHelperHeight = dragHelper.height();
            slideWidth = slider.width();
            slideHeight = slider.height();
            slideHelperHeight = slideHelper.height();
            alphaWidth = alphaSlider.width();
            alphaSlideHelperWidth = alphaSlideHelper.width();

            if (!flat) {
                container.css("position", "absolute");
                if (opts.offset) {
                    container.offset(opts.offset);
                } else {
                    container.offset(getOffset(container, offsetElement));
                }
            }

            updateHelperLocations();

            if (opts.showPalette) {
                drawPalette();
            }

            boundElement.trigger('reflow.spectrum');
        }

        function destroy() {
            boundElement.show();
            offsetElement.off("click.spectrum touchstart.spectrum");
            container.remove();
            replacer.remove();
            spectrums[spect.id] = null;
        }

        function option(optionName, optionValue) {
            if (optionName === undefined) {
                return $.extend({}, opts);
            }
            if (optionValue === undefined) {
                return opts[optionName];
            }

            opts[optionName] = optionValue;

            if (optionName === "preferredFormat") {
                currentPreferredFormat = opts.preferredFormat;
            }
            applyOptions();
        }

        function enable() {
            disabled = false;
            boundElement.attr("disabled", false);
            offsetElement.removeClass("sp-disabled");
        }

        function disable() {
            hide();
            disabled = true;
            boundElement.attr("disabled", true);
            offsetElement.addClass("sp-disabled");
        }

        function setOffset(coord) {
            opts.offset = coord;
            reflow();
        }

        initialize();

        var spect = {
            show: show,
            hide: hide,
            toggle: toggle,
            reflow: reflow,
            option: option,
            enable: enable,
            disable: disable,
            offset: setOffset,
            set: function (c) {
                set(c);
                updateOriginalInput();
            },
            get: get,
            destroy: destroy,
            container: container
        };

        spect.id = spectrums.push(spect) - 1;

        return spect;
    }

    /**
    * checkOffset - get the offset below/above and left/right element depending on screen position
    * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
    */
    function getOffset(picker, input) {
        var extraY = 0;
        var dpWidth = picker.outerWidth();
        var dpHeight = picker.outerHeight();
        var inputHeight = input.outerHeight();
        var doc = picker[0].ownerDocument;
        var docElem = doc.documentElement;
        var viewWidth = docElem.clientWidth + $(doc).scrollLeft();
        var viewHeight = docElem.clientHeight + $(doc).scrollTop();
        var offset = input.offset();
        var offsetLeft = offset.left;
        var offsetTop = offset.top;

        offsetTop += inputHeight;

        offsetLeft -=
            Math.min(offsetLeft, (offsetLeft + dpWidth > viewWidth && viewWidth > dpWidth) ?
            Math.abs(offsetLeft + dpWidth - viewWidth) : 0);

        offsetTop -=
            Math.min(offsetTop, ((offsetTop + dpHeight > viewHeight && viewHeight > dpHeight) ?
            Math.abs(dpHeight + inputHeight - extraY) : extraY));

        return {
            top: offsetTop,
            bottom: offset.bottom,
            left: offsetLeft,
            right: offset.right,
            width: offset.width,
            height: offset.height
        };
    }

    /**
    * noop - do nothing
    */
    function noop() {

    }

    /**
    * stopPropagation - makes the code only doing this a little easier to read in line
    */
    function stopPropagation(e) {
        e.stopPropagation();
    }

    /**
    * Create a function bound to a given object
    * Thanks to underscore.js
    */
    function bind(func, obj) {
        var slice = Array.prototype.slice;
        var args = slice.call(arguments, 2);
        return function () {
            return func.apply(obj, args.concat(slice.call(arguments)));
        };
    }

    /**
    * Lightweight drag helper.  Handles containment within the element, so that
    * when dragging, the x is within [0,element.width] and y is within [0,element.height]
    */
    function draggable(element, onmove, onstart, onstop) {
        onmove = onmove || function () { };
        onstart = onstart || function () { };
        onstop = onstop || function () { };
        var doc = document;
        var dragging = false;
        var offset = {};
        var maxHeight = 0;
        var maxWidth = 0;
        var hasTouch = ('ontouchstart' in window);

        var duringDragEvents = {};
        duringDragEvents["selectstart"] = prevent;
        duringDragEvents["dragstart"] = prevent;
        duringDragEvents["touchmove mousemove"] = move;
        duringDragEvents["touchend mouseup"] = stop;

        function prevent(e) {
            if (e.stopPropagation) {
                e.stopPropagation();
            }
            if (e.preventDefault) {
                e.preventDefault();
            }
            e.returnValue = false;
        }

        function move(e) {
            if (dragging) {
                // Mouseup happened outside of window
                if (IE && doc.documentMode < 9 && !e.button) {
                    return stop();
                }

                var t0 = e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0];
                var pageX = t0 && t0.pageX || e.pageX;
                var pageY = t0 && t0.pageY || e.pageY;

                var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));
                var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));

                if (hasTouch) {
                    // Stop scrolling in iOS
                    prevent(e);
                }

                onmove.apply(element, [dragX, dragY, e]);
            }
        }

        function start(e) {
            var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);

            if (!rightclick && !dragging) {
                if (onstart.apply(element, arguments) !== false) {
                    dragging = true;
                    maxHeight = $(element).height();
                    maxWidth = $(element).width();
                    offset = $(element).offset();

                    $(doc).on(duringDragEvents);
                    $(doc.body).addClass("sp-dragging");

                    move(e);

                    prevent(e);
                }
            }
        }

        function stop() {
            if (dragging) {
                $(doc).off(duringDragEvents);
                $(doc.body).removeClass("sp-dragging");

                // Wait a tick before notifying observers to allow the click event
                // to fire in Chrome.
                setTimeout(function() {
                    onstop.apply(element, arguments);
                }, 0);
            }
            dragging = false;
        }

        $(element).on("touchstart mousedown", start);
    }

    function throttle(func, wait, debounce) {
        var timeout;
        return function () {
            var context = this, args = arguments;
            var throttler = function () {
                timeout = null;
                func.apply(context, args);
            };
            if (debounce) clearTimeout(timeout);
            if (debounce || !timeout) timeout = setTimeout(throttler, wait);
        };
    }

    function inputTypeColorSupport() {
        return $.fn.spectrum.inputTypeColorSupport();
    }

    /**
    * Define a jQuery plugin
    */
    var dataID = "spectrum.id";
    $.fn.spectrum = function (opts, extra) {

        if (typeof opts == "string") {

            var returnValue = this;
            var args = Array.prototype.slice.call( arguments, 1 );

            this.each(function () {
                var spect = spectrums[$(this).data(dataID)];
                if (spect) {
                    var method = spect[opts];
                    if (!method) {
                        throw new Error( "Spectrum: no such method: '" + opts + "'" );
                    }

                    if (opts == "get") {
                        returnValue = spect.get();
                    }
                    else if (opts == "container") {
                        returnValue = spect.container;
                    }
                    else if (opts == "option") {
                        returnValue = spect.option.apply(spect, args);
                    }
                    else if (opts == "destroy") {
                        spect.destroy();
                        $(this).removeData(dataID);
                    }
                    else {
                        method.apply(spect, args);
                    }
                }
            });

            return returnValue;
        }

        // Initializing a new instance of spectrum
        return this.spectrum("destroy").each(function () {
            var options = $.extend({}, $(this).data(), opts);
            var spect = spectrum(this, options);
            $(this).data(dataID, spect.id);
        });
    };

    $.fn.spectrum.load = true;
    $.fn.spectrum.loadOpts = {};
    $.fn.spectrum.draggable = draggable;
    $.fn.spectrum.defaults = defaultOpts;
    $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {
        if (typeof inputTypeColorSupport._cachedResult === "undefined") {
            var colorInput = $("<input type='color'/>")[0]; // if color element is supported, value will default to not null
            inputTypeColorSupport._cachedResult = colorInput.type === "color" && colorInput.value !== "";
        }
        return inputTypeColorSupport._cachedResult;
    };

    $.spectrum = { };
    $.spectrum.localization = { };
    $.spectrum.palettes = { };

    $.fn.spectrum.processNativeColorInputs = function () {
        var colorInputs = $("input[type=color]");
        if (colorInputs.length && !inputTypeColorSupport()) {
            colorInputs.spectrum({
                preferredFormat: "hex6"
            });
        }
    };

    // TinyColor v1.1.2
    // https://github.com/bgrins/TinyColor
    // Brian Grinstead, MIT License

    (function() {

    var trimLeft = /^[\s,#]+/,
        trimRight = /\s+$/,
        tinyCounter = 0,
        math = Math,
        mathRound = math.round,
        mathMin = math.min,
        mathMax = math.max,
        mathRandom = math.random;

    var tinycolor = function(color, opts) {

        color = (color) ? color : '';
        opts = opts || { };

        // If input is already a tinycolor, return itself
        if (color instanceof tinycolor) {
           return color;
        }
        // If we are called as a function, call using new instead
        if (!(this instanceof tinycolor)) {
            return new tinycolor(color, opts);
        }

        var rgb = inputToRGB(color);
        this._originalInput = color;
        this._r = rgb.r;
        this._g = rgb.g;
        this._b = rgb.b;
        this._a = rgb.a;
        this._roundA = mathRound(1000 * this._a) / 1000;
        this._format = opts.format || rgb.format;
        this._gradientType = opts.gradientType;

        // Don't let the range of [0,255] come back in [0,1].
        // Potentially lose a little bit of precision here, but will fix issues where
        // .5 gets interpreted as half of the total, instead of half of 1
        // If it was supposed to be 128, this was already taken care of by `inputToRgb`
        if (this._r < 1) { this._r = mathRound(this._r); }
        if (this._g < 1) { this._g = mathRound(this._g); }
        if (this._b < 1) { this._b = mathRound(this._b); }

        this._ok = rgb.ok;
        this._tc_id = tinyCounter++;
    };

    tinycolor.prototype = {
        isDark: function() {
            return this.getBrightness() < 128;
        },
        isLight: function() {
            return !this.isDark();
        },
        isValid: function() {
            return this._ok;
        },
        getOriginalInput: function() {
          return this._originalInput;
        },
        getFormat: function() {
            return this._format;
        },
        getAlpha: function() {
            return this._a;
        },
        getBrightness: function() {
            var rgb = this.toRgb();
            return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
        },
        setAlpha: function(value) {
            this._a = boundAlpha(value);
            this._roundA = mathRound(1000 * this._a) / 1000;
            return this;
        },
        toHsv: function() {
            var hsv = rgbToHsv(this._r, this._g, this._b);
            return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
        },
        toHsvString: function() {
            var hsv = rgbToHsv(this._r, this._g, this._b);
            var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
            return (this._a == 1) ?
              "hsv("  + h + ", " + s + "%, " + v + "%)" :
              "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
        },
        toHsl: function() {
            var hsl = rgbToHsl(this._r, this._g, this._b);
            return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
        },
        toHslString: function() {
            var hsl = rgbToHsl(this._r, this._g, this._b);
            var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
            return (this._a == 1) ?
              "hsl("  + h + ", " + s + "%, " + l + "%)" :
              "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
        },
        toHex: function(allow3Char) {
            return rgbToHex(this._r, this._g, this._b, allow3Char);
        },
        toHexString: function(allow3Char) {
            return '#' + this.toHex(allow3Char);
        },
        toHex8: function() {
            return rgbaToHex(this._r, this._g, this._b, this._a);
        },
        toHex8String: function() {
            return '#' + this.toHex8();
        },
        toRgb: function() {
            return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
        },
        toRgbString: function() {
            return (this._a == 1) ?
              "rgb("  + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
              "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
        },
        toPercentageRgb: function() {
            return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
        },
        toPercentageRgbString: function() {
            return (this._a == 1) ?
              "rgb("  + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
              "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
        },
        toName: function() {
            if (this._a === 0) {
                return "transparent";
            }

            if (this._a < 1) {
                return false;
            }

            return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
        },
        toFilter: function(secondColor) {
            var hex8String = '#' + rgbaToHex(this._r, this._g, this._b, this._a);
            var secondHex8String = hex8String;
            var gradientType = this._gradientType ? "GradientType = 1, " : "";

            if (secondColor) {
                var s = tinycolor(secondColor);
                secondHex8String = s.toHex8String();
            }

            return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
        },
        toString: function(format) {
            var formatSet = !!format;
            format = format || this._format;

            var formattedString = false;
            var hasAlpha = this._a < 1 && this._a >= 0;
            var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "name");

            if (needsAlphaFormat) {
                // Special case for "transparent", all other non-alpha formats
                // will return rgba when there is transparency.
                if (format === "name" && this._a === 0) {
                    return this.toName();
                }
                return this.toRgbString();
            }
            if (format === "rgb") {
                formattedString = this.toRgbString();
            }
            if (format === "prgb") {
                formattedString = this.toPercentageRgbString();
            }
            if (format === "hex" || format === "hex6") {
                formattedString = this.toHexString();
            }
            if (format === "hex3") {
                formattedString = this.toHexString(true);
            }
            if (format === "hex8") {
                formattedString = this.toHex8String();
            }
            if (format === "name") {
                formattedString = this.toName();
            }
            if (format === "hsl") {
                formattedString = this.toHslString();
            }
            if (format === "hsv") {
                formattedString = this.toHsvString();
            }

            return formattedString || this.toHexString();
        },

        _applyModification: function(fn, args) {
            var color = fn.apply(null, [this].concat([].slice.call(args)));
            this._r = color._r;
            this._g = color._g;
            this._b = color._b;
            this.setAlpha(color._a);
            return this;
        },
        lighten: function() {
            return this._applyModification(lighten, arguments);
        },
        brighten: function() {
            return this._applyModification(brighten, arguments);
        },
        darken: function() {
            return this._applyModification(darken, arguments);
        },
        desaturate: function() {
            return this._applyModification(desaturate, arguments);
        },
        saturate: function() {
            return this._applyModification(saturate, arguments);
        },
        greyscale: function() {
            return this._applyModification(greyscale, arguments);
        },
        spin: function() {
            return this._applyModification(spin, arguments);
        },

        _applyCombination: function(fn, args) {
            return fn.apply(null, [this].concat([].slice.call(args)));
        },
        analogous: function() {
            return this._applyCombination(analogous, arguments);
        },
        complement: function() {
            return this._applyCombination(complement, arguments);
        },
        monochromatic: function() {
            return this._applyCombination(monochromatic, arguments);
        },
        splitcomplement: function() {
            return this._applyCombination(splitcomplement, arguments);
        },
        triad: function() {
            return this._applyCombination(triad, arguments);
        },
        tetrad: function() {
            return this._applyCombination(tetrad, arguments);
        }
    };

    // If input is an object, force 1 into "1.0" to handle ratios properly
    // String input requires "1.0" as input, so 1 will be treated as 1
    tinycolor.fromRatio = function(color, opts) {
        if (typeof color == "object") {
            var newColor = {};
            for (var i in color) {
                if (color.hasOwnProperty(i)) {
                    if (i === "a") {
                        newColor[i] = color[i];
                    }
                    else {
                        newColor[i] = convertToPercentage(color[i]);
                    }
                }
            }
            color = newColor;
        }

        return tinycolor(color, opts);
    };

    // Given a string or object, convert that input to RGB
    // Possible string inputs:
    //
    //     "red"
    //     "#f00" or "f00"
    //     "#ff0000" or "ff0000"
    //     "#ff000000" or "ff000000"
    //     "rgb 255 0 0" or "rgb (255, 0, 0)"
    //     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
    //     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
    //     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
    //     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
    //     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
    //     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
    //
    function inputToRGB(color) {

        var rgb = { r: 0, g: 0, b: 0 };
        var a = 1;
        var ok = false;
        var format = false;

        if (typeof color == "string") {
            color = stringInputToObject(color);
        }

        if (typeof color == "object") {
            if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) {
                rgb = rgbToRgb(color.r, color.g, color.b);
                ok = true;
                format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
            }
            else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) {
                color.s = convertToPercentage(color.s);
                color.v = convertToPercentage(color.v);
                rgb = hsvToRgb(color.h, color.s, color.v);
                ok = true;
                format = "hsv";
            }
            else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) {
                color.s = convertToPercentage(color.s);
                color.l = convertToPercentage(color.l);
                rgb = hslToRgb(color.h, color.s, color.l);
                ok = true;
                format = "hsl";
            }

            if (color.hasOwnProperty("a")) {
                a = color.a;
            }
        }

        a = boundAlpha(a);

        return {
            ok: ok,
            format: color.format || format,
            r: mathMin(255, mathMax(rgb.r, 0)),
            g: mathMin(255, mathMax(rgb.g, 0)),
            b: mathMin(255, mathMax(rgb.b, 0)),
            a: a
        };
    }


    // Conversion Functions
    // --------------------

    // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
    // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>

    // `rgbToRgb`
    // Handle bounds / percentage checking to conform to CSS color spec
    // <http://www.w3.org/TR/css3-color/>
    // *Assumes:* r, g, b in [0, 255] or [0, 1]
    // *Returns:* { r, g, b } in [0, 255]
    function rgbToRgb(r, g, b){
        return {
            r: bound01(r, 255) * 255,
            g: bound01(g, 255) * 255,
            b: bound01(b, 255) * 255
        };
    }

    // `rgbToHsl`
    // Converts an RGB color value to HSL.
    // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
    // *Returns:* { h, s, l } in [0,1]
    function rgbToHsl(r, g, b) {

        r = bound01(r, 255);
        g = bound01(g, 255);
        b = bound01(b, 255);

        var max = mathMax(r, g, b), min = mathMin(r, g, b);
        var h, s, l = (max + min) / 2;

        if(max == min) {
            h = s = 0; // achromatic
        }
        else {
            var d = max - min;
            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
            switch(max) {
                case r: h = (g - b) / d + (g < b ? 6 : 0); break;
                case g: h = (b - r) / d + 2; break;
                case b: h = (r - g) / d + 4; break;
            }

            h /= 6;
        }

        return { h: h, s: s, l: l };
    }

    // `hslToRgb`
    // Converts an HSL color value to RGB.
    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
    // *Returns:* { r, g, b } in the set [0, 255]
    function hslToRgb(h, s, l) {
        var r, g, b;

        h = bound01(h, 360);
        s = bound01(s, 100);
        l = bound01(l, 100);

        function hue2rgb(p, q, t) {
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1/6) return p + (q - p) * 6 * t;
            if(t < 1/2) return q;
            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        }

        if(s === 0) {
            r = g = b = l; // achromatic
        }
        else {
            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
            var p = 2 * l - q;
            r = hue2rgb(p, q, h + 1/3);
            g = hue2rgb(p, q, h);
            b = hue2rgb(p, q, h - 1/3);
        }

        return { r: r * 255, g: g * 255, b: b * 255 };
    }

    // `rgbToHsv`
    // Converts an RGB color value to HSV
    // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
    // *Returns:* { h, s, v } in [0,1]
    function rgbToHsv(r, g, b) {

        r = bound01(r, 255);
        g = bound01(g, 255);
        b = bound01(b, 255);

        var max = mathMax(r, g, b), min = mathMin(r, g, b);
        var h, s, v = max;

        var d = max - min;
        s = max === 0 ? 0 : d / max;

        if(max == min) {
            h = 0; // achromatic
        }
        else {
            switch(max) {
                case r: h = (g - b) / d + (g < b ? 6 : 0); break;
                case g: h = (b - r) / d + 2; break;
                case b: h = (r - g) / d + 4; break;
            }
            h /= 6;
        }
        return { h: h, s: s, v: v };
    }

    // `hsvToRgb`
    // Converts an HSV color value to RGB.
    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
    // *Returns:* { r, g, b } in the set [0, 255]
     function hsvToRgb(h, s, v) {

        h = bound01(h, 360) * 6;
        s = bound01(s, 100);
        v = bound01(v, 100);

        var i = math.floor(h),
            f = h - i,
            p = v * (1 - s),
            q = v * (1 - f * s),
            t = v * (1 - (1 - f) * s),
            mod = i % 6,
            r = [v, q, p, p, t, v][mod],
            g = [t, v, v, q, p, p][mod],
            b = [p, p, t, v, v, q][mod];

        return { r: r * 255, g: g * 255, b: b * 255 };
    }

    // `rgbToHex`
    // Converts an RGB color to hex
    // Assumes r, g, and b are contained in the set [0, 255]
    // Returns a 3 or 6 character hex
    function rgbToHex(r, g, b, allow3Char) {

        var hex = [
            pad2(mathRound(r).toString(16)),
            pad2(mathRound(g).toString(16)),
            pad2(mathRound(b).toString(16))
        ];

        // Return a 3 character hex if possible
        if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
            return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
        }

        return hex.join("");
    }
        // `rgbaToHex`
        // Converts an RGBA color plus alpha transparency to hex
        // Assumes r, g, b and a are contained in the set [0, 255]
        // Returns an 8 character hex
        function rgbaToHex(r, g, b, a) {

            var hex = [
                pad2(convertDecimalToHex(a)),
                pad2(mathRound(r).toString(16)),
                pad2(mathRound(g).toString(16)),
                pad2(mathRound(b).toString(16))
            ];

            return hex.join("");
        }

    // `equals`
    // Can be called with any tinycolor input
    tinycolor.equals = function (color1, color2) {
        if (!color1 || !color2) { return false; }
        return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
    };
    tinycolor.random = function() {
        return tinycolor.fromRatio({
            r: mathRandom(),
            g: mathRandom(),
            b: mathRandom()
        });
    };


    // Modification Functions
    // ----------------------
    // Thanks to less.js for some of the basics here
    // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>

    function desaturate(color, amount) {
        amount = (amount === 0) ? 0 : (amount || 10);
        var hsl = tinycolor(color).toHsl();
        hsl.s -= amount / 100;
        hsl.s = clamp01(hsl.s);
        return tinycolor(hsl);
    }

    function saturate(color, amount) {
        amount = (amount === 0) ? 0 : (amount || 10);
        var hsl = tinycolor(color).toHsl();
        hsl.s += amount / 100;
        hsl.s = clamp01(hsl.s);
        return tinycolor(hsl);
    }

    function greyscale(color) {
        return tinycolor(color).desaturate(100);
    }

    function lighten (color, amount) {
        amount = (amount === 0) ? 0 : (amount || 10);
        var hsl = tinycolor(color).toHsl();
        hsl.l += amount / 100;
        hsl.l = clamp01(hsl.l);
        return tinycolor(hsl);
    }

    function brighten(color, amount) {
        amount = (amount === 0) ? 0 : (amount || 10);
        var rgb = tinycolor(color).toRgb();
        rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
        rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
        rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
        return tinycolor(rgb);
    }

    function darken (color, amount) {
        amount = (amount === 0) ? 0 : (amount || 10);
        var hsl = tinycolor(color).toHsl();
        hsl.l -= amount / 100;
        hsl.l = clamp01(hsl.l);
        return tinycolor(hsl);
    }

    // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
    // Values outside of this range will be wrapped into this range.
    function spin(color, amount) {
        var hsl = tinycolor(color).toHsl();
        var hue = (mathRound(hsl.h) + amount) % 360;
        hsl.h = hue < 0 ? 360 + hue : hue;
        return tinycolor(hsl);
    }

    // Combination Functions
    // ---------------------
    // Thanks to jQuery xColor for some of the ideas behind these
    // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>

    function complement(color) {
        var hsl = tinycolor(color).toHsl();
        hsl.h = (hsl.h + 180) % 360;
        return tinycolor(hsl);
    }

    function triad(color) {
        var hsl = tinycolor(color).toHsl();
        var h = hsl.h;
        return [
            tinycolor(color),
            tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
            tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
        ];
    }

    function tetrad(color) {
        var hsl = tinycolor(color).toHsl();
        var h = hsl.h;
        return [
            tinycolor(color),
            tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
            tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
            tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
        ];
    }

    function splitcomplement(color) {
        var hsl = tinycolor(color).toHsl();
        var h = hsl.h;
        return [
            tinycolor(color),
            tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
            tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
        ];
    }

    function analogous(color, results, slices) {
        results = results || 6;
        slices = slices || 30;

        var hsl = tinycolor(color).toHsl();
        var part = 360 / slices;
        var ret = [tinycolor(color)];

        for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
            hsl.h = (hsl.h + part) % 360;
            ret.push(tinycolor(hsl));
        }
        return ret;
    }

    function monochromatic(color, results) {
        results = results || 6;
        var hsv = tinycolor(color).toHsv();
        var h = hsv.h, s = hsv.s, v = hsv.v;
        var ret = [];
        var modification = 1 / results;

        while (results--) {
            ret.push(tinycolor({ h: h, s: s, v: v}));
            v = (v + modification) % 1;
        }

        return ret;
    }

    // Utility Functions
    // ---------------------

    tinycolor.mix = function(color1, color2, amount) {
        amount = (amount === 0) ? 0 : (amount || 50);

        var rgb1 = tinycolor(color1).toRgb();
        var rgb2 = tinycolor(color2).toRgb();

        var p = amount / 100;
        var w = p * 2 - 1;
        var a = rgb2.a - rgb1.a;

        var w1;

        if (w * a == -1) {
            w1 = w;
        } else {
            w1 = (w + a) / (1 + w * a);
        }

        w1 = (w1 + 1) / 2;

        var w2 = 1 - w1;

        var rgba = {
            r: rgb2.r * w1 + rgb1.r * w2,
            g: rgb2.g * w1 + rgb1.g * w2,
            b: rgb2.b * w1 + rgb1.b * w2,
            a: rgb2.a * p  + rgb1.a * (1 - p)
        };

        return tinycolor(rgba);
    };


    // Readability Functions
    // ---------------------
    // <http://www.w3.org/TR/AERT#color-contrast>

    // `readability`
    // Analyze the 2 colors and returns an object with the following properties:
    //    `brightness`: difference in brightness between the two colors
    //    `color`: difference in color/hue between the two colors
    tinycolor.readability = function(color1, color2) {
        var c1 = tinycolor(color1);
        var c2 = tinycolor(color2);
        var rgb1 = c1.toRgb();
        var rgb2 = c2.toRgb();
        var brightnessA = c1.getBrightness();
        var brightnessB = c2.getBrightness();
        var colorDiff = (
            Math.max(rgb1.r, rgb2.r) - Math.min(rgb1.r, rgb2.r) +
            Math.max(rgb1.g, rgb2.g) - Math.min(rgb1.g, rgb2.g) +
            Math.max(rgb1.b, rgb2.b) - Math.min(rgb1.b, rgb2.b)
        );

        return {
            brightness: Math.abs(brightnessA - brightnessB),
            color: colorDiff
        };
    };

    // `readable`
    // http://www.w3.org/TR/AERT#color-contrast
    // Ensure that foreground and background color combinations provide sufficient contrast.
    // *Example*
    //    tinycolor.isReadable("#000", "#111") => false
    tinycolor.isReadable = function(color1, color2) {
        var readability = tinycolor.readability(color1, color2);
        return readability.brightness > 125 && readability.color > 500;
    };

    // `mostReadable`
    // Given a base color and a list of possible foreground or background
    // colors for that base, returns the most readable color.
    // *Example*
    //    tinycolor.mostReadable("#123", ["#fff", "#000"]) => "#000"
    tinycolor.mostReadable = function(baseColor, colorList) {
        var bestColor = null;
        var bestScore = 0;
        var bestIsReadable = false;
        for (var i=0; i < colorList.length; i++) {

            // We normalize both around the "acceptable" breaking point,
            // but rank brightness constrast higher than hue.

            var readability = tinycolor.readability(baseColor, colorList[i]);
            var readable = readability.brightness > 125 && readability.color > 500;
            var score = 3 * (readability.brightness / 125) + (readability.color / 500);

            if ((readable && ! bestIsReadable) ||
                (readable && bestIsReadable && score > bestScore) ||
                ((! readable) && (! bestIsReadable) && score > bestScore)) {
                bestIsReadable = readable;
                bestScore = score;
                bestColor = tinycolor(colorList[i]);
            }
        }
        return bestColor;
    };


    // Big List of Colors
    // ------------------
    // <http://www.w3.org/TR/css3-color/#svg-color>
    var names = tinycolor.names = {
        aliceblue: "f0f8ff",
        antiquewhite: "faebd7",
        aqua: "0ff",
        aquamarine: "7fffd4",
        azure: "f0ffff",
        beige: "f5f5dc",
        bisque: "ffe4c4",
        black: "000",
        blanchedalmond: "ffebcd",
        blue: "00f",
        blueviolet: "8a2be2",
        brown: "a52a2a",
        burlywood: "deb887",
        burntsienna: "ea7e5d",
        cadetblue: "5f9ea0",
        chartreuse: "7fff00",
        chocolate: "d2691e",
        coral: "ff7f50",
        cornflowerblue: "6495ed",
        cornsilk: "fff8dc",
        crimson: "dc143c",
        cyan: "0ff",
        darkblue: "00008b",
        darkcyan: "008b8b",
        darkgoldenrod: "b8860b",
        darkgray: "a9a9a9",
        darkgreen: "006400",
        darkgrey: "a9a9a9",
        darkkhaki: "bdb76b",
        darkmagenta: "8b008b",
        darkolivegreen: "556b2f",
        darkorange: "ff8c00",
        darkorchid: "9932cc",
        darkred: "8b0000",
        darksalmon: "e9967a",
        darkseagreen: "8fbc8f",
        darkslateblue: "483d8b",
        darkslategray: "2f4f4f",
        darkslategrey: "2f4f4f",
        darkturquoise: "00ced1",
        darkviolet: "9400d3",
        deeppink: "ff1493",
        deepskyblue: "00bfff",
        dimgray: "696969",
        dimgrey: "696969",
        dodgerblue: "1e90ff",
        firebrick: "b22222",
        floralwhite: "fffaf0",
        forestgreen: "228b22",
        fuchsia: "f0f",
        gainsboro: "dcdcdc",
        ghostwhite: "f8f8ff",
        gold: "ffd700",
        goldenrod: "daa520",
        gray: "808080",
        green: "008000",
        greenyellow: "adff2f",
        grey: "808080",
        honeydew: "f0fff0",
        hotpink: "ff69b4",
        indianred: "cd5c5c",
        indigo: "4b0082",
        ivory: "fffff0",
        khaki: "f0e68c",
        lavender: "e6e6fa",
        lavenderblush: "fff0f5",
        lawngreen: "7cfc00",
        lemonchiffon: "fffacd",
        lightblue: "add8e6",
        lightcoral: "f08080",
        lightcyan: "e0ffff",
        lightgoldenrodyellow: "fafad2",
        lightgray: "d3d3d3",
        lightgreen: "90ee90",
        lightgrey: "d3d3d3",
        lightpink: "ffb6c1",
        lightsalmon: "ffa07a",
        lightseagreen: "20b2aa",
        lightskyblue: "87cefa",
        lightslategray: "789",
        lightslategrey: "789",
        lightsteelblue: "b0c4de",
        lightyellow: "ffffe0",
        lime: "0f0",
        limegreen: "32cd32",
        linen: "faf0e6",
        magenta: "f0f",
        maroon: "800000",
        mediumaquamarine: "66cdaa",
        mediumblue: "0000cd",
        mediumorchid: "ba55d3",
        mediumpurple: "9370db",
        mediumseagreen: "3cb371",
        mediumslateblue: "7b68ee",
        mediumspringgreen: "00fa9a",
        mediumturquoise: "48d1cc",
        mediumvioletred: "c71585",
        midnightblue: "191970",
        mintcream: "f5fffa",
        mistyrose: "ffe4e1",
        moccasin: "ffe4b5",
        navajowhite: "ffdead",
        navy: "000080",
        oldlace: "fdf5e6",
        olive: "808000",
        olivedrab: "6b8e23",
        orange: "ffa500",
        orangered: "ff4500",
        orchid: "da70d6",
        palegoldenrod: "eee8aa",
        palegreen: "98fb98",
        paleturquoise: "afeeee",
        palevioletred: "db7093",
        papayawhip: "ffefd5",
        peachpuff: "ffdab9",
        peru: "cd853f",
        pink: "ffc0cb",
        plum: "dda0dd",
        powderblue: "b0e0e6",
        purple: "800080",
        rebeccapurple: "663399",
        red: "f00",
        rosybrown: "bc8f8f",
        royalblue: "4169e1",
        saddlebrown: "8b4513",
        salmon: "fa8072",
        sandybrown: "f4a460",
        seagreen: "2e8b57",
        seashell: "fff5ee",
        sienna: "a0522d",
        silver: "c0c0c0",
        skyblue: "87ceeb",
        slateblue: "6a5acd",
        slategray: "708090",
        slategrey: "708090",
        snow: "fffafa",
        springgreen: "00ff7f",
        steelblue: "4682b4",
        tan: "d2b48c",
        teal: "008080",
        thistle: "d8bfd8",
        tomato: "ff6347",
        turquoise: "40e0d0",
        violet: "ee82ee",
        wheat: "f5deb3",
        white: "fff",
        whitesmoke: "f5f5f5",
        yellow: "ff0",
        yellowgreen: "9acd32"
    };

    // Make it easy to access colors via `hexNames[hex]`
    var hexNames = tinycolor.hexNames = flip(names);


    // Utilities
    // ---------

    // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
    function flip(o) {
        var flipped = { };
        for (var i in o) {
            if (o.hasOwnProperty(i)) {
                flipped[o[i]] = i;
            }
        }
        return flipped;
    }

    // Return a valid alpha value [0,1] with all invalid values being set to 1
    function boundAlpha(a) {
        a = parseFloat(a);

        if (isNaN(a) || a < 0 || a > 1) {
            a = 1;
        }

        return a;
    }

    // Take input from [0, n] and return it as [0, 1]
    function bound01(n, max) {
        if (isOnePointZero(n)) { n = "100%"; }

        var processPercent = isPercentage(n);
        n = mathMin(max, mathMax(0, parseFloat(n)));

        // Automatically convert percentage into number
        if (processPercent) {
            n = parseInt(n * max, 10) / 100;
        }

        // Handle floating point rounding errors
        if ((math.abs(n - max) < 0.000001)) {
            return 1;
        }

        // Convert into [0, 1] range if it isn't already
        return (n % max) / parseFloat(max);
    }

    // Force a number between 0 and 1
    function clamp01(val) {
        return mathMin(1, mathMax(0, val));
    }

    // Parse a base-16 hex value into a base-10 integer
    function parseIntFromHex(val) {
        return parseInt(val, 16);
    }

    // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
    function isOnePointZero(n) {
        return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
    }

    // Check to see if string passed in is a percentage
    function isPercentage(n) {
        return typeof n === "string" && n.indexOf('%') != -1;
    }

    // Force a hex value to have 2 characters
    function pad2(c) {
        return c.length == 1 ? '0' + c : '' + c;
    }

    // Replace a decimal with it's percentage value
    function convertToPercentage(n) {
        if (n <= 1) {
            n = (n * 100) + "%";
        }

        return n;
    }

    // Converts a decimal to a hex value
    function convertDecimalToHex(d) {
        return Math.round(parseFloat(d) * 255).toString(16);
    }
    // Converts a hex value to a decimal
    function convertHexToDecimal(h) {
        return (parseIntFromHex(h) / 255);
    }

    var matchers = (function() {

        // <http://www.w3.org/TR/css3-values/#integers>
        var CSS_INTEGER = "[-\\+]?\\d+%?";

        // <http://www.w3.org/TR/css3-values/#number-value>
        var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";

        // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
        var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";

        // Actual matching.
        // Parentheses and commas are optional, but not required.
        // Whitespace can take the place of commas or opening paren
        var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
        var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";

        return {
            rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
            rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
            hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
            hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
            hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
            hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
            hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
            hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
            hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
        };
    })();

    // `stringInputToObject`
    // Permissive string parsing.  Take in a number of formats, and output an object
    // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
    function stringInputToObject(color) {

        color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();
        var named = false;
        if (names[color]) {
            color = names[color];
            named = true;
        }
        else if (color == 'transparent') {
            return { r: 0, g: 0, b: 0, a: 0, format: "name" };
        }

        // Try to match string input using regular expressions.
        // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
        // Just return an object and let the conversion functions handle that.
        // This way the result will be the same whether the tinycolor is initialized with string or object.
        var match;
        if ((match = matchers.rgb.exec(color))) {
            return { r: match[1], g: match[2], b: match[3] };
        }
        if ((match = matchers.rgba.exec(color))) {
            return { r: match[1], g: match[2], b: match[3], a: match[4] };
        }
        if ((match = matchers.hsl.exec(color))) {
            return { h: match[1], s: match[2], l: match[3] };
        }
        if ((match = matchers.hsla.exec(color))) {
            return { h: match[1], s: match[2], l: match[3], a: match[4] };
        }
        if ((match = matchers.hsv.exec(color))) {
            return { h: match[1], s: match[2], v: match[3] };
        }
        if ((match = matchers.hsva.exec(color))) {
            return { h: match[1], s: match[2], v: match[3], a: match[4] };
        }
        if ((match = matchers.hex8.exec(color))) {
            return {
                a: convertHexToDecimal(match[1]),
                r: parseIntFromHex(match[2]),
                g: parseIntFromHex(match[3]),
                b: parseIntFromHex(match[4]),
                format: named ? "name" : "hex8"
            };
        }
        if ((match = matchers.hex6.exec(color))) {
            return {
                r: parseIntFromHex(match[1]),
                g: parseIntFromHex(match[2]),
                b: parseIntFromHex(match[3]),
                format: named ? "name" : "hex"
            };
        }
        if ((match = matchers.hex3.exec(color))) {
            return {
                r: parseIntFromHex(match[1] + '' + match[1]),
                g: parseIntFromHex(match[2] + '' + match[2]),
                b: parseIntFromHex(match[3] + '' + match[3]),
                format: named ? "name" : "hex"
            };
        }

        return false;
    }

    window.tinycolor = tinycolor;
    })();

    $(function () {
        if ($.fn.spectrum.load) {
            $.fn.spectrum.processNativeColorInputs();
        }
    });

});
;
/*
     _ _      _       _
 ___| (_) ___| | __  (_)___
/ __| | |/ __| |/ /  | / __|
\__ \ | | (__|   < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
                   |__/

 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;
}));
;
/**
 * @license jquery.panzoom.js v@VERSION
 * Updated: @DATE
 * Add pan and zoom functionality to any element
 * Copyright (c) timmy willison
 * Released under the MIT license
 * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt
 */

(function(global, factory) {
	// AMD
	if (typeof define === 'function' && define.amd) {
		define([ 'jquery', './pointertouch' ], function(jQuery) {
			return factory(global, jQuery);
		});
	// CommonJS/Browserify
	} else if (typeof exports === 'object') {
		factory(global, require('jquery'), require('./pointertouch'));
	// Global
	} else {
		factory(global, global.jQuery);
	}
}(typeof window !== 'undefined' ? window : this, function(window, $) {
	'use strict';

	// INSERT FIXHOOK

	var document = window.document;
	var datakey = '__pz__';
	var slice = Array.prototype.slice;
	var pointerEvents = !!window.PointerEvent;
	var supportsInputEvent = (function() {
		var input = document.createElement('input');
		input.setAttribute('oninput', 'return');
		return typeof input.oninput === 'function';
	})();

	// Regex
	var rupper = /([A-Z])/g;
	var rsvg = /^http:[\w\.\/]+svg$/;
	var rinline = /^inline/;

	var floating = '(\\-?[\\d\\.e]+)';
	var commaSpace = '\\,?\\s*';
	var rmatrix = new RegExp(
		'^matrix\\(' +
		floating + commaSpace +
		floating + commaSpace +
		floating + commaSpace +
		floating + commaSpace +
		floating + commaSpace +
		floating + '\\)$'
	);

	/**
	 * Utility for determing transform matrix equality
	 * Checks backwards to test translation first
	 * @param {Array} first
	 * @param {Array} second
	 */
	function matrixEquals(first, second) {
		var i = first.length;
		while(--i) {
			if (+first[i] !== +second[i]) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Creates the options object for reset functions
	 * @param {Boolean|Object} opts See reset methods
	 * @returns {Object} Returns the newly-created options object
	 */
	function createResetOptions(opts) {
		var options = { range: true, animate: true };
		if (typeof opts === 'boolean') {
			options.animate = opts;
		} else {
			$.extend(options, opts);
		}
		return options;
	}

	/**
	 * Represent a transformation matrix with a 3x3 matrix for calculations
	 * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)
	 * @param {Array|Number} a An array of six values representing a 2d transformation matrix
	 */
	function Matrix(a, b, c, d, e, f, g, h, i) {
		if ($.type(a) === 'array') {
			this.elements = [
				+a[0], +a[2], +a[4],
				+a[1], +a[3], +a[5],
				    0,     0,     1
			];
		} else {
			this.elements = [
				a, b, c,
				d, e, f,
				g || 0, h || 0, i || 1
			];
		}
	}

	Matrix.prototype = {
		/**
		 * Multiply a 3x3 matrix by a similar matrix or a vector
		 * @param {Matrix|Vector} matrix
		 * @return {Matrix|Vector} Returns a vector if multiplying by a vector
		 */
		x: function(matrix) {
			var isVector = matrix instanceof Vector;

			var a = this.elements,
				b = matrix.elements;

			if (isVector && b.length === 3) {
				// b is actually a vector
				return new Vector(
					a[0] * b[0] + a[1] * b[1] + a[2] * b[2],
					a[3] * b[0] + a[4] * b[1] + a[5] * b[2],
					a[6] * b[0] + a[7] * b[1] + a[8] * b[2]
				);
			} else if (b.length === a.length) {
				// b is a 3x3 matrix
				return new Matrix(
					a[0] * b[0] + a[1] * b[3] + a[2] * b[6],
					a[0] * b[1] + a[1] * b[4] + a[2] * b[7],
					a[0] * b[2] + a[1] * b[5] + a[2] * b[8],

					a[3] * b[0] + a[4] * b[3] + a[5] * b[6],
					a[3] * b[1] + a[4] * b[4] + a[5] * b[7],
					a[3] * b[2] + a[4] * b[5] + a[5] * b[8],

					a[6] * b[0] + a[7] * b[3] + a[8] * b[6],
					a[6] * b[1] + a[7] * b[4] + a[8] * b[7],
					a[6] * b[2] + a[7] * b[5] + a[8] * b[8]
				);
			}
			return false; // fail
		},
		/**
		 * Generates an inverse of the current matrix
		 * @returns {Matrix}
		 */
		inverse: function() {
			var d = 1 / this.determinant(),
				a = this.elements;
			return new Matrix(
				d * ( a[8] * a[4] - a[7] * a[5]),
				d * (-(a[8] * a[1] - a[7] * a[2])),
				d * ( a[5] * a[1] - a[4] * a[2]),

				d * (-(a[8] * a[3] - a[6] * a[5])),
				d * ( a[8] * a[0] - a[6] * a[2]),
				d * (-(a[5] * a[0] - a[3] * a[2])),

				d * ( a[7] * a[3] - a[6] * a[4]),
				d * (-(a[7] * a[0] - a[6] * a[1])),
				d * ( a[4] * a[0] - a[3] * a[1])
			);
		},
		/**
		 * Calculates the determinant of the current matrix
		 * @returns {Number}
		 */
		determinant: function() {
			var a = this.elements;
			return a[0] * (a[8] * a[4] - a[7] * a[5]) - a[3] * (a[8] * a[1] - a[7] * a[2]) + a[6] * (a[5] * a[1] - a[4] * a[2]);
		}
	};

	/**
	 * Create a vector containing three values
	 */
	function Vector(x, y, z) {
		this.elements = [ x, y, z ];
	}

	/**
	 * Get the element at zero-indexed index i
	 * @param {Number} i
	 */
	Vector.prototype.e = Matrix.prototype.e = function(i) {
		return this.elements[ i ];
	};

	/**
	 * Create a Panzoom object for a given element
	 * @constructor
	 * @param {Element} elem - Element to use pan and zoom
	 * @param {Object} [options] - An object literal containing options to override default options
	 *  (See Panzoom.defaults for ones not listed below)
	 * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself
	 *  e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzoom('zoomIn'); });)
	 * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut
	 * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control
	 * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method
	 * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events
	 */
	function Panzoom(elem, options) {

		// Allow instantiation without `new` keyword
		if (!(this instanceof Panzoom)) {
			return new Panzoom(elem, options);
		}

		// Sanity checks
		if (elem.nodeType !== 1) {
			$.error('Panzoom called on non-Element node');
		}
		if (!$.contains(document, elem)) {
			$.error('Panzoom element must be attached to the document');
		}

		// Don't remake
		var d = $.data(elem, datakey);
		if (d) {
			return d;
		}

		// Extend default with given object literal
		// Each instance gets its own options
		this.options = options = $.extend({}, Panzoom.defaults, options);
		this.elem = elem;
		var $elem = this.$elem = $(elem);
		this.$set = options.$set && options.$set.length ? options.$set : $elem;
		this.$doc = $(elem.ownerDocument || document);
		this.$parent = $elem.parent();

		// This is SVG if the namespace is SVG
		// However, while <svg> elements are SVG, we want to treat those like other elements
		this.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';

		this.panning = false;

		// Save the original transform value
		// Save the prefixed transform style key
		// Set the starting transform
		this._buildTransform();

		// Build the appropriately-prefixed transform style property name
		// De-camelcase
		this._transform = !this.isSVG && $.cssProps.transform.replace(rupper, '-$1').toLowerCase();

		// Build the transition value
		this._buildTransition();

		// Build containment dimensions
		this.resetDimensions();

		// Add zoom and reset buttons to `this`
		var $empty = $();
		var self = this;
		$.each([ '$zoomIn', '$zoomOut', '$zoomRange', '$reset' ], function(i, name) {
			self[ name ] = options[ name ] || $empty;
		});

		this.enable();

		// Save the instance
		$.data(elem, datakey, this);
	}

	// Attach regex for possible use (immutable)
	Panzoom.rmatrix = rmatrix;

	// Container for event names
	Panzoom.events = $.pointertouch;

	Panzoom.defaults = {
		// Should always be non-empty
		// Used to bind jQuery events without collisions
		// A guid is not added here as different instantiations/versions of panzoom
		// on the same element is not supported, so don't do it.
		eventNamespace: '.panzoom',

		// Whether or not to transition the scale
		transition: true,

		// Default cursor style for the element
		cursor: 'move',

		// There may be some use cases for zooming without panning or vice versa
		disablePan: false,
		disableZoom: false,

		// The increment at which to zoom
		// adds/subtracts to the scale each time zoomIn/Out is called
		increment: 0.3,

		minScale: 0.4,
		maxScale: 5,

		// The default step for the range input
		// Precendence: default < HTML attribute < option setting
		rangeStep: 0.05,

		// Animation duration (ms)
		duration: 200,
		// CSS easing used for scale transition
		easing: 'ease-in-out',

		// Indicate that the element should be contained within it's parent when panning
		// Note: this does not affect zooming outside of the parent
		// Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)
		// 'invert' is useful for a large panzoom element where you don't want to show anything behind it
		contain: false
	};

	Panzoom.prototype = {
		constructor: Panzoom,

		/**
		 * @returns {Panzoom} Returns the instance
		 */
		instance: function() {
			return this;
		},

		/**
		 * Enable or re-enable the panzoom instance
		 */
		enable: function() {
			// Unbind first
			this._initStyle();
			this._bind();
			this.disabled = false;
		},

		/**
		 * Disable panzoom
		 */
		disable: function() {
			this.disabled = true;
			this._resetStyle();
			this._unbind();
		},

		/**
		 * @returns {Boolean} Returns whether the current panzoom instance is disabled
		 */
		isDisabled: function() {
			return this.disabled;
		},

		/**
		 * Destroy the panzoom instance
		 */
		destroy: function() {
			this.disable();
			$.removeData(this.elem, datakey);
		},

		/**
		 * Builds the restricing dimensions from the containment element
		 * Also used with focal points
		 * Call this method whenever the dimensions of the element or parent are changed
		 */
		resetDimensions: function() {
			// Reset container properties
			var $parent = this.$parent;
			this.container = {
				width: $parent.innerWidth(),
				height: $parent.innerHeight()
			};
			var po = $parent.offset();
			var elem = this.elem;
			var $elem = this.$elem;
			var dims;
			if (this.isSVG) {
				dims = elem.getBoundingClientRect();
				dims = {
					left: dims.left - po.left,
					top: dims.top - po.top,
					width: dims.width,
					height: dims.height,
					margin: { left: 0, top: 0 }
				};
			} else {
				dims = {
					left: $.css(elem, 'left', true) || 0,
					top: $.css(elem, 'top', true) || 0,
					width: $elem.innerWidth(),
					height: $elem.innerHeight(),
					margin: {
						top: $.css(elem, 'marginTop', true) || 0,
						left: $.css(elem, 'marginLeft', true) || 0
					}
				};
			}
			dims.widthBorder = ($.css(elem, 'borderLeftWidth', true) + $.css(elem, 'borderRightWidth', true)) || 0;
			dims.heightBorder = ($.css(elem, 'borderTopWidth', true) + $.css(elem, 'borderBottomWidth', true)) || 0;
			this.dimensions = dims;
		},

		/**
		 * Return the element to it's original transform matrix
		 * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.
		 * @param {Boolean} [options.silent] Silence the reset event
		 */
		reset: function(options) {
			options = createResetOptions(options);
			// Reset the transform to its original value
			var matrix = this.setMatrix(this._origTransform, options);
			if (!options.silent) {
				this._trigger('reset', matrix);
			}
		},

		/**
		 * Only resets zoom level
		 * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()
		 */
		resetZoom: function(options) {
			options = createResetOptions(options);
			var origMatrix = this.getMatrix(this._origTransform);
			options.dValue = origMatrix[ 3 ];
			this.zoom(origMatrix[0], options);
		},

		/**
		 * Only reset panning
		 * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()
		 */
		resetPan: function(options) {
			var origMatrix = this.getMatrix(this._origTransform);
			this.pan(origMatrix[4], origMatrix[5], createResetOptions(options));
		},

		/**
		 * Sets a transform on the $set
		 * @param {String} transform
		 */
		setTransform: function(transform) {
			var method = this.isSVG ? 'attr' : 'style';
			var $set = this.$set;
			var i = $set.length;
			while(i--) {
				$[method]($set[i], 'transform', transform);
			}
		},

		/**
		 * Retrieving the transform is different for SVG
		 *  (unless a style transform is already present)
		 * Uses the $set collection for retrieving the transform
		 * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')
		 *  to have it formatted into matrix format for use by Panzoom
		 * @returns {String} Returns the current transform value of the element
		 */
		getTransform: function(transform) {
			var $set = this.$set;
			var transformElem = $set[0];
			if (transform) {
				this.setTransform(transform);
			} else {
				// Retrieve the transform
				transform = $[this.isSVG ? 'attr' : 'style'](transformElem, 'transform');
			}

			// Convert any transforms set by the user to matrix format
			// by setting to computed
			if (transform !== 'none' && !rmatrix.test(transform)) {
				// Get computed and set for next time
				this.setTransform(transform = $.css(transformElem, 'transform'));
			}

			return transform || 'none';
		},

		/**
		 * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)
		 * @param {String} [transform] matrix-formatted transform value
		 * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix
		 */
		getMatrix: function(transform) {
			var matrix = rmatrix.exec(transform || this.getTransform());
			if (matrix) {
				matrix.shift();
			}
			return matrix || [ 1, 0, 0, 1, 0, 0 ];
		},

		/**
		 * Given a matrix object, quickly set the current matrix of the element
		 * @param {Array|String} matrix
		 * @param {Boolean} [animate] Whether to animate the transform change
		 * @param {Object} [options]
		 * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set
		 * @param {Boolean} [options.contain] Override the global contain option
		 * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.
		 * @param {Boolean} [options.silent] If true, the change event will not be triggered
		 * @returns {Array} Returns the newly-set matrix
		 */
		setMatrix: function(matrix, options) {
			if (this.disabled) { return; }
			if (!options) { options = {}; }
			// Convert to array
			if (typeof matrix === 'string') {
				matrix = this.getMatrix(matrix);
			}
			var dims, container, marginW, marginH, diffW, diffH, left, top, width, height;
			var scale = +matrix[0];
			var $parent = this.$parent;
			var contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;

			// Apply containment
			if (contain) {
				dims = this._checkDims();
				container = this.container;
				width = dims.width + dims.widthBorder;
				height = dims.height + dims.heightBorder;
				// Use absolute value of scale here as negative scale doesn't mean even smaller
				marginW = (width * Math.abs(scale)) > container.width ? ((width * Math.abs(scale)) - container.width) / 2 : 0;
				marginH = (height * Math.abs(scale)) > container.height ? ((height * Math.abs(scale)) - container.height) / 2 : 0;
				left = dims.left + dims.margin.left;
				top = dims.top + dims.margin.top;
				if (contain === 'invert') {
					diffW = width > container.width ? width - container.width : 0;
					diffH = height > container.height ? height - container.height : 0;
					marginW += (container.width - width) / 2;
					marginH += (container.height - height) / 2;
					matrix[4] = Math.max(Math.min(matrix[4], marginW - left), -marginW - left - diffW);
					matrix[5] = Math.max(Math.min(matrix[5], marginH - top), -marginH - top - diffH + dims.heightBorder);
				} else {
					// marginW += dims.widthBorder / 2;
					marginH += dims.heightBorder / 2;
					diffW = container.width > width ? container.width - width : 0;
					diffH = container.height > height ? container.height - height : 0;
					// If the element is not naturally centered, assume full margin right
					if ($parent.css('textAlign') !== 'center' || !rinline.test($.css(this.elem, 'display'))) {
						marginW = marginH = 0;
					} else {
						diffW = 0;
					}
					matrix[4] = Math.min(
						Math.max(matrix[4], marginW - left),
						-marginW - left + diffW
					);
					matrix[5] = Math.min(
						Math.max(matrix[5], marginH - top),
						-marginH - top + diffH
					);
				}
			}
			if (options.animate !== 'skip') {
				// Set transition
				this.transition(!options.animate);
			}
			// Update range
			if (options.range) {
				this.$zoomRange.val(scale);
			}

			// Set the matrix on this.$set
			this.setTransform('matrix(' + matrix.join(',') + ')');

			if (!options.silent) {
				this._trigger('change', matrix);
			}

			return matrix;
		},

		/**
		 * @returns {Boolean} Returns whether the panzoom element is currently being dragged
		 */
		isPanning: function() {
			return this.panning;
		},

		/**
		 * Apply the current transition to the element, if allowed
		 * @param {Boolean} [off] Indicates that the transition should be turned off
		 */
		transition: function(off) {
			if (!this._transition) { return; }
			var transition = off || !this.options.transition ? 'none' : this._transition;
			var $set = this.$set;
			var i = $set.length;
			while(i--) {
				// Avoid reflows when zooming
				if ($.style($set[i], 'transition') !== transition) {
					$.style($set[i], 'transition', transition);
				}
			}
		},

		/**
		 * Pan the element to the specified translation X and Y
		 * Note: this is not the same as setting jQuery#offset() or jQuery#position()
		 * @param {Number} x
		 * @param {Number} y
		 * @param {Object} [options] These options are passed along to setMatrix
		 * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)
		 * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.
		 * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix
		 */
		pan: function(x, y, options) {
			if (this.options.disablePan) { return; }
			if (!options) { options = {}; }
			var matrix = options.matrix;
			if (!matrix) {
				matrix = this.getMatrix();
			}
			// Cast existing matrix values to numbers
			if (options.relative) {
				x += +matrix[4];
				y += +matrix[5];
			}
			matrix[4] = x;
			matrix[5] = y;
			this.setMatrix(matrix, options);
			if (!options.silent) {
				this._trigger('pan', matrix[4], matrix[5]);
			}
		},

		/**
		 * Zoom in/out the element using the scale properties of a transform matrix
		 * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out
		 * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.
		 * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)
		 * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.
		 *  If an object, set the clientX and clientY properties to the position relative to the parent
		 * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)
		 * @param {Boolean} [opts.silent] Silence the zoom event
		 * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved
		 * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d
		 *  where a/d are the horizontal/vertical scale values and b/c are the skew values
		 *  (5 and 6 of matrix array are the tx/ty transform values).
		 *  Normally, the scale is set to both the a and d values of the matrix.
		 *  This option allows you to specify a different d value for the zoom.
		 *  For instance, to flip vertically, you could set -1 as the dValue.
		 */
		zoom: function(scale, opts) {
			// Shuffle arguments
			if (typeof scale === 'object') {
				opts = scale;
				scale = null;
			} else if (!opts) {
				opts = {};
			}
			var options = $.extend({}, this.options, opts);
			// Check if disabled
			if (options.disableZoom) { return; }
			var animate = false;
			var matrix = options.matrix || this.getMatrix();

			// Calculate zoom based on increment
			if (typeof scale !== 'number') {
				scale = +matrix[0] + (options.increment * (scale ? -1 : 1));
				animate = true;
			}

			// Constrain scale
			if (scale > options.maxScale) {
				scale = options.maxScale;
			} else if (scale < options.minScale) {
				scale = options.minScale;
			}

			// Calculate focal point based on scale
			var focal = options.focal;
			if (focal && !options.disablePan) {
				// Adapted from code by Florian Günther
				// https://github.com/florianguenther/zui53
				var dims = this._checkDims();
				var clientX = focal.clientX;
				var clientY = focal.clientY;
				// Adjust the focal point for default transform-origin => 50% 50%
				if (!this.isSVG) {
					clientX -= (dims.width + dims.widthBorder) / 2;
					clientY -= (dims.height + dims.heightBorder) / 2;
				}
				var clientV = new Vector(clientX, clientY, 1);
				var surfaceM = new Matrix(matrix);
				// Supply an offset manually if necessary
				var o = this.parentOffset || this.$parent.offset();
				var offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());
				var surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));
				var scaleBy = scale / matrix[0];
				surfaceM = surfaceM.x(new Matrix([ scaleBy, 0, 0, scaleBy, 0, 0 ]));
				clientV = offsetM.x(surfaceM.x(surfaceV));
				matrix[4] = +matrix[4] + (clientX - clientV.e(0));
				matrix[5] = +matrix[5] + (clientY - clientV.e(1));
			}

			// Set the scale
			matrix[0] = scale;
			matrix[3] = typeof options.dValue === 'number' ? options.dValue : scale;

			// Calling zoom may still pan the element
			this.setMatrix(matrix, {
				animate: typeof options.animate === 'boolean' ? options.animate : animate,
				// Set the zoomRange value
				range: !options.noSetRange
			});

			// Trigger zoom event
			if (!options.silent) {
				this._trigger('zoom', matrix[0], options);
			}
		},

		/**
		 * Get/set option on an existing instance
		 * @returns {Array|undefined} If getting, returns an array of all values
		 *   on each instance for a given key. If setting, continue chaining by returning undefined.
		 */
		option: function(key, value) {
			var options;
			if (!key) {
				// Avoids returning direct reference
				return $.extend({}, this.options);
			}

			if (typeof key === 'string') {
				if (arguments.length === 1) {
					return this.options[ key ] !== undefined ?
						this.options[ key ] :
						null;
				}
				options = {};
				options[ key ] = value;
			} else {
				options = key;
			}

			this._setOptions(options);
		},

		/**
		 * Internally sets options
		 * @param {Object} options - An object literal of options to set
		 */
		_setOptions: function(options) {
			$.each(options, $.proxy(function(key, value) {
				switch(key) {
					case 'disablePan':
						this._resetStyle();
						/* falls through */
					case '$zoomIn':
					case '$zoomOut':
					case '$zoomRange':
					case '$reset':
					case 'disableZoom':
					case 'onStart':
					case 'onChange':
					case 'onZoom':
					case 'onPan':
					case 'onEnd':
					case 'onReset':
					case 'eventNamespace':
						this._unbind();
				}
				this.options[ key ] = value;
				switch(key) {
					case 'disablePan':
						this._initStyle();
						/* falls through */
					case '$zoomIn':
					case '$zoomOut':
					case '$zoomRange':
					case '$reset':
						// Set these on the instance
						this[ key ] = value;
						/* falls through */
					case 'disableZoom':
					case 'onStart':
					case 'onChange':
					case 'onZoom':
					case 'onPan':
					case 'onEnd':
					case 'onReset':
					case 'eventNamespace':
						this._bind();
						break;
					case 'cursor':
						$.style(this.elem, 'cursor', value);
						break;
					case 'minScale':
						this.$zoomRange.attr('min', value);
						break;
					case 'maxScale':
						this.$zoomRange.attr('max', value);
						break;
					case 'rangeStep':
						this.$zoomRange.attr('step', value);
						break;
					case 'startTransform':
						this._buildTransform();
						break;
					case 'duration':
					case 'easing':
						this._buildTransition();
						/* falls through */
					case 'transition':
						this.transition();
						break;
					case '$set':
						if (value instanceof $ && value.length) {
							this.$set = value;
							// Reset styles
							this._initStyle();
							this._buildTransform();
						}
				}
			}, this));
		},

		/**
		 * Initialize base styles for the element and its parent
		 */
		_initStyle: function() {
			var styles = {
				// Promote the element to it's own compositor layer
				'backface-visibility': 'hidden',
				// Set to defaults for the namespace
				'transform-origin': this.isSVG ? '0 0' : '50% 50%'
			};
			// Set elem styles
			if (!this.options.disablePan) {
				styles.cursor = this.options.cursor;
			}
			this.$set.css(styles);

			// Set parent to relative if set to static
			var $parent = this.$parent;
			// No need to add styles to the body
			if ($parent.length && !$.nodeName($parent[0], 'body')) {
				styles = {
					overflow: 'hidden'
				};
				if ($parent.css('position') === 'static') {
					styles.position = 'relative';
				}
				$parent.css(styles);
			}
		},

		/**
		 * Undo any styles attached in this plugin
		 */
		_resetStyle: function() {
			this.$elem.css({
				'cursor': '',
				'transition': ''
			});
			this.$parent.css({
				'overflow': '',
				'position': ''
			});
		},

		/**
		 * Binds all necessary events
		 */
		_bind: function() {
			var self = this;
			var options = this.options;
			var ns = options.eventNamespace;
			var str_start = pointerEvents ? 'pointerdown' + ns : ('touchstart' + ns + ' mousedown' + ns);
			var str_click = pointerEvents ? 'pointerup' + ns : ('touchend' + ns + ' click' + ns);
			var events = {};
			var $reset = this.$reset;
			var $zoomRange = this.$zoomRange;

			// Bind panzoom events from options
			$.each([ 'Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset' ], function() {
				var m = options[ 'on' + this ];
				if ($.isFunction(m)) {
					events[ 'panzoom' + this.toLowerCase() + ns ] = m;
				}
			});

			// Bind $elem drag and click/touchdown events
			// Bind touchstart if either panning or zooming is enabled
			if (!options.disablePan || !options.disableZoom) {
				events[ str_start ] = function(e) {
					var touches;
					if (e.type === 'touchstart' ?
						// Touch
						(touches = e.touches) &&
							((touches.length === 1 && !options.disablePan) || touches.length === 2) :
						// Mouse/Pointer: Ignore right click
						!options.disablePan && e.which === 1) {

						e.preventDefault();
						e.stopPropagation();
						self._startMove(e, touches);
					}
				};
			}
			this.$elem.on(events);

			// Bind reset
			if ($reset.length) {
				$reset.on(str_click, function(e) {
					e.preventDefault();
					self.reset();
				});
			}

			// Set default attributes for the range input
			if ($zoomRange.length) {
				$zoomRange.attr({
					// Only set the range step if explicit or
					// set the default if there is no attribute present
					step: options.rangeStep === Panzoom.defaults.rangeStep &&
						$zoomRange.attr('step') ||
						options.rangeStep,
					min: options.minScale,
					max: options.maxScale
				}).prop({
					value: this.getMatrix()[0]
				});
			}

			// No bindings if zooming is disabled
			if (options.disableZoom) {
				return;
			}

			var $zoomIn = this.$zoomIn;
			var $zoomOut = this.$zoomOut;

			// Bind zoom in/out
			// Don't bind one without the other
			if ($zoomIn.length && $zoomOut.length) {
				// preventDefault cancels future mouse events on touch events
				$zoomIn.on(str_click, function(e) {
					e.preventDefault();
					self.zoom();
				});
				$zoomOut.on(str_click, function(e) {
					e.preventDefault();
					self.zoom(true);
				});
			}

			if ($zoomRange.length) {
				events = {};
				// Cannot prevent default action here, just use pointerdown/mousedown
				events[ (pointerEvents ? 'pointerdown' : 'mousedown') + ns ] = function() {
					self.transition(true);
				};
				// Zoom on input events if available and change events
				// See https://github.com/timmywil/jquery.panzoom/issues/90
				events[ (supportsInputEvent ? 'input' : 'change') + ns ] = function() {
					self.zoom(+this.value, { noSetRange: true });
				};
				$zoomRange.on(events);
			}
		},

		/**
		 * Unbind all events
		 */
		_unbind: function() {
			this.$elem
				.add(this.$zoomIn)
				.add(this.$zoomOut)
				.add(this.$reset)
				.off(this.options.eventNamespace);
		},

		/**
		 * Builds the original transform value
		 */
		_buildTransform: function() {
			// Save the original transform
			// Retrieving this also adds the correct prefixed style name
			// to jQuery's internal $.cssProps
			return this._origTransform = this.getTransform(this.options.startTransform);
		},

		/**
		 * Set transition property for later use when zooming
		 * If SVG, create necessary animations elements for translations and scaling
		 */
		_buildTransition: function() {
			if (this._transform) {
				var options = this.options;
				this._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;
			}
		},

		/**
		 * Checks dimensions to make sure they don't need to be re-calculated
		 */
		_checkDims: function() {
			var dims = this.dimensions;
			// Rebuild if width or height is still 0
			if (!dims.width || !dims.height) {
				this.resetDimensions();
			}
			return this.dimensions;
		},

		/**
		 * Calculates the distance between two touch points
		 * Remember pythagorean?
		 * @param {Array} touches
		 * @returns {Number} Returns the distance
		 */
		_getDistance: function(touches) {
			var touch1 = touches[0];
			var touch2 = touches[1];
			return Math.sqrt(Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) + Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2));
		},

		/**
		 * Constructs an approximated point in the middle of two touch points
		 * @returns {Object} Returns an object containing pageX and pageY
		 */
		_getMiddle: function(touches) {
			var touch1 = touches[0];
			var touch2 = touches[1];
			return {
				clientX: ((touch2.clientX - touch1.clientX) / 2) + touch1.clientX,
				clientY: ((touch2.clientY - touch1.clientY) / 2) + touch1.clientY
			};
		},

		/**
		 * Trigger a panzoom event on our element
		 * The event is passed the Panzoom instance
		 * @param {String|jQuery.Event} event
		 * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger
		 */
		_trigger: function (event) {
			if (typeof event === 'string') {
				event = 'panzoom' + event;
			}
			this.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));
		},

		/**
		 * Starts the pan
		 * This is bound to mouse/touchmove on the element
		 * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list
		 * @param {TouchList} [touches] The touches list if present
		 */
		_startMove: function(event, touches) {
			var move, moveEvent, endEvent,
				startDistance, startScale, startMiddle,
				startPageX, startPageY;
			var self = this;
			var options = this.options;
			var ns = options.eventNamespace;
			var matrix = this.getMatrix();
			var original = matrix.slice(0);
			var origPageX = +original[4];
			var origPageY = +original[5];
			var panOptions = { matrix: matrix, animate: 'skip' };

			// Use proper events
			if (pointerEvents) {
				moveEvent = 'pointermove';
				endEvent = 'pointerup';
			} else if (event.type === 'touchstart') {
				moveEvent = 'touchmove';
				endEvent = 'touchend';
			} else {
				moveEvent = 'mousemove';
				endEvent = 'mouseup';
			}

			// Add namespace
			moveEvent += ns;
			endEvent += ns;

			// Remove any transitions happening
			this.transition(true);

			// Indicate that we are currently panning
			this.panning = true;

			// Trigger start event
			this._trigger('start', event, touches);

			if (touches && touches.length === 2) {
				startDistance = this._getDistance(touches);
				startScale = +matrix[0];
				startMiddle = this._getMiddle(touches);
				move = function(e) {
					e.preventDefault();

					// Calculate move on middle point
					var middle = self._getMiddle(touches = e.touches);
					var diff = self._getDistance(touches) - startDistance;

					// Set zoom
					self.zoom(diff * (options.increment / 100) + startScale, {
						focal: middle,
						matrix: matrix,
						animate: false
					});

					// Set pan
					self.pan(
						+matrix[4] + middle.clientX - startMiddle.clientX,
						+matrix[5] + middle.clientY - startMiddle.clientY,
						panOptions
					);
					startMiddle = middle;
				};
			} else {
				startPageX = event.pageX;
				startPageY = event.pageY;

				/**
				 * Mousemove/touchmove function to pan the element
				 * @param {Object} e Event object
				 */
				move = function(e) {
					e.preventDefault();
					self.pan(
						origPageX + e.pageX - startPageX,
						origPageY + e.pageY - startPageY,
						panOptions
					);
				};
			}

			// Bind the handlers
			$(document)
				.off(ns)
				.on(moveEvent, move)
				.on(endEvent, function(e) {
					e.preventDefault();
					// Unbind all document events
					$(this).off(ns);
					self.panning = false;
					// Trigger our end event
					// Simply set the type to "panzoomend" to pass through all end properties
					// jQuery's `not` is used here to compare Array equality
					e.type = 'panzoomend';
					self._trigger(e, matrix, !matrixEquals(matrix, original));
				});
		}
	};

	// Add Panzoom as a static property
	$.Panzoom = Panzoom;

	/**
	 * Extend jQuery
	 * @param {Object|String} options - The name of a method to call on the prototype
	 *  or an object literal of options
	 * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call
	 */
	$.fn.panzoom = function(options) {
		var instance, args, m, ret;

		// Call methods widget-style
		if (typeof options === 'string') {
			ret = [];
			args = slice.call(arguments, 1);
			this.each(function() {
				instance = $.data(this, datakey);

				if (!instance) {
					ret.push(undefined);

				// Ignore methods beginning with `_`
				} else if (options.charAt(0) !== '_' &&
					typeof (m = instance[ options ]) === 'function' &&
					// If nothing is returned, do not add to return values
					(m = m.apply(instance, args)) !== undefined) {

					ret.push(m);
				}
			});

			// Return an array of values for the jQuery instances
			// Or the value itself if there is only one
			// Or keep chaining
			return ret.length ?
				(ret.length === 1 ? ret[0] : ret) :
				this;
		}

		return this.each(function() { new Panzoom(this, options); });
	};

	return Panzoom;
}));
;
/*!
 * 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);
        });
    };
});;
/*!
 * Masonry PACKAGED v4.2.2
 * Cascading grid layout library
 * https://masonry.desandro.com
 * MIT License
 * by David DeSandro
 */

!function (t, e) { "function" == typeof define && define.amd ? define("jquery-bridget/jquery-bridget", ["jquery"], function (i) { return e(t, i) }) : "object" == typeof module && module.exports ? module.exports = e(t, require("jquery")) : t.jQueryBridget = e(t, t.jQuery) }(window, function (t, e) { "use strict"; function i(i, r, a) { function h(t, e, n) { var o, r = "$()." + i + '("' + e + '")'; return t.each(function (t, h) { var u = a.data(h, i); if (!u) return void s(i + " not initialized. Cannot call methods, i.e. " + r); var d = u[e]; if (!d || "_" == e.charAt(0)) return void s(r + " is not a valid method"); var l = d.apply(u, n); o = void 0 === o ? l : o }), void 0 !== o ? o : t } function u(t, e) { t.each(function (t, n) { var o = a.data(n, i); o ? (o.option(e), o._init()) : (o = new r(n, e), a.data(n, i, o)) }) } a = a || e || t.jQuery, a && (r.prototype.option || (r.prototype.option = function (t) { a.isPlainObject(t) && (this.options = a.extend(!0, this.options, t)) }), a.fn[i] = function (t) { if ("string" == typeof t) { var e = o.call(arguments, 1); return h(this, t, e) } return u(this, t), this }, n(a)) } function n(t) { !t || t && t.bridget || (t.bridget = i) } var o = Array.prototype.slice, r = t.console, s = "undefined" == typeof r ? function () { } : function (t) { r.error(t) }; return n(e || t.jQuery), i }), function (t, e) { "function" == typeof define && define.amd ? define("ev-emitter/ev-emitter", e) : "object" == typeof module && module.exports ? module.exports = e() : t.EvEmitter = e() }("undefined" != typeof window ? window : this, function () { function t() { } var e = t.prototype; return e.on = function (t, e) { if (t && e) { var i = this._events = this._events || {}, n = i[t] = i[t] || []; return -1 == n.indexOf(e) && n.push(e), this } }, e.once = function (t, e) { if (t && e) { this.on(t, e); var i = this._onceEvents = this._onceEvents || {}, n = i[t] = i[t] || {}; return n[e] = !0, this } }, e.off = function (t, e) { var i = this._events && this._events[t]; if (i && i.length) { var n = i.indexOf(e); return -1 != n && i.splice(n, 1), this } }, e.emitEvent = function (t, e) { var i = this._events && this._events[t]; if (i && i.length) { i = i.slice(0), e = e || []; for (var n = this._onceEvents && this._onceEvents[t], o = 0; o < i.length; o++) { var r = i[o], s = n && n[r]; s && (this.off(t, r), delete n[r]), r.apply(this, e) } return this } }, e.allOff = function () { delete this._events, delete this._onceEvents }, t }), function (t, e) { "function" == typeof define && define.amd ? define("get-size/get-size", e) : "object" == typeof module && module.exports ? module.exports = e() : t.getSize = e() }(window, function () { "use strict"; function t(t) { var e = parseFloat(t), i = -1 == t.indexOf("%") && !isNaN(e); return i && e } function e() { } function i() { for (var t = { width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0, outerHeight: 0 }, e = 0; u > e; e++) { var i = h[e]; t[i] = 0 } return t } function n(t) { var e = getComputedStyle(t); return e || a("Style returned " + e + ". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"), e } function o() { if (!d) { d = !0; var e = document.createElement("div"); e.style.width = "200px", e.style.padding = "1px 2px 3px 4px", e.style.borderStyle = "solid", e.style.borderWidth = "1px 2px 3px 4px", e.style.boxSizing = "border-box"; var i = document.body || document.documentElement; i.appendChild(e); var o = n(e); s = 200 == Math.round(t(o.width)), r.isBoxSizeOuter = s, i.removeChild(e) } } function r(e) { if (o(), "string" == typeof e && (e = document.querySelector(e)), e && "object" == typeof e && e.nodeType) { var r = n(e); if ("none" == r.display) return i(); var a = {}; a.width = e.offsetWidth, a.height = e.offsetHeight; for (var d = a.isBorderBox = "border-box" == r.boxSizing, l = 0; u > l; l++) { var c = h[l], f = r[c], m = parseFloat(f); a[c] = isNaN(m) ? 0 : m } var p = a.paddingLeft + a.paddingRight, g = a.paddingTop + a.paddingBottom, y = a.marginLeft + a.marginRight, v = a.marginTop + a.marginBottom, _ = a.borderLeftWidth + a.borderRightWidth, z = a.borderTopWidth + a.borderBottomWidth, E = d && s, b = t(r.width); b !== !1 && (a.width = b + (E ? 0 : p + _)); var x = t(r.height); return x !== !1 && (a.height = x + (E ? 0 : g + z)), a.innerWidth = a.width - (p + _), a.innerHeight = a.height - (g + z), a.outerWidth = a.width + y, a.outerHeight = a.height + v, a } } var s, a = "undefined" == typeof console ? e : function (t) { console.error(t) }, h = ["paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "marginLeft", "marginRight", "marginTop", "marginBottom", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth"], u = h.length, d = !1; return r }), function (t, e) { "use strict"; "function" == typeof define && define.amd ? define("desandro-matches-selector/matches-selector", e) : "object" == typeof module && module.exports ? module.exports = e() : t.matchesSelector = e() }(window, function () { "use strict"; var t = function () { var t = window.Element.prototype; if (t.matches) return "matches"; if (t.matchesSelector) return "matchesSelector"; for (var e = ["webkit", "moz", "ms", "o"], i = 0; i < e.length; i++) { var n = e[i], o = n + "MatchesSelector"; if (t[o]) return o } }(); return function (e, i) { return e[t](i) } }), function (t, e) { "function" == typeof define && define.amd ? define("fizzy-ui-utils/utils", ["desandro-matches-selector/matches-selector"], function (i) { return e(t, i) }) : "object" == typeof module && module.exports ? module.exports = e(t, require("desandro-matches-selector")) : t.fizzyUIUtils = e(t, t.matchesSelector) }(window, function (t, e) { var i = {}; i.extend = function (t, e) { for (var i in e) t[i] = e[i]; return t }, i.modulo = function (t, e) { return (t % e + e) % e }; var n = Array.prototype.slice; i.makeArray = function (t) { if (Array.isArray(t)) return t; if (null === t || void 0 === t) return []; var e = "object" == typeof t && "number" == typeof t.length; return e ? n.call(t) : [t] }, i.removeFrom = function (t, e) { var i = t.indexOf(e); -1 != i && t.splice(i, 1) }, i.getParent = function (t, i) { for (; t.parentNode && t != document.body;)if (t = t.parentNode, e(t, i)) return t }, i.getQueryElement = function (t) { return "string" == typeof t ? document.querySelector(t) : t }, i.handleEvent = function (t) { var e = "on" + t.type; this[e] && this[e](t) }, i.filterFindElements = function (t, n) { t = i.makeArray(t); var o = []; return t.forEach(function (t) { if (t instanceof HTMLElement) { if (!n) return void o.push(t); e(t, n) && o.push(t); for (var i = t.querySelectorAll(n), r = 0; r < i.length; r++)o.push(i[r]) } }), o }, i.debounceMethod = function (t, e, i) { i = i || 100; var n = t.prototype[e], o = e + "Timeout"; t.prototype[e] = function () { var t = this[o]; clearTimeout(t); var e = arguments, r = this; this[o] = setTimeout(function () { n.apply(r, e), delete r[o] }, i) } }, i.docReady = function (t) { var e = document.readyState; "complete" == e || "interactive" == e ? setTimeout(t) : document.addEventListener("DOMContentLoaded", t) }, i.toDashed = function (t) { return t.replace(/(.)([A-Z])/g, function (t, e, i) { return e + "-" + i }).toLowerCase() }; var o = t.console; return i.htmlInit = function (e, n) { i.docReady(function () { var r = i.toDashed(n), s = "data-" + r, a = document.querySelectorAll("[" + s + "]"), h = document.querySelectorAll(".js-" + r), u = i.makeArray(a).concat(i.makeArray(h)), d = s + "-options", l = t.jQuery; u.forEach(function (t) { var i, r = t.getAttribute(s) || t.getAttribute(d); try { i = r && JSON.parse(r) } catch (a) { return void (o && o.error("Error parsing " + s + " on " + t.className + ": " + a)) } var h = new e(t, i); l && l.data(t, n, h) }) }) }, i }), function (t, e) { "function" == typeof define && define.amd ? define("outlayer/item", ["ev-emitter/ev-emitter", "get-size/get-size"], e) : "object" == typeof module && module.exports ? module.exports = e(require("ev-emitter"), require("get-size")) : (t.Outlayer = {}, t.Outlayer.Item = e(t.EvEmitter, t.getSize)) }(window, function (t, e) { "use strict"; function i(t) { for (var e in t) return !1; return e = null, !0 } function n(t, e) { t && (this.element = t, this.layout = e, this.position = { x: 0, y: 0 }, this._create()) } function o(t) { return t.replace(/([A-Z])/g, function (t) { return "-" + t.toLowerCase() }) } var r = document.documentElement.style, s = "string" == typeof r.transition ? "transition" : "WebkitTransition", a = "string" == typeof r.transform ? "transform" : "WebkitTransform", h = { WebkitTransition: "webkitTransitionEnd", transition: "transitionend" }[s], u = { transform: a, transition: s, transitionDuration: s + "Duration", transitionProperty: s + "Property", transitionDelay: s + "Delay" }, d = n.prototype = Object.create(t.prototype); d.constructor = n, d._create = function () { this._transn = { ingProperties: {}, clean: {}, onEnd: {} }, this.css({ position: "absolute" }) }, d.handleEvent = function (t) { var e = "on" + t.type; this[e] && this[e](t) }, d.getSize = function () { this.size = e(this.element) }, d.css = function (t) { var e = this.element.style; for (var i in t) { var n = u[i] || i; e[n] = t[i] } }, d.getPosition = function () { var t = getComputedStyle(this.element), e = this.layout._getOption("originLeft"), i = this.layout._getOption("originTop"), n = t[e ? "left" : "right"], o = t[i ? "top" : "bottom"], r = parseFloat(n), s = parseFloat(o), a = this.layout.size; -1 != n.indexOf("%") && (r = r / 100 * a.width), -1 != o.indexOf("%") && (s = s / 100 * a.height), r = isNaN(r) ? 0 : r, s = isNaN(s) ? 0 : s, r -= e ? a.paddingLeft : a.paddingRight, s -= i ? a.paddingTop : a.paddingBottom, this.position.x = r, this.position.y = s }, d.layoutPosition = function () { var t = this.layout.size, e = {}, i = this.layout._getOption("originLeft"), n = this.layout._getOption("originTop"), o = i ? "paddingLeft" : "paddingRight", r = i ? "left" : "right", s = i ? "right" : "left", a = this.position.x + t[o]; e[r] = this.getXValue(a), e[s] = ""; var h = n ? "paddingTop" : "paddingBottom", u = n ? "top" : "bottom", d = n ? "bottom" : "top", l = this.position.y + t[h]; e[u] = this.getYValue(l), e[d] = "", this.css(e), this.emitEvent("layout", [this]) }, d.getXValue = function (t) { var e = this.layout._getOption("horizontal"); return this.layout.options.percentPosition && !e ? t / this.layout.size.width * 100 + "%" : t + "px" }, d.getYValue = function (t) { var e = this.layout._getOption("horizontal"); return this.layout.options.percentPosition && e ? t / this.layout.size.height * 100 + "%" : t + "px" }, d._transitionTo = function (t, e) { this.getPosition(); var i = this.position.x, n = this.position.y, o = t == this.position.x && e == this.position.y; if (this.setPosition(t, e), o && !this.isTransitioning) return void this.layoutPosition(); var r = t - i, s = e - n, a = {}; a.transform = this.getTranslate(r, s), this.transition({ to: a, onTransitionEnd: { transform: this.layoutPosition }, isCleaning: !0 }) }, d.getTranslate = function (t, e) { var i = this.layout._getOption("originLeft"), n = this.layout._getOption("originTop"); return t = i ? t : -t, e = n ? e : -e, "translate3d(" + t + "px, " + e + "px, 0)" }, d.goTo = function (t, e) { this.setPosition(t, e), this.layoutPosition() }, d.moveTo = d._transitionTo, d.setPosition = function (t, e) { this.position.x = parseFloat(t), this.position.y = parseFloat(e) }, d._nonTransition = function (t) { this.css(t.to), t.isCleaning && this._removeStyles(t.to); for (var e in t.onTransitionEnd) t.onTransitionEnd[e].call(this) }, d.transition = function (t) { if (!parseFloat(this.layout.options.transitionDuration)) return void this._nonTransition(t); var e = this._transn; for (var i in t.onTransitionEnd) e.onEnd[i] = t.onTransitionEnd[i]; for (i in t.to) e.ingProperties[i] = !0, t.isCleaning && (e.clean[i] = !0); if (t.from) { this.css(t.from); var n = this.element.offsetHeight; n = null } this.enableTransition(t.to), this.css(t.to), this.isTransitioning = !0 }; var l = "opacity," + o(a); d.enableTransition = function () { if (!this.isTransitioning) { var t = this.layout.options.transitionDuration; t = "number" == typeof t ? t + "ms" : t, this.css({ transitionProperty: l, transitionDuration: t, transitionDelay: this.staggerDelay || 0 }), this.element.addEventListener(h, this, !1) } }, d.onwebkitTransitionEnd = function (t) { this.ontransitionend(t) }, d.onotransitionend = function (t) { this.ontransitionend(t) }; var c = { "-webkit-transform": "transform" }; d.ontransitionend = function (t) { if (t.target === this.element) { var e = this._transn, n = c[t.propertyName] || t.propertyName; if (delete e.ingProperties[n], i(e.ingProperties) && this.disableTransition(), n in e.clean && (this.element.style[t.propertyName] = "", delete e.clean[n]), n in e.onEnd) { var o = e.onEnd[n]; o.call(this), delete e.onEnd[n] } this.emitEvent("transitionEnd", [this]) } }, d.disableTransition = function () { this.removeTransitionStyles(), this.element.removeEventListener(h, this, !1), this.isTransitioning = !1 }, d._removeStyles = function (t) { var e = {}; for (var i in t) e[i] = ""; this.css(e) }; var f = { transitionProperty: "", transitionDuration: "", transitionDelay: "" }; return d.removeTransitionStyles = function () { this.css(f) }, d.stagger = function (t) { t = isNaN(t) ? 0 : t, this.staggerDelay = t + "ms" }, d.removeElem = function () { this.element.parentNode.removeChild(this.element), this.css({ display: "" }), this.emitEvent("remove", [this]) }, d.remove = function () { return s && parseFloat(this.layout.options.transitionDuration) ? (this.once("transitionEnd", function () { this.removeElem() }), void this.hide()) : void this.removeElem() }, d.reveal = function () { delete this.isHidden, this.css({ display: "" }); var t = this.layout.options, e = {}, i = this.getHideRevealTransitionEndProperty("visibleStyle"); e[i] = this.onRevealTransitionEnd, this.transition({ from: t.hiddenStyle, to: t.visibleStyle, isCleaning: !0, onTransitionEnd: e }) }, d.onRevealTransitionEnd = function () { this.isHidden || this.emitEvent("reveal") }, d.getHideRevealTransitionEndProperty = function (t) { var e = this.layout.options[t]; if (e.opacity) return "opacity"; for (var i in e) return i }, d.hide = function () { this.isHidden = !0, this.css({ display: "" }); var t = this.layout.options, e = {}, i = this.getHideRevealTransitionEndProperty("hiddenStyle"); e[i] = this.onHideTransitionEnd, this.transition({ from: t.visibleStyle, to: t.hiddenStyle, isCleaning: !0, onTransitionEnd: e }) }, d.onHideTransitionEnd = function () { this.isHidden && (this.css({ display: "none" }), this.emitEvent("hide")) }, d.destroy = function () { this.css({ position: "", left: "", right: "", top: "", bottom: "", transition: "", transform: "" }) }, n }), function (t, e) { "use strict"; "function" == typeof define && define.amd ? define("outlayer/outlayer", ["ev-emitter/ev-emitter", "get-size/get-size", "fizzy-ui-utils/utils", "./item"], function (i, n, o, r) { return e(t, i, n, o, r) }) : "object" == typeof module && module.exports ? module.exports = e(t, require("ev-emitter"), require("get-size"), require("fizzy-ui-utils"), require("./item")) : t.Outlayer = e(t, t.EvEmitter, t.getSize, t.fizzyUIUtils, t.Outlayer.Item) }(window, function (t, e, i, n, o) { "use strict"; function r(t, e) { var i = n.getQueryElement(t); if (!i) return void (h && h.error("Bad element for " + this.constructor.namespace + ": " + (i || t))); this.element = i, u && (this.$element = u(this.element)), this.options = n.extend({}, this.constructor.defaults), this.option(e); var o = ++l; this.element.outlayerGUID = o, c[o] = this, this._create(); var r = this._getOption("initLayout"); r && this.layout() } function s(t) { function e() { t.apply(this, arguments) } return e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e } function a(t) { if ("number" == typeof t) return t; var e = t.match(/(^\d*\.?\d*)(\w*)/), i = e && e[1], n = e && e[2]; if (!i.length) return 0; i = parseFloat(i); var o = m[n] || 1; return i * o } var h = t.console, u = t.jQuery, d = function () { }, l = 0, c = {}; r.namespace = "outlayer", r.Item = o, r.defaults = { containerStyle: { position: "relative" }, initLayout: !0, originLeft: !0, originTop: !0, resize: !0, resizeContainer: !0, transitionDuration: "0.4s", hiddenStyle: { opacity: 0, transform: "scale(0.001)" }, visibleStyle: { opacity: 1, transform: "scale(1)" } }; var f = r.prototype; n.extend(f, e.prototype), f.option = function (t) { n.extend(this.options, t) }, f._getOption = function (t) { var e = this.constructor.compatOptions[t]; return e && void 0 !== this.options[e] ? this.options[e] : this.options[t] }, r.compatOptions = { initLayout: "isInitLayout", horizontal: "isHorizontal", layoutInstant: "isLayoutInstant", originLeft: "isOriginLeft", originTop: "isOriginTop", resize: "isResizeBound", resizeContainer: "isResizingContainer" }, f._create = function () { this.reloadItems(), this.stamps = [], this.stamp(this.options.stamp), n.extend(this.element.style, this.options.containerStyle); var t = this._getOption("resize"); t && this.bindResize() }, f.reloadItems = function () { this.items = this._itemize(this.element.children) }, f._itemize = function (t) { for (var e = this._filterFindItemElements(t), i = this.constructor.Item, n = [], o = 0; o < e.length; o++) { var r = e[o], s = new i(r, this); n.push(s) } return n }, f._filterFindItemElements = function (t) { return n.filterFindElements(t, this.options.itemSelector) }, f.getItemElements = function () { return this.items.map(function (t) { return t.element }) }, f.layout = function () { this._resetLayout(), this._manageStamps(); var t = this._getOption("layoutInstant"), e = void 0 !== t ? t : !this._isLayoutInited; this.layoutItems(this.items, e), this._isLayoutInited = !0 }, f._init = f.layout, f._resetLayout = function () { this.getSize() }, f.getSize = function () { this.size = i(this.element) }, f._getMeasurement = function (t, e) { var n, o = this.options[t]; o ? ("string" == typeof o ? n = this.element.querySelector(o) : o instanceof HTMLElement && (n = o), this[t] = n ? i(n)[e] : o) : this[t] = 0 }, f.layoutItems = function (t, e) { t = this._getItemsForLayout(t), this._layoutItems(t, e), this._postLayout() }, f._getItemsForLayout = function (t) { return t.filter(function (t) { return !t.isIgnored }) }, f._layoutItems = function (t, e) { if (this._emitCompleteOnItems("layout", t), t && t.length) { var i = []; t.forEach(function (t) { var n = this._getItemLayoutPosition(t); n.item = t, n.isInstant = e || t.isLayoutInstant, i.push(n) }, this), this._processLayoutQueue(i) } }, f._getItemLayoutPosition = function () { return { x: 0, y: 0 } }, f._processLayoutQueue = function (t) { this.updateStagger(), t.forEach(function (t, e) { this._positionItem(t.item, t.x, t.y, t.isInstant, e) }, this) }, f.updateStagger = function () { var t = this.options.stagger; return null === t || void 0 === t ? void (this.stagger = 0) : (this.stagger = a(t), this.stagger) }, f._positionItem = function (t, e, i, n, o) { n ? t.goTo(e, i) : (t.stagger(o * this.stagger), t.moveTo(e, i)) }, f._postLayout = function () { this.resizeContainer() }, f.resizeContainer = function () { var t = this._getOption("resizeContainer"); if (t) { var e = this._getContainerSize(); e && (this._setContainerMeasure(e.width, !0), this._setContainerMeasure(e.height, !1)) } }, f._getContainerSize = d, f._setContainerMeasure = function (t, e) { if (void 0 !== t) { var i = this.size; i.isBorderBox && (t += e ? i.paddingLeft + i.paddingRight + i.borderLeftWidth + i.borderRightWidth : i.paddingBottom + i.paddingTop + i.borderTopWidth + i.borderBottomWidth), t = Math.max(t, 0), this.element.style[e ? "width" : "height"] = t + "px" } }, f._emitCompleteOnItems = function (t, e) { function i() { o.dispatchEvent(t + "Complete", null, [e]) } function n() { s++ , s == r && i() } var o = this, r = e.length; if (!e || !r) return void i(); var s = 0; e.forEach(function (e) { e.once(t, n) }) }, f.dispatchEvent = function (t, e, i) { var n = e ? [e].concat(i) : i; if (this.emitEvent(t, n), u) if (this.$element = this.$element || u(this.element), e) { var o = u.Event(e); o.type = t, this.$element.trigger(o, i) } else this.$element.trigger(t, i) }, f.ignore = function (t) { var e = this.getItem(t); e && (e.isIgnored = !0) }, f.unignore = function (t) { var e = this.getItem(t); e && delete e.isIgnored }, f.stamp = function (t) { t = this._find(t), t && (this.stamps = this.stamps.concat(t), t.forEach(this.ignore, this)) }, f.unstamp = function (t) { t = this._find(t), t && t.forEach(function (t) { n.removeFrom(this.stamps, t), this.unignore(t) }, this) }, f._find = function (t) { return t ? ("string" == typeof t && (t = this.element.querySelectorAll(t)), t = n.makeArray(t)) : void 0 }, f._manageStamps = function () { this.stamps && this.stamps.length && (this._getBoundingRect(), this.stamps.forEach(this._manageStamp, this)) }, f._getBoundingRect = function () { var t = this.element.getBoundingClientRect(), e = this.size; this._boundingRect = { left: t.left + e.paddingLeft + e.borderLeftWidth, top: t.top + e.paddingTop + e.borderTopWidth, right: t.right - (e.paddingRight + e.borderRightWidth), bottom: t.bottom - (e.paddingBottom + e.borderBottomWidth) } }, f._manageStamp = d, f._getElementOffset = function (t) { var e = t.getBoundingClientRect(), n = this._boundingRect, o = i(t), r = { left: e.left - n.left - o.marginLeft, top: e.top - n.top - o.marginTop, right: n.right - e.right - o.marginRight, bottom: n.bottom - e.bottom - o.marginBottom }; return r }, f.handleEvent = n.handleEvent, f.bindResize = function () { t.addEventListener("resize", this), this.isResizeBound = !0 }, f.unbindResize = function () { t.removeEventListener("resize", this), this.isResizeBound = !1 }, f.onresize = function () { this.resize() }, n.debounceMethod(r, "onresize", 100), f.resize = function () { this.isResizeBound && this.needsResizeLayout() && this.layout() }, f.needsResizeLayout = function () { var t = i(this.element), e = this.size && t; return e && t.innerWidth !== this.size.innerWidth }, f.addItems = function (t) { var e = this._itemize(t); return e.length && (this.items = this.items.concat(e)), e }, f.appended = function (t) { var e = this.addItems(t); e.length && (this.layoutItems(e, !0), this.reveal(e)) }, f.prepended = function (t) { var e = this._itemize(t); if (e.length) { var i = this.items.slice(0); this.items = e.concat(i), this._resetLayout(), this._manageStamps(), this.layoutItems(e, !0), this.reveal(e), this.layoutItems(i) } }, f.reveal = function (t) { if (this._emitCompleteOnItems("reveal", t), t && t.length) { var e = this.updateStagger(); t.forEach(function (t, i) { t.stagger(i * e), t.reveal() }) } }, f.hide = function (t) { if (this._emitCompleteOnItems("hide", t), t && t.length) { var e = this.updateStagger(); t.forEach(function (t, i) { t.stagger(i * e), t.hide() }) } }, f.revealItemElements = function (t) { var e = this.getItems(t); this.reveal(e) }, f.hideItemElements = function (t) { var e = this.getItems(t); this.hide(e) }, f.getItem = function (t) { for (var e = 0; e < this.items.length; e++) { var i = this.items[e]; if (i.element == t) return i } }, f.getItems = function (t) { t = n.makeArray(t); var e = []; return t.forEach(function (t) { var i = this.getItem(t); i && e.push(i) }, this), e }, f.remove = function (t) { var e = this.getItems(t); this._emitCompleteOnItems("remove", e), e && e.length && e.forEach(function (t) { t.remove(), n.removeFrom(this.items, t) }, this) }, f.destroy = function () { var t = this.element.style; t.height = "", t.position = "", t.width = "", this.items.forEach(function (t) { t.destroy() }), this.unbindResize(); var e = this.element.outlayerGUID; delete c[e], delete this.element.outlayerGUID, u && u.removeData(this.element, this.constructor.namespace) }, r.data = function (t) { t = n.getQueryElement(t); var e = t && t.outlayerGUID; return e && c[e] }, r.create = function (t, e) { var i = s(r); return i.defaults = n.extend({}, r.defaults), n.extend(i.defaults, e), i.compatOptions = n.extend({}, r.compatOptions), i.namespace = t, i.data = r.data, i.Item = s(o), n.htmlInit(i, t), u && u.bridget && u.bridget(t, i), i }; var m = { ms: 1, s: 1e3 }; return r.Item = o, r }), function (t, e) { "function" == typeof define && define.amd ? define(["outlayer/outlayer", "get-size/get-size"], e) : "object" == typeof module && module.exports ? module.exports = e(require("outlayer"), require("get-size")) : t.Masonry = e(t.Outlayer, t.getSize) }(window, function (t, e) { var i = t.create("masonry"); i.compatOptions.fitWidth = "isFitWidth"; var n = i.prototype; return n._resetLayout = function () { this.getSize(), this._getMeasurement("columnWidth", "outerWidth"), this._getMeasurement("gutter", "outerWidth"), this.measureColumns(), this.colYs = []; for (var t = 0; t < this.cols; t++)this.colYs.push(0); this.maxY = 0, this.horizontalColIndex = 0 }, n.measureColumns = function () { if (this.getContainerWidth(), !this.columnWidth) { var t = this.items[0], i = t && t.element; this.columnWidth = i && e(i).outerWidth || this.containerWidth } var n = this.columnWidth += this.gutter, o = this.containerWidth + this.gutter, r = o / n, s = n - o % n, a = s && 1 > s ? "round" : "floor"; r = Math[a](r), this.cols = Math.max(r, 1) }, n.getContainerWidth = function () { var t = this._getOption("fitWidth"), i = t ? this.element.parentNode : this.element, n = e(i); this.containerWidth = n && n.innerWidth }, n._getItemLayoutPosition = function (t) { t.getSize(); var e = t.size.outerWidth % this.columnWidth, i = e && 1 > e ? "round" : "ceil", n = Math[i](t.size.outerWidth / this.columnWidth); n = Math.min(n, this.cols); for (var o = this.options.horizontalOrder ? "_getHorizontalColPosition" : "_getTopColPosition", r = this[o](n, t), s = { x: this.columnWidth * r.col, y: r.y }, a = r.y + t.size.outerHeight, h = n + r.col, u = r.col; h > u; u++)this.colYs[u] = a; return s }, n._getTopColPosition = function (t) { var e = this._getTopColGroup(t), i = Math.min.apply(Math, e); return { col: e.indexOf(i), y: i } }, n._getTopColGroup = function (t) { if (2 > t) return this.colYs; for (var e = [], i = this.cols + 1 - t, n = 0; i > n; n++)e[n] = this._getColGroupY(n, t); return e }, n._getColGroupY = function (t, e) { if (2 > e) return this.colYs[t]; var i = this.colYs.slice(t, t + e); return Math.max.apply(Math, i) }, n._getHorizontalColPosition = function (t, e) { var i = this.horizontalColIndex % this.cols, n = t > 1 && i + t > this.cols; i = n ? 0 : i; var o = e.size.outerWidth && e.size.outerHeight; return this.horizontalColIndex = o ? i + t : this.horizontalColIndex, { col: i, y: this._getColGroupY(i, t) } }, n._manageStamp = function (t) { var i = e(t), n = this._getElementOffset(t), o = this._getOption("originLeft"), r = o ? n.left : n.right, s = r + i.outerWidth, a = Math.floor(r / this.columnWidth); a = Math.max(0, a); var h = Math.floor(s / this.columnWidth); h -= s % this.columnWidth ? 0 : 1, h = Math.min(this.cols - 1, h); for (var u = this._getOption("originTop"), d = (u ? n.top : n.bottom) + i.outerHeight, l = a; h >= l; l++)this.colYs[l] = Math.max(d, this.colYs[l]) }, n._getContainerSize = function () { this.maxY = Math.max.apply(Math, this.colYs); var t = { height: this.maxY }; return this._getOption("fitWidth") && (t.width = this._getContainerFitWidth()), t }, n._getContainerFitWidth = function () { for (var t = 0, e = this.cols; --e && 0 === this.colYs[e];)t++; return (this.cols - t) * this.columnWidth - this.gutter }, n.needsResizeLayout = function () { var t = this.containerWidth; return this.getContainerWidth(), t != this.containerWidth }, i });;
/*!
 * jQuery Pretty Dropdowns Plugin v4.13.0 by T. H. Doan (https://thdoan.github.io/pretty-dropdowns/)
 *
 * jQuery Pretty Dropdowns by T. H. Doan is licensed under the MIT License.
 * Read a copy of the license in the LICENSE file or at https://choosealicense.com/licenses/mit/
 */

(function ($) {
    $.fn.prettyDropdown = function (oOptions) {
        var ua = navigator.userAgent.toLowerCase(); 
        var IsSafari = false && ua.indexOf('safari') != -1 && ua.indexOf('chrome') == -1;
        // Default options
        oOptions = $.extend({
            classic: false,
            customClass: 'arrow',
            width: null,
            height: 50,
            hoverIntent: 200,
            multiDelimiter: '; ',
            multiVerbosity: 99,
            selectedMarker: '&#10003;',
            afterLoad: function () { }
        }, oOptions);

        oOptions.selectedMarker = '<span aria-hidden="true" class="checked"> ' + oOptions.selectedMarker + '</span>';
        // Validate options
        if (isNaN(oOptions.width) && !/^\d+%$/.test(oOptions.width)) oOptions.width = null;
        if (isNaN(oOptions.height)) oOptions.height = 50;
        else if (oOptions.height < 8) oOptions.height = 8;
        if (isNaN(oOptions.hoverIntent) || oOptions.hoverIntent < 0) oOptions.hoverIntent = 200;
        if (isNaN(oOptions.multiVerbosity)) oOptions.multiVerbosity = 99;

        // Translatable strings
        var MULTI_NONE = 'None selected',
            MULTI_PREFIX = 'Selected: ',
            MULTI_POSTFIX = ' selected';

        // Globals
        var $current,
            aKeys = [
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', , , , , , , ,
                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
            ],
            nCount,
            nHoverIndex,
            nLastIndex,
            nTimer,
            nTimestamp,

            // Initiate pretty drop-downs
            init = function (elSel) {
                if (IsSafari) {
                    $(elSel).css("opacity", "1");
                    elSel.size = "1";
                    return;
                }
                var $select = $(elSel),
                    nSize = elSel.size,
                    sId = elSel.name || elSel.id || '',
                    sLabelId;
                // Exit if widget has already been initiated
                if ($select.data('loaded')) return;
                // Remove 'size' attribute to it doesn't affect vertical alignment
                $select.data('size', nSize).removeAttr('size');
                // Set <select> height to reserve space for <div> container
                $select.css('visibility', 'hidden').outerHeight(oOptions.height);
                nTimestamp = +new Date();
                // Test whether to add 'aria-labelledby'
                if (elSel.id) {
                    // Look for <label>
                    var $label = $('label[for=' + elSel.id + ']');
                    if ($label.length) {
                        // Add 'id' to <label> if necessary
                        if ($label.attr('id') && !/^menu\d{13,}$/.test($label.attr('id'))) sLabelId = $label.attr('id');
                        else $label.attr('id', (sLabelId = 'menu' + nTimestamp));
                    }
                }
                nCount = 0;
                var $items = $('optgroup, option', $select),
                    $selected = $items.filter(':selected'),
                    bMultiple = elSel.multiple,
                    // Height - 2px for borders
                    sHtml = '<ul' + (elSel.disabled ? '' : ' tabindex="0"') + ' role="listbox"'
                        + (elSel.title ? ' title="' + elSel.title + '" aria-label="' + elSel.title + '"' : '')
                        + (sLabelId ? ' aria-labelledby="' + sLabelId + '"' : '')
                        + ' aria-activedescendant="item' + nTimestamp + '-1" aria-expanded="false"'
                        + ' style="max-height:' + (oOptions.height - 2) + 'px;margin:'
                        // NOTE: $select.css('margin') returns an empty string in Firefox, so we have to get
                        // each margin individually. See https://github.com/jquery/jquery/issues/3383
                        + $select.css('margin-top') + ' '
                        + $select.css('margin-right') + ' '
                        + $select.css('margin-bottom') + ' '
                        + $select.css('margin-left') + ';">';
                if (bMultiple) {
                    sHtml += renderItem(null, 'selected');
                    $items.each(function () {
                        if (this.selected) {
                            sHtml += renderItem(this, '', true)
                        } else {
                            sHtml += renderItem(this);
                        }
                    });
                } else {
                    if (oOptions.classic) {
                        $items.each(function () {
                            sHtml += renderItem(this);
                        });
                    } else {
                        sHtml += renderItem($selected[0], 'selected');
                        $items.filter(':not(:selected)').each(function () {
                            sHtml += renderItem(this);
                        });
                    }
                }
                sHtml += '</ul>';
                $select.wrap('<div ' + (sId ? 'id="prettydropdown-' + sId + '" ' : '')
                    + 'class="prettydropdown '
                    + (oOptions.classic ? 'classic ' : '')
                    + (elSel.disabled ? 'disabled ' : '')
                    + (bMultiple ? 'multiple ' : '')
                    + oOptions.customClass + ' loading"'
                    // NOTE: For some reason, the container height is larger by 1px if the <select> has the
                    // 'multiple' attribute or 'size' attribute with a value larger than 1. To fix this, we
                    // have to inline the height.
                    + ((bMultiple || nSize > 1) ? ' style="height:' + oOptions.height + 'px;"' : '')
                    + '></div>').before(sHtml).data('loaded', true);
                var $dropdown = $select.parent().children('ul'),
                    nWidth = $dropdown.outerWidth(true),
                    nOuterWidth;
                $items = $dropdown.children();
                // Update default selected values for multi-select menu
                if (bMultiple) updateSelected($dropdown);
                else if (oOptions.classic) $('[data-value="' + $selected.val() + '"]', $dropdown).addClass('selected').append(oOptions.selectedMarker);
                // Calculate width if initially hidden
                if ($dropdown.width() <= 0) {
                    var $clone = $dropdown.parent().clone().css({
                        position: 'absolute',
                        top: '-100%'
                    });
                    $('body').append($clone);
                    nWidth = $clone.children('ul').outerWidth(true);
                    $('li', $clone).width(nWidth);
                    nOuterWidth = $clone.children('ul').outerWidth(true);
                    $clone.remove();
                }
                // Set dropdown width and event handler
                // NOTE: Setting width using width(), then css() because width() only can return a float,
                // which can result in a missing right border when there is a scrollbar.
                nWidth += 50;
                $items.width(nWidth).css('width', $items.css('width'));
                if (oOptions.width) {
                    $dropdown.parent().css('min-width', $items.css('width'));
                    $dropdown.css('width', '100%');
                    $items.css('width', '100%');
                }
                $items.click(function () {
                    var $li = $(this),
                        $selected = $dropdown.children('.selected');
                    // Ignore disabled menu
                    if ($dropdown.parent().hasClass('disabled')) return;
                    // Only update if not disabled, not a label, and a different value selected
                    if ($dropdown.hasClass('active') && !$li.hasClass('disabled') && !$li.hasClass('label') && $li.data('value') !== $selected.data('value')) {
                        // Select highlighted item
                        if (bMultiple) {
                            if ($li.children('span.checked').length) $li.children('span.checked').remove();
                            else $li.append(oOptions.selectedMarker);
                            // Sync <select> element
                            $dropdown.children(':not(.selected)').each(function (nIndex) {
                                $('optgroup, option', $select).eq(nIndex).prop('selected', $(this).children('span.checked').length > 0);
                            });
                            // Update selected values for multi-select menu
                            updateSelected($dropdown);
                        } else {
                            $selected.removeClass('selected').children('span.checked').remove();
                            $li.addClass('selected').append(oOptions.selectedMarker);
                            if (!oOptions.classic) $dropdown.prepend($li);
                            $dropdown.removeClass('reverse').attr('aria-activedescendant', $li.attr('id'));
                            if ($selected.data('group') && !oOptions.classic) $dropdown.children('.label').filter(function () {
                                return $(this).text() === $selected.data('group');
                            }).after($selected);
                            // Sync <select> element
                            $('optgroup, option', $select).filter(function () {
                                // NOTE: .data('value') can return numeric, so using == comparison instead.
                                return this.value == $li.data('value') || this.text === $li.contents().filter(function () {
                                    // Filter out selected marker
                                    return this.nodeType === 3;
                                }).text();
                            }).prop('selected', true);
                        }
                        $select.trigger('change');
                    }
                    if ($li.hasClass('selected') || !bMultiple) {
                        $dropdown.toggleClass('active');
                        $dropdown.attr('aria-expanded', $dropdown.hasClass('active'));
                    }
                    // Try to keep drop-down menu within viewport
                    if ($dropdown.hasClass('active')) {
                        // Close any other open menus
                        if ($('.prettydropdown > ul.active').length > 1) resetDropdown($('.prettydropdown > ul.active').not($dropdown)[0]);
                        var nWinHeight = window.innerHeight,
                            nMaxHeight,
                            nOffsetTop = $dropdown.offset().top,
                            nScrollTop = $(document).scrollTop(),
                            nDropdownHeight = $dropdown.outerHeight();
                        if (nSize) {
                            nMaxHeight = nSize * (oOptions.height - 2);
                            if (nMaxHeight < nDropdownHeight - 2) nDropdownHeight = nMaxHeight + 2;
                        }
                        var nDropdownBottom = nOffsetTop - nScrollTop + nDropdownHeight;
                        if (nDropdownBottom > nWinHeight) {
                            // Expand to direction that has the most space
                            if (nOffsetTop - nScrollTop > nWinHeight - (nOffsetTop - nScrollTop + oOptions.height)) {
                                $dropdown.addClass('reverse');
                                if (!oOptions.classic) $dropdown.append($selected);
                                if (nOffsetTop - nScrollTop + oOptions.height < nDropdownHeight) {
                                    $dropdown.outerHeight(nOffsetTop - nScrollTop + oOptions.height);
                                    // Ensure the selected item is in view
                                    $dropdown.scrollTop(nDropdownHeight);
                                }
                            } else {
                                $dropdown.height($dropdown.height() - (nDropdownBottom - nWinHeight));
                            }
                        }
                        if (nMaxHeight && nMaxHeight < $dropdown.height()) $dropdown.css('height', nMaxHeight + 'px');
                        // Ensure the selected item is in view
                        if (oOptions.classic) $dropdown.scrollTop($selected.index() * (oOptions.height - 2));
                    } else {
                        $dropdown.data('clicked', true);
                        resetDropdown($dropdown[0]);
                    }
                });
                $dropdown.on({
                    focusin: function () {
                        // Unregister any existing handlers first to prevent duplicate firings
                        $(window).off('keydown', handleKeypress).on('keydown', handleKeypress);
                    },
                    focusout: function () {
                        $(window).off('keydown', handleKeypress);
                    },
                    mouseenter: function () {
                        $dropdown.data('hover', true);
                    },
                    mouseleave: resetDropdown,
                    mousemove: hoverDropdownItem
                });
                // Put focus on menu when user clicks on label
                if (sLabelId) $('#' + sLabelId).off('click', handleFocus).click(handleFocus);
                // Done with everything!
                $dropdown.parent().width(oOptions.width || nOuterWidth || $dropdown.outerWidth(true)).removeClass('loading');
                oOptions.afterLoad();
            },

            // Manage widget focusing
            handleFocus = function (e) {
                $('ul[aria-labelledby=' + e.target.id + ']').focus();
            },

            // Manage keyboard navigation
            handleKeypress = function (e) {
                var $dropdown = $('.prettydropdown > ul.active, .prettydropdown > ul:focus');
                $dropdown.css("overflow-x", "auto");
                if (!$dropdown.length) return;
                if (e.which === 9) { // Tab
                    resetDropdown($dropdown[0]);
                    return;
                } else {
                    // Intercept non-Tab keys only
                    e.preventDefault();
                    e.stopPropagation();
                }
                var $items = $dropdown.children(),
                    bOpen = $dropdown.hasClass('active'),
                    nItemsHeight = $dropdown.height() / (oOptions.height - 2),
                    nItemsPerPage = nItemsHeight % 1 < 0.5 ? Math.floor(nItemsHeight) : Math.ceil(nItemsHeight),
                    sKey;
                nHoverIndex = Math.max(0, $dropdown.children('.hover').index());
                nLastIndex = $items.length - 1;
                $current = $items.eq(nHoverIndex);
                $dropdown.data('lastKeypress', +new Date());
                switch (e.which) {
                    case 13: // Enter
                        if (!bOpen) {
                            $current = $items.filter('.selected');
                            toggleHover($current, 1);
                        }
                        $current.click();
                        break;
                    case 27: // Esc
                        if (bOpen) resetDropdown($dropdown[0]);
                        break;
                    case 32: // Space
                        if (bOpen) {
                            sKey = ' ';
                        } else {
                            $current = $items.filter('.selected');
                            toggleHover($current, 1);
                            $current.click();
                        }
                        break;
                    case 33: // Page Up
                        if (bOpen) {
                            toggleHover($current, 0);
                            toggleHover($items.eq(Math.max(nHoverIndex - nItemsPerPage - 1, 0)), 1);
                        }
                        break;
                    case 34: // Page Down
                        if (bOpen) {
                            toggleHover($current, 0);
                            toggleHover($items.eq(Math.min(nHoverIndex + nItemsPerPage - 1, nLastIndex)), 1);
                        }
                        break;
                    case 35: // End
                        if (bOpen) {
                            toggleHover($current, 0);
                            toggleHover($items.eq(nLastIndex), 1);
                        }
                        break;
                    case 36: // Home
                        if (bOpen) {
                            toggleHover($current, 0);
                            toggleHover($items.eq(0), 1);
                        }
                        break;
                    case 38: // Up
                        if (bOpen) {
                            toggleHover($current, 0);
                            // If not already key-navigated or first item is selected, cycle to the last item; or
                            // else select the previous item
                            toggleHover(nHoverIndex ? $items.eq(nHoverIndex - 1) : $items.eq(nLastIndex), 1);
                        }
                        break;
                    case 40: // Down
                        if (bOpen) {
                            toggleHover($current, 0);
                            // If last item is selected, cycle to the first item; or else select the next item
                            toggleHover(nHoverIndex === nLastIndex ? $items.eq(0) : $items.eq(nHoverIndex + 1), 1);
                        }
                        break;
                    default:
                        if (bOpen) sKey = aKeys[e.which - 48];
                }
                if (sKey) { // Alphanumeric key pressed
                    clearTimeout(nTimer);
                    $dropdown.data('keysPressed', $dropdown.data('keysPressed') === undefined ? sKey : $dropdown.data('keysPressed') + sKey);
                    nTimer = setTimeout(function () {
                        $dropdown.removeData('keysPressed');
                        // NOTE: Windows keyboard repeat delay is 250-1000 ms. See
                        // https://technet.microsoft.com/en-us/library/cc978658.aspx
                    }, 300);
                    // Build index of matches
                    var aMatches = [],
                        nCurrentIndex = $current.index();
                    $items.each(function (nIndex) {
                        if ($(this).text().toLowerCase().indexOf($dropdown.data('keysPressed')) === 0) aMatches.push(nIndex);
                    });
                    if (aMatches.length) {
                        // Cycle through items matching key(s) pressed
                        for (var i = 0; i < aMatches.length; ++i) {
                            if (aMatches[i] > nCurrentIndex) {
                                toggleHover($items, 0);
                                toggleHover($items.eq(aMatches[i]), 1);
                                break;
                            }
                            if (i === aMatches.length - 1) {
                                toggleHover($items, 0);
                                toggleHover($items.eq(aMatches[0]), 1);
                            }
                        }
                    }
                }
            },

            // Highlight menu item
            hoverDropdownItem = function (e) {
                var $dropdown = $(e.currentTarget);
                if (e.target.nodeName !== 'LI' || !$dropdown.hasClass('active') || new Date() - $dropdown.data('lastKeypress') < 200) return;
                toggleHover($dropdown.children(), 0, 1);
                toggleHover($(e.target), 1, 1);
            },

            // Construct menu item
            // elOpt is null for first item in multi-select menus
            renderItem = function (elOpt, sClass, bSelected) {
                var sGroup = '',
                    sText = '',
                    sTitle;
                sClass = sClass || '';
                if (elOpt) {
                    switch (elOpt.nodeName) {
                        case 'OPTION':
                            if (elOpt.parentNode.nodeName === 'OPTGROUP') sGroup = elOpt.parentNode.getAttribute('label');
                            sText = (elOpt.getAttribute('data-prefix') || '') + elOpt.text + (elOpt.getAttribute('data-suffix') || '');
                            break;
                        case 'OPTGROUP':
                            sClass += ' label';
                            sText = (elOpt.getAttribute('data-prefix') || '') + elOpt.getAttribute('label') + (elOpt.getAttribute('data-suffix') || '');
                            break;
                    }
                    if (elOpt.disabled || (sGroup && elOpt.parentNode.disabled)) sClass += ' disabled';
                    sTitle = elOpt.title;
                    if (sGroup && !sTitle) sTitle = elOpt.parentNode.title;
                }
                ++nCount;
                return '<li onclick="void(0)" id="item' + nTimestamp + '-' + nCount + '"'
                    + (sGroup ? ' data-group="' + sGroup + '"' : '')
                    + (elOpt && (elOpt.value || oOptions.classic) ? ' data-value="' + elOpt.value + '"' : '')
                    + (elOpt && elOpt.nodeName === 'OPTION' ? ' role="option"' : '')
                    + (sTitle ? ' title="' + sTitle + '" aria-label="' + sTitle + '"' : '')
                    + (sClass ? ' class="' + $.trim(sClass) + '"' : '')
                    + ((oOptions.height !== 50) ? ' style="height:' + (oOptions.height - 2)
                        + 'px;line-height:' + (oOptions.height - 4) + 'px;"' : '') + '>' + sText
                    + ((bSelected || sClass === 'selected') ? oOptions.selectedMarker : '') + '</li>';
            },

            // Reset menu state
            // @param o Event or Element object
            resetDropdown = function (o) {
                var $dropdown = $(o.currentTarget || o);
                // NOTE: Sometimes it's possible for $dropdown to point to the wrong element when you
                // quickly hover over another menu. To prevent this, we need to check for .active as a
                // backup and manually reassign $dropdown. This also requires that it's not clicked on
                // because in rare cases the reassignment fails and the reverse menu will not get reset.
                if (o.type === 'mouseleave' && !$dropdown.hasClass('active') && !$dropdown.data('clicked')) $dropdown = $('.prettydropdown > ul.active');
                $dropdown.data('hover', false);
                clearTimeout(nTimer);
                nTimer = setTimeout(function () {
                    if ($dropdown.data('hover')) return;
                    if ($dropdown.hasClass('reverse') && !oOptions.classic) $dropdown.prepend($dropdown.children(':last-child'));
                    $dropdown.removeClass('active reverse').removeData('clicked').attr('aria-expanded', 'false').css('height', '');
                    $dropdown.children().removeClass('hover nohover');
                }, (o.type === 'mouseleave' && !$dropdown.data('clicked')) ? oOptions.hoverIntent : 0);
            },

            // Set menu item hover state
            // bNoScroll set on hoverDropdownItem()
            toggleHover = function ($li, bOn, bNoScroll) {
                if (bOn) {
                    $li.removeClass('nohover').addClass('hover');
                    if ($li.length === 1 && $current && !bNoScroll) {
                        // Ensure items are always in view
                        var $dropdown = $li.parent(),
                            nDropdownHeight = $dropdown.outerHeight(),
                            nItemOffset = $li.offset().top - $dropdown.offset().top - 1; // -1px for top border
                        if ($li.index() === 0) {
                            $dropdown.scrollTop(0);
                        } else if ($li.index() === nLastIndex) {
                            $dropdown.scrollTop($dropdown.children().length * oOptions.height);
                        } else {
                            if (nItemOffset + oOptions.height > nDropdownHeight) $dropdown.scrollTop($dropdown.scrollTop() + oOptions.height + nItemOffset - nDropdownHeight);
                            else if (nItemOffset < 0) $dropdown.scrollTop($dropdown.scrollTop() + nItemOffset);
                        }
                    }
                } else {
                    $li.removeClass('hover').addClass('nohover');
                }
            },

            // Update selected values for multi-select menu
            updateSelected = function ($dropdown) {
                var $select = $dropdown.parent().children('select'),
                    aSelected = $('option', $select).map(function () {
                        if (this.selected) return this.text;
                    }).get(),
                    sSelected;
                if (oOptions.multiVerbosity >= aSelected.length) sSelected = aSelected.join(oOptions.multiDelimiter) || MULTI_NONE;
                else sSelected = aSelected.length + '/' + $('option', $select).length + MULTI_POSTFIX;
                if (sSelected) {
                    var sTitle = ($select.attr('title') ? $select.attr('title') : '') + (aSelected.length ? '\n' + MULTI_PREFIX + aSelected.join(oOptions.multiDelimiter) : '');
                    $dropdown.children('.selected').text(sSelected);
                    $dropdown.attr({
                        'title': sTitle,
                        'aria-label': sTitle
                    });
                } else {
                    $dropdown.children('.selected').empty();
                    $dropdown.attr({
                        'title': $select.attr('title'),
                        'aria-label': $select.attr('title')
                    });
                }
            };

        /**
         * Public Functions
         */

        // Resync the menu with <select> to reflect state changes
        this.refresh = function (oOptions) {
            if (IsSafari) {
                return;
            }
            return this.each(function () {
                var $select = $(this);
                $select.prevAll('ul').remove();
                $select.unwrap().data('loaded', false);
                this.size = $select.data('size');
                init(this);
            });
        };

        return this.each(function () {
            init(this);
        });

    };
}(jQuery));
;
/*! 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);
};
$(document).ready(function () {
    
    $(".homepage-artists .hp-tabs a").click(function () {
        
        $(".homepage-artists .list").removeClass("active");
        $(".homepage-artists .list-" + $(this).data("filter")).addClass("active");

        $(".homepage-artists .hp-tabs a").removeClass("active");

        $(this).addClass("active");
    });

    $(".homepage-articles .hp-tabs a").click(function () {
        setArticleTab(this);
    });

    function setArticleTab(el) {
        var filter = $(el).data("filter");
        var i = 0;

        $(".articles-list *[data-types]").each(function () {
            var types = $(this).data("types").split(",");
            if (types.indexOf(filter) >= 0 && i < 8) {
                i++;
                $(this).show();
            } else {
                $(this).hide();
            }
        });

        $(".homepage-articles .hp-tabs a").removeClass("active");

        $(el).addClass("active");
    }

    if ($(".homepage-articles .hp-tabs a").length > 0) {
        setArticleTab($(".homepage-articles .hp-tabs a").first());
    }
});;
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 globalTimeout = null;
var searchClickTime = null;



function makeBold(text, searchstring) {
    if (!searchstring)
        return text;
    var curI = 0;
    var result = "";

    for (i = 0; i < text.length; i++) {

        result += text[i];

        var textChar = text[i].toLowerCase();
        var searchChar = searchstring[curI].toLowerCase();

        if (textChar == searchChar) {
            var foundAll = (curI == searchstring.length - 1);
            if (!foundAll) {
                curI++;
            } else {
                var stringStart = result.substr(0, result.length - searchstring.length);
                var stringEnd = "<b>" + result.substr(result.length - searchstring.length, searchstring.length) + "</b>";

                result = stringStart + stringEnd;

                curI = 0;
            }
        } else {
            curI = 0;
        }
    }

    return result;
}

function setSaleOutcome() {
    //On Click "All"
    $('#19EFD20D308FB8EE_sale')
        .on('click',
            function () {
                //if Sold Checked
                unSelectCheckBox('#291443E2B31881C2_sale');

                //if UnSold Checked
                unSelectCheckBox('#0EB6EBC43B2996A2_sale');

                //if Upcoming auctions Checked
                unSelectCheckBox('#84FFB49EF5919E6A_sale');

            });

    //On Click "Sold or Unsold"
    $('#291443E2B31881C2_sale, #0EB6EBC43B2996A2_sale')
        .on('click',
            function () {
                //if All auctions Checked
                unSelectCheckBox('#19EFD20D308FB8EE_sale');

                //if Upcoming auctions Checked
                unSelectCheckBox('#84FFB49EF5919E6A_sale');
            });

    //On Click "Upcoming"
    $('#84FFB49EF5919E6A_sale')
        .on('click',
            function () {
                //if All auctions Checked
                unSelectCheckBox('#19EFD20D308FB8EE_sale');

                //if Sold Checked
                unSelectCheckBox('#291443E2B31881C2_sale');

                //if UnSold Checked
                unSelectCheckBox('#0EB6EBC43B2996A2_sale');
            });
}




function createSearchTerm(text) {
    // Regex to remove specail characters from term in URL path
    var regex = window.DecorateURLRegex;
    var subst = window.DecorateURLChar;

    // Trim the text to 256 chars
    var displayText = text.substring(0, 200);
    if (displayText === '') {
        return;
    }

    var terms = new Array();
    terms = text.split(' ');
    //var finalTerm = '';
    //for (var i = 0; i < terms.length; i++) {
    //    finalTerm = finalTerm + terms[i];
    //    finalTerm = finalTerm + '+';
    //}

    //if (finalTerm.length > 0) {
    //    finalTerm = finalTerm.substr(0, finalTerm.length - 1);
    //}

    displayText = encodeURIComponent(displayText.replace(regex, subst));
    //finalTerm = HtmlEncode(finalTerm);
    //finalTerm = encodeURIComponent(finalTerm);
    var clnString = displayText;
    while (clnString[clnString.length - 1] === ".")
        clnString = clnString.slice(0, -1);
    return clnString + '/?q=' + displayText;
}

String.prototype.getValueByKey = function getValueByKey(k) {
    var p = new RegExp('\\b' + k + '\\b', 'gi');
    return this.search(p) !== -1 ? decodeURIComponent(this.substr(this.search(p) + k.length + 1).substr(0, this.substr(this.search(p) + k.length + 1).search(/(&|;|$)/))) : "";
};

//=====================================================

function hasValue(obj, key, value) {
    return obj.hasOwnProperty(key) && obj[key] === value;
}

function setSelectedItems(urlName, blockName, tail, defaultChecked) {
    var queryStr = getParameterByName(urlName);

    if (queryStr) {
        $('.filter-only-block').show();
        var queryArr = queryStr.split('_');

        if (queryArr) {
            $.each(queryArr,
                function (i, item) {
                    var $selectedInput = $('#' + blockName + ' input[id^=' + item + ']');
                    $selectedInput.attr("checked", true);
                    var $parent = $selectedInput.parent();
                    $parent.addClass('activefilter');
                    $parent.parent().prepend($parent);

                    $selectedInput = $('#' + blockName + ' input[id^=' + item + ']');

                    var filtersExistArr = $('.filters-line .filter-only-block .btn.filter-btn');
                    var searchItem = 'filter-' + item + tail;

                    // ===== Check if filter exist in array ======
                    var isExist = false;
                    if (filtersExistArr.length > 0) {
                        $.map(filtersExistArr,
                            function (val) {
                                if (val.id === searchItem) {
                                    isExist = true;
                                }
                            })
                    }
                    //===========================================

                    if (!isExist) {
                        var idName = item + tail;
                        $('.filters-line .clear')
                            .before('<div class="btn filter-btn" id="filter-' +
                                idName +
                                '">' +
                                $selectedInput.parent().text().trim() +
                                '</div>');
                        $('#filter-' + idName).bind('click');
                    }
                    var $elm = $(item.parent)
                });
        }
    }
    else if (defaultChecked) {
        $('#' + blockName + ' input[type=checkbox]').attr('checked', true);
    }
}

function getSelectedLastItem(urlName) {
    var res = '';
    var queryStr = getParameterByName(urlName);
    if (queryStr) {
        var queryArr = queryStr.split('_');
        if (queryArr.length > 0) {
            res = queryArr[queryArr.length - 1];
        }
    }
    return res;
}


// =============== Sliders ========================================================

function setSelectedRange(urlParamNameMin, urlParamNameMax, idName, measure) {
    var slideBlock = $(idName).children();

    var minVal = getParameterByName(urlParamNameMin);
    var maxVal = getParameterByName(urlParamNameMax);;

    if (minVal && maxVal) {
        var err;
        try {
            $(slideBlock).slider('values', 0, minVal);
        } catch (e) {
            err = e;
        }

        try {
            $(slideBlock).slider('values', 1, maxVal);
        } catch (e) {
            var err2 = e;
        }

        //=== Patch - if min=max is stack ====
        if (minVal === maxVal) {
            var tmpMin = minVal - 10;

            try {
                $(slideBlock).slider('values', 0, tmpMin);
            } catch (e) {
                err = e;
            }

            try {
                $(slideBlock).slider('values', 0, minVal);
            } catch (e) {
                err = e;
            }
        }
        //====================================

        $(slideBlock).children().children('.amount-min').html(minVal + measure);
        $(slideBlock).children().children('.amount-max').html(maxVal + measure);
    }
}

function setMinMaxLimitsRange(idName, minValue, maxValue) {
    var slideBlock = $(idName).children();
    $(slideBlock).slider('option', { min: minValue, max: maxValue });
}


function getMinMaxSelectedRange(idName) {
    var retVal = [0, 0];
    var slideBlock = $(idName).children();

    if (slideBlock.length > 0) {
        retVal[0] = $(slideBlock).slider("values", 0);
        retVal[1] = $(slideBlock).slider("values", 1);
    }

    return retVal;
}


function isRangeChanged(idName) {
    var retVal = false;
    var slideBlock = $(idName).children();

    var minLimit = parseInt(slideBlock.attr('min'));
    var maxLimit = parseInt(slideBlock.attr('max'));

    var selectedRange = getMinMaxSelectedRange(idName);

    if ((minLimit && maxLimit) || (minLimit + maxLimit)) {
        if (minLimit !== selectedRange[0] || maxLimit !== selectedRange[1]) {
            retVal = true;
        }
    }

    return retVal;
}
//========================================================

//============ Input Range ===============================

function getMinMaxInputSection(idName) {
    var retVal = null;
    var rangeBlock = $(idName).children()

    if (rangeBlock.length > 0) {
        retVal = rangeBlock.find('.input');
    }

    return retVal;
}

function getMinMaxSelectedInputRange(idName) {
    var retVal = [0, 0];
    var rangeInputs = getMinMaxInputSection(idName);

    if (rangeInputs) {
        if (rangeInputs.length > 0) {
            retVal[0] = rangeInputs[0].value;
            retVal[1] = rangeInputs[1].value;

        }
    }

    return retVal;
}

function setInputSelectedRange(urlParamNameMin, urlParamNameMax, idName, measure) {
    var rangeBlock = getMinMaxInputSection(idName);

    var minVal = getParameterByName(urlParamNameMin);
    var maxVal = getParameterByName(urlParamNameMax);;

    if (minVal || maxVal) {
        $(rangeBlock[0]).val(minVal);
        $(rangeBlock[1]).val(maxVal);
    }
}

function isInputRangeChanged(idName) {
    var retVal = false;
    var rangeInputs = getMinMaxInputSection(idName);

    if (rangeInputs) {
        if (rangeInputs.length > 0) {
            retVal = true;
        }
    }

    return retVal;
}

//========================================================


function setSlideshowOrListView() {
    if (getParameterByName('Mode')) {
        $('li#slideshow-view-switch').addClass('current');
        $('li#list-view-switch').removeClass('current');
    } else {
        $('li#slideshow-view-switch').removeClass('current');
        $('li#list-view-switch').addClass('current');
    }
}

function sortResultsList() {
    var value = $("#sortResultsList input[type=radio]:checked").val();
    var url = window.location.href.replace(/(&?)Params=[a-zA-Z0-9]+/, "");

    url += (url.indexOf("?") > 1 ? "&" : "?") + value;

    window.location = url;
}

function orderDataByProps() {

    var dateDescSort = $('#orderSaleDateDesc').text();
    var dateSort = $('#orderSaleDate').text();
    var priceDescSort = $('#orderPriceDesc').text();
    var priceSort = $('#orderPrice').text();

    var curentSort = 'Params=' + getParameterByName('Params');

    if (curentSort) {
        if (curentSort === dateDescSort) {
            $('span.date-sort.sort-by').addClass('active');
        } else if (curentSort === priceDescSort) {
            $('span.price-sort.sort-by').addClass('active');
        }
    }

    $('span.date-sort.sort-by').on('click', function () {
        var newParams;

        if ($('span.date-sort.sort-by').hasClass('active')) {
            newParams = $('#orderSaleDateDesc').text();
        } else {
            newParams = $('#orderSaleDate').text();
        }

        window.location.href = window.location.pathname + getUrlWithNewParams(newParams);
    });


    $('span.price-sort.sort-by').on('click', function () {
        var newParams;

        if ($('span.price-sort.sort-by').hasClass('active')) {
            newParams = $('#orderPriceDesc').text();
        } else {
            newParams = $('#orderPrice').text();
        }

        window.location.href = window.location.pathname + getUrlWithNewParams(newParams);
    });
}

function getUrlWithNewParams(newParams) {
    var retVal = newParams;

    if (window.location.search.length > 0) {
        if (window.location.search.indexOf('Params=') > 0) {
            retVal = window.location.search.replace('Params=' + getParameterByName('Params'), newParams);
        } else {
            retVal = window.location.search + '&' + newParams;
        }
    } else {
        retVal = '?' + retVal;
    }

    return retVal;
}

function setMeasureUnit(measure) {
    //get dimation type //1 = cm, 0 = inch

    if (measure) {
        //getMinMaxSelectedRange()

        //find all sliders with cm and inch
        var allRange = $('[id^=measure_][id$=Cm]').closest('.slider-row');

        if (measure === 'inch') {
            $('[id^=measure_][id$=Cm]').removeClass('active');
            $('[id^=measure_][id$=Inch]').addClass('active');

            allRange.each(function () {
                $(this).find('.slider-range').attr('icoright', 'in');
                var mi = $(this).parent().find('.amount-min');
                var mx = $(this).parent().find('.amount-max');


                $(mi).text(ui.values[0] + 'in');
                $(mx).text(ui.values[1] + 'in');
            });



        } else {
            $('[id^=measure_][id$=Cm]').addClass('active');
            $('[id^=measure_][id$=Inch]').removeClass('active');

            allRange.each(function () {
                $(this).find('.slider-range').attr('icoright', 'cm');
            });

        }
    }
}

function initSwitchCmInch() {
    $('span.measureTitle')
        .on('click',
            function () {
                var toInch = true;
                var measure = 'in';

                if ($(this).html() === measure) {
                    toInch = false;
                    measure = 'cm';
                }
                if ($('span.measureTitle').length > 0) {
                    switchCmInchTitle(measure);
                    switchCmInchValue(toInch);
                    switchCmInchPlaceHolder(measure, toInch);
                }
            });

}

function switchCmInchTitle(titleTochange) {
    $('span.measureTitle')
        .each(function () {
            $(this).html(titleTochange);
        });
}

function switchCmInchValue(toInch) {
    $('input.measureValue')
        .each(function () {
            var mValueStr = $(this).val();

            if (mValueStr.length > 0) {
                var finalVal

                var mValInt;
                if (toInch) {
                    mValInt = parseInt(mValueStr);
                    finalVal = convertCmToInch(mValInt)
                } else {
                    mValInt = parseInt(mValueStr);
                    finalVal = convertInchToCm(mValInt)
                }

                if (finalVal) {
                    $(this).val(finalVal);
                }
            }
        });
}

function switchCmInchPlaceHolder(titleTochange, toInch) {
    $('input.measureValue')
        .each(function () {
            var placeHolder = $(this).attr('placeholder');
            var mValToReplace;
            var mVal;
            var mValInt;
            var newPlaceHolder

            if (placeHolder) {
                mValToReplace = placeHolder.substring(placeHolder.indexOf(' - ') + 3);

                if (toInch) {
                    mVal = placeHolder.substring(placeHolder.indexOf(' - ') + 3, placeHolder.indexOf('cm'));
                    mValInt = parseInt(mVal);

                    var inch = convertCmToInch(mValInt)
                    newPlaceHolder = placeHolder.replace(mValToReplace, inch + titleTochange);
                } else {
                    mVal = placeHolder.substring(placeHolder.indexOf(' - ') + 3, placeHolder.indexOf('inch'));
                    mValInt = parseInt(mVal);

                    var cm = convertInchToCm(mValInt);
                    newPlaceHolder = placeHolder.replace(mValToReplace, cm + titleTochange);
                }

                $(this).attr('placeholder', newPlaceHolder);
            }
        });
}

function getDimType() {
    // dimType = //1 = cm, 0 = inch
    var retVal = null;
    if ($('span.measureTitle').length > 0) {
        var tmpArr = $('span.measureTitle');

        if ($(tmpArr).html() === 'cm') {
            retVal = '1';
        } else {
            retVal = '0';
        }
    }

    return retVal;
}

function getDimTypeForQueryString() {
    var retVal = '';
    var dimType = getDimType();

    if (dimType) {
        retVal = '&dimTy=' + dimType;
    }

    return retVal;
}

function scrollToLastDashboardFilter() {
    if ($("#preferencedArtistsFilter").length == 0)
        return;

    var last_checkeced = $("#preferencedArtistsFilter input.artist-filter:checked");

    if (last_checkeced.length == 0)
        return;

    var topLoc = last_checkeced.last().next()[0].offsetTop;

    var height = $("#preferencedArtistsFilter").height();

    $("#preferencedArtistsFilter").scrollTop(topLoc - 70);
}

function setDashboardFilter(isApplyClick, event) {
    if ($('.apply-panel').is(':hidden') || isApplyClick) {
        var url = "";

        var values = [];

        var firstCheckbox = $("#preferencedArtistsFilter > div:first-child .artist-filter");

        if (event.target == firstCheckbox[0] && event.target.checked) {
            $("#preferencedArtistsFilter > div:not(:first-child) .artist-filter").attr("checked", false);
        }

        $(".filterContentType2:checked").each(function () { values.push(this.value); });

        var types = values.join();


        var selectedChecboxes = $(".artist-filter:checked");


        if (selectedChecboxes.length > 0) {

            if (selectedChecboxes.length > 1 && firstCheckbox[0].checked) {
                firstCheckbox.attr("checked", false);
            }

            var onlyFirstSelected = (selectedChecboxes.length == 1 && firstCheckbox[0].checked);

            if (!onlyFirstSelected && selectedChecboxes.length > 0) {
                var selectedArtists = getSelectedItems('preferencedArtistsFilter');
                url += "?" + createQueryStringFromFilters('artist', selectedArtists);
            }
        }

        if (types != "") {
            url += (url != "" ? "&" : "?") + "type=" + types;

            url = "/my-preferences" + url;

            top.redirectUrl = url;

            if (typeof (top.redirectTimeout) != "undefined") {
                clearTimeout(top.redirectTimeout);
            }


            //$(".list-of-artists-content").html("<img src='/img/ajax-loader.gif'>");

            if (typeof (top.RedirectStarted) != "undefined" || isApplyClick) {
                location.href = top.redirectUrl;
            } else {
                top.redirectTimeout = setTimeout(function () {
                    location.href = top.redirectUrl;
                    top.RedirectStarted = true;
                }, 1500);
            }

        }
    }
};
$(document)
    .ready(function () {
        //$(document).on('click touchstart', "[preferences]", SetPersonPreferences);

        initSaveArtist();
        initSaveFilter();

        ArtistModule.check_status_filter_saved_popup();

        initPulaserfollow();

        function initPulaserfollow() {
            $(".Pulsar").on('click', function () {
                var followButton = $(".Pulsar").prev().find(".btn-follow");
                var followhref = $(followButton).attr("href");
                if (followhref) {
                    GTM_Send('event', 'follow', 'unregistered-user-artist-follow', followButton.data("name"));
                    document.location = followhref;
                }

                SetPersonPreferencesfunc(followButton);
            });
        }


        //var isClickedOrTouchstart = false;

        function initSaveFilter() {
            //$(document).on((isMobile() ? 'touchstart' : 'click') , ".btn.save-filter", SetAuctionFilter);
        }

        //function initSaveArtist() {
        //    $(document).on('click touchstart', ".btn-follow:not(.btn-save-follow):not(.btn-save-unfollow):not([href])", SetPersonPreferences);
        //}

        function initSaveArtist() {
            return;
            $(document).on((isMobile() ? 'touchstart' : 'click'), ".btn-follow:not(.btn-save-follow):not(.btn-save-unfollow):not([href])", function (event) {
                //console.log(event);
                //if (!isClickedOrTouchstart) {
                //    isClickedOrTouchstart = true;
                //    setTimeout(function () { console.log(isClickedOrTouchstart); isClickedOrTouchstart = false; console.log("isClickedOrTouchstart  = false"); }, 100);
                if (mixpanel) {
                    mixpanel.track("Click To " + ($(this).text() != "" ? $(this).text() : "Unfollow") + " An Artist");
                }
                SetPersonPreferences($(this));
                //}
            });

            $(document).on((isMobile() ? 'touchstart' : 'click'), ".btn-follow[href*='login']", function (event) {
                GTM_Send('event', 'follow', 'unregistered-user-artist-follow', $(this).parent().data("name"));
            });
        }

        function SetPersonPreferences(that) {
            var elem = that;
            if (elem.hasClass("btn-theme")) {

                var url = "/Ajax/Follow/CheckFollowReachLimit";
                $.post(url)
                    .done(function (data) {

                        if (data.ReachLimit) {
                            GTM_Send('event', 'View reaches follow limitation popup', null, null);
                            upgradeToFollowMorePopup(data.Message);
                        }
                        else {
                            SetPersonPreferencesfunc(elem)
                        }
                    })
                    .fail(function () {


                    });
            }
            else {
                SetPersonPreferencesfunc(elem)
            }
        }

        function SetPersonPreferencesfunc(that) {
            var elem = that;
            if (elem.attr("id") === "signup") {
                GTM_Send('event', 'follow', 'unregistered-user-artist-follow', elm.data("name"));
                //this case when the popup window open for login\signup, the a tag have 2 event listener - 1 this - 2 SetPopupClick()
                return;
            }

            var post =
            {
                objectId: elem.data("id"),
                objectType: elem.data("type"),
                isChecked: elem.hasClass("btn-cta")
            }
            //console.log(post);

            $.ajax({
                method: 'POST',
                url: '/Ajax/Follow/SetPreferences',
                dataType: "json",
                data: post,
                success: function (data) {
                    var name = elem.data("name");
                    var label = elem.attr("utm");

                    if (post.isChecked) {
                        //isRight will be in the artist page where there is follow in the header, in that case i want to put float right
                        //if (elem.hasClass("isRight")) {
                        //    elem.addClass("float-right-btn-follow");
                        //}
                        elem.removeClass("btn-cta v2__tooltip v2__tooltip--bottom tooltip-delay v2__tooltip_wide").addClass("btn-cta-unfollow btn-follow").html("");
                        GTM_Send('event', 'follow', 'artist-follow', name);

                        $(".Pulsar").hide();
                    }
                    else {
                        if (elem.hasClass("isRight")) {
                            elem.removeClass("float-right-btn-follow");
                        }
                        var htmlText = elem.closest('.btn-cta-row').data("html") || $('.btn-cta-row').data("html");
                        var tooltipText = $(elem).data("tooltip");
                        var tooltipCss = "";
                        if (tooltipText) {
                            tooltipCss = "v2__tooltip v2__tooltip--bottom tooltip-delay";
                        }
                        elem.removeClass("btn-cta-unfollow").addClass("btn-cta btn-follow " + tooltipCss).html(htmlText ? htmlText : "Follow");
                        GTM_Send('event', 'unfollow', 'artist-unfollow', name);
                    }
                }

            });
        }
        function SetAuctionFilter() {


            var follow_button = $(".btn-follow[href]");
            if (follow_button.length > 0) {
                var params = { cta: "follow", source_page: page_name }
                location.href = addAnalyticsParamsToUrl('/signup?command=alert', params);
                return;
            }

            var elem = $(this);

            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());

            var isTitleSet = (postTitle == "");
            var isFilterButtonExists = ($(".save-filter").length == 0);

            if (isTitleSet || isFilterButtonExists)
                return;

            var postUrl = window.location.pathname + window.location.search;

            //console.log(postTitle);
            //return;

            var post =
            {
                title: postTitle,
                isChecked: elem.hasClass("forms"),
                url: postUrl
            }

            $.ajax({
                method: 'POST',
                url: '/Ajax/Follow/SetFiltersPreferences',
                dataType: "json",
                data: post,
                success: function (data) {

                    if (data.IsSuccess == true) {

                        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");

                        //GTM_Send('event', 'unfollow', 'artist-unfollow', postTitle);

                    }
                }
            });
        }
    });;
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 isFirstTimeLoaded = true;

$(document)
    .ready(function () {
        fitHtmlBehaviorToPage();
        updateDateInSearchLine();
        updateLocationInSearchLine();
        initSearchByCityInput();
        setBtnMapOrList();
        setExhibitionsMapBanners();

        //initOnDateChange();

        function setBtnMapOrList() {
            if (window.location.pathname.indexOf('BrowseMap') > 0) {
                $('#list-view-switch').removeClass('current');
                $('#map-view-switch').addClass('current');
                $('.load-artists-btn').show();
                $('#exhibitions-switcher-map').show();
                $('#exhibitions-switcher-list').hide();

                initMapOrListView(true);
            } else {
                $('.load-artists-btn').hide();
                $('#exhibitions-switcher-map').hide();
                $('#exhibitions-switcher-list').show();
                initMapOrListView(false);
            }
        }

        function initMapOrListView(isMapView) {
            if (isMapView) {
                $('#exhibitions-switch-map').show();
                $('#exhibitions-switch-list').hide();

                $('.advanced-search').hide();
                //$('.advanced-search').attr('style', 'display:none !important');
                //$('#search-form-exhibition').attr('style', 'display:none !important');
            } else {
                //$('#exhibitions-switch-map').hide();
                $('#exhibitions-switcher-map').show();
                $('#exhibitions-switch-list').show();
                $('#list-view-switch-map').addClass('current');
                $('#map-view-switch-map').removeClass('current');
            }

            if (isExhibitionsPage()) {
                //$('#exhibitions-switch-map').hide();
                $('#exhibitions-switcher-map').hide();
                $('#exhibitions-switch-list').hide();
            }
        }

        function updateDateInSearchLine() {
            var dateRange = getParameterByName('DateRange');

            if (dateRange && dateRange.indexOf('_') !== -1) { //Set Selected Date
                var dateArr = dateRange.split('_');
                if (dateArr.length > 1) {
                    var fromDate = $.datepicker.parseDate('yy-mm-dd', dateArr[0]);
                    $('.input-daterange #from, .input-daterange #fromMobile').datepicker('setDate', fromDate);
                    var toDate = $.datepicker.parseDate('yy-mm-dd', dateArr[1]);
                    $('.input-daterange #to, .input-daterange #toMobile').datepicker('setDate', toDate);
                }
            } else { //Set default date
                var d = new Date();
                var toDateTmp = new Date();

                toDateTmp.setDate(d.getDate() + 30);
                setDatepickerDate(d, toDateTmp);
            }
        }

        function updateLocationInSearchLine() {
            if (window.location.pathname.indexOf('Browse') > 0) {
                var locationStr = window.location.pathname.substring(window.location.pathname.indexOf('Browse') + 7);

                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                    locationStr = window.location.pathname
                        .substring(window.location.pathname.indexOf('BrowseMap') + 10);
                }
                if (locationStr.length > 0) {
                    var locationArr = locationStr.split('/');

                    $selectedCity.label = htm2txt(locationArr[0]);
                    $selectedCity.value = htm2txt(locationArr[0]);
                    $selectedCity.Id = locationArr[1];

                    var locationData = replaceAll($selectedCity.label, '--', ', ');
                    locationData = replaceAll(locationData, '-', ' ');
                    $(".autocomplete-search-bar-wide").find("#searchByCity").val(htm2txt(locationData));
                    //$("#autocomplete-search-bar-small").find("#searchByCityMobile").val(locationData);
                }

                if ($("#hdnLocationDetail").length > 0) {
                    $selectedCity.label = $("#hdnLocationDetail").attr("data-name");
                    $selectedCity.value = $("#hdnLocationDetail").attr("data-name");
                    $selectedCity.Id = $("#hdnLocationDetail").attr("data-id");
                    $(".autocomplete-search-bar-wide").find("#searchByCity").val($selectedCity.label);
                }
            }
        }

        function fitHtmlBehaviorToPage() {
            if (!isExhibitionsPage()) {
                $('.advanced-search').attr('style', 'display:block');
                $('#search-form-exhibition-mobile').parent().hide();
            }
            else if (IsPage('exhibitionsearchresults')) {
                $('.find-exhibitions-switch').show();
            }
            else {
                $('.find-exhibitions-switch').hide();
            }
        }

        function setExhibitionsMapBanners() {
            if ($('.exhibition-map-banner .list.row').length < 2) {
                $('#exhibition-map-view-switch').hide();
            }
            $('#exhibition-map-view-switch').on('click', function () {
                var url;
                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                if (isExhibitionsPage()) {
                    url = url + getLocationUrl($selectedCity)

                } else {
                    var locElem = $("[itemprop|=organizer] .location")[0];
                    url = `${url}${locElem.innerText.replace(/\s/g, '').replaceAll('|', '--')}/${locElem.dataset.addrid}?DateRange=${locElem.dataset.eventdate}`;

                }
                window.location.href = url.replace('Browse', 'BrowseMap')
                    .replace('browse', 'BrowseMap');
            });
        }

        //==========================================================
        //====== FILTERS ============================================
        //setSelectedHeppening();
        setAllSelectedItemsToFilters();
        //orderArtistsCheckBoxFiltersByActive();
        initArtistsBlockScrollTop();

        /*if (localStorage.artistsBlockScrollPosition) {
            $("div#artistsBlock").scrollTop(localStorage.getItem("artistsBlockScrollPosition"));
            localStorage.removeItem("artistsBlockScrollPosition");
        }*/
        /*if (localStorage.exhibitionSearchScrollPosition) {
            $(window).scrollTop(localStorage.getItem("exhibitionSearchScrollPosition"));
            localStorage.removeItem("exhibitionSearchScrollPosition");
        }*/
        initTitleAutocomplete();

        //=== On Click Apply Search data with new filters
        $('#advanced-filters #apply, #searchExhByCityMobile')
            .on("click touchstart",
                function () {
                    //if selected city
                    if ($selectedCity.Id !== -1) {
                        //var keyword = $('#keyword').val();
                        //var areaSelectedArr = getSelectedItems('areaBlock');
                        //var artistsSelectedArr = getSelectedItems('artistsBlock');
                        //var venueSelectedArr = getSelectedItems('venueBlock');
                        //var happeningSelectedArr = getSelectedItems('happeningBlock');

                        //setHeppeningDate(happeningSelectedArr);

                        //var dateStr = getDateUrl();

                        //var queryStr = createQueryStringFromFilters('Locations', areaSelectedArr);
                        //queryStr = queryStr + createQueryStringFromFilters('Artist', artistsSelectedArr);
                        //queryStr = dateStr + queryStr + createQueryStringFromFilters('Venues', venueSelectedArr);

                        //if (keyword) {
                        //    queryStr = queryStr + '&keyword=' + keyword;
                        //}

                        var queryStr = createQuerystringOnApply();

                        //====== Google Analytics Search ========================================
                        if (($(this).attr("id") === 'searchExhByCity') ||
                            ($(this).attr("id") === 'searchExhByCityMobile') ||
                            ($(this).attr("id") === 'searchExhByCity')) {
                            googleAnalyticsExhibitionSearch(queryStr);
                        } else if (($(this).attr("id") === 'apply') || ($(this).attr("id") === 'input#apply')) {
                            googleAnalyticsFilters('Exhibition', queryStr);
                        }
                        //=======================================================================

                        if (queryStr.length > 0) {
                            queryStr = '?' + queryStr.substring(1);
                            window.location.href = window.location.pathname + queryStr;

                            var url;
                            if (isExhibitionsPage()) {
                                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                                }

                                window.location.href = url + getLocationUrl($selectedCity) + getDateUrl();
                            } else {
                                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                                }

                                window.location.href = url + getLocationUrl($selectedCity) + queryStr;
                            }
                        }
                    }
                });

        $('.searchExhByCity, .search-form-exhibition input#apply')
            .on("click touchstart",
                function () {
                    //if selected city
                    if ($selectedCity.Id !== -1) {
                        //var keyword = $('#keyword').val();
                        //var areaSelectedArr = getSelectedItems('areaBlock');
                        //var artistsSelectedArr = getSelectedItems('artistsBlock');
                        //var venueSelectedArr = getSelectedItems('venueBlock');
                        //var happeningSelectedArr = getSelectedItems('happeningBlock');

                        //setHeppeningDate(happeningSelectedArr);

                        //var dateStr = getDateUrl();

                        //var queryStr = createQueryStringFromFilters('Locations', areaSelectedArr);
                        //queryStr = queryStr + createQueryStringFromFilters('Artist', artistsSelectedArr);
                        //queryStr = dateStr + queryStr + createQueryStringFromFilters('Venues', venueSelectedArr);

                        //if (keyword) {
                        //    queryStr = queryStr + '&keyword=' + keyword;
                        //}

                        var queryStr = createQuerystringOnApply();

                        //====== Google Analytics Search ========================================
                        if (($(this).attr("id") === 'searchExhByCity') ||
                            ($(this).attr("id") === 'searchExhByCityMobile') ||
                            ($(this).attr("id") === 'searchExhByCity')) {
                            googleAnalyticsExhibitionSearch(queryStr);
                        } else if (($(this).attr("id") === 'apply') || ($(this).attr("id") === 'input#apply')) {
                            googleAnalyticsFilters('Exhibition', queryStr);
                        }
                        //=======================================================================

                        if (queryStr.length > 0) {
                            queryStr = '?' + queryStr.substring(1);
                            window.location.href = window.location.pathname + queryStr;

                            var url;
                            if (isExhibitionsPage()) {
                                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                                }

                                window.location.href = url + getLocationUrl($selectedCity) + getDateUrl();
                            } else {
                                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                                }

                                window.location.href = url + getLocationUrl($selectedCity) + queryStr;
                            }
                        }
                    }
                });

        //========= Switch Map / List View ==========
        $('#map-view-switch, #map-view-switch-map')
            .on('click',
                function () {
                    if (!$('#map-view-switch').hasClass("current") && !$('#map-view-switch-map').hasClass("current")) {
                        //

                        //
                        var params = getParameterByName('Params');
                        if (params) {
                            params = "&Params=" + params;
                        } else {
                            params = '';
                        }

                        if (window.location.pathname.indexOf('Browse') < 0) {
                            var url;
                            url = baseDomain + '/ExhibitionSearchResults/Browse/';
                            url = url + getLocationUrl($selectedCity)
                            window.location.href = url.replace('Browse', 'BrowseMap')
                                .replace('browse', 'BrowseMap')
                                .replace(params, '');
                        }
                        else {
                            window.location.href = window.location.href.replace('Browse', 'BrowseMap')
                                .replace('browse', 'BrowseMap')
                                .replace(params, '');
                        }
                    }
                });

        $('#list-view-switch, #list-view-switch-map')
            .on('click',
                function () {
                    if (!$('#list-view-switch').hasClass("current")) {
                        var searchRedirect = window.location.search.substr(0, window.location.search.indexOf('&ne'));

                        window.location.href = window.location.pathname.replace('BrowseMap', 'Browse')
                            .replace('browseMap', 'Browse')
                            .replace('browsemap', 'Browse') +
                            searchRedirect;
                    }
                });
        //=============================================

        function getArtistsFilters() {
            $.ajax({
                method: 'POST',
                url: '/Ajax/ExhibitionSearchResults/GetArtistsFilters',
                dataType: "json",

                success: function (data) {
                    $.each(data,
                        function (index, value) {
                            $("#artistsBlock")
                                .append("<label class='checkbox-filter col-xs-12 col-sm-6 col-md-4 col-lg-6'  for='" +
                                    value.Id +
                                    "'><input type='checkbox' name='" +
                                    value.Id +
                                    "' id='" +
                                    value.Id +
                                    "'><span>" +
                                    value.Value +
                                    "</span></label>");
                        });

                    initMoreFilters();
                },
                error: function (jqXHR, exception) {
                    var msg = '';
                }
            });
        }

        function getLocationsFilters() {
            $.ajax({
                method: 'POST',
                url: '/Ajax/ExhibitionSearchResults/GetLocationsFilters',
                dataType: "json",

                success: function (data) {
                    $.each(data,
                        function (index, value) {
                            $("#areaBlock")
                                .append("<label for='" +
                                    value.Id +
                                    "'><input type='checkbox' name='" +
                                    value.Id +
                                    "' id='" +
                                    value.Id +
                                    "'><span>" +
                                    value.Value +
                                    "</span></label>");
                        });
                },
                error: function (jqXHR, exception) {
                    var msg = '';
                }
            });
        }

        function setAllSelectedItemsToFilters() {
            $('#keyword').val(getParameterByName('keyword'));
            setSelectedItems('Venues', 'venueBlock', 'venue');
            //setSelectedItems('Artist');
            //setSelectedItems('Locations');
        }
    });

//========== HeppeningDate ===========================
function setHappeningDateFromQuerystring(happeningSelectedArr) {
    var retVal = '';

    var fromDate;
    var toDate;

    var fromDateTmp = new Date();
    var toDateTmp = new Date();

    if (happeningSelectedArr.length > 0) {
        $.each(happeningSelectedArr,
            function (i, val) {
                fromDateTmp = new Date();
                toDateTmp = new Date();

                if (val === 'on') { //on Now
                    fromDateTmp.setDate(fromDateTmp.getDate());
                    toDateTmp.setDate(toDateTmp.getDate() + 1);

                    fromDate = getMinimumDate(fromDate, fromDateTmp);
                    toDate = getMaximumDate(toDate, toDateTmp);

                    $('.input-daterange #from, .input-daterange #fromMobile').datepicker('setDate', fromDate);
                    $('.input-daterange #to, .input-daterange #toMobile').datepicker('setDate', toDate);
                } else if (val === 'os') { //Opening soon
                    fromDateTmp.setDate(fromDateTmp.getDate());
                    toDateTmp.setDate(toDateTmp.getDate() + 10);

                    fromDate = getMinimumDate(fromDate, fromDateTmp);
                    toDate = getMaximumDate(toDate, toDateTmp);

                    retVal = retVal + "&MinDate=" + $.datepicker.formatDate("yy-mm-dd", fromDate);
                } else if (val === 'cs') { //Closing soon
                    fromDateTmp.setDate(fromDateTmp.getDate());
                    toDateTmp.setDate(toDateTmp.getDate() + 10);

                    fromDate = getMinimumDate(fromDate, fromDateTmp);
                    toDate = getMaximumDate(toDate, toDateTmp);

                    retVal = retVal + "&MaxDate=" + $.datepicker.formatDate("yy-mm-dd", toDate);
                }
            });

        //$('.input-daterange #from, .input-daterange #fromMobile').datepicker('setDate', fromDate);
        //$('.input-daterange #to, .input-daterange #toMobile').datepicker('setDate', toDate);
    }

    return retVal;
}

function setSelectedHeppening() {
    var fromDate = $('.input-daterange #from').datepicker("getDate");
    var toDate = $('.input-daterange #to').datepicker("getDate");

    var fromDateTmp = new Date();
    var toDateTmp = new Date();

    fromDateTmp.setHours(0, 0, 0, 0);
    toDateTmp.setHours(0, 0, 0, 0);

    fromDateTmp.setDate(fromDateTmp.getDate());
    toDateTmp.setDate(toDateTmp.getDate() + 1);

    //============ On Now ==========================
    if ((fromDate - fromDateTmp) <= 0 && (toDate - fromDateTmp) >= 0) {
        selectCheckBox('input#on');
    }
    //===============================================

    //============ Opening soon =====================
    var minDate = getParameterByName('MinDate');

    if (minDate) {
        selectCheckBox('input#os');
    }
    //===============================================

    //============ Closing soon =====================
    var maxDate = getParameterByName('MaxDate');

    if (maxDate) {
        selectCheckBox('input#cs');
    }
    //===============================================
}

function orderArtistsCheckBoxFiltersByActive() {
    $('#artistsBlock .activefilter').each(function () {
        var item = $(this);
        $(this).remove();
        $("#artistsBlock").prepend(item);
        if (!isMobile()) {
            $(item).on('click', function () {
                ApplyExhibitionSearch();
            });
        }
    });
}

function saveExhibitionSearchPageScrollPosition() {
    var exhibitionSearchScrollPosition = $(window).scrollTop();
    localStorage.setItem("exhibitionSearchScrollPosition", exhibitionSearchScrollPosition);
}

function saveArtistsBlockScrollPosition() {
    var artistsBlockScrollPosition = $("div#artistsBlock").scrollTop();
    localStorage.setItem("artistsBlockScrollPosition", artistsBlockScrollPosition);
}

function initOnDateChange() {
    $('input#from, input#to').change(function () {
        $('#happeningBlock .checkbox-filter span').each(function () {
            if ($(this).parent().hasClass('activefilter')) {
                $(this).trigger('click');
            }
        });
    });
}

function getMinimumDate(dateFirst, dateSecond) {
    var minDate = dateFirst;
    if (dateFirst && dateSecond) {
        var dates = [];
        dates.push(new Date(dateFirst));
        dates.push(new Date(dateSecond));

        minDate = new Date(Math.min.apply(null, dates));
    } else {
        if (dateSecond) {
            minDate = dateSecond;
        }
    }

    return minDate;
}

function getMaximumDate(dateFirst, dateSecond) {
    var maxDate = dateFirst;
    if (dateFirst && dateSecond) {
        var dates = [];
        dates.push(new Date(dateFirst));
        dates.push(new Date(dateSecond));

        maxDate = new Date(Math.max.apply(null, dates));
    } else {
        if (dateSecond) {
            maxDate = dateSecond;
        }
    }

    return maxDate;
}

function setDatepickerDate(fromDateStr, toDateStr) {
    if ($.datepicker) {
        var fromDate = new Date(fromDateStr);
        var toDate = new Date(toDateStr);

        $('.input-daterange #from, .input-daterange #fromMobile').datepicker('setDate', fromDate);
        $('.input-daterange #to, .input-daterange #toMobile').datepicker('setDate', toDate);
    }
}

function daydiff(first, second) {
    return Math.round((second - first) / (1000 * 60 * 60 * 24));
}

function createLocationQuerystringOnApply() {
    var areaSelectedArr = getSelectedItems('areaBlock');
    var happeningSelectedArr = getSelectedItems('happeningBlock');
    createQueryStringFromFilters('Locations', areaSelectedArr);
    var happeningQueryStr = setHappeningDateFromQuerystring(happeningSelectedArr);
    var dateStr = getDateUrl();
    return dateStr + happeningQueryStr;
}

function createQuerystringOnApply() {
    if (IsPage('exhibitionsearchresults_browsemap')) {
        if (window['manager']) {
            var query = manager.getOnlyQuery();
            if (query) {
                return query;
            }
            return '';
        }
    }

    var keyword = $('#keyword').val();
    var areaSelectedArr = getSelectedItems('areaBlock');
    var artistsSelectedArr = getSelectedItems('artistsBlock');
    var venueSelectedArr = getSelectedItems('venueBlock');
    var happeningSelectedArr = getSelectedItems('happeningBlock');

    var happeningQueryStr = setHappeningDateFromQuerystring(happeningSelectedArr);

    var dateStr = getDateUrl();

    var queryStr = createQueryStringFromFilters('Locations', areaSelectedArr);
    queryStr = queryStr + createQueryStringFromFilters('Artist', artistsSelectedArr);
    queryStr = dateStr + happeningQueryStr + queryStr + createQueryStringFromFilters('Venues', venueSelectedArr);

    if (keyword) {
        queryStr = queryStr + '&keyword=' + keyword;
    }

    return queryStr;
}

function initMapPage() {
    $('#footer').hide();
}

function initSearchByCityInput() {
    $("#searchByCity")
        .keypress(function () {
            $selectedCity = { label: "", value: "", Id: -1 };
        });
}

function initAllFiltersBtn() {
    $('div.all-btn')
        .click(function () {
            $('.filter-block .hiddenFilters')
                .each(function () {
                    $(this).toggleClass('active');
                });
            $('.all-btn').toggleClass('active');
        });
    //orderArtistsCheckBoxFiltersByActive();
    initArtistsBlockScrollTop();
    if (!isMobile()) {
        $(".search-form-exhibition input:checkbox").on('click', function () {
            ApplyExhibitionSearch();
        });
    }
}

function initArtistsBlockScrollTop() {
    var lastSelected = getSelectedLastItem("Artist");
    if (lastSelected) {
        var selectedInput = $("div#artistsBlock input[name='" + lastSelected + "']");
        if (selectedInput) {
            var nextDivPosition = $(selectedInput).next().position();
            if (nextDivPosition) {
                $("div#artistsBlock").scrollTop(nextDivPosition.top);
            }
        }
    }
}

function initTitleAutocomplete() {
    if ($.ui && $.ui.autocomplete) {
        $("#advanced-filters #keyword").autocomplete({
            //        autoFocus: true,
            delay: 600,
            source: function (request, response) {
                $.ajax({
                    method: 'POST',
                    url: '/ajax/AutoComplete/GetExhibitionsTitlesByLocationAndDate',
                    dataType: "json",
                    data: {
                        limit: 50,
                        q: request.term,
                        id: $selectedCity.Id,
                        startDate: $.datepicker.formatDate("yy-mm-dd", $('.input-daterange #from').datepicker("getDate")),
                        endDate: $.datepicker.formatDate("yy-mm-dd", $('.input-daterange #to').datepicker("getDate"))
                    },
                    success: function (data) {
                        response(data);
                    },
                });
            },
            select: function (event, ui) {
                SendTitleAutocompleteResultToMP();
                if (!isMobile()) {
                    ApplyExhibitionSearch();
                }
            }
        });
    }
}

function SendTitleAutocompleteResultToMP() {
    if (history.pushState) {
        var url = removeURLParameter(window.location.href, "keyword");
        window.history.pushState({ path: url }, '', url);
        insertParam("keyword", $("#keyword").val())
    }

    $.ajax({
        method: 'POST',
        url: '/ajax/AutoComplete/SendTitleAutocompleteResultToMP',
        dataType: "json",
        data: {
            //q: $("#keyword").val(),
            location: $selectedCity.Id,
            count: $('.ui-autocomplete > li').length
        },
        success: function (data) {
            response(data);
        },
    });
};
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 MaModule(element) {
  var self = this;
  self._elem = $(element);
  return {
    _elem: self._elem
  };
}

var AnalyticsHubPages = {
  ArtMarketAnalysis: 'analyticshub_artmarketanalysis',
  ArtistPerformance: 'analyticshub_artistperformance',
  MutualArtIndex: 'analyticshub_mutualartindex',
  PerformanceAtAuction: 'analyticshub_performanceatauction',
  SimilarLotComparison: 'analyticshub_similarlotcomparison',
  SimilarLotComparisonSingle: 'analyticshub_similarlotcomparisonsingle'
};
var PaymentPages = ['upgrade', 'payment', 'art_appraisalpayment', 'billing', 'change_plan', 'my_collection/change-plan', 'paymentnew'];
var MA = {};
MA.Defaults = {
  Loader: "<div><img style='margin: 10px 48%;' src='/img/ajax-loader.gif' ></div>"
};

function InitPaymentModule() {
  if (!window['PaymentManager'] || window['PaymentManager'].name != "PaymentModule") {
    PaymentModule.prototype = Object.create(MaModule.prototype);
    window['PaymentManager'] = new PaymentModule(document.body).init();
  }
}

$(document).ready(function () {
  MA.ArtworksModule = ArtworksModule;
  MA.ArtistDiscoveryModule = ArtistDiscoveryModule;
  MA.auctionGatePage = auctionGatePage;
  MA.DashboardModule = DashboardModule;
  MA.ArtistModule = ArtistModule;
  MA.AnalyticsHubModule = window['AnalyticsHubModule'];
  first_init();

  function first_init() {
    PreInit();
    MA.ArtworksModule.init();
    if (IsPage(MA.auctionGatePage.PageID)) MA.auctionGatePage.init();else {
      switch (page_name) {
        case MA.ArtistModule.PageID:
          MA.ArtistModule.init();
          break;

        case MA.ArtistDiscoveryModule.PageID:
          MA.ArtistDiscoveryModule.init();
          break;

        case AnalyticsHubPages.ArtMarketAnalysis:
          MA.ArtMarketAnalysisModule = new ArtMarketAnalysisModule();
          MA.ArtMarketAnalysisModule.init();
          MA.CurrentAnalyticsHubModule = MA.ArtMarketAnalysisModule;
          break;

        case AnalyticsHubPages.ArtistPerformance:
          MA.ArtistPerformanceModule = new ArtistPerformanceModule();
          MA.ArtistPerformanceModule.init();
          MA.CurrentAnalyticsHubModule = MA.ArtistPerformanceModule;
          break;

        case AnalyticsHubPages.MutualArtIndex:
          MA.MutualArtIndexModule = new MutualArtIndexModule();
          MA.MutualArtIndexModule.init();
          MA.CurrentAnalyticsHubModule = MA.MutualArtIndexModule;
          break;

        case AnalyticsHubPages.PerformanceAtAuction:
          MA.PerformanceAtAuctionModule = new PerformanceAtAuctionModule();
          MA.PerformanceAtAuctionModule.init();
          MA.CurrentAnalyticsHubModule = MA.PerformanceAtAuctionModule;
          break;

        case AnalyticsHubPages.SimilarLotComparisonSingle:
          MA.SimilarLotComparisonModuleSingle = new SimilarLotComparisonModuleSingle();
          MA.SimilarLotComparisonModuleSingle.init();
          MA.CurrentAnalyticsHubModule = MA.SimilarLotComparisonModuleSingle;
          break;

        case AnalyticsHubPages.SimilarLotComparison:
          MA.SimilarLotComparisonModule = new SimilarLotComparisonModule();
          MA.SimilarLotComparisonModule.init();
          MA.CurrentAnalyticsHubModule = MA.SimilarLotComparisonModule;
          break;

        case 'artwork':
          MA.ArtworkRepeatedSales = new ArtworkRepeatedSales();
          MA.ArtworkRepeatedSales.init();
          break;
      }
    }

    if (PaymentPages.indexOf(page_name) !== -1 && window['PaymentModule']) {
      InitPaymentModule();
    }

    if (window['CollectionManagementModule']) {
      CollectionManagementModule.prototype = Object.create(MaModule.prototype);
      window['COMS'] = new CollectionManagementModule(document.body).init();
    }

    MA.Modules = {};

    MA.LoadModule = function (element, reload) {
      var module = $(element).data("ma-module");
      var path = $(element).data("ma-path");
      var global = $(element).data("ma-global");
      var dynamic = $(element).data("ma-dynamic") != null;
      var min = $(element).data("ma-min") != null ? ".min" : "";

      if (!$(element).data("ma-loaded") || reload) {
        if (window[module]) {
          window[module].prototype = Object.create(MaModule.prototype);
          MA.Modules[global || 'maModule_' + element] = new window[module](element).init();
          $(element).data("ma-loaded", true);
        } else if (dynamic) {
          AddScriptStyleResources(window[module], [path || '/js/modules/' + module + min + '.js'], null, function (res) {
            if (window[module]) {
              window[module].prototype = Object.create(MaModule.prototype);
              MA.Modules[global || 'maModule_' + element] = new window[module](element).init();
              $(element).data("ma-loaded", true);
            }
          });
        }
      }
    };

    $("[data-ma-module]").each(function (i, e) {
      MA.LoadModule(this);
    });

    if (window['manager']) {
      window.addEventListener('popstate', function (event) {
        manager.loadQuery(); //refreshResult(null, window['onLoadMasonryImages']);
      });
    }

    InitCompleted();
  }

  function PreInit() {
    //_resultsCount = null;
    if (window['modulesManagerService']) {
      manager = new modulesManagerService();
      manager.loadALL();
      EmitEvent('managerLoaded');
    } // console.log('total: ' + manager.count() + ' modules');

  }

  function InitCompleted() {}

  MA.PopulateResultCount = function (elm) {
    var resultCountContainer = $(elm);
    var evl = resultCountContainer.data("count-populate");
    var cntResult = window[evl];

    if (cntResult) {
      var rowcount = parseInt(cntResult || 0);
      var format = resultCountContainer.data('format');

      if (format && format.length) {
        // {s}, {c}
        if (rowcount > 0) {
          resultCountContainer.html(format.replace('{s}', rowcount > 1 ? 's' : '').replace('{c}', rowcount));
        } else {
          resultCountContainer.html(resultCountContainer.data("empty"));
        }
      } else {
        resultCountContainer.html((rowcount == 5000 ? 'Top ' + rowcount : rowcount == 0 ? 'No' : rowcount) + ' Results');
      }
    }
  };

  MA.PopulateResultsCount = function () {
    $("[data-count-populate]").each(function (i, e) {
      MA.PopulateResultCount(e);
    });
  };

  EmitEvent("FinishLoadAll");
});
//# sourceMappingURL=SettingsModule.js.map;
//var ma_host = "localnew.mutualart.com/";
if (typeof ($selectedCity) == 'undefined') {
    $selectedCity = {
        label: "",
        value: "",
        Id: -1
    };
}

var prevLocationSelected;
var locationApply = false;
var isOffOnOutsideClick = false;

$(document)
    .ready(function () {
        var enterCounts = 0;
        $('body').on('blur', '.searchByCity', function (e) {
            autocompleteSearchBarBlur();
        });

        $('body').on('blur', '.autocomplete-search-bar-wide #from', function (e) {
            autocompleteSearchBarBlur();
        });

        $('body').on('focus', '.autocomplete-search-bar-wide #from', function (e) {
            autocompleteSearchBarFocus();
        });

        $('body').on('blur', '.autocomplete-search-bar-wide #to', function (e) {
            autocompleteSearchBarBlur();
        });

        $('body').on('focus', '.autocomplete-search-bar-wide #to', function (e) {
            autocompleteSearchBarFocus();
        });

        if (IsMobileView() && IsPage('exhibitionsearchresults_browsemap')) {
            $('#filters-container-tags').data('auto-show-hide', false);
        }

        $('body').on('keydown click', '.searchByCity', function (e) {
            if (e.which !== 13) {
                if ($(".searchByCity").val() != $selectedCity.label) {
                    enterCounts = 0;
                    disableSearch();
                }
            } else {
                enterCounts++;
                if (enterCounts === 2) {
                    enterCounts = 0;
                    $('.searchExhByCity').trigger('click')
                    ApplyExhibitionSearch();
                }
            }
            autocompleteSearchBarFocus();
        });
        if ($.ui && $.ui.autocomplete) {
            $(".searchByCity")
                .autocomplete({
                    source: function (request, response) {
                        var queryVal = this.term;//$("#autocomplete-search-bar-wide").find("input").val();
                        if (IsMobileView() && IsPage('exhibitionsearchresults_browsemap','exhibitionsearchresults')) {
                            isOffOnOutsideClick = true;
                            $("body").off('touchstart', onOutsideLotFilterClick);
                            $('.exhibition-filter-map').addClass('active-map-search');
                        }
                        $.ajax({
                            method: 'POST',
                            url: "/Ajax/AutoComplete/GetLocations",
                            dataType: "json",
                            data: {
                                q: queryVal
                            },
                            success: function (data) {
                                response(
                                    $.map(data,
                                        function (item) {
                                            var $selectedCity = new Object();

                                            //autocomplete default values REQUIRED
                                            $selectedCity.label = htm2txt(item.data.text);
                                            $selectedCity.value = htm2txt(item.data.text);

                                            //extend values
                                            $selectedCity.Id = item.data.value;
                                            return $selectedCity;
                                        }));
                            }
                        });
                    },
                    minLength: 2,
                    select: function (event, ui) {
                        //              console.log(ui.item
                        //                  ? "Selected: " + ui.item.label + " ID: " + ui.item.Id
                        //: "Nothing selected, input was " + this.value);
                        var isTheSame = (prevLocationSelected && prevLocationSelected === $selectedCity.Id);
                        $selectedCity.label = ui.item.label;
                        $selectedCity.value = ui.item.label;
                        $selectedCity.Id = ui.item.Id;
                        if (event.keyCode != 13) {
                            enterCounts++;
                        }

                        enableSearch();

                        if (!isMobile() && $(this).data('val') === 'with-filter') {
                            if (!isTheSame) {
                                locationApply = true;
                            }

                            if (!IsPage('exhibitionsearchresults_browsemap')) {
                                ApplyExhibitionSearch();
                            }
                        }
                    },
                    focus: function (event, ui) {
                        //console.log(ui.item
                        //    ? "Selected: " + ui.item.label + " ID: " + ui.item.Id
                        //    : "Nothing selected, input was " + this.value);
                        $selectedCity.label = ui.item.label;
                        $selectedCity.value = ui.item.label;
                        $selectedCity.Id = ui.item.Id;
                        enableSearch();
                    }
                    , classes: {
                        "ui-autocomplete": "ui-autocomplete exhibition-filter-map"
                    }
                    //open: function () {
                    //    $selectedCity = new Object();
                    //    $('#searchExhByCity, #searchExhByCityMobile').attr("disabled", true);

                    //    //$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
                    //},
                    //change:function() {
                    //    //$selectedCity = new Object();
                    //}
                    //close: function() {
                    //    $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
                    //}
                });
        }
        //$("#searchExhByCity")
        //    .on("click",
        //        function() {
        //            exhibitionSearch();

        //            //var selectedCity = $("#autocomplete-search-bar-wide .form-control.auto-complete-script.ui-autocomplete-input").val();
        //        });
        setSelectedLocation();
        initExhibitionSearchWebFilter();
        hideFiltersInFirstEntryMobileInexhibition();

        prevLocationSelected = $selectedCity.Id;
    });

$(document).on("click", function (event) {
    if (isOffOnOutsideClick && $(event.target).closest(".autocomplete-search-bar-wide").length === 0) {
        $("body").on('touchstart', onOutsideLotFilterClick);
        $('.exhibition-filter-map').removeClass('active-map-search');
    }
});

function initExhibitionSearchWebFilter() {
    if (!isMobile()) {
        $(".search-form-exhibition input:checkbox").on('click', function () {
            ApplyExhibitionSearch();
        });

        $("#artist-auction-form input[type='number']").on('change', function () {
            applySearch();
        });

        $(".search-form-exhibition .input-wrapper input:text").on('change', function () {
            ApplyExhibitionSearch();
        });

        //$("#locationBlock #autocomplete-search-bar-wide #from").on('change', function () {
        //    debugger;
        //    ApplyExhibitionSearch();
        //});
        //$("#locationBlock #autocomplete-search-bar-wide #to").on('change', function () {
        //    debugger;
        //    ApplyExhibitionSearch();
        //});
    }
    else if ($(".filter-switcher").length > 0) {
        $(".explore-exhibitions.advanced-search-bar").hide();
    }
}

//$('.input-daterange #from, .input-daterange #fromMobile').on('change', function () {
//    debugger;
//    ApplyExhibitionSearch();
//});

function saveExhibitionSearchPageScrollPosition() {
    var exhibitionSearchScrollPosition = $(window).scrollTop();
    localStorage.setItem("exhibitionSearchScrollPosition", exhibitionSearchScrollPosition);
}

function saveArtistsBlockScrollPosition() {
    var artistsBlockScrollPosition = $("div#artistsBlock").scrollTop();
    localStorage.setItem("artistsBlockScrollPosition", artistsBlockScrollPosition);
}

function ApplyExhibitionSearch() {
    if (!searchClickTime) {
        searchClickTime = setTimeout(function () {
            triggerApplyExhibitionSearch();
        }, 2000);
    }
}

function triggerApplyExhibitionSearch() {
    if (!jQuery.isEmptyObject($selectedCity) && $selectedCity.Id !== -1) {
        saveExhibitionSearchPageScrollPosition();
        /*saveArtistsBlockScrollPosition();*/
        //var keyword = $('#keyword').val();
        //var areaSelectedArr = getSelectedItems('areaBlock');
        //var artistsSelectedArr = getSelectedItems('artistsBlock');
        //var venueSelectedArr = getSelectedItems('venueBlock');
        //var happeningSelectedArr = getSelectedItems('happeningBlock');

        //setHeppeningDate(happeningSelectedArr);

        //var dateStr = getDateUrl();

        //var queryStr = createQueryStringFromFilters('Locations', areaSelectedArr);
        //queryStr = queryStr + createQueryStringFromFilters('Artist', artistsSelectedArr);
        //queryStr = dateStr + queryStr + createQueryStringFromFilters('Venues', venueSelectedArr);

        //if (keyword) {
        //    queryStr = queryStr + '&keyword=' + keyword;
        //}

        if (IsPage('exhibitionsearchresults_browsemap')) {
            var newURI = baseDomain + '/ExhibitionSearchResults/BrowseMap/' + getLocationUrl($selectedCity) + getDateUrl();
            if (window['manager']) {
                window.history.pushState({ urlPath: newURI }, "", newURI);
                manager.setQuery();
                manager.setFilterBedges();
                location.reload();
                return;
            }
        }
        else if (IsPage('exhibitionsearchresults')) {
            if (window.location.pathname.indexOf($selectedCity.Id) >= 0) {
                if (window['manager']) {
                    manager.setQuery();
                    manager.setFilterBedges();
                    refreshResult();
                }
                return;
            }
            else {
                var newURI = baseDomain + '/ExhibitionSearchResults/Browse/' + getLocationUrl($selectedCity) + getDateUrl();
                if (window['manager']) {
                    window.history.pushState({ urlPath: newURI }, "", newURI);
                    manager.setQuery();
                    manager.setFilterBedges();
                    location.reload();
                    return;
                }
            }
        }       

        var queryStr = locationApply ? createLocationQuerystringOnApply() : createQuerystringOnApply();
        locationApply = false;

        //====== Google Analytics Search ========================================
        if (($(this).attr("id") === 'searchExhByCity') ||
            ($(this).attr("id") === 'searchExhByCityMobile') ||
            ($(this).attr("id") === 'searchExhByCity')) {
            googleAnalyticsExhibitionSearch(queryStr);
        } else if (($(this).attr("id") === 'apply') || ($(this).attr("id") === 'input#apply')) {
            googleAnalyticsFilters('Exhibition', queryStr);
        }
        //=======================================================================

        if (queryStr.length > 1) {
            queryStr = '?' + queryStr.substring(1);
            window.location.href = window.location.pathname + queryStr;

            var url;
            if (isExhibitionsPage()) {
                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                }

                window.location.href = url + getLocationUrl($selectedCity) + getDateUrl();
            } else {
                url = baseDomain + '/ExhibitionSearchResults/Browse/';

                if (window.location.pathname.indexOf('BrowseMap') > 0) {
                    url = baseDomain + '/ExhibitionSearchResults/BrowseMap/';
                }

                var appendQS = ["ne", "sw", "c"];
                var addQs = "";
                for (var q in appendQS) {
                    if (queryStr.indexOf("&" + appendQS[q] + "=") === -1) {
                        var qs = getParameterByName(appendQS[q]);
                        if (qs)
                            addQs += "&" + appendQS[q] + "=" + qs;
                    }
                }

                window.location.href = url + getLocationUrl($selectedCity) + queryStr + addQs;
            }
        }
    }
}

function hideFiltersInFirstEntryMobileInexhibition() {
    //what to do in mobile
}

// i need to use this function
//function ApplySearch() {
//    //debugger;
//    //$('#arrow_box').removeClass("arrow_box");

//    goToByScroll('arrow_box');

//    isAfterSearch = true;
//    //if ($('.more-filters-btn').hasClass('active')) {
//    //    $('.more-filters-btn').removeClass('active');
//    //    $('#more-filters').toggle();
//    //}
//    $('body').removeClass('noscroll');

//    if ($('body').width() < mobSwitcherWidth) {
//        $('#filter-view-switch').removeClass('current');
//        $(fE).show();
//        $(sF).hide();
//        $(aS).hide();
//        $(fF).hide();
//        $("#lotsData").show();
//        $("#at-share-dock").show();
//        $("#footer").hide();
//        /*if ($('#gmap').length) {
//            $(fE).show();

//            $(sF).hide();
//            $(aS).hide();
//            $(fF).hide();
//        } else {
//            $(sF).hide();
//            //$(aS).hide();
//            $(fF).hide();
//        }*/
//    }
//};

var isExhibitionsPage = function () {
    var res = false;

    var pathArr = window.location.pathname.split('/');
    if (pathArr.length > 0) {
        if (pathArr[1].toLowerCase() === 'exhibitions') {
            res = true;
        }
    }

    return res;
}

function disableSearch() {
    $selectedCity = new Object();
    $('#searchExhByCity, #searchExhByCityMobile, #apply').attr("disabled", true);
    $('#searchExhByCityMobile, #apply').css('background-color', '#E7E7E7');
    $('.searchExhByCity').attr("disabled", true);
    $('.searchExhByCity').css('background-color', '#E7E7E7');
}

function enableSearch() {
    $('#searchExhByCity, #searchExhByCityMobile, #apply').attr("disabled", false);
    $('#searchExhByCity, #searchExhByCityMobile, #apply').css('background-color', '#8c1d40');
    $('.searchExhByCity').attr("disabled", false);
    $('.searchExhByCity').css('background-color', '#8c1d40');
}

function getDateUrl() {
    var dateText = "?DateRange=";
    if ($('#from').length) {
        var fromDate = $('#from').datepicker("getDate");
        var toDate = $('#to').datepicker("getDate");

        dateText += $.datepicker.formatDate("yy-mm-dd", fromDate);

        if (toDate) {
            dateText = dateText + '_' + $.datepicker.formatDate("yy-mm-dd", toDate);
        }
        return dateText;
    } else {
        var mods = window['manager'] ? manager.getModulesByQueryString("DateRange") : null;
        if (mods && mods.length) {
            return dateText + mods[0].getSelected()[0];
        }
    }

    return "?";
}

function getLocationUrl(selectedObj) {
    var locationText = selectedObj.label;
    var locationId = selectedObj.Id;
    var regex = /[\+|\?|&|\.|,|@|!|\#|$|\^|\-|\\|\/|:|~|<|>|\'|\%|\s|\"|\*|\(|\)|;]/g;
    var subst = '-';
    locationText = locationText.replace(regex, subst);

    if (locationId !== -1) {
        locationText = locationText + "/" + locationId;
    }

    return locationText;
}

function autocompleteSearchBarFocus() {
    $("exhibition-list-result-page .autocomplete-search-bar-wide .search-line").css("border-color", "#BF2659");
    $("map-page .autocomplete-search-bar-wide .search-line").css("border-color", "#BF2659");
}

function autocompleteSearchBarBlur() {
    $("exhibition-list-result-page .autocomplete-search-bar-wide .search-line").css("border-color", "rgba(59, 58, 58, 0.2)");
    $("map-page .autocomplete-search-bar-wide .search-line").css("border-color", "rgba(59, 58, 58, 0.2)");
}

function setSelectedLocation() {
    if ($("#hdnLocationDetail").length > 0) {
        $selectedCity.label = $("#hdnLocationDetail").attr("data-name");
        $selectedCity.value = $("#hdnLocationDetail").attr("data-name");
        $selectedCity.Id = $("#hdnLocationDetail").attr("data-id");
        $(".autocomplete-search-bar-wide").find("#searchByCity").val($selectedCity.label);
    }
}

//function exhibitionSearch() {
//    var url = baseDomain + '/ExhibitionSearchResults/Browse/';

//    //if (isExhibitionsPage()) {
//    //    window.open(url + getLocationUrl() + getDateUrl());
//    //} else {
//    window.location.href = url + getLocationUrl($selectedCity) + getDateUrl();
//    //}
//};
$(document)
    .ready(function() {
        //if (isExhibitionsPage()) {
        setWhatNearMeDates();
        resetForm();

        if (typeof $nearCity !== 'undefined') {
            //Set Default local city
            if ($functionality == "False") {
                $('.searchByCity').val("London, UK");
            } else if ($nearCity.Id.length > 0) {
                $selectedCity.label = $nearCity.label;
                $selectedCity.value = $nearCity.value;
                $selectedCity.Id = $nearCity.Id;
                $('.searchByCity').val($nearCity.label);
            } else {
                disableSearch();
            }
        } 
        //}
        calculateExhibitionTextWhiteSpace()
    });

function setWhatNearMeDates() {
    var today = new Date();
    var dateTmp = new Date();

    setWhatNearMeDatesByIdName('#nearExhibitionsToday', today);

    dateTmp.setDate(today.getDate() + 1);
    setWhatNearMeDatesByIdName('#nearExhibitionsTomorrow', dateTmp);

    dateTmp = getNextWeekMonday();
    setWhatNearMeDatesByIdName('#nearExhibitionsNextWeek', dateTmp);

}

function setWhatNearMeDatesByIdName(idStr, date) {
    if ($.datepicker) {
        var url = baseDomain + '/ExhibitionSearchResults/Browse/';
        $(idStr + ' .day').html(date.getDate());
        $(idStr + ' .month-name').html(monthNames[date.getMonth()]);

        var dateRange = "?DateRange=" + $.datepicker.formatDate("yy-mm-dd", date) + '_' + $.datepicker.formatDate("yy-mm-dd", date);

        if ($(idStr + '.dater a').length > 0) {
            var locationUrl = getLocationUrl($nearCity);
            if (locationUrl.length < 2) {
                if ($nearCountry) {
                    locationUrl = getLocationUrl($nearCountry);
                }
            }

            $(idStr + '.dater a')[0].href = url + locationUrl + dateRange;
        }
    }
}

function getNextWeekMonday() {
    var dateTmp = new Date();
    var d = new Date(dateTmp.getTime());
    var diff = d.getDate() - d.getDay() + 1;
    if (d.getDay() === 0)
        diff -= 7;
    diff += 7;
    return new Date(d.setDate(diff));
}

function resetForm() {
    $('#cancel').click(function () {
        var selects = $('.search-form-exhibition :checked');

        $(selects).attr("checked", false);
        $(selects).parent().removeClass('activefilter');

        $('#keyword').val('');
    });
}

function calculateExhibitionTextWhiteSpace() {
    var exploreMoreList = $(".recommended-exhibition-section .event-listing.lot-listing .list")
    if (!IsMobileView()) {
        var leftSectionHeight = $(".exhibition-detail-left-section").length > 0 ? $(".exhibition-detail-left-section")[0].offsetHeight : 0;
        var exploreMoreSection = $(".recommended-exhibition-section");
        var exploreMoreSectionHeight = exploreMoreSection.length > 0 ? exploreMoreSection[0].offsetHeight : 0;
        var imageSectionHeight = $(".exhibition-detail-right-section").length > 0 ? $(".exhibition-detail-right-section")[0].offsetHeight : 0;
        if (leftSectionHeight < exploreMoreSectionHeight + imageSectionHeight) {            
            if (exploreMoreList.length > 1) {
                $(".recommended-exhibition-section .event-listing.lot-listing .list").last().remove()
                calculateExhibitionTextWhiteSpace()
            }
            else {
                exploreMoreSection.remove()
            }
        }
        else {
            exploreMoreSection.css('opacity', 1);
        }
    }
    else {
        if (exploreMoreList.length == 0) {
            $(".recommended-exhibition-section-separator").remove();
        }
        $(".recommended-exhibition-section").css('opacity', 1);
    }
};
$(document)
    .ready(function () {
        initAllFiltersBtn();
        ScrollToArtistIndexListSection();

        function initAllFiltersBtn() {
            $('.categoriesIndex div.all-categories').on('click',
                function() {
                    $('.categoriesIndex-mobileHide').toggleClass('hideInline');
                    $('.all-categories').toggleClass('active');

                    $('.add-border-bottom').toggleClass('border-bottom');
                });
        }

        function ScrollToArtistIndexListSection() {
            var ele = $('.artist-index-list');
            if (ele.find('.row.list').children().length > 0 && $(window).width() >= 768) {
                $([document.documentElement, document.body]).animate({
                    scrollTop: ele.offset().top - 150
                }, 2000);
            }
        }

    });;
function deleteSelectedLotsPreferencedLots() {
    var ids = getSelectedIds_PreferencedLots();
    var selectedGroup = $('#preferencedLotsGroup .selectedGroupPreferncedLot:checked').data('filter');
    var url = "/Ajax/PreferencedLots/RemoveLotFromGroup";
    var param = {
        idGroup: selectedGroup,
        id: ids
    };

    if (ids === "") {

        maAlertMessage("Please select lots to remove.", ["OK"], function () {           
            $('.cancel-popup').modal('hide');
        })


       // alert("Please select lots to remove.")
    } else {

        maAlertMessage("Are you sure you want to remove selected artworks from group?", ["Yes", "No"], function (selectedBtn) {

            switch (selectedBtn) {
                case "Yes":
                    $.post(url,
                        param,
                        function (rText, status, request) {
                            var val = rText;
                            if (val.success) {
                                $('*[data-filter="' + selectedGroup + '"]').click();
                                $('.cancel-popup').modal('hide');
                            } else {
                                alert('Error occur while deleting group!')
                            }
                        });
                    break;
            }

           

        })
        //if (confirm("Are you sure you want to remove selected artworks from group?")) {
        //    $.post(url,
        //        param,
        //        function (rText, status, request) {
        //            var val = rText;
        //            if (val.success) {
        //                $('*[data-filter="' + selectedGroup + '"]').click();
        //            } else {
        //                alert('Error occur while deleting group!')
        //            }
        //        });
        //}
    }
}

function deleteSelectedGroupPreferencedLots() {
    var input =  $('#preferencedLotsGroup .selectedGroupPreferncedLot:checked');
    var selectedGroup = input.data('filter');
    var isFilter = (input.data('isfilter') + "" == "true");
   

    if (selectedGroup) {

        // && confirm("Are you sure you want to delete the group?")
        maAlertMessage("Are you sure you want to delete the group?", ["Yes", "No"], function (selectedBtn) {

            switch (selectedBtn) {
                case "Yes":
                    var url = "/Ajax/PreferencedLots/DeleteGroup";
                    var param = { idGroup: selectedGroup, isFilter: isFilter };
                    $.post(url, param, function (rText, status, request) {
                        var val = rText;

                        if (val.success) {
                            location.href = "/my-preferences/saved-artworks";
                        }
                        else {
                            alert('Error occur while deleting group!')
                        }
                    });                  
                    break;
            }

           

           

        })

        
    }
};

function getSelectedIds_PreferencedLots() {
    return $.map($('.ent_sel INPUT:checkbox:checked'), function (n, i) {
        return n.value;
    }).join(',');
}

function initSavedSearches() {
    $("#preferencedResultsList").parent().hide();
    $('#SavedSearchesList'     ).parent().show();
    $("#clear-all"             ).parent().hide();
}

function initRecommendedLotsCheckBox() {
    $('.dashboard-filter-form').hide();
    $("#preferencedResultsList").parent().show();
    $('#SavedSearchesList'     ).parent().hide();
    $("#clear-all").parent().show();
    if ($('.checkbox-box').length) {
        $('.checkbox-box').each(function (i,e) {
            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' });
        });
    }

    initBSTooltips();
    initAuctionTableVerticalAlign();
}

function initAuctionTableVerticalAlign() {
    $('.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)
                });
            }
        });
    });

};
$(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');
    }
};

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 sendContactVenue() {
    if (!$("#contactVenueForm").valid()) {
        mixpanel.track("Click send contact venue failed");
        return;
    }
    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, or contact us at <a href='mailto:support@mutualart.com'>support@mutualart.com</a> and we will be happy to assist.", ["OK"], null, "Verification Error");
        mixpanel.track("Click send contact venue failed");
    }
    //.then(function () {
    //    var res = grecaptcha.getResponse();
    //    if (res)
    //        postSendContactVanue();
    //});
}

function postSendContactVanue() {
    var data = $("#contactVenueForm").serialize();
    $("#contactVenueForm").html(loading_image_html);
    $.ajax({
        type: "POST",
        url: "/Ajax/Contact/SendContactVenue",
        data: data,
        success: function (res) {
            if (res === "OK") {
                mixpanel.track("Contact venue sent");
                $("#contactVenueForm").html("<div>An email has been sent to the venue");
            } else {
                mixpanel.track("Error sending contact venue");
                $("#contactVenueForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
            }
        },
        error: function () {
            $("#contactVenueForm").html("<div style='color:red'>Error in sending. Please try again later.</div>");
        }
    });
};
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 PaymentModule(elem) {
    var self = this;
    self.formData = {};
    self.paymentMode = 'subscription';
    self.IsUsingStripeElement = IsNewStripeAPI;
    //Base.call
    var protected = MaModule.call(this, {});
    self.paymentElements = null;
    self.isPaymentElementReady = false;
    var renderedPaypal = false;
    var showBeforeUnloadMsg = true;
    var IsZipCodeRquierd = true;
    var isPayPalPayment = false;
    var payModel = {};
    var scaFailCount = 0;
    var resultToken = '';
    var isMCPlanpopup = false;
    var stoppedLeave = false;
    var singleClickpayment = false;
    self.invalidAmountError = "Can't charge less than $1";
    self.couponEnabled = getParameterByName("AppraisalID") == null;
    self.unknownError = "Sorry! We are unable to complete your request; please try again or contact us and we will be happy to assist.";

    self._elem = $(elem);

    //self._elem.on(CHANGE_PLAN_EVENT, onPlansChanged);

    self._voucher = self._elem.find('.voucher_code');
    self._coupon = self._elem.find('.coupon-row');

    self._paymentMethods = self._elem.find('[name=payment_selector]');
    if (self._paymentMethods.length) {
        self._paymentMethods[0].checked = true;
        self._paymentMethods.on('change', changePaymentMethod);
    }

    if (!self.couponEnabled) {
        self._coupon.remove();
        self._voucher.remove();
    } else {
        self._voucher.on('click', ShowVoucherBox);
    }

    self._totalPrice = self._elem.find(".total-price");
    self._planDuration = self._elem.find(".plan-duration");
    self._price = self._elem.find("#Price");
    self._planBasePrice = self._elem.find(".plan-base-price");

    if (!IsPage("change-plan")) {
        self._plans = self._elem.find('input[type=radio][data-method][data-price]');
        self._plans.on('change', onPlansChanged);
    }

    self._form = self._elem.find("#subscribeForm");

    function enableLeave() {
        showBeforeUnloadMsg = false;
        stoppedLeave = false;
    }
    function stopPageLeave() {
        if (!stoppedLeave) {
            stoppedLeave = true;
            var existingHandler = window.onbeforeunload;
            window.onbeforeunload = function (event) {
                if (existingHandler) existingHandler(event);
                if (showBeforeUnloadMsg) {
                    return "are you sure?";
                }
            }

            window.addEventListener('pagehide', function () {
                if (showBeforeUnloadMsg) {
                    return "are you sure?";
                }
            });
        }
    }

    function disablePlanSelection(disable) {
        if (self.IsUsingStripeElement) {
            $('input[name=plans]').attr("disabled", disable);
        }
        if (isNewPaymentPage()) {
            $('#continue-payment-btn').removeClass(disable ? "" : "hidden");
            $('#payment-method').removeClass(disable ? "" : "disabled")
            $('#select-plan').removeClass(disable ? "" : "disabled")
        }
    }
    //Method for new payment page header nav links
    function showFullPaymentOptions(source) {
        self._elem.find("#new-plan-selection").hide();
        self._elem.find("#continue-payment-btn").addClass("hidden");
        self._elem.find(".payment-method").removeClass("inactive-link");
        self._elem.find(".payment-method").addClass("active-link");
        self._elem.find(".plan-name").addClass("inactive-link");
        self._elem.find(".plan-name").removeClass("active-link");
        self._elem.find("#completePayment").removeClass("hidden");
        self._elem.find(".paymentSection").removeClass("hidden");
        self._elem.find(".plan-feature").hide();
        self._elem.find(".lock-img").attr("src", "/img/lock-icon-active.png");
        self._elem.find(".enter-billing-details").show();
        if (isPayPalPayment) {
            self._elem.find("#completePayment").addClass("hidden");
            $("#paypal-button").show();
            $("#paypal-payment-terms").show();
            $(".cc-paypal").show();
        }
        else {

            $(".ccBottom").show();
        }
        if (source == "button") {
            mixpanel.track("User Click Continue to Secure Payment", { "Payment Method": isPayPalPayment ? "Pay Pal" : "Credit Card" });
        }
        else {
            mixpanel.track("User Click Payment Details", { "Payment Method": isPayPalPayment ? "Pay Pal" : "Credit Card" });
        }
    }
    //Method for new payment page header nav links
    function showPlanSelection() {
        self._elem.find("#new-plan-selection").show();
        self._elem.find("#continue-payment-btn").removeClass("hidden");
        self._elem.find(".payment-method").addClass("inactive-link");
        self._elem.find(".payment-method").removeClass("active-link");
        self._elem.find(".plan-name").removeClass("inactive-link");
        self._elem.find(".plan-name").addClass("active-link");
        self._elem.find("#completePayment").addClass("hidden");
        self._elem.find(".paymentSection").addClass("hidden");
        self._elem.find(".plan-feature").show();
        self._elem.find(".lock-img").attr("src","/img/lock-icon-inactive.png");
        self._elem.find(".enter-billing-details").hide();
        $("#paypal-button").hide();
        $("#paypal-payment-terms").hide();
        $(".ccBottom").hide();
        $(".cc-paypal").hide()
        mixpanel.track("User Click Select Billing Plan", { "Payment Method": isPayPalPayment ? "Pay Pal" : "Credit Card"});
    }

    function init() {
        disablePlanSelection(true);      
        AddScriptStyleResources(window['Stripe'], "https://js.stripe.com/v3/", [], function () {
            AddScriptStyleResources(window['paypal'], "https://www.paypalobjects.com/api/checkout.js", [], function () {
                initStripe();
                self.paymentMode = 'subscription';
                if (window['initChangePlan'])
                    window['initChangePlan']();

                if (IsPage("payment", "paymentnew")) {
                    self.paymentMode = 'payment';
                    var price = location.search.toString().getValueByKey("p");
                    if (price) {
                        self._price.val(price);
                    }
                    if ($("#login")) {
                        $("#login").trigger('click');
                    }
                    if ($("#signup")) {
                        $("#signup").trigger('click');
                    }
                }
                if (location.pathname.toLowerCase() === "/trial") {
                    var currentPlanId = $("#currentPlanId").val();
                    $("#PlanId").val(currentPlanId);
                }
                $(".coupon-row").hide();

                self._form.validate({
                    rules: {
                    }
                });

                self._elem.find('.close_payment, #malogo').on("click", CancelFlowPopup);

                if (!IsPage("change_plan")) {
                    stopPageLeave();
                }

                $("#payment_dialog").on("hidden.bs.modal", function () {
                    enableLeave();
                });

                document.onmouseover = function () {
                    //User's mouse is inside the page.
                    window.innerDocClick = true;
                }

                document.onmouseleave = function () {
                    //User's mouse has left the page.
                    window.innerDocClick = false;
                }

                $('#UserName').on('change', function () {
                    if ($("#UserName").val().length > 0) {
                        $(".billing-UserName-error-message").hide();
                    }
                });

                if ((IsPage("upgrade") || IsPage("account_settings") || window['upgOverride']) && ($("#card-element").length || $("#payment-element").length)) {
                    if (window['card'])
                        window['card'].addEventListener('change', function (event) {
                            var displayError = $('.billing-card-error-message');
                            if (event.error) {
                                mixpanelMngo.SendErrorReport(event.error.message);
                                displayError.text(event.error.message);
                                displayError.show();
                            } else {
                                displayError.text('');
                                displayError.hide();
                            }
                        });
                    if (window['paypal']) {
                        enablePayPal();
                    }

                    $("#paypal-button").hide();
                    $("#paypal-payment-terms").hide();
                    //InitPaymentMethodRadiobtn();
                    if (self.couponEnabled) {
                        var voucher = getParameterByName("voucher") || sessionStorage["voucher"] || ScopedVariables["voucher"] || defaultCampaignCouponCode;

                        if (voucher) {
                            $("#couponCode").val(voucher);
                            self._voucher.hide();
                            $('#voucher_slide').slideDown(200);
                            //getCoupon();
                        }
                    }
                    //TODO: Enable
                    //disablePayPal();
                } else if (IsPage('change_plan') && self.couponEnabled) {
                    var voucher = getParameterByName("voucher") || sessionStorage["voucher"] || ScopedVariables["voucher"];
                    if (voucher) {
                        $("#couponCode").val(voucher);
                        self._voucher.hide();
                        $('#voucher_slide').slideDown(200);
                    }
                }
                if ($("#card-element").length && window['card']) {
                    window['card'].mount('#card-element');
                }
                initAppraisalCoupon();
                self.selectedBillingPlan = self._elem.find("input[type=radio][data-method][data-price]:checked");

                onPlansChanged();

                if (IsNewStripeAPI) {
                    InitStripeElement(getStripeDisplayAmount());
                }

                self._elem.on("click", ".payment-method-card", onMethodClick);
            });
        });
        return _export;
    }

    function getStripeDisplayAmount() {
        if (IsGeneralPayment) {
            return getParameterByName('p')
        }
        else {
            return self.selectedBillingPlan.data("price");
        }
    }

    function showCoupon() {
        self._coupon.show();
        if (isNewPaymentPage()) {
            self._voucher.hide();
        }
        else {
            self._voucher.show();
        }
    }
    function onMethodClick(e) {
        $(this).find("input").prop('checked', true);
        changePaymentMethod();
    }

    function addMyCollectionPlan() {
        var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?collection=4017D7C99033C3DA';
        window.history.pushState({ path: newurl }, '', newurl);

        $(".form-messages").html(loading_image_html);
        $(".input-group-block-btn-row").hide();

        //createToken();
        stripeTokenHandler(resultToken);
    }

    function createToken(mcplan, callback) {
        if (!mcplan) {
            if (singleClickpayment) {
                return;
            }
            singleClickpayment = true;
        } else {
            singleClickpayment = false;
        }

        StartLoad();

        if (!checkValidation(self._form)) {
            StopLoad();
            singleClickpayment = false;
            return;
        }

        var additionalData = {
            name: $("#UserName").val(),
            //address_line1: address1 ? address1.value : undefined,
            //address_city: city ? city.value : undefined,
            //address_state: state ? state.value : undefined,
            //address_zip: zip ? zip.value : undefined,
        };

        _stripe.createToken(card, additionalData).then(function (result) {
            //if (result.error) {
            //    // Inform the customer that there was an error.
            //    var errorElement = document.getElementById('card-errors');

            //    errorElement.textContent = result.error.message;
            //} else {
            //    // Send the token to your server.
            //    stripeTokenHandler(result.token);
            //}
            var displayError = $('.billing-card-error-message');
            //console.log(result);
            if (result.error) {
                $(".form-messages").html("");
                $(".input-group-block-btn-row").show();
                displayError.text(result.error.message);
                displayError.show();
                //failedPayment({ Message: result.error.message }, "Request");
                mixpanel.track("Stripe Create Token Error", result.error);
                singleClickpayment = false;
                //sendUpgrade();
            } else if (result.token) {
                resultToken = result.token;
                displayError.hide();
                displayError.text('');
                var isMonthlyplan = self.selectedBillingPlan.data("method") === "MonthlyPlan";
                if (!isCollectionPage() && getParameterByName('collection') == null && mcplan && !isMonthlyplan && $('#showMyCollectionPlan').length) {
                    isMCPlanpopup = true;
                    $('#showMyCollectionPlan').modal({ backdrop: 'static' });
                    $('#showMyCollectionPlan').on('shown.bs.modal', function () {
                        mixpanel.track('View MC Popup');
                        if ($("#CollectionPopupSlider").hasClass("slick-initialized")) {
                            $("#CollectionPopupSlider").slick("refresh");
                        } else {
                            MA.LoadModule("#CollectionPopupSlider");
                        }
                        $("#CollectionPopupSlider").css("visibility", "visible");
                        // Refresh if already loaded
                    });
                    $('#showMyCollectionPlan').modal('show');

                    if (isMobile()) {
                        document.body.scrollTop = 0;
                        window.scrollTo(0, 0)
                    }
                }
                else {
                    isMCPlanpopup = false;
                    stripeTokenHandler(result.token);
                }
            }

            $("#RenewalAlert").removeAttr("disabled");
            if (callback)
                callback(result);
        });
    }
    function stripeTokenHandler(token) {
        $(".form-messages").html(loading_image_html);
        $(".input-group-block-btn-row").hide();
        $('#showMyCollectionPlan').modal('hide');

        self.formData.stripeToken = token.id;
        $(".form-messages").html("");
        $(".input-group-block-btn-row").show();
        if (IsPage('art_appraisalpayment'))
            PaymentManager.sendUpgrade("ConfirmAppraisal", "#AppraisalPaymentContinue");
        else
            PaymentManager.sendUpgrade();
    }

    function initAppraisalCoupon() {
        if (getParameterByName("AppraisalID") != null) {
            if ($(".billing-block input[type=radio][value=108]:checked").length) {
                $(".coupon-success").addClass("appraisal-coupon");
                $(".coupon-success").html("+ 2 FREE VALUATIONS");
                $(".monthly.plan-box.billing-block").hide();
                $("#billingSelectionText").remove();
                $(".page-content > div.payment > .container-fluid").prepend("<a class='backtoappraisal' onclick='window.history.back()'>< Back to appraisal</a>")
                $(".page-content > div.payment > .container-fluid > .row.margin-top-50").removeClass("margin-top-50").css("margin-top", "20px");
                return true;
            } else {
                $(".coupon-success").removeClass("appraisal-coupon");
                $(".coupon-success").html("");
            }
        }
        return false;
    }

    function CancelFlowPopup() {
        if (IsPage('upgrade')) {
            $("body").append($("#cancelRegFlow"));
            $("#cancelRegFlow").modal();

            return false;
        }

        if (IsPage("personalize")) {
            var isShowBundlePopup = false;

            if (getCookie("RedirectUrl")) {
                var backto = getCookie("RedirectUrl")

                if (backto.indexOf("summer-campaign-1") !== -1) {
                    backto = "/?b=1";
                }

                if (backto.indexOf("/upgrade") !== -1) {
                    backto = "/my-preferences?n=5";
                }

                if (backto.indexOf("/Artwork/") !== -1 && window.location.href.indexOf("?p=1") === -1) {
                    //isShowBundlePopup = GetAccessCredit();
                }
            } else {
                var backto = "/my-preferences?n=5";
            }

            //if (window.location.href.indexOf("?p=1") !== -1) {
            //    location.href = "/Personalize?p=1";
            //    return false;
            //}
            var msg = "welcome";
            var newUrl = "";

            //if (isShowBundlePopup) {
            //    msg = "access_credit";
            //    console.log("acc_cred");
            //    newUrl = appendQs(backto, "msg", msg);
            //}
            //else {
            newUrl = appendQs(backto, "msg", msg);
            //}

            showBeforeUnloadMsg = false;
            location.replace(newUrl);

            return false;
        }

        if (IsPage("signup")) {
            backto = "/";
            location.href = backto;
        }
        var bkt = getCookie("RedirectUrl");
        if (bkt)
            location.href = bkt;

        // e.preventDefault();
    }

    //if (window['card']) {
    //    card.on('change', onCardValidation);
    //}

    function onCardValidation(e) {
    }

    function handleScaSetup(result) {
        var errMsgTemp = "We are unable to authenticate your payment method."
            + " Please make sure you entered the correct details and try again, or choose a different payment method.";
        if (result && result.setupIntent && result.setupIntent.status == "succeeded") {
            $.post("/Ajax/Stripe/ConfirmSetupSCA", {
                intentId: result.setupIntent.id,
                clientSecret: payModel.data.SCA.clientSecret,
                failCount: scaFailCount,
                PaymentMethod: payModel.data.SCA.paymentMethod
            }).done(function (data) {
                if (data.IsSuccess) {
                    successPayment(payModel.callback, payModel.PlanId, payModel.$form, payModel.paymentName, payModel.data);
                }
                else {
                    scaFailCount++;
                    failedPayment({
                        Message: errMsgTemp
                    }, "request");
                }
            }).fail(function () {
                failedPayment({
                    Message: errMsgTemp
                }, "request");
            });
        }
        else {
            scaFailCount++;
            if (result.error.code == "setup_intent_authentication_failure") {
                mixpanel.track("Submit Error", { "Error Name": "SCA Authentication Failed" });
                maAlertMessage(errMsgTemp, ["RETRY", "CHANGE PAYMENT METHOD"], function (name) {
                    if (name == "RETRY") {
                        mixpanel.track("View SCA popup", { Setup: true });
                        _stripe.handleCardSetup(payModel.data.SCA.clientSecret, card, {
                            payment_method_data: {
                                billing_details: {
                                    name: payModel.data.SCA.billingName
                                }
                            }
                        }).then(handleScaSetup);
                    } else if (name == "CHANGE PAYMENT METHOD") {
                        $(".form-messages").html("");
                        $(".input-group-block-btn-row").show();
                        $(payModel.buttonToDisable).removeAttr("disabled");
                    }
                    else {
                        $(".form-messages").html("");
                        $(".input-group-block-btn-row").show();
                        failedPayment({
                            Message: errMsgTemp
                        }, "request");
                    }
                }, "Incorrect details", null, "SCA Failed");
            } else {
                failedPayment({ Message: result.error.message }, "request");
            }
            if (payModel.buttonToDisable) {
                $(payModel.buttonToDisable).removeAttr("disabled", "disabled");
            }
        }
    }

    function handleScaPayment(result) {
        if (result && result.paymentIntent && result.paymentIntent.status == "succeeded") {
            $.post("/Ajax/Stripe/ConfirmSCA", {
                intentId: result.paymentIntent.id,
                clientSecret: payModel.data.SCA.clientSecret,
                failCount: scaFailCount,
                PageName: page_name,
                AppraisalID: getParameterByName("AppraisalID"),
                Offer: $("#currentOffer").val(),
                paymentMethodId: payModel.data.SCA.paymentMethod
            }).done(function (data) {
                if (data.IsSuccess) {
                    if (data.IsAppraisalConfirmed)
                        payModel.data.IsAppraisalConfirmed = data.IsAppraisalConfirmed;
                    successPayment(payModel.callback, payModel.PlanId, payModel.$form, payModel.paymentName, payModel.data);
                }
                else {
                    scaFailCount++;
                    failedPayment(payModel.data, "request");
                }
            }).fail(function () {
                failedPayment(payModel.data, "request");
            });
        }
        else {
            scaFailCount++;
            if (result.error.code == "payment_intent_authentication_failure") {
                payModel.paymentIntent = result.error.payment_intent;
                mixpanel.track("Submit Error", { "Error Name": "SCA Authentication Failed" });
                maAlertMessage("We are unable to authenticate your payment method."
                    + " Please make sure you entered the correct details and try again, or choose a different payment method.",
                    ["RETRY", "CHANGE PAYMENT METHOD"], function (name) {
                        if (name == "RETRY") {
                            if (self.IsUsingStripeElement) {
                                if (result.error.payment_intent.status === 'requires_action') {
                                    mixpanel.track("View SCA popup", { Setup: false });
                                    _stripe.handleNextAction({ clientSecret: payModel.data.SCA.clientSecret }).then(handleScaPayment);
                                }
                                else if (result.error.payment_intent.status === 'requires_payment_method') {
                                    proceedPayment(true);
                                }
                                else {
                                    singleClickpayment = false;
                                    StopLoad();
                                    $(payModel.buttonToDisable).removeAttr("disabled");
                                }
                            }
                            else {
                                mixpanel.track("View SCA popup", { Setup: false });
                                _stripe.handleCardPayment(payModel.data.SCA.clientSecret, card, {
                                    payment_method_data: {
                                        billing_details: {
                                            name: payModel.data.SCA.billingName
                                        }
                                    }
                                }).then(handleScaPayment);
                            }
                        }
                        else if (name == "CHANGE PAYMENT METHOD") {
                            singleClickpayment = false; //reset variable as flow happens again
                            $(".form-messages").html("");
                            $(".input-group-block-btn-row").show();
                            $(payModel.buttonToDisable).removeAttr("disabled");
                        }
                        else {
                            failedPayment({ Message: "We are unable to authenticate your payment method." }, "request");
                        }
                    }, "Payment Authentication Failure", null, "SCA Failed")
            } else {
                failedPayment({ Message: result.error.message }, "request");
            }
            if (payModel.buttonToDisable) {
                $(payModel.buttonToDisable).removeAttr("disabled");
            }
        }
    }
    function StartLoad() {
        $(".form-messages").show();
        $(isPayPalPayment ? "#paypal-button" : ".input-group-block-btn-row").hide();
        if (isPayPalPayment) {
            $("#paypal-payment-terms").hide();
        }
        $(".form-messages").html(loading_image_html);
    }
    function StopLoad() {
        $(".form-messages").hide();
        $(".form-messages").html('');

        //Condition to check and show/hide paypal buttton if payment section is hidden
        if (isNewPaymentPage()) {
            if ($("#continue-payment-btn").hasClass("hidden")) {
                $(isPayPalPayment ? "#paypal-button" : ".input-group-block-btn-row").show();
            }
            else {
                $(".input-group-block-btn-row").show();
            }
        }
        else {
            $(isPayPalPayment ? "#paypal-button" : ".input-group-block-btn-row").show();
            if (isPayPalPayment) {
                $("#paypal-payment-terms").show();
            }
        }
    }

    function handleStripeElementScaPayment(planId, data) {
        try {
            _stripe.retrievePaymentIntent(data.SCA.clientSecret).then(function (result) {
                if (result.paymentIntent.status === 'requires_payment_method') {
                    showStripeError(result.paymentIntent.last_payment_error.message)
                }
                else if (result.paymentIntent.status === 'requires_action') {
                    mixpanel.track("View SCA popup", { PlanId: planId, Setup: false });
                    _stripe.handleNextAction({ clientSecret: data.SCA.clientSecret }).then(handleScaPayment);
                }
                else {
                    showStripeError(result.paymentIntent.last_payment_error.message)
                }
            });
        } catch (e) {
            showStripeError(self.unknownError);
        }
    }
    function sendPayment(callback, buttonToDisable) {
        if (!self.IsUsingStripeElement && card._invalid) {
            failedPayment({ Message: "Invalid Payment Details" }, "request");
            return false;
        }

        if (buttonToDisable)
            $(buttonToDisable).attr("disabled", true);

        self.formData = self.formData || {};
        self.formData.IsSCARetry = self.IsSCARetry;
        self.formData.IsUsingStripeElement = self.IsUsingStripeElement;

        if (getParameterByName('collection')) {
            self.formData.CollectionPlan = getParameterByName('collection');
        }

        self.formData.CurrentOffer = $("#currentOffer").val();
        var object = $.extend({}, getFormData(self._form), self.formData);
        $("#RenewalAlert").attr("disabled", "disabled");
        //var googleAdwardsGoalPixel = '<div style="display:inline;"><img height="1" width="1" style="border-style:none;" alt="" src="//www.googleadservices.com/pagead/conversion/1055598448/?value=20.00&amp;currency_code=USD&amp;label=0EpyCJy5gQIQ8M6s9wM&amp;guid=ON&amp;script=0"/></div>';
        StartLoad();
        $('#showMyCollectionPlan').modal('hide');

        object.UserName = getUsername(object);
        object.IsInRegProcess = (window.location.href.indexOf("p=1") !== -1) ? true : false;
        var apprs = getParameterByName("AppraisalID");
        object.AppraisalID = apprs == '' ? '0' : (apprs || null);
        object.isMCPopup = isMCPlanpopup;

        var title = self._elem.find('.section-title.centered').text();
        var errorText = "payment";
        var paymentName = "Payment Succeeded";
        if (title.indexOf('Update') >= 0) {
            paymentName = "Update Succeeded"
            errorText = "request";
        }

        $.post("/Ajax/Stripe/Subscribe", { model: object })
            .done(function (data) {
                var PlanId = getFormData(self._form).PlanId;
                if (data.SCA != null && data.SCA.IsSCA) {
                    payModel = {
                        callback: callback,
                        PlanId: PlanId,
                        $form: self._form,
                        paymentName: paymentName,
                        buttonToDisable: buttonToDisable,
                        data: data,
                        errorText: errorText
                    }
                    if (data.SCA.setup) {
                        if (self.IsUsingStripeElement) {
                            handleStripeElementScaPayment(PlanId, data);
                        }
                        else {
                            mixpanel.track("View SCA popup", { PlanId: PlanId, Setup: true });
                            _stripe.handleCardSetup(data.SCA.clientSecret, card, {
                                payment_method_data: {
                                    billing_details: {
                                        name: data.SCA.billingName
                                    }
                                }
                            }).then(handleScaSetup);
                        }
                    }
                    else {
                        if (self.IsUsingStripeElement) {
                            handleStripeElementScaPayment(PlanId, data);
                        }
                        else {
                            mixpanel.track("View SCA popup", { PlanId: PlanId, Setup: false });
                            _stripe.handleCardPayment(data.SCA.clientSecret, card, {
                                payment_method_data: {
                                    billing_details: {
                                        name: data.SCA.billingName
                                    }
                                }
                            }).then(handleScaPayment);
                        }
                    }
                } else {
                    if (data.IsSuccess) {
                        successPayment(callback, PlanId, self._form, paymentName, data);
                    } else {
                        if (buttonToDisable) {
                            $(buttonToDisable).removeAttr("disabled", "disabled");
                        }

                        failedPayment(data, errorText);
                    }
                }
            })
            .fail(function () {
                self.IsUsingStripeElement ? showStripeError(self.unknownError) : failedPayment(data, errorText);
            });
    }

    function sendUpgrade(callback, buttonToDisable) {
        mixpanel.track("User Click Complete Payment", { "Payment Method": "Credit Card" });

        if (IsPage('payment', 'paymentnew')) {  //For Payment page
            if ($("#login").length > 0) {
                $("#login").trigger('click');
                return false;
            }
        }

        if (self._form.valid()) {
            sendPayment(callback, buttonToDisable);
        }
    }

    function setTotalPrice(price) {
        var currentPrice = price;
        if (self._elem.find(".checkout-summary").length) {
            currentPrice = (self._elem.find(".price-container > span")
                .map(function (i, e) {
                    return $(e).hasClass("discount") ? - parseFloat(e.innerText) : parseFloat(e.innerText);
                })
                .toArray().reduce(function (accumelator, b, i) {
                    return accumelator + b;
                }));

            self._totalPrice.html('$' + currentPrice);
        } else {
            self._totalPrice.html(price);
        }
        if (self._planBasePrice.length) {
            self._planBasePrice.html(price);
        }
        InitStripeElement(currentPrice);
        $("#currentPrice").val(self._totalPrice.html());
    }

    function HideErrors() {
        $("label[class*=billing-]").hide();
    }

    function ShowVoucherBox() {
        if (isNewPaymentPage()) {
            self._voucher.hide()
            self._coupon.css({"margin-bottom":"16px"})
        }
        self._coupon.show().find("#couponCode").focus();
    }

    function setPlan(id) {
        self._elem.find("#PlanId").val(id);
    }

    function UpdateReminderComponent(yearly) {
        if ($(".premium-reminder").length) {
            $(".premium-reminder .yearly")[yearly ? "addClass" : "removeClass"]("active");

        }
    }

    function UpdatePlanDuration(duration) {
        if ($(".plan-duration").length) {
            $(".plan-duration").html(duration);
        }
    }
    function isNewPaymentPage() {
        return false; //  MAPF-9532
    }

    function onPlansChanged(e) {
        if (window.navigator.userAgent.indexOf("Edge") > -1)
            disablePayPal();

        self.selectedBillingPlan = $(this).data("method") ? $(this) : self.selectedBillingPlan;

        if (self.selectedBillingPlan.length > 0) {
            HideErrors();
        }
        if (self.selectedBillingPlan.data("method") === "MonthlyPlan") {
            UpdateReminderComponent(false);
            UpdatePlanDuration("month")
        }
        else {
            UpdateReminderComponent(true);
            UpdatePlanDuration("year")
        }

        setTotalPrice(self.selectedBillingPlan.data("price"));

        if (!IsPage('billing')) {
            self.currentPlan = self.selectedBillingPlan.val();
            setPlan(self.currentPlan);
        }

        if (IsPage("upgrade")) {
            var dataMethod = self.selectedBillingPlan.data("method");
            if (dataMethod.length && dataMethod != "OneTimePlan" && dataMethod.indexOf("bundlePlan") === -1) {
                if ($(".coupon-row").length && $("#couponCode").val() != "" && self.couponEnabled) {
                    var coupon = sessionStorage["voucher"] || defaultCampaignCouponCode;
                    if (!coupon) {
                        coupon = getParameterByName("voucher") || ScopedVariables["voucher"];
                    }
                    if (!coupon) {
                        showCoupon();
                    }
                    getCoupon();
                }
            }
            else if ((selectedBillingPlan.data("method") == "OneTimePlan" || selectedBillingPlan.data("method").indexOf("bundlePlan") !== -1)) {
                disablePayPal();
                hideCoupon();
            }
            self.selectedBillingPlan.attr("data-init", true);
        }

        InitStripeElement();
    }

    function getCoupon() {
        hideCouponError();
        if (isNewPaymentPage()) {
            hideCouponTitle(true);
        }

        var selectedBillingPlan = $(".billing-block input[type=radio]:checked").length ? $(".billing-block input[type=radio]:checked") : $('input[name=plans]:checked');

        if (selectedBillingPlan.length > 0) {
            var couponId = $("#couponCode").val().trim().toLowerCase().replace("m_", "").replace("y_", "");
            var type = $(selectedBillingPlan).data("method");
            if (isNewPaymentPage()) {
                $(".coupon-applied").css({"margin-bottom":"16px"});
            }
            $(".coupon-success").html(loading_image_html);

            var couponErr = "Invalid promotional code";
            var couponExtraErrParams = { "Promotion Code Used": couponId };
            if (couponId) {

                $.post("/Ajax/Stripe/GetCoupon", {
                    couponId: couponId,
                    method: type,
                    collection: getParameterByName("collection"),
                    planId: ($("#PlanId").val() || $(selectedBillingPlan).data('plan-id'))
                })
                    .done(function (response) {
                        if (response.Data != null && response.Data.valid) {
                            hideCouponError();
                            showCouponTotalValue(response.Data);
                            if (isNewPaymentPage()) {
                                $(".coupon-row").css({"margin-bottm":"16px"})
                                $(".coupon-row").hide();
                                $(".coupon-applied").css({ "margin-bottom": "0px" });
                                hideCouponTitle(false);
                            }
                        } else {
                            showCouponError(couponErr);
                            if (isNewPaymentPage()) {
                                $(".coupon-applied").css({ "margin-bottom": "0px" });
                            }
                        }
                    })
                    .fail(function () {
                        showCouponError(couponErr);
                        if (isNewPaymentPage()) {
                            $(".coupon-applied").css({ "margin-bottom": "0px" });
                        }
                    });
            } else {
                if (initAppraisalCoupon()) return;
                couponErr = "Please enter promotion code";
                showCouponError(couponErr);
                if (isNewPaymentPage()) {
                    $(".coupon-applied").css({ "margin-bottom": "0px" });
                }
            }
        } else {
            var couponErr = "Please select a billing plan to apply the promotional code";
            showCouponError(couponErr);
        }

        function showCouponError(text) {
            //Here extra params are used for when you have to pass any extra properties with an error
            var extraParams = null;
            if (text.indexOf("Invalid promotional code") !== -1)
                extraParams = couponExtraErrParams

            setDiscountOff(null);
            self.formData.CouponId = null;
            if (isNewPaymentPage()) {
                $(".coupon-error").html("<p class='form-error-message'><div class='payment-error'><i class='m-icon-notification'></i>" + text + "</div></div>");
                $(".coupon-row").css({ "margin-bottom": "0px" })
                $("#couponCode").addClass("border-color-error");
            }
            else {
                $(".coupon-error").html("<p class='form-error-message'><div class='intellignce-upgrade-banner payment-error'><i class='m-icon-notification'></i>" + text + "</div></div>");
            }
            mixpanelMngo.SendErrorReport(text, "", 0, extraParams);
            $(".coupon-success").html("");
            if (isNewPaymentPage()) {
                $(".discounted-price").html("");
                $(".applied-coupon-code").html("");
                $(".applied-coupons-details").removeClass("pb-s");
            }
            $("#CouponId").val("");
            $(".total-price").html($("#currentPrice").val());
        }
        function setDiscountOff(amountOff) {
            if ($(".shadow-box").length) { // changeplan
                if (amountOff > 0) {
                    var amo = "-$" + amountOff.toFixed(2).replace(/(\.0+|0+)$/, '');
                    if ($("#coup-disc").length) {
                        $("#coup-disc").html(amo)
                    } else {
                        $(".total-price-container").prepend("<strong id='addcouprow'><span>Coupon Discount: </span><span class='price-container' id='coup-disc'>{0}</span><br/ ></strong>".format(amo));
                    }
                } else {
                    $("#addcouprow").remove();
                }
            }
            else {
                if ($(".checkout-summary ul").length && amountOff > 0) {
                    var amo = "-$" + amountOff.toFixed(2).replace(/(\.0+|0+)$/, '');
                    if ($("#coup-disc").length) {
                        $("#coup-disc").html(amo)
                    } else {
                        $(".checkout-summary ul").append("<li id='addcouprow'><span>Coupon Discount </span><span class='price-container' id='coup-disc'>{0}</span></li>".format(amo));
                    }
                } else {
                    $("#addcouprow").remove();
                }
            }
        }
        function showCouponTotalValue(data) {
            function getCouponMethodText(data) {
                if (data.metadata.type == "email")
                    return data.duration_in_months + " months";
                var yd = parseInt(data.duration_in_months / 12 + (data.duration_in_months % 12 > 0 ? 1 : 0));
                return isMonthly ? (data.duration_in_months > 1 ? (data.duration_in_months + " months") : " month") : (yd > 1 ? (yd + " years") : " year");
            }
            var selectedBillingPlan = $(".billing-block input[type=radio]:checked").length ? $(".billing-block input[type=radio]:checked") : $('input[name=plans]:checked');
            var cost = 0;
            if ($("#currentPrice").length > 0) {
                cost = parseFloat($("#currentPrice").val().replace("$", "").replace(",", "").replace("<span>", "").replace("</span>", ""));
            } else {
                cost = parseFloat(selectedBillingPlan.data("price"));
            }
            var iCost = cost;
            if (data.amount)
                var prevCost = cost;
            var method = "year";
            var isMonthly = false;
            var is100p = true;
            var values = getCouponValues(cost, data.amount_off, data.percent_off, isMonthly);
            var value = values.cost.toFixed(2);
            var amountOff = prevCost - value;
            amountOff = amountOff.toFixed(2)
            var couponName = data.name;
            var savedAmount = cost - values.cost; 
            savedAmount = savedAmount.toFixed(2);
            InitStripeElement(values.cost);
            setDiscountOff(cost - values.cost);

            var isPercent = true;
            if (!data.percent_off) {
                isPercent = false;
            }

            var discountValue = isPercent ? (data.percent_off + "%") : (data.amount_off / 100 + "$");
            if (selectedBillingPlan.data("method") === "MonthlyPlan" || selectedBillingPlan.data("period") == "monthly") {
                isMonthly = true;
                method = "month"
            }

            if (!isPercent && (data.amount_off / 100) === 1) {
                var errorMsg = "Invalid promotional code";
                setDiscountOff(null);
                if (data.metadata.Main) {
                    errorMsg = data.metadata.Main;
                }

                showCouponError(errorMsg);
                return;
            }

            if (data.metadata.Main) {
                var mainText = "";
                if (isNewPaymentPage()) {
                     mainText = "<div class='metadata-main'><p>" + data.metadata.Main + "</p></div>";
                }
                else {
                     mainText = "<div class='metadata-main'>" + data.metadata.Main + "</div>";
                }
                var noteText = "";
                if (data.metadata.Note) {
                    noteText = "<div class='metadata-note'>*" + data.metadata.Note + "</div>";
                }
                var okArrow = GetOKArrow();
                if (isNewPaymentPage()) {
                    $(".coupon-success").html("<div class='metadata-text'>" + mainText + noteText + "</div>");
                }
                else {
                    $(".coupon-success").html(okArrow + "<div class='metadata-text'>" + mainText + noteText + "</div>");
                }
                is100p = false;
            }
            else if (data.duration == "repeating" || data.duration == "once") {
                //$(".coupon-success").html("Congratulations! Your first " + getCouponMethodText(data, method) +
                //    " will be " + (data.percent_off == 100 || (data.amount_off / 100) > cost ? "free." : "with " + discountValue + " discount.")
                //    + " At the end of your first " + getCouponMethodText(data, method) +
                //    ", you will automatically be billed $" + cost + " per " + method);
                var txtToShow = "Congratulations! Your first " + getCouponMethodText(data, method) +
                    " will be " + (data.percent_off == 100 || (data.amount_off / 100) > cost ? "free." : "with " + discountValue + " discount.") +
                    " At the end of your first " + getCouponMethodText(data, method) +
                    ", you will automatically be billed $" + cost + " per " + method;
                var txt = "";
                if (isNewPaymentPage()) {
                    txt = "<p>" + txtToShow + "</p>";
                }
                else {
                    txt = txtToShow;
                }
                $(".coupon-success").html(txt);
            }
            else {
                is100p = false;
                var txtToShow = "Congratulations! A " + discountValue + " discount has been applied";
                txtToShow += data.duration == "forever" ? " for current and all future payments!" : ".";
                var txt = ""
                if (isNewPaymentPage()) {
                    txt = "<p>" + txtToShow + "</p>";
                }
                else {
                    txt = txtToShow;
                }
                $(".coupon-success").html(txt);
            }
            //before iCost now value
            if (isNewPaymentPage()) {
                $(".discounted-price").html("-$" + savedAmount);
                $(".applied-coupon-code").html("Promotion code " + couponName);
                $(".applied-coupons-details").addClass("pb-s");
            }
            $(".total-price").html("$" + value);
            $("#CouponId").val(couponId);
            self.formData.CouponId = couponId;
        }

        function getCouponValues(cost, AmountOff, PercentOff, isMonthly) {
            var discount = '';
            cost = parseFloat(cost);
            if (AmountOff != null) {
                cost = cost - AmountOff / 100.0;
                discount = AmountOff / 100.0;
            }
            if (PercentOff != null) {
                cost = cost - ((cost * PercentOff) / 100.0);
                discount = PercentOff + '%';
            }

            values = {
                cost: cost,
                discount: discount
            }
            return values;
        }
    }
   
    function hideCouponError() {
        $(".coupon-error").html('');
        if (isNewPaymentPage()) {
            $("#couponCode").removeClass("border-color-error");
            $('.coupon-row').css({"margin-bottom":"16px"})
        }
    }
    function hideCouponTitle(hide) {
        if (hide) {
            $(".voucher_code").hide();
        }
        else {
            $(".voucher_code").show();
        }
    }

    function checkValidation(form, isSilent) {
        var errorList = Array();
        if (location.href.toLowerCase().indexOf('upgrade') > 10) {
            if (!isPayPalPayment) {
                if ($("#UserName").length && ($("#UserName").val().length == 0 || $.trim($("#UserName").val()) == '')) {
                    if (!isSilent) $("#UserName").addClass("err");
                    if (!isSilent) $(".billing-UserName-error-message").show();
                    errorList.push($(".billing-UserName-error-message"));
                }
            }

            //if (form) {
            //    if ($(".billing-card-error-message").text().trim() != '') {
            //        if (!isSilent) $("#card-element").addClass("err");
            //        if (!isSilent) $(".billing-card-error-message").show();
            //        errorList.push($(".billing-card-error-message"));
            //    }
            //}
        }

        var paymentIsSelected = ($(".billing-block").length == 0 ||
            $(".billing-block input[type=radio]:checked").length > 0 ||
            $(".billing-block.active").length > 0); /*this code is for payment and appraisl - check in both!!!*/

        if (!paymentIsSelected) {
            if (!isSilent) $(".billing-blocks-row").addClass("error");
            errorList.push($(".billing-blocks-row"));
            if (!isSilent) $(".billing-cycle-error-message").show();
        } else {
            $(".billing-blocks-row").removeClass("error");
            $(".billing-cycle-error-message").hide();
        }

        if (form) {
            if (form.valid()) {
                var inputError = $("#subscribeForm").find("input.error:first,select.error:first");

                if (inputError && inputError.offset())
                    errorList.push(inputError);
            }
        }

        if (errorList.length > 0) {
            return false;
        }

        return true;
    }

    function disablePayPal() {
        $(".paypal-container input[type=radio][value=credit]").prop('checked', true);
        changePaymentMethod();
        $(".paypal-tab").hide();
    }
    function enablePayPal() {
        changePaymentMethod();
        $(".paypal-tab").show();
    }

    function changePaymentMethod() {
        var selectedPaymentMethod = self._paymentMethods.filter(':checked').val();
        
        if (selectedPaymentMethod) {
            $(".form-messages").html("");
            if (selectedPaymentMethod == "paypal") {
                //hideCoupon();
                $(".input-line").hide();
                HideErrors();
                $('.ccBottom').hide();
                $('.stripe-element').hide();
                $('.ccBottom-mobile').hide();
                isPayPalPayment = true;
                
                // Check if new payment page
                if (isNewPaymentPage()) {
                    $(".payment-form-container").hide();
                    $("#completePayment").addClass("hidden");
                    $(".form-messages").css({ "margin-bottom": "0px" });

                    if ($("#continue-payment-btn").hasClass("hidden")) {
                        $(".cc-paypal, #paypal-button").show();
                    } else {
                        $(".cc-paypal").hide();
                    }
                } else {
                    $(".cc-paypal, #paypal-button, #paypal-payment-terms").show();
                }

                $(".payment-method-card").removeClass("active");
                $(".payment-method-card[data-method='paypal']").addClass("active");
                if (window['paypal'] && !window['renderedPaypal']) {
                    window['renderedPaypal'] = true;
                    renderPayPalBtn().then(function () {
                        if (!window['card'] && !self.IsUsingStripeElement) {
                            $(".payments-selector .paypal-container").first().hide();
                            $(".paypal-container.paypal-tab input[type=radio]").prop('checked', true);
                            changePaymentMethod();
                        }
                    });
                }
            }
            else {
                $(".input-line").show();
                $("#paypal-button").hide();
                $("#paypal-payment-terms").hide();
                $('.stripe-element').show();
                $(".cc-paypal").hide()
                // Check if new payment page
                if (isNewPaymentPage()) {
                    $(".payment-form-container").show();

                    //condition to show/hide Complete payment button
                    if ($("#continue-payment-btn").hasClass("hidden") && $("#new-plan-selection").css("display") === "none") {
                        $("#completePayment").removeClass("hidden");
                        $(".form-messages").css({ "margin-bottom": "0px" });
                        $('.ccBottom').show();
                    }
                    else {
                        $('.ccBottom').hide();

                    }
                }
                else {
                    $('.ccBottom').show();
                }
                isPayPalPayment = false;
                if (!isNewPaymentPage()) {
                    self._voucher.show();
                }
                $(".payment-method-card").removeClass("active");
                $(".payment-method-card[data-method='credit']").addClass("active");
                //showCoupon();
            }
            var coupon = sessionStorage["voucher"] || defaultCampaignCouponCode;
            if (!coupon) {
                coupon = getParameterByName("voucher") || ScopedVariables["voucher"];
            }
            if (coupon) {
                showCoupon();
            }
            //$(".billing-cycle-error-message").hide();
            //$(".billing-blocks-row").removeClass("error");
        }
    }

    function toggleButton(actions) {
        return checkValidation(null, true) ? actions.enable() : actions.disable();
    }

    function onChangeCheckbox(handler) {
        self._elem.find('.checkbox, input[name="plans"], input[name="payment_selector"]').on('change', handler);
    }

    function renderPayPalBtn(customID, size) {
        return paypal.Button.render({
            //env: 'sandbox', // Or 'production'
            env: paypalMode == 'live' ? 'production' : 'sandbox',
            style: {
                size: 'responsive',
                color: 'blue',
                shape: 'rect',
                label: 'pay',
                tagline: 'false'
            },

            // Set up the payment:
            // 1. Add a payment callback
            payment: function (data, actions) {
                var selectedBillingPlan = $(".billing-block input[type=radio]:checked");

                // 2. Make a request to your server
                return actions.request.post('/Ajax/PayPal/CreateAgreement', { planIdEnc: selectedBillingPlan.val(), coupon: $("#CouponId").val() })
                    .then(function (res) {
                        // 3. Return res.id from the response
                        if (res.OK) {
                            payModel.usedCoupon = res.Data.coupon;
                            payModel.PopupMessage = res.Data.PopupMessage;
                            return res.Data.id;
                        } else {
                            failedPayment(res, "PayPal payment");
                        }
                        return null;
                    });
            },

            validate: function (actions) {
                toggleButton(actions);

                onChangeCheckbox(function () {
                    toggleButton(actions);
                });
            },

            onClick: function (actions) {
                mixpanel.track("User Click Complete Payment", { "Payment Method": "PayPal" });

                if (!checkValidation(null)) {
                    return false;
                }
            },

            onCancel: function (data, actions) {
                mixpanel.track("User Click to Close Paypal Windows")
            },

            onError: function (err) {
                // console.log("PayPal error: " + err);
                mixpanelMngo.SendErrorReport("PayPal error: " + err);
            },
            // Show a cancel page or return to cart

            // Execute the payment:
            // 1. Add an onAuthorize callback
            onAuthorize: function (data, actions) {
                var planId = $(".billing-block input[type=radio]:checked").val();
                // 2. Make a request to your server
                return actions.request.post('/Ajax/PayPal/ExecuteAgreement', {
                    orderID: data.orderID,
                    maPlanId: planId,
                    isInRegProcess: (window.location.href.indexOf("p=1") !== -1) ? true : false,
                    coupon: payModel.usedCoupon
                })
                    .then(function (res) {
                        if (res.OK) {
                            successPayment(null, planId, null, null, {
                                PopupMessage: payModel.PopupMessage
                            })
                        }
                        else {
                            failedPayment(res, "PayPal payment")
                        }
                        // 3. Show the buyer a confirmation message.
                    });
            }
        }, customID || '#paypal-button');
    }

    function failedPayment(data, errorText) {
        if ($(".payment-method-card input[type=radio]:checked").val() == "credit"
            || IsPage("billing") || IsPage("art_appraisalpayment") || IsPage('paymentnew'))
            $(".input-group-block-btn-row").show();
        var msg = '<div class="intellignce-upgrade-banner payment-error"><i class ="m-icon-notification"></i><div>There has been an error processing your '
            + errorText +
            '.</div><div>' + (data['OK'] == false ? GetErrorText(data) : ('Error reason: ' + data.Message)) +
            '</div><div>Please contact <a href="mailto:support@mutualart.com">support@mutualart.com</a></div></div>';
                $(".form-messages").show();
        var newPaymentmsg = '<div class="new-card-error-msg"><i class ="m-icon-notification"></i><div>There has been an error processing your '
            + errorText +
            '. ' + (data['OK'] == false ? GetErrorText(data) : ('Error reason: ' + data.Message)) +
            'Please contact <a href="mailto:support@mutualart.com">support@mutualart.com</a></div></div>';

                if (isNewPaymentPage()) {
                    $(".form-messages").html(newPaymentmsg);
                }
                else {
                    $(".form-messages").html(msg);
                }
                mixpanelMngo.SendErrorReport("There has been an error processing your " + errorText + ". Error reason: " + data.Message, null, data['DEBUG_ID']);
                $(".form-messages").focus();

                if (IsPage("billing")) {
                    $(".btn-cta.forms").text("Try Again");
                }
                if (!IsZipCodeRquierd) {
                    MakeZipCodeRquierd();
                    //sendUpgrade();
                }
        singleClickpayment = false;
        setUserPaymentFailedCount()
    }

    function successPayment(callback, PlanId, form, paymentName, responseData) {
        var label = "success";

        if (IsPage("upgrade")) {
            var gateway = "PayPal";
            if (form) {
                gateway = "Stripe_Europe";
            }

            var prop = {
                "Is Renewal Alert": $("#RenewalAlert:checked").length ? true : false,
                "Amount": $(".total-price").text(),
                "Payment Date": $.datepicker.formatDate('dd MM yy', new Date()),
                "Voucher Name": $("#CouponId").val(),
                "Subscription Code": PlanId,
                "Subscription Plan": subscriptionTypeName,
                "Gateway Name": gateway,
                "Subscription Period": self.selectedBillingPlan.data('method') == 'AnnualPlan' ? "year"
                    : self.selectedBillingPlan.data('method') == "MonthlyPlan" ? "month" : "day"
            }
            if (responseData && responseData.IsAppraisalConfirmed)
                prop["Appraisal Bonus"] = responseData.IsAppraisalConfirmed ? true : false;

            mixpanel.track('Success Payment Flow', prop);

            GTM_Send('event', 'payment', label, PlanId, null, null, 1);
            UET_Send('event', 'upgrade', 'success', PlanId,0);

            if (prop['Subscription Plan'] == "MyCollection 100" || prop['Subscription Plan'] == "MyCollection 200" || prop['Subscription Plan'] == "MyCollection 300" || prop['Subscription Plan'] == "MyCollection Unlimited") {
                GTM_Send('event', 'collection_registration', 'collection_registration', page_name + ' - ' + PlanId);
            }

            GTM_Send('event', 'Payment Type', prop['Subscription Plan'].replace(" ", "") + "_" + prop['Subscription Period'], label);
        }

        showBeforeUnloadMsg = false;
        sessionStorage.removeItem("voucher");

        if (IsPage("art_appraisalpayment")) {
            GTM_Send('event', 'payment', 'success', 'art-appraisal');
            if (!getParameterByName("AppraisalID")) {
                location.href = "/account-settings#my-appraisals?msg=complete_appraisal";
            }
            else {
                var sucessURL = "/art-appraisal/Success";
                if (unique_id && location.href.indexOf("p=1") > -1) {
                    location.href = sucessURL + "?msg=welcome";
                }
                else {
                    location.href = sucessURL;
                }
            }
        }
        if (callback !== undefined && callback !== null && callback !== 'null' && callback.length > 0) {
            setTimeout(function () {
                window[callback]();
            }, 3000);
        } else {
            if (self._price.val()) {
                $(".payment-heading").hide();
                $(".section-separator").hide();
            } else {
                paymentName = "Update Succeeded";

                if (IsPage("trial")) {  //For Trial
                    paymentName = "Sign-up Successful"
                }
            }
            var newUrl = "/my-preferences?n3";
            if (getCookie("RedirectUrl")) {
                newUrl = getCookie("RedirectUrl")
                if (newUrl.indexOf("/upgrade") !== -1 || newUrl.indexOf("/plans") >= 0) {
                    newUrl = "/my-preferences?n3";
                }
            }

            if (IsPage('billing', 'payment', 'paymentnew')) {  //For Billing //Payment
                newUrl = "/my-preferences"
                if (IsPage('billing')) {
                    paymentName = 'Your payment information has been updated successfully.';
                }
                form.html('<div class="container-fluid container-continue-btn"><div class="input-group-block continue-btn text-center"><h5 class="input-group-title">' + paymentName + '</h5><a href="' + newUrl + '" class="btn-cta forms">MY MUTUALART</a></div></div>');
                return false;
            }

            if (responseData && responseData.IsAppraisalConfirmed) {
                newUrl = "/art-appraisal/Success";
                //newUrl = appendQs(backto, "msg", "upgrade");
            }

            if (responseData.PopupMessage);
            var newUrl = appendQs(newUrl, "msg", responseData.PopupMessage);
            var newUrl = appendQs(newUrl, "upgrade", "1");
            if (unique_id && location.href.indexOf("p=1") > 0 && newUrl.indexOf("msg=welcome") == -1) {
                newUrl = appendQs(newUrl, "msg", "welcome");
            }
            var gotourlFunc = function () { location.href = newUrl; };

            if (IsPage("upgrade")) {
                GTM_Send('event', 'upgrade_test', label, PlanId, gotourlFunc);
            }
            else {
                gotourlFunc();
            }
        }
    }

    function closePaymentForm() {
        showBeforeUnloadMsg = false;
        var isShowBundlePopup = false;

        if (getCookie("RedirectUrl")) {
            var backto = getCookie("RedirectUrl")

            if (backto.indexOf("summer-campaign-1") !== -1) {
                backto = "/?b=1";
            }

            if (IsPage("upgrade") && backto.toLowerCase().indexOf("/upgrade") > -1) {
                backto = "/my-preferences?n=4";
            }

            var queryStringLocation = window.location.href.indexOf('?');
            if (queryStringLocation >= 0) {
                backto += ((backto.indexOf('?') >= 0) ? "&" : "?") + window.location.href.substr(queryStringLocation + 1).split('&').filter(x => x !== 'p=1').join('&');
            }

            var isUserSawAccessCreditPopup = maStorageVariables.getVariable("isUserSawAccessCreditPopup");

            if (backto.indexOf("/Artwork/") !== -1 && ((typeof (isUserSawAccessCreditPopup) == 'undefined' || isUserSawAccessCreditPopup != 1))) { // && window.location.href.indexOf("?p=1") === -1
                isShowBundlePopup = true;
            }
        } else {
            var backto = "/my-preferences?n=4";
        }
        window.location = backto;
    }

    function InitStripeElement(displayAmount) {
        if (self.IsUsingStripeElement && displayAmount) {
            try {
                displayAmount = displayAmount.toString().replace(/[^\d.-]/g, '');

                var newAmount = parseFloat(displayAmount);
                if (!isNaN(newAmount) && newAmount >= 1) {
                    newAmount = parseInt(newAmount* 100); //100 cents to charge $1.00
                    if (self.isPaymentElementReady) {
                        updatePaymentElement(newAmount, StopLoad);
                    }
                    else {
                        createPaymentElement(newAmount);
                    }
                }
                else {
                    showStripeError(self.invalidAmountError);
                }
            }
            catch (err) {
                showStripeError(err.message);
            }
        }
    }

    function updatePaymentElement(newAmount, callback) {
        StartLoad();
        self.stripeElements.update({ amount: newAmount });
        if (callback && typeof (callback) === 'function') {
            callback();
        }
    }

    function getElementOptions() {
        return {
            paymentMethodOrder: ["apple_pay", "google_pay", "card"],
            fields: { billingDetails: { name: "never", phone: "never" } },
            terms: { applePay: "never", card: "never", googlePay: "never" },
        };
    }

    function getElementObjectOptions(displayAmount) {
        return {
            currency: "usd",
            amount: displayAmount,
            mode: self.paymentMode,
            appearance: { theme: "stripe" },
            paymentMethodCreation: "manual",
        };
    }

    function createPaymentElement(displayAmount) {
        if (self.isCreatingPaymentElement || self.isPaymentElementReady) {
            return;
        }

        StartLoad();
        initStripe();
        $('.stripe-element').hide();
        self.isCreatingPaymentElement = true;
        self.stripeElements = _stripe.elements(getElementObjectOptions(displayAmount));
        var paymentElement = self.stripeElements.create("payment", getElementOptions());

        if (paymentElement) {
            paymentElement.mount("#payment-element");
            paymentElement.on('ready', function (event) {
                StopLoad();
                $('.stripe-element').show();
                disablePlanSelection(false);
                self.isPaymentElementReady = true;
                self.isCreatingPaymentElement = false;
                if (!isNewPaymentPage()) {
                    setTimeout(() => {
                        $('#completePayment').removeClass('hidden');
                    }, 350)   
                }
                $('#completePayment').on('click', handleSubmit);
                $("#payment-element").removeClass('StripeElement');
                setTimeout(() => {
                    $('.stripe-dependent').removeClass('hidden');
                }, 350)

                paymentElement.on('change', function (event) {
                    if (event.complete) {
                        self.IsSCARetry = false;
                        $(".form-messages").html("");
                        if (isNewPaymentPage()) {
                            $(".form-messages").css({ "margin-bottom": "0px" })
                            $("#couponCode").removeClass("border-color-error");
                        }
                        self.userPaymentMethod = null;
                    }
                });
            });
        }
    }
    function checkEnterPressed(e) {
        if (e.keyCode == 13) {
            e.preventDefault();
            getCoupon();
            return;
        }
    }
    function handleSubmit(e) {
        $.post("/Ajax/Stripe/IsUserApplicableForPayment", null)
            .done(function (data) {
                if (data.IsSuccess) {
                    StartLoad();
                    e.preventDefault();
                    self.IsSCARetry = false;
                    self.userPaymentMethod = null;

                    if (!offerMyCollection()) {
                        proceedPayment();
                    }
                }
                else {
                    // Error to user when payment is blocked for 1 hour
                    var msg = `<div class="intellignce-upgrade-banner payment-error">
                                    <i class ="m-icon-notification"></i><div>
                                    There was an unexpected error processing your payment. Please contact our support team at <a href="mailto:support@mutualart.com">support@mutualart.com</a> for assistance. We apologize for the inconvenience.
                               </div></div>`;

                    var newPaymentMsg = '<div class="payment-error"><div class="new-card-error-msg"><i class ="m-icon-notification"></i><div>There was an unexpected error processing your payment. Please contact our support team at <a href="mailto:support@mutualart.com">support@mutualart.com</a> for assistance. We apologize for the inconvenience.</div></div>';
                    showErrorMessage(isNewPaymentPage() ? newPaymentMsg : msg);
                }
            })
    }

    function getUsername(formData) {
        if (formData.UserName) {
            return formData.UserName
        }
        else if (formData.FirstName || formData.LastName) {
            return formData.FirstName.concat(" ", formData.LastName);
        }
        else {
            return '';
        }
    }

    function createPaymentMethod() {
        var formData = $.extend({}, getFormData(self._form));

        formData.UserName = getUsername(formData);
        // Create the PaymentMethod using the details collected by the Payment Element
        _stripe.createPaymentMethod({
            elements: self.stripeElements,
            params: {
                billing_details: {
                    email: formData.Email,
                    phone: formData.Phone,
                    name: formData.UserName,
                }
            }
        }).then(function (result) {
            // Handle result.error or result.paymentMethod
            if (typeof result.error != "undefined") {
                // This point is only reached if there's an immediate error when
                // creating the PaymentMethod. Show the error to your customer (for example, payment details incomplete)
                showStripeError(result.error.message);
                return false;
            }

            self.userPaymentMethod = result.paymentMethod;
            stripeTokenHandler(result.paymentMethod);
        });
    }

    function proceedPayment(IsSCARetry) {
        if (!self.IsUsingStripeElement && card._invalid) {
            StopLoad();
            return false;
        }

        self.IsSCARetry = IsSCARetry;
        $(".form-messages").html("");

        // Trigger form validation and wallet collection
        self.stripeElements.submit()
            .then(function (result) {
                // Handle result.error
                if (typeof result.error != "undefined") {
                    showStripeError(result.error.message);
                    return;
                }
                else {
                    if (IsSCARetry && self.userPaymentMethod) {
                        stripeTokenHandler(self.userPaymentMethod);
                    }
                    else {
                        createPaymentMethod();
                    }
                }
            });
    }

    

    function offerMyCollection(mcplan) {
        var offeredMyCollection = false;
        var mcplan = $('#completePayment').data('mcplan') === true;

        if (!mcplan) {
            if (singleClickpayment) {
                return;
            }
            singleClickpayment = true;
        } else {
            singleClickpayment = false;
        }

        var isMonthlyplan = self.selectedBillingPlan.data("method") === "MonthlyPlan";
        if (!isCollectionPage() && getParameterByName('collection') == null && mcplan && !isMonthlyplan && $('#showMyCollectionPlan').length) {
            isMCPlanpopup = true;
            $('#showMyCollectionPlan').modal({ backdrop: 'static' });
            $('#showMyCollectionPlan').on('shown.bs.modal', function () {
                mixpanel.track('View MC Popup');
                if ($("#CollectionPopupSlider").hasClass("slick-initialized")) {
                    $("#CollectionPopupSlider").slick("refresh");
                } else {
                    MA.LoadModule("#CollectionPopupSlider");
                }
                $("#CollectionPopupSlider").css("visibility", "visible");
                // Refresh if already loaded
            });
            offeredMyCollection = true;
            $('#showMyCollectionPlan').modal('show');

            if (isMobile()) {
                document.body.scrollTop = 0;
                window.scrollTo(0, 0)
            }
        }

        return offeredMyCollection;
    }

    function showStripeError(errorMessage) {
        StopLoad();
        if (typeof (errorMessage) != 'undefined') {
            var msg = '<div class="intellignce-upgrade-banner payment-error"><i class ="m-icon-notification"></i><div>There has been an error processing your request.</div>' +
                '<div>Error reason: ' + errorMessage + '</div><div>Please contact <a href="mailto:support@mutualart.com">support@mutualart.com</a></div></div>';

            var newPaymentMsg = '<div class="payment-error"><div class="new-card-error-msg"><i class ="m-icon-notification"></i><div>There has been an error processing your request. ' +
                'Error reason: ' + errorMessage + ' Please contact <a href="mailto:support@mutualart.com">support@mutualart.com</a></div></div>';
            if (isNewPaymentPage()) {
                showErrorMessage(newPaymentMsg); 
            }
            else{
                showErrorMessage(msg); 
            }
        }
    }

    function showErrorMessage(msg) {
        singleClickpayment = false;
        $(".form-messages").show();
        $(".form-messages").html("");
        $(".input-group-block-btn-row").show();
        $(".form-messages").html(msg);
        if(isNewPaymentPage()){
            $(".form-messages").css({"margin-bottom":"24px"})
        }
    } 

    function setUserPaymentFailedCount() {
        $.post("/Ajax/Stripe/SetUserPaymentFailed", null)
    }

    var _export = {
        init: init,
        name: "PaymentModule",
        successPayment: successPayment,
        failedPayment: failedPayment,
        createToken: createToken,
        getCoupon: getCoupon,
        sendUpgrade: sendUpgrade,
        closePaymentForm: closePaymentForm,
        onPlansChanged: onPlansChanged,
        addMyCollectionPlan: addMyCollectionPlan,
        stopPageLeave: stopPageLeave,
        enableLeave: enableLeave,
        showFullPaymentOptions: showFullPaymentOptions,
        showPlanSelection: showPlanSelection,
        checkEnterPressed: checkEnterPressed
    }

    return _export;
};


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 initEntitySelection() {
    entitySelection.bind($(".ent_sel"), 'Artwork');
    initRecommendedLotsCheckBox();
}

function initEntitySelectionForSale() {
    initEntitySelection();
    InitFollowButtons();
}

function EntitySelection() {
    var self = this;
    var key_name = "sel_";
    var compareTag = null;
    var type = '';
    var elements = [];
    var maxItemsSelected = 40
    var isAllChecked = false;

    self.IsArtworkIds = function () {
        return IsPage('artist_auctionresults', 'auction_auctionresults', 'apt_artworks', 'auction_search', 'artwork_similar', 'my_preferences');// search lot and APT
    }

    self.bind = function (elmens, p_type) {
        type = p_type;

        var items = self.getStoredValue().items;

        // 16-05-18 counter issue after filtering
        elements = [];

        $(elmens)
            .each(function (index, checkboxHolder) {
                var checkbox = $(checkboxHolder).find("INPUT:checkbox")

                checkbox[0].checked = (items.indexOf(self.IsArtworkIds() ? checkbox.attr('data-idartwork') : checkbox.val()) >= 0);

                if (!checkbox[0].sel_bind) {
                    $(checkbox).click(function (event) {
                        self.stopPropagation(event);

                        var val = self.IsArtworkIds() ? checkbox.attr('data-idartwork') : checkbox.val();
                        //var val = checkbox.attr('data-idartwork');
                        var checked = checkbox.is(":checked");

                        if (!self.add(val, checked)) {
                            checkbox.prop("checked", false);
                        }
                    })
                }

                checkbox[0].sel_bind = true;
            })

        elements = $.merge(elements, elmens);

        isAllChecked = (items.length == elements.length);

        self.ShowCompareButton((items.length > 0) || self.isComparePage());

        if (self.isComparePage()) {
            $(".artist-auction-bottom-bar .print").removeClass('hide')
            _gaq.push(['_trackEvent', 'artwork_compare_page', location.pathname, items.length])
        }
    }

    self.add = function (id, addIt) {
        return self.addIdToValue(self.getStorageKey(), id, addIt);
    }

    self.getStorageKey = function () {
        return key_name + type;;
    }

    self.addIdToValue = function (key, id, addIt) {
        var value = self.getStoredValue();
        var url = window.location.pathname;

        if (value.items.length > 1 && value.items.map(function (m) { return m.length; }).reduce(function (a, b) { return a + b; }) > 1800) {
            alert("Cannot comapre any more artworks.")
            return false;
        }

        if (!addIt || value.items.length < maxItemsSelected) {
            var index = value.items.indexOf(id);

            if (addIt && index < 0) {
                value.items.push(id);
            }
            else {
                value.items.splice(index, 1);
            }

            if (!addIt && value.items.length == 0) {
                self.clear()
            }
            else {
                var valueStr = JSON.stringify(value);
                localStorage.setItem(key, valueStr);
            }
        }
        else {
            alert("Cannot compare more than " + maxItemsSelected + " artworks.")
            return false;
        }

        self.ShowCompareButton((value.items.length > 0));
        return true;
    }

    self.selectAll = function (isChecked) {
        isAllChecked = isChecked = (typeof (isChecked) == 'undefined' ? !isAllChecked : isChecked);

        $(elements)
            .each(function (index, checkboxHolder) {
                var checkbox = $(checkboxHolder).find("INPUT[type=checkbox]:" + (isChecked ? "not(:checked)" : "checked"))

                if (checkbox.length > 0) {
                    checkbox[0].checked = isChecked;
                    if (!self.add(self.IsArtworkIds() ? checkbox[0].getAttribute('data-idartwork') : checkbox[0].value, isChecked)) {
                        checkbox[0].checked = false;
                        return false;
                    }
                }
            })

        var value = self.getStoredValue();

        self.ShowCompareButton((value.items.length > 0));

        return true;
    }

    self.clear = function () {
        var value = self.getStoredValue();
        var backToUrl = value.backToUrl;

        isAllChecked = false;

        localStorage.removeItem(self.getStorageKey());

        $(elements)
            .each(function (index, checkboxHolder) {
                var checkbox = $(checkboxHolder).find("INPUT[type=checkbox]:checked")

                if (checkbox.length > 0) {
                    checkbox[0].checked = false;
                }
            })

        self.ShowCompareButton(false);

        if (self.isComparePage()) {
            if (!backToUrl) {
                backToUrl = window.location.pathname
            }

            location.href = backToUrl;
        }
    }

    self.isComparePage = function () {
        return location.href.indexOf('ItemID') > 0;
    }

    self.saveToNewGroup = function (newGroupName) {
        var items = GetSelectedArtworks();// self.getStoredValue().items;

        newGroupName = String(newGroupName)
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');


        if (newGroupName.length > 0 && items.length > 0) {
            self.saveMsg()
            var IDs = items.join(",")
            var params = { 'name': newGroupName, 'ID': IDs };

            $.post(baseDomain + '/Ajax/Compare/AddNewGroup', params, function (data, textStatus, jqXHR) {
                var msg = (data) ? "Added Successfuly!" : "<b style='color:red;' >Error!</b>";

                $("#refreshGroupList").click()

                self.saveMsg(msg, 2.5);
            });
        }
    }

    self.AddToExistGroup = function (idEntityGroup, isSelectAllToCollection, msg) {
        var items = GetSelectedArtworks();//self.getStoredValue().items;
        var IDs = items.join(",")
        var msg = msg;
        if (items.length > 0 && IDs.length > 0) {
            var params = {
                'idGroups': idEntityGroup,
                'ID': isSelectAllToCollection ? '' : IDs,
                'isAddGroupToCollection': isSelectAllToCollection
            };

            self.saveMsg()

            var jqxhr = $.post(baseDomain + '/Ajax/Compare/AddToExistGroup', params, function (data, textStatus, jqXHR) {
                if (data && (msg || (data.msg && data.msg.length))) {
                    self.saveMsg(msg, 2.5);
                    maAlertMessage(msg || data.msg, ['OK']);
                    if (msg && msg.length) {
                        $('.ent_sel INPUT:checkbox:checked').prop('checked', false);
                    }
                    return;
                }
                msg = (data) ? "Added Successfuly!" : "<b style='color:red;' >Error!</b>";
                self.saveMsg(msg, 2.5);
            });
        }
        else {
            msg = "No artwork is Selected. Select atleast one and click again";
            self.saveMsg(msg, 2.5);
            maAlertMessage(msg, ['OK']);
        }
    }


    GetSelectedArtworks = function () {
        //return self.getStoredValue().items;

        var selected = Array();
        $(".ent_sel input[type=checkbox]:checked").each(function () {
            selected.push($(this).data("idartwork"));
        })

        return selected;
    }

    self.AddToExistGroups = function (IDs) {
        var items = GetSelectedArtworks();// self.getStoredValue().items;

        IDs = [IDs] || $(".compare_button_warp .groups_list .ex_group_id:checkbox:checked").map(function () {
            return $(this).val();
        }).get();

        if (items.length > 0 && IDs.length > 0) {
            var idGroups = IDs.join(",")
            var IDs = items.join(",")

            var params = { 'idGroups': idGroups, 'ID': IDs };

            self.saveMsg()

            var jqxhr = $.post(baseDomain + '/Ajax/Compare/AddToExistGroup', params, function (data, textStatus, jqXHR) {
                if (data && data.msg && data.msg.length) {
                    self.saveMsg('Failed', 2.5);
                    maAlertMessage(data.msg, ['OK']);
                    return;
                }
                var msg = (data) ? "Added Successfuly!" : "<b style='color:red;' >Error!</b>";

                self.saveMsg(msg, 2.5);
            });
        }
    }

    self.CloseInnerPopup = function (elm) {
        $(elm).parents("li.current").removeClass("current");
    }

    self.saveMsg = function (msg, secondsToHide) {
        if (typeof (msg) == 'undefined') {
            $(".saving_frame").css("display", "flex").hide().fadeIn("slow");
        }
        else if (msg == "") {
            //$('.closePopup').click();
            $(".saving_to_group_msg").fadeOut("slow");
            $(".saving_frame").fadeOut("slow");
        }
        else {
            $(".saving_to_group_msg").fadeIn("slow").html(msg);

            if (secondsToHide) {
                window.setTimeout('entitySelection.saveMsg("")', secondsToHide * 1000);
            }
        }
    }

    /* [OLD1] */

    self.getCompareUrl = function () {
        if (!self.isComparePage()) {
            self.saveCurrentUrl();
        }

        var items = self.getStoredValue().items;

        if (items.length > 0) {
            var ItemID = '|' + items.join("|");
            var url = window.location.pathname + '?ItemID=' + ItemID;

            return url;
        }

        return "";
    }

    self.printSavedArtworksList = function () {
        var items = $(".ent_sel input[type='checkbox']")
        if (items.length) {
            var ItemID = "|" + items.map(function () { return this.value; }).get().join("|");
            document.location = '/Ajax/AjaxLoader/LoadAsPdf?curentModule=0d030f96-8838-432a-a8fb-81d108f70089&objectId=0&curentMethod=GetLotPrintPage&type=' + type + '&ItemID=' + ItemID;
            $('.error-pdf').addClass('display-none');
        } else {
            $('.error-pdf').removeClass('display-none');
        }
    }

    self.printListToPdf = function () {
        var items = self.getStoredValue().items;

        if (items.length > 0) {
            var ItemID = '|' + items.join("|");
            //var moduleid = $('#lotsData .table-head').next().attr('moduleid');
            var type = self.IsArtworkIds() ? "artwork" : "auction";
            var sortkey = "artworkSort";
            var sortQuery = manager.modules().filter(x => x._queryName == sortkey)
            var sortValue = sortQuery.length > 0 && sortQuery[0].getSelected().length > 0 ? sortQuery[0].getSelected()[0] : "";
            document.location = '/Ajax/AjaxLoader/LoadAsPdf?curentModule=0d030f96-8838-432a-a8fb-81d108f70089&objectId=0&curentMethod=GetLotPrintPage&type=' + type + '&ItemID=' + ItemID + `&${sortkey}=${sortValue}`;
        } else {
            maAlertMessage("No lots in the current group", ["OK"]);
        }
    }

    self.showList = function (addPrintCommand) {
        var url = self.getCompareUrl();

        if (url != "") {
            if (addPrintCommand) {
                url += "&command=print";
            }

            location.href = url;
        }
        else {
            alert("Please Select Lots.")
        }
    }

    self.saveCurrentUrl = function () {
        var value = self.getStoredValue();
        var url = window.location.href;
        var key = self.getStorageKey();

        value.backToUrl = url;

        var valueStr = JSON.stringify(value);
        localStorage.setItem(key, valueStr);
    }

    self.getStoredValue = function () {
        var key = self.getStorageKey();
        var url = window.location.pathname;
        var value = localStorage.getItem(key)
        var defaultJson = '{ "items" : [] }';
        if (value == null) {
            value = defaultJson;
        }

        var valObject = JSON.parse(value);

        if (valObject.key != url) {
            valObject = JSON.parse(defaultJson);
        }

        valObject.key = url;

        return valObject;
    }

    self.save = function () {
        var items = self.getStoredValue().items;

        if (items.length > 0) {
            var login_reg_popup = $("div[id$='cpRegistrationBasicFormNoCaptchaWithClose']")

            if (login_reg_popup.length > 0) {
                login_reg_popup.click()
            }
            else {
                $("div[id$=cpEntityGroupsSelect]").click();
            }
        }
        else {
            alert("Please select lots.")
        }
    }

    self.ToggleDefault = function (a_obj, IDs) {
        if (typeof (IDs) == "undefined")
            var IDs = self.getStoredValue().items.join(",")

        var params = { 'ID': IDs };

        self.saveMsg();

        // mixpanel.track('Save Artwork', { "Artwork ID": IDs });


        var callBack = function (data, textStatus, jqXHR) {
            if (data && data.msg && data.msg.length) {
                maAlertMessage(data.msg, ['OK']);
                a_obj.style.display = "";
                return;
            }
            var msg = (data == null) ? "Added Successfuly!" : "<b style='color:red;' >Error!</b>";
            self.saveMsg(msg, 2.5);

            if (typeof (a_obj) != "undefined")
                if (!data.toggle) { $(a_obj).removeClass("btn-save-unfollow"); $(a_obj).addClass("btn-save-follow"); a_obj.innerHTML = "SAVE ARTWORK"; }
                else { $(a_obj).removeClass("btn-save-follow"); $(a_obj).addClass("btn-save-unfollow"); a_obj.innerHTML = "UNSAVE ARTWORK"; }

            a_obj.style.display = "";
        }

        a_obj.style.display = "none";

        var jqxhr = $.post(baseDomain + '/Ajax/Compare/AddToDefault', params, callBack);
    }

    self.ShowCompareButton = function (showButton) {
        var count = self.getStoredValue().items.length;

        // [OLD2]

        $(".artist-auction-bottom-bar #selected").html(count);

        if (count > 0) {
            $('.artist-auction-bottom-bar').show();
            $('.at-share-dock-outer').addClass('hidden');
        } else {
            $('.artist-auction-bottom-bar').hide();
            $('.at-share-dock-outer').removeClass('hidden');
        }

        if (count > 1) {
            $('#compare-no-active').hide();
            $('#compare').show();
        } else {
            $('#compare-no-active').show();
            $('#compare').hide();
        }

        //$(".compareTag_counter").html("COMPARE (" + count + ")");
        //$(compareTag)[showButton ? 'show' : 'hide']();
    }

    self.stopPropagation = function (e) {
        if (!e) var e = window.event;
        if (e) e.cancelBubble = true;
        if (e && e.stopPropagation) e.stopPropagation();
    }
}

var entitySelection = new EntitySelection();

/*  .----------.
    | OLD CODE |
    '----------' */

/* [OLD1]
self.save = function (newGroup) {
    self.saveMsg();

    var s = $.post(baseDomain + '/Ajax/Compare/GetUserGroupNames', newGroup, function (data, textStatus, jqXHR) {

        var groups = JSON.parse(data);

        var html = "";

        for (var i = 0; i < groups.length; i++) {
            html += "<label class='item' ><input type=checkbox class='ex_group_id' value='" + groups[i].Key + "' >" + groups[i].Value + "</label>"
        }

        var input = "<div>" +
                        "<div class='left' style='border: 1px solid;margin-left:5px;padding-right:5px;'>" +
                            "<input placeholder='New Group Name' type=text class='new_group_name' style='width:150px;border:0;margin:2px;' maxlength=70  >" +
                            "<span style='font-size:18px;' onclick='entitySelection.saveToNewGroup()' >&#43;</span>" +
                        "</div>" +
                    "</div>" +
                    "<div class='clear'></div>"

        html = "<div class='item_head' >" +
                    input +
                    "<div style='overflow: auto;max-height:120px;margin-top: 10px;'>" +
                    "<div style='text-align:left;' >Or Select Exists:</div>" +
                    html +
                    "<div class='add_to_group' onclick='entitySelection.AddToExistGroups()' >&#9733;</div>" +
                    "</div></div>";

        var comapre_div = $(".compare_button_warp")
     
        comapre_div.find(".groups_list").html(html)
        comapre_div.find(".step1buttons").hide()
        comapre_div.find(".step2buttons").show()
    });

}
*/

    // [OLD2]
    //if (compareTag == null) {
    //    compareTag = $("<div class='compare_button_warp" + ((!self.isComparePage()) ? "" : " compare_and_save") + "' >" +
    //                        "<div class='compare_button' onclick='entitySelection.showList()' >" +
    //                            "<div class='step1buttons'>" +
    //                                ((!self.isComparePage()) ? "" : "<span href='javascript:void(0);' style='padding:5px;color:white;padding-left: 12px;' onclick='entitySelection.stopPropagation(event);entitySelection.save();' >SAVE</span><span style='padding:0 10px 0 5px;color:#f2f2f0;' >|</span>") +
    //                                "<a href='javascript:void(0);' style='color:white;' class='compareTag_counter' ></a>" +
    //                                "<span href='javascript:void(0);' style='padding:5px;color:white;padding-left: 12px;' onclick='entitySelection.stopPropagation(event);entitySelection.clear();' >&#10006</span>" +
    //                            "</div>" +
    //                            "<div class='step2buttons' style='display:none;text-align:left;'>" +
    //                                "<a href='javascript:void(0);' style='color:white;' onclick='entitySelection.stopPropagation(event);entitySelection.saveMsg(\"\")' ><< BACK</a>" +
    //                            "</div>" +
    //                        "</div>" +
    //                        "<div class='groups_list' style='display:none;' onclick='entitySelection.stopPropagation(event);' ></div>" +
    //                   "</div>");

    //    $(elements[0]).append(compareTag);
    //}

    //_gaq.push(['_trackEvent', 'artwork_compare_show_button', location.pathname, count]);
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'
            });
        }
    }
};
$(document)
    .ready(function () {
        var campaignClosed = 4;
        var campaignOpen = 5;

        $(document).on("click", "div.campaign-close",
            function () {
                //debugger;
                var flightId = $(this).data('flightid');
                $('.campaign-row').toggle();


                writeToLogCampaign(flightId, campaignClosed);
            });

        $(document).on("click", "div.campaign-open",
            function () {
                //debugger;
                var flightId = $(this).data('flightid');
                var redirectUrl = $(this).data('url')

                writeToLogCampaign(flightId, campaignOpen, redirectUrl);
            });

        var ChangePremium = true, ChangeAlerts = true, ChangeVIP = true;
        if (typeof is_default_user !== undefined || !is_default_user) {
            $("[data-reg-hide]").each(function (index, element) {
                var $campaign = $(element);
                var dhide = $campaign.data("reg-hide");
                if (dhide != null) {
                    var campaign_filters = dhide.split(",");
                    for (var i = 0; i < campaign_filters.length; i++) {
                        var filter_components = campaign_filters[i].split('_');
                        var time = filter_components[0], subplan = filter_components[1], subtype = filter_components[2];
                        //if (subplan == 'ALL' && (curr_subscription_date / 1000) > parseInt(time)) {
                        //    $campaign.remove();
                        //}
                        if ((curr_subscription_date / 1000) > parseInt(time) && curr_plan_id == subplan && curr_sub_type == subtype) {
                            $campaign.remove();
                        }
                    }
                }
            });
        }
        
        var items = {}, prependlink = (unique_id ? "/upgrade/" : "/signup/");

        $('[data-price-identifier]').each(function () {
            items[$(this).data('price-identifier')] = true;
            if ($(this).css('display') != 'none' && $(this).css("visibility") != "hidden") {
                if (["campaignPAM", "campaignPAY"].indexOf($(this).data("price-identifier")) > -1) { //Personal Alerts
                    $('.alerts2 div.btn-block.plan-monthly > .btn, .alerts3 div.btn-block.plan-monthly > .btn').attr("data-link", prependlink + campaignPALink);
                } else if (["campaignPY", "campaignPM"].indexOf($(this).data("price-identifier")) > -1) { //Premium
                    $('.premium div.btn-block.plan-monthly > .btn').attr("data-link", prependlink + campaignPMLink);
                } else if ($(this).data("price-identifier") == 'campaignVIP') { //VIP
                    $('.vip div.btn-block.plan-monthly > .btn').attr("data-link", prependlink + campaignVIPLink);
                }
            }
        });
        var result = "";
        for (var i in items) {
            result += i + " ";
        }
        result = result.substring(0, result.length - 1);
        if (result) {
            $("body").addClass(result);
        };
        if ($(".wp-campaign-banner").length < 1) {
            $("body").addClass("hide-prices");
        }
        $(".wp-campaign-banner").fadeIn(250, function () {
            $(this).css({ "display": "block" });
            if ($(this).css("display") == "none") {
                $("body").addClass("hide-prices");
            }
            $("body").removeClass("mawordpress");
        });
    });

function writeToLogCampaign(flightId, statusType, url) {
    $.ajax({
        type: "POST",
        url: "/Ajax/Campaigns/WriteToPromotionFlightLog",
        data: {
            campaignType: statusType, //CloseBtn=4, Seen=4
            IdFlight: flightId
        },

        success: function (res) {
            if (res === "OK") {
                if (url) {
                    window.location = url;
                }
            }
        },
        error: function () {

        }
    });
};
function AjaxPaggingControl(data, scrollElement, wrapElement, isHybrid) {
    var ajaxQ = null;
    var wrapper = scrollElement && scrollElement.length ? scrollElement : window;
    var parent = wrapElement && wrapElement.length ? wrapElement : document;
    var processScroll = true
    var ajaxRequestCounter = 0;
    var thisObj = this;
    var pageKey = location.href.replace(/[^a-zA-Z0-9]+/g, '')
    var loadPages = 0;
    var scrollTo = 0;
    var btn_class = "";
    var links_for_next_prev_key = "links_for_next_prev";

    saveDataInStorage();

    //function getPageKey() {
    //    return location.href.replace(/[^a-zA-Z0-9]+/g, '');
    //}

    this.goToNextPage = function (frc) {
        $(".bottom_paging_tr").hide();
        thisObj.StartListingToScroll();

        var resElm = $(wrapper == window ? "body" : wrapper).find("#Paging" + data.NextPagingData.Page);
        resElm.html(MA.Defaults.Loader);

        ajaxRequestCounter++;
        data.NextPagingData.Page++;
        processScroll = false;

        saveDataInStorage();

        thisObj.loadNextPageGet(resElm, data.NextPagingData, frc);

        return false;
    }

    function saveLinksToStorageFromHtml(html) {
        return;
        var list_links = [];
        var temp = $.parseHTML(html);
        if (IsPage("my_preferences")) {
            if ($("#dashTabs").find(".dashboard-tab").first().hasClass("active")) {
                if (typeof sessionStorage[links_for_next_prev_key] !== "undefined") {
                    list_links = JSON.parse(sessionStorage[links_for_next_prev_key]);
                }
                //find artwork
                $.each($(temp).children(".v2__page").children(".row").children(".img-box").children("a"), function (key, value) {
                    if (value.href.indexOf('/Artwork/') >= 0) {
                        var o = { url: value.href };
                        list_links.push(o);
                    }
                });
            } else {
                list_links = [];
            }
        }

        sessionStorage[links_for_next_prev_key] = JSON.stringify(list_links);
    }


    function saveDataInStorage() {
        sessionStorage["paggingControl"] = JSON.stringify(data);
    }

    function isScrolledIntoView(el) {
        var rect = el.getBoundingClientRect();
        var elemTop = rect.top;
        var elemBottom = rect.bottom;

        // Only completely visible elements return true:
        var isVisible = (elemTop >= 0) && (elemBottom <= $(wrapper).height());
        // Partially visible elements return true:
        //isVisible = elemTop < window.innerHeight && elemBottom >= 0;
        return isVisible;
    }

    this.onScroll = function () {
        if (processScroll) {
            //var elmns = $("." + thisObj.btn_class);

            var parentHeight = $(parent).height();
            var threshold = parentHeight - (0.6 * parentHeight);
            //if (isScrolledIntoView(elmns[elmns.length-1])) {
            if ($(wrapper).scrollTop() > parentHeight - $(wrapper).height() - threshold) {
                //processScroll = false;

                if (isHybrid && ((data.NextPagingData.Page + 1 ) % 3) === 0) {
                    thisObj.StopListingToScroll();
                }
                else {
                    thisObj.goToNextPage()
                }
            }
        }
    }

    this.saveScrollAndPositionEvent = function () {
        var scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;

        var data1 = {
            'top': scrollTop,
            'page': data.NextPagingData.Page// - 1
        };
        //console.log(data1);
        sessionStorage.setItem(pageKey, JSON.stringify(data1));
    }

    this.clearScrollAndPosition = function () {
        sessionStorage.removeItem(pageKey);
    }

    this.SaveScrollAndPosition = function () {
        $(window).on("unload", this.saveScrollAndPositionEvent);

        var data1 = sessionStorage.getItem(pageKey)
        if (data1) {
            var obj = JSON.parse(data1);

            loadPages = (obj.page - data.NextPagingData.Page);
            scrollTo = obj.top;

            if (loadPages > 0) {
                thisObj.goToNextPage(true);
                loadPages--;
            }
        }
    }

    this.StartListingToScroll = function (btn_class) {
        thisObj.btn_class = btn_class;
        $(wrapper).on("scroll", this.onScroll);
    }

    this.StopListingToScroll = function () {
        $(wrapper).off("scroll", this.onScroll);
    }


    this.loadNextPageGet = function (resElm, postPagingData, force) {
        if (data.NextPagingData.Page < data.Pages && (!ajaxQ || force)) {
            var sendFunc = ((postPagingData.a || "").length > 1500) ? $.post : $.get;
            //To show registration pop-up for unregistered user.
            if (postPagingData.Page > '7') {
                if (showRegistrationPopup(postPagingData.Page, 7)) {
                    return;
                }
            }
            //here pass page name because i am not able to get page Name api side in AjaxLoader controller
            postPagingData.pageName = page_name; //used global varible
            ajaxQ = sendFunc('/Ajax/AjaxLoader/Paging/?' + data.QueryString, postPagingData)
                .done(function (html, textStatus, jqXHR) {
                    ajaxQ = null;
                    //var islastPage = (ajaxRequestCounter > data.MaxPaggingInAjax);
                    //if (islastPage) {
                    //    html += "<div class='ajaxLastPage' onclick=\"location.href='" + data.AjaxPagingLastPageHref + "'\">Load More</div>"
                    //}
                    //debugger;\console.log()
                    //if (resElm.hasClass("grid-page")) {
                    resElm.parent().append(html);
                    resElm.remove();
                    EmitEvent('OnAjaxLoad', { target: resElm.parent() });
                    //} else {
                    //    EmitEvent('OnAjaxLoad', { target: resElm });
                    //    resElm.html(html);
                    //}


                    saveLinksToStorageFromHtml(html, data.QueryString, postPagingData);

                    //InitPopup(resElm.attr('id'));
                    if (typeof (data.AjaxArrangeElementsJsFunc) == 'function') {
                        data.AjaxArrangeElementsJsFunc(resElm);
                    }
                    else if (data.AjaxArrangeElementsJsFunc && typeof (window[data.AjaxArrangeElementsJsFunc]) != "undefined") {
                        window[data.AjaxArrangeElementsJsFunc](resElm);
                    }

                    processScroll = true;//!islastPage;
                    if (window.performance) {
                        if (performance.navigation.type != 1) {
                            GTM_Send('event', 'navigation', 'pagging', page_name + '_' + ajaxRequestCounter);
                        }
                    }

                    //MAPF-6726
                    GTM_Send("event", "Page Load", page_name, page_name + '_' + ajaxRequestCounter);

                    //console.log("loadPages - - - " + loadPages)

                    if (loadPages > 0) {
                        thisObj.goToNextPage(true)
                        loadPages--;
                    }
                    else if (scrollTo && typeof (wrapper.scrollTo) === "function") {
                        wrapper.scrollTo(0, scrollTo)
                        scrollTo = 0;
                    }
                })
                .fail(function (jqXHR, textStatus, errorThrown) {
                    ajaxQ = null;
                    if (!isLoggedIn() && jqXHR.status === 429) {
                        resElm.remove();
                        $("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>'
                        );
                        $(".cta.hidden_signup").click();
                        setPaywall();
                    }
                });

        }
    }

    this.onError = function () {
        $(".bottom_paging_tr").show();
        _gaq.push(['_trackEvent', 'ajax_pagging_error', data.AbsolutePath, data.NextPagingData.FirstPage])
    }

    function compareByHigh(a, b) {
        return a.height() >= b.height();
    }

    var firstColElms = [];
    this.ArrangeHorizontalCols = function (container) {
        var i = 0
        var elm;

        if (firstColElms.length == 0) {
            while ((elm = $("#col" + i, container)).length > 0) {
                firstColElms[i] = $($("#col" + i + ":first")[0]);
                i++;
            }
        }

        var contCols = [];
        for (var i = 0; i < firstColElms.length; i++) {
            contCols[i] = $("#col" + i, container);
        }

        var rootCols = firstColElms//.sort(compareByHigh);
        var contCols = contCols//.sort(compareByHigh);

        for (var i = 0; i < firstColElms.length; i++) {
            contCols[firstColElms.length - i - 1].appendTo(rootCols[i]);
        }
    }
};
function showChart(options) {
    var opts = options;
    const elem = document.getElementById(opts.id);
    const graphWrapper = $(elem).closest('.graph-wrapper');
    const graphTitle = graphWrapper.prevAll(".section-title");
    const classTooltipSlider = `${opts.id}-slide-center`;
    const chartLegendId = opts.id + '-legend-container';
    let legendItemClickHandler = function () { };
    let exportFileName;
    const isArtworkOverviewPage = IsPage("artwork");

    if (!opts.skipSeries)
        for (var i = 0; i < opts.series.length; i++) {
            opts.series[i].data = [];

            opts.series[i].marker = { enabled: false };

            if (!opts.series[i].marker)
                opts.series[i].marker = { symbol: 'circle', radius: 1 };

            if (!opts.series[i].shadow)
                opts.series[i].shadow = false;
        }

    if (isMobile())
        opts.series.forEach(function (s) {
                if (s.states && s.states.hover) {
                    s.states.select = s.states.hover;
                    delete s.states.hover;
                }
        });

    if (!opts.params)
        opts.params = {};

    opts.params.encIdArtist = $("#artistIdHid").val();
    opts.params.bm = $("#bmIdHid").val();

    if (!opts.formatter)
        if (labelCurrencyFormatter)
            if (opts.isPercentage)
                 opts.formatter = percentFormatter;
            else opts.formatter = labelCurrencyFormatter;

    if (!opts.axisCurrencyFormatter)
        if (opts.isPercentage)
                 opts.axisCurrencyFormatter = opts.formatter;
            else opts.axisCurrencyFormatter = axisCurrencyFormatter;

    yAxis_obj = {
        labels: { formatter: opts.axisCurrencyFormatter },
        title:  { text: "" },
        reversedStacks: false,
        min: 0        
    };

    if (options.yAxis && !options.yAxis.labels)  
        options.yAxis.labels = yAxis_obj.labels;    
    
    var hc_object = {
        chart: {
            renderTo:            opts.id,
            defaultSeriesType:   opts.type,
            backgroundColor:     "#ffffff",
            plotBackgroundColor: "#ffffff",
            events: {
                load: initArtistSaleBreakdown, render: function () { /*alert(234234)*/}
            }          
            },
        legend: { enabled: isArtworkOverviewPage },
        title: { text: '' },
        subtitle: { text: '' },
        xAxis: [{ categories: [] }],
        yAxis: options.yAxis || yAxis_obj,

        tooltip: {
            enabled: isArtworkOverviewPage || !isMobile(),
            shared: !isArtworkOverviewPage,
            formatter: isArtworkOverviewPage ? opts.tooltipFormatter : tooltipFormatter
        },
        exporting: { enabled: true },
        plotOptions: {
            column: {
                enabled: false,
                stacking: 'normal',
                enableMouseTracking: true
            },
            line: {
                dataLabels: { formatter: opts.formatter, enabled: false },
                enableMouseTracking: true
            }
        },
        series: opts.series,
        credits: { enabled: false }
    };

    if (isMobile()) {
        hc_object.plotOptions.column.events = {
            click: function (pointerEvent) {
                const categoryIndex = this.data.findIndex(x => x.category == pointerEvent.point.category);
                if (categoryIndex != -1) {
                    $(`.${classTooltipSlider}`).slick('slickGoTo', categoryIndex);
                }
            }
        }
    }
    if (!isArtworkOverviewPage) hc_object.chart.height = isMobile() ? opts.chartHeight : "auto"
    else hc_object.exporting = { enabled: false }

    if (options.tooltip) hc_object.tooltip = { ...hc_object.tooltip, ...options.tooltip }
    if (graphTitle.length > 0 && !isArtworkOverviewPage) {
        const artistNameTag = IsPage("artist_graphs") ? $(".artist-header-bar .name") : $(".artist-name")
        const artistName = artistNameTag.text().trim();
        const yAxisHeader = `<div style="display:flex;justify-content: space-between;padding: 0 10px;width:108%">
                                ${options.yAxis ? options.yAxis.map((item) =>`<div style="text-align:right">${item.titleText}</div>`).join("") : ''}
                            </div>`
        hc_object.exporting = {
            enabled: true,
            allowHTML: true,
            chartOptions: {
                chart: {
                    events: {
                        load: function () {
                            this.hideLoading();
                            this.xAxis[0].update({ labels: { useHTML: false, y: 10 } });
                        },
                        render: function () {
                            // Add the watermark
                            setMAWatermark(this);
                        }
                    },
                    height: "auto"
                },
                legend: { enabled: true },
                title: {
                    align: 'left',
                    style: {
                        fontSize: '18px',
                        fontFamily: 'Lato, Baskerville, Georgia, serif'
                    },
                    text: `${artistName && artistName.length > 0 ? `${artistName} | ` : ""}${options.chartName}`
                },
                subtitle: { text: yAxisHeader },
                yAxis: options.yAxis ? options.yAxis.map(x => ({ ...x, title: { text: "" } })) : []
            }
        }
        exportFileName = `${artistName && artistName.length > 0 ? `${artistName} | ` : ""}${options.chartName}`
    }

    if (opts.plotOptions)
        hc_object.plotOptions = {
            ...opts.plotOptions,
            column: { ...hc_object.plotOptions.column, ...opts.plotOptions.column }
        };
    if (opts.title)
        hc_object.title = opts.title;
    if (opts.subtitle)
        hc_object.subtitle = opts.subtitle;
    if (hc_object.plotOptions && opts.dataLabels) {
        if (!hc_object.plotOptions.series) {
            hc_object.plotOptions.series = {};
        } 
        hc_object.plotOptions.series.dataLabels = { "enabled": opts.dataLabels };
        if (opts.format) {
            hc_object.plotOptions.series.dataLabels.format = opts.format;
        }
    }
    if (hc_object.plotOptions && opts.marker) {
        //if (typeof (hc_object.plotOptions.series) == "undefined") {
        //    hc_object.plotOptions.series = {};
        //}
        
        //hc_object.plotOptions.line.dataLabels.enabled =  opts.marker;
        //if (typeof (hc_object.plotOptions.series.marker) == "undefined") {
        //    hc_object.plotOptions.series.marker = {};
        //}
        //hc_object.plotOptions.series.marker.enabled = opts.marker;
        //hc_object.plotOptions.series.marker = { "enabled": opts.marker };

        //hc_object.plotOptions.line.dataLabels.radius = opts.markerRadius;
    }
    //if ((typeof (hc_object.plotOptions) != "undefined") && (typeof (opts.markerRadius) != "undefined")) {
    //    if (typeof (hc_object.plotOptions.series) == "undefined") {
    //        hc_object.plotOptions.series = {};
    //    }
    //    hc_object.plotOptions.series.marker = { "radius": opts.markerRadius };
    //}



    //    if( opts.method == "ArtistPerformanceMed")
//        console.log(opts.method, hc_object.yAxis.labels);
    //var number_of_graph_with_data = 0;
    //for (var i = 0; i < hc_object.series.length; i++) {
    //    if (hc_object.series[i].data.length > 0) {
    //        number_of_graph_with_data++;
    //    }
    //}
    //if (false) {
    //    if (number_of_graph_with_data > 1) {
    //        new Highcharts.Chart(hc_object);
    //    }
    //} else {
    new Highcharts.Chart(hc_object);
    //}


    function initArtistSaleBreakdown(ev) {
        var chartContainer = $(ev.target.container);
        chartContainer.data('chart', ev.target);
        if (!opts.skipAjax) {
            //            SetChartData(opts.data, chartContainer);
            //        } else {
            GetChartData(chartContainer);
        } else {
            var chartObj = chartContainer.data('chart');
            chartObj.redraw();
        }
        if (typeof opts.afterLoad === "function") {
            opts.afterLoad(ev);
        }
    }

    function GetChartData(chartContainer) {
        var chartObj = chartContainer.data('chart');
        chartObj.showLoading("Loading...");
        $.post('/Ajax/Charts/' + opts.method+window.location.search, opts.params,
            function (result, status, request) {
                SetChartData(result, chartContainer);
            }
        );
    }

    function SetChartData(result, chartContainer) {
        if (result) {
            try {
                if (options.loadCallback) {
                    options.loadCallback(result);
                }
                chartContainer.data('result', result);
                refreshBDGraph(chartContainer);
            } catch (ex) { }
        }
    }

    function formatResultString(result, format) {
        var titleR = format;
        var patt1 = /\{(.+?)\}/gi;
        var match = patt1.exec(format);
        while (match != null) {
            titleR = titleR.replace(match[0], eval("result." + match[1]));
            match = patt1.exec(format);
        }
        return titleR;
    }

    function refreshBDGraph(cont) {
        var result = cont.data('result');
        var chartObj = cont.data('chart');
        chartObj.hideLoading();

        var title = formatResultString(result, result.TitleFormat);
        var subTitle = formatResultString(result, result.SubTitleFormat);

        chartObj.xAxis[0].setCategories(result[opts.get_categories], false);

        for (var i = 0; i < opts.series.length; i++)
            chartObj.series[i].setData(result[opts.series[i].get], true);

        if (opts.isPercentage || (result.IsEmptyChart && result.IsEmptyChart))
            chartObj.yAxis[0].setExtremes(0, 100, true);

        if (isArtworkOverviewPage) {
            setMAWatermark(chartObj);
            return;
        }
        // Format the subtitle with grouped series data
        let tooltipSlider = '';
        if (isMobile()) {
            let mobileToolitip = '';
            result[opts.get_categories].forEach(function (category, index) {
                mobileToolitip += '<div class="slick-slide" style="display:block;">';
                mobileToolitip += '<b class="slick-header">' + category + '</b>';
                mobileToolitip += '<div class="slick-label-container">';

                opts.series.forEach(function (seriesOptions) {
                    var seriesData = result[seriesOptions.get][index];
                    var formattedSeriesData = options.id === "graph-sale-beakdown" ? `${(seriesData + 0).toFixed(2)} %` : ( seriesOptions.name.toLowerCase().split('lots').length == 1 ? '$' + addNumberCommas(Math.round(seriesData * 100) / 100) : seriesData);

                    mobileToolitip += `<label class="slick-label ${seriesOptions.visible != false ? '' : 'disabled'}"> ` +
                        `<div style='display:flex;align-items: baseline;'>
                                <div style="min-width: 12px;width: 12px;height: 12px;background: ${seriesOptions.color};border-radius: 2px;margin-top: 2px;"></div>
                                <div style="margin-left:10px;"><span class='slick-label-name'>${seriesOptions.name}</span><span class='slick-label-value'>: ${formattedSeriesData}</span></div>
                            </div></label>`;
                });
                    
                mobileToolitip += '</div></div>';
            });
            tooltipSlider = `<div class="${classTooltipSlider}">${mobileToolitip}</div>`;

            chartObj.series.forEach(function (series) {
                if (series.type !== 'column') series.update({ enableMouseTracking: false });
            });

        }

        const legendItems = chartObj.legend.getAllItems()
            .map((x, index) => {
                const isDefaultVisible = opts.series[index].visible
                var item = '<div class="legend-container" data-series-index="' + index + '"><label class="legend-label color-neutral-800">' + (opts.series[index].labelForLegend ? opts.series[index].labelForLegend : x.name)
                    + `<span class="checkmark ` +  (isDefaultVisible != false ? "checked" : "") + `" style="background-color:` + (isDefaultVisible != false ? x.color : "#8D8F9A") + '"></span></label></div>';
                return `<div class="highcharts-legend-item">` + item +`</div>`;
            }).join('');

        const legend = `<div id="${chartLegendId}" class="highcharts-legend">${legendItems}</div>`;

        const chartControls = `<div class="chart-controls"> ${(opts.preChartControls ? opts.preChartControls : '')}
                                    <div class="export" data-toggle="export"><a class="link-secondary link-md">Export PDF</a><i class="m-icon-Pdf-document"></i></div>
                               </div>`;
        const yAxisHeader = `<div style="display:flex;justify-content: space-between;padding: 0 10px;">`
                                    + (options.yAxis ? options.yAxis.map((item) => `<div class="color-neutral-800">${item.titleText}</div>`).join("") : '')
                                    + `</div>`
        const chartHeader = `<div class="performance-chart-header">${legend} ${tooltipSlider} ${chartControls} ${yAxisHeader}</div>`;

        const setSeriesState = () => {
            opts.series.forEach((item, itemIndex) => {
                chartObj.series[itemIndex].update({ state: item.state })
            })
        }

        legendItemClickHandler = function (event) {
            var index = event.target.dataset.seriesIndex;
            var legendItem = chartObj.legend.getAllItems()[index];
            $(event.target).find(".checkmark").css("background-color", !legendItem.visible ? legendItem.color : "#8D8F9A");
            const currentVisibleState = legendItem.visible
            $(event.target).find(".checkmark").toggleClass('checked', !currentVisibleState);
            legendItem.setVisible(!currentVisibleState);

            mixpanel.track("Click on performance chart parameter", {
                "Parameter state": currentVisibleState ? "Off" : "On",
                "Chart name": options.chartName
            });
            
            $.each($(`.${classTooltipSlider} .slick-track .slick-slide`), (x, y) => {
                const slickLable = $($(y).find('.slick-label')[index]);
                slickLable.toggleClass('disabled', currentVisibleState);
            });

            const currentSlide = $(`.${classTooltipSlider} .slick-current`).attr("data-slick-index")
            $(`.${classTooltipSlider}`).slick('slickGoTo', +currentSlide);

            setSeriesState();
        }

        setTimeout(() => {
            $('#' + chartLegendId).on("click", ".legend-container", legendItemClickHandler)
            setSeriesState();
            setMAWatermark(chartObj);
        });

        chartObj.setTitle(null, { text: chartHeader, useHTML: true }, 5000);

        const dataCount = result[opts.get_categories].length;
        if (chartObj.renderer && chartObj.series.length) {
            applySlickSlider(dataCount, chartObj);
        } else {
            chartObj.addEvent('load', () => applySlickSlider(dataCount, chartObj));
        }
    }

    //Export chart
    if (graphWrapper.length > 0) {
        const chart = Highcharts.charts.filter(x => x).find(c => c.renderTo.id == opts.id);
        graphWrapper.unbind('click');
        graphWrapper.on("click", "[data-toggle=export]", () => onExportChart(chart, exportFileName));
    }

    function applySlickSlider(dataCount, chartObj) {
        $(`.${classTooltipSlider}`).slick({
            infinite: false,
            slidesToShow: 1,
            slidesToScroll: 1,
            centerMode: true,
            centerPadding: '60px',
            variableWidth: true,
            mobileFirst: true,
            nav: true,
            initialSlide: dataCount - 1,
            adjustLastSlide: true
        }).on('afterChange', function (event, slick, currentSlide) {
            chartObj.series.filter(x => x.type !== 'spline').forEach((series) => series.data.forEach((point, i) => { point.select(i == currentSlide, true) }));
        });
    }

    function tooltipFormatter() {
        var text = '<span class="tooltip-title">' + this.x + '</span><div class="tooltip-item-container">';
        this.points.forEach(function (point) {
            let tooltipItemValue;
            if (options.isPercentage) {
                tooltipItemValue = `${(point.y + 0).toFixed(2)}%`;
            }
            else if (point.series.name.toLowerCase().split("lots").length == 1) {
                tooltipItemValue = '$' + addNumberCommas(Math.round(point.y * 100) / 100);
            }
            else {
                tooltipItemValue = point.y;
            }

            text += `
                        <div class="tooltip-item">
                            <div class="color-box" style="background: ${point.color};"></div>
                            <div class="item-text">${point.series.name}: ${tooltipItemValue}</div>
                        </div>
                    `;
        });
        return text + '</div>';
    }

    function setMAWatermark(chartObj) {
        if (!opts.notRequiredDafaultLogo) {
            chartObj.renderer.image('https://static.mutualart.com/img/MA_logo_square.svg',
                chartObj.plotWidth / 2 - 75 + chartObj.plotLeft + 10, chartObj.plotHeight / 2 - 38 + chartObj.plotTop - 10, 160, 80)
                .attr({
                    opacity: '0.1',
                    zIndex: '10'
                })
                .add();
        }
    }
}

function addPreChartControl () {
    var ChartControlbtnViewArtwork = `<div id="view-artwork-btn-link" onclick="navigateUrl('../AuctionResults', true)"Median Artwork Prices class="view-artwork"><a class="link-secondary link-md">View Artworks</a><i class="m-icon-List-View"></i></div>`;
    return ChartControlbtnViewArtwork
}

function percentFormatter() {
    return this.value + " %"
}

axisCurrencyFormatter = function () {
    
    var val = "";
         if (this.value == 0         ) val = "0"
    else if (this.value >= 1000000000) val = "$"+ (Math.floor(this.value / 100000000)/10) + "b"
    else if (this.value >= 1000000   ) val = "$"+ (Math.floor(this.value / 100000   )/10) + "m"
    else if (this.value >= 1000      ) val = "$"+ (Math.floor(this.value / 100      )/10) + "k"
    else                               val = "$"+ this.value;


    return val;
    //return "$" + addNumberCommas(Math.round((this.value || this.value == 0 ? this.value : this.y) * 100) / 100);
};

labelCurrencyFormatter = function () {
    return "$" + addNumberCommas(Math.round((this.value || this.value == 0 ? this.value : this.y) * 100) / 100);
};

function addNumberCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

function onExportChart(chart, fileName) {
    if (!IsPage("artwork_performance") && manager) {
        mixpanel.track("Export Chart PDF", {
            Filters: manager.getFilterText()
        });
    }
    chart.exportChart({
        type: 'application/pdf',
        filename: fileName ? fileName : 'Artist Performance'
    });
};
$(function () {
    var PlansPage = 'plans';
    var LoginPage = 'login';
    var SignUpPage = 'signup';

    function PlansPageBackTo() {
        var backTo = getParameterByName("u");

        if (backTo && backTo.substr(0, 1) == "/")
            PlanSetFreePopup();

        if (backTo) {
            RemovePageParameterFromURL("u");
            localStorage.setItem("backtoafterpayment", backTo);
        }
    }

    if (IsPage(PlansPage, 'discover')) {
        $("span[data-sub]").on('click', function () { PlansPageSignup($(this)[0]) });
        $(".learn-more").on('click', function () { goToByScroll('learn') })

        PlansPageBackTo();
        // fixBoxesSizes(".plans-more ul");
        fixBoxesSizes(".plans-faq > div.col-sm-4");
    }

    if (IsPage(PlansPage, 'discover'))
        selectMonthlyPlan();

    function selectMonthlyPlan() {
        var isMonthly = (window.location.search.getValueByKey("period") == "monthly");

        if (isMonthly)
            setTimeout(function () { $("input[name='payment'][value='monthly']").click(); });
    }

    function fixBoxesSizes(selector) {
        fixHeights(selector)
        $(window).on('resize', function () {
            fixHeights(selector)
        });
    }

    function PlanSetFreePopup() {
        var selector = ".plan-free .btn";

        //if (window.location.hash == "#np")
        //    return CleanHash();

        if ($(selector).length == 0)
            return;

        $(selector).click(function (e) {
            $("#FreeMessage").modal();
            $("body").append($("#FreeMessage"));
            e.preventDefault();
        });
    }

    function fixHeights(selector) {
        var ul = $(selector);

        var maxHeight = 0;

        for (var i = 0; i < ul.length; i++) {
            ul[i].style.height = "";
            if (ul[i].offsetHeight > maxHeight)
                maxHeight = ul[i].offsetHeight;
        }

        for (var i = 0; i < ul.length; i++) {
            ul[i].style.height = "";

            if (document.body.scrollWidth <= 770)
                continue;

            if (ul[i].offsetHeight < maxHeight)
                ul[i].style.height = maxHeight + "px";
        }
    }
});

function PlansPageSignup(a_obj) {
    window.location = $(a_obj).data("link");
}

function sendMailToSupport() {
    if ($("#_multipleSubsContactForm").valid()) {

        //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;
            }
        }

        var data = $("#_multipleSubsContactForm").serialize();
        $("#_multipleSubsContactForm .btnMulPremSubmit").prop('disabled', true);
        $("#multiplePremiumSubsContact_dialog .request-loader").removeClass('hidden');

        $.ajax({
            type: "POST",
            url: "/Ajax/Contact/SendMultipleAccountRequest",
            data: data,
            success: function (res) {
                if (res === "OK") {
                    $('#multiplePremiumSubsContact_dialog').modal('hide');
                    $('#multiPremiumSubsMailSent').click();
                } else {
                    mixpanel.track("Error - Request for multiple subscriptions");
                    $(".form-messages").html("<div class='text-center' style='color:red'>" + res + "</div>");
                }
                $("#multiplePremiumSubsContact_dialog .request-loader").addClass('hidden');
                $("#_multipleSubsContactForm .btnMulPremSubmit").prop('disabled', false);
            },
            error: function () {
                mixpanel.track("Error - Request for multiple subscriptions");
                $("#_multipleSubsContactForm .btnMulPremSubmit").prop('disabled', false);
                $("#multiplePremiumSubsContact_dialog .request-loader").addClass('hidden');
                $(".form-messages").html("<div class='text-center' style='color:red'>Error in sending. Please try again later.</div>");
            }
        });
    }
}

$(document).ready(function () {
    if (typeof discountTable !== 'undefined') {
        var minSubs = Math.min.apply(Math, discountTable.map(function (o) { return o.NoOfAccounts; }));
        var maxSubs = Math.max.apply(Math, discountTable.map(function (o) { return o.NoOfAccounts; }));

        $('#multiple-premium-subs .subs-selector .m-icon-minus, .m-icon-plus').on("click", function (event) {
            var curValue = parseInt($(event.target).siblings('span.no-of-subscriptions').text());

            if ($(event.target).hasClass('m-icon-minus')) {
                curValue = curValue === minSubs ? minSubs : curValue - 1;
                setDiscountedPrice(curValue, event.target, discountTable);
            }
            else if ($(event.target).hasClass('m-icon-plus')) {
                curValue = curValue === maxSubs ? maxSubs : curValue + 1;
                setDiscountedPrice(curValue, event.target, discountTable);
            }

            function setDiscountedPrice(subsCount, targetEle, discountTable) {
                var applicableDis = discountTable.find(item => item.NoOfAccounts === subsCount);

                if (applicableDis) {
                    var targetParents = $(targetEle).parents();
                    $(targetEle).siblings('span.no-of-subscriptions').text(curValue);
                    var rateDetails = targetParents.find('.discounted-rate .rate-details');
                    rateDetails.find('#dis-percent').text(applicableDis.DiscountPercentageText);
                    targetParents.find('#multiple-final-price').text(applicableDis.DiscountedAmountText);
                    rateDetails.find('#multiplePremiumSubsContact').data('query', applicableDis.NoOfAccounts);
                    rateDetails.find('#multiplePremiumSubsContact').attr('data-query', applicableDis.NoOfAccounts);
                }
            }
        });
    }
});

typeof (handleEssentials) == "function" && handleEssentials();;
var isDisableClick = false;
var artistDetail;
var filteredArtistDetail;
var artistPageNumber = 0;
var userSelectedAlertjson = {};
let isChanged = false;    
var allArtistSelectedValues = [];
var selectedAuctionVenue = [];
var initAuctionVenue = [];
var isAuctionChanged = false;
//$(document).ajaxComplete(function (event, xhr, settings) {
//    if (getDataByName("curentMethod", settings.data) == "GetPreferencedArtistsPage") {
//        initAddRemoveBroadmedia();
//        initAdustPriceRangeBtn();
//        initSavePriceRangeBtn();
//        initUnfollowBtn();

//        if (typeof (top.scrollToArtist) != "undefined") {

//            var target = $("a[data-aritst='" + scrollToArtist + "']")
//            $('html, body').animate({
//                scrollTop: target.parent().parent().offset().top - 250
//            }, 1000);


//            delete (top.scrollToArtist);


//        }
//    }
//});

//function initArtisTab() {


//    if (typeof (top.scrollToArtist) != "undefined") {

//        var target = $("a[data-aritst='" + scrollToArtist + "']")
//        $('html, body').animate({
//            scrollTop: target.parent().parent().offset().top - 250
//        }, 1000);


//        delete (top.scrollToArtist);


//    }
//}

function initAdustPriceRangeBtn() {
    $(document).on('click', '.adjust-price-range', function () {
        // $(".adjust-price-range").on("click", function () {

        var element = $(this);
        var pricelable = element.closest("div").find('.lots-range-readonly');
        element.closest("div").find(".lots-range-rewrite").css('display', 'inline-block');
        pricelable.hide();
        element.hide();

    });
}

function initArtistSearchBar() {
    var proxy = autocompleteAPIProxy();
    $("#artistsDashboardSearch").autocomplete({
        autoFocus: true,
        delay: 600,
        source: function (request, response) {
            //$.ajax({
            //    method: 'POST',
            //    url: '/ajax/AutoComplete/GetArtists',
            //    dataType: "json",
            //    data: {
            //        limit: 8,
            //        q: request.term
            //    },
            //    success: function (data) {
            //        response(data);
            //    }
            //});
            proxy.getArtists(request.term, function (status, data) {
                if (status == 'OK')
                    response(data)
            });
        },
        select: function (event, ui) {
            isDisableClick = true;
            event.preventDefault();
            var value = $('#artistsDashboardSearch').val().trim();
            $(this).val(ui.item.name);
            var artisturl = ui.item.url.split('/');
            var artistId = artisturl[3];
            addToFollowedArtists(artistId);
        },
    }).data("ui-autocomplete")._renderItem = function (ul, item) {
        var artisturl = item.url.split('/');
        var artistId = artisturl[3];

        return $("<li></li>")
            .data("item.autocomplete", item)
            .append("<span class='artist-search-follow' > " + item.name + "</span> <span class='artist-search-follow-btn'><img src='/img/Dashboard/Plus_Circle.svg'/><span class='follow-text'>FOLLOW<span></span>")
            .appendTo(ul);
    };

    $('#artistDashboardSearchForm').submit(function () {
        return false;
    });
}

function addToFollowedArtists(artistUrl) {

    var artist = artistUrl
    var url = "/Ajax/Follow/CheckFollowReachLimit";
    $.post(url)
        .done(function (data) {

            if (data.ReachLimit) {
                GTM_Send('event', 'View reaches follow limitation popup', null, null);
                upgradeToFollowMorePopup(data.Message);
            }
            else {

                addToFollowedArtistsFunc(artist);
            }


        })
        .fail(function () {


        });



}
function addToFollowedArtistsFunc(artistUrl) {
    var url = "/Ajax/Artist/SetDashboardPersonPreferences";
    $.post(url, jQuery.param({ idperson: artistUrl }))
        .done(function (data) {

            if (data.OK) {


                ajaxLoadPage(null, $(".DashboardArtistsAjax"), artistUrl, false);
                $('#artistsDashboardSearch').val('');

            } else {


            }

        })
        .fail(function () {

        });

}
function ArtistsDashboardSearch(url, value, action) {
    // GTM_Send('event', 'search', 'artist-dashboard-search' + action, value, function () { document.location.href = url; });
}

function initSavePriceRangeBtn() {
    $(document).on('click', '.save-prices-btn', function () {
        //$(".save-prices-btn").on("click", function () {

        var element = $(this);
        var idartist = $(this).data("aritst");
        var to = $(this).parent().find("#lotPriceRangeTo").val();
        var from = $(this).parent().find("#lotPriceRangeFrom").val();

        if (isNormalInteger(from) && isNormalInteger(to)) {
            if (parseInt(to) < parseInt(from)) {
                maAlertMessage("Oops! Please ensure your price range includes a minimum and maximum value, e.g. 0-250. Don't want to search by price? Leave this field blank to see all lots.", ["OK"], function () { });
                return;
            }

        }
        else if (from != "" && to != "") {
            maAlertMessage("Oops! Please ensure your price range includes a minimum and maximum value, e.g. 0-250. Don't want to search by price? Leave this field blank to see all lots.", ["OK"], function () { });
            return;
        }


        var url = "/Ajax/My_Preferences/ChangeUserFollowedArtistLotPricesRange";
        $.post(url, jQuery.param({ artistid: idartist, fromPrice: from, toPrice: to }))
            .done(function (data) {

                if (data.IsSuccess) {
                    var pricesHtml;
                    if (from == "" && to == "") {

                        pricesHtml = "All"
                    }
                    else {

                        pricesHtml = (from == "" ? "0" : parseInt(from).toLocaleString('en')) + " - " + (to == "" ? "max" : parseInt(to).toLocaleString('en'));
                    }

                    element.parent().parent().find(".lots-range-readonly span:first-child").html(pricesHtml);
                    $(".lots-range-readonly").show().children().show();
                    $(".lots-range-rewrite").hide();


                } else {


                }


            })
            .fail(function () {

            });



    });
}

function initAddRemoveBroadmedia() {

    //  $(".add-remove-media-btn").on("click", function () {
    $(document).on('click', '.add-remove-media-btn-div:not(.disabled)', function () {

        var idartist = $(this).data("aritst");
        var idbroadmediaId = $(this).data("broadmedia");
        var element = $(this);



        var url = "/Ajax/My_Preferences/AddRemoveUserFollowedArtistBroadmedia";
        $.post(url, jQuery.param({ artistid: idartist, broadmediaId: idbroadmediaId }))
            .done(function (data) {

                if (data.IsSuccess) {

                    if (data.AddRemove == "add") {

                        element.closest(".media-box").addClass("media-box-selected");
                    }
                    else {

                        element.closest(".media-box").removeClass("media-box-selected");
                    }

                } else {


                }


            })
            .fail(function () {

            });
    });
}

function AddRemoveArtistAlertType(idartist, idalertType) {

    var element = $(this);

    var url = "/Ajax/My_Preferences/AddRemoveUserFollowedArtistAlertType";
    $.post(url, jQuery.param({ artistid: idartist, alertTypeId: idalertType }))
        .done(function (data) {

            if (data.IsSuccess) {



            }
            else {

                if (data.AddRemove == "add") {

                    element.prop('checked', false);
                }
                else {

                    element.prop('checked', true);
                }

            }


        })
        .fail(function () {

        });
}

function initUnfollowBtn() {

    $(document).on('click', '.unfollow', function (e) {
        var idartist = $(this).data("aritst");
        var aritstName = $(this).data("artistname");
        var position = $(this).position();
        var $parentElm = $(this).parents('.dashboard-item-container');

        if (mixpanel) {
            //this event used when user is on followed artist page. here i also remove Page Name and Identifier because some common property i have remove here.they already register in mixpanel.js bindLinksOnDoc methods
            mixpanel.track("Click To Unfollow An Artist", {
                "Artist Followed": aritstName
            });
        }

        confirmUnFollowPopup(aritstName, function () {
            var url = "/Ajax/My_Preferences/RemoveUserFollowedArtist";
            $.post(url, jQuery.param({ artistid: idartist }))
                .done(function (data) {

                    if (data.IsSuccess) {
                        $('.cancel-popup').modal('hide');
                        $parentElm.remove();
                        var elemCount = $('.followedArtistTab').find('i');
                        var number = parseInt($('.followedArtistTab').find('i').text().slice(1, -1)) - 1;;
                        $('.followedArtistTab').find('i').text('(' + number + ')');

                        if (isMobile() || isIPadVertical()) {
                            jQuery(window).scrollTop(position.top - 500);
                        }
                    }
                })
                .fail(function () {

                });
        }, function () { }, idartist);
    });
}

function getDataByName(name, data) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(data);
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}


function getArtistArtworksForAutoComplete(module, e) {
    var proxy = autocompleteAPIProxy();
    var phrase = module.getSearchPhrase();
    proxy.getArtworks(phrase, function (status, data) {
        // console.log('[' + status + '] ' + data);
        if (status == 'OK')
            module.bindItems(data.map(function (item) { return { text: item.name, value: item.name } }));
    }, {
        OnlyLots: (IsPage('artist_auctionresults'))
    });
}

function onArtistArtworkAutoCompleteClick(module, selectedObject) {
    manager.setQuery();
    manager.setFilterBedges();
    LoadContent();
}

function showArtistAlert(idartist) {        
    var elemId = '#dashboard-artist-alert-arrow-' + idartist;
    var alertElemId = '#artist-alert-content-block-' + idartist;
    var alertElemIdToShow = alertElemId + ".artist-alert-content-block";
    var artistDtl = artistDetail.find(item => item.IdArtist == idartist);   

    if ($(elemId).hasClass('dashboard-down-arrow')) {
        $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');
        showAlertContentLoader(true);

        if (!$('#dashTabs .alert-content-block').hasClass('display-none')) {            
            cancelAdjustAlert('');
        }

        $('#dashTabs .artist-alert-content-block').each(function () {
            if ($(this).hasClass('dashboard-adjust-alert-container') == false) {
                $(this).addClass('display-none');
            }
        });
        isChanged = false;
        $('#dashTabs .adjust-alert-column').each(function () {
            if ($(this).find('.dashboard-up-arrow').length > 0) {
                $(this).css('background-color', '#fff');
                $(this).find('.dashboard-up-arrow').removeClass('dashboard-up-arrow').addClass('dashboard-down-arrow');
            }
        });

        $(elemId).removeClass('dashboard-down-arrow');
        $(elemId).addClass('dashboard-up-arrow');
       
        if ($(alertElemId).find('.dashboard-adjust-alert-container').length) {
            $(alertElemIdToShow).removeClass('display-none');
            showAlertContentLoader(false);
            checkScroll('#dashboardStickyBtnSection', '#artist-alert-content-block-' + idartist);
            var broadMedia = artistDtl.BroadMedia.map(alert => alert.Item1);
            var alertCategory = artistDtl.AlertType.map(alert => alert.Item1);
            resetPreviousValues(idartist, broadMedia, alertCategory, artistDtl.AuctionVenue);            

        }
        else {        
            $.ajax({
                method: 'GET',
                data: { artistId: idartist},
                url: "/Ajax/My_Preferences/GetArtistAlertsDetails",
                success: function (data) {                    
                    $(alertElemId).append(data);                    
                    $(alertElemIdToShow).removeClass('display-none');
                    showAlertContentLoader(false);                                       
                    bindCheckboxDifferEvent();
                    checkScroll('#dashboardStickyBtnSection', '#artist-alert-content-block-' + idartist);
                    initArtistVenueSearchBar(idartist);                    

                }
            })     
        }

        selectedAuctionVenue = [];                
        initAuctionVenue = [];


        artistDtl.AuctionVenue.forEach(av => {
            selectedAuctionVenue.push({
                value: av.Item1,
                text: av.Item2,
                isAdded: true
            });

            initAuctionVenue.push({
                Item1: av.Item1,
                Item2: av.Item2                
            });            
        });        

        if (isMobile() || IsMobileView()) {
            $(elemId).closest('.dashboard-item-container').find('.small-screen-btn').removeClass('display-none');
            $(elemId).closest('.dashboard-item-container').find('.large-screen-btn').addClass('display-none');
            $(elemId).closest('.column3').css('padding', '24px 0 10px 0');
        }
        else {
            $(elemId).closest('.adjust-alert-column').css('background-color', '#F1F2F3');
        }
        const element = $('#artist-record-block-' + idartist)[0];
        const elementPosition = element.getBoundingClientRect().top + window.scrollY;
        const desiredScrollPosition = elementPosition - 120;
        window.scrollTo({
            top: desiredScrollPosition,
            behavior: 'smooth'
        });        
    }
    else {
        cancelAdjustAlert(idartist);        
        $(alertElemId).addClass('display-none');                
    }    
}

function showAlertContentLoader(isShow) {
    if (isShow) {
        $('.My_Preferences').append('<div class="alert-content-loader"><svg class="spinner-container" width = "65px" height = "65px" viewBox ="0 0 52 52"><circle class="path" cx="26px" cy="26px" r="20px" fill="none" stroke-width="4px"/></svg></div>')
    }
    else {
        $('.alert-content-loader').remove();
    }
}


function cancelAdjustAlert(artistId) {
    if (artistId != "") {
        var elemId = '#dashboard-artist-alert-arrow-' + artistId;
        var alertElemId = '#artist-alert-content-block-' + artistId;
        if ($(elemId).hasClass('dashboard-up-arrow')) {
            $(elemId).removeClass('dashboard-up-arrow');
            $(elemId).addClass('dashboard-down-arrow');
            $(elemId).closest('.adjust-alert-column').css('background-color', '#fff');

            if (isMobile() || IsMobileView()) {
                $(elemId).closest('.dashboard-item-container').find('.small-screen-btn').addClass('display-none');
                $(elemId).closest('.dashboard-item-container').find('.large-screen-btn').removeClass('display-none');
                $(elemId).closest('.column3').css('padding', '16px 0');
            }

            if ($(alertElemId).find('.dashboard-adjust-alert-container').length) {
                const element = $('#artist-record-block-' + artistId)[0];
                const elementPosition = element.getBoundingClientRect().top + window.scrollY;
                const desiredScrollPosition = elementPosition - 120;
                window.scrollTo({
                    top: desiredScrollPosition,
                    behavior: 'smooth'
                });
                $(alertElemId + '.artist-alert-content-block').addClass('display-none');
            }    

            $(`.track-change[data-section="${artistId}"]`).each(function () {
                if ($(this).is(":checkbox")) {
                    //var checkboxInitialVal = $(this).data('initial-value');
                    $(this).prop("checked", $(this).data('initial-value'));

                    
                } else {
                    //var textInitialVal = $(this).data('initial-value');
                    $(this).val($(this).data('initial-value'));
                }
            });

            $('#artistVenuesDashboardSearch-' + artistId).val("");
            $('#auctionVenueExcludeList-' + artistId + ' ul').empty();

            var html = '';

            initAuctionVenue.forEach(av => {
                html += `<li><span class='artist-auction-venue-remove-btn' onclick="removeAuctionVenue('` + av.Item1 + `','')"><img src = '/img/Dashboard/Minus_Circle_Red.svg' />
                    <span class='artist-auction-venue-text' data-auction-value="` + av.Item1 + `"> ` + av.Item2 + `</span></span ></li >`;

            });
            $('#auctionVenueExcludeList-' + artistId + ' ul').append(html);

            $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');
        }
    }
    else {
        $("#dashboard-alert-arrow").removeClass('dashboard-up-arrow');
        $("#dashTabs .alert-content-block").addClass('display-none');
        $("#dashboard-alert-arrow").addClass('dashboard-down-arrow');
        $('#dashTabs .alert-content-block').find('input[type=checkbox]').prop('checked', true);
        $('#dashTabs .alert-content-block').find('input[type=number]').prop('value', '');                        
        selectedAuctionVenue = [];
        $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');

    }
    allArtistSelectedValues = [];
    isChanged = false;
}

function applyAdjustAlert(artistId) {
    showAlertContentLoader(true);
    var selectedMediaValues = [];
    var selectedMediaValuesWithText = [];
    var mediaValueToUpdate = [];
    var selectedCategoryValues = [];    
    var selectedCategoryValuesWithText = [];    
    var categoryValueToUpdate = [];
    var auctionValues = [];
    var auctionValuesWithText = [];
    var mediaElemId = "#alert-media-" + artistId + ' input[type=checkbox]:checked';
    var categoryElemId = '#alert-category-' + artistId + ' input[type=checkbox]:checked';
    var fromElemId = "#alertPriceRangeFrom-" + artistId;
    var toElemId = "#alertPriceRangeTo-" + artistId;

    var fromPriceRange = $(fromElemId).val();    
    var toPriceRange = $(toElemId).val();
    if (fromPriceRange && toPriceRange && (parseInt(fromPriceRange) > parseInt(toPriceRange)))
    {        
        showAlertContentLoader(false);
        maAlertMessage("Enter a valid price range (min must be less than max).", ["OK"]);
        return
    }

    $(mediaElemId).each(function () {
        selectedMediaValues.push($(this).val());                
        var broadMediaText = $(this).closest('label').find('span.text').text();
        mediaValueToUpdate.push({ Item1: $(this).val(), Item2: broadMediaText })

    });
    
    $('#auctionVenueExcludeList-' + artistId + ' .artist-auction-venue-text').each(function () {
        auctionValues.push($(this).data('auction-value'));
        auctionValuesWithText.push({
            Item1: $(this).data('auction-value'),
            Item2: $(this).text()
        });
    });
    
    $(categoryElemId).each(function () {
        selectedCategoryValues.push($(this).val());        
        var categoryText = $(this).closest('label').find('span.text').text();
        categoryValueToUpdate.push({ Item1: $(this).val(), Item2: categoryText })
    });

   
    userSelectedAlertjson = { idartist: artistId, mediaCategory: selectedMediaValues, alertCategory: selectedCategoryValues, auctionVenue: auctionValues, fromPrice: fromPriceRange, toPrice: toPriceRange}
    
    if (artistId != '') {

        var userSelectedChange = [];
        createMixpanelValueArray(userSelectedChange);
        
        var isPriceChange = $('#alertPriceRangeFrom-' + artistId).data('initial-value') != $('#alertPriceRangeFrom-' + artistId).val() || $('#alertPriceRangeTo-' + artistId).data('initial-value') != $('#alertPriceRangeTo-' + artistId).val() ? true : false;

        var url = "/Ajax/My_Preferences/AddRemoveFollowedArtistAlert";
        $.post(url, { followedArtistAlertRequest: userSelectedAlertjson, userChangedValue: userSelectedChange, isPriceChange: isPriceChange })
            .done(function (data) {

                if (data.IsSuccess) {
                    allArtistSelectedValues = [];
                    selectedAuctionVenue = [];
                    
                    maAlertMessage("Your changes have been saved successfully.", ["OK"]);
                    $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');                                        
                    isChanged = false;

                    var artist = artistDetail.find(item => item.IdArtist == artistId);
                    artist.LotPriceRangeFrom = fromPriceRange;
                    artist.LotPriceRangeTo = toPriceRange;
                    artist.BroadMedia = mediaValueToUpdate;
                    artist.AlertType = categoryValueToUpdate;
                    artist.AuctionVenue = auctionValuesWithText;
                    
                    initAuctionVenue = auctionValuesWithText;

                    auctionValuesWithText.forEach(av => {
                        selectedAuctionVenue.push({
                            value: av.Item1,
                            text: av.Item2,
                            isAdded: true
                        });
                    });

                    $('#alertPriceRangeFrom-' + artistId).attr("data-initial-value", fromPriceRange);
                    $('#alertPriceRangeTo-' + artistId).attr("data-initial-value", toPriceRange);

                }                

                showAlertContentLoader(false);
            })
            .fail(function () {
                showAlertContentLoader(false);
            });
    }
    else {       
        userSelectedAlertjson = { idartist: artistId, mediaCategory: selectedMediaValues, alertCategory: selectedCategoryValues, auctionVenue: auctionValuesWithText, fromPrice: fromPriceRange, toPrice: toPriceRange }

        selectedMediaValuesWithText = allArtistSelectedValues.filter(item => item.categoryType !== 'alertCategory');
        selectedCategoryValuesWithText = allArtistSelectedValues.filter(item => item.categoryType !== 'broadMedia');        

        artistDetail.map(id => {
            id.broadMediaChange = getAlertTypeWithAddedFlag(selectedMediaValuesWithText, id.BroadMedia)
            id.broadMediaFinal = getAllArtistFinalAlerts(id.BroadMedia, id.broadMediaChange)
            id.alertCategoryChange = getAlertTypeWithAddedFlag(selectedCategoryValuesWithText, id.AlertType)
            id.alertCategoryFinal = getAllArtistFinalAlerts(id.AlertType, id.alertCategoryChange)
            id.auctionVenueChange = getAlertTypeWithAddedFlag(selectedAuctionVenue, id.AuctionVenue) 
            id.auctionVenueFinal = getAllArtistFinalAlerts(id.AuctionVenue, id.auctionVenueChange)
            id.isChangePriceRange = (fromPriceRange != $('#alertPriceRangeFrom-').data('initial-value') && fromPriceRange > 0 && fromPriceRange != id.LotPriceRangeFrom) || (toPriceRange != $('#alertPriceRangeTo-').data('initial-value') && toPriceRange > 0 && toPriceRange != id.LotPriceRangeTo) ? true : false;            
        })

        if (artistDetail.some(record => record.alertCategoryChange.length > 0 || record.broadMediaChange.length > 0 || record.isChangePriceRange || record.auctionVenueChange.length > 0)) {
            filteredArtistDetail = artistDetail.filter(record => record.alertCategoryChange.length > 0 || record.broadMediaChange.length > 0 || record.isChangePriceRange || record.auctionVenueChange.length > 0);
            generateArtistHtml(0);
            $("#artist-page-no").text((1).toString().padStart(2, '0'))
            $('#totalPages').html(filteredArtistDetail.length);
            $('#adjustAlertsForAllArtists_dialog').modal('show');
        }
        else {
            userSelectedAlertjson.userId = unique_id;                 
            localStorage.setItem("artistsAlerts", JSON.stringify(userSelectedAlertjson));
            allArtistSelectedValues = [];

            maAlertMessage("Your changes have been saved successfully.", ["OK"]);
            $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');
            isChanged = false;

            $('#dashTabs .artist-alert-content-block .dashboard-adjust-alert-container').remove();

            $('#dashTabs .alert-content-block').find(`input[type="checkbox"]`).each(function () {
                var initialValue = $(this).is(':checked') ? "checked" : "false";
                $(this).attr("data-initial-value", initialValue);
                $(this).data("initial-value", initialValue); 

            });

            initAuctionVenue = userSelectedAlertjson.auctionVenue;
        }
        showAlertContentLoader(false);

    }
}



function checkForChanges(artistId) {
    var sectionId = $(this).data('section');    
    let changes = isAuctionChanged;

    if (sectionId == undefined)
    {
        sectionId = artistId;
    }
    $(`.track-change[data-section="${sectionId}"]`).each(function () {
        if ($(this).is(":checkbox")) {
            var checkboxInitialVal = $(this).data('initial-value') == 'checked' ? true : false;
            if (checkboxInitialVal !== $(this).is(":checked")) {
                changes = true;
            }
        } else {
            var textInitialVal = $(this).data('initial-value') !== undefined ? $(this).data('initial-value') : "";
            if (textInitialVal != $(this).val()) {
                changes = true;
            }
        }
    });
    
    isChanged = changes;
    
    if (changes) {
        $('#dashboardStickyBtnSection').removeClass('hidden');
        if ($('#launcher').length > 0 && (!isMobile() && IsMobileView())) { 
            $('#launcher').css('display', 'none');            
        }
        if (sectionId != '' && sectionId != undefined) {
            checkScroll('#dashboardStickyBtnSection', '#artist-alert-content-block-' + sectionId);
        }
        else {
            checkScroll('#dashboardStickyBtnSection', '.dashboard-adjust-alert-container');
        }

    } else {
        $('#dashboardStickyBtnSection').addClass('hidden');
        if ($('#launcher').length > 0 && (!isMobile() && IsMobileView())) {
            $('#launcher').css('display', 'block');
        }
    }
}

    

function bindCheckboxDifferEvent() {
    var selector = '#dashTabs .artist-alert-content-block .track-change[type="checkbox"]';
    $(selector).off('change').on('change', handleCheckboxDiffer);
    $('#dashTabs .artist-alert-content-block .m-icon-info').tooltip();
}



function handleCheckboxDiffer() {
    var blockId = $(this).closest('.dashboard-adjust-alert').data('alert-block-identifier');
    var inpVal = $(this).val();
    var allArtistBlock = $('#dashTabs .alert-content-block .dashboard-adjust-alert[data-alert-block-identifier=' + blockId + ']');
    var targetCheckbox = allArtistBlock.find('input[value="' + inpVal + '"]');
    var isDiffer = targetCheckbox.prop('checked') !== $(this).prop('checked');
    $(this).closest('label').siblings('.m-icon-info').toggleClass("hidden", !isDiffer);
}

function collapseIndividualArtist(elemId) {    
    $("#dashTabs .artist-alert-content-block").addClass('display-none');
    $('#dashTabs .adjust-alert-column').find('.dashboard-up-arrow').removeClass('dashboard-up-arrow').addClass('dashboard-down-arrow');
    $('#dashTabs .adjust-alert-column').css('background-color', '#fff');
    $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');
}

$(".dashboad-sticky-apply-btn").on("click", "a", function () {
    var action = $(this).data('action');
    var targetBlock = $(".artist-alert-content-block:not('.display-none'), .alert-content-block:not('.display-none')");
    var alertButtons = targetBlock.find('.alert-button-section');
    var buttonToTrigger = alertButtons.find('[data-action="' + action + '"]');
    buttonToTrigger.trigger('click');
});

$(document).ready(function () {
    if (location.pathname.toLowerCase() == '/my-preferences/followed-artists')
    {
        window.onbeforeunload =  function (event) {             
            var buttonElem = $('#dashTabs #dashboardStickyBtnSection:not(.hidden)');
            if (buttonElem.length > 0) {
                return "are you sure?";
            }
        }
        checkScroll('#dashboardStickyBtnSection', '.dashboard-adjust-alert-container');
        $(window).on('scroll', function () {
            if ($('.alert-content-block:not(.display-none)').length > 0) {
                checkScroll('#dashboardStickyBtnSection', '.alert-content-block:not(.display-none)');
            } else if ($('.artist-alert-content-block:not(.display-none)').length > 0) {
                checkScroll('#dashboardStickyBtnSection', '.artist-alert-content-block:not(.display-none)');
            }
        });
        
        initArtistVenueSearchBar('');
    }
})

function checkScroll(buttonElemSelector, recomArtistSelector) {
    var $elementRecomArtist = $(recomArtistSelector);
    var $elementButton = $(buttonElemSelector);
    var windowHeight = $(window).height();
    var eleRecomArtistTop = $elementRecomArtist.offset().top;
    var eleRecomArtistBottom = eleRecomArtistTop + $elementRecomArtist.outerHeight();
    var scrollTop = isMobile ? $(window).scrollTop() + 40 : $(window).scrollTop() +105;
    
    if (eleRecomArtistBottom > scrollTop && eleRecomArtistTop < (scrollTop + windowHeight)) {
        if (isChanged) {
            $elementButton.removeClass('hidden');
        }
    } else {
        $elementButton.addClass('hidden');
    }    
}

function getExistingArtistRecord() {

    var apiResponse = '';
    var url = "/Ajax/My_Preferences/GetAllArtistDetails";

    $.post(url)
    .done(function (data) {
        artistDetail = data.ArtistDetails                    
    })
    .fail(function () {
        showAlertContentLoader(false);
    });
}

function getAlertTypeWithAddedFlag(userSelectedAlerts, artistOldAlerts) {    
    var outputArray = [];
    
    userSelectedAlerts.forEach(id => {        
        const foundItem = artistOldAlerts.find(item => item.Item1 === id.value);
        
        if (foundItem && !id.isAdded) {
            outputArray.push({
                Item1: id.value,
                Item2: id.text,
                added: false,
                isAuctionAlert: id.isAuctionAlert
            });
        }

        if (!foundItem && id.isAdded) {
            outputArray.push({
                Item1: id.value,
                Item2: id.text,
                added: true,
                isAuctionAlert: id.isAuctionAlert
            });
        }
        
    });
    
    return outputArray;
}

function getAllArtistFinalAlerts(oldAlerts, alertChange) {
    var selectedValue = [];
    
    selectedValue = oldAlerts.map(alert => alert.Item1);
    
    alertChange.forEach(id => {
        const foundItem = oldAlerts.find(item => item.Item1 === id.Item1);
        if (!foundItem) {
            selectedValue.push(id.Item1);
        }
        else if (foundItem && !id.added) { 
            selectedValue = selectedValue.filter(item => item !== id.Item1)
        }
    });    
    return selectedValue;

}

function generateArtistHtml(index) {
    var html = ``;
    var currency = $('.badge-currency').first().text();
    var fromVal = $('#alertPriceRangeFrom-').val();
    var toVal = $('#alertPriceRangeTo-').val();

    html += `<div class="">
                        <div class="alert-header">
                            <span>` + filteredArtistDetail[index].ArtistName + `</span>
                        </div>
                        <div class="alert-content checklist-module" id="">
                            <ul class="checkbox-bordered equalHMRWrap eqWrap">`;

    if (filteredArtistDetail[index].alertCategoryChange && filteredArtistDetail[index].alertCategoryChange.length > 0) {        
        if ((filteredArtistDetail[index].alertCategoryChange.some(change => change.isAuctionAlert == true))) {
            var parentChecked = (filteredArtistDetail[index].alertCategoryChange.some(change => change.added == false && change.isAuctionAlert == true)) ? '' : 'checked';
            var parentElemCssClass = $('.auctionCheckmark').hasClass('checkmark') ? 'checkmark' : 'm-icon-minus';
            html += `
                        <li class="equalHMR eq">
                            <span class="display-flex">
                            <label class="checkbox-container checkbox-bordered checkbox-large" >
                                    <span class="text mr-xxs color-neutral-900">Auctions</span>
                                    <input ` + parentChecked + ` data-alert-type="alertCategory" data-artist-Id="` + filteredArtistDetail[index].IdArtist + `" class="all-artist-track-change" type="checkbox"/>
                                <span class="` + parentElemCssClass + `"></span>
                            </label>
                            </span>
                        </li><ul class="checkbox-bordered equalHMRWrap eqWrap auctionAlertSubType">`;
            var auctionAlertChange = filteredArtistDetail[index].alertCategoryChange.filter(aat => aat.isAuctionAlert == true);

            auctionAlertChange.forEach(at => {
                var checked = at.added ? 'checked' : '';
                at.Item2 = at.Item2.toLowerCase() == 'exhebitions' ? 'Exhibitions' : (at.Item2.toLowerCase() == 'lots' ? 'Auctions' : (at.Item2.toLowerCase() == 'articles' ? 'Articles' : at.Item2));

                html += `
                    <li class="equalHMR eq">
                        <span class="display-flex">
                        <label class="checkbox-container checkbox-bordered checkbox-large" >
                                <span class="text mr-xxs color-neutral-900">` + at.Item2 + `</span>
                                <input ` + checked + ` data-alert-type="alertCategory" data-artist-Id="` + filteredArtistDetail[index].IdArtist + `" class="all-artist-track-change" type="checkbox" value="` + at.Item1 + `"/>
                            <span class="checkmark"></span>
                        </label>
                        </span>
                    </li>`;
            });

            html += `</ul>`;

        }

        var alertChange = filteredArtistDetail[index].alertCategoryChange.filter(aat => aat.isAuctionAlert == false);

        alertChange.forEach(at => {
            var checked = at.added ? 'checked' : '';
            at.Item2 = at.Item2.toLowerCase() == 'exhebitions' ? 'Exhibitions' : (at.Item2.toLowerCase() == 'lots' ? 'Auctions' : (at.Item2.toLowerCase() == 'articles' ? 'Articles' : at.Item2));
          
            html += `
                    <li class="equalHMR eq">
                        <span class="display-flex">
                        <label class="checkbox-container checkbox-bordered checkbox-large" >
                                <span class="text mr-xxs color-neutral-900">` + at.Item2 + `</span>
                                <input ` + checked + ` data-alert-type="alertCategory" data-artist-Id="` + filteredArtistDetail[index].IdArtist + `" class="all-artist-track-change" type="checkbox" value="` + at.Item1 + `"/>
                            <span class="checkmark"></span>
                        </label>
                        </span>
                    </li>`;
        })

    }

    if (filteredArtistDetail[index].isChangePriceRange) {
        var text = 'Price: ';
        if (!fromVal && toVal) {
            text += 'Up to ' + formatNumberWithCommas(toVal) + " " + currency;;
        }
        if (fromVal && !toVal) {
            text += 'From ' + formatNumberWithCommas(fromVal) + " " + currency;
        }
        if (fromVal && toVal) {
            text += 'Between ' + formatNumberWithCommas(fromVal) + " " + currency + " - " + formatNumberWithCommas(toVal) + " " + currency;
        }        

        html += `<li class="equalHMR eq">
                            <span class="display-flex">
                            <label class="checkbox-container checkbox-bordered checkbox-large">
                                    <span class="text mr-xxs color-neutral-900">` + text +`</span>
                                    <input checked class="all-artist-track-change" type="checkbox" data-artist-Id="` + filteredArtistDetail[index].IdArtist + `"/>
                                <span class="checkmark"></span>
                            </label>
                            </span>
                        </li>`;
    }

    if (filteredArtistDetail[index].broadMediaChange && filteredArtistDetail[index].broadMediaChange.length > 0) {
        filteredArtistDetail[index].broadMediaChange.forEach(bm => {
            var checked = bm.added ? 'checked' : '';
            html += `
                        <li class="equalHMR eq">
                            <span class="display-flex">
                            <label class="checkbox-container checkbox-bordered checkbox-large">
                                    <span class="text mr-xxs color-neutral-900">` + bm.Item2 + `</span>
                                    <input ` + checked + ` data-alert-type="broadMedia" data-artist-Id="` + filteredArtistDetail[index].IdArtist + `" class="all-artist-track-change" type="checkbox" value="` + bm.Item1 + `"/>
                                <span class="checkmark"></span>
                            </label>
                            </span>
                        </li>`;
        })
    }

    if (filteredArtistDetail[index].auctionVenueChange && filteredArtistDetail[index].auctionVenueChange.length > 0) {
        filteredArtistDetail[index].auctionVenueChange.forEach(av => {
            var checked = av.added ? 'checked' : '';
            var icon = checked ? `<img src='/img/Dashboard/exclude_icon.svg' />` : `<img src='/img/Dashboard/plus_icon_green.svg' />`;
            html += `
                        <li class="equalHMR eq userSelectedAuctionList">
                            <span class='artist-auction-venue-remove-btn userSelectedAuction' onclick="removeAuctionVenueFromFinalList('` + av.Item1 + `')">
                                            ` + icon + `
                                            <span class='artist-auction-venue-text' data-auction-value="` + av.Item1 + `">` + av.Item2 + `</span>
                            </span>                            
                        </li>`;
        })
    }

    html += `</ul>
                </div> </div>`
    $('#artist-differ-details').html(html); 
    artistPageNumber = index
}

$("#artist-slick-left").on("click", function () {
    if (artistPageNumber > 0) {
        generateArtistHtml(artistPageNumber - 1);        
        $("#artist-page-no").text((artistPageNumber + 1).toString().padStart(2, '0'))
    }
    
})

$("#artist-slick-right").on("click", function () {    
    var artistTotalPages = $('#totalPages').text();
    if (artistPageNumber < artistTotalPages-1) {
        generateArtistHtml(artistPageNumber + 1);
        $("#artist-page-no").text((artistPageNumber + 1).toString().padStart(2, '0'))
    }
})

$('#dashTabs').on("change", ".all-artist-track-change", function () {    
    var artistId = $(this).data('artist-Id');
    var artist = artistDetail.find(item => item.IdArtist == artistId);
    if ($(this).is(':checked')) {
        if ($(this).data('alert-type') == "broadMedia") {
            artist.broadMediaFinal.push(this.value);
        }
        else if ($(this).data('alert-type') == "alertCategory") {
            artist.alertCategoryFinal.push(this.value);
        }
        else {
            artist.isChangePriceRange = true;
        }
    } else {      
        if ($(this).data('alert-type') == "broadMedia") {
            artist.broadMediaFinal = artist.broadMediaFinal.filter(item => item !== this.value);
        }
        else if ($(this).data('alert-type') == "alertCategory") {
            artist.alertCategoryFinal = artist.alertCategoryFinal.filter(item => item !== this.value);
        }
        else {
            artist.isChangePriceRange = false;
        }
    }
})

$("#alert-artists-button").on("click", function () {
    $('#adjustAlertsForAllArtists_dialog').modal('hide');
    showAlertContentLoader(true);
    var fromPriceRange = $('#alertPriceRangeFrom-').val();
    var toPriceRange = $('#alertPriceRangeTo-').val();    

    var artistDetailArray = [];
    filteredArtistDetail.forEach(ad => {
        artistDetailArray.push({
            idartist: ad.IdArtist,
            mediaCategory: ad.broadMediaFinal,
            alertCategory: ad.alertCategoryFinal,
            auctionVenue: ad.auctionVenueFinal,
            fromPrice: fromPriceRange,
            toPrice: toPriceRange,
            isChangePriceRange: ad.isChangePriceRange
        });
    });

    var userSelectedChange = [];
    createMixpanelValueArray(userSelectedChange);   

    var isPriceChange = $('#alertPriceRangeFrom-').data('initial-value') != $('#alertPriceRangeFrom-').val() || $('#alertPriceRangeTo-').data('initial-value') != $('#alertPriceRangeTo-').val() ? true : false;
    
    var url = "/Ajax/My_Preferences/AddRemoveAllFollowedArtistAlert";

    $.post(url, { followedArtistAlertRequestList: artistDetailArray, userChangedValue: userSelectedChange, isPriceChange: isPriceChange })
        .done(function (data) {

            if (data.IsSuccess) {                
                userSelectedAlertjson.userId = unique_id;                
                localStorage.setItem("artistsAlerts", JSON.stringify(userSelectedAlertjson));
                initAuctionVenue = userSelectedAlertjson.auctionVenue;
                allArtistSelectedValues = [];
                isChanged = false;

                filteredArtistDetail.forEach(fad => {
                    var finalBroadMediaWithText = [];
                    var finalAlertWithText = [];
                    var finalAuctionWithText = [];
                    var artist = artistDetail.find(item => item.IdArtist == fad.IdArtist);
                    artist.LotPriceRangeFrom = fromPriceRange;
                    artist.LotPriceRangeTo = toPriceRange;

                    fad.broadMediaFinal.forEach(bmf => {
                        finalBroadMediaWithText.push({
                            Item1: bmf, Item2: $('#alert-media- input[type="checkbox"][value="' + bmf + '"]').closest('li').find('.text').text()
                        });
                    });

                    fad.alertCategoryFinal.forEach(acf => {
                        finalAlertWithText.push({
                            Item1: acf, Item2: $('#alert-category- input[type="checkbox"][value="' + acf + '"]').closest('li').find('.text').text()
                        });
                    });

                    fad.auctionVenueFinal.forEach(avf => {

                        var matchingAuctionVenue = document.querySelector(`#auctionVenueExcludeList- .artist-auction-venue-text[data-auction-value="` + avf +`"]`);
                        var auctionVenueText = '';

                        if (matchingAuctionVenue == null) {
                            matchingAuctionVenue = artist.AuctionVenue.find(av => av.Item1 == avf);
                            auctionVenueText = matchingAuctionVenue.Item2;
                        }
                        else {
                            auctionVenueText = matchingAuctionVenue.textContent;
                        }

                        finalAuctionWithText.push({
                            Item1: avf, Item2: auctionVenueText
                        });
                    });

                    artist.BroadMedia = finalBroadMediaWithText;
                    artist.AlertType = finalAlertWithText;
                    artist.AuctionVenue = finalAuctionWithText;
                });

                maAlertMessage("Your changes have been saved successfully.", ["OK"]);
                $('#dashTabs #dashboardStickyBtnSection').addClass('hidden');                
                $('#dashTabs .artist-alert-content-block .dashboard-adjust-alert-container').remove();                
                allArtistSelectedValues = [];

                $('#dashTabs .alert-content-block').find(`input[type="checkbox"]`).each(function () {                    
                    var initialValue = $(this).is(':checked') ? "checked" : "false";                    
                    $(this).attr("data-initial-value", initialValue);
                    $(this).data("initial-value", initialValue); 

                });
            }

            showAlertContentLoader(false);
        })
        .fail(function () {
            showAlertContentLoader(false);
        });
});

function updateAllArtistSelection() {    
    var olderSelection = localStorage.getItem("artistsAlerts");
    const dataObject = JSON.parse(olderSelection);    

    if (dataObject != null) {
        if (dataObject.userId == unique_id)
        {
            resetPreviousValues('', dataObject.mediaCategory, dataObject.alertCategory, dataObject.auctionVenue);
            $('#alertPriceRangeFrom-').val(dataObject.fromPrice);
            $('#alertPriceRangeTo-').val(dataObject.toPrice);
            initAuctionVenue = dataObject.auctionVenue;
        }
    }
    else {
        $('#auctionVenueExcludeList- ul').empty();
        allArtistSelectedValues = [];
        selectedAuctionVenue = [];
        isChanged = false;
        $('#auctionVenueExcludeList- ul').empty();
        $('#artistVenuesDashboardSearch-').val("");
        initAuctionVenue = [];        
    }
}


$('#dashTabs').on("change", ".auctionAlertSubType input[type='checkbox']", function () {
    var parentLi = $(this).closest('.auctionAlertSubType').closest('li');

    var childCheckboxes = parentLi.find('.auctionAlertSubType input[type="checkbox"]');

    var auctionIcon = parentLi.find('.auctionCheckmark');

    var allChecked = childCheckboxes.toArray().every(checkbox => $(checkbox).is(':checked'));

    if (allChecked && parentLi.find('.auctionCheckmark').hasClass('m-icon-minus')) {
        auctionIcon.removeClass('m-icon-minus').addClass('checkmark');
        parentLi.find("input[type='checkbox'].auction-parent-li").prop('checked', true);

    } else if (!allChecked && parentLi.find('.auctionCheckmark').hasClass('checkmark')) {
        auctionIcon.removeClass('checkmark').addClass('m-icon-minus');
        parentLi.find("input[type='checkbox'].auction-parent-li").prop('checked', false);
    }
});


$('#dashTabs').on("change", ".track-change", function () {
    var isAdded = $(this).is(':checked');
    var alertType = $(this).data('alert-type') == "broadMedia" ? "broadMedia" : "alertCategory";
    var selectedText = $(this).closest('label').find('span.text').text();
    
    if ($(this).hasClass('auction-alert-checkbox')) {                
        var parentInitialValue = $(this).data('initial-value') === 'checked';
        var childCheckboxes = $(this).closest('li').find('.auctionAlertSubType input[type="checkbox"]');

        if (isAdded) {
            $(this).closest('li').find('.auctionCheckmark').removeClass('m-icon-minus').addClass('checkmark')
            childCheckboxes.prop('checked', true);
        }
        else {
            childCheckboxes.prop('checked', false);            
            $(this).closest('li').find('.auctionCheckmark').removeClass('checkmark').addClass('m-icon-minus')
        }

        var childValues = childCheckboxes.map(function () {
            return this.value;
        }).get();
        
        allArtistSelectedValues = allArtistSelectedValues.filter(
            item => !(item.categoryType === alertType && childValues.includes(item.value))
        );
        childCheckboxes.each(function () {
            var childValue = this.value;
            var childInitValue = $(this).data('initial-value');
            var childText = $(this).closest('label').find('span.text').text();
            
            if (parentInitialValue && !isAdded) {                
                allArtistSelectedValues.push({
                    value: childValue,
                    isAdded: isAdded,
                    text: childText,
                    categoryType: alertType,
                    isAuctionAlert: true
                });                
            }
            else if (!parentInitialValue) {
                if ((isAdded && childInitValue == 'false') || (childInitValue && !isAdded)) {                    
                    allArtistSelectedValues.push({
                        value: childValue,
                        isAdded: isAdded,
                        text: childText,
                        categoryType: alertType,
                        isAuctionAlert: true
                    });                    
                }               
            }                 
        });
    }
    else {
        
        var isAlertSubType = $(this).closest('ul').hasClass('auctionAlertSubType');
        if ($(this).data('initial-value') == 'checked') {
            if (allArtistSelectedValues.length > 0 && allArtistSelectedValues.some(item => item.categoryType === alertType && item.value === this.value)) {
                allArtistSelectedValues = allArtistSelectedValues.filter(
                    item => !(item.categoryType === alertType && item.value === this.value)
                );
            }
            else {
                allArtistSelectedValues.push({
                    value: this.value,
                    isAdded: isAdded,
                    text: selectedText,
                    categoryType: alertType,
                    isAuctionAlert: isAlertSubType
                })
            }
        }
        else if ($(this).data('initial-value') == 'false' && isAdded) {
            if (!(allArtistSelectedValues.some(item => item.categoryType === alertType && item.value === this.value)))
            {
                allArtistSelectedValues.push({
                    value: this.value,
                    isAdded: isAdded,
                    text: selectedText,
                    categoryType: alertType,
                    isAuctionAlert: isAlertSubType
                })
            }
        }
    }
});

$('#dashTabs').on("change", ".track-change", checkForChanges);

function initArtistVenueSearchBar(artistId) {
    var proxy = autocompleteAPIProxy();
    var searchBarId = '#artistVenuesDashboardSearch-' + artistId;
    if ($(searchBarId).length) {
        $(searchBarId).autocomplete({
            autoFocus: true,
            delay: 600,
            source: function (request, response) {
                
                proxy.getAuctionVenues(request.term, function (status, data) {
                    if (status == 'OK')
                        response(data)
                }, true);
            },
            select: function (event, ui) {
                isDisableClick = true;
                event.preventDefault();
                $(this).val(ui.item.name);
                addToExcludedAuctionVenues(ui.item.encodedId, ui.item.name, artistId);
                $(searchBarId).val("");
            },
        }).data("ui-autocomplete")._renderItem = function (ul, item) {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<span class='artist-search-follow artist-alert' > " + item.name + "</span> <span class='artist-search-follow-btn artist-alert'><img src='/img/Dashboard/Minus_Circle_Red.svg'/><span class='follow-text'>EXCLUDE</span></span>")
                .appendTo(ul);
        };
    }

    $('#artistAuctionVenueSearchForm').submit(function () {
        return false;
    });
}

function addToExcludedAuctionVenues(auctionId, auctionName, artistId) {
    var elemToAppend = '#auctionVenueExcludeList-' + artistId;
    if (!(selectedAuctionVenue.some(item => item.value === auctionId))) {
        selectedAuctionVenue.push({            
            value: auctionId,
            text: auctionName,
            isAdded: true
        });        

        var html = '';

        html += `<li><span class='artist-auction-venue-remove-btn' onclick="removeAuctionVenue('` + auctionId + `','` + artistId + `')"><img src = '/img/Dashboard/Minus_Circle_Red.svg' />
            <span class='artist-auction-venue-text' data-auction-value="` + auctionId + `"> ` + auctionName + `</span></span ></li >`;

        $(elemToAppend + ' ul').append(html);
    }

    if (compareValues(initAuctionVenue, selectedAuctionVenue)) {
        isAuctionChanged = true;
        checkForChanges(artistId);
    }
    else {
        isAuctionChanged = false;
        checkForChanges(artistId);
    }

   
}

function removeAuctionVenue(auctionVenueId, artistId) {
    var elemId = '#auctionVenueExcludeList-' + artistId;
    if (selectedAuctionVenue.some(item => item.value === auctionVenueId) && !(initAuctionVenue.some(item => item.Item1 == auctionVenueId))) {
        selectedAuctionVenue = selectedAuctionVenue.filter(item => item.value != auctionVenueId)
    }
    else {
        var auctionVenue = selectedAuctionVenue.find(item => item.value == auctionVenueId)
        auctionVenue.isAdded = false;
    }

    $(elemId + ` .artist-auction-venue-text[data-auction-value='` + auctionVenueId + `']`).closest('li').remove();

    if (compareValues(initAuctionVenue, selectedAuctionVenue)) {
        isAuctionChanged = true;
        checkForChanges(artistId);
    }
    else {
        isAuctionChanged = false;
        checkForChanges(artistId);
    }
}

function compareValues(initObj, updatedObj) {
    
    const initValues = initObj.map(o => o.Item1).sort();
    const udpatedValues = updatedObj.map(o => o.value).sort();

    if (initObj.length !== updatedObj.length || selectedAuctionVenue.some(sav => sav.isAdded == false)) {
        return true;
    }


    return false;
}

function createMixpanelValueArray(userSelectedChange) {
    allArtistSelectedValues.forEach(ucv => {
        userSelectedChange.push({
            alertValue: ucv.text,
            alertCategory: ucv.categoryType,
            isAdded: ucv.isAdded
        });
    });

    selectedAuctionVenue.forEach(sav => {
        if (!(initAuctionVenue.some(iav => iav.Item1 == sav.value))) {
            userSelectedChange.push({
                alertValue: sav.text,
                alertCategory: 'auctionVenue',
                isAdded: sav.isAdded
            });
        }
        else if (sav.isAdded == false) {
            userSelectedChange.push({
                alertValue: sav.text,
                alertCategory: 'auctionVenue',
                isAdded: sav.isAdded
            });
        }
    });
      
}

function resetPreviousValues(idArtist, mediaCategory, alertCategory, auctionVenue) {
    allArtistSelectedValues = [];
    selectedAuctionVenue = [];
    isChanged = false;
    
    $('#alert-media-' + idArtist).find(`input[type="checkbox"]`).each(function () {
        const checkboxValue = $(this).val();

        if (mediaCategory.includes(checkboxValue)) {
            $(this).prop("checked", true);
            $(this).attr("data-initial-value", "checked");

        } else {
            $(this).prop("checked", false);
            $(this).attr("data-initial-value", "false");
        }
    });

    $('#alert-category-' + idArtist).find(`input[type="checkbox"]`).each(function () {
        const checkboxValue = $(this).val();        
        if (alertCategory.includes(checkboxValue)) {
            $(this).prop("checked", true);
            $(this).attr("data-initial-value", "checked");
        } else {
            $(this).prop("checked", false);
            $(this).attr("data-initial-value", "false");
        }        
    });

    const parentElement = $('#alert-category-' + idArtist).find('.auction-parent-li').closest('li');
    const hasUnchecked = parentElement.find(`ul input[type="checkbox"]`).toArray().some(el => !$(el).prop('checked'));

    if (hasUnchecked) {        
        parentElement.find('.auction-parent-li').prop("checked", false);
        parentElement.find('span.auctionCheckmark').removeClass('checkmark').addClass('m-icon-minus');
    } else {
        parentElement.find('.auction-parent-li').prop("checked", true);
        parentElement.find('span.auctionCheckmark').removeClass('m-icon-minus').addClass('checkmark');
    }

    $('#auctionVenueExcludeList-' + idArtist + ' ul').empty();
    $('#artistVenuesDashboardSearch-' + idArtist).val("");
    var html = '';

    auctionVenue.forEach(av => {
        selectedAuctionVenue.push({
            value: av.Item1,
            text: av.Item2,
            isAdded: true
        });
        
        html += `<li><span class='artist-auction-venue-remove-btn' onclick="removeAuctionVenue('` + av.Item1 + `','')"><img src = '/img/Dashboard/Minus_Circle_Red.svg' />
                        <span class='artist-auction-venue-text' data-auction-value="` + av.Item1 + `"> ` + av.Item2 + `</span></span ></li >`;

    });
    $('#auctionVenueExcludeList-' + idArtist + ' ul').append(html);

}

function removeAuctionVenueFromFinalList(auctionVenueId) {    
    if (artistDetail[artistPageNumber].auctionVenueFinal.some(item => item === auctionVenueId)) {
        artistDetail[artistPageNumber].auctionVenueFinal = artistDetail[artistPageNumber].auctionVenueFinal.filter(item => item != auctionVenueId)
    }

    $(`.userSelectedAuction .artist-auction-venue-text[data-auction-value='` + auctionVenueId + `']`).closest('li').remove();    
}

function ajaxCallbackAfterFollowedArtistLoad() {    
    initBSTooltips();
    showAlertContentLoader(true)
    
    var apiResponse = '';
    var url = "/Ajax/My_Preferences/GetAllArtistDetails";

    $.post(url)
        .done(function (data) {
            artistDetail = data.ArtistDetails;
            const locationUrl = new URL(window.location.href);
            const artistParams = new URLSearchParams(locationUrl.search);
            const artistId = artistParams.get('artistId');

            if (artistParams.has('artistId')) {
                showArtistAlert(artistId);
            }
            showAlertContentLoader(false);
        })
        .fail(function () {
            showAlertContentLoader(false);
        });
};

function AddRemoveVenueAlertType(rowId, idalertType, rowType) {

    var element = $(this);
    var url = "/Ajax/My_Preferences/AddRemoveUserFollowedVenueAlertType";

    //location
    if (rowType == 3) {
        url = "/Ajax/My_Preferences/AddRemoveUserFollowedLocationAlertType";
    }

    $.post(url, jQuery.param({ rowId: rowId, alertTypeId: idalertType }))
        .done(function (data) {

            if (data.IsSuccess) {

            }
            else {

                if (data.AddRemove == "add") {

                    element.prop('checked', false);
                }
                else {

                    element.prop('checked', true);
                }
            }
        })
        .fail(function () {

        });
}

function AddRemoveLocationAlertType(rowId, idalertType) {

    var element = $(this);

    var url = "/Ajax/My_Preferences/AddRemoveUserFollowedLocationAlertType";
    $.post(url, jQuery.param({ rowId: rowId, alertTypeId: idalertType }))
        .done(function (data) {

            if (data.IsSuccess) {



            }
            else {

                if (data.AddRemove == "add") {

                    element.prop('checked', false);
                }
                else {

                    element.prop('checked', true);
                }

            }


        })
        .fail(function () {

        });
}

function initOrganizationUnfollowBtn() {

    $(document).on('click', '.unfollow', function () {
        //$(".unfollow").on("click", function () {
        var url = "";
        var id = $(this).data("id");
        var typeId = $(this).data("typeid");
        var venuName = $(this).data("venuname");
        var position = $(window).scrollTop();


        if (isMobile()) {
            jQuery(window).scrollTop(0);
        }

        //organization
        if (typeId == 2) {
            url = "/Ajax/My_Preferences/RemoveUserFollowedOrganization";
            pageData = { organizationid: id };
        }
        else {
            url = "/Ajax/My_Preferences/RemoveUserFollowedLocation";
            pageData = { locationid: id };
        }

        var element = $(this);

        confirmUnFollowPopup(venuName,
            function () {
                $.post(url, jQuery.param(pageData))
                    .done(function (data) {
                        if (data.IsSuccess) {
                            $('.cancel-popup').modal('hide');
                            //refresh
                            ajaxLoadPage(null, $(".DashboardVenuesAjax"), null, false);
                            if (isMobile()) {
                                element.closest(".venue-cell").hide();
                                jQuery(window).scrollTop(position - 350);
                            }
                        }
                    })
                    .fail(function () {

                    });
            },
            function () { }
        );
    });
}

function getDataForObject(item) {
    var venUrl = item.url.split('/');
    if (item.section == "cities") {
        objType = 3;//location
        venUrlId = venUrl[4];
    }
    else {
        objType = 2;//org
        venUrlId = venUrl[3];
    }
    return { "objType": objType, "venUrlId": venUrlId };
}

function addToFollowedVenues(objId, objType) {
    //console.log(objId + "::" + objType);
    var url = "/Ajax/Follow/SetPreferences";
    $.post(url, jQuery.param({ objectId: objId, objectType: objType, isChecked: true }))
        .done(function (data) {
            if (data.OK) {
                ajaxLoadPage(null, $(".DashboardVenuesAjax"), objId + "|" + objType, false);                //CLEAR SEARCH                $("#venuesDashboardSearch").val("");            } else {

            }
        })
        .fail(function () {

        });
}

function initVenueSearchBar() {
    var proxy = autocompleteAPIProxy();
    if ($("#venuesDashboardSearch").length) {
        $("#venuesDashboardSearch").autocomplete({
            autoFocus: true,
            delay: 600,
            source: function (request, response) {
                //$.ajax({
                //    method: 'POST',
                //    url: '/ajax/AutoComplete/GetArtists',
                //    dataType: "json",
                //    data: {
                //        limit: 8,
                //        q: request.term
                //    },
                //    success: function (data) {
                //        response(data);
                //    }
                //});
                proxy.getAllByTypes(request.term, function (status, data) {
                    if (status == 'OK')
                        response(data.venues)
                }, {
                    Types: ['organizations', 'cities']
                });
            },
            select: function (event, ui) {
                isDisableClick = true;
                event.preventDefault();
                $(this).val(ui.item.name);
                //addToFollowedVenues(ui.item.encodedId, 3);
                addToFollowedVenues(ui.item.encodedId, ui.item.type);
            },
        }).data("ui-autocomplete")._renderItem = function (ul, item) {
            return $("<li></li>")
                .data("item.autocomplete", item)
                .append("<span class='artist-search-follow' > " + item.name + "</span> <span class='artist-search-follow-btn'><img src='/img/Dashboard/Plus_Circle.svg'/><span class='follow-text'>FOLLOW<span></span>")
                .appendTo(ul);
        };
    }

    $('#artistDashboardSearchForm').submit(function () {
        return false;
    });
};
var ofilters;
var allItemsKey = "0A8E7073D5AD19A4";

//$(function () {
//    if (page_name.toLowerCase() == "dashboard") {

//       var filtersList = new filters();
//    }
//});

function filters() {
    var filtersarr = []

    this.add = function (filter) {
        filter.filterChanged = delayfilterChanged;

        filtersarr.push(filter);

        delayfilterChanged();
    }

    var calInDelay = false;
    function delayfilterChanged()
    {
        if (!calInDelay) {
            calInDelay = true;
            window.setTimeout(filterChanged, 1500)
        }
    }

    function filterChanged() {
        var qs = "";

        for (var filt in filtersarr) {
            var filter = filtersarr[filt];
            var ids = filter.getValues();

            if (ids.length > 0) {
                if (qs != "") {
                    qs += "&";
                }

                if (ids.length > 1 && ids[0] == allItemsKey) {
                    ids.splice(0, 1);
                }

                if (ids.length > 0) {
                    qs += filter.querystringName + "=" + ids.join("_");
                }
            }
        }

        if ("?" + qs != location.search) {
            var page = "/my-preferences?" + qs
            window.history.pushState({ urlPath: page }, "", page);

            ajaxLoadPage(null, $(".dashboard_list"), "", false);

            //location.href = "/my-preferences?" + qs
        }

        calInDelay = false;
    }
}

function filterListItem(elementName) {
    var self = this;
    this.querystringName = "";

    $(elementName + " input[type = checkbox]").on('click', function () {        
        if ($(this).is(":checked")) {
            if ($(this).attr("value") == allItemsKey) {
                $.each($(elementName + " input[type = checkbox]:checked"), function () {
                    if ($(this).attr("value") != allItemsKey) {
                        $(this)[0].checked = false;
                    }
                });
            }
            else {
                $.each($(elementName + " input[value='" + allItemsKey + "']"), function () {
                    $(this)[0].checked = false;
                });
            }
        }
        //else if ($(this).attr("value") == allItemsKey) {
        //    $(this)[0].checked = true;
        //}

        self.iHaveChanged();
    });

    this.iHaveChanged = function() {
        self.filterChanged()
    }

    this.getValues = function ()
    {
        var ids = []

        $(elementName + " input[type = checkbox]:checked").each(function () {
            ids.push($(this).attr("value"))
        });

        return ids;
    }

}




//function initFilterOnClick() {
//    //  alert("sds");
//    $(document).on('click', ".filters-block input[type=checkbox]", function () {

//        var id = $(this).attr('id');
//        var type = $(this).data("type");
//        alert(type + ":" + id);
//    });
//}



//var filterListItem1 = new filterListItem("holder1")
//var filterListItem2 = new filterListItem("holder2")
//var filterListItem3 = new filterListItem("holder3")

//filtersList.add(filterListItem1)
//filtersList.add(filterListItem2)
//filtersList.add(filterListItem3)


//$(document).ajaxComplete(function (event, xhr, settings) {
//    if (getDataByName("curentMethod", settings.data) == "GetPreferencedArtistsPage") {
//        initAddRemoveBroadmedia();
//        initAdustPriceRangeBtn();
//        initSavePriceRangeBtn();
//        initUnfollowBtn();

//        if (typeof (top.scrollToArtist) != "undefined") {

//            var target = $("a[data-aritst='" + scrollToArtist + "']")
//            $('html, body').animate({
//                scrollTop: target.parent().parent().offset().top - 250
//            }, 1000);


//            delete (top.scrollToArtist);


//        }
//    }
//});
;

function AddRemoveFilterAlertType(rowId) {

    var element = $(this);

    var url = "/Ajax/My_Preferences/AddRemoveFilterAlertType";
    $.post(url, jQuery.param({ rowId: rowId }))
        .done(function (data) {

            if (data.IsSuccess) {

            }
            else {

                if (data.AddRemove == "add") {

                    element.prop('checked', false);
                }
                else {

                    element.prop('checked', true);
                }

            }
        })
        .fail(function () {

        });
}

function initFilterRemoveBtn() {
    $(document).on('click', '.removeBut', function () {
        var url = "/api/dashboard/filter";
        var id = $(this).data("id");
        var position = $(window).scrollTop();
        var filtername = $(this).data("filtername");
        var filterurl = $(this).data("filterurl");

        if (isMobile()) {
            jQuery(window).scrollTop(0);
        }

        var element = $(this);

        maAlertMessage("Are you sure you want to remove " + filtername + " ?", ["Yes", "No"], function (selectedBtn) {
            //debugger;
            switch (selectedBtn) {
                case "Yes":
                    var post =
                    {
                        Path: filterurl,
                        Title: filtername,
                        IdProfileSearch: id
                    }

                    $.ajax({
                        method: 'DELETE',
                        url: url,
                        dataType: "json",
                        data: post,
                        success: function (data) {
                            if (data.OK) {
                                ajaxLoadPage(null, $(".savedFiltersList"), "", false);

                                $('.cancel-popup').modal('hide');
                                if (isMobile()) {
                                    element.closest(".filter-cell").hide();
                                    jQuery(window).scrollTop(position - 250);
                                }
                            }
                        }
                    });
                    break;
            }
        });
    });

    //toggle inline mode
    $.fn.editable.defaults.mode = 'inline';
    $.fn.editableform.buttons = '<button type="submit" class="editable-submit"></button><button type="button" class="editable-cancel"></button>';

    $(document).ajaxStop(function () {
        $('.init-edit').editable(
            {
                autotext: 'auto',
                success: function (response, newValue) {

                },
                highlight: "#8BC34A",
                url: "/Ajax/My_Preferences/EditUserFilter",
                pk: $(this).data("pk"),
                ajaxOptions: {
                    dataType: 'json',
                    method: 'POST',
                },
            }
        );
    });
}

function initGroupEdit() {
    //toggle inline mode
    $.fn.editable.defaults.mode = 'inline';
    $.fn.editableform.buttons = '<button type="submit" class="editable-submit"></button><button type="button" class="editable-cancel"></button>';

    $('.saved-group-edit').editable(
        {
            autotext: 'auto',
            success: function (response, newValue) {

            },
            highlight: "#8BC34A",
            url: "/Ajax/My_Preferences/EditGroupName",
            pk: $(this).data("pk"),
            ajaxOptions: {
                dataType: 'json',
                method: 'POST',
            },
        }
    );
    $('.saved-group-edit').on('hidden', function (e, r) {
        $(".saved-group-edit-icon").show();
    });
    $(".saved-group-edit-icon").click(function (e) {
        var target = $(this).data("target");
        e.stopPropagation();
        e.preventDefault();
        $('#' + target).editable('toggle');
        $(this).hide();
        return false;
    });
}
;
$(function () {

    if ($(".dashboard-all-tabs").length > 0) {
        if (window.innerWidth <= 960) {
            initMobileMenu();
            $(".dashboard-all-tabs").prepend($(".dashboard-menu > .active"))
            initFirstMenuTab();
        }

        if (IsPage("my_preferences")) {

            if (location.href.indexOf("/followed-artists") > -1) {
                initArtistSearchBar();
                initAddRemoveBroadmedia();
                initAdustPriceRangeBtn();
                initSavePriceRangeBtn();
                initUnfollowBtn();
            }

            if (location.href.indexOf("/followed-venues") > -1) {
                initOrganizationUnfollowBtn();
                initVenueSearchBar();
            }

            if (location.href.indexOf("/saved-filters") > -1) {
                initFilterRemoveBtn();
            }


            //Rewrite the url
            //  clearDashboardUrl();
        }
    }
    var de = $('[data-toggle="tooltip"]');
    if (de && de.tooltip)
        $('[data-toggle="tooltip"]').tooltip();
});


function initFirstMenuTab() {
    $(".dashboard-all-tabs > .active").on("click", function () {

        if ($(".dashboard-all-tabs").hasClass("small-menu")) {
            $(".dashboard-all-tabs").removeClass("small-menu");
        }
        else {
            $(".dashboard-all-tabs").addClass("small-menu");
        }
        return false;

    });

}
function initMobileMenu() {
    $(".dashboard-all-tabs").addClass("small-menu");
}

function clearDashboardUrl() {
    var page = "/my-preferences"

    window.history.pushState({
        urlPath: page
    }, "", page);
    CleanURLend();
}

;
var payModel = {};
function initChangePlan() {
    //InitCurrentPlan();
    initCancelMembership();
    var _planChanged = false;
    if (!IsPage('upgrade')) {
        $(".change-plan-box input[name=plans]").change(OnPlanChange);
        if ($(".change-plan-box input[name=plans]:checked").length) {
            var changePlan = $('.billing-plans .btn-cta');
            if (changePlan.length > 0) {
                if (isPayPal) {
                    console.log('init');
                    changePlan.html('').removeClass("btn-cta btn-1").attr("id", "paypal-button").addClass("change-plan-paypal-button");
                    renderChangePlanPayPalBtn();
                } else {
                    changePlan.on("click", changePlans);
                }
                changePlan.show();
            }
        }
        function OnPlanChange() {
            var price = $('input[name=plans]:checked').data('price');
            var discountedprice = $('input[name=plans]:checked').data('discounted-price');
            if (discountedprice) {
                if (!$(".discount").length && discountedprice != price) {
                    $(".total-price-container").prepend('<strong id="discount-container">Discount: <span class="discount"></span></strong><br />');
                }
                var realdprice = discountedprice.replace(/(<([^>]+)>)/gi, "").substring(1);
                var realprice = price.replace(/(<([^>]+)>)/gi, "").substring(1);
                $(".total-price").html(discountedprice);
                if (realdprice < realprice)
                    $(".discount").html("$<span>" + (realdprice - realprice) + "</span>").show();
                else
                    $(".discount").hide();
            } else {
                $(".total-price").html(price);
            }
            $("#currentPrice").val($(".total-price").text());
            if ($("#couponCode").val())
                PaymentManager.getCoupon();
            if (!_planChanged) {
                _planChanged = true;
                var changePlan = $('.billing-plans .btn-cta');
                if (changePlan.length > 0) {
                    if (isPayPal) {
                        changePlan.html('').removeClass("btn-cta btn-1").attr("id", "paypal-button").addClass("change-plan-paypal-button");
                        renderChangePlanPayPalBtn();
                    } else {
                        changePlan.on("click", changePlans);
                    }
                    changePlan.show();
                }
            }
        }
        setTimeout(function () {
            OnPlanChange();
        }, 50);
    }
};
//function InitCurrentPlan() {
//    var currentPlan = $("#currentPlanId");
//    if (currentPlan.length > 0) {
//    }
//}
function initCancelMembership() {
    $('*[data-method="CancelMembership"]').hide()
    $('#reason').hide();
    $("#btnChangePlan").on("click", function () {
        var current_plan_name = $("#currentPlan").val();
        var reason = $("#cancellationReason").val();
        if (reason === "Other") {
            reason = $('#otherReason').val();
        }
        if (reason === "SELECT A REASON" || !reason) {
            $("#cancellationReason").addClass("choose_reason_fail");
            return;
        }
        maAlertMessage("Are you sure you want to cancel your " + current_plan_name +
            " membership?",
            [
                {
                    text: "I'm not sure",
                    atts: [
                        { name: "class", value: "btn-theme btn-theme-primary btn-theme-wide-200 uppercase margin-top-15" },
                        { name: "data-dismiss", value: "modal" }
                    ]
                },
                {
                    text: "Yes",
                    atts: [
                        { name: "class", value: "popup-cancel" },
                        { name: "data-action", value: "Yes" }
                    ]
                }],
            function (selectedBtn) {
                switch ($(selectedBtn).data("action")) {
                    case "Yes":
                        PostCancelMembership();
                        break;
                }
            },
            null, null, null,
            "<span class='popup-term-text'>* See our <a href='/Static/RefundPolicy'>Cancellation Policy</a> for more information</span>", "cancel-subscription-popup");
    });
    function PostCancelMembership() {
        var reason = $("#cancellationReason").val();
        if (reason === "Other") {
            reason = $('#otherReason').val();
        }
        var method = $(".billing-block.active").data("method");
        if (method === "CancelMembership") {
            $(".ChangeBillingPlanHeader .section-title").text("Canceling your Premium Membership");
        }
        $(this).attr("disabled", true);
        $(".form-messages").html(loading_image_html);
        var url = "/Ajax/Payments/" + method;
        $.post(url, jQuery.param({ reason: reason, subscriptionType: ScopedVariables.SubscriptionServiceType }))
            .done(function (data) {
                if (data.OK) {
                    maSessionVariables.setVariable("IgnoreFirstTimeAfterCancellation", 1);
                    GTM_Send('event', 'payment', method, "success");
                }
                else {
                    GTM_Send('event', 'payment', method, "faild");
                }
                if (data.Data === true) {
                    maAlertMessage(data.Message, ["OK"], function (e) {
                        if (e == "OK") location.href = "/";
                    }, "Your annual subscription has been cancelled", null, null,
                        "<small>If you'd like to cancel your mebership immidiately <a id='cancelnow' class='color-primary'>Click Here</a></small>"
                        , "premium2stage", function () {
                            $("a#cancelnow").on("click", function () {
                                $(this).parent().html(loading_image_html).addClass("text-center").css("display", "block");
                                PostCancelMembership();
                            });
                        });
                }
                else
                    maAlertMessage(data.Message, ["OK"], function (e) { if (e == "OK") location.href = "/"; });
                //$(".form-messages").html('<div class="container-fluid"><div class="input-group-block"><h5 class="input-group-title">' + data.Message + '</h5></div></div>');
                //$(".form-messages").focus();
                //$('#btnContinue-div').show()
                //$('#changePlanDiv').hide();
            })
            .fail(function () {
                GTM_Send('event', 'payment', method, "faild2");
                //$(".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();
            });
        $(this).attr("disabled", false);
    }
}
function successChangePlanMSG(fromPlan, toPlan, msg) {
    GTM_Send('event', 'change-plan', fromPlan + " to " + toPlan, "success");
    maAlertMessage(msg, ["OK"], function () { redirectToReferralPage("/"); }, null, null, "Change Plan Success");
}
function failedChangePlanMSG(fromPlan, toPlan, msg) {
    maAlertMessage(msg, ["OK"], function () { }, null, null, "Change Plan Failed");
    $(".form-messages").html("");
    $('.billing-plans .btn-cta').show();
    GTM_Send('event', 'change-plan', fromPlan + " to " + toPlan, "faild1");
}
function changePlans() {
    var checkedRadioBtn = $("input[name=plans]:checked:enabled");
    var checkedRadioBtnValue = checkedRadioBtn.val();

    if (!checkedRadioBtnValue) {
        maAlertMessage("Please select plan.", ["OK"], function () { });
        return;
    }

    var current_plan_name = $("#currentPlan").val();
    var current_period = $(".plan-box input[type=radio][value=" + $("#currentPlanId").val() + "]").data("period");
    var new_period = checkedRadioBtn.data("period");
    var new_plan_name = checkedRadioBtn.data("plan_name");


    if (current_plan_name + current_period == new_plan_name + new_period) {
        maAlertMessage("Please select plan.", ["OK"], function () { }, null, null, "Change Plan Failed");
        return;
    }

    maAlertMessage("You are currently on  " + (typeof (current_period) == 'undefined' ? '' : current_period) + " " + current_plan_name + "  membership and about to change to " + new_plan_name + " " + new_period + ". Please confirm the change", ["Confirm", "cancel"],
        function (selectedBtn) {


            switch (selectedBtn) {
                case "Confirm":

                    $(".form-messages").html(loading_image_html);
                    $('.billing-plans .btn-cta').hide();
                    var currentPlan = $("#currentPlanId");
                    if (currentPlan.length > 0) {
                        currentPlan = currentPlan.val();
                    }

                    //    $('.billing-plans .btn-cta').attr("disabled", true);

                    var url = "/Ajax/Payments/ChangePlan";
                    payModel = {
                        fromPlanId: currentPlan, toPlanId: checkedRadioBtnValue
                    };
                    $.post(url, jQuery.param({
                        toPlanId: checkedRadioBtnValue,
                        coupon: $("#CouponId").val()
                    }))
                        .done(function (data) {
                            window.payModel = {
                                fromPlanId: currentPlan, toPlanId: checkedRadioBtnValue, SCA: data.SCA, currentPlanName: current_plan_name + "-" + current_period, toPlanName: new_plan_name + "-" + new_period
                            };
                            if (data.SCA != null && data.SCA.IsSCA) {
                                mixpanel.track("View SCA popup", { Setup: false });
                                _stripe.handleCardPayment(data.SCA.clientSecret, {
                                    payment_method: data.SCA.paymentMethod
                                }).then(handleScaChangePlan);
                            }
                            else if (data.IsSuccess) {
                                successChangePlanMSG(payModel.currentPlanName, payModel.toPlanName, data.Message);
                            }
                            else {
                                failedChangePlanMSG(payModel.currentPlanName, payModel.toPlanName, data.Message);
                            }

                            $(".form-messages").html("");


                        })
                        .fail(function () {
                            failedChangePlanMSG(payModel.fromPlanId, payModel.toPlanId, "Unknown Error, Please try again");
                            mixpanel.track("Change Plan Unknown Error");
                        });
                    //  $('.billing-plans .btn-cta').attr("disabled", false);
                    break;

            }
        }, null, null, "Confirm Change Plan", null, null);



}
function handleScaChangePlan(result) {
    if (result && result.paymentIntent && result.paymentIntent.status == "succeeded") {
        $.post("/Ajax/Payments/ConfirmChangePlanSCA", {
            intentId: result.paymentIntent.id,
            clientSecret: payModel.SCA.clientSecret,
            fromPlanId: payModel.fromPlanId,
            toPlanId: payModel.toPlanId
        }).done(function (data) {
            if (data.IsSuccess) {
                successChangePlanMSG(payModel.fromPlanId, payModel.toPlanId, data.Message);
            }
            else {
                failedChangePlanMSG(payModel.fromPlanId, payModel.toPlanId, data.Message);
            }
        }).fail(function () {
            failedChangePlanMSG(payModel.fromPlanId, payModel.toPlanId, "Unknown Error, Please try again");
            mixpanel.track("Change Plan Unknown Error");
        });
    }
    else {
        if (result.error.code == "payment_intent_authentication_failure") {
            maAlertMessage("We are unable to authenticate your payment method."
                + " Please make sure you entered the correct details and try again, or choose a different payment method.",
                ["RETRY", "CHANGE PAYMENT METHOD"], function (name) {
                    if (name == "RETRY") {
                        $(".form-messages").html(loading_image_html);
                        mixpanel.track("View SCA popup", { Setup: false });
                        _stripe.handleCardPayment(payModel.SCA.clientSecret, {
                            payment_method: payModel.SCA.paymentMethod
                        }).then(handleScaChangePlan);
                    } else if (name == "CHANGE PAYMENT METHOD") {
                        location.href = "/billing?source_page=ChangePlans&cta=Change Payment Method";
                    } else {
                        $(".form-messages").html("");
                        $('.billing-plans .btn-cta').show();
                        GTM_Send('event', 'change-plan', payModel.fromPlan + " to " + payModel.toPlan, "faild1");
                    }
                }, "Incorrect details", null, "Change Plan Failed");
        } else {
            failedChangePlanMSG(payModel.fromPlanId, payModel.toPlanId, result.error.message);
        }
    }
}

function renderChangePlanPayPalBtn(customID) {
    paypal.Button.render({
        //env: 'sandbox', // Or 'production'
        env: paypalMode == 'live' ? 'production' : 'sandbox',
        style: {
            size: 'responsive',
            color: 'blue',
            shape: 'rect',
            label: 'pay',
            tagline: 'false'
        },

        // Set up the payment:
        // 1. Add a payment callback
        payment: function (data, actions) {
            if (!$(".change-plan-box input[name=plans]:checked").length) {
                payModel.errorMsg = 'Select a plan first!';
                return null;
            }
            $(".form-messages").html(loading_image_html);
            return actions.request.post('/Ajax/PayPal/CreateAgreement', {
                planIdEnc: $('input[name=plans]:checked').val(),
                coupon: $("#CouponId").val(), changePlan: true
            })
                .then(function (res) {
                    // 3. Return res.id from the response
                    payModel.errorMsg = res.Message;
                    if (res.OK) {
                        payModel.usedCoupon = res.Data.coupon;
                        return res.Data.id;
                    }
                    else {
                        $(".form-messages").html('');
                        var planId = $('input[name=plans]:checked').val();
                        failedChangePlanMSG(cursbid, planId, payModel.errorMsg || "Unknown Error, Please try again");
                        return null;
                    }
                });
        },

        validate: function (actions) {
        },

        onClick: function (actions) {
            mixpanel.track("User Click Complete Payment", { "Payment Method": "PayPal" });

            var checkedRadioBtn = $('input[name=plans]:checked');
            var checkedRadioBtnValue = checkedRadioBtn.val();

            if (!checkedRadioBtnValue) {
                maAlertMessage("Please select plan.", ["OK"], function () { });
                return false
            }
        },

        onCancel: function (data, actions) {
            mixpanel.track("User Click to Close Paypal Windows");
            $(".form-messages").html('');
        },

        onError: function (err) {
            // console.log("PayPal error: " + err);
            var planId = $('input[name=plans]:checked').val();
            mixpanelMngo.SendErrorReport("PayPal error: " + err);
            mixpanel.track("Change Plan Unknown Error");
            $(".form-messages").html('');
            failedChangePlanMSG(cursbid, planId, payModel.errorMsg || err || "Unknown Error, Please try again");
        },
        // Show a cancel page or return to cart

        // Execute the payment:
        // 1. Add an onAuthorize callback
        onAuthorize: function (data, actions) {
            $(".form-messages").html(loading_image_html);
            var planId = $('input[name=plans]:checked').val();
            //TODO: Old Plan ID
            return actions.request.post('/Ajax/PayPal/ChangePlan', {
                orderID: data.orderID,
                maPlanId: planId,
                coupon: payModel.usedCoupon
            }).then(function (response) {
                if (response.Data.IsSuccess) {
                    successChangePlanMSG(cursbid, planId, response.Data.Message);
                }
                else {
                    failedChangePlanMSG(cursbid, planId, response.Data.Message);
                }
                $(".form-messages").html("");
            })
        }
    }, customID || '#paypal-button');
}

function PostCancelMembership() {
    var reason = $('input[name=cancellationReason]:checked').val();
    var feedback = $('#otherReason.feedback').val();
    if (page_name.toLowerCase() == "account_settings") {
        showLoader(true);
    }
    else {
        $(".form-messages").html(loading_image_html);
    }
    var url = "/Ajax/Payments/CancelMembership";
    $.post(url, jQuery.param({ reason: reason, feedback: feedback, subscriptionType: ScopedVariables.SubscriptionServiceType }))
        .done(function (data) {
            if (data.OK) {
                maSessionVariables.setVariable("IgnoreFirstTimeAfterCancellation", 1);
                GTM_Send('event', 'payment', "CancelMembership", "success");
            }
            else {
                GTM_Send('event', 'payment', "CancelMembership", "failed");
            }
            $.ajax({
                method: 'POST',
                url: '/Ajax/AjaxLoader/Popup?immediately='+ data.Data,
                data: { popupName: "cancellationPlanConfirmation", entity_id: entity_id, page_name: formatPageName(page_name) },
                success: function (response) {
                    $("#cancellationPlanConfirmation_dialog").remove();
                    $("#discountPlan_dialog").remove();
                    $("body").append(response);
                    $("#cancellationPlanConfirmation_dialog").modal();
                    $('.lose-access-content').html(data.Message);

                    if (!data.OK) {
                        $("#cancellationPlanConfirmation_dialog #modal-title").text("Cancel Your Plan");
                        $("#cancellationPlanConfirmation_dialog #discountPlan").removeClass("popup");
                    }

                    if ($("#cancellationPlanConfirmation_dialog #current-plan").attr("data-val") == "annual" && !data.Data) {
                        mixpanel.track("View Cancel Plan - Refund Popup", {
                            "CTA Name": "Cancel Immediately",
                            "Popup text": "We’re sorry to see you go. You have been refunded",
                            "Identifier": page_name,
                            "Page Name": page_name,
                            "Source Page": formatPageName(page_name)
                        });
                    } else {
                        var message = data.Message;
                        if (data.Data) {
                            message = "You will not be charged any further. You can cancel immediately and get refund.";
                        } else if (data.OK) {
                            message = "You will not be charged any further.";
                        } else if (!data.OK) {
                            message = "Your request has been received.";
                        }

                        mixpanel.track("View Cancel Plan - Confirmation Popup", {
                            "CTA Name": "Cancel Subscription",
                            "Popup text": message,
                            "Identifier": page_name,
                            "Page Name": page_name,
                            "Source Page": formatPageName(page_name)
                        });
                    }

                    if (isMobile()) {
                        document.body.scrollTop = 0;
                        window.scrollTo(0, 0)
                    }
                }
            });
            if (page_name.toLowerCase() == "account_settings") {
                showLoader(false);
            }
            else {
                $(".form-messages").html("");
            }
        })
        .fail(function () {
            if (page_name.toLowerCase() == "account_settings") {
                showLoader(false);
            }
            else {
                $(".form-messages").html("");
            }
            GTM_Send('event', 'payment', method, "failed2");
        });
}

function SendCancellationEmail() {
    if (page_name.toLowerCase() == "account_settings") {
        showLoader(true);
    }
    else {
        $(".form-messages").html(loading_image_html);
    }
    var url = "/Ajax/Payments/SendPlanCancellationEmail";
    $.post(url, jQuery.param({ subscriptionType: ScopedVariables.SubscriptionServiceType }))
        .done(function (data) {
           
        })
        .fail(function () {
            if (page_name.toLowerCase() == "account_settings") {
                showLoader(false);
            }
            else {
                $(".form-messages").html("");
            }
        })
        .always(function () {
            showLoader(false);
        });
}

function openDeletionPopup() {
    $.ajax({
        method: 'POST',
        url: '/Ajax/AjaxLoader/Popup',
        data: { popupName: "deleteAccount", entity_id: entity_id, page_name: formatPageName(page_name) },
        success: function (response) {
            $("body").append(response);
            $("#message.modal,*[data-message]").modal();
            $("#deleteAccount_dialog").modal();

            mixpanel.track("Click to delete account", {
                "CTA Name": "here",
                "Identifier": page_name,
                "Page Name": page_name,
                "Source Page": formatPageName(page_name)
            });

            mixpanel.track("View Delete Account popup - Are you sure?", {
                "Popup text": "Once deleted, you won’t be able to log in again, and all your data will be permanently lost. This action cannot be undone.",
                "Identifier": page_name,
                "Page Name": page_name,
                "Source Page": formatPageName(page_name)
            });
        }
    });
}

function SendAccDeletionRequest() {
    $.ajax({
        method: 'POST',
        url: '/Ajax/AjaxLoader/Popup',
        data: { popupName: "deleteAccountConfirmation", entity_id: entity_id, page_name: formatPageName(page_name) },
        success: function (response) {
            $("#deleteAccount_dialog").remove();
            $("body").append(response);
            $("#message.modal,*[data-message]").modal();
            $("#deleteAccountConfirmation_dialog").modal();

            mixpanel.track("View Delete Account popup - Share your reasons for leaving", {
                "CTA Name": "Click here",
                "Popup text": "Delete Account - Share your rea  sons for leaving",
                "Identifier": page_name,
                "Page Name": page_name,
                "Source Page": formatPageName(page_name)
            });
        }
    });
}

function SendAccDeletionConfirmationRequest() {
    if (!$("#feedbackForm").valid()) {
        return;
    }

    $('.form-messages').css('text-align', 'center');
    $('.form-messages').html(loading_image_html);
    
    var data = {};
    
    data.email = $('#feedbackForm input[name=email]').val();
    data.Reason = $('#deleteAccountConfirmation_dialog input[name=accDeletionReason]:checked').val();
    data.Feedback = $('#otherReasonForDelete.feedback').val();

    
    $.ajax({
        type: "POST",
        url: "/Ajax/UserDeletion/DeleteUserAccount",
        data: data,
        success: function (res) {
            if (res.OK) {
                localStorage.setItem("userDeletion", 1);
                $('.cancel-deletion').trigger('click');
                logout();
            } else {
                $('.form-messages').css({ color: '#cf6766', textAlign: 'left' })
                $('.form-messages').html(res.Message)
            }
        },
        error: function () {
            $('.form-messages').css({ color: '#cf6766', textAlign: 'left' })
            $('.form-messages').html('Some error occured');
        }
    });
}

function showLoader(isShow) {
    if (isShow) {
        $('.account-tab-content').append('<div class="account-settings-loader"><svg class="spinner-container" width = "65px" height = "65px" viewBox ="0 0 52 52"><circle class="path" cx="26px" cy="26px" r="20px" fill="none" stroke-width="4px"/></svg></div>')
    }
    else {
        $('.account-settings-loader').remove();
    }
}

function PostCancelCollectionMembership() {
    var reason = $('input[name=cancellationReason]:checked').val();
    var feedback = $('#otherReason.feedback').val();
    var isBundlePlan = $('#isBundlePlan').val();        
    if (page_name.toLowerCase() == "account_settings") {
        showLoader(true);
    }
    else {
        $(".form-messages").html(loading_image_html);
    }

    var popupName = isBundlePlan == "true" ? "bundleCancellationPlanConfirmation" : "collectionCancellationPlanConfirmation";

    var url = "/Ajax/Payments/CancelMembership";
    $.post(url, jQuery.param({ reason: reason, feedback: feedback, subscriptionType: '84FFB49EF5919E6A' }))
        .done(function (data) {

            var popupText = ''

            $.ajax({
                method: 'POST',
                url: '/Ajax/AjaxLoader/Popup',
                data: { popupName: "MyCollectionCancellationPlanConfirmation", entity_id: entity_id, page_name: formatPageName(page_name) },
                success: function (response) {
                    if (isBundlePlan == "true") {
                        $("#collectionCancellationPlanConfirmation_dialog").remove();
                        $("body").append(response);
                        $("#message.modal,*[data-message]").modal();
                        $("#collectionCancellationPlanConfirmation_dialog").modal();
                        $('.lose-access-content').html(data.Message);
                        popupText = "You will not be charged any further";
                    }
                    else {
                        $("#bundleCancellationPlanConfirmation_dialog").remove();
                        $("body").append(response);
                        $("#bundleCancellationPlanConfirmation_dialog").modal();
                        popupText = "Your request has been received";
                    }

                    mixpanel.track("View Cancel MyCollection - Confirmation Popup", {
                        "CTA Name": "Cancel Subscription",
                        "Popup text": popupText,
                        "Identifier": page_name,
                        "Page Name": page_name,
                        "Source Page": formatPageName(page_name)
                    });

                    if (isMobile()) {
                        document.body.scrollTop = 0;
                        window.scrollTo(0, 0)
                    }
                }
            });
            if (page_name.toLowerCase() == "account_settings") {
                showLoader(false);
            }
            else {
                $(".form-messages").html("");
            }
        })
        .fail(function () {
            if (page_name.toLowerCase() == "account_settings") {
                showLoader(false);
            }
            else {
                $(".form-messages").html("");
            }
            GTM_Send('event', 'payment', method, "failed2");
        });

};
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 TabsModule(elem) {
  var self = this;
  self._elem = $(elem);

  var init = function init() {
    self._elem.on('click', '> .tab-item', onClickTab);

    self.targets = $(self._elem.find(".tab-item").map(function (i, e) {
      return "#" + e.dataset.target;
    }).toArray().join(','));

    if (self._elem[0].dataset && self._elem[0].dataset.sync) {
      self.syncCallback = self._elem[0].dataset.sync;
    }

    return _export;
  };

  function SetActive(elm) {
    if (!$(elm).hasClass("active")) {
      self.targets.removeClass("active");

      self._elem.find(".tab-item").removeClass("active");

      $(elm).addClass("active");
    }
  }

  function onClickTab(e) {
    if (self.syncCallback) {
      var action = eval(self.syncCallback);
      action($(e.target).index());
    }

    if (e.target.dataset) {
      SetActive(e.target);

      if (e.target.dataset.target) {
        if (e.target.dataset.callback) {
          e.target.dataset.callback(e.target.dataset.target);
        } else {
          $("#" + e.target.dataset.target).addClass("active");
        }
      }
    }
  } // On Slide Change


  function syncSlider(event, slick, currentSlide, nextSlide) {
    var tabs = self._elem.find(".tab-item");

    if (tabs.length > nextSlide) {
      SetActive(tabs[nextSlide]);
    }
  }

  var _export = {
    init: init,
    syncSlider: syncSlider
  };
  return _export;
}
//# sourceMappingURL=TabsModule.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 CollapsibleModule(element) {
  //var _touchEvent = 'ontouchstart' in window ? 'touchstart' : 'click';
  var self = this;

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

    self._elem.on('click', '[data-item] h3', onToggle);

    return _export;
  };

  function onToggle(e) {
    var content = this.nextElementSibling;

    if (content.style.maxHeight) {
      // Close
      $(this).removeClass("ui-state-active");
      content.style.maxHeight = null;
    } else {
      // Open
      $(this).addClass("ui-state-active");
      content.style.maxHeight = content.scrollHeight + 25 + "px";
    }
  }

  var _export = {
    init: init
  };
  return _export;
}
//# sourceMappingURL=CollapsibleModule.js.map;
$(document).ready(function () {
  $("[data-module='bubble-toggle']").each(function (i, e) {
    var _null = new bubbleModule(e).init();
  });
});

function bubbleModule(element) {
  var self = this;
  var lastTop = "",
      lastLeft = "";
  var msd = 0,
      msp = 0;
  var run = false;
  var dragDisabled = false;

  var init = function init() {
    self._elem = $(element);
    self._close = self._elem.find(".m-icon-menu-close");
    self._targetContainer = $(self._elem.data("target"));
    if ($.fn.draggable) self._elem.draggable({
      containment: "window",
      start: function start() {
        run = false;
        msd = new Date().getTime();

        self._elem.addClass("activeHold");
      },
      stop: function stop() {
        self._elem.removeClass("activeHold");

        msp = new Date().getTime();
        var td = msp - msd;

        if (td < 100) {
          run = true;
          ToggleWindow();
        }
      }
    }).on("click", function (e) {
      if (!run) {
        ToggleWindow(e);
        e.stopPropagation();
      } else {
        run = false;
      }
    });

    self._close.on('click', function (e) {
      ToggleWindow(e);
      e.stopPropagation();
      e.preventDefault();
      return false;
    }); //self._elem;


    return _export;
  };

  var _export = {
    init: init
  };

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

    if ($t.parents().hasClass("compared-lot") || $t.hasClass("compared-lot") || $t.hasClass("compared-lot-toggle")) {
      e.stopPropagation();
      return false;
    }

    ToggleWindow();
  }

  function ToggleWindow(e) {
    document.body.removeEventListener("click", onClickOut);

    if (self._elem.hasClass("active")) {
      self._targetContainer.hide('slide', {
        direction: "down"
      }, 250);

      $("body > .modal-backdrop").remove();

      self._elem.stop().animate({
        top: lastTop,
        left: lastLeft
      }, 200);

      self._elem.draggable({
        disabled: false
      });

      self._close.fadeOut(200);

      dragDisabled = false;
    } else {
      $("body").prepend("<div class='modal-backdrop'></div>");

      self._close.css("display", "flex").fadeIn(200);

      self._targetContainer.show('slide', {
        direction: "down"
      }, 250);

      lastTop = self._elem.css("top");
      lastLeft = self._elem.css("left");

      self._elem.stop().animate({
        top: "10px",
        left: "73%"
      }, 200);

      document.body.addEventListener("click", onClickOut);

      self._elem.draggable({
        disabled: true
      });

      dragDisabled = true;
    }

    self._elem.toggleClass("active");
  }

  return _export;
}
//# sourceMappingURL=BubbleToggleModule.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().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 DashboardModule = function () {
  function add_event_listeners() {}

  ;

  init = function init() {//add_event_listeners();
  };

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

  go_to_artwork_if_referrer = function go_to_artwork_if_referrer() {
    if (document.referrer.toLowerCase().indexOf("artwork") > -1) {
      var anchorUrl = "/" + document.referrer.replace(/^[a-zA-Z]{3,5}\:\/{2}[a-zA-Z0-9_.:-]+\//, '');
      var anchor = $("a[href='" + anchorUrl + "']");

      if (anchor.length > 1) {
        $('html, body').animate({
          scrollTop: $(anchor[0]).parent().offset().top - 100
        }, 500);
      }
    }
  };

  save_url_with_filters_in_session_storage = function save_url_with_filters_in_session_storage() {
    sessionStorage["dashboard_url_with_filters"] = window.location.href;
    save_artwork_to_sesstion_storage();
    go_to_artwork_if_referrer();
    window['firstRender'] = false;
  }; //save to session storage when i fetch artworks when the dashboard first load


  save_artwork_to_sesstion_storage = function save_artwork_to_sesstion_storage() {
    $('[data-toggle="tooltip"]').tooltip();
    init_Dashboard_RecommendedLots_Slick();
    var list_links = [];
    var temp = $(".list-of-artists-content").children(".preferencedResultsList");

    if (IsPage("my_preferences")) {
      if ($("#dashTabs").find(".dashboard-tab").first().hasClass("active")) {
        sessionStorage.removeItem("links_for_next_prev");
        list_links = findArtwork(list_links, temp);
        var pagingItems = $("div[id*='Paging']").children(".preferencedResultsList");
        $.each($(pagingItems), function (index, value) {
          findArtwork(list_links, value);
        });
      } else {
        list_links = [];
      }
    }

    sessionStorage["links_for_next_prev"] = JSON.stringify(list_links);
  };

  findArtwork = function findArtwork(list_links, items) {
    $.each($(items).children(".v2__page").children(".row").children(".img-box").children("a"), function (key, value) {
      if (value.href.indexOf('/Artwork/') >= 0) {
        var o = {
          url: value.href
        };

        if (list_links.indexOf(o) === -1) {
          list_links.push(o);
        }
      }
    });
    return list_links;
  }; //fetch artworks from artwork page


  fetch_next_artworks = function fetch_next_artworks() {
    var paggingControl = JSON.parse(sessionStorage["paggingControl"]);
    paggingControl.NextPagingData.Page++;
    var sendFunc = (paggingControl.NextPagingData.a || "").length > 1500 ? $.post : $.get;
    var s = sendFunc('/Ajax/AjaxLoader/Paging/?' + paggingControl.QueryString, paggingControl.NextPagingData, function (html, textStatus, jqXHR) {
      var temp = $.parseHTML(html);

      if ($(temp).children(".v2__page").children(".row").children(".img-box").children("a").length > 0) {
        sessionStorage["paggingControl"] = JSON.stringify(paggingControl);
        save_artwork_to_sesstion_storage_from_pagging(html);
      }
    });
    return s;
  }; //save to session storage when i fetch artworks from artwork page


  save_artwork_to_sesstion_storage_from_pagging = function save_artwork_to_sesstion_storage_from_pagging(html) {
    var list_links = [];
    var temp = $.parseHTML(html);

    if (typeof sessionStorage["links_for_next_prev"] !== "undefined") {
      list_links = JSON.parse(sessionStorage["links_for_next_prev"]);
    } //find artwork


    $.each($(temp).children(".v2__page").children(".row").children(".img-box").children("a"), function (key, value) {
      if (value.href.indexOf('/Artwork/') >= 0) {
        var o = {
          url: value.href
        };
        list_links.push(o);
      }
    });
    sessionStorage["links_for_next_prev"] = JSON.stringify(list_links);
  };

  function init_Dashboard_RecommendedLots_Slick() {
    if ($('.recommended-lots-section .lots').length > 0 && !$('.recommended-lots-section .lots.slick-initialized').length > 0) {
      $('.recommended-lots-section .hide-recommendation').click(function (e) {
        $('.recommended-lots-section').hide();
        var date = new Date();
        date.setDate(date.getDate() + 30);
        var item = {
          value: true,
          expiry: date
        };
        localStorage.setItem("hideArtfeedRecommendation", JSON.stringify(item));
      });
      if (!isMobile()) return;
      $('.recommended-lots-section .lots').slick({
        infinite: false,
        slidesToShow: 1,
        slidesToScroll: 1,
        variableWidth: true
      });
    }
  }

  return {
    fetch_next_artworks: fetch_next_artworks,
    save_artwork_to_sesstion_storage: save_artwork_to_sesstion_storage,
    //after_dashboard_load: after_dashboard_load,
    init: init,
    payment: payment,
    setting_prev_next_links: function setting_prev_next_links() {}
  };
}();
//# sourceMappingURL=DashboardModule.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;
function CustomTabsModule(elem) {
    var self = this;
    self._elem = $(elem);

    var init = function () {
        // Listen for click on all tab-item elements inside the module
        self._elem.on('click', '.tab-item', onClickTab);

        // Get all tab IDs from tab-item data-target attributes
        self.tabIds = self._elem.find(".tab-item").map(function (_, el) {
            return el.dataset.target;
        }).get();

        // Match content containers by class tab-target-{id}
        self.targets = $(".tab-content").filter(function () {
            return self.tabIds.some(id => $(this).hasClass("tab-target-" + id));
        });

        if (self._elem[0].dataset && self._elem[0].dataset.sync) {
            self.syncCallback = self._elem[0].dataset.sync;
        }
        hanldeMobileNav();
        return _export;
    };

    function SetActive(elm) {
        if (!$(elm).hasClass("active")) {
            self.targets.removeClass("active");
            self._elem.find(".tab-item").removeClass("active");

            var target = $(elm).data("target");
            $(".tab-target-" + target).addClass("active");
            $(elm).addClass("active");
            
            if (target == "top_artists" && $(".top-artist-section").hasClass('enable-artist-slick')) {
                $('.enable-artist-slick').slick('refresh');
            }
            if ((target == "top_lots" || target == "repeated_sales") && $(".grid-container").hasClass('enable-artwork-slick')) {
                $('.enable-artwork-slick').slick('refresh');
            }

            if ((target == "artist_performance") && $('.blur-text .graphs-tab').length > 0 && isMobile()) {
                if (!$('.graphs-tab').hasClass('slick-initialized')) {
                    $('.graphs-tab').slick({
                        dots: true,
                    })
                }
                else{
                    $('.graphs-tab').slick('refresh')
                }
            }
        } 
    }

    function onClickTab(e) {
        var elm = e.currentTarget;

        if (self.syncCallback) {
            var action = eval(self.syncCallback);
            action($(elm).index());
        }

        if (elm.dataset) {
            SetActive(elm);

            if (elm.dataset.target) {
                if (elm.dataset.callback && typeof window[elm.dataset.callback] === 'function') {
                    window[elm.dataset.callback](elm.dataset.target);
                }
            }
        }
    }

    function syncSlider(event, slick, currentSlide, nextSlide) {
        var tabs = self._elem.find(".tab-item");
        if (tabs.length > nextSlide) {
            SetActive(tabs[nextSlide]);
        }
    }

    function hanldeMobileNav() {
        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;
            }
        }
        var scrollWidth = $("#search-main-nav")[0].scrollWidth;
        var clientWidth = $("#search-main-nav")[0].clientWidth;

    if (leftPos + clientWidth >= scrollWidth - 5)
        $(".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");
    }

    $('.right-nav').on("click", hanldeMobileNav);
    $('.left-nav').on("click", hanldeMobileNav);

    var _export = {
        init: init,
        syncSlider: syncSlider
    };
    return _export;
}
;

function orderArtistDiscoveryImages() {
    MA.ArtistDiscoveryModule.orderArtistDiscoveryImages();
}


var ArtistDiscoveryModule = (function () {
    var row = 0;
    var $grid = null;
    var filterValue = null;
    var artists_list = null;
    var selectedFilters = []
    var sticky = null;
    var artist_discovery_filters = null;
    var selected_filters_row = null
    var gridObj = null;



    function initMasonry() {

        startLoader();

        gridObj = $('.grid').masonry({
            // options
            itemSelector: '.grid-item',
            columnWidth: '.grid-sizer'

        });

        var btnHtml = ""
        if ($(".bottom_paging_tr").length > 0) {
            btnHtml = $(".bottom_paging_tr")[0].outerHTML;
            $(".bottom_paging_tr").remove()


        }

        gridObj.imagesLoaded(function () {
            //  debugger
            gridObj.masonry('reloadItems');
            gridObj.masonry('layout');

            stopLoader();
            $(".artist-discovery-box").css("opacity", "1");
            $("#btn").html(btnHtml);
            InitFollowButtons();
            //var height = $(".list").height();


            //$(".bottom_paging_tr").css("position", "relative");
            //$(".bottom_paging_tr").css("bottom", (-1 * height)+1222);



        });





    }

    function initFilters() {



        var queryFilters = getParameterByName("filters");
        var sortFilters = getParameterByName("sort");

        if (queryFilters) {
            var filtersArray = queryFilters.split("|");
            $('.artist-discovery-filters input[type=checkbox]').each(function () {

                if (filtersArray.indexOf($(this).attr("id")) > -1) {
                    $(this).attr("checked", true);
                    $(this).next(".checkbox-filter").css("text-decoration", "underline");
                    AddFilterToFiltersBar($(this))
                }

            });
            //  row = 0;
            if (sortFilters) {
                $("#sortArtworksList input[value='" + sortFilters + "']").attr("checked", true);
                var elm = $("#sortArtworksList input[value='" + sortFilters + "']").parent()
                elm.addClass("active");
                $(".select-menu").prepend(elm)
                // sortArray()
            }
            //   var filters = getFilters();

            //if (filters) {

            //    addToGrid($grid, filters);
            //    applyFilters(filters);
            //}


            //return filtersArray.length
        }

        //    return 0
    }





    function sticky_artist_discovery_filters() {
        if (window.pageYOffset + 60 > sticky) {
            artist_discovery_filters.addClass("sticky");
            selected_filters_row.addClass("sticky-selected-filters-row");
        } else {
            artist_discovery_filters.removeClass("sticky");
            selected_filters_row.removeClass("sticky-selected-filters-row");
        }
    }


    function add_event_listeners() {
        //  initIsotope();
        // initFiltersButton();
        initFilters();
        initClearAll();
        initRemoveFilter();
        // $(window).scroll(Infinite);
        $(window).scroll(sticky_artist_discovery_filters);
        //  $(window).onscroll = function () { sticky_artist_discovery_filters(); };
    };

    function init() {
        artist_discovery_filters = $(".artist-discovery-filters");
        selected_filters_row = $(".selected-filters-row");
        sticky = artist_discovery_filters[0].offsetTop;
        // GetArtistDiscoveryArtists()
        // initIsotope();
        add_event_listeners();
        //   $('.filter-button-group *[data-filter="*"]').click();
    };

    function cleanList() {
        cleanRowIndex();

        row = 0;

        var elems = $grid.isotope('getItemElements')
        $grid.isotope('remove', elems)
    }

    function resetList() {
        //    row = 0;
        // filterValue = '';

        addToGrid($grid, null);

        $grid.isotope({
            filter: '*'//,
            //    //sortBy: 'name',
            //    //sortAscending: true
        });
    }

    //function initFiltersButton() {
    //    $('.filter-button-group').on('click', 'button', function () {
    //        LoadPageContent
    //    });
    //}

    function LoadPageContent() {
        LoadContent(".artist_discovery_content", null);
    }
    function initClearAll() {
        $('.clear-all').on('click', function () {
            $('.artist-discovery-filters input:checked:not([name="SortList"])').each(function () {
                $(this).attr("checked", false);
                $(this).next(".checkbox-filter").css("text-decoration", "");
                $(".filter-box").remove();

            });
            urlRewrite(getFilters())
            //  sortArtworksList()
            LoadContent(".artist_discovery_content", null)


        });
    }


    //function applyFilters(filters) {
    //    $grid.isotope({
    //        filter: function () {
    //            var rowindex = $(this).data("rowindex");
    //            var artist = artists_list[rowindex];

    //            return checkFilters(artist, filters);
    //        }
    //    });
    //    if ($("#scrollToTop").length > 0) {
    //        $("#scrollToTop").click();
    //    }
    //}

    function resetGridByFilter(btn) {

        var filters = getFilters();


        //console.log(filters)

        $(btn).next(".checkbox-filter").css("text-decoration", $(btn).is(":checked") ? "underline" : "");

        //row = 0;

        //if (filters) {
        //    addToGrid($grid, filters);
        //}

        //  applyFilters(filters);

        $(btn).is(":checked") ? AddFilterToFiltersBar($(btn)) : $(".filter-box[data-filter=" + $(btn).attr('id') + "]").remove();

        urlRewrite(filters)


        if (window.scroll_obj) {
            window.scroll_obj.clearScrollAndPosition();
        }

        $.when($(".filter-button-group").fadeOut())
            .done(function () {
                setTimeout(function () {
                    $(".filter-button-group").css("display", ""); $(".showhide-filters > input[type=checkbox]").attr("checked", false);
                    LoadPageContent();
                }, 200);
            });


    }

    function urlRewrite(filters) {

        var page = window.location.href.split('?')[0];
        // var query = "";

        if (filters.nt) {
            filters.nt.forEach(function (element) {
                page += (page.indexOf('?') >= 0 ? "|" : '?filters=') + element;
            });
        }

        if (filters.ct) {
            filters.ct.forEach(function (element) {
                page += (page.indexOf('?') >= 0 ? "|" : '?filters=') + element;
            });
        }

        if (filters.ap) {
            filters.ap.forEach(function (element) {
                page += (page.indexOf('?') >= 0 ? "|" : '?filters=') + element;
            });
        }

        if (filters.bm) {
            filters.bm.forEach(function (element) {
                page += (page.indexOf('?') >= 0 ? "|" : '?filters=') + element;
            });
        }

        var value = $("#sortArtworksList input[type=radio]:checked").val();

        if (value) {
            page += (page.indexOf('?') >= 0 ? "&sort=" : '?sort=') + value;
        }


        //page = page + query;
        window.history.pushState({
            urlPath: page
        }, "", page);

        //addthis_share.url = page;

        TraceFilters();
    }

    function TraceFilters() {
        var ajaxData = {
            moduleId: "0",
            methodName: "GetArtistDiscoveryPage",
            objId: "0"
        }
        NotifyGA("Artist-Discovery-Page")

    }

    //function cleanRowIndex() {

    //    for (var i = 0; i < artists_list.length; i++) {
    //        if (artists_list[i].rowIndex !== undefined) {
    //            delete artists_list[i].rowIndex;
    //            delete artists_list[i].isShow;
    //        }
    //    }
    //}

    function sortArtworksList() {
        var value = $("#sortArtworksList input[type=radio]:checked").val();

        if (value === -1) {
            return false;
        }

        var prop = '', isAsc = false;

        switch (value) {
            case "name-asc":
                prop = 'SortName';
                isAsc = true;
                break;
            case "name-desc":
                prop = 'SortName';
                isAsc = false;
                break;
            case "activity-Period-asc":
                prop = 'ActivityPeriods';
                isAsc = true;
                break;
            case "activity-Period-desc":
                prop = 'ActivityPeriods';
                isAsc = false;
                break;
            case "trending-asc":
                prop = 'LastActivityIndex';
                isAsc = true;
                break;
            case "trending-desc":
                prop = 'LastActivityIndex';
                isAsc = false;
                break;
            default:
                prop = 'LastActivityIndex';
                isAsc = true;
                break;

        }

        //  sortResults(artists_list, prop, isAsc)

        urlRewrite(getFilters())

        LoadPageContent();
    }

    function getFilters() {
        var filters = {};
        var selectedFilters = []

        $('.artist-discovery-filters input:checked:not([name="SortList"])').each(function () {
            var prefix = $(this).data('prefix');

            if (!filters[prefix]) {
                filters[prefix] = [];
            }

            var id = $(this).attr('id');

            filters[prefix].push(id);
        });

        return filters;
    }

    //function sortArtworksList() {
    //    if (sortArray()) {
    //        var filters = getFilters();

    //        if (Object.getOwnPropertyNames(filters).length > 0) {
    //            cleanList()
    //            addToGrid($grid, filters);
    //            applyFilters(filters);
    //        }
    //        else {
    //            cleanList();
    //            resetList();
    //        }

    //        //console.log(artists_list)
    //    }
    //}

    function initRemoveFilter() {

        $(document).on('click', '.filter-box', function () {// { $('.filter-box').on('click', function () {

            var elm = $(this).closest(".filter-box");
            elm.remove();
            $("label[for='" + $(this).closest(".filter-box").data("filter") + "']").click();
            //Remove this line from here bacause this api have generate duplicate call in api 
            //urlRewrite(getFilters())
            //LoadContent(".artist_discovery_content", null)
        });
    }

    function AddFilterToFiltersBar(btn) {

        var html = '<div class="filter-box filter-box-selected  add-remove-media-btn-div" data-filter="' + $(btn).attr('id') + '"> ' +
            '<span>' + $(btn).next(".checkbox-filter")[0].innerText + '</span>' +
            '<span class="add-remove-media-btn"> </span>' +
            '</div >';

        $(".selected-filters-row > div > div:first-child").append(html);

    }

    function startLoader() {
        $(".loader").html(loading_image_html);

    }

    function stopLoader() {
        $(".loader").html("");
    }

    //function addToGrid(gridObj, filterValue) {


    //    startLoader();
    //    var $content = getArtistFromArrayByFilter(filterValue);

    //    gridObj.append($content);
    //    gridObj.isotope('appended', $content);

    //    gridObj.imagesLoaded(function () {

    //        $grid.isotope('layout');
    //        $content.css("opacity", "1");
    //        stopLoader();

    //        //console.log('imagesLoaded')
    //    });


    //    //checkLoadedImages($($content).find("img").length, function () {
    //    //    $content.each(function () {
    //    //        //$('<img/>')[0].src = this;
    //    //        // Alternatively you could use:
    //    //        (new Image()).src = $(this).find('img').attr('src');

    //    //    });

    //    //    gridObj.isotope('appended', $content);


    //    //    //setTimeout(function () {
    //    //    //    $(".loader").html(loading_image_html);
    //    //    //    $grid.isotope('layout');
    //    //    //    $content.css("opacity", "1");
    //    //    //    $(".loader").html("");
    //    //    //}, 200);


    //    //});


    //}

    //function GetArtistDiscoveryArtists(page) {
    //    page = page || 0;

    //    startLoader();
    //    var url = "/Ajax/Artist_Discovery/GetArtistDiscoveryArtists";

    //    $.post(url, jQuery.param({ IsMobile: isMobile(), Page: page }))
    //        .done(function (data) {
    //            stopLoader();

    //            if (data.IsNotLogin) {
    //                location.href = '/login';
    //            }
    //            else if (data.IsSuccess) {
    //                artists_list = artists_list || [];
    //                artists_list = artists_list.concat(data.Artists)

    //                if (page == 0 && !isMobile()) {
    //                    if (initFilters() == 0) {
    //                        $('.filter-button-group *[data-filter="*"]').click();
    //                        // $("#sortArtworksList input[value='trending-desc']").click();
    //                    }
    //                    GetArtistDiscoveryArtists(page + 1);
    //                }

    //                console.log(artists_list);
    //            }
    //        })
    //        .fail(function () {

    //        });

    //}

    //function checkFilters(artist, filters) {

    //    var isArtistMatch = true;
    //    if (filters) {
    //        if (filters.nt) {
    //            isArtistMatch = isArtistMatch && indexOfArray(filters.nt, artist.Nationalities);
    //        }

    //        if (filters.ct) {
    //            isArtistMatch = isArtistMatch && indexOfArray(filters.ct, artist.ArtCategories);
    //        }

    //        if (filters.ap) {
    //            isArtistMatch = isArtistMatch && indexOfArray(filters.ap, artist.ActivityPeriods);
    //        }

    //        if (filters.bm) {
    //            isArtistMatch = isArtistMatch && indexOfArray(filters.bm, artist.Media);
    //        }
    //    }

    //    return isArtistMatch;
    //}

    function showArtistDetailsPopup(id) {
        $(".img-loader-" + id).html(loading_image_html);
        ajaxLoadPage(null, $(".artistDiscoveryPopupDetails"), id);

    }

    //function GetArtistHtmlItem(artist) {

    //    var follow = "";

    //    if (unique_id) {
    //        follow = '<div preferences="follow" class="btn-cta-row" data-id="' + artist.IdArtist + '" data-type="1" data-name="Ai Weiwei" > <a data-command="follow-' + artist.IdArtist + '" class="btn-cta btn-follow small" >Follow</a></div >';
    //    }
    //    else {
    //        follow = '<div class="btn-cta-row" data-id="' + artist.IdArtist + '" data-type="1" data-name="Ai Weiwei" > <a data-command="follow-' + artist.IdArtist + '" class="btn-cta btn-follow small" href="/login?command=follow-' + artist.IdArtist + '" >Follow</a></div >';
    //    }

    //    return '<div style="opacity:0" class="artist-discovery-box" >' +
    //        '<div class="item grid-item"  data-rowindex="' + artist.rowIndex + '"  >' +
    //        '<div class="item-content" >' +
    //        '<div>' +
    //        '<a class="img-block"  onclick="MA.ArtistDiscoveryModule.showArtistDetailsPopup(\'' + artist.IdArtist + '\')" > <div class="img-loader-' + artist.IdArtist + ' before-popup-loader"></div> <img src="' + artist.Image + '" alt="' + artist.Name + '" title="' + artist.Name + '"> </a>' +
    //        '</div>' +
    //        '<h6 class="name" itemprop= "name" >' +
    //        '<a onclick="MA.ArtistDiscoveryModule.showArtistDetailsPopup(\'' + artist.IdArtist + '\')">' + artist.Name + ' </a>' +
    //        '</h6 >' +
    //        '<span class="artist-city-align" > ' + artist.NationalityAndDates + ' </span > <br /> <br />' +
    //        follow +
    //        '</div >' +
    //        '</div >' +
    //        '</div >'
    //}

    //function getArtistFromArrayByFilter(filters) {
    //    var items = '';
    //    var y = 0;

    //    if (artists_list) {
    //        while (row < artists_list.length && y < 50) {
    //            var value = artists_list[row];

    //            if (!value.isShow && checkFilters(value, filters)) {
    //                value.isShow = true;
    //                value.rowIndex = row;
    //                items += GetArtistHtmlItem(value);
    //                y++;
    //            }
    //            ++row;
    //        }
    //    }


    //    return $(items);
    //}

    //function indexOfArray(valuesArray, searchArray) {
    //    if (searchArray) {
    //        for (var i = 0; i < searchArray.length; i++) {
    //            if (valuesArray.indexOf(searchArray[i]) > -1)
    //                return true;
    //        }
    //    }

    //    return false;
    //}

    //function sortResults(array, prop, asc) {
    //    array = array.sort(function (a, b) {
    //        if (asc) {
    //            return (a[prop] > b[prop]) ? 1 : ((a[prop] < b[prop]) ? -1 : 0);
    //        } else {
    //            return (b[prop] > a[prop]) ? 1 : ((b[prop] < a[prop]) ? -1 : 0);
    //        }
    //    });

    //}

    //function Infinite(e) {

    //    return
    //    var footerSize = isMobile() ? 960 : 330;

    //    if ((e.type == 'scroll') || e.type == 'click') {
    //        var doc = document.documentElement;
    //        var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
    //        var bottom = top + $(window).height();
    //        var docBottom = $(document).height();

    //        if (bottom + footerSize >= docBottom) {

    //            var filters = getFilters();

    //            addToGrid($grid, filters);

    //            $grid.isotope('layout');
    //        }


    //    }
    //}

    //function checkLoadedImages(len, func) {

    //    var imgs = document.images,
    //        counter = 0;

    //    [].forEach.call(imgs, function (img) {
    //        img.addEventListener('load', incrementCounter, false);
    //    });

    //    function incrementCounter() {
    //        counter++;
    //        if (counter === len) {
    //            setTimeout(function () {


    //                func(); $(".loader").html("");
    //            }, 200);
    //        }
    //    }

    //    if (len == 0) {
    //        $(".loader").html("");
    //    }
    //}

    return {
        init: init,
        PageID: 'artist_discovery',
        resetGridByFilter: resetGridByFilter,
        showArtistDetailsPopup: showArtistDetailsPopup,
        sortArtworksList: sortArtworksList,
        orderArtistDiscoveryImages: initMasonry,

    };

})();

function artistDiscoveryPopupDetailsShowModal() {
    $(".artistDiscoveryPopupDetails").modal()
    awDiscoverySlickOn();
    $(".before-popup-loader").html("");

};
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);
        //    }
        //}
    }
} ;
$(document).ready(function () {
  $("[data-search-component]").each(function (i, e) {
    window["gsearch_" + i] = new GlobalSearchModule(i, e).init();
  });
});

function GlobalSearchModule(index, element) {
  var self = this;
  var delayExecutionTimer; //var _apiMap = {
  //    "all": { method: "searchAll", resultPage: "Results" },
  //    "artists": { method: "getArtists", resultPage: "ArtistsResults" },
  //    "artworks": { method: "getArtworks", resultPage: "LotsResults" },
  //    "cities": { method: "getLocations", resultPage: "Results" },
  //    "auctions": { method: "getAuctionVenues", resultPage: "EventsResults" },
  //    "exhibitions": { method: "getAuctionVenues", resultPage: "EventsResults" },
  //    //"gals_mus": { method: "getAuctionVenues", resultPage: "EventsResults" },
  //};

  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];
  var search_filters_mapping = [//{ label: "Cities", prop: "cities", url: "ArtistResults/" },
  {
    label: "Artists",
    prop: "artists",
    displayFooter: true,
    url: "/ArtistsResults"
  }, {
    label: "Auctions",
    prop: "auctions",
    displayFooter: true,
    url: "/EventsResults"
  }, {
    label: "Artwork",
    prop: "artworks",
    displayFooter: true,
    url: "/LotsResults"
  }, {
    label: "Exhibitions",
    prop: "exhibitions",
    displayFooter: true,
    url: "/EventsResults"
  }, {
    label: "Venues",
    prop: "organizations",
    displayFooter: true,
    url: "/OrganizationsResults"
  }, {
    label: "Articles",
    prop: "articles",
    displayFooter: true,
    url: "/ArticlesResults"
  }];

  var init = function init() {
    self._elem = $(element);
    if (self._elem.data("suggestion")) self._enableSuggestions = true; //self._apiEndPoint = _apiMap["all"];

    self._HardCategory = self._elem.data("search-category") || null; //input element

    self._input = self._elem.find("input[type='text']"); //loader element

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

    self._resultsContainer = self._elem.find(".result-block-container"); //search results element

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

    self._filterResults = self._resultsContainer.find(".search-filter-results > ul");
    self._button = self._elem.find("button.search-button");
    SetResultsDimensions();
    InitRotatingText();

    if (IsPage('home')) {
      self._elem.on("click", "input[type='text'], .select-menu, button, .txt-rotate", function (e) {
        window.navbar.searchBar().focus();
        e.stopPropagation();
        return false;
      });

      return null;
    } //Autocomplete api service


    self._api = autocompleteAPIProxy(); //Bindings

    self._elem.on('click', '.select-item', onDropDownChange);

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

    self._elem.on('click', '.txt-rotate', focusSearch);

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

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

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

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

    $("body").click(handleOutsideClick);
    $(window).on('resize', SetResultsDimensions); //self._elem.on('click', '.search-filter-results > ul > li > a', OnfilterResultsClick);

    return _export;
  };

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

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

    if (query.length) {
      var qType = getQTYPE();

      if (qType.toLowerCase() == 'artists') {
        $.ajax({
          method: 'POST',
          url: '/Ajax/AutoComplete/SendSearchResultToMixpanel',
          dataType: "json",
          data: {
            q: self._current_query,
            q_type: qType.toLowerCase(),
            resCount: self._current_result_count || 0,
            searchModule: "Home Search",
            itemIndex: $(this).parent().index(),
            itemLabel: $(this).text()
          }
        });
      }

      window.location.href = "{1}/{2}?q={0}".format(query, getFilterByqType(), StripeAlphaNumeric(query));
    } else self._input.focus();
  } //Set rotating text


  function InitRotatingText() {
    var rText = self._elem.find(".txt-rotate");

    if (rText.length) {
      rText = rText[0];
      var toRotate = rText.getAttribute("data-rotate");
      var period = rText.getAttribute("data-period");

      var typingSpeed = rText.getAttribute("data-speed") || self._typing_speed;

      if (toRotate) {
        new TxtRotate(rText, JSON.parse(toRotate), period, typingSpeed);
      }
    }
  } //Hides or shows the search results
  //true to show results, false to hide, and null to toggle


  function toggleResults(show) {
    show ? self._resultsContainer.addClass("active") : show == null ? self._resultsContainer.toggleClass("active") : self._resultsContainer.removeClass("active");
  } //Deletes the current results container element


  function cleanResults() {
    self._searchResults.html('');

    self._filterResults.html('');
  } //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 (self._keyExemptions.indexOf(e.keyCode) === -1) self._button.addClass("active");
    } else {
      self._button.removeClass("active");
    }

    if (self._input.val().trim().length > 2) {
      if (self._keyExemptions.indexOf(e.keyCode) === -1) {
        execSearch();
      }
    } else {
      clearTimeout(delayExecutionTimer);
      toggleResults(false);
      SetLoader(false);
      cleanResults();
    }
  } //Executes a search with the input text as the query


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

    if (self._last_query != self._current_query) {
      SetLoader(true);

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

      execSearchRequest();
    }
  }

  function execSearchRequest() {
    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') handleSearchResults(data, self._current_query);
      }, getQTYPE());
    }, 500);
  }

  function getQTYPE() {
    var $inp = self._elem.find("[name='q_type']:checked");

    if ($inp && $inp.length) return $inp.val();
    if (self._HardCategory) return self._HardCategory;
    return "all";
  }

  function getFilterByqType() {
    var tp = getQTYPE();
    var sf = search_filters_mapping.filter(function (e) {
      return e.label == tp;
    });
    if (sf && sf.length) return sf[0].url;
    return "/Results";
  } //Fires after execSearch(), renders the results container element


  function handleSearchResults(data, queryVal) {
    var dataToMap = data.data || data;
    self._current_result_count = dataToMap.length;
    var html = dataToMap.map(function (item) {
      return constructResultItem(item, queryVal);
    });
    if (!html.length) html = "<li><a>No results found</a></li>";
    var filter_html = "";

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

    if (!isMobile() && !self._HardCategory) {
      var addedFilter = false;

      for (var i in search_filters_mapping.filter(function (e) {
        return e.displayFooter == true;
      })) {
        var f = search_filters_mapping[i];

        if (data[f.prop] > 0) {
          if (!addedFilter) {
            filter_html += "<a>Filter by: </a>";
            addedFilter = true;
          }

          filter_html += "<li><a href='{2}?q={3}' data-prop='{0}'>{1}</a></li>".format(f.prop, f.label, f.url, encodeURIComponent(queryVal));
        }
      }

      self._filterResults.html(filter_html);
    }

    self._searchResults.html(html);

    toggleResults(true);
  } //Constructs the HTML of a search result item


  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);
    }

    return "<li><a href='{0}'>{1}</a></li>".format(item.url, itemText);
  } //Old event for handling click on bottom filter results


  function OnfilterResultsClick() {
    var cat = $(this).data('prop');

    self._elem.find(".select-menu input[type=radio][data-section='" + cat + "']").parent().click();

    self._elem.find(".select-menu").removeClass("show");

    execSearch();
  } //Sets results element dimensions


  function SetResultsDimensions() {
    var selectWidth = self._elem.find(".select-item:first").width();

    if (self._elem.find(".select-menu.no-resize").length) selectWidth = initSize(self._elem.find(".select-menu.no-resize")[0]);

    self._resultsContainer.css("left", selectWidth + "px").css("top", "100%").css("width", self._elem.width() - selectWidth + "px");
  } //Initializes search dropdown width


  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 = 18;

    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";
    return longest + paddingRightWidth;
  } //On dropdown filter change


  function onDropDownChange() {
    var first = $(this).parent().find(".select-item")[0];
    if (this == first) return true; //if (first && first.firstElementChild && first.firstElementChild.value)
    //    self._apiEndPoint = _apiMap[first.firstElementChild.value] || _apiMap["all"];

    if (self._input.val().length > 2) execSearch();
  } //On search result item click


  function onResultItemClick() {
    $.ajax({
      method: 'POST',
      url: '/Ajax/AutoComplete/SendSearchResultToMixpanel',
      dataType: "json",
      data: {
        q: self._current_query,
        q_type: self._current_filter,
        resCount: self._current_result_count || 0,
        searchModule: "Home Search",
        itemIndex: $(this).parent().index(),
        itemLabel: $(this).text()
      }
    });
  } //Focus on search input


  function focusSearch() {
    self._input.focus();
  } //On search input focus


  function onInputFocus() {
    if (self._input.val().trim().length > 2 && self._current_query.length > 2) toggleResults(true);
  } //Handles clicks outside the search to minimize the search results container


  function handleOutsideClick(e) {
    if ($(e.target).closest(self._elem).length > 0) {
      return;
    }

    toggleResults(false);
  }

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

  var _export = {
    init: init,
    toggleResults: toggleResults,
    execSearch: execSearch
  };
  return _export;
}
//# sourceMappingURL=GlobalSearchModule.js.map;
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;
"use strict";

function ArtworkScaleModule(n) {
  function h() {
    $("body, .scale-artwork-container span.newclose").off("click", u);
    GTM_Send("event", GTM_EVENT_TYPE.ARTWORK, "Click to view dimensions");
    mixpanel.track("Click to view dimensions");
    t._wrapper && t._wrapper.length ? t._wrapper.fadeIn(200, null, function () {
      i();
    }) : (t._wrapper = $(a()).insertAfter(t._elem), f = $(".scale-artwork-container img").length, r = 0, $(".scale-artwork-container img").load(c), setTimeout(i, 200));
  }

  function c() {
    if (r++, r == f) {
      $(window).on("resize", l);
      i();
    }
  }

  function l() {
    clearTimeout(e);
    e = setTimeout(i, 200);
  }

  function u(n) {
    return t._wrapper.fadeOut(200), $("body, .scale-artwork-container span.newclose").off("click", u), $(n.target).parents("[href]").length ? void 0 : (n.preventDefault(), !1);
  }

  function a() {
    var n = '<div class="scale-artwork-container"><div class="scale-close"><span class="newclose"><\/span><\/div><div class="scale-center"><div class="hider"><\/div>';
    return n += v(), n += p(), n + "<\/div><\/div>";
  }

  function v() {
    var n = '<div class="scale-avatar border-black-color">';
    return n += '<span class="avatar-height text-russian-black">{0}<small>M<\/small><br />{1}<\/span>'.format(t.avatarResource.height_c / 100, b(t.avatarResource.height_c)), n += '<img style="height:{1}px" src="{0}" />'.format(t.avatarResource.src, t.defaultHeight), n + "<\/div>";
  }

  function y() {
    t.scalingRatio = 1;
    var n = window.screen.width > 679 ? $(t._elem).offset().left : window.screen.width,
        i = (t.cm_height.toFixed(1).length + t.in_height.toFixed(1).length) * 12,
        f = n - (85 + i),
        r = t.defaultHeight / 2,
        u = t.cm_width,
        e = r + u;
    f < e ? t.scalingRatio = f / e : n > (r + u + i) * 1.6 ? t.scalingRatio = 1.6 : n > (r + u + i) * 1.3 && (t.scalingRatio = 1.3);
  }

  function p() {
    var n = "",
        i;
    return t.cm_height < t.avatarResource.height_c / 2 ? n = "align-self: baseline;margin-top: 7%;" : t.cm_height < t.avatarResource.height_c && (n = "align-self: baseline;"), i = '<div class="scale-artwork-image" style="{4}"><span class="width_c">{0} cm<\/span><span class="height_c">{1} cm<\/span><span class="width_i">{2}"<\/span><span class="height_i">{3}"<\/span>'.format(+t.cm_width.toFixed(1), +t.cm_height.toFixed(1), +t.in_width.toFixed(1), +t.in_height.toFixed(1), n), i + '<div class="artwork-placeholder border-black-color" style="width:{0}px;height:{1px}"><\/div><\/div>'.format(t.cm_width * t.scalingRatio, t.cm_height * t.scalingRatio);
  }

  function w(n) {
    return Math.floor(Math.random() * Math.floor(n));
  }

  function b(n) {
    var t = n * .3937 / 12,
        i = Math.floor(t),
        r = Math.round((t - i) * 12);
    return i + "&prime;" + r + "&Prime;";
  }

  function i() {
    y();
    t._avatarImage = t._wrapper.find(".scale-avatar > img");
    t._artworkImage = t._wrapper.find(".scale-artwork-image > .artwork-placeholder");
    t._scaleCenter = t._wrapper.find(".scale-center");
    t.cm_height >= t.avatarResource.height_c ? t._scaleCenter.css("align-items", "flex-end") : t._scaleCenter.css("align-items") == "flex-end" && t._scaleCenter.removeAttr("style");
    t.baseHeightPX = t._avatarImage.height();
    t.heightRatio = t.avatarResource.height_c / t.baseHeightPX;

    t._artworkImage.height(t.cm_height * t.scalingRatio);

    t._artworkImage.width(t.cm_width * t.scalingRatio);

    t._avatarImage.height(t.defaultHeight * t.scalingRatio);

    t._wrapper[0] && t._wrapper[0].scrollIntoView !== undefined && t._wrapper[0].scrollIntoView({
      behavior: "smooth",
      block: "center"
    });

    t._wrapper.on("click", function (n) {
      return n.preventDefault(), !1;
    });

    $("body, .scale-artwork-container span.newclose").on("click", u);
    $(".hider").fadeOut(250);
  }

  var t = this,
      r = 0,
      f = 0,
      e,
      o,
      s;
  return t.avatarResources = [{
    src: "https://media.mutualart.com/Imgs/SVG/man.png",
    height_c: 180,
    height_p: 720
  }, {
    src: "https://media.mutualart.com/Imgs/SVG/business-man.png",
    height_c: 180,
    height_p: 720
  }, {
    src: "https://media.mutualart.com/Imgs/SVG/woman.png",
    height_c: 180,
    height_p: 720
  }, {
    src: "https://media.mutualart.com/Imgs/SVG/businesswoman.png",
    height_c: 180,
    height_p: 720
  }], o = function o() {
    if (t._elem = $(n), t.cm_width = parseFloat(t._elem.data("width-cm")), t.cm_height = parseFloat(t._elem.data("height-cm")), t.in_width = parseFloat(t._elem.data("width-in")), t.in_height = parseFloat(t._elem.data("height-in")), t.resource = t._elem.data("resource"), t.scalingRatio = 1, !t.cm_width || !t.cm_height || !t.in_width || !t.in_height) {
      t._elem.remove();

      return;
    }

    t.avatarResource = t.avatarResources[w(t.avatarResources.length)];
    t.defaultHeight = t.avatarResource.height_c;

    t._elem.on("click", h);

    return s;
  }, s = {
    init: o,
    ReScale: i
  };
}
//# sourceMappingURL=ArtworkScaleModule.min.js.map;
$(document).ready(function () {
    showIdelPopup($('.artwork-recommend-artists-idle-user'), true);
    InitMoreLotSlick();
});

function changeSimilarArtworkScore(idArtwork, idArtworkSimilar, pros) {
    var url = "/Ajax/Artwork/ChangeSimilarArtworkScore";
    var notuser = $('#notuser').val();
    if (notuser) {
        maAlertMessage("are you sure?", ["Yes", "No"], function (selectedBtn) {
            switch (selectedBtn) {
                case "Yes":
                    $.post(url, { idArtwork: idArtwork, idArtworkSimilar: idArtworkSimilar, pros: pros })
                        .done(function (data) {
                            if (data.IsSuccess) {
                                location.reload();
                            } else {
                                maAlertMessage(data.Message, ["OK"], function () { });
                            }
                        })
                        .fail(function () {
                        });
                    break;
            }
        });
    }
    else {
        $.post(url, { idArtwork: idArtwork, idArtworkSimilar: idArtworkSimilar, pros: pros })
            .done(function (data) {
                if (data.IsSuccess) {
                    $(".pros").fadeOut();
                    $(".cons").fadeOut();
                    maAlertMessage(data.Message, ["OK"], function () { });
                } else {
                    maAlertMessage(data.Message, ["OK"], function () { });
                }
            })
            .fail(function () {
            });
    }
}

function InitMoreLotSlick() { 
    var $slider = $('#artistMoreLot');
    var itemCount = $slider.children().length;
    var enableCenterMode = itemCount > 3;
    var enableCenterModeMobile = itemCount >= 2;

    $('#artistMoreLot').slick({
        arrows: true,
        dots: false,
        infinite: true,
        slidesToShow: 4,
        slidesToScroll: 4,
        variableWidth: false,
        prevArrow: '<a class="nav-hov active left" ><i class="m-icon-keyboard_arrow_left"></i></a>',
        nextArrow: '<a class="nav-hov active right" ><i class="m-icon-keyboard_arrow_right"></i></a>',
        responsive: [
            {
                breakpoint: 1441,
                settings: {
                    slidesToShow: 4,
                    slidesToScroll: 3,
                    centerPadding: '40px',
                }
            },
            {   
                breakpoint: 1281,
                settings: {
                    slidesToShow: 3,
                    slidesToScroll: 2,
                    centerPadding: '80px',
                }
            },
            {
                breakpoint: 1025,
                settings: {
                    dots: false,
                    arrows: false,
                    slidesToShow: 3,
                    slidesToScroll: 1,
                    centerPadding: '80px',
                    centerMode: enableCenterMode
                }
            },
            {
                breakpoint: 800,
                settings: {
                    dots: false,
                    arrows: false,
                    slidesToShow: 3,
                    centerMode: enableCenterMode,
                    slidesToScroll: 1,
                    centerPadding: '80px',
                }
            },
            {
                breakpoint: 480,
                settings: {
                    dots: false,
                    arrows: false,
                    slidesToShow: 1,
                    centerMode: enableCenterModeMobile,
                    slidesToScroll: 1,
                    centerPadding: '55px',
                }
            },           
        ]
    });
};
$(document).ready(function () {
  $("[data-sale-module]").each(function (i, e) {
    window["salemodule_" + i] = new UnlockSaleModule(i, e).init();
  });
});

function UnlockSaleModule(index, element) {
  var self = this;

  var init = function init() {
    self._elem = $(element);
    self._dialog = self._elem.find(".modal-dialog");
    self._viewArtworkButton = self._elem.find(".view-artwork");
    self._unlockArtworkNextButton = self._elem.find(".unlock-artwork-next");

    self._viewArtworkButton.on('click', onViewUnlockedArtwork);

    self._elem.on('click', '.unlock-artwork-next', UnlockStepOne);

    self._elem.on('show.bs.modal', function (e) {
      self._viewArtworkButton.attr("disabled", "");

      self._elem.find(".box-loader").animate({
        height: 'auto',
        opacity: '1',
        margin: '25px auto'
      }, 500);

      if (self.enableTimeout) {
        clearTimeout(self.enableTimeout);
        self.enableTimeout = setTimeout(EnableViewButton, 30000 - 100);
      }
    });

    return _export;
  };

  function UnlockStepOne(e) {
    $(e.target).attr("disabled", "");

    self._elem.find(".unlock-prog").addClass("active");

    self._elem.find(".intellignce-upgrade-banner").remove();

    mixpanel.track("Free unlock popup - Click unlock this artwork");
    GTM_Send('event', 'artwork', 'Free unlock popup - Click unlock this artwork');
    $.post("/Ajax/Artwork/UnlockArtwork/", {
      artworkID: entity_id
    }, function (res) {
      if (res.OK) {
        self._viewArtworkButton.attr("disabled", "");

        self._dialog.addClass("next-stage");

        self._dialog.find(".unlock-stage-2 .progress").addClass("active");

        self.unlockID = res.Data;
        self.enableTimeout = setTimeout(EnableViewButton, 30000 - 100);
      } else {
        $("<div class='intellignce-upgrade-banner'>" + res.Message + "</div>").insertAfter(".unlock-prog");
      }

      self._elem.find(".unlock-prog").removeClass("active");
    });
  }

  function onViewUnlockedArtwork(e) {
    window.location.href = window.location.pathname + "?freeunlock=" + self.unlockID;
  }

  function EnableViewButton() {
    self._viewArtworkButton.removeAttr("disabled");

    self._elem.find(".box-loader").animate({
      height: '0',
      opacity: '0',
      margin: '0 auto'
    }, 500);
  }

  var _export = {
    init: init,
    elem: self._elem
  };
  return _export;
}
//# sourceMappingURL=UnlockSaleModule.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;

var auctionGatePage = {
    init: function () {
        InitPage();
    },
    PageID: ['auction_search']
};

function InitPage() {
    // load sale-date from query 
    let dicPrms = parseQueryParams();
    if (dicPrms['saleDate']) {
        SetSaleDate(dicPrms['saleDate']);
    }
    else {
        ClearSaleDate();
    }

    // [event] on sale date selected
    RegisterOnSelectedSaleDateEvent();
    NotifyGA('auction-lot-search-page');
}

function RegisterOnSelectedSaleDateEvent() {
    $('.auction-search-sale-date .input-wrapper input:text').on('change', function () {
        refreshResult();
    });
}

function GetSaleDate() {
    var calFromDate = $('.auction-search-sale-date .input-daterange #from');
    var calToDate = $('.auction-search-sale-date .input-daterange #to');


    var fromDate = !calFromDate[0] || calFromDate.val().trim() == '' ? null : calFromDate.datepicker('getDate');
    var toDate = !calToDate[0] || calToDate.val().trim() == '' ? null : calToDate.datepicker('getDate');

    return {
        from: !fromDate ? null : $.datepicker.formatDate('yy-mm-dd', fromDate),
        to: !toDate ? null : $.datepicker.formatDate('yy-mm-dd', toDate)
    };
}

function ClearSaleDate() {
    $('.auction-search-sale-date .input-daterange #from').val('');
    $('.auction-search-sale-date .input-daterange #to').val('');
}

function SetSaleDate(SaleDate) {
    if (SaleDate) {
        var from = SaleDate.split('_')[0];
        var to = SaleDate.split('_')[1];

        if (from)
            $('.auction-search-sale-date .input-daterange #from').datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', from));

        if (to)
            $('.auction-search-sale-date .input-daterange #to').datepicker('setDate', $.datepicker.parseDate('yy-mm-dd', to));
    }
}

function refreshResult(module, callback) {
    $(".page-content").focus();
    var dicPrms = parseQueryParams();
    var extraParams = '';

    var isModuleOverride = (module == null || module["_overrideRefreshcommand"]);
    var isNotSortEle = module != null ? !module._elem.hasClass('filter-sort') : true;
    var isFilterOnChange = (module == null || module["filterOnChange"]);

    if ((IsMobileView() || $("body").hasClass("mobile-always-filter")) && !isModuleOverride && !window['firstRender'])
        return;

    if (!window['firstRender'] && !isFilterOnChange && isNotSortEle) {
        return;
    }

    if (window['firstRender']) { 
        window['firstRender'] = false;
    }

    if (IsPage('my_collection/artisttrends')) {
        return;
    }
    if (IsPage('artist_graphs')) {
        return;
    }

    //if (PageID == 101101 && module == null) {
    //    console.log(module);
    //    return;
    //}
    // sale date param    
    
    var saleDate = GetSaleDate();
    if (saleDate.from || saleDate.to)
        extraParams += 'saleDate'.concat('=', saleDate.from || '', '_', saleDate.to || '');

    // sort param
    if (dicPrms['Params'])
        extraParams += '&Params'.concat('=', dicPrms['Params']);

    //$('html,body').animate({ scrollTop: 100 }, 300);
    
    filtersSelectQueue.push(function () {
        // modules params
        //if (getParameterByName("edit") == "1")
        //    extraParams += "&edit=1";
        manager.setQuery(extraParams);
        manager.setFilterBedges();
        LoadContent(null, null, callback);
        TraceSearch();
    });

    setTimeout(function () {
        if (filtersSelectQueue.length > 0) {
            filtersSelectQueue.pop()();
            filtersSelectQueue = [];
        }
    }, 100);
}

var filtersSelectQueue = [];

function NotifyGA(title) {
    try {
        GTM_PageView({
            title: title,
            hitType: 'pageview'
        })
        //GTM_Send('event', null, null, null, null, null, null, {
        //    title: title,
        //    hitType: 'pageview',
        //    page: location.pathname,
        //    location: location.href
        //});
        //ga('send', {
        //    title: title,
        //    hitType: 'pageview',
        //    page: location.pathname,
        //    location: location.href
        //});
    }
    catch (e) { }
}

function TraceSearch(containerSelector) {
    containerSelector = containerSelector || '.dashboard_list';

    var resultContainer = $(containerSelector);
    if (resultContainer.length == 0)
        return;

    // { url, controllerMethod, element, moduleId, methodName, objId, tabOrder, clickcallback }
    var ajaxDataJSON = resultContainer.attr('ajaxmoduledata');
    var ajaxData = JSON.parse(ajaxDataJSON);
}

function LoadContent(containerSelector, resultsCountSelector, callback) {
    containerSelector = containerSelector || '.dashboard_list';
    resultsCountSelector = resultsCountSelector || 'span#resultsCount, span.resultsCountText';

    var resultContainer = $(containerSelector);
    if (resultContainer.length == 0)
        return;
    // { url, controllerMethod, element, moduleId, methodName, objId, tabOrder, clickcallback }
    var ajaxDataJSON = resultContainer.attr('ajaxmoduledata');
    var ajaxData = JSON.parse(ajaxDataJSON);

    var proxy = filtersAPIProxy();
    manager.setFilterBedges();
    proxy.getPageContent(null, resultContainer, ajaxData, function (status, data) {
        /// console.log('[' + status + '] ' + data);
        if ($(".artist-filter-save").length) {
            $(".artist-filter-save").css("display", manager.hasQuery() ? "block" : "none");
            var upcomingLotFilter = IsPage('auction_search') && manager.hasQuery() && manager.upcomingFilterQueryCount() < 2;
            $(".artist-filter-save .filter_save_step_1 a").css("background-color", upcomingLotFilter ? "gray" : "#131721");
            $(".artist-filter-save .filter_save_step_1 a").attr("data-tooltip", upcomingLotFilter ? "Add more criteria to activate the filter" : "");
            $(".artist-filter-save .filter_save_step_1 a").attr("onclick", upcomingLotFilter ? "" : "ArtistModule.open_step_three()");
            if (upcomingLotFilter)
                $(".artist-filter-save .filter_save_step_1 a").addClass("v2__tooltip--left");
            else
                $(".artist-filter-save .filter_save_step_1 a").removeClass("v2__tooltip--left");
        }

        var html = data;
        if (status == 'ERROR')
            html = '<span style="color:red">' + data + '</span>';

        // ajax html content
        resultContainer.html(html);
        stopLodder(resultContainer);
        if (callback && typeof callback == "function")
            callback();

        if (window['InitExpanderModules'])
            InitExpanderModules(resultContainer);
        // counter 
        MA.PopulateResultsCount();
        var rowcount = parseInt(window['_resultsCount'] || 0);
        if (resultContainer != null) {
            var resultCountParentContainer = $('.result-container');
            const queryCount = manager.queryCount();
            var showRequired = false; // IsPage('artist_artworks') && queryCount > 0;
            var resultCountContainer = $(resultsCountSelector);
            if ((IsPage('auction_search') && rowcount <= 0) || (queryCount == 0 && !IsPage("my_collection/management"))) {
                resultCountContainer.html('');
                if (resultCountParentContainer.length > 0) {
                    resultCountParentContainer.removeClass('has-result');
                }
            } else if (IsPage("my_collection/album") && rowcount <= 0) {
                rowcount = parseInt(_countArtworkPick);
                resultCountContainer.html(resultText(rowcount, showRequired));
                if (resultCountParentContainer.length > 0) {
                    resultCountParentContainer.removeClass('has-result');
                }
            }
            else {
                resultCountContainer.html(resultText(rowcount, showRequired));
                if (resultCountParentContainer.length > 0) {
                    resultCountParentContainer.addClass('has-result');
                }
            }
            resultCountContainer.css("color", showRequired ? "#cf6766" : "#444444");
            if (rowcount < 3) {
                $(".showhide-filters").removeClass("absolute");
            }
        }
        EmitEvent('OnAjaxLoad', { target: resultContainer });
    });
}

function resultText(rowcount, showRequired) {
    showRequired = typeof showRequired === 'undefined' ? false : showRequired;
    let sr = showRequired ? ' Filtered' : '';
    
    const rowCountText = formatNumberWithCommas(rowcount);
    if (!showRequired && rowcount == 5000) {
        return 'Top ' + rowCountText + ' Results';
    } else if (!showRequired && rowcount > 0) {
        return rowCountText + ' Results';
    } else if (showRequired && rowcount >= 10000) {
        return 'Top ' + rowCountText + sr + ' Results';
    } else if (rowcount == 0) {
        return 'No Results';
    } else {
        return rowCountText + sr + ' Results';
    }
}

function LoadCount() {
    var resultsCountSelector = 'span#resultsCount, span.resultsCountText';
    var rowcount = parseInt(window['_resultsCount'] || 0);
    var $resultCountContainer = $(resultsCountSelector);
    if ($resultCountContainer.length) {
        $resultCountContainer.html((rowcount == 5000 ? 'Top ' + rowcount : rowcount == 0 ? 'No' : rowcount) + ' Results');
    }
}

function getArtistsForAutoComplete(module) {
    /*
    var data = [...];
    var phrase = module.getSearchPhrase();
    module.bindItems(data.filter(x => x.includes(phrase)));
    */

    var proxy = autocompleteAPIProxy();
    var phrase = module.getSearchPhrase();
    proxy.getArtists(phrase, function (status, data) {
        // console.log('[' + status + '] ' + data);

        if (status == 'OK')
            module.bindItems(data.map(function (x) {
                return { text: x.name, value: x.encodedId }
            }));
    }, getParameterByName("showFollowed"));
}

function getAuctionVenuesForAutoComplete(module) {
    var proxy = autocompleteAPIProxy();
    var phrase = module.getSearchPhrase();
    proxy.getAuctionVenues(phrase, function (status, data) {
        // console.log('[' + status + '] ' + data);

        if (status == 'OK')
            module.bindItems(data.map(function (x) {
                return { text: x.name, value: x.encodedId }
            }));
        ///module.bindItems(data.map(function (x) { return x.name; }));
    });
}

function getArtworksForAutoComplete(module) {
    var proxy = autocompleteAPIProxy();
    var phrase = module.getSearchPhrase();
    proxy.getArtworks(phrase, function (status, data) {
        // console.log('[' + status + '] ' + data);

        if (status == 'OK')
            module.bindItems(data.map(function (x) { return x.name; }));
    });
}

function getLocationsForAutoComplete(module) {
    var proxy = autocompleteAPIProxy();
    var phrase = module.getSearchPhrase();
    proxy.getLocations(phrase, function (status, data) {
        // console.log('[' + status + '] ' + data);

        if (status == 'OK')
            module.bindItems(data.map(function (x) {
                return { text: x.name, value: x.encodedId }
            }));
    });
}

function parseQueryParams() {
    var result = [];

    var query = document.location.search.replace('?', '');
    if (query.trim() == 0)
        return result;

    query = decodeURIComponent(query);

    var arr = query.split('&');
    for (i in arr) {
        var param = arr[i].split('=');
        result[param[0]] = param[1];
    }

    return result;
};
(function () {
    if (window.innerWidth <= 960) {
        var active = $('.link-tabs-wrapper > div.active');
        if (active[0] == null) return;

        $('.link-tabs-wrapper').prepend(active);
        active.find('a').removeAttr('href');
        active.click(function (x) {
            var state = active.attr('state') || '';
            var newState = state == 'open' ? 'closed' : 'open';
            active.attr('state', newState);
            $('.link-tabs-wrapper > div').not('.active').css('display', newState == 'open' ? 'block' : 'none');
        });
    }
})();;

/*
             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 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();
        }
    }
});;
//$(document).ready(function () {
    //if (ScopedVariables.promoPlan && !ScopedVariables.paid_user && window['unique_id'] && isAbUser() && $("body").hasClass("is-not-accessible-for-free")) {
    //    var counter = maStorageVariables.getVariable("paymentPayWallViewsCount") || 0;
    //    var cancellations = maStorageVariables.getVariable("paymentPayWallCancellations") || 0;
    //    var limit = 5;

    //    if (cancellations >= 2) {
    //        return;
    //    }

    //    counter++;
    //    maStorageVariables.setVariable("paymentPayWallViewsCount", counter);


    //    if (counter >= limit) {
    //        cancellations++;

    //        $("body").addClass("disable-mobile-refresh");
    //        var btnHTML = '<button style="display:none;" class="ma-btn primary popup" data-id="payment" data-query="idplan={0}"></button>'
    //            .format(ScopedVariables.promoPlan);
    //        var $btn = $(btnHTML).appendTo("body");
    //        $btn.click().remove();
    //        window.MA.poppayment = true;
    //        maStorageVariables.setVariable("paymentPayWallViewsCount", 0);
    //        maStorageVariables.setVariable("paymentPayWallCancellations", cancellations);
    //    }
    //}
//});;
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 }({});
;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

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; }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread 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 _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }

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

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 ArtworkRepeatedSales() {
  var self = this;
  self.pageSize = 10;
  self.chartData = null;
  self.isLoading = false;
  self.artworkslick = null;
  self.loadedArtworks = [];
  self.slickToArtworkId = null;
  self.repeateSaleGroupId = null;
  self.chartName = "ChartArtworkRepeatedSales";
  self.lister = $('#repeated-sale-lister-caption');
  self.chartGraphEle = $('#ChartArtworkRepeatedSales');

  init = function init() {
    GetChartArtworkRepeatedSales();
    $(document).ready(function () {
      $(".reset-repeted-sales").on("click", function (e) {
        chart = null;
        excludedChartItems = [];
        GetChartArtworkRepeatedSales(true);
        var els = document.getElementsByClassName("hidefromgraph");
        [].forEach.call(els, function (el) {
          el.innerHTML = "HIDE FROM GRAPH";
        });
      });

      if ($("#RepeatedSalesChartComponent .graph-nonpremium-overlay").length > 0 && $("#RepeatedSalesChartComponent .chart-component").length > 0) {
        $("#RepeatedSalesChartComponent .nonpremium-overlay").prependTo("#RepeatedSalesChartComponent .chart-component");
      }
    });
  };

  var credits = {
    text: "Copyright MutualArt.com",
    href: "https://mutualart.com"
  };
  var excludedChartItems = [];
  var chart = null;
  var slickDirections = {
    Left: 0,
    Right: 1
  };
  $(window).resize(reflow());

  function ToggleChartLoader(chart, show) {
    if (show) {
      $("#" + chart).prepend('<div class="ring-loader"> <svg class="spinner-container" width="65px" height="65px" viewBox="0 0 52 52"> <circle class="path" cx="26px" cy="26px" r="20px" fill="none" stroke-width="4px"/> </svg> </div>');
    } else {
      $("#" + chart + " .ring-loader").fadeOut(500, function () {
        $(this).remove();
      });
    }
  }

  function initSlickForRepeatedSales(slickItems) {
    jQuery.each(slickItems, function (index, value) {
      $('.repeated-sale-slider').append(value.content);
    });
    var initialSlide = slickItems.findIndex(function (item) {
      return item.id === window["entity_id"];
    });
    self.artworkslick = $('.repeated-sale-slider').slick({
      arrows: true,
      infinite: false,
      slidesToScroll: 1,
      slidesToShow: 1,
      centerMode: true,
      centerPadding: 0,
      swipeToSlide: true,
      focusOnSelect: true,
      variableWidth: false,
      initialSlide: initialSlide > 0 ? initialSlide : 0,
      prevArrow: "<a class='slicks-left slick-arrow slide-arrow prev-arrow'><i class='m-icon-keyboard_arrow_left'></i></a>",
      nextArrow: "<a class='slicks-right slick-arrow slide-arrow next-arrow'><i class='m-icon-keyboard_arrow_right'></i></a>"
    });
    bindSliderChangeEvents();
    $('[data-toggle="tooltip"]').tooltip({
      container: 'body'
    });

    if (self.artworkslick && self.artworkslick.length > 0) {
      self.artworkslick.on('beforeChange', function (event, slick, currentSlidePosition, nextSlidePosition) {
        var slickToId = $(slick.$slides.get(nextSlidePosition)).find('.repeated-sale-card').attr('id');
        var direction = getSlickDirection(currentSlidePosition, nextSlidePosition);

        if (slickToId && self.currentSlideId !== slickToId) {
          selectChartItem(true, slickToId, true, direction);
          preLoadPagesAfterLoadIfRequired();
        }
      });
    }
  }

  function getPreloadPageNo() {
    var pageToLoad = 0;

    if (typeof self.currentSlideId != 'undefined') {
      var graphArtwork = self.graphArtworks.find(function (item) {
        return item.id === self.currentSlideId;
      });

      if (typeof graphArtwork != 'undefined') {
        var index = graphArtwork.index;
        var ceil = Math.ceil(index / 10) * 10;
        var floor = Math.floor(index / 10) * 10;
        var ceilDiff = Math.abs(index - ceil);
        var floorDiff = Math.abs(index - floor);

        if (ceilDiff <= 1 || floorDiff <= 1) {
          pageToLoad = graphArtwork.pageNo + (Math.abs(index - ceil) < Math.abs(index - floor) ? 1 : -1);
        }
      }
    }

    return pageToLoad;
  }

  function bindSliderChangeEvents() {
    $(".slide-arrow").on("click", function (e) {
      if (!(e.target.className.indexOf('slick-disable') !== -1)) {
        trackMixpanelData("click repeated sales navigation arrow", e);
      }
    });

    function getArtworkIdSelectedAfterHide(id) {
      var currentIndex = self.graphArtworks.findIndex(function (item) {
        return item.id == id;
      }); //We should select previous element if current element is the last, otherwise select the next element

      var newElementIndex = self.graphArtworks.length - 1 === currentIndex ? currentIndex - 1 : currentIndex + 1; //We chould check the case when all elements are hidden

      return self.graphArtworks[newElementIndex] ? self.graphArtworks[newElementIndex].id : null;
    }

    $(".hidefromgraph").off('click').on("click", function (e) {
      chart = null;
      var artworkToSelectId = '';
      var interactingArtworkId = e.target.getAttribute('data-artwork-id');
      var isHidden = e.target.getAttribute('data-ishidden') === 'true';
      e.target.innerHTML = isHidden ? "HIDE FROM GRAPH" : "SHOW ON GRAPH";

      if (isHidden) {
        artworkToSelectId = interactingArtworkId;
        excludedChartItems.splice(excludedChartItems.indexOf(interactingArtworkId), 1);
      } else {
        excludedChartItems.push(interactingArtworkId);
        artworkToSelectId = getArtworkIdSelectedAfterHide(interactingArtworkId);
      }

      e.target.setAttribute('data-ishidden', !isHidden);
      GetChartArtworkRepeatedSales(true, artworkToSelectId, true);
    });
  }

  function getPageNumber(id, index) {
    if (self.isDummyData) return 1;
    var item = self.graphArtworks.find(function (item) {
      return item.id === id;
    });

    if (item) {
      return item.pageNo;
    } else if (index) {
      item = self.graphArtworks.find(function (item) {
        return item.index === index;
      });

      if (item) {
        return item.pageNo;
      }
    }

    return self.isDummyData ? 1 : 0;
  }

  function loadChartArtworks(target, preLoadPageNo, slickToArtworkId) {
    if (!self.isLoading && !self.noChart) {
      if (target) {
        var item = self.loadedArtworks.find(function (e) {
          return e.id === target.id;
        });

        if (item) {
          OnRepeatedSalesColumnClick(item.id);
        } else {
          var pageNo = getPageNumber(target.id);

          if (pageNo && self.loadedArtworks.findIndex(function (e) {
            return e.pageNo === pageNo;
          }) < 0) {
            self.pageNo = pageNo;
            self.isLoading = true;
            self.slickToArtworkId = target.id;
            startLodder(self.chartGraphEle, true, true);
            ajaxLoadArtworks(pageNo, self.repeateSaleGroupId);
          }
        }
      } else if (preLoadPageNo) {
        self.isLoading = true;
        self.pageNo = preLoadPageNo;
        self.slickToArtworkId = slickToArtworkId;
        startLodder(self.chartGraphEle, true, true);
        ajaxLoadArtworks(preLoadPageNo, self.repeateSaleGroupId);
      } else {
        if (window["entity_id"] && self.graphArtworks.length > 0) {
          var pageNo = getPageNumber(window["entity_id"]);

          if (pageNo > 0) {
            self.pageNo = pageNo;
            self.isLoading = true;
            self.initialLoad = true;
            self.slickToArtworkId = window["entity_id"];
            startLodder(self.chartGraphEle, true, true);
            ajaxLoadArtworks(pageNo, self.repeateSaleGroupId);
          }
        }
      }
    }
  }

  function ajaxLoadArtworks(pageNo, repeateSaleGroupId) {
    if (!self.IsDummyData && self.graphArtworks.findIndex(function (item) {
      return item.pageNo === pageNo;
    }) >= 0 && self.loadedArtworks.findIndex(function (e) {
      return e.pageNo === pageNo;
    }) < 0) {
      var qs = {
        page: pageNo,
        repeatSaleGroupId: repeateSaleGroupId
      };
      ajaxLoadPage(null, $(".repeated-sale-items-loader"), '&' + $.param(qs), null, addArtworksToSlider, null, true);
    } else {
      self.isLoading = false;
      stopLodder(self.chartGraphEle);
    }
  }

  function addArtworksToSlider(rText, status, request) {
    if (status != undefined && status === "success") {
      var slickItems = [];
      $(rText).find('.item').each(function (index, value) {
        var item = $(value);
        var artworkId = item.find('.repeated-sale-card').attr('id');
        item.attr('data-artId', artworkId);
        item.attr('data-pageNo', self.pageNo);
        self.loadedArtworks.push({
          pageNo: self.pageNo,
          id: artworkId
        });
        slickItems.push({
          id: artworkId,
          content: item
        });
      });

      if (slickItems.length) {
        if (self.initialLoad) {
          self.initialLoad = false;
          updateSlickSlider(slickItems);
          self.pageSize = self.loadedArtworks.length;
          selectChartItem(true, self.slickToArtworkId);
        } else {
          updateSlickSlider(slickItems);
          OnRepeatedSalesColumnClick(self.slickToArtworkId);
        }

        initBSTooltips();
        InitFollowButtons();
      }
    }

    self.isLoading = false;
    stopLodder(self.chartGraphEle);
    preLoadPagesAfterLoadIfRequired();
  }

  function preLoadPagesAfterLoadIfRequired() {
    var preLoadPage = getPreloadPageNo();

    if (preLoadPage && self.loadedArtworks.findIndex(function (e) {
      return e.pageNo === preLoadPage;
    }) < 0) {
      loadChartArtworks(null, preLoadPage, self.currentSlideId);
    }
  }

  function updateSlickSlider(slickItems) {
    if (self.artworkslick) {
      var startPosition = 0;
      var item = self.loadedArtworks.filter(function (item) {
        return item.pageNo < self.pageNo;
      });

      if (item.length) {
        startPosition = item.length - 1;
      }

      var addBefore = startPosition > 0 ? false : true;
      jQuery.each(slickItems, function (index, value) {
        self.artworkslick.slick('slickAdd', value.content, startPosition, addBefore);
        startPosition++;
      });
      bindSliderChangeEvents();

      if (addBefore) {
        OnRepeatedSalesColumnClick(self.slickToArtworkId);
      }
    } else {
      initSlickForRepeatedSales(slickItems);
    }
  }

  function NoChartData(chartid, customText) {
    var $chart = $("#" + chartid);
    if (customText) $chart.text(customText);else $chart.text("No data to display");
    $chart.parents(".chart-component").addClass("chart-no-data");
  } //Fire when chart has data


  function HasChartData(chartid) {
    $("#" + chartid).parents(".chart-component").removeClass("chart-no-data");
    ToggleChartLoader(chartid, false);
  }

  function GetSelectedCurrencySymbol() {
    var Currency = GetSelectedCurrency();
    return Currency == "USD" ? "$" : Currency == "EUR" ? "€" : "£";
  }

  function AddChartWatermark(chart, methodology) {
    chart.renderer.rect(0, 0, 1280, 50, 0).attr({
      fill: "#111520"
    }).add();
    chart.renderer.image('https://www.mutualart.com/img/logo-white-24.svg', 15, 15, 126, 20).add();
    if (methodology) chart.renderer.text('<p style="white-space:initial;padding:0 20px;display:block;color:#707070;line-height:18px;font-size:15px;">' + methodology + '</p>', 0, chart.chartHeight - 150, true).add();
    chart.renderer.text('<p style="white-space:initial;padding:0 10px;margin:0;display:block;color:#707070;line-height:18px;font-size:15px;">' + new Date().toLocaleDateString() + '</p>', 0, chart.chartHeight - 20, true).add();
  } //Fires when a chart has completed initialization


  function ChartLoaded(ev) {
    ev.target.renderer.image('https://static.mutualart.com/img/MA_logo_square.svg', ev.target.plotWidth / 2 - 75 + ev.target.plotLeft, ev.target.plotHeight / 2 - 38 + ev.target.plotTop - 10, 150, 75).attr({
      opacity: '0.1',
      zIndex: '10'
    }).add();

    if (!isMobile()) {
      if ($(".tab-content.active .highcharts-container .legend").length > 0) setTimeout(SetTooltipForElement, 1000, ".tab-content.active .highcharts-container .legend", "top", "_legend", "Legend Tags", "You can remove this data from the graph by clicking &apos;x&apos; on the legend tag. To add it back to the graph, click &apos;+&apos;.");
    }
  } //Format numbers with commas


  function numberWithCommas(x) {
    if (!isNaN(x)) return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return x;
  }

  function OnRepeatedSalesColumnClick(id) {
    if (id) {
      self.activeSlideId = id;
      self.currentSlideId = id;
      var colomnActiveIndex = $('.repeated-sale-slider').find("[data-artid='" + id + "']").attr('data-slick-index');

      if (colomnActiveIndex) {
        $('.repeated-sale-slider').slick("slickGoTo", colomnActiveIndex);
      }
    }
  }

  function trackRepetedSalesColoumnClick() {
    if (mixpanel) {
      mixpanel.track("click repeated sales graph bar", {
        "Page Name": formatPageName(page_name),
        "Identifier": "repeat sale lot"
      });
    }
  }

  function trackMixpanelData(mixPaneleventName, elementEvent) {
    var identifierObject = mixpanelMngo.getIdentifierObject(elementEvent.target);

    if (mixpanel) {
      mixpanel.track(mixPaneleventName, {
        "Page Name": formatPageName(page_name),
        "Identifier": identifierObject ? identifierObject.event.identifier : ""
      });
    }
  }

  function reflow() {
    if (chart && chart != null) {
      chart.reflow();
    }
  }

  function splineClickEvent(chartEle, e) {
    var currentPoint = chartEle.series.chart.series[0].points.concat(chartEle.series.chart.series[1].points).find(function (point) {
      return point.id == e.point.id.split('-')[1];
    });
    fireChartPointClickEvent(currentPoint);
  }

  function sliderDefaultAndIndicatorClickEvent(id) {
    var scrollRequired = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
    var direction = arguments.length > 2 ? arguments[2] : undefined;
    var graphColumnForSelecting = chart.series[0].options.data.concat(chart.series[1].options.data).find(function (element) {
      return element.id == id;
    });

    if (graphColumnForSelecting) {
      if (scrollRequired) {
        var xAxisSettings = chart.xAxis[0];

        if (xAxisSettings.visible) {
          //Handle extremes if element is shown on the graph
          if (graphColumnForSelecting.x >= xAxisSettings.min && graphColumnForSelecting.x <= xAxisSettings.max) {
            //Increase visible points while user move to the next slick item and current point index is greater than middle point index
            //But do not incerese if user reaches the end of the list
            if (direction === slickDirections.Right && xAxisSettings.max < xAxisSettings.dataMax && graphColumnForSelecting.x - xAxisSettings.min >= (xAxisSettings.max - xAxisSettings.min) / 2) {
              xAxisSettings.setExtremes(xAxisSettings.min + 1, xAxisSettings.max + 1);
            } //Decrease visible points while user move to the previous slick item and current point index is less than middle point index
            //But do not decrease if user reaches the start of the list


            if (direction === slickDirections.Left && xAxisSettings.min > 0 && graphColumnForSelecting.x - xAxisSettings.min < (xAxisSettings.max - xAxisSettings.min) / 2) {
              xAxisSettings.setExtremes(xAxisSettings.min - 1, xAxisSettings.max - 1);
            } //Handle extrames if element is out of the visible area on the graph

          } else {
            var visibleItemsCount = xAxisSettings.max - xAxisSettings.min;
            var halfOfVisibleItemsCount = Math.round(visibleItemsCount / 2);

            if (graphColumnForSelecting.x + halfOfVisibleItemsCount >= xAxisSettings.dataMax) {
              xAxisSettings.setExtremes(xAxisSettings.dataMax - visibleItemsCount, xAxisSettings.dataMax);
            } else if (graphColumnForSelecting.x - halfOfVisibleItemsCount <= 0) {
              xAxisSettings.setExtremes(0, visibleItemsCount);
            } else {
              xAxisSettings.setExtremes(graphColumnForSelecting.x - halfOfVisibleItemsCount, graphColumnForSelecting.x + halfOfVisibleItemsCount);
            }
          }
        }
      }

      var pointForSelection = chart.series[0].points.concat(chart.series[1].points).find(function (element) {
        return element.id == id;
      });
      fireChartPointClickEvent(pointForSelection);
    }
  }

  function fireChartPointClickEvent(currentPoint) {
    if (currentPoint) {
      currentPoint.firePointEvent('click');
    }
  }

  function getSeriesDataOptions(name, data) {
    return {
      name: name,
      data: data,
      yAxis: 0,
      type: "column",
      minPointLength: 21,
      dataLabels: {
        inside: true,
        verticalAlign: 'bottom',
        enabled: true,
        useHTML: true,
        formatter: function formatter() {
          var showstyle = "style='display:none'";

          if (chart && chart != null) {
            var selectedItem = chart.getSelectedPoints();

            if (selectedItem.length > 0 && this.point) {
              if (selectedItem[0].id == this.point.id) showstyle = "style='display:block'";
            }
          }

          var textvalue = this.point && this.point.isSoldWithZero ? "<span class='" + (this.point.isUpComing ? "dataLabelsChartBottomTextUpComing" : "dataLabelsChartBottomText") + "'>" + (this.point.isUpComing ? "Upcoming" : "N.A") + "</span>" : "";
          return textvalue != "" ? textvalue : '<br/><span class="dataLabelsChartBottom"' + showstyle + '>Selected</span><br/>' + textvalue;
        }
      },
      point: {
        events: {
          select: function select(event) {
            if (event.target.dataLabel && event.target.dataLabel.div) {
              loadChartArtworks(event.target);

              if ($(event.target.dataLabel.div).find('.dataLabelsChartBottom').length > 0) {
                $(event.target.dataLabel.div).find('.dataLabelsChartBottom').show();
              }
            }
          },
          unselect: function unselect(event) {
            if (chart != null && chart != undefined && event.target.dataLabel && event.target.dataLabel.div) {
              if ($(event.target.dataLabel.div).find('.dataLabelsChartBottom').length > 0) {
                $(event.target.dataLabel.div).find('.dataLabelsChartBottom').hide();
              }
            }
          }
        }
      },
      allowPointSelect: true,
      color: {
        linearGradient: {
          x1: 0,
          x2: 0,
          y1: 1,
          y2: 0
        },
        stops: [[0, "#33658a"], [1, "#265171"]]
      },
      stickyTracking: false
    };
  }

  function getSlickDirection(currentItemPosition, nextItemPosition) {
    if (Math.abs(nextItemPosition - currentItemPosition) == 1) {
      return nextItemPosition - currentItemPosition > 0 ? slickDirections.Right : slickDirections.Left;
    } else {
      return nextItemPosition - currentItemPosition > 0 ? slickDirections.Left : slickDirections.Right;
    }
  }

  function selectChartItem(scrollRequired, slickToArtworkId, forceSet, direction) {
    self.currentSlideId = slickToArtworkId ? slickToArtworkId : self.currentSlideId;

    if (self.artworkslick.length > 0 && self.currentSlideId) {
      if (forceSet || self.activeSlideId !== self.currentSlideId) {
        self.activeSlideId = self.currentSlideId;
        sliderDefaultAndIndicatorClickEvent(self.currentSlideId, scrollRequired, direction);
      } //enable animation after default selected slide loaded


      if (self.artworkslick[0].slick.options.speed <= 0) {
        self.artworkslick.slick('slickSetOption', 'speed', 500);
      }
    }
  }

  function initChart(chartData) {
    chart = null;
    var container = document.getElementById(self.chartName).parentElement;
    var chartTitle = container.firstElementChild.innerText;
    var methodology = $(container).find(".chart-methodolgy").text();
    ToggleChartLoader(self.chartName, true);
    data = $.grep(chartData, function (element) {
      return !(excludedChartItems.indexOf(element.id) !== -1);
    });
    HasChartData(self.chartName);
    self.ChartChangeSalesLotsData = data.Data;
    var min_est = data.map(function (x) {
      return {
        y: x.minEstimate,
        id: "spmin-" + x.id
      };
    }); // here set to 0 because we already set default value minPointLength proeprty.it can generate issue in some case so here need to set 0 is required.

    var defaultUnsoldBarValue = 0;
    var allBarPointValues = $.grep(data.map(function (x) {
      return x.realized;
    }), function (ele) {
      return ele != null && ele != "" && !ele.isUnsold && !isUpcomingLot(ele.lotStatus);
    });

    if (allBarPointValues.length > 0) {
      defaultUnsoldBarValue = Math.min.apply(Math, _toConsumableArray(allBarPointValues));
    }

    self.graphArtworks = data.filter(function (item, i) {
      return item.id.toLowerCase() !== 'emptysale';
    }).map(function (item, i) {
      return _objectSpread(_objectSpread({}, item), {}, {
        index: i,
        id: item.id,
        pageNo: Math.ceil((i + 1) / self.pageSize)
      });
    });
    var realized = data.map(function (item, i) {
      return {
        x: i,
        y: !item.isUnsold ? item.isEmptySale ? 0 : item.realized <= 0 ? defaultUnsoldBarValue : item.realized : defaultUnsoldBarValue,
        id: item.id,
        color: item.isEmptySale ? "transparent" : !item.isUnsold ? item.realized <= 0 ? "#D3D3D3" : "#2d5c7f" : "#d28b87",
        isUnsold: item.isUnsold,
        isEmptySale: item.isEmptySale,
        isSoldWithZero: !item.isUnsold && item.realized <= 0,
        isUpComing: isUpcomingLot(item.lotStatus),
        dataLabels: {
          enabled: item.isEmptySale ? false : true
        },
        states: {
          select: {
            color: item.isEmptySale ? "transparent" : '#4fa5a0'
          }
        }
      };
    });
    var realizedSold = $.grep(realized, function (ele) {
      return !ele.isUnsold;
    });
    var realizedUnSold = $.grep(realized, function (ele) {
      return ele.isUnsold;
    });
    var max_est = data.map(function (x) {
      return {
        y: x.maxEstimate,
        id: "spmax-" + x.id
      };
    });
    var styles = [["blue", "Realized sold price"], ["orange", "Max estimate"], ["yellow", "Min estimate"], ["#d28b87", "Unsold"], ["orange", "Unsold"]];
    var legendoptions = {
      enabled: true,
      useHTML: false,
      labelFormatter: function labelFormatter() {
        return '<div class="legend ' + styles[this.index][0] + '" title="' + this.name + '">' + this.name + "</div><br/>";
      }
    };
    var randomColor = ["#999", "#777"];
    var previousYearElement = null;
    var currentYearIndex = 0;
    var years = data.map(function (item, i) {
      return item;
    }).map(function (item, i) {
      if (previousYearElement == null) {
        previousYearElement = item.saleDate + "-" + randomColor[currentYearIndex];
        return previousYearElement;
      } else if (previousYearElement.indexOf(item.saleDate) !== -1) {
        previousYearElement = item.saleDate + "-" + randomColor[currentYearIndex];
        return previousYearElement;
      }

      currentYearIndex = currentYearIndex != 0 ? 0 : 1;
      previousYearElement = item.saleDate + "-" + randomColor[currentYearIndex];
      return previousYearElement;
    });
    ChartChangeSalesLotsOptions = {
      title: {
        text: ""
      },
      responsive: {
        rules: [{
          chartOptions: {
            xAxis: {
              labels: {
                rotation: -45
              }
            }
          },
          condition: {
            maxWidth: 375
          }
        }]
      },
      exporting: {
        enabled: false,
        allowHTML: true,
        sourceWidth: 1000,
        sourceHeight: 800,
        chartOptions: {
          plotOptions: {
            series: {
              dataLabels: {
                enabled: true,
                formatter: function formatter() {
                  if (this.series.index == 0) return "<div style='font-size: 13px;text-align:center;font-family:Lato;line-height:18px;padding:4px 7px;'><span style='color:#33658a' class='tval'>Sales: " + this.point.y.toLocaleString() + GetSelectedCurrencySymbol() + "</span><br /><span class='tlabel' style='color:#777;'>Lots Offered: " + Math.abs(self.ChartChangeSalesLotsData[this.point.index][2].toFixed(0)).toLocaleString() + "</span><br /><span class='tlabel' style='color:#777;'>Lots Sold: " + Math.abs(self.ChartChangeSalesLotsData[this.point.index][3].toFixed(0)).toLocaleString() + "</span></div>";
                  return "";
                },
                style: {
                  fontSize: "7px"
                }
              }
            }
          },
          chart: {
            marginTop: 80,
            marginBottom: 200,
            events: {
              load: function load(event) {
                AddChartWatermark(event.target, methodology);
              }
            }
          },
          title: {
            text: chartTitle + '  ',
            style: {
              "color": "#fff"
            },
            align: "right",
            y: 22
          },
          credits: credits
        }
      },
      chart: {
        alignTicks: false,
        backgroundColor: "#ffffff",
        plotBackgroundColor: "#ffffff",
        height: 300,
        //scrollablePlotArea: {
        //    minWidth: 1200,
        //    scrollPositionX: 0
        //},
        events: {
          load: ChartLoaded
        }
      },
      credits: {
        text: "",
        href: ""
      },
      plotOptions: {
        scatter: {
          marker: {
            radius: 13,
            enabled: true
          },
          className: "highChart-scatter"
        },
        column: {
          pointPadding: 0,
          borderWidth: 1,
          dataLabels: {
            crop: false,
            inside: true,
            align: 'left'
          },
          events: {
            click: function click(e) {
              loadChartArtworks(e.point);
              trackRepetedSalesColoumnClick();
            }
          },
          stacking: 'normal',
          cropThreshold: 50 //Highcarts renders all graph element at once if collection length less than this value.
          //This value should be increased carrefully due to performance issues

        },
        series: {
          groupPadding: 0,
          states: {
            select: {
              borderColor: '#ffff'
            }
          },
          turboThreshold: 10000 //Highcharts allow only one/two dimension arrays as source if data increase this value

        }
      },
      xAxis: {
        type: "category",
        categories: years,
        labels: {
          formatter: function formatter($event) {
            var width = 0;

            if (this.chart) {
              width = this.chart.series[0].getColumnMetrics().width;
            }

            if (this.value.toString().split('-').length > 1) {
              return "<div class='artwork-chart-footer-header' style='background-color:" + this.value.split('-')[1] + ";min-width:" + width + "px;height:20px'>" + this.value.split('-')[0] + "</div>";
            }

            return "";
          },
          useHTML: false,
          align: "center",
          autoRotation: false,
          style: {
            fontSize: "12px",
            fontFamily: "Lato, sans-serif",
            textOverflow: 'visible'
          }
        },
        gridLineWidth: 1,
        min: 0,
        max: window.innerWidth >= 492 ? years.length - 1 < 12 ? years.length - 1 : 12 : years.length - 1 < 6 ? years.length - 1 : 6,
        scrollbar: {
          enabled: window.innerWidth >= 492 ? years.length - 1 < 13 ? false : true : years.length - 1 < 7 ? false : true
        }
      },
      yAxis: [{
        labels: {
          formatter: function formatter() {
            return GetSelectedCurrencySymbol() + this.axis.defaultLabelFormatter.call(this);
          }
        },
        min: 0,
        title: {
          text: ""
        },
        tickAmount: 4
      }],
      legend: legendoptions,
      tooltip: {
        shared: true,
        split: false,
        useHTML: true,
        backgroundColor: "rgba(246, 246, 246, 0)",
        borderRadius: 0,
        borderColor: "#bbbbbb",
        borderWidth: 0,
        style: {
          opacity: 1,
          background: "rgba(246, 246, 246, 1)",
          'z-index': '9999999'
        },
        enabled: true,
        shadow: false,
        positioner: function positioner(w, h, point) {
          this.chart.pointer.chartPosition = null;
          var currnetPosstion = this.getPosition(w, h, point);
          currnetPosstion.y = currnetPosstion.y >= (isMobile() ? 74 : 139) ? currnetPosstion.y - 25 : currnetPosstion.y;
          return currnetPosstion;
        },
        formatter: function formatter() {
          if (this.points[0].point.isEmptySale != undefined) {
            if (this.points[0].point.y <= 0 && this.points[0].point.isEmptySale && !this.points[0].point.isUnsold) return false;
          }

          var isUnsoldSeries = $.grep(this.points, function (e) {
            return e.series.name == styles[3][1];
          }).length > 0;
          var points = this.points;
          var pointsLength = points.length;
          var tooltipMarkup = '';
          var index;

          for (index = 0; index < pointsLength; index += 1) {
            var seriesName = points[index].series.name.replace("Realized Auction Prices", styles[0][1]);

            if (seriesName != styles[3][1]) {
              var isSoldWithZero = this.points[0].point.isSoldWithZero != undefined && this.points[0].point.isSoldWithZero && seriesName == styles[0][1];
              tooltipMarkup += '<span style="color:' + points[index].series.color + "\">\u25CF</span> " + seriesName + ': <b>' + (!isSoldWithZero ? GetSelectedCurrencySymbol() + numberWithCommas(points[index].y) : this.points[0].point.isUpComing ? "Upcoming" : "N.A") + '</b><br/>';
            }
          }

          if (isUnsoldSeries) {
            var unsoldTooltipsData = '<span style="color:' + styles[3][0] + "\">\u25CF</span> " + styles[0][1] + ': <b>Not sold</b><br/>';
            tooltipMarkup = unsoldTooltipsData + tooltipMarkup;
          }

          return tooltipMarkup;
        }
      },
      series: [getSeriesDataOptions("Realized Auction Prices", realizedSold), getSeriesDataOptions("Unsold", realizedUnSold), {
        name: "Max Estimate",
        data: max_est,
        type: "spline",
        lineWidth: 3,
        yAxis: 0,
        color: "#edb859",
        marker: {
          enabled: false
        },
        stickyTracking: false,
        point: {
          events: {
            click: function click(e) {
              splineClickEvent(this, e);
              trackRepetedSalesColoumnClick();
            }
          }
        }
      }, {
        name: "Min Estimate",
        data: min_est,
        type: "spline",
        color: "#e2804c",
        lineWidth: 3,
        yAxis: 0,
        marker: {
          enabled: false
        },
        stickyTracking: false,
        point: {
          events: {
            click: function click(e) {
              splineClickEvent(this, e);
              trackRepetedSalesColoumnClick();
            }
          }
        }
      }]
    }; //Clipping overflow X-axis label while scrolling

    (function (HC) {
      HC.wrap(HC.Axis.prototype, 'getOffset', function (proceed) {
        var axis = this,
            chart = axis.chart,
            clipBox = {
          x: chart.xAxis[0].left,
          y: chart.plotTop,
          width: chart.plotWidth,
          height: chart.chartHeight
        };
        proceed.call(axis);

        if (!chart.plotClip) {
          chart.plotClip = chart.renderer.clipRect(clipBox);
          axis.gridGroup.clip(chart.plotClip);
          axis.axisGroup.clip(chart.plotClip);
          axis.labelGroup.clip(chart.plotClip);
        } else {
          chart.plotClip.attr(clipBox);
        }

        ;
      });
    })(Highcharts);

    chart = Highcharts.chart(self.chartName, ChartChangeSalesLotsOptions);
    reflow();
  }

  function GetChartArtworkRepeatedSales(isShowHideArtworks, slickToArtworkId, forceSet) {
    var chartElement = document.getElementById(self.chartName);

    if (chartElement == null) {
      self.noChart = true;
      return;
    }

    $(chartElement).removeClass("chart-watermark");

    if (isShowHideArtworks && self.chartData) {
      initChart(self.chartData);
      $('.chart-controls').remove();
      selectChartItem(true, slickToArtworkId, forceSet);
      $("#RepeatedSalesChartComponent .graph-nonpremium-overlay").show();
    } else {
      var totalItemByDefaultDisplay = window.innerWidth >= 492 ? 12 : 6;
      $.post("/ajax/charts/GetArtworkRepeatedSales?artworkId=" + $('#current-artwork-id').val() + "&totalItemByDefaultDisplay=" + totalItemByDefaultDisplay, function (data) {
        if (data && $.isArray(data.GraphItems) && data.GraphItems.length > 0) {
          self.isDummyData = data.IsDummyData;
          self.repeateSaleGroupId = data.RepeateSaleGroupId;
          self.chartData = data.GraphItems;
          initChart(data.GraphItems);
          loadChartArtworks();
          $('.chart-controls').remove();
          $("#RepeatedSalesChartComponent .graph-nonpremium-overlay").show();
        } else {
          NoChartData(self.chartName);
        }
      }).fail(function () {
        NoChartData(self.chartName);
      });
    }
  }

  function isUpcomingLot(lotStatus) {
    return lotStatus && (lotStatus.indexOf('Results Coming Soon') !== -1 || lotStatus.indexOf('Upcoming') !== -1);
  }

  var _export = {
    init: init
  };
  return _export;
}
//# sourceMappingURL=ArtworkRepeatedSaleModule.js.map;
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;
(function ($) {
    $.fn.customSelect = function () {
        var init = function (elSel) {
            const $select = $(elSel);
            $select.hide(); // hide native select

            // Create container
            const $container = $("<div>", { class: "dropdown-container custom-dropdown" });

            const opt = $select.find("option:selected").length > 0
                ? $select.find("option:selected")
                : $select.find("option:first");

            const $button = $("<button>", {
                class: "dropdown-btn"
            }).append($("<span>", { class: "text", text: opt.text() }))
              .append($("<span>", { class: "arrow" }));

            const $list = $("<ul>", { class: "dropdown-list" });

            // Build list items from <option>
            $select.find("option").each(function () {
                const $option = $(this);
                const $li = $("<li>", {
                    class: "dropdown-item",
                    text: $option.text(),
                    "data-value": $option.val()
                });

                if ($option.is(":selected")) {
                    $li.addClass("selected").append("<span class='check'></span>");
                }

                $li.on("click", function () {
                    $list.find(".selected").removeClass("selected").find(".check").remove();
                    $(this).addClass("selected").append("<span class='check'></span>");
                    $button.contents().first()[0].textContent = $option.text();
                    $list.removeClass("open");
                    $select.val($option.val()).trigger("change"); // sync with native select
                });

                $list.append($li);
            });

            $select.on("change", function () {
                const val = $(this).val();
                $list.find(".selected").removeClass("selected").find(".check").remove();
                $list.find([`data-value=${val}`]).addClass("selected").append("<span class='check'></span>");
                $button.contents().first()[0].textContent = $(this).find(":selected").text();
                $list.removeClass("open");
            });

            // Toggle list
            $button.on("click", function (e) {
                e.stopPropagation();
                $(".dropdown-list").not($list).removeClass("open");
                $list.toggleClass("open");
            });

            $(document).on("click", function () {
                $list.removeClass("open");
            });

            $container.append($button, $list);
            $select.after($container);
        };

        this.refresh = function () {
            this.each(function () {
                const $select = $(this);
                $select.next(".dropdown-container").remove(); // remove old dropdown
                init(this); // rebuild
            });
            return this;
        };

        return this.each(function () {
            init(this);
        });
    };
}(jQuery));;
