PageSourceSearch

https://cre.propertymetrics.com/static/proforma/js/toolkit.js

js propertymetrics.com collected 2026-09-25 04:02:39 UTC 267,429 bytes, 1 lines download raw bytes

1function updateAnnualMonthlyLinks(){let e=$("[data-timescale]").data("timescale");e||(e=localStorage.getItem("proformaTimescale"));let t="monthly"===e?"url-monthly":"url-annually";localStorage.setItem("proformaTimescale",e),$("[data-url-annually]").attr("href",function(){return $(this).data(t)})}function registerAutoNumeric(){$(".autoNumeric").autoNumeric({minimumValue:"-100000000",decimalPlacesOverride:0}).trigger("blur"),$(".autoNumeric_no_decimal").autoNumeric({minimumValue:"-100000000",decimalPlacesOverride:0}).trigger("blur"),$(".autoNumeric_decimal").autoNumeric({minimumValue:"-100000000",decimalPlacesOverride:2}).trigger("blur"),$(".autoNumeric_percent").autoNumeric({suffixText:"%"}).trigger("blur"),$(".autoNumeric_dollar").autoNumeric({decimalPlacesOverride:0,currencySymbol:"$",currencySymbolPlacement:"p"}).trigger("blur"),$("input.autoNumeric input.autoNumeric_no_decimal, input.autoNumeric_decimal, input.autoNumeric_percent, input.autoNumeric_dollar").each(function(e,t){var n=$(this).val();$(this).autoNumeric("set",n)}),$("form").submit(function(){$("input.autoNumeric, input.autoNumeric_no_decimal, input.autoNumeric_decimal, input.autoNumeric_percent, input.autoNumeric_dollar").each(function(e,t){$(this).val(function(){return $(this).autoNumeric("get")})})})}function formatDateForDisplay(e){if(!e)return e;var t=e.split("-");if(t.length<2)return e;var n=parseInt(t[1],10)-1,o=t[0];return["January","February","March","April","May","June","July","August","September","October","November","December"][n]+" "+o}function getMonthBefore(e){if(!e)return null;var t=new Date(e+"T00:00:00");return t.setDate(0),t.getFullYear()+"-"+(t.getMonth()+1).toString().padStart(2,"0")+"-"+t.getDate().toString().padStart(2,"0")}function generateInfoMessage(e){var t=e.errorType,n=e.startDate,o=e.endDate,r=e.analysisStartDate,a=e.hasOtherValidPeriods||!1,i=formatDateForDisplay(n),s=formatDateForDisplay(o);if("start"===t)return"<strong>Custom availability set.</strong> The building is at full capacity until <strong>"+i+"</strong>, so we've set the availability to the first period where this size fits.";if("end"===t){if(n&&n!==r){var l="<strong>Custom availability set.</strong> This size fits between <strong>"+i+"</strong> and <strong>"+s+"</strong>.";return a&&(l+=" There are other periods where it fits as well."),l}return"<strong>Custom availability set.</strong> This size won't fit in the building after <strong>"+s+"</strong>, so we've automatically set the availability end date for you."}return null}function canAutoCorrect(e){var t=e.availabilityMethod,n=e.correctionState||{startCorrected:!1,endCorrected:!1};return"analysis"===t||"custom"===t&&!n.startCorrected&&!n.endCorrected}function determineSuggestedCorrection(e){var t=e.validationResponse,n=e.correctionState||{startCorrected:!1,endCorrected:!1},o=e.analysisStartDate,r=e.currentStartDate;if(!n.startCorrected&&"start"===t.error_type&&t.valid_periods&&t.valid_periods.length>0)return{type:"start",startDate:t.valid_periods[0],endDate:null,newCorrectionState:{startCorrected:!0,endCorrected:!1}};if(!n.endCorrected&&"end"===t.error_type&&t.invalid_periods&&t.invalid_periods.length>0){var a=getMonthBefore(t.invalid_periods[0]);return{type:"end",startDate:r||o,endDate:a,newCorrectionState:{startCorrected:n.startCorrected,endCorrected:!0}}}return null}!function(e){"use strict";e.fn.emulateTransitionEnd=function(t){var n=!1,o=this;e(this).one("bsTransitionEnd",function(){n=!0});return setTimeout(function(){n||e(o).trigger(e.support.transition.end)},t),this},e(function(){e.support.transition=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.VERSION="3.3.6",n.TRANSITION_DURATION=150,n.prototype.close=function(t){var o=e(this),r=o.attr("data-target");r||(r=(r=o.attr("href"))&&r.replace(/.*(?=#[^\s]*$)/,""));var a=e(r);function i(){a.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),a.length||(a=o.closest(".alert")),a.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(a.removeClass("in"),e.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i())};var o=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var o=e(this),r=o.data("bs.alert");r||o.data("bs.alert",r=new n(this)),"string"==typeof t&&r[t].call(o)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=o,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}(jQuery),function(e){"use strict";var t=function(n,o){this.options=e.extend({},t.DEFAULTS,o),this.$target=e(this.options.target).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each(function(){var o=e(this),r=o.data("bs.affix"),a="object"==typeof n&&n;r||o.data("bs.affix",r=new t(this,a)),"string"==typeof n&&r[n]()})}t.VERSION="3.3.6",t.RESET="affix affix-top affix-bottom",t.DEFAULTS={offset:0,target:window},t.prototype.getState=function(e,t,n,o){var r=this.$target.scrollTop(),a=this.$element.offset(),i=this.$target.height();if(null!=n&&"top"==this.affixed)return r<n&&"top";if("bottom"==this.affixed)return null!=n?!(r+this.unpin<=a.top)&&"bottom":!(r+i<=e-o)&&"bottom";var s=null==this.affixed,l=s?r:a.top;return null!=n&&r<=n?"top":null!=o&&l+(s?i:t)>=e-o&&"bottom"},t.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(t.RESET).addClass("affix");var e=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-e},t.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},t.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),o=this.options.offset,r=o.top,a=o.bottom,i=Math.max(e(document).height(),e(document.body).height());"object"!=typeof o&&(a=r=o),"function"==typeof r&&(r=o.top(this.$element)),"function"==typeof a&&(a=o.bottom(this.$element));var s=this.getState(i,n,r,a);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(t.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:i-n-a})}};var o=e.fn.affix;e.fn.affix=n,e.fn.affix.Constructor=t,e.fn.affix.noConflict=function(){return e.fn.affix=o,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),o=t.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),n.call(t,o)})})}(jQuery),function(e){"use strict";var t=function(n,o){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,o),this.isLoading=!1};function n(n){return this.each(function(){var o=e(this),r=o.data("bs.button"),a="object"==typeof n&&n;
vendor: 9,642 bytes, line 1
1r||o.data("bs.button",r=new t(this,a)),"toggle"==n?r.toggle():n&&r.setState(n)})}t.VERSION="3.3.6",t.DEFAULTS={loadingText:"loading..."},t.prototype.setState=function(t){var n="disabled",o=this.$element,r=o.is("input")?"val":"html",a=o.data();t+="Text",null==a.resetText&&o.data("resetText",o[r]()),setTimeout(e.proxy(function(){o[r](null==a[t]?this.options[t]:a[t]),"loadingText"==t?(this.isLoading=!0,o.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,o.removeClass(n).removeAttr(n))},this),0)},t.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=e.fn.button;e.fn.button=n,e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=o,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(t){var o=e(t.target);o.hasClass("btn")||(o=o.closest(".btn")),n.call(o,"toggle"),e(t.target).is('input[type="radio"]')||e(t.target).is('input[type="checkbox"]')||t.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};function n(n){return this.each(function(){var o=e(this),r=o.data("bs.carousel"),a=e.extend({},t.DEFAULTS,o.data(),"object"==typeof n&&n),i="string"==typeof n?n:a.slide;r||o.data("bs.carousel",r=new t(this,a)),"number"==typeof n?r.to(n):i?r[i]():a.interval&&r.pause().cycle()})}t.VERSION="3.3.6",t.TRANSITION_DURATION=600,t.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},t.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},t.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},t.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},t.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t);if(("prev"==e&&0===n||"next"==e&&n==this.$items.length-1)&&!this.options.wrap)return t;var o=(n+("prev"==e?-1:1))%this.$items.length;return this.$items.eq(o)},t.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(e>this.$items.length-1||e<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){t.to(e)}):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},t.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},t.prototype.next=function(){if(!this.sliding)return this.slide("next")},t.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},t.prototype.slide=function(n,o){var r=this.$element.find(".item.active"),a=o||this.getItemForDirection(n,r),i=this.interval,s="next"==n?"left":"right",l=this;if(a.hasClass("active"))return this.sliding=!1;var c=a[0],d=e.Event("slide.bs.carousel",{relatedTarget:c,direction:s});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,i&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=e(this.$indicators.children()[this.getItemIndex(a)]);u&&u.addClass("active")}var p=e.Event("slid.bs.carousel",{relatedTarget:c,direction:s});return e.support.transition&&this.$element.hasClass("slide")?(a.addClass(n),a[0].offsetWidth,r.addClass(s),a.addClass(s),r.one("bsTransitionEnd",function(){a.removeClass([n,s].join(" ")).addClass("active"),r.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(p)},0)}).emulateTransitionEnd(t.TRANSITION_DURATION)):(r.removeClass("active"),a.addClass("active"),this.sliding=!1,this.$element.trigger(p)),i&&this.cycle(),this}};var o=e.fn.carousel;e.fn.carousel=n,e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=o,this};var r=function(t){var o,r=e(this),a=e(r.attr("data-target")||(o=r.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(a.hasClass("carousel")){var i=e.extend({},a.data(),r.data()),s=r.attr("data-slide-to");s&&(i.interval=!1),n.call(a,i),s&&a.data("bs.carousel").to(s),t.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),function(e){"use strict";var t=function(n,o){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,o),this.$trigger=e('[data-toggle="collapse"][href="#'+n.id+'"],[data-toggle="collapse"][data-target="#'+n.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var n,o=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(o)}function o(n){return this.each(function(){var o=e(this),r=o.data("bs.collapse"),a=e.extend({},t.DEFAULTS,o.data(),"object"==typeof n&&n);!r&&a.toggle&&/show|hide/.test(n)&&(a.toggle=!1),r||o.data("bs.collapse",r=new t(this,a)),"string"==typeof n&&r[n]()})}t.VERSION="3.3.6",t.TRANSITION_DURATION=350,t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},t.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var n,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(n=r.data("bs.collapse"))&&n.transitioning)){var a=e.Event("show.bs.collapse");if(this.$element.trigger(a),!a.isDefaultPrevented()){r&&r.length&&(o.call(r,"hide"),n||r.data("bs.collapse",null));var i=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[i](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[i](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return s.call(this);var l=e.camelCase(["scroll",i].join("-"));this.$element.one("bsTransitionEnd",e.proxy(s,this)).emulateTransitionEnd(t.TRANSITION_DURATION)[i](this.$element[0][l])}}}},t.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var n=e.Event("hide.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){var o=this.dimension();this.$element[o](this.$element[o]())[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 r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!e.support.transition)return r.call(this);this.$element[o](0).one("bsTransitionEnd",e.proxy(r,this)).emulateTransitionEnd(t.TRANSITION_DURATION)}}},t.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},t.prototype.getParent=function(){return e(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy(function(t,o){var r=e(o);this.addAriaAndCollapsedClass(n(r),r)},this)).end()},t.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=e.fn.collapse;e.fn.collapse=o,e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=r,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(t){var r=e(this);r.attr("data-target")||t.preventDefault();var a=n(r),i=a.data("bs.collapse")?"toggle":r.data();o.call(a,i)})}(jQuery),function(e){"use strict";var t=".dropdown-backdrop",n='[data-toggle="dropdown"]',o=function(t){e(t).on("click.bs.dropdown",this.toggle)};function r(t){var n=t.attr("data-target");n||(n=(n=t.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var o=n&&e(n);return o&&o.length?o:t.parent()}function a(o){o&&3===o.which||(e(t).remove(),e(n).each(function(){var t=e(this),n=r(t),a={relatedTarget:this};n.hasClass("open")&&(o&&"click"==o.type&&/input|textarea/i.test(o.target.tagName)&&e.contains(n[0],o.target)||(n.trigger(o=e.Event("hide.bs.dropdown",a)),o.isDefaultPrevented()||(t.attr("aria-expanded","fal
1se"),n.removeClass("open").trigger(e.Event("hidden.bs.dropdown",a)))))}))}o.VERSION="3.3.6",o.prototype.toggle=function(t){var n=e(this);if(!n.is(".disabled, :disabled")){var o=r(n),i=o.hasClass("open");if(a(),!i){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",a);var s={relatedTarget:this};if(o.trigger(t=e.Event("show.bs.dropdown",s)),t.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(e.Event("shown.bs.dropdown",s))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var o=e(this);if(t.preventDefault(),t.stopPropagation(),!o.is(".disabled, :disabled")){var a=r(o),i=a.hasClass("open");if(!i&&27!=t.which||i&&27==t.which)return 27==t.which&&a.find(n).trigger("focus"),o.trigger("click");var s=a.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(t.target);38==t.which&&l>0&&l--,40==t.which&&l<s.length-1&&l++,~l||(l=0),s.eq(l).trigger("focus")}}}};var i=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),r=n.data("bs.dropdown");r||n.data("bs.dropdown",r=new o(this)),"string"==typeof t&&r[t].call(n)})},e.fn.dropdown.Constructor=o,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=i,this},e(document).on("click.bs.dropdown.data-api",a).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,o.prototype.toggle).on("keydown.bs.dropdown.data-api",n,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(e){"use strict";var t=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};function n(n,o){return this.each(function(){var r=e(this),a=r.data("bs.modal"),i=e.extend({},t.DEFAULTS,r.data(),"object"==typeof n&&n);a||r.data("bs.modal",a=new t(this,i)),"string"==typeof n?a[n](o):i.show&&a.show(o)})}t.VERSION="3.3.6",t.TRANSITION_DURATION=300,t.BACKDROP_TRANSITION_DURATION=150,t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},t.prototype.show=function(n){var o=this,r=e.Event("show.bs.modal",{relatedTarget:n});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(t){e(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var r=e.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),r&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var a=e.Event("shown.bs.modal",{relatedTarget:n});r?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(a)}).emulateTransitionEnd(t.TRANSITION_DURATION):o.$element.trigger("focus").trigger(a)}))},t.prototype.hide=function(n){n&&n.preventDefault(),n=e.Event("hide.bs.modal"),this.$element.trigger(n),this.isShown&&!n.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(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"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(t.TRANSITION_DURATION):this.hideModal())},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){document===e.target||this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("key
1down.dismiss.bs.modal",e.proxy(function(e){27==e.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},t.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(n){var o=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var a=e.support.transition&&r;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+r).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy(function(e){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),a&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!n)return;a?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):n()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var i=function(){o.removeBackdrop(),n&&n()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",i).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):i()}else n&&n()},t.prototype.handleUpdate=function(){this.adjustDialog()},t.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},t.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},t.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},t.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",e+this.scrollbarWidth)},t.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},t.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var o=e.fn.modal;e.fn.modal=n,e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=o,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var o=e(this),r=o.attr("href"),a=e(o.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),i=a.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},a.data(),o.data());o.is("a")&&t.preventDefault(),a.one("show.bs.modal",function(e){e.isDefaultPrevented()||a.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),n.call(a,i,this)})}(jQuery),function(e){"use strict";var t=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};t.VERSION="3.3.6",t.TRANSITION_DURATION=150,t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},t.prototype.init=function(t,n,o){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},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!");for(var r=this.options.trigger.split(" "),a=r.length;a--;){var i=r[a];if("click"==i)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=i){var s="hover"==i?"mouseenter":"focusin",l="hover"==i?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return(t=e.extend({},this.getDefaults(),this.$element.data(),t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,o){n[e]!=o&&(t[e]=o)}),t},t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focu
1s":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)}},t.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)}},t.prototype.show=function(){var n=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(n);var o=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(n.isDefaultPrevented()||!o)return;var r=this,a=this.tip(),i=this.getUID(this.type);this.setContent(),a.attr("id",i),this.$element.attr("aria-describedby",i),this.options.animation&&a.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(s);c&&(s=s.replace(l,"")||"top"),a.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?a.appendTo(this.options.container):a.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),u=a[0].offsetWidth,p=a[0].offsetHeight;if(c){var m=s,f=this.getPosition(this.$viewport);s="bottom"==s&&d.bottom+p>f.bottom?"top":"top"==s&&d.top-p<f.top?"bottom":"right"==s&&d.right+u>f.width?"left":"left"==s&&d.left-u<f.left?"right":s,a.removeClass(m).addClass(s)}var h=this.getCalculatedOffset(s,d,u,p);this.applyPlacement(h,s);var y=function(){var e=r.hoverState;r.$element.trigger("shown.bs."+r.type),r.hoverState=null,"out"==e&&r.leave(r)};e.support.transition&&this.$tip.hasClass("fade")?a.one("bsTransitionEnd",y).emulateTransitionEnd(t.TRANSITION_DURATION):y()}},t.prototype.applyPlacement=function(t,n){var o=this.tip(),r=o[0].offsetWidth,a=o[0].offsetHeight,i=parseInt(o.css("margin-top"),10),s=parseInt(o.css("margin-left"),10);isNaN(i)&&(i=0),isNaN(s)&&(s=0),t.top+=i,t.left+=s,e.offset.setOffset(o[0],e.extend({using:function(e){o.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),o.addClass("in");var l=o[0].offsetWidth,c=o[0].offsetHeight;"top"==n&&c!=a&&(t.top=t.top+a-c);var d=this.getViewportAdjustedDelta(n,t,l,c);d.left?t.left+=d.left:t.top+=d.top;var u=/top|bottom/.test(n),p=u?2*d.left-r+l:2*d.top-a+c,m=u?"offsetWidth":"offsetHeight";o.offset(t),this.replaceArrow(p,o[0][m],u)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},t.prototype.hide=function(n){var o=this,r=e(this.$tip),a=e.Event("hide.bs."+this.type);function i(){"in"!=o.hoverState&&r.detach(),o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),n&&n()}if(this.$element.trigger(a),!a.isDefaultPrevented())return r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(t.TRANSITION_DURATION):i(),this.hoverState=null,this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],o="BODY"==n.tagName,r=n.getBoundingClientRect();null==r.width&&(r=e.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var a=o?{top:0,left:0}:t.offset(),i={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},s=o?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},r,i,s,a)},t.prototype.getCalculatedOffset=function(e,t,n,o){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-o,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-o/2,left:t.left-n}:{top:t.top+t.height/2-o/2,left:t.left+t.width}},t.prototype.getViewportAdjustedDelta=function(e,t,n,o){var r={top:0,left:0};if(!this.$viewport)return r;var a=this.options.viewport&&this.options.viewport.padding||0,i=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-a-i.scroll,l=t.top+a-i.scroll+o;s<i.top?r.top=i.top-s:l>i.top+i.height&&(r.top=i.top+i.height-l)}else{var c=t.left-a,d=t.left+a+n;c<i.left?r.left=i.left-c:d>i.right&&(r.left=i.left+i.width-d)}return r},t.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},t.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},t.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.t
vendor: 7,440 bytes, line 1
1ype+" `template` option must consist of exactly 1 top-level element!");return this.$tip},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null})};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var o=e(this),r=o.data("bs.tooltip"),a="object"==typeof n&&n;!r&&/destroy|hide/.test(n)||(r||o.data("bs.tooltip",r=new t(this,a)),"string"==typeof n&&r[n]())})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(jQuery),function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.VERSION="3.3.6",t.DEFAULTS=e.extend({},e.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>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var o=e(this),r=o.data("bs.popover"),a="object"==typeof n&&n;!r&&/destroy|hide/.test(n)||(r||o.data("bs.popover",r=new t(this,a)),"string"==typeof n&&r[n]())})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(jQuery),function(e){"use strict";function t(n,o){this.$body=e(document.body),this.$scrollElement=e(n).is(document.body)?e(window):e(n),this.options=e.extend({},t.DEFAULTS,o),this.selector=this.options.selector||(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var o=e(this),r=o.data("bs.scrollspy"),a="object"==typeof n&&n;r||o.data("bs.scrollspy",r=new t(this,a)),"string"==typeof n&&r[n]()})}t.VERSION="3.3.6",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=e(this),r=t.data("target")||t.attr("href"),a=/^#./.test(r)&&e(r);return a&&a.length&&a.is(":visible")&&[[a[n]().top+o,r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),o=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,a=this.targets,i=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=o)return i!=(e=a[a.length-1])&&this.activate(e);if(i&&t<r[0])return this.activeTarget=null,this.clear();for(e=r.length;e--;)i!=a[e]&&t>=r[e]&&(void 0===r[e+1]||t<r[e+1])&&this.activate(a[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',o=e(n).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=o,this},e(window).on("load.bs.scrollspy.data-api",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),function(e){"use strict";var t=function(t){this.element=e(t)};function n(n){return this.each(function(){var o=e(this),r=o.data("bs.tab");r||o.data("bs.tab",r=new t(this)),"string"==typeof n&&r[n]()})}t.VERSION="3.3.6",t.TRANSITION_DURATION=150,t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),o=t.data("target");if(o||(o=(o=t.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var r=n.find(".active:last a"),a=e.Event("hide.bs.tab",{relatedTarget:t[0]}),i=e.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(a),t.trigger(i),!i.isDefaultPrevented()&&!a.isDefaultPrevented()){var s=e(o);this.activate(t.closest("li"),n),this.activate(s,s.parent(),function(){r.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:r[0]})})}}},t.prototype.activate=function(n,o,r){var a=o.find("> .active"),i=r&&e.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),n.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),i?(n[0].offsetWidth,n.addClass("in")):n.removeClass("fade"),n.parent(".dropdown-menu").length&&n.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}a.length&&i?a.one("bsTransitionEnd",s).emulateTransitionEnd(t.TRANSITION_DURATION):s(),a.removeClass("in")};var o=e.fn.tab;e.fn.tab=n,e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=o,this};var r=function(t){t.preventDefault(),n.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),$(function(){$(document).ajaxSend(function(e,t,n){let o=n.url;/^http/i.test(o)||$("#loading-indicator").show()}),$(document).ajaxComplete(function(e,t,n){$("#loading-indicator").hide()});var e=!1;$("form#modal-form-add").on("submit",function(t){e?t.preventDefault():e=!0})}),$(function(){var e=document.querySelector("form.track-dirty")||document.querySelector("#formset-parent");
1if(e){var t=$("button.pmx-btn-add");if(t.length)new MutationObserver(function(n){n.forEach(function(n){"class"===n.attributeName&&(e.classList.contains("dirty")?(t.addClass("disabled"),t.removeAttr("data-toggle"),t.attr("title","Save your changes before adding another."),t.tooltip("enable")):(t.removeClass("disabled"),t.attr("data-toggle","modal"),t.removeAttr("title"),t.tooltip("disable")))})}).observe(e,{attributes:!0})}}),$(function(){function e(){var e,t,n,o;e="input[name='"+"reimbursements"+"']",t=$("select[name='"+"reimbursement_type"+"']").val(),n=$(e).val(),o=$(e).data("value")||0,"pro_rata"==t||"base_stop"==t?($(e).data("value",n),$(e).prop("disabled",!0),$(e).val(0)):($(e).prop("disabled",!1),o&&$(e).val(o))}$("select[name='reimbursement_type']").change(e),e()}),$(".alert-success").fadeTo(2e3,500).slideUp(500,function(){$(".alert-success").slideUp(500)}),$(function(){function e(){var e=$("select[name='unit_preference']").val(),t=$("select[name='property_type']").val(),n=$(".building-size-input").siblings("span.input-group-addon");try{"multifamily"===t||"self-storage"===t?n.text("units"):"m"===e?n.text("SQM"):n.text("SF")}catch(e){console.debug("No matching elements found for sizing units")}}$("select[name='unit_preference']").change(e),$("select[name='property_type']").change(e)}),$(function(){var e=["percent_pri","percent_bri","percent_eri","percent_egi"],t=["percent_eri","percent_egi"];function n(){var n=$("select[name='expense_type']").val(),o=n&&0===n.indexOf("percent_"),r=-1!==e.indexOf(n),a=-1!==t.indexOf(n);o?$("div#div_id_percent_fixed").hide():$("div#div_id_percent_fixed").show(),r?$("div#inflation-set").hide():$("div#inflation-set").show(),a?$("span.non-reimbursable-expense").show():$("span.non-reimbursable-expense").hide()}$("select[name='expense_type']").change(n),n()}),$(function(){$("form.read-only-property").length&&($("form.read-only-property :input").prop("disabled",!0),$("form.read-only-property :button").prop("disabled",!0),$("a.duplicate-values").hide())}),$(function(){window.SKIP_JQUERY_AUTONUMERIC||$.fn.autoNumeric&&registerAutoNumeric()}),function(e,t){function n(){return new Date(Date.UTC.apply(Date,arguments))}function o(){var e=new Date;return n(e.getFullYear(),e.getMonth(),e.getDate())}function r(e){return function(){return this[e].apply(this,arguments)}}var a,i=(a={get:function(e){return this.slice(e)[0]},contains:function(e){for(var t=e&&e.valueOf(),n=0,o=this.length;n<o;n++)if(this[n].valueOf()===t)return n;return-1},remove:function(e){this.splice(e,1)},replace:function(t){t&&(e.isArray(t)||(t=[t]),this.clear(),this.push.apply(this,t))},clear:function(){this.length=0},copy:function(){var e=new i;return e.replace(this),e}},function(){var t=[];return t.push.apply(t,arguments),e.extend(t,a),t}),s=function(t,n){this._process_options(n),this.dates=new i,this.viewDate=this.o.defaultViewDate,this.focusDate=null,this.element=e(t),this.isInline=!1,this.isInput=this.element.is("input"),this.component=!!this.element.hasClass("date")&&this.element.find(".add-on, .input-group-addon, .btn"),this.hasInput=this.component&&this.element.find("input").length,this.component&&0===this.component.length&&(this.component=!1),this.picker=e(f.template),this._buildEvents(),this._attachEvents(),this.isInline?this.picker.addClass("datepicker-inline").appendTo(this.element):this.picker.addClass("datepicker-dropdown dropdown-menu"),this.o.rtl&&this.picker.addClass("datepicker-rtl"),this.viewMode=this.o.startView,this.o.calendarWeeks&&this.picker.find("tfoot .today, tfoot .clear").attr("colspan",function(e,t){return parseInt(t)+1}),this._allow_update=!1,this.setStartDate(this._o.startDate),this.setEndDate(this._o.endDate),this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled),this.setDatesDisabled(this.o.datesDisabled),this.fillDow(),this.fillMonths(),this._allow_update=!0,this.update(),this.showMode(),this.isInline&&this.show()};s.prototype={constructor:s,_process_options:function(t){this._o=e.extend({},this._o,t);var r=this.o=e.extend({},this._o),a=r.language;switch(m[a]||(a=a.split("-")[0],m[a]||(a=u.language)),r.language=a,r.startView){case 2:case"decade":r.startView=2;break;case 1:case"year":r.startView=1;break;default:r.startView=0}switch(r.minViewMode){case 1:case"months":r.minViewMode=1;break;case 2:case"years":r.minViewMode=2;break;default:r.minViewMode=0}r.startView=Math.max(r.startView,r.minViewMode),!0!==r.multidate&&(r.multidate=Number(r.multidate)||!1,!1!==r.multidate&&(r.multidate=Math.max(0,r.multidate))),r.multidateSeparator=String(r.multidateSeparator),r.weekStart%=7,r.weekEnd=(r.weekStart+6)%7;var i=f.parseFormat(r.format);if(r.startDate!==-1/0&&(r.startDate?r.startDate instanceof Date?r.startDate=this._local_to_utc(this._zero_time(r.startDate)):r.startDate=f.parseDate(r.startDate,i,r.language):r.startDate=-1/0),r.endDate!==1/0&&(r.endDate?r.endDate instanceof Date?r.endDate=this._local_to_utc(this._zero_time(r.endDate)):r.endDate=f.parseDate(r.endDate,i,r.language):r.endD
1ate=1/0),r.daysOfWeekDisabled=r.daysOfWeekDisabled||[],e.isArray(r.daysOfWeekDisabled)||(r.daysOfWeekDisabled=r.daysOfWeekDisabled.split(/[,\s]*/)),r.daysOfWeekDisabled=e.map(r.daysOfWeekDisabled,function(e){return parseInt(e,10)}),r.datesDisabled=r.datesDisabled||[],!e.isArray(r.datesDisabled)){var s=[];s.push(f.parseDate(r.datesDisabled,i,r.language)),r.datesDisabled=s}r.datesDisabled=e.map(r.datesDisabled,function(e){return f.parseDate(e,i,r.language)});var l=String(r.orientation).toLowerCase().split(/\s+/g),c=r.orientation.toLowerCase();if(l=e.grep(l,function(e){return/^auto|left|right|top|bottom$/.test(e)}),r.orientation={x:"auto",y:"auto"},c&&"auto"!==c)if(1===l.length)switch(l[0]){case"top":case"bottom":r.orientation.y=l[0];break;case"left":case"right":r.orientation.x=l[0]}else c=e.grep(l,function(e){return/^left|right$/.test(e)}),r.orientation.x=c[0]||"auto",c=e.grep(l,function(e){return/^top|bottom$/.test(e)}),r.orientation.y=c[0]||"auto";else;if(r.defaultViewDate){var d=r.defaultViewDate.year||(new Date).getFullYear(),p=r.defaultViewDate.month||0,h=r.defaultViewDate.day||1;r.defaultViewDate=n(d,p,h)}else r.defaultViewDate=o();r.showOnFocus=void 0===r.showOnFocus||r.showOnFocus},_events:[],_secondaryEvents:[],_applyEvents:function(e){for(var t,n,o,r=0;r<e.length;r++)t=e[r][0],2===e[r].length?(n=void 0,o=e[r][1]):3===e[r].length&&(n=e[r][1],o=e[r][2]),t.on(o,n)},_unapplyEvents:function(e){for(var t,n,o,r=0;r<e.length;r++)t=e[r][0],2===e[r].length?(o=void 0,n=e[r][1]):3===e[r].length&&(o=e[r][1],n=e[r][2]),t.off(n,o)},_buildEvents:function(){var t={keyup:e.proxy(function(t){-1===e.inArray(t.keyCode,[27,37,39,38,40,32,13,9])&&this.update()},this),keydown:e.proxy(this.keydown,this)};!0===this.o.showOnFocus&&(t.focus=e.proxy(this.show,this)),this.isInput?this._events=[[this.element,t]]:this.component&&this.hasInput?this._events=[[this.element.find("input"),t],[this.component,{click:e.proxy(this.show,this)}]]:this.element.is("div")?this.isInline=!0:this._events=[[this.element,{click:e.proxy(this.show,this)}]],this._events.push([this.element,"*",{blur:e.proxy(function(e){this._focused_from=e.target},this)}],[this.element,{blur:e.proxy(function(e){this._focused_from=e.target},this)}]),this._secondaryEvents=[[this.picker,{click:e.proxy(this.click,this)}],[e(window),{resize:e.proxy(this.place,this)}],[e(document),{"mousedown touchstart":e.proxy(function(e){this.element.is(e.target)||this.element.find(e.target).length||this.picker.is(e.target)||this.picker.find(e.target).length||this.hide()},this)}]]},_attachEvents:function(){this._detachEvents(),this._applyEvents(this._events)},_detachEvents:function(){this._unapplyEvents(this._events)},_attachSecondaryEvents:function(){this._detachSecondaryEvents(),this._applyEvents(this._secondaryEvents)},_detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)},_trigger:function(t,n){var o=n||this.dates.get(-1),r=this._utc_to_local(o);this.element.trigger({type:t,date:r,dates:e.map(this.dates,this._utc_to_local),format:e.proxy(function(e,t){0===arguments.length?(e=this.dates.length-1,t=this.o.format):"string"==typeof e&&(t=e,e=this.dates.length-1),t=t||this.o.format;var n=this.dates.get(e);return f.formatDate(n,t,this.o.language)},this)})},show:function(){if(!this.element.attr("readonly"))return this.isInline||this.picker.appendTo(this.o.container),this.place(),this.picker.show(),this._attachSecondaryEvents(),this._trigger("show"),(window.navigator.msMaxTouchPoints||"ontouchstart"in document)&&this.o.disableTouchKeyboard&&e(this.element).blur(),this},hide:function(){return this.isInline?this:this.picker.is(":visible")?(this.focusDate=null,this.picker.hide().detach(),this._detachSecondaryEvents(),this.viewMode=this.o.startView,this.showMode(),this.o.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this._trigger("hide"),this):this},remove:function(){return this.hide(),this._detachEvents(),this._detachSecondaryEvents(),this.picker.remove(),delete this.element.data().datepicker,this.isInput||delete this.element.data().date,this},_utc_to_local:function(e){return e&&new Date(e.getTime()+6e4*e.getTimezoneOffset())},_local_to_utc:function(e){return e&&new Date(e.getTime()-6e4*e.getTimezoneOffset())},_zero_time:function(e){return e&&new Date(e.getFullYear(),e.getMonth(),e.getDate())},_zero_utc_time:function(e){return e&&new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()))},getDates:function(){return e.map(this.dates,this._utc_to_local)},getUTCDates:function(){return e.map(this.dates,function(e){return new Date(e)})},getDate:function(){return this._utc_to_local(this.getUTCDate())},getUTCDate:function(){var e=this.dates.get(-1);return void 0!==e?new Date(e):null},clearDates:function(){var e;this.isInput?e=this.element:this.component&&(e=this.element.find("input")),e&&e.val("").change(),this.update(),this._trigger("changeDate"),this.o.autoclose&&this.hide()},setDates:function(){var t=e.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,t),this._trigger("changeDate"),this.setValue(),this},setUTCDates:function(){var t=e.isArray(arguments[0])?arguments[0]:arguments;return this.update.apply(this,e.map(t,this._utc_to_local)),this._trigger("changeDate"),this.setValue(),this},setDate:r("setDates"),setUTCDate:r("setUTCDates"),setValue:function(){var e=this.getFormattedDate();return this.isInput?this.element.val(e).change():this.component&&this.element.find("input").val(e).change(),this},getFormattedDate:function(t){void 0===t&&(t=this.o.format);var n=this.o.language;return e.map(this.dates,function(e){return f.formatDate(e,t,n)}).join(this.o.multidateSeparator)},setStartDate:function(e){return this._process_options({startDate:e}),this.update(),this.updateNavArrows(),this},setEndDate:function(e){return this._process_options({endDate:e}),this.update(),this.updateNavArrows(),this},setDaysOfWeekDisabled:function(e){return this._process_options({daysOfWeekDisabled:e}),this.update(),this.updateNavArrows(),this},setDatesDisabled:function(e){this._process_options({datesDisabled:e}),this.update(),this.updateNavArrows()},place:function(){if(this.isInline)return this;var t=this.picker.outerWidth(),n=this.picker.outerHeight(),o=e(this.o.container).width(),r=e(this.o.container).height(),a=e(this.o.container).scrollTop(),i=e(this.o.container).offset(),s=[];this.element.parents().each(function(){var t=e(this).css("z-index");"auto"!==t&&0!==t&&s.push(parseInt(t))});var l=Math.max.apply(Math,s)+10,c=this.component?this.component.parent().offset():this.element.offset(),d=this.component?this.component.outerHeight(!0):this.element.outerHeight(!1),u=this.component?this.component.outerWidth(!0):this.element.outerWidth(!1),p=c.left-i.left,m=c.top-i.top;this.picker.removeClass("datepicker-orient-top datepicker-orient-bottom datepicker-orient-right datepicker-orient-left"),"auto"!==this.o.orientation.x?(this.picker.addClass("datepicker-orient-"+this.o.orientation.x),"right"===this.o.orientation.x&&(p-=t-u)):c.left<0?(this.picker.addClass("datepicker-orient-left"),p-=c.left-10):p+t>o?(this.picker.addClass("datepicker-orient-right"),p=c.left+u-t):this.picker.addClass("datepicker-orient-left");var f,h,y=this.o.orientation.y;if("auto"===y&&(f=-a+m-n,h=a+r-(m+d+n),y=Math.max(f,h)===h?"top":"bottom"),this.picker.addClass("datepicker-orient-"+y),"top"===y?m+=d:m-=n+parseInt(this.picker.css("padding-top")),this.o.rtl){var g=o-(p+u);this.picker.css({top:m,right:g,zIndex:l})}else this.picker.css({top:m,left:p,zIndex:l});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var t=this.dates.copy(),n=[],o=!1;return arguments.length?(e.each(arguments,e.proxy(function(e,t){t instanceof Date&&(t=this._local_to_utc(t)),n.push(t)},this)),o=!0):(n=(n=this.isInput?this.element.val():this.element.data("date")||this.element.find("input").val())&&this.o.multidate?n.split(this.o.multidateSeparator):[n],delete this.element.data().date),n=e.map(n,e.proxy(function(e){return f.parseDate(e,this.o.format,this.o.language)},this)),n=e.grep(n,e.proxy(function(e){return e<this.o.startDate||e>this.o.endDate||!e},this),!0),this.dates.replace(n),this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDate<this.o.startDate?this.viewDate=new Date(this.o.startDate):this.viewDate>this.o.endDate&&(this.viewDate=new Date(this.o.endDate)),o?this.setValue():n.length&&String(t)!==String(this.dates)&&this._trigger("changeDate"),!this.dates.length&&t.length&&this._trigger("clearDate"),this.fill(),this},fillDow:function(){var e=this.o.weekStart,t="<tr>";if(this.o.calendarWeeks){this.picker.find(".datepicker-days thead tr:first-child .datepicker-switch").attr("colspan",function(e,t){return parseInt(t)+1});t+='<th class="cw">&#160;</th>'}for(;e<this.o.weekStart+7;)t+='<th class="dow">'+m[this.o.language].daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".datepicker-days thead").append(t)},fillMonths:function(){for(var e="",t=0;t<12;)e+='<span class="month">'+m[this.o.language].monthsShort[t++]+"</span>";this.picker.find(".datepicker-months td").html(e)},setRange:function(t){t&&t.length?this.range=e.map(t,function(e){return e.valueOf()}):delete this.range,this.fill()},getClassNames:function(t){var n=[],o=this.viewDate.getUTCFullYear(),r=this.viewDate.getUTCMonth(),a=new Date;return t.getUTCFullYear()<o||t.getUTCFullYear()===o&&t.getUTCMonth()<r?n.push("old"):(t.getUTCFullYear()>o||t.getUTCFullYear()===o&&t.getUTCMonth()>r)&&n.push("new"),this.focusDate&&t.valueOf()===this.focusDate.valueOf()&&n.push("focused"),this.o.todayHighlight&&t.getUTCFullYear()===a.getFullYear()&&t.getUTCMonth()===a.getMonth()&&t.getUTCDate()===a.getDate()&&n.push("today"),-1!==this.dates.contains(t)&&n.push("active"),(t.valueOf()<this.o.startDate||t.valueOf()>this.o.endDate||-1!==e.inArray(t.getUTCDay(),this.o.daysOfWeekDisabled))&&n.push("disabled"),this.o.datesDisabled.length>0&&e.grep(this.o.datesDisabled,function(e){return o=e,(n=t).getUTCFullYear()===o.getUTCFullYear()&&n.getUTCMonth()===o.getUTCMonth()&&n.getUTCDate()===o.getUTCDate();var n,o}).length>0&&n.push("disabled","disabled-date"),this.range&&(t>this.range[0]&&t<this.range[this.range.length-1]&&n.push("range"),-1!==e.inArray(t.valueOf(),this.range)&&n.push("selected")),n},fill:function(){var t,o=new Date(this.viewDate),r=o.getUTCFullYear(),a=o.getUTCMonth(),i=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,s=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,l=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,c=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,d=m[this.o.language].today||m.en.today||"",u=m[this.o.language].clear||m.en.clear||"";if(!isNaN(r)&&!isNaN(a)){this.picker.find(".datepicker-days thead .datepicker-switch").text(m[this.o.language].months[a]+" "+r),this.picker.find("tfoot .today").text(d).toggle(!1!==this.o.todayBtn),this.picker.find("tfoot .clear").text(u).toggle(!1!==this.o.clearBtn),this.updateNavArrows(),this.fillMonths();var p=n(r,a-1,28),h=f.getDaysInMonth(p.getUTCFullYear(),p.getUTCMonth());p.setUTCDate(h),p.setUTCDate(h-(p.getUTCDay()-this.o.weekStart+7)%7);var y=new Date(p);y.setUTCDate(y.getUTCDate()+42),y=y.valueOf();for(var g,v=[];p.valueOf()<y;){if(p.getUTCDay()===this.o.weekStart&&(v.push("<tr>"),this.o.calendarWeeks)){var w=new Date(+p+(this.o.weekStart-p.getUTCDay()-7)%7*864e5),b=new Date(Number(w)+(11-w.getUTCDay())%7*864e5),x=new Date(Number(x=n(b.getUTCFullYear(),0,1))+(11-x.getUTCDay())%7*864e5),S=(b-x)/864e5/7+1;v.push('<td class="cw">'+S+"</td>")}if((g=this.getClassNames(p)).push("day"),this.o.beforeShowDay!==e.noop){var P=this.o.beforeShowDay(this._utc_to_local(p));void 0===P?P={}:"boolean"==typeof P?P={enabled:P}
1:"string"==typeof P&&(P={classes:P}),!1===P.enabled&&g.push("disabled"),P.classes&&(g=g.concat(P.classes.split(/\s+/))),P.tooltip&&(t=P.tooltip)}g=e.unique(g),v.push('<td class="'+g.join(" ")+'"'+(t?' title="'+t+'"':"")+">"+p.getUTCDate()+"</td>"),t=null,p.getUTCDay()===this.o.weekEnd&&v.push("</tr>"),p.setUTCDate(p.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").empty().append(v.join(""));var C=this.picker.find(".datepicker-months").find("th:eq(1)").text(r).end().find("span").removeClass("active");if(e.each(this.dates,function(e,t){t.getUTCFullYear()===r&&C.eq(t.getUTCMonth()).addClass("active")}),(r<i||r>l)&&C.addClass("disabled"),r===i&&C.slice(0,s).addClass("disabled"),r===l&&C.slice(c+1).addClass("disabled"),this.o.beforeShowMonth!==e.noop){var T=this;e.each(C,function(t,n){if(!e(n).hasClass("disabled")){var o=new Date(r,t,1);!1===T.o.beforeShowMonth(o)&&e(n).addClass("disabled")}})}v="",r=10*parseInt(r/10,10);var D=this.picker.find(".datepicker-years").find("th:eq(1)").text(r+"-"+(r+9)).end().find("td");r-=1;for(var E,M=e.map(this.dates,function(e){return e.getUTCFullYear()}),k=-1;k<11;k++)E=["year"],-1===k?E.push("old"):10===k&&E.push("new"),-1!==e.inArray(r,M)&&E.push("active"),(r<i||r>l)&&E.push("disabled"),v+='<span class="'+E.join(" ")+'">'+r+"</span>",r+=1;D.html(v)}},updateNavArrows:function(){if(this._allow_update){var e=new Date(this.viewDate),t=e.getUTCFullYear(),n=e.getUTCMonth();switch(this.viewMode){case 0:this.o.startDate!==-1/0&&t<=this.o.startDate.getUTCFullYear()&&n<=this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&t>=this.o.endDate.getUTCFullYear()&&n>=this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:this.o.startDate!==-1/0&&t<=this.o.startDate.getUTCFullYear()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),this.o.endDate!==1/0&&t>=this.o.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}},click:function(t){t.preventDefault();var o,r,a,i=e(t.target).closest("span, td, th");if(1===i.length)switch(i[0].nodeName.toLowerCase()){case"th":switch(i[0].className){case"datepicker-switch":this.showMode(1);break;case"prev":case"next":var s=f.modes[this.viewMode].navStep*("prev"===i[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,s),this._trigger("changeMonth",this.viewDate);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,s),1===this.viewMode&&this._trigger("changeYear",this.viewDate)}this.fill();break;case"today":var l=new Date;l=n(l.getFullYear(),l.getMonth(),l.getDate(),0,0,0),this.showMode(-2);var c="linked"===this.o.todayBtn?null:"view";this._setDate(l,c);break;case"clear":this.clearDates()}break;case"span":i.hasClass("disabled")||(this.viewDate.setUTCDate(1),i.hasClass("month")?(a=1,r=i.parent().find("span").index(i),o=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(r),this._trigger("changeMonth",this.viewDate),1===this.o.minViewMode&&this._setDate(n(o,r,a))):(a=1,r=0,o=parseInt(i.text(),10)||0,this.viewDate.setUTCFullYear(o),this._trigger("changeYear",this.viewDate),2===this.o.minViewMode&&this._setDate(n(o,r,a))),this.showMode(-1),this.fill());break;case"td":i.hasClass("day")&&!i.hasClass("disabled")&&(a=parseInt(i.text(),10)||1,o=this.viewDate.getUTCFullYear(),r=this.viewDate.getUTCMonth(),i.hasClass("old")?0===r?(r=11,o-=1):r-=1:i.hasClass("new")&&(11===r?(r=0,o+=1):r+=1),this._setDate(n(o,r,a)))}this.picker.is(":visible")&&this._focused_from&&e(this._focused_from).focus(),delete this._focused_from},_toggle_multidate:function(e){var t=this.dates.contains(e);if(e||this.dates.clear(),-1!==t?(!0===this.o.multidate||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(t):!1===this.o.multidate?(this.dates.clear(),this.dates.push(e)):this.dates.push(e),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(e,t){var n;t&&"date"!==t||this._toggle_multidate(e&&new Date(e)),t&&"view"!==t||(this.viewDate=e&&new Date(e)),this.fill(),this.setValue(),t&&"view"===t||this._trigger("changeDate"),this.isInput?n=this.element:this.component&&(n=this.element.find("input")),n&&n.change(),!this.o.autoclose||t&&"date"!==t||this.hide()},moveMonth:function(e,t){if(e){if(!t)return e;var n,o,r=new Date(e.valueOf()),a=r.getUTCDate(),i=r.getUTCMonth(),s=Math.abs(t);if(t=t>0?1:-1,1===s)o=-1===t?function(){return r.getUTCMonth()===i}:function(){return r.getUTCMonth()!==n},n=i+t,r.setUTCMonth(n),(n<0||n>11)&&(n=(n+12)%12);else{for(var l=0;l<s;l++)r=this.moveMonth(r,t);
1n=r.getUTCMonth(),r.setUTCDate(a),o=function(){return n!==r.getUTCMonth()}}for(;o();)r.setUTCDate(--a),r.setUTCMonth(n);return r}},moveYear:function(e,t){return this.moveMonth(e,12*t)},dateWithinRange:function(e){return e>=this.o.startDate&&e<=this.o.endDate},keydown:function(e){if(this.picker.is(":visible")){var t,n,r,a,i=!1,s=this.focusDate||this.viewDate;switch(e.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),e.preventDefault();break;case 37:case 39:if(!this.o.keyboardNavigation)break;t=37===e.keyCode?-1:1,e.ctrlKey?(n=this.moveYear(this.dates.get(-1)||o(),t),r=this.moveYear(s,t),this._trigger("changeYear",this.viewDate)):e.shiftKey?(n=this.moveMonth(this.dates.get(-1)||o(),t),r=this.moveMonth(s,t),this._trigger("changeMonth",this.viewDate)):((n=new Date(this.dates.get(-1)||o())).setUTCDate(n.getUTCDate()+t),(r=new Date(s)).setUTCDate(s.getUTCDate()+t)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=r,this.setValue(),this.fill(),e.preventDefault());break;case 38:case 40:if(!this.o.keyboardNavigation)break;t=38===e.keyCode?-1:1,e.ctrlKey?(n=this.moveYear(this.dates.get(-1)||o(),t),r=this.moveYear(s,t),this._trigger("changeYear",this.viewDate)):e.shiftKey?(n=this.moveMonth(this.dates.get(-1)||o(),t),r=this.moveMonth(s,t),this._trigger("changeMonth",this.viewDate)):((n=new Date(this.dates.get(-1)||o())).setUTCDate(n.getUTCDate()+7*t),(r=new Date(s)).setUTCDate(s.getUTCDate()+7*t)),this.dateWithinRange(r)&&(this.focusDate=this.viewDate=r,this.setValue(),this.fill(),e.preventDefault());break;case 32:break;case 13:s=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(s),i=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(e.preventDefault(),"function"==typeof e.stopPropagation?e.stopPropagation():e.cancelBubble=!0,this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}if(i)this.dates.length?this._trigger("changeDate"):this._trigger("clearDate"),this.isInput?a=this.element:this.component&&(a=this.element.find("input")),a&&a.change()}else 27===e.keyCode&&this.show()},showMode:function(e){e&&(this.viewMode=Math.max(this.o.minViewMode,Math.min(2,this.viewMode+e))),this.picker.children("div").hide().filter(".datepicker-"+f.modes[this.viewMode].clsName).css("display","block"),this.updateNavArrows()}};var l=function(t,n){this.element=e(t),this.inputs=e.map(n.inputs,function(e){return e.jquery?e[0]:e}),delete n.inputs,d.call(e(this.inputs),n).bind("changeDate",e.proxy(this.dateUpdated,this)),this.pickers=e.map(this.inputs,function(t){return e(t).data("datepicker")}),this.updateDates()};l.prototype={updateDates:function(){this.dates=e.map(this.pickers,function(e){return e.getUTCDate()}),this.updateRanges()},updateRanges:function(){var t=e.map(this.dates,function(e){return e.valueOf()});
1e.each(this.pickers,function(e,n){n.setRange(t)})},dateUpdated:function(t){if(!this.updating){this.updating=!0;var n=e(t.target).data("datepicker").getUTCDate(),o=e.inArray(t.target,this.inputs),r=o-1,a=o+1,i=this.inputs.length;if(-1!==o){if(e.each(this.pickers,function(e,t){t.getUTCDate()||t.setUTCDate(n)}),n<this.dates[r])for(;r>=0&&n<this.dates[r];)this.pickers[r--].setUTCDate(n);else if(n>this.dates[a])for(;a<i&&n>this.dates[a];)this.pickers[a++].setUTCDate(n);this.updateDates(),delete this.updating}}},remove:function(){e.map(this.pickers,function(e){e.remove()}),delete this.element.data().datepicker}};var c=e.fn.datepicker,d=function(t){var n,o=Array.apply(null,arguments);return o.shift(),this.each(function(){var r=e(this),a=r.data("datepicker"),i="object"==typeof t&&t;if(!a){var c=function(t,n){var o=e(t).data(),r={},a=new RegExp("^"+n.toLowerCase()+"([A-Z])");function i(e,t){return t.toLowerCase()}for(var s in n=new RegExp("^"+n.toLowerCase()),o)n.test(s)&&(r[s.replace(a,i)]=o[s]);return r}(this,"date"),d=function(t){var n={};
1if(m[t]||(t=t.split("-")[0],m[t])){var o=m[t];return e.each(p,function(e,t){t in o&&(n[t]=o[t])}),n}}(e.extend({},u,c,i).language),f=e.extend({},u,d,c,i);if(r.hasClass("input-daterange")||f.inputs){var h={inputs:f.inputs||r.find("input").toArray()};r.data("datepicker",a=new l(this,e.extend(f,h)))}else r.data("datepicker",a=new s(this,f))}if("string"==typeof t&&"function"==typeof a[t]&&void 0!==(n=a[t].apply(a,o)))return!1}),void 0!==n?n:this};e.fn.datepicker=d;var u=e.fn.datepicker.defaults={autoclose:!1,beforeShowDay:e.noop,beforeShowMonth:e.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"yyyy-mm-dd",keyboardNavigation:!0,language:"en",minViewMode:0,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,weekStart:0,disableTouchKeyboard:!1,container:"body"},p=e.fn.datepicker.locale_opts=["format","rtl","weekStart"];e.fn.datepicker.Constructor=s;var m=e.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear"}},f={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},getDaysInMonth:function(e,t){return[31,f.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g,parseFormat:function(e){var t=e.replace(this.validParts,"\0").split("\0"),n=e.match(this.validParts);if(!t||!t.length||!n||0===n.length)throw new Error("Invalid date format.");return{separators:t,parts:n}},parseDate:function(t,o,r){if(t){if(t instanceof Date)return t;"string"==typeof o&&(o=f.parseFormat(o));var a,i,l,c=/([\-+]\d+)([dmwy])/,d=t.match(/([\-+]\d+)([dmwy])/g);if(/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(t)){for(t=new Date,l=0;l<d.length;l++)switch(a=c.exec(d[l]),i=parseInt(a[1]),a[2]){case"d":t.setUTCDate(t.getUTCDate()+i);break;case"m":t=s.prototype.moveMonth.call(s.prototype,t,i);break;case"w":t.setUTCDate(t.getUTCDate()+7*i);break;case"y":t=s.prototype.moveYear.call(s.prototype,t,i)}return n(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),0,0,0)}d=t&&t.match(this.nonpunctuation)||[],t=new Date;var u,p,h={},y=["yyyy","yy","M","MM","m","mm","d","dd"],g={yyyy:function(e,t){return e.setUTCFullYear(t)},yy:function(e,t){return e.setUTCFullYear(2e3+t)},m:function(e,t){if(isNaN(e))return e;for(t-=1;t<0;)t+=12;for(t%=12,e.setUTCMonth(t);e.getUTCMonth()!==t;)e.setUTCDate(e.getUTCDate()-1);return e},d:function(e,t){return e.setUTCDate(t)}};g.M=g.MM=g.mm=g.m,g.dd=g.d,t=n(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0);var v=o.parts.slice();if(d.length!==v.length&&(v=e(v).filter(function(t,n){return-1!==e.inArray(n,y)}).toArray()),d.length===v.length){var w,b,x;for(l=0,w=v.length;l<w;l++){if(u=parseInt(d[l],10),a=v[l],isNaN(u))switch(a){case"MM":p=e(m[r].months).filter(S),u=e.inArray(p[0],m[r].months)+1;break;case"M":p=e(m[r].monthsShort).filter(S),u=e.inArray(p[0],m[r].monthsShort)+1}h[a]=u}for(l=0;l<y.length;l++)(x=y[l])in h&&!isNaN(h[x])&&(b=new Date(t),g[x](b,h[x]),isNaN(b)||(t=b))}return t}function S(){var e=this.slice(0,d[l].length),t=d[l].slice(0,e.length);return e.toLowerCase()===t.toLowerCase()}},formatDate:function(t,n,o){if(!t)return"";"string"==typeof n&&(n=f.parseFormat(n));var r={d:t.getUTCDate(),D:m[o].daysShort[t.getUTCDay()],DD:m[o].days[t.getUTCDay()],m:t.getUTCMonth()+1,M:m[o].monthsShort[t.getUTCMonth()],MM:m[o].months[t.getUTCMonth()],yy:t.getUTCFullYear().toString().substring(2),yyyy:t.getUTCFullYear()};r.dd=(r.d<10?"0":"")+r.d,r.mm=(r.m<10?"0":"")+r.m,t=[];for(var a=e.extend([],n.separators),i=0,s=n.parts.length;i<=s;i++)a.length&&t.push(a.shift()),t.push(r[n.parts[i]]);return t.join("")},headTemplate:'<thead><tr><th class="prev">&#171;</th><th colspan="5" class="datepicker-switch"></th><th class="next">&#187;</th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'};f.template='<div class="datepicker"><div class="datepicker-days"><table class=" table-condensed">'+f.headTemplate+"<tbody></tbody>"+f.footTemplate+'</table></div><div class="datepicker-months"><table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+'</table></div><div class="datepicker-years"><table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+"</table></div></div>
1",e.fn.datepicker.DPGlobal=f,e.fn.datepicker.noConflict=function(){return e.fn.datepicker=c,this},e(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(t){var n=e(this);n.data("datepicker")||(t.preventDefault(),d.call(n,"show"))}),e(function(){d.call(e('[data-provide="datepicker-inline"]'))})}(window.jQuery),$(function(){if(jQuery().dirtyForms){$("form.track-dirty").dirtyForms({});var e=document.getElementsByClassName("track-dirty")[0],t=document.title;new MutationObserver(function(e){e.forEach(function(e){e.target.classList.contains("dirty")?($("div.dirtyWarning").removeClass("hidden"),document.title="(Unsaved changes) "+t):($("div.dirtyWarning").addClass("hidden"),document.title=t)})}).observe(e,{subtree:!1,attributes:!0})}}),$(function(){var Charts={_HYPHY_REGEX:/-([a-z])/g,_cleanAttr:function(e){delete e.chart,delete e.value,delete e.labels},doughnut:function(element){var attrData=$.extend({},$(element).data()),data=eval(attrData.value);Charts._cleanAttr(attrData);var options=$.extend({responsive:!0,animation:!1,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:80},attrData);new Chart(element.getContext("2d")).Doughnut(data,options)},bar:function(element){var attrData=$.extend({},$(element).data()),data={labels:eval(attrData.labels),datasets:eval(attrData.value).map(function(e,t){return $.extend({fillColor:t%2?"#42a5f5":"#1bc98e",strokeColor:"transparent"},e)})};Charts._cleanAttr(attrData);var options=$.extend({responsive:!0,animation:!1,scaleShowVerticalLines:!1,scaleOverride:!0,scaleSteps:4,scaleStepWidth:25,scaleStartValue:0,barValueSpacing:10,scaleFontColor:"rgba(0,0,0,.4)",scaleFontSize:14,scaleLineColor:"rgba(0,0,0,.05)",scaleGridLineColor:"rgba(0,0,0,.05)",barDatasetSpacing:2},attrData);new Chart(element.getContext("2d")).Bar(data,options)},line:function(element){var attrData=$.extend({},$(element).data()),data={labels:eval(attrData.labels),datasets:eval(attrData.value).map(function(e){return $.extend({fillColor:"rgba(66, 165, 245, .2)",strokeColor:"#42a5f5",pointStrokeColor:"#fff"},e)})};Charts._cleanAttr(attrData);var options=$.extend({animation:!1,responsive:!0,bezierCurve:!0,bezierCurveTension:.25,scaleShowVerticalLines:!1,pointDot:!1,tooltipTemplate:"<%= value %>",scaleOverride:!0,scaleSteps:3,scaleStepWidth:1e3,scaleStartValue:2e3,scaleLineColor:"rgba(0,0,0,.05)",scaleGridLineColor:"rgba(0,0,0,.05)",scaleFontColor:"rgba(0,0,0,.4)",scaleFontSize:14,scaleLabel:function(e){return e.value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")}},attrData);new Chart(element.getContext("2d")).Line(data,options)},"spark-line":function(element){var attrData=$.extend({},$(element).data()),data={labels:eval(attrData.labels),datasets:eval(attrData.value).map(function(e){return $.extend({fillColor:"rgba(255,255,255,.3)",strokeColor:"#fff",pointStrokeColor:"#fff"},e)})};Charts._cleanAttr(attrData);var options=$.extend({animation:!1,responsive:!0,bezierCurve:!0,bezierCurveTension:.25,showScale:!1,pointDotRadius:0,pointDotStrokeWidth:0,pointDot:!1,showTooltips:!1},attrData);new Chart(element.getContext("2d")).Line(data,options)}};$(document).on("redraw.bs.charts",function(){$("[data-chart]").each(function(){$(this).is(":visible")&&Charts[$(this).attr("data-chart")](this)})}).trigger("redraw.bs.charts")}),jQuery.fn.preventDoubleSubmission=function(){return $(this).on("submit",function(e){var t=$(this),n=$(this).find("[type=submit]");n.attr("disabled","disabled"),n.text(n.data("submit-text")||"Processing..."),$(this).find("button").attr("disabled","disabled"),!0===t.data("submitted")?e.preventDefault():t.data("submitted",!0)}),this},function(e){var t=[],n=function(){return t.length?t[t.length-1]:null},o=function(){var e,n=!1;for(e=t.length-1;e>=0;e--)t[e].$blocker&&(t[e].$blocker.toggleClass("current",!n).toggleClass("behind",n),n=!0)};e.jqmodal=function(o,r){var a,i;if(this.$body=e("body"),this.options=e.extend({},e.jqmodal.defaults,r),this.options.doFade=!isNaN(parseInt(this.options.fadeDuration,10)),this.$blocker=null,this.options.closeExisting)for(;e.jqmodal.isActive();)e.jqmodal.close();
1if(t.push(this),o.is("a"))if(i=o.attr("href"),/^#/.test(i)){if(this.$elm=e(i),1!==this.$elm.length)return null;this.$body.append(this.$elm),this.open()}else this.$elm=e("<div>"),this.$body.append(this.$elm),a=function(e,t){t.elm.remove()},this.showSpinner(),o.trigger(e.jqmodal.AJAX_SEND),e.get(i).done(function(t){if(e.jqmodal.isActive()){o.trigger(e.jqmodal.AJAX_SUCCESS);var r=n();r.$elm.empty().append(t).on(e.jqmodal.CLOSE,a),r.hideSpinner(),r.open(),o.trigger(e.jqmodal.AJAX_COMPLETE)}}).fail(function(){o.trigger(e.jqmodal.AJAX_FAIL),n().hideSpinner(),t.pop(),o.trigger(e.jqmodal.AJAX_COMPLETE)});else this.$elm=o,this.$body.append(this.$elm),this.open()},e.jqmodal.prototype={constructor:e.jqmodal,open:function(){var t=this;this.block(),this.options.doFade?setTimeout(function(){t.show()},this.options.fadeDuration*this.options.fadeDelay):this.show(),e(document).off("keydown.modal").on("keydown.modal",function(e){var t=n();27==e.which&&t.options.escapeClose&&t.close()}),this.options.clickClose&&this.$blocker.click(function(t){t.target==this&&e.jqmodal.close()})},close:function(){t.pop(),this.unblock(),this.hide(),e.jqmodal.isActive()||e(document).off("keydown.modal")},block:function(){this.$elm.trigger(e.jqmodal.BEFORE_BLOCK,[this._ctx()]),this.$body.css("overflow","hidden"),this.$blocker=e('<div class="jquery-modal blocker current"></div>').appendTo(this.$body),o(),this.options.doFade&&this.$blocker.css("opacity",0).animate({opacity:1},this.options.fadeDuration),this.$elm.trigger(e.jqmodal.BLOCK,[this._ctx()])},unblock:function(t){!t&&this.options.doFade?this.$blocker.fadeOut(this.options.fadeDuration,this.unblock.bind(this,!0)):(this.$blocker.children().appendTo(this.$body),this.$blocker.remove(),this.$blocker=null,o(),e.jqmodal.isActive()||this.$body.css("overflow",""))},show:function(){this.$elm.trigger(e.jqmodal.BEFORE_OPEN,[this._ctx()]),this.options.showClose&&(this.closeButton=e('<a href="#close-modal" rel="modal:close" class="close-modal '+this.options.closeClass+'">'+this.options.closeText+"</a>"),this.$elm.append(this.closeButton)),this.$elm.addClass(this.options.modalClass).appendTo(this.$blocker),this.options.doFade?this.$elm.css("opacity",0).show().animate({opacity:1},this.options.fadeDuration):this.$elm.show(),this.$elm.trigger(e.jqmodal.OPEN,[this._ctx()])},hide:function(){this.$elm.trigger(e.jqmodal.BEFORE_CLOSE,[this._ctx()]),this.closeButton&&this.closeButton.remove();var t=this;this.options.doFade?this.$elm.fadeOut(this.options.fadeDuration,function(){t.$elm.trigger(e.jqmodal.AFTER_CLOSE,[t._ctx()])}):this.$elm.hide(0,function(){t.$elm.trigger(e.jqmodal.AFTER_CLOSE,[t._ctx()])}),this.$elm.trigger(e.jqmodal.CLOSE,[this._ctx()])},showSpinner:function(){this.options.showSpinner&&(this.spinner=this.spinner||e('<div class="'+this.options.modalClass+'-spinner"></div>').append(this.options.spinnerHtml),this.$body.append(this.spinner),this.spinner.show())},hideSpinner:function(){this.spinner&&this.spinner.remove()},_ctx:function(){return{elm:this.$elm,$blocker:this.$blocker,options:this.options}}},e.jqmodal.close=function(t){if(e.jqmodal.isActive()){t&&t.preventDefault();var o=n();return o.close(),o.$elm}},e.jqmodal.isActive=function(){return t.length>0},e.jqmodal.defaults={closeExisting:!0,escapeClose:!0,clickClose:!0,closeText:"Close",closeClass:"",modalClass:"modal",spinnerHtml:null,showSpinner:!0,showClose:!0,fadeDuration:null,fadeDelay:1},e.jqmodal.BEFORE_BLOCK="modal:before-block",e.jqmodal.BLOCK="modal:block",e.jqmodal.BEFORE_OPEN="modal:before-open",e.jqmodal.OPEN="modal:open",e.jqmodal.BEFORE_CLOSE="modal:before-close",e.jqmodal.CLOSE="modal:close",e.jqmodal.AFTER_CLOSE="modal:after-close",e.jqmodal.AJAX_SEND="modal:ajax:send",e.jqmodal.AJAX_SUCCESS="modal:ajax:success",e.jqmodal.AJAX_FAIL="modal:ajax:fail",e.jqmodal.AJAX_COMPLETE="modal:ajax:complete",e.fn.modal=function(t){return 1===this.length&&new e.jqmodal(this,t),this},e(document).on("click.modal",'a[rel="modal:close"]',e.jqmodal.close),e(document).on("click.modal",'a[rel="modal:open"]',function(t){t.preventDefault(),e(this).modal()})}(jQuery),function(){"use strict";let e=!1;function t(t={}){if(e)return;e=!0;const{cloneEndpoint:o,deleteEndpoint:r,expenseRowsEndpoint:a,pageSize:i=25,propertyId:s,sortEndpoint:l,totalExpenseCount:c,updateEndpoint:d}=t;if(!window.PMXServerPagination)return void console.warn("PMXServerPagination not loaded - expense enhancements disabled");const u=[];l&&!window.PMXSorting&&u.push("PMXSorting"),!o&&!r||window.PMXActions||u.push("PMXActions");const p=[...["PMXDirtyTracking","PMXFormatting","PMXPopover","PMXFormsetTable"],...["PMXExpensePopover","PMXExpenseTermPopover"]].filter(e=>!window[e]);p.push(...u),p.length>0&&console.warn("[PMX] Expense formset: missing modules -",p.join(", "),"- some features will be disabled");let m=!1,f=!1;function h(){!function(){if(window.PMXExpensePopover){const e=document.getElementById("formset-parent");
1e&&e.querySelectorAll(".pmx-expense-display").forEach(e=>{window.PMXExpensePopover.updateExpenseDisplay(e)})}}(),function(){if(window.PMXExpenseTermPopover){const e=document.getElementById("formset-parent");e&&e.querySelectorAll(".pmx-term-display").forEach(e=>{window.PMXExpenseTermPopover.updateTermDisplay(e)})}}();const e=document.getElementById("formset-parent");e&&(!m&&window.PMXExpensePopover&&(window.PMXExpensePopover.initExpense(e),m=!0),!f&&window.PMXExpenseTermPopover&&(window.PMXExpenseTermPopover.initExpenseTerm(e),f=!0))}const y=window.PMXServerPagination.init({controlsContainerId:"expense-pagination",fetchUrl:a,onPageLoad:h,onSortChange:n,pageSize:i,propertyId:s,sortField:"sort_order",sortOrder:"asc",tableBodySelector:"#expense-table-body",totalCount:c,updateEndpoint:d});if(!y)return void console.warn("PMXExpense: Failed to initialize server pagination");const g=document.getElementById("submit-formset"),v=document.getElementById("formset-parent");g&&g.addEventListener("click",async e=>{y.hasDirtyRows()&&(e.preventDefault(),await y.saveAllDirty())});const w=document.querySelector(".pmx-formset-table");w&&w.addEventListener("click",e=>{const t=e.target.closest("th.pmx-sortable");if(t){const e=t.dataset.sortField;e&&y.sortBy(e)}}),h();if(v&&window.PMXFormsetTable&&(window.PMXFormsetTable.initActionsDropdown(v,".pmx-formset-row"),d&&window.PMXFormsetTable.initNotesPopover(v,".pmx-formset-row",d,"expense"),l&&window.PMXFormsetTable.initMoveToPosition(v,"#expense-table-body",".pmx-formset-row",l,"expense_ids",{totalCount:c})),window.PMXActions&&window.PMXActions.initActions(v,{cloneEndpoint:o,deleteEndpoint:r,onCloneSuccess:()=>window.location.reload(),onDeleteSuccess:()=>window.location.reload()}),window.PMXSorting&&l){const e=v.querySelector("#expense-table-body");e&&window.PMXSorting.initSortable(e,{apiEndpoint:l,bodyKey:"expense_ids",handle:".pmx-drag-handle",onSortSuccess:()=>window.location.reload(),recordIdAttr:"data-record-id"})}}function n(e,t){const n=document.querySelector(".pmx-formset-table");n&&n.querySelectorAll("th.pmx-sortable").forEach(n=>{const o=n.dataset.sortField;n.classList.remove("pmx-sorted-asc","pmx-sorted-desc"),o===e&&n.classList.add("asc"===t?"pmx-sorted-asc":"pmx-sorted-desc")})}function o(){window.EXPENSE_CONFIG&&t(window.EXPENSE_CONFIG)}window.PMXExpense={init:t},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",o):o()}(),function(){"use strict";const e=".pmx-expense-display",t=".pmx-expense-popover";function n(e,t,n){const o=parseFloat((e||"0").toString().replace(/,/g,""))||0;if(o<=0)return"—";const r=o.toLocaleString(void 0,{maximumFractionDigits:2,minimumFractionDigits:2});switch(t){case"year":return`${n}${r} / Year`;case"month":return`${n}${r} / Month`;case"$/SF/YR":return`${n}${r} / SF / Yr`;case"percent_pri":return`${r}% of PRI`;case"percent_eri":return`${r}% of ERI`;case"percent_bri":return`${r}% of BRI`;case"percent_egi":return`${r}% of EGI`;case"percent_purchase_price":return`${r}% of Purchase`;default:return`${n}${r} / Year`}}function o(e){if(!e)return;const t=e.dataset.amount||"0",o=e.dataset.type||"year",r=e.dataset.currency||"$";e.textContent=n(t,o,r),e.title="Click to edit"}const r={cellSelector:".pmx-col-expense",displaySelector:e,popoverSelector:t,getOriginalValues(t){const n=t.querySelector(e);let o="",r="year";return n&&(o=n.dataset.amount||"",r=n.dataset.type||"year"),{amount:parseFloat(o)||0,type:r||"year"}},getCurrentValues(e){const t=e.querySelector(".pmx-expense-input"),n=e.querySelector(".pmx-expense-type-select");return{amount:parseFloat((o=t,o?window.jQuery&&window.jQuery.fn.autoNumeric&&window.jQuery(o).data("autoNumeric")?window.jQuery(o).autoNumeric("get")||"":o.value.replace(/,/g,""):""))||0,type:n?n.value:"year"};var o},setInputValues(e,t){const n=e.querySelector(".pmx-expense-input"),o=e.querySelector(".pmx-expense-type-select");n&&function(e,t){if(e)if(window.jQuery&&window.jQuery.fn.autoNumeric){const n=window.jQuery(e);n.data("autoNumeric")||n.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"}),""!==t&&null!=t?n.autoNumeric("set",t):e.value=""}else e.value=""!==t&&null!=t?t:""}(n,t.amount),o&&(o.value=t.type||"year")},syncToFields(e,t){},updateDisplay(t,n){const r=t.querySelector(e);r&&(r.dataset.amount=n.amount,r.dataset.type=n.type,o(r))},onOpen(e){const t=e.querySelector(".pmx-expense-input");if(t&&window.jQuery&&window.jQuery.fn.autoNumeric){const e=window.jQuery(t);e.data("autoNumeric")||e.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"})}}};function a(e){if(!e.target.matches(".pmx-expense-input"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}function i(e){if(!e.target.matches(".pmx-expense-type-select"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}window.PMXExpensePopover={formatExpense:n,initExpense:function(t){t&&(t.querySelectorAll(e).forEach(o),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(r),document.addEventListener("input",a),document.addEventListener("keyup",a),document.addEventListener("change",i
1))},syncExpensePopoverToFields:function(e,n){if(void 0===n&&(n=!0),!e)return;let o=e.querySelector(t);if(!o){const n=document.querySelectorAll(`${t}.is-visible`);for(const t of n)if(t.pmxTriggerCell===e){o=t;break}}if(!o&&window.PMXPopover&&window.PMXPopover.getCurrentPopover){const t=window.PMXPopover.getCurrentPopover();t&&t.pmxTriggerCell===e&&(o=t)}if(!o)return;const a=e.closest(".pmx-formset-row"),i=r.getCurrentValues(o);if(r.syncToFields(a,i),r.updateDisplay(e,i),n&&(e.classList.add("pmx-cell-dirty"),a)){a.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(a)}},updateExpenseDisplay:o}}(),function(){"use strict";const e=".pmx-term-display",t=".pmx-term-popover",n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function o(e){if(!e)return"";const t=new Date(`${e}T00:00:00`);return isNaN(t.getTime())?"":`${n[t.getMonth()]} ${t.getFullYear()}`}function r(e,t){const n=o(e),r=o(t);return n||r?n?r?`${n} — ${r}`:`${n} —`:`— to ${r}`:"Entire holding period"}function a(e){if(!e)return;const t=e.dataset.startDate||"",n=e.dataset.endDate||"";e.textContent=r(t,n),e.title="Click to edit term"}const i={cellSelector:".pmx-col-term",displaySelector:e,popoverSelector:t,getOriginalValues(t){const n=t.querySelector(e);let o="",r="";return n&&(o=n.dataset.startDate||"",r=n.dataset.endDate||""),{endDate:r,isHolding:!o&&!r,startDate:o}},getCurrentValues(e){const t=e.querySelector(".pmx-term-start-input"),n=e.querySelector(".pmx-term-end-input"),o=e.querySelector(".pmx-term-method[value='holding']");return{endDate:n?n.value:"",isHolding:o&&o.checked,startDate:t?t.value:""}},setInputValues(e,t){const n=e.querySelector(".pmx-term-start-input"),o=e.querySelector(".pmx-term-end-input");n&&(n.value=t.startDate||""),o&&(o.value=t.endDate||"")},syncToFields(e,t){},updateDisplay(t,n){const o=t.querySelector(e);o&&(o.dataset.startDate=n.startDate||"",o.dataset.endDate=n.endDate||"",a(o))},onOpen(t,n){const o=n.querySelector(e),r=o&&o.dataset.startDate||"",a=o&&o.dataset.endDate||"",i=t.querySelector(".pmx-term-method[value='holding']"),s=t.querySelector(".pmx-term-method[value='custom']"),l=t.querySelector(".pmx-term-dates");r||a?(s&&(s.checked=!0),l&&(l.style.display="flex")):(i&&(i.checked=!0),l&&(l.style.display="none"))},getFocusableElements(e){const t=e.querySelectorAll("input:not([type='hidden']):not(:disabled), select:not(:disabled)");return Array.from(t).filter(e=>null!==e.offsetParent)}};function s(e){const n=e.target;if(!n.matches(".pmx-term-method"))return;const o=n.closest(t);if(!o)return;const r=o.querySelector(".pmx-term-dates"),a=o.querySelector(".pmx-term-start-input"),s=o.querySelector(".pmx-term-end-input");"custom"===n.value?r&&(r.style.display="flex"):(r&&(r.style.display="none"),a&&(a.value=""),s&&(s.value=""));const l=o.pmxTriggerCell;if(!l)return;const c=i.getCurrentValues(o);i.updateDisplay(l,c)}function l(e){if(!e.target.matches(".pmx-term-start-input, .pmx-term-end-input"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const r=i.getCurrentValues(n);i.updateDisplay(o,r)}window.PMXExpenseTermPopover={formatDateDisplay:o,formatTermDisplay:r,initExpenseTerm:function(t){t&&(t.querySelectorAll(e).forEach(a),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(i),document.addEventListener("change",s),document.addEventListener("change",l))},syncTermPopoverToFields:function(e,n,o){if(void 0===o&&(o=!0),!e)return;let r=n||e.querySelector(t);if(!r){const n=document.querySelectorAll(`${t}.is-visible`);for(const t of n)if(t.pmxTriggerCell===e){r=t;break}}if(!r&&window.PMXPopover&&window.PMXPopover.getCurrentPopover){const t=window.PMXPopover.getCurrentPopover();t&&t.pmxTriggerCell===e&&(r=t)}if(!r)return;const a=e.closest(".pmx-formset-row"),s=i.getCurrentValues(r);if(i.syncToFields(a,s),i.updateDisplay(e,s),o&&(e.classList.add("pmx-cell-dirty"),a)){a.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(a)}},updateTermDisplay:a}}(),function(){"use strict";
1let e=null,t=null,n=null,o=null,r=null,a=null,i=null,s=null,l=null,c=null,d=null,u=null,p=!1,m=!1,f=!1,h=null,y=!1,g=[],v=!1;function w(){const e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:""}function b(e){return e.toLocaleString()}function x(){u&&(u.style.display="none")}function S(){l&&(l.style.display="none"),m=!1,q()}async function P(e){if(!t)return;const n=e.querySelector("input[name='name']"),o=e.querySelector("input[name='suite_number']"),r=n?n.value.trim():"",a=o?o.value.trim():"";var i;if(r)try{const e=await fetch(t,{body:JSON.stringify({name:r,suite_number:a}),headers:{"Content-Type":"application/json","X-CSRFToken":w()},method:"POST"}),n=await e.json();n.valid?S():(i=n.message||"Duplicate tenant found",l&&(l.textContent=i,l.style.display="block",m=!0,q()))}catch(e){console.error("Duplicate validation error:",e),S()}else S()}function C(e){i&&clearTimeout(i),i=setTimeout(()=>{P(e)},500)}function T(e,t){const n=document.createElement("div");return n.className=`pmx-modal-lease-warning pmx-lease-${t}-warning`,n.style.cssText="display: none; margin-top: 4px; background: #fcf8e3; border: 1px solid #faebcc; border-radius: 3px; padding: 6px 8px; font-size: 12px; color: #8a6d3b; line-height: 1.4;",(e.closest(".form-group")||e.parentElement).appendChild(n),n}function D(e,t,n){e&&(e.textContent=t,e.style.display="block",n?(e.style.background="#f2dede",e.style.borderColor="#ebcccc",e.style.color="#a94442"):(e.style.background="#fcf8e3",e.style.borderColor="#faebcc",e.style.color="#8a6d3b"))}function E(e){e&&(e.style.display="none")}function M(e){const t=e.querySelector("input[name='availability_method']:checked"),n=e.querySelector("input[name='availability_start']"),a=e.querySelector("input[name='availability_end']"),i=e.querySelector("input[name='lease_start_date']"),s=e.querySelector("input[name='lease_end_date']");let l=n?n.value:null,u=a?a.value:null;const p=i?i.value:null,m=s?s.value:null,f=t&&"custom"===t.value;f||(l=o,u=r);let h=null,y=null,g=!1,v=!1;if(window.PMXFormValidation){const e=window.PMXFormValidation.validateLeaseDates(p,m);e.valid||(y=e.message,v=!0)}else p&&m&&m<=p&&(y="Lease end date must be after start date",v=!0);return!h&&p&&(f&&l&&p<l?(h="Lease start is before availability start",g=!0):f&&u&&p>u?(h="Lease start is after availability end",g=!0):o&&p<o?h="Lease starts before analysis period":r&&p>r&&(h="Lease starts after analysis period")),!y&&m&&(f&&u&&m>u?(y="Lease end is after availability end",v=!0):f&&l&&m<l?(y="Lease end is before availability start",v=!0):r&&m>r?y="Lease ends after analysis period":o&&m<o&&(y="Lease ends before analysis period")),h?D(c,h,g):E(c),y?D(d,y,v):E(d),{endIsError:v,hasErrors:g||v,startIsError:g}}function k(e){if(!h||!e)return;const t=e.total_assigned,n=e.max_available,o=e.is_multi_unit?"units":e.unit_abbrev||"SF",r=e.total_available<=0,a=h.querySelector(".pmx-capacity-assigned"),i=h.querySelector(".pmx-capacity-total");a&&(a.textContent=`${b(t)} ${o}`,a.style.color=r?"#E64759":""),i&&(i.textContent=`${b(n)} ${o}`,i.style.color=r?"#E64759":""),function(e){if(!h)return;const t=h.querySelector(".pmx-capacity-periods");if(!t)return;const n=e.periods||[],o=n.length>1;t.innerHTML="",n.forEach(n=>{const r=document.createElement("div");let a;r.className="pmx-capacity-period-item",a=o?n.end_month_year&&n.end_month_year!==n.month_year?`${n.month_year} — ${n.end_month_year}`:n.month_year:"Running total";const i=document.createElement("dt");i.textContent=a;const s=document.createElement("dd"),l=e.is_multi_unit?"units":e.unit_abbrev;s.textContent=`${b(n.assigned_size)} assigned of ${b(n.property_size)} ${l} total (${n.assigned_count} tenants)`,r.appendChild(i),r.appendChild(s),t.appendChild(r)})}(e),h.style.display="inline-flex"}function _(){s&&(s.style.display="none"),p=!1,q()}function q(){if(!g.length)return;const e=p||m||f;g.forEach(t=>{t.disabled=e,e?t.classList.add("disabled"):t.classList.remove("disabled")})}function $(e){const t=e.querySelector("input[name='availability_method'][value='custom']"),n=e.querySelector(".availability-method");if(!n)return;const o=t&&t.checked;n.style.display=o?"":"none"}function L(e){if(!e)return e;const t=e.split("-");if(t.length<2)return e;const n=parseInt(t[1],10)-1,o=t[0];return`${["January","February","March","April","May","June","July","August","September","October","November","December"][n]} ${o}`}function X(e,t){const n=e.querySelector("input[name='availability_method'][value='custom']"),r=e.querySelector("input[name='availability_start']"),a=e.querySelector("input[name='availability_end']"),i=(t=t||{}
1).startDate,s=t.endDate,l=t.errorType||"start",c=t.hasOtherValidPeriods||!1;n&&(n.checked=!0,n.dispatchEvent(new Event("change",{bubbles:!0}))),r&&i&&(r.value=i),a&&s&&(a.value=s),$(e);let d=null;const p=L(i),m=L(s);var f;"start"===l?d=[{bold:!0,text:"Custom availability set."},{text:" The building is at full capacity until "},{bold:!0,text:p},{text:", so we've set the availability to the first period where this size fits."}]:"end"===l&&(i&&i!==o?(d=[{bold:!0,text:"Custom availability set."},{text:" This size fits between "},{bold:!0,text:p},{text:" and "},{bold:!0,text:m},{text:"."}],c&&d.push({text:" There are other periods where it fits as well."})):d=[{bold:!0,text:"Custom availability set."},{text:" This size won't fit in the building after "},{bold:!0,text:m},{text:", so we've automatically set the availability end date for you."}]),d&&(f=d,u&&(u.textContent="",f.forEach(e=>{if(e.bold){const t=document.createElement("strong");t.textContent=e.text,u.appendChild(t)}else u.appendChild(document.createTextNode(e.text))}),u.style.display="block"))}async function A(t,n,r){if(!e||t<=0)return _(),void x();r=r||{endCorrected:!1,startCorrected:!1};const a=function(e){let t="analysis",n=null,o=null;const r=e.querySelector("input[name='availability_method'][value='custom']");if(r&&r.checked){t="custom";const r=e.querySelector("input[name='availability_start']"),a=e.querySelector("input[name='availability_end']");r&&(n=r.value||null),a&&(o=a.value||null)}return{end:o,method:t,start:n}}(n),i={availability_method:a.method,square_feet:t};a.start&&(i.availability_start=a.start),a.end&&(i.availability_end=a.end);try{const c=await fetch(e,{body:JSON.stringify(i),headers:{"Content-Type":"application/json","X-CSRFToken":w()},method:"POST"}),d=await c.json();if(d.valid)_();else{if("analysis"===a.method||"custom"===a.method&&(!r.startCorrected||!r.endCorrected)){const e="start"===d.error_type||"start"===d.suggestion_type;if(!r.startCorrected&&e&&d.valid_periods&&d.valid_periods.length>0){const e=d.valid_periods[0];return v=!0,X(n,{endDate:null,errorType:"start",startDate:e}),v=!1,void A(t,n,{endCorrected:!1,startCorrected:!0})}const a="end"===d.error_type||"end"===d.suggestion_type;if(!r.endCorrected&&a&&d.invalid_periods&&d.invalid_periods.length>0){const e=function(e){if(!e)return null;const t=new Date(`${e}T00:00:00`);return t.setDate(0),`${t.getFullYear()}-${(t.getMonth()+1).toString().padStart(2,"0")}-${t.getDate().toString().padStart(2,"0")}`}(d.invalid_periods[0]),a=n.querySelector("input[name='availability_start']"),i=a&&a.value||o,s=d.has_later_valid_periods||!1;return v=!0,X(n,{endDate:e,errorType:"end",hasOtherValidPeriods:s,startDate:i}),v=!1,void A(t,n,{endCorrected:!0,startCorrected:r.startCorrected})}}l=d.message||"Exceeds building capacity",s&&(s.textContent=l,s.style.display="block",p=!0,q())}}catch(e){console.error("Modal space validation error:",e),_()}var l}window.PMXAddTenantModal={init:function(){const b=document.getElementById("add-tenant");if(!b)return;const D=window.TENANT_CONFIG||{};e=D.validateSpaceEndpoint||null,t=D.validateDuplicateEndpoint||null,n=D.capacityEndpoint||null,o=D.analysisStartDate||null,r=D.analysisEndDate||null;const L=D.isMultiUnit?"units":"square_feet";let X=b.querySelector(`input[name='${L}']`);if(X||(X=b.querySelector("input[name='square_feet']")),!X)return;const N=b.querySelector(".pmx-dialog-footer");N&&(h=function(e){e.style.cssText="display: flex; align-items: center; gap: 10px;";const t=document.createElement("div");return t.className="pmx-capacity-hud pmx-modal-capacity-hud",t.innerHTML='<span class="pmx-capacity-info-btn" title="View building capacity by period"><span class="icon icon-info"></span></span><span class="pmx-capacity-text"><span class="pmx-capacity-assigned"></span><span class="pmx-capacity-separator">of</span><span class="pmx-capacity-total"></span></span><div class="pmx-capacity-popover"><dl class="pmx-capacity-periods"></dl></div>',e.insertBefore(t,e.firstChild),t}(N),function(){if(!h)return;const e=h.querySelector(".pmx-capacity-popover");function t(){e.classList.add("is-visible")}function n(){e.classList.remove("is-visible")}e&&(h.addEventListener("mouseenter",t),h.addEventListener("mouseleave",n),e.addEventListener("mouseenter",t),e.addEventListener("mouseleave",n))}(),g=Array.from(N.querySelectorAll("button[type='submit'], input[type='submit'], .btn-group .dropdown-toggle"))),s=function(e){const t=document.createElement("div");return t.className="pmx-modal-space-warning",t.style.cssText="display: none; margin-top: 4px; background: #f2dede; border: 1px solid #ebcccc; border-radius: 3px; padding: 6px 8px; font-size: 12px; color: #a94442; line-height: 1.4;",(e.closest(".form-group")||e.parentElement).appendChild(t),t}(X),u=function(e){const t=document.createElement("div");t.className="pmx-modal-space-info",t.style.cssText="display: none; margin-top: 0; margin-bottom: 12px; background: #d9edf7; border: 1px solid #bce8f1; border-radius: 3px; padding: 10px 12px; font-size: 13px; color: #31708f; line-height: 1.5;";const n=e.querySelector(".pmx-dialog-body");return n&&n.insertBefore(t,n.firstChild),t}(b);const F=b.querySelector("input[name='name']"),I=b.querySelector("input[name='suite_number']");F&&(l=function(e){const t=document.createElement("div");return t.className="pmx-modal-duplicate-warning",t.style.cssText="display: none; margin-top: 4px; background: #f2dede; border: 1px solid #ebcccc; border-radius: 3px; padding: 6px 8px; font-size: 12px; color: #a94442; line-height: 1.4;",(e.closest(".form-group")||e.closest(".col-sm-8")||e.parentElement).appendChild(t),t}(F),F.addEventListener("input",()=>{C(b)}),F.addEventListener("blur",()=>{i&&(clearTimeout(i),i=null),P(b)})),I&&(I.addEventListener("input",()=>{C(b)}),I.addEventListener("blur",()=>{i&&(clearTimeout(i),i=null),P(b)}));const O=b.querySelector("input[name='lease_start_date']"),R=b.querySelector("input[name='lease_end_date']");function V(){const e=M(b);f=e.hasErrors,q()}O&&(c=T(O,"start"),O.addEventListener("input",V),O.addEventListener("change",V),O.addEventListener("blur",V),O.addEventListener("focusout",V)),R&&(
1d=T(R,"end"),R.addEventListener("input",V),R.addEventListener("change",V),R.addEventListener("blur",V),R.addEventListener("focusout",V)),window.jQuery&&window.jQuery(b).on("change","input[name='availability_method']",()=>{const e=M(b);f=e.hasErrors,q()});const j=b.querySelector("input[name='availability_start']"),U=b.querySelector("input[name='availability_end']");j&&j.addEventListener("blur",()=>{const e=M(b);f=e.hasErrors,q()}),U&&U.addEventListener("blur",()=>{const e=M(b);f=e.hasErrors,q()}),X.addEventListener("input",()=>{const e=parseInt(X.value.replace(/,/g,""),10)||0;if(e<=0)return a&&(clearTimeout(a),a=null),_(),x(),void function(e){const t=e.querySelector("input[name='availability_method'][value='analysis']"),n=e.querySelector("input[name='availability_start']"),o=e.querySelector("input[name='availability_end']");t&&!t.checked&&(t.checked=!0,t.dispatchEvent(new Event("change",{bubbles:!0}))),n&&(n.value=""),o&&(o.value=""),$(e)}(b);!function(e,t){a&&clearTimeout(a),a=setTimeout(()=>{A(e,t)},250)}(e,b)}),X.addEventListener("blur",()=>{a&&(clearTimeout(a),a=null),A(parseInt(X.value.replace(/,/g,""),10)||0,b)}),$(b),b.querySelectorAll("input[name='availability_method']").forEach(e=>{e.addEventListener("change",()=>{if($(b),v)return;x();const e=parseInt(X.value.replace(/,/g,""),10)||0;e>0&&(_(),A(e,b))})}),b.querySelectorAll("input[name='availability_start'], input[name='availability_end']").forEach(e=>{e.addEventListener("change",()=>{if(v)return;const e=parseInt(X.value.replace(/,/g,""),10)||0;e>0&&(_(),A(e,b))})});const B=b.querySelector("form");B&&B.addEventListener("submit",e=>p?(e.preventDefault(),e.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix the size validation error before saving"):window.alert("Please fix the size validation error before saving."),X.focus(),!1):m?(e.preventDefault(),e.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix the duplicate tenant name before saving"):window.alert("Please fix the duplicate tenant name before saving."),F.focus(),!1):f?(e.preventDefault(),e.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix the lease date error before saving"):window.alert("Please fix the lease date error before saving."),!1):void 0,!0),b.addEventListener("pmx-dialog-open",()=>{if(!y){_(),x(),S(),E(c),E(d),p=!1,m=!1,f=!1,q(),async function(){if(n)try{const e=await fetch(n,{headers:{"Content-Type":"application/json","X-CSRFToken":w()},method:"GET"});k(await e.json())}catch(e){console.error("Failed to fetch capacity:",e)}}();const e=b.querySelector("input[name='availability_method'][value='analysis']");e&&(e.checked=!0),$(b);const t=b.querySelector(".modal-return-value");t&&(t.value="1"),y=!0}V()}),b.addEventListener("pmx-dialog-close",()=>{y=!1})}}}(),function(){"use strict";function e(e){return window.PMXFormatting&&window.PMXFormatting.formatWholeNumber?window.PMXFormatting.formatWholeNumber(e):e.toLocaleString()}function t(t){const n=document.getElementById("capacity-periods");if(!n)return;const o=t.periods||[],r=o.length>1;n.innerHTML="",o.forEach(o=>{const a=document.createElement("div");let i;a.className="pmx-capacity-period-item",i=r?o.end_month_year&&o.end_month_year!==o.month_year?`${o.month_year} — ${o.end_month_year}`:o.month_year:"Running total";const s=document.createElement("dt");s.textContent=i;const l=document.createElement("dd");l.textContent=`${e(o.assigned_size)} assigned of ${e(o.property_size)} ${t.unit_abbrev} total (${o.assigned_count} tenants)`,a.appendChild(s),a.appendChild(l),n.appendChild(a)})}function n(e){const t=document.getElementById("capacity-info-btn"),n=document.getElementById("capacity-popover");function o(){n.classList.add("is-visible")}function r(){n.classList.remove("is-visible")}t&&n&&(e.addEventListener("mouseenter",o),e.addEventListener("mouseleave",r),n.addEventListener("mouseenter",o),n.addEventListener("mouseleave",r))}window.PMXCapacityHUD={loadCapacityHUD:async function(o){if(!o)return;const r=document.getElementById("capacity-hud");if(r)try{const a=await fetch(o,{headers:{"Content-Type":"application/json","X-CSRFToken":function(){if(window.PMXFormsetTable&&window.PMXFormsetTable.getCSRFToken)return window.PMXFormsetTable.getCSRFToken();const e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:null}()},method:"GET"}),i=await a.json();if(i.total_assigned<=0)return void(r.style.display="none");
1const s=document.getElementById("capacity-assigned"),l=document.getElementById("capacity-total");s&&(s.textContent=`${e(i.total_assigned)} ${i.unit_abbrev}`),l&&(l.textContent=`${e(i.max_available)} ${i.unit_abbrev}`),t(i),r.style.display="inline-flex",n(r)}catch(e){console.error("Failed to load capacity data:",e),r.style.display="none"}},renderCapacityPopover:t,setupCapacityPopover:n}}(),function(){"use strict";let e=!1;function t(t={}){if(e)return;e=!0;const{capacityEndpoint:n,cloneEndpoint:o,deleteEndpoint:r,isMultiUnit:a,pageSize:i=25,propertyId:s,sortEndpoint:l,tenantRowsEndpoint:c,totalTenantCount:d,updateEndpoint:u}=t;let p=!1;if(window.PMXServerPagination){if(c){function m(){!function(){if(p)return;const e=document.getElementById("formset-parent");if(!e)return;const t=[];l&&!window.PMXSorting&&t.push("PMXSorting"),n&&!window.PMXCapacityHUD&&t.push("PMXCapacityHUD"),!o&&!r||window.PMXActions||t.push("PMXActions");const a=[...["PMXDirtyTracking","PMXFormatting","PMXPopover","PMXFormsetTable"],...["PMXRentPopover","PMXRecoveryPopover","PMXTIPop
1over","PMXDatesPopover","PMXMLPPopover","PMXRentIncreasesModal","PMXAddTenantModal","PMXTableValidation"]].filter(e=>!window[e]);if(a.push(...t),a.length>0&&console.warn("[PMX] Tenant formset: missing modules -",a.join(", "),"- some features will be disabled"),window.PMXRentPopover&&window.PMXRentPopover.initRent(e),window.PMXRecoveryPopover&&window.PMXRecoveryPopover.initRecoveryTerms(e),window.PMXTIPopover&&window.PMXTIPopover.initTITerms(e),window.PMXDatesPopover&&window.PMXDatesPopover.initDatesPopover(e),window.PMXMLPPopover&&window.PMXMLPPopover.initMLP(e),window.PMXRentIncreasesModal&&window.PMXRentIncreasesModal.initRentIncreasesModal(e),window.PMXAddTenantModal&&window.PMXAddTenantModal.init(),window.PMXTableValidation&&window.PMXTableValidation.init(),window.PMXFormsetTable&&(window.PMXFormsetTable.initActionsDropdown(e,".pmx-formset-row"),window.PMXFormsetTable.initNotesPopover(e,".pmx-formset-row",u,"tenant"),window.PMXFormsetTable.initMoveToPosition(e,"#tenant-table-body",".pmx-formset-row",l,"tenant_ids",{totalCount:d}),window.PMXFormsetTable.initSaveButton(e)),window.PMXActions&&window.PMXActions.initActions(e,{cloneEndpoint:o,deleteEndpoint:r,onCloneSuccess:()=>window.location.reload(),onDeleteSuccess:()=>window.location.reload()}),window.PMXSorting&&l){const t=e.querySelector("#tenant-table-body");t&&window.PMXSorting.initSortable(t,{apiEndpoint:l,bodyKey:"tenant_ids",handle:".pmx-drag-handle",onSortSuccess:()=>window.location.reload(),recordIdAttr:"data-record-id"})}p=!0}(),function(){const e=document.getElementById("formset-parent");e&&(e.querySelectorAll(".pmx-rent-display").forEach(e=>{window.PMXRentPopover&&window.PMXRentPopover.updateRentDisplay(e)}),e.querySelectorAll(".pmx-recovery-display").forEach(e=>{window.PMXRecoveryPopover&&window.PMXRecoveryPopover.updateRecoveryDisplay(e)}),e.querySelectorAll(".pmx-ti-terms-display").forEach(e=>{window.PMXTIPopover&&window.PMXTIPopover.updateTITermsDisplay(e)}),e.querySelectorAll(".pmx-mlp-display").forEach(e=>{window.PMXMLPPopover&&window.PMXMLPPopover.updateMLPDisplay(e)}),e.querySelectorAll(".pmx-availability-display").forEach(e=>{window.PMXDatesPopover&&window.PMXDatesPopover.updateAvailabilityDisplay(e)}))}()}const e=window.PMXServerPagination.init({controlsContainerId:"tenant-pagination",fetchUrl:c,onPageLoad:m,onSortChange:function(e,t){const n=document.querySelector(".pmx-formset-table");n&&n.querySelectorAll("th.pmx-sortable").forEach(n=>{const o=n.dataset.sortField;n.classList.remove("pmx-sorted-asc","pmx-sorted-desc"),o===e&&n.classList.add("asc"===t?"pmx-sorted-asc":"pmx-sorted-desc")})},pageSize:i,propertyId:s,sortField:"sort_order",sortOrder:"asc",tableBodySelector:"#tenant-table-body",totalCount:d,updateEndpoint:u});if(e){const t=document.getElementById("submit-formset");t&&t.addEventListener("click",async t=>{e.hasDirtyRows()&&(t.preventDefault(),await e.saveAllDirty())});const o=document.querySelector(".pmx-formset-table");o&&o.addEventListener("click",t=>{const n=t.target.closest("th.pmx-sortable");if(!n)return;const o=n.dataset.sortField;o&&e.sortBy(o)}),m(),n&&window.PMXCapacityHUD&&window.PMXCapacityHUD.loadCapacityHUD(n)}}}else console.warn("PMXServerPagination not loaded - tenant enhancements disabled")}function n(){window.TENANT_CONFIG&&t(window.TENANT_CONFIG)}window.PMXTenant={formatAvailabilityDisplay(){return window.PMXDatesPopover?window.PMXDatesPopover.formatAvailabilityDisplay.apply(null,arguments):"—"},formatDateDisplay(){return window.PMXDatesPopover?window.PMXDatesPopover.formatDateDisplay.apply(null,arguments):"—"},initDatesPopover(){return window.PMXDatesPopover?window.PMXDatesPopover.initDatesPopover.apply(null,arguments):void 0},formatRecoveryTerms(){return window.PMXRecoveryPopover?window.PMXRecoveryPopover.formatRecoveryTerms.apply(null,arguments):"—"},initRecoveryTerms(){return window.PMXRecoveryPopover?window.PMXRecoveryPopover.initRecoveryTerms.apply(null,arguments):void 0},updateRecoveryDisplay(){return window.PMXRecoveryPopover?window.PMXRecoveryPopover.updateRecoveryDisplay.apply(null,arguments):void 0}
1,updateRecoveryTermsDisplay(){return window.PMXRecoveryPopover?window.PMXRecoveryPopover.updateRecoveryTermsDisplay.apply(null,arguments):void 0},formatRent(){return window.PMXRentPopover?window.PMXRentPopover.formatRent.apply(null,arguments):"—"},initRent(){return window.PMXRentPopover?window.PMXRentPopover.initRent.apply(null,arguments):void 0},updateRentDisplay(){return window.PMXRentPopover?window.PMXRentPopover.updateRentDisplay.apply(null,arguments):void 0},formatTITerms(){return window.PMXTIPopover?window.PMXTIPopover.formatTITerms.apply(null,arguments):"—"},initTITerms(){return window.PMXTIPopover?window.PMXTIPopover.initTITerms.apply(null,arguments):void 0},updateTITermsDisplay(){return window.PMXTIPopover?window.PMXTIPopover.updateTITermsDisplay.apply(null,arguments):void 0},formatMLPDisplay(){return window.PMXMLPPopover?window.PMXMLPPopover.formatMLPDisplay.apply(null,arguments):"—"},initMLP(){return window.PMXMLPPopover?window.PMXMLPPopover.initMLP.apply(null,arguments):void 0},updateMLPDisplay(){return window.PMXMLPPopover?window.PMXMLPPopover.updateMLPDisplay.apply(null,arguments):void 0},initRentIncreasesModal(){return window.PMXRentIncreasesModal?window.PMXRentIncreasesModal.initRentIncreasesModal.apply(null,arguments):void 0},openRentIncreasesModal(){return window.PMXRentIncreasesModal?window.PMXRentIncreasesModal.openModal.apply(null,arguments):void 0},init:t,updateTenantStats:function(e){const t=document.getElementById("tenant-count");if(!t)return;let n=0;e.querySelectorAll(".pmx-formset-row, .formset").forEach(e=>{const t=e.querySelector("input[name$='-DELETE']");t&&t.checked||n++}),t.textContent=n;const o=t.nextElementSibling;o&&o.classList.contains("pmx-stat-label")&&(o.textContent=1===n?"tenant":"tenants")}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n()}(),function(){"use strict";const e=".pmx-availability-display",t=".pmx-dates-popover",n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];let o=!1;function r(e){if(!e)return"—";const t=new Date(`${e}T00:00:00`);return isNaN(t.getTime())?"—":`${n[t.getMonth()]} ${t.getFullYear()}`}function a(e,t){const n=r(e),o=r(t);return"—"===n&&"—"===o?"Entire holding period":"—"===n?`— to ${o}`:"—"===o?`${n} —`:`${n} — ${o}`}function i(e,t){const n=t.querySelector(".pmx-dates-popover-warnings");if(!n)return;const o=e.querySelector(".pmx-col-lease-start"),r=e.querySelector(".pmx-col-lease-end"),a=o?o.querySelector(".pmx-date-display"):null,i=r?r.querySelector(".pmx-date-display"):null,s=[];a&&a.title&&s.push({isError:o.classList.contains("has-date-error"),message:a.title}),i&&i.title&&s.push({isError:r.classList.contains("has-date-error"),message:i.title}),s.length>0?(n.textContent="",s.forEach(e=>{const t=document.createElement("div");t.className=`pmx-warning-item ${e.isError?"pmx-warning-error":"pmx-warning-info"}`,t.textContent=e.message,n.appendChild(t)}),n.style.display="block"):(n.textContent="",n.style.display="none")}function s(e){const t=e.dataset.availStart||"",n=e.dataset.availEnd||"";e.textContent=a(t,n)}function l(e){return{availCell:e.querySelector(".pmx-col-availability"),leaseEndCell:e.querySelector(".pmx-col-lease-end"),leaseStartCell:e.querySelector(".pmx-col-lease-start")}}const c={cellSelector:".pmx-col-lease-start, .pmx-col-lease-end, .pmx-col-availability",displaySelector:e,popoverSelector:t,triggerSelector:".pmx-dates-trigger",getOriginalValues(e){const t=e.closest(".pmx-formset-row");if(!t)return{};try{const e=JSON.parse(t.dataset.datesOriginalValues||"null");if(e&&Object.keys(e).length>0)return e}catch(e){}return this.getOpenValues(e,t)},getOpenValues(t,n){if(n||(n=t.closest(".pmx-formset-row")),!n)return{};const{availCell:o,leaseEndCell:r,leaseStartCell:a}=l(n),i=a?a.querySelector(".pmx-date-display"):null,s=r?r.querySelector(".pmx-date-display"):null,c=o?o.querySelector(e):null;return{availability_end:c&&c.dataset.availEnd||"",availability_start:c&&c.dataset.availStart||"",lease_end_date:s&&s.dataset.value||"",lease_start_date:i&&i.dataset.value||""}},getCurrentValues(e){const t=e.querySelector(".pmx-date-input[data-target='lease_start_date']"),n=e.querySelector(".pmx-date-input[data-target='lease_end_date']"),o=e.querySelector(".pmx-date-input[data-target='availability_start']"),r=e.querySelector(".pmx-date-input[data-target='availability_end']");return{availability_end:r?r.value:"",availability_start:o?o.value:"",lease_end_date:n?n.value:"",lease_start_date:t?t.value:""}},setInputValues(e,t){const n={availability_end:e.querySelector(".pmx-date-input[data-target='availability_end']"),availability_start:e.querySelector(".pmx-date-input[data-target='availability_start']"),lease_end_date:e.querySelector(".pmx-date-input[data-target='lease_end_date']"),lease_start_date:e.querySelector(".pmx-date-input[data-target='lease_start_date']")};
1Object.entries(n).forEach(([e,n])=>{n&&(n.value=t[e]||"")});const o=t.availability_start||t.availability_end,r=e.querySelector(".pmx-avail-method[value='analysis']"),a=e.querySelector(".pmx-avail-method[value='custom']"),i=e.querySelector(".pmx-availability-dates");o?(a&&(a.checked=!0),i&&(i.style.display="flex")):(r&&(r.checked=!0),i&&(i.style.display="none"))},syncToFields(e,t){const n=e.querySelector(".pmx-col-availability"),o=n?n.querySelector(".pmx-dates-fields"):null;if(o){const e={availability_end:o.querySelector("input[name$='-availability_end']"),availability_start:o.querySelector("input[name$='-availability_start']"),lease_end_date:o.querySelector("input[name$='-lease_end_date']"),lease_start_date:o.querySelector("input[name$='-lease_start_date']")};Object.entries(e).forEach(([e,n])=>{n&&n.value!==(t[e]||"")&&(n.value=t[e]||"",n.dispatchEvent(new Event("change",{bubbles:!0})))})}},updateDisplay(t,n){const o=t.closest(".pmx-formset-row");if(!o)return;const{availCell:i,leaseEndCell:s,leaseStartCell:c}=l(o),d=c?c.querySelector(".pmx-date-display"):null;d&&(d.textContent=r(n.lease_start_date),d.dataset.value=n.lease_start_date||"");const u=s?s.querySelector(".pmx-date-display"):null;u&&(u.textContent=r(n.lease_end_date),u.dataset.value=n.lease_end_date||"");const p=i?i.querySelector(e):null;p&&(p.textContent=a(n.availability_start,n.availability_end),p.dataset.availStart=n.availability_start||"",p.dataset.availEnd=n.availability_end||"")},getDirtyCells(e){const{availCell:t,leaseEndCell:n,leaseStartCell:o}=l(e);return[o,n,t].filter(Boolean)},applyDirtyState({currentValues:e,originalValues:t,row:n}){if(!n)return;t||(t={});const{availCell:o,leaseEndCell:r,leaseStartCell:a}=l(n),i=e.lease_start_date!==(t.lease_start_date||""),s=e.lease_end_date!==(t.lease_end_date||""),c=e.availability_start!==(t.availability_start||"")||e.availability_end!==(t.availability_end||"");a&&a.classList.toggle("pmx-cell-dirty",i),r&&r.classList.toggle("pmx-cell-dirty",s),o&&o.classList.toggle("pmx-cell-dirty",c);const d=i||s||c;if(n.classList.toggle("pmx-row-dirty",d),d){const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(n)}else{const e=n.closest("tbody");if(!(e&&e.querySelector(".pmx-row-dirty"))){const e=document.getElementById("formset-parent");e&&e.classList.remove("dirty");const t=n.closest("form");t&&window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(t),window.PMXServerPagination&&window.PMXServerPagination.updateStateIndicator&&window.PMXServerPagination.updateStateIndicator(!1)}}},validate(e,t,{row:n,popover:o}){if(window.validateTableRowLeaseDates){const e=window.validateTableRowLeaseDates(n);return i(n,o),{errors:e?["Date validation failed"]:[],valid:!e}}return{errors:[],valid:!0}},onOpen(e,t,n){if(!n.dataset.datesOriginalValues){const e=this.getOpenValues(t,n);n.dataset.datesOriginalValues=JSON.stringify(e)}i(n,e),e.dataset.hasChanges="false"},onAfterDiscard(e,t){const n=e.pmxTriggerRow;n&&(delete n.dataset.datesOriginalValues,window.validateTableRowLeaseDates&&window.validateTableRowLeaseDates(n),i(n,e)),e.dataset.hasChanges="false"}};function d(e){if(!e)return;const t=e.pmxTriggerRow,n=e.pmxTriggerCell||(t?t.querySelector(".pmx-col-availability"):null);let o=null;if(t&&t.dataset.datesOriginalValues)try{o=JSON.parse(t.dataset.datesOriginalValues)}catch(e){}if(o&&(c.setInputValues(e,o),n&&c.updateDisplay(n,o),t&&c.syncToFields(t,o)),t){if(o)c.applyDirtyState({cell:n,currentValues:o,originalValues:o,popover:e,row:t});else{const{availCell:e,leaseEndCell:n,leaseStartCell:o}=l(t);o&&o.classList.remove("pmx-cell-dirty"),n&&n.classList.remove("pmx-cell-dirty"),e&&e.classList.remove("pmx-cell-dirty"),t.classList.remove("pmx-row-dirty")}delete t.dataset.datesOriginalValues,window.validateTableRowLeaseDates&&window.validateTableRowLeaseDates(t),i(t,e)}e.dataset.hasChanges="false",window.PMXPopoverUtils&&window.PMXPopoverUtils.hideDiscardFooter&&window.PMXPopoverUtils.hideDiscardFooter(e),e.classList.remove("is-visible"),window.PMXPopoverUtils&&window.PMXPopoverUtils.setCloseTimestamp&&window.PMXPopoverUtils.setCloseTimestamp()}window.PMXDatesPopover={discardAndClose:d,formatAvailabilityDisplay:a,formatDateDisplay:r,initDatesPopover:function(n){n&&(n.querySelectorAll(e).forEach(s),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(c),o||(o=!0,document.addEventListener("change",e=>
1{if(!e.target.matches(".pmx-date-input"))return;const n=e.target.closest(t);if(!n)return;const o=e.target.closest(".pmx-formset-row")||n.pmxTriggerRow;if(!o)return;const r=n.pmxTriggerCell||o.querySelector(".pmx-col-availability"),a=c.getCurrentValues(n);c.syncToFields(o,a),c.updateDisplay(r,a);const s=n.pmxOriginalValues||c.getOriginalValues(r);c.applyDirtyState({cell:r,currentValues:a,originalValues:s,popover:n,row:o}),window.validateTableRowLeaseDates&&window.validateTableRowLeaseDates(o);const l=JSON.stringify(a)!==JSON.stringify(s);n.dataset.hasChanges=l?"true":"false",i(o,n),window.PMXPopoverUtils&&(l?window.PMXPopoverUtils.showDiscardFooter(n):window.PMXPopoverUtils.hideDiscardFooter(n))}),document.addEventListener("change",e=>{if(!e.target.matches(".pmx-avail-method"))return;const n=e.target.closest(t);if(!n)return;const o=e.target.closest(".pmx-formset-row")||n.pmxTriggerRow,r=n.querySelector(".pmx-availability-dates"),a=n.querySelector(".pmx-date-input[data-target='availability_start']"),s=n.querySelector(".pmx-date-input[data-target='availability_end']");if("custom"===e.target.value?r&&(r.style.display="flex"):(r&&(r.style.display="none"),a&&(a.value=""),s&&(s.value="")),o){const e=n.pmxTriggerCell||o.querySelector(".pmx-col-availability"),t=c.getCurrentValues(n);c.syncToFields(o,t),c.updateDisplay(e,t);const r=n.pmxOriginalValues||c.getOriginalValues(e);c.applyDirtyState({cell:e,currentValues:t,originalValues:r,popover:n,row:o}),window.validateTableRowLeaseDates&&(window.validateTableRowLeaseDates(o),i(o,n));const a=JSON.stringify(t)!==JSON.stringify(r);n.dataset.hasChanges=a?"true":"false",window.PMXPopoverUtils&&(a?window.PMXPopoverUtils.showDiscardFooter(n):window.PMXPopoverUtils.hideDiscardFooter(n))}}),document.addEventListener("click",e=>{const n=e.target.closest(".pmx-discard-link");if(!n)return;const o=n.closest(t);o&&o.classList.contains("is-visible")&&(e.preventDefault(),e.stopPropagation(),d(o))})))},syncDatesPopoverToFields:function(e,n){if(!e)return;const o=e.querySelector(".pmx-col-availability"),r=n||(o?o.querySelector(t):null);if(!r)return;const a=c.getCurrentValues(r);c.syncToFields(e,a),c.updateDisplay(o,a)},updateAvailabilityDisplay:s,updateDatesPopoverWarnings:i}}(),"undefined"!=typeof module&&module.exports&&(module.exports={formatDateForDisplay:formatDateForDisplay,getMonthBefore:getMonthBefore,generateInfoMessage:generateInfoMessage,canAutoCorrect:canAutoCorrect,determineSuggestedCorrection:determineSuggestedCorrection}),"undefined"!=typeof window&&(window.PMXModalValidation={formatDateForDisplay:formatDateForDisplay,getMonthBefore:getMonthBefore,generateInfoMessage:generateInfoMessage,canAutoCorrect:canAutoCorrect,determineSuggestedCorrection:determineSuggestedCorrection}),function(){"use strict";const e=".pmx-mlp-display",t=".pmx-mlp-popover",n=".pmx-col-mlp";function o(){return window.TENANT_CONFIG&&window.TENANT_CONFIG.marketLeasingProfiles||{}}function r(e,t,n){if(!e||""===e)return"—";const o=t[e];if(!o)return"—";let r=o.name;return n&&(r+=" *"),r}function a(e){return"true"===e.dataset.monthsVacantOverriden||"true"===e.dataset.renewalProbabilityOverriden||"true"===e.dataset.renewalFreeRentOverriden}function i(e){if(!e)return;const t=e.dataset.mlpId||"",n=o(),i=a(e);e.textContent=r(t,n,i),e.title=t?"Click to edit":"Click to select profile",e.classList.add("pmx-clickable")}function s(e,t,n){const o=e.querySelector(t);o&&(o.textContent=n)}function l(e,t,n,o,r){const a=e.querySelector(`.pmx-override-toggle[data-field="${t}"]`),i=e.querySelector(r);a&&(a.checked=n),i&&(i.value=n?o:"",i.disabled=!n)}function c(e,t,n){const o=e.querySelector(`[name$="-${t}"]`);o&&(o.value=n)}function d(e,t,n){const o=e.querySelector(`[name$="-${t}"]`);o&&(o.checked=n)}function u(e){const t=[];if(!e)return{valid:!0,errors:t};const n=e.querySelector(".pmx-mlp-select"),r=n?n.value:"",a=o(),i=r&&a[r]?a[r]:null,s=i&&i.market_lease_term||0,l=12*s,c=e.querySelector(".pmx-override-toggle[data-field='months_vacant']"),d=e.querySelector(".pmx-months-vacant-input");if(c&&c.checked&&d){const e=parseInt(d.value,10)||0;e>l&&t.push(`Months vacant (${e}) exceeds market lease term (${s} years = ${l} months)`)}const u=e.querySelector(".pmx-override-toggle[data-field='renewal_free_rent']"),p=e.querySelector(".pmx-renewal-abatement-input");if(u&&u.checked&&p){const e=parseInt(p.value,10)||0;e>l&&t.push(`Renewal free rent (${e}) exceeds market lease term (${s} years = ${l} months)`)}return{valid:0===t.length,errors:t}}function p(e,t){e.textContent="",t.forEach(t=>{const n=document.createElement("div");n.className="pmx-warning-item",n.textContent=t,e.appendChild(n)})}function m(e,t){const n=e.querySelector(".pmx-mlp-popover-warnings");n&&(t.length>0?(p(n,t),n.classList.remove("has-info"),n.classList.add("has-error"),n.style.display="block"):(n.textContent="",n.classList.remove("has-error","has-info"),n.style.display="none"))}function f(e){e&&(e.classList.remove("has-field-error"),delete e.dataset.f
1ieldErrors)}const h={popoverSelector:t,cellSelector:n,displaySelector:e,getOriginalValues:t=>{const n=t.querySelector(e);if(!n)return{};const r=n.dataset.mlpId||"",a="true"===n.dataset.monthsVacantOverriden,i="true"===n.dataset.renewalFreeRentOverriden,s="true"===n.dataset.renewalProbabilityOverriden,l=o(),c=r&&l[r]?l[r]:null;return{mlpId:r,monthsVacant:a?n.dataset.monthsVacant||"0":c?String(c.months_vacant):"0",monthsVacantOverriden:a,renewalAbatement:i?n.dataset.renewalAbatement||"0":c?String(c.renewal_abatement):"0",renewalFreeRentOverriden:i,renewalProbability:s?n.dataset.renewalProbability||"0":c?String(c.renewal_probability):"0",renewalProbabilityOverriden:s}},getCurrentValues:e=>{const t=e.querySelector(".pmx-mlp-select"),n=t?t.value:"",r=e.querySelector(".pmx-override-toggle[data-field='renewal_free_rent']"),a=e.querySelector(".pmx-override-toggle[data-field='months_vacant']"),i=e.querySelector(".pmx-override-toggle[data-field='renewal_probability']"),s=e.querySelector(".pmx-renewal-abatement-input"),l=e.querySelector(".pmx-months-vacant-input"),c=e.querySelector(".pmx-renewal-probability-input"),d=!!r&&r.checked,u=!!a&&a.checked,p=!!i&&i.checked,m=o(),f=n&&m[n]?m[n]:null,h=d?(s?s.value:"0")||"0":f?String(f.renewal_abatement):"0";return{mlpId:n,monthsVacant:u?(l?l.value:"0")||"0":f?String(f.months_vacant):"0",monthsVacantOverriden:u,renewalAbatement:h,renewalFreeRentOverriden:d,renewalProbability:p?(c?c.value:"0")||"0":f?String(f.renewal_probability):"0",renewalProbabilityOverriden:p}},setInputValues:(t,n)=>{const r=o(),a=n.mlpId||"",i=a&&r[a]?r[a]:null,c=t.querySelector(".pmx-mlp-select");c&&(c.value=a);const d=t.querySelector(".pmx-mlp-overrides-section");d&&(d.style.display=a?"block":"none"),i&&(s(t,".pmx-mlp-renewal-abatement-template",`${i.renewal_abatement} mo`),s(t,".pmx-mlp-months-vacant-template",`${i.months_vacant} mo`),s(t,".pmx-mlp-renewal-probability-template",`${i.renewal_probability}%`));const u=t.pmxTriggerCell,p=u?u.querySelector(e):null,m=p&&p.dataset.monthsVacant||"0",f=p&&p.dataset.renewalAbatement||"0",h=p&&p.dataset.renewalProbability||"0";l(t,"months_vacant",n.monthsVacantOverriden,m,".pmx-months-vacant-input"),l(t,"renewal_probability",n.renewalProbabilityOverriden,h,".pmx-renewal-probability-input"),l(t,"renewal_free_rent",n.renewalFreeRentOverriden,f,".pmx-renewal-abatement-input")},syncToFields:(e,t)=>{const o=e.querySelector(n);if(!o)return;const r=o.querySelector(".pmx-mlp-fields");r&&(c(r,"market_leasing_profile",t.mlpId),c(r,"months_vacant",t.monthsVacant),c(r,"renewal_probability",t.renewalProbability),c(r,"renewal_abatement",t.renewalAbatement),d(r,"months_vacant_overriden",t.monthsVacantOverriden),d(r,"renewal_probability_overriden",t.renewalProbabilityOverriden),d(r,"renewal_free_rent_overriden",t.renewalFreeRentOverriden))},updateDisplay:(t,n)=>{const o=t.querySelector(e);o&&(o.dataset.mlpId=n.mlpId,o.dataset.monthsVacant=n.monthsVacant,o.dataset.renewalProbability=n.renewalProbability,o.dataset.renewalAbatement=n.renewalAbatement,o.dataset.monthsVacantOverriden=String(n.monthsVacantOverriden),o.dataset.renewalProbabilityOverriden=String(n.renewalProbabilityOverriden),o.dataset.renewalFreeRentOverriden=String(n.renewalFreeRentOverriden),i(o))},validate:(e,t,{popover:n,cell:o})=>{const r=u(n);return r.valid||(m(n,r.errors),o.classList.add("has-field-error")),r},onOpen:(e,t)=>{!function(e,t){const n=t.querySelector(".pmx-mlp-popover-warnings");if(!n)return;const o=e.dataset.fieldErrors;if(!o)return n.textContent="",n.classList.remove("has-error","has-info"),void(n.style.display="none");try{const e=JSON.parse(o);e.length>0&&(p(n,e.map(e=>e.message)),n.classList.remove("has-info"),n.classList.add("has-error"),n.style.display="block")}catch(e){console.warn("Failed to parse field errors:",e)}}(t,e)},onAfterDiscard:(e,t)=>{t&&f(t),m(e,[])}};window.PMXMLPPopover={formatMLPDisplay:r,hasAnyOverrides:a,initMLP:function(r){if(!r)return;const a=o();r.querySelectorAll(e).forEach(e=>{const t=e.dataset.mlpId;t&&a[t]&&(e.dataset.mlpName=a[t].name),i(e)}),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(h),document.addEventListener("change",e=>
1{if(!e.target.classList.contains("pmx-mlp-select"))return;const r=e.target.closest(t);if(!r)return;f(r.pmxTriggerCell||r.closest(n)),m(r,[]);const a=e.target.value,i=r.querySelector(".pmx-mlp-overrides-section");i&&(i.style.display=a?"block":"none");const l=o();if(a&&l[a]){const e=l[a];s(r,".pmx-mlp-renewal-abatement-template",`${e.renewal_abatement} mo`),s(r,".pmx-mlp-months-vacant-template",`${e.months_vacant} mo`),s(r,".pmx-mlp-renewal-probability-template",`${e.renewal_probability}%`),r.querySelectorAll(".pmx-override-toggle").forEach(e=>{e.checked=!1;const t=e.closest(".pmx-mlp-override-row"),n=t?t.querySelector(".pmx-mlp-override-input"):null;n&&(n.disabled=!0,n.value="")})}window.PMXPopoverUtils&&window.PMXPopoverUtils.showDiscardFooter(r)}),document.addEventListener("change",e=>{if(!e.target.classList.contains("pmx-override-toggle"))return;const o=e.target.closest(t),r=e.target.closest(".pmx-mlp-override-row"),a=r?r.querySelector(".pmx-mlp-override-input"):null;o&&f(o.pmxTriggerCell||o.closest(n)),a&&(a.disabled=!e.target.checked,e.target.checked&&a.focus()),o&&(m(o,u(o).errors),window.PMXPopoverUtils&&window.PMXPopoverUtils.showDiscardFooter(o))}),document.addEventListener("input",e=>{if(!e.target.classList.contains("pmx-mlp-override-input"))return;const o=e.target.closest(t);o&&(f(o.pmxTriggerCell||o.closest(n)),m(o,u(o).errors),window.PMXPopoverUtils&&window.PMXPopoverUtils.showDiscardFooter(o))})},populatePopoverFromFields:function(n,o){const r=o||n.querySelector(t),a=n.querySelector(e);if(!r||!a)return;r.pmxTriggerCell=n;const i=h.getOriginalValues(n);h.setInputValues(r,i)},syncMLPPopoverToFields:function(e,n,o){if(!e)return;const r=o||e.querySelector(t);if(!r)return;const a=h.getCurrentValues(r),i=r.pmxOriginalValues||h.getOriginalValues(e),s=e.closest(".pmx-formset-row");if(s&&h.syncToFields(s,a),h.updateDisplay(e,a),JSON.stringify(a)!==JSON.stringify(i)){if(e.classList.add("pmx-cell-dirty"),s){s.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(s)}}else if(e.classList.remove("pmx-cell-dirty"),s&&!s.querySelector(".pmx-cell-dirty")){s.classList.remove("pmx-row-dirty");const e=s.closest("tbody");if(!e||!e.querySelector(".pmx-row-dirty")){const e=document.getElementById("formset-parent");e&&e.classList.remove("dirty");const t=s.closest("form");t&&window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(t),window.PMXServerPagination&&window.PMXServerPagination.updateStateIndicator&&window.PMXServerPagination.updateStateIndicator(!1)}}!1!==n&&window.PMXPopover&&window.PMXPopover.close&&window.PMXPopover.close()},updateMLPDisplay:i}}(),function(){"use strict";const e=".pmx-col-recovery",t=".pmx-recovery-display",n=".pmx-recovery-popover",o=["pro_rata"];function r(e,t,n,o){const r=parseFloat((e||"0").toString().replace(/,/g,""))||0;switch(t){case"total_year":return r>0?`${n}${r.toLocaleString()}/yr`:"—";case"total_sf":return r>0?`${n}${r.toLocaleString()}/${o}/yr`:"—";case"pro_rata":return"Pro-rata";case"expense_stop":return r>0?`Stop: ${n}${r.toLocaleString()}/${o}`:"Expense Stop";case"base_stop":return r>0?`Base stop: ${n}${r.toLocaleString()}/${o}`:"Base Stop";default:return r>0?`${n}${r.toLocaleString()}`:"—"}}function a(e){if(!e)return;const t=e.dataset.structureId||"",n=e.dataset.structureName||"",o=e.dataset.amount||"0",a=e.dataset.type||"total_year",i=e.dataset.currency||"$",s=e.dataset.units||"SF";if(t){const t=n||"Custom";e.textContent=`Custom: ${t}`,e.title=`Custom: ${t} (click to edit)`}else e.textContent=r(o,a,i,s),e.title="Click to edit";e.classList.add("pmx-clickable")}function i(e){if(!e)return;const t=e.querySelector(".pmx-recovery-type-select"),n=e.querySelector(".pmx-recovery-amount-field");if(!t||!n)return;const r=t.value,a=!o.includes(r);n.style.display=a?"block":"none"}function s(e,t){if(e)if(window.jQuery&&window.jQuery.fn.autoNumeric){const n=window.jQuery(e);n.data("autoNumeric")||n.autoNumeric({decimalPlacesOverride:2,minimumValue:"0"}),""!==t&&null!=t?n.autoNumeric("set",t.toString().replace(/,/g,"")):e.value=""}else e.value=""!==t&&null!=t?t:""}function l(e,t){if(!t)return!0;
1if(e.isSimple!==t.isSimple)return!0;if(e.isSimple){return(parseFloat(e.amount)||0)!==(parseFloat(t.amount)||0)||e.type!==t.type}return e.structure!==t.structure}const c={cellSelector:e,displaySelector:t,popoverSelector:n,getOriginalValues(e){const n=e.querySelector(t),o=e.querySelector(".pmx-recovery-fields");let r="",a="",i="total_year",s="";if(o){const e=o.querySelector("select[name$='-recovery_structure']"),t=o.querySelector("input[name$='-reimbursements']"),n=o.querySelector("select[name$='-reimbursement_type']");r=e?e.value:"",a=t?t.value:"",i=n?n.value:"total_year",e&&e.selectedIndex>=0&&(s=e.options[e.selectedIndex].text)}else n&&(r=n.dataset.structureId||"",s=n.dataset.structureName||"",a=n.dataset.amount||"",i=n.dataset.type||"total_year");return{amount:parseFloat(String(a).replace(/,/g,""))||0,isSimple:!r,structure:r,structureName:s,type:i}},getCurrentValues(e){const t=e.querySelector(".pmx-recovery-method[value='simple']"),n=t&&t.checked,o=e.querySelector(".pmx-recovery-amount-input"),r=e.querySelector(".pmx-recovery-type-select"),a=e.querySelector(".pmx-recovery-structure-select"),i=(s=o)?window.jQuery&&window.jQuery.fn.autoNumeric&&window.jQuery(s).data("autoNumeric")?window.jQuery(s).autoNumeric("get")||"":s.value.replace(/,/g,""):"";var s;const l=a?a.value:"",c=l&&a&&a.selectedIndex>=0?a.options[a.selectedIndex].text:"";return{amount:parseFloat(i)||0,isSimple:n,structure:l,structureName:c,type:r?r.value:"total_year"}},setInputValues(e,t){const n=e.querySelector(".pmx-recovery-amount-input"),o=e.querySelector(".pmx-recovery-type-select"),r=e.querySelector(".pmx-recovery-structure-select"),a=e.querySelector(".pmx-recovery-method[value='simple']"),l=e.querySelector(".pmx-recovery-method[value='custom']"),c=e.querySelector(".pmx-recovery-simple-fields"),d=e.querySelector(".pmx-recovery-custom-fields");t.isSimple?(a&&(a.checked=!0),l&&(l.checked=!1),c&&(c.style.display="block"),d&&(d.style.display="none"),n&&s(n,t.amount),o&&(o.value=t.type||"total_year"),r&&(r.value=""),i(e)):(l&&(l.checked=!0),a&&(a.checked=!1),c&&(c.style.display="none"),d&&(d.style.display="block"),r&&(r.value=t.structure||""),n&&s(n,t.amount),o&&(o.value=t.type||"total_year"))},syncToFields(t,n){const o=t.querySelector(e);if(!o)return;const r=o.querySelector(".pmx-recovery-fields");if(!r)return;const a=r.querySelector("select[name$='-recovery_structure']"),i=r.querySelector("input[name$='-reimbursements']"),s=r.querySelector("select[name$='-reimbursement_type']");n.isSimple?(a&&(a.value=""),i&&(i.value=n.amount),s&&(s.value=n.type)):(a&&(a.value=n.structure),i&&(i.value=n.amount),s&&(s.value=n.type))},updateDisplay(e,n){const o=e.querySelector(t);o&&(n.isSimple?(o.dataset.structureId="",o.dataset.structureName="",o.dataset.amount=n.amount,o.dataset.type=n.type):(o.dataset.structureId=n.structure,o.dataset.structureName=n.structureName,o.dataset.amount=n.amount,o.dataset.type=n.type),a(o))},onOpen(e,n){const o=n.querySelector(t),r=n.querySelector(".pmx-recovery-fields");let a="",l="",c="total_year";if(r){const e=r.querySelector("select[name$='-recovery_structure']"),t=r.querySelector("input[name$='-reimbursements']"),n=r.querySelector("select[name$='-reimbursement_type']");a=e?e.value:"",l=t?t.value:"",c=n?n.value:""}else o&&(a=o.dataset.structureId||"",l=o.dataset.amount||"",c=o.dataset.type||"total_year");const d=Boolean(a),u=e.querySelector(".pmx-recovery-method[value='simple']"),p=e.querySelector(".pmx-recovery-method[value='custom']"),m=e.querySelector(".pmx-recovery-simple-fields"),f=e.querySelector(".pmx-recovery-custom-fields"),h=e.querySelector(".pmx-recovery-amount-input"),y=e.querySelector(".pmx-recovery-type-select"),g=e.querySelector(".pmx-recovery-structure-select");d?(p&&(p.checked=!0),m&&(m.style.display="none"),f&&(f.style.display="block"),g&&(g.value=a)):(u&&(u.checked=!0),m&&(m.style.display="block"),f&&(f.style.display="none"),h&&s(h,l),y&&(y.value=c),i(e))},getFocusableElements(e){const t=e.querySelectorAll("input:not([type='hidden']):not(:disabled), select:not(:disabled)");return Array.from(t).filter(e=>null!==e.offsetParent)}
1,validate:(e,t)=>(l(e,t),{valid:!0})};function d(e){const t=e.target;if(!t.matches(".pmx-recovery-method"))return;const o=t.closest(n);if(!o)return;const r=o.querySelector(".pmx-recovery-simple-fields"),a=o.querySelector(".pmx-recovery-custom-fields");"custom"===t.value?(r&&(r.style.display="none"),a&&(a.style.display="block")):(r&&(r.style.display="block"),a&&(a.style.display="none"));const i=o.pmxTriggerCell;if(!i)return;const s=c.getCurrentValues(o);c.updateDisplay(i,s)}function u(e){if(!e.target.matches(".pmx-recovery-type-select"))return;const t=e.target.closest(n);if(!t)return;i(t);const o=t.pmxTriggerCell;if(!o)return;const r=c.getCurrentValues(t);c.updateDisplay(o,r)}function p(e){if(!e.target.matches(".pmx-recovery-structure-select"))return;const t=e.target.closest(n);if(!t)return;const o=t.pmxTriggerCell;if(!o)return;const r=c.getCurrentValues(t);c.updateDisplay(o,r)}function m(e){if(!e.target.matches(".pmx-recovery-amount-input"))return;const t=e.target.closest(n);if(!t)return;const o=t.pmxTriggerCell;if(!o)return;const r=c.getCurrentValues(t);c.updateDisplay(o,r)}window.PMXRecoveryPopover={formatRecoveryTerms:r,initRecoveryTerms:function(n){n&&(n.querySelectorAll(t).forEach(t=>{const n=t.closest(e),o=t.dataset.structureId||"";if(o&&n){const e=n.querySelector(".pmx-recovery-fields"),r=e?e.querySelector("select[name$='-recovery_structure']"):null;if(r&&r.selectedIndex>=0){const e=r.options[r.selectedIndex];e&&e.value===o&&(t.dataset.structureName=e.text)}}a(t)}),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(c),document.addEventListener("change",d),document.addEventListener("change",u),document.addEventListener("change",p),document.addEventListener("input",m),document.addEventListener("keyup",m))},syncRecoveryPopoverToFields:function(e,t){if(void 0===t&&(t=!0),!e)return;let o=e.querySelector(n);if(!o){const t=document.querySelectorAll(`${n}.is-visible`);for(const n of t)if(n.pmxTriggerCell===e){o=n;break}}if(!o&&window.PMXPopover&&window.PMXPopover.getCurrentPopover){const t=window.PMXPopover.getCurrentPopover();t&&t.pmxTriggerCell===e&&(o=t)}if(!o)return;const r=e.closest(".pmx-formset-row"),a=c.getCurrentValues(o);if(c.syncToFields(r,a),c.updateDisplay(e,a),t)if(l(a,o.pmxOriginalValues)){if(e.classList.add("pmx-cell-dirty"),r){r.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(r)}}else if(e.classList.remove("pmx-cell-dirty"),r&&!r.querySelector(".pmx-cell-dirty")){r.classList.remove("pmx-row-dirty");const e=r.closest("tbody");if(!e||!e.querySelector(".pmx-row-dirty")){const e=document.getElementById("formset-parent");e&&e.classList.remove("dirty");const t=r.closest("form");t&&window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(t),window.PMXServerPagination&&window.PMXServerPagination.updateStateIndicator&&window.PMXServerPagination.updateStateIndicator(!1)}}},updateRecoveryDisplay:a,updateRecoveryTermsDisplay:function(e){a(e)}}}(),function(){"use strict";const e="#rent-increases-modal",t="#rent-increases-body",n="#rent-increases-save-btn",o="#rent-increases-tenant-name";let r=null,a=null,i=[],s=[],l={},c=!1,d=0,u=null;function p(){const e="csrftoken";let t=null;if(document.cookie&&""!==document.cookie){const n=document.cookie.split(";");for(let o=0;o<n.length;o++){const r=n[o].trim();if(r.substring(0,e.length+1)===`${e}=`){t=decodeURIComponent(r.substring(e.length+1));break}}}return t}function m(e){return(window.TENANT_CONFIG&&window.TENANT_CONFIG.rentIncreasesEndpoint||"").replace("{tenant_id}",e)}function f(e){const t=parseFloat(e);return isNaN(t)?"0":t.toFixed(2)}function h(e){const o=document.querySelector(t);if(o){o.innerHTML="";const t=document.createElement("div");t.className="pmx-rent-increases-rules-notice",t.style.padding="16px",t.style.lineHeight="1.5";const n=document.createElement("p");n.innerHTML="<strong>This tenant uses rules-based rent increases.</strong>",t.appendChild(n);const r=document.createElement("p");r.textContent="The legacy editor cannot modify rule-based schedules. Open the enhanced tenant editor to edit the rent increases.",t.appendChild(r);const a=function(e){const t=(window.TENANT_CONFIG&&window.TENANT_CONFIG.rentIncreasesEndpoint||"").match(/\/properties\/api\/(\d+)\//);return t?`/properties/${t[1]}/tenants/vue3/${e?`?highlight=${encodeURIComponent(e)}`:""}`:""}(e);if(a){const e=document.createElement("a");e.href=a,e.textContent="Open enhanced editor",t.appendChild(e)}o.appendChild(t)}const r=document.querySelector(n);r&&(r.style.display="none")}function y(){const e=document.querySelector(n);e&&(e.style.display="")}function g(){const e=document.querySelector(t);
1e&&(e.innerHTML="",s.forEach((t,n)=>{const o=function(e,t,n){const o=document.createElement("div");o.className="pmx-rent-increases-row",o.dataset.index=t;const r=document.createElement("div");r.className="pmx-rent-increases-col-year",r.textContent=e.year,o.appendChild(r);const a=document.createElement("div");a.className="pmx-rent-increases-col-amount";const i=document.createElement("input");i.type="text",i.className="form-control pmx-rent-increase-amount",i.value=f(e.amount),i.dataset.index=t,a.appendChild(i),o.appendChild(a);const s=document.createElement("div");s.className="pmx-rent-increases-col-type";const c=document.createElement("select");c.className="form-control pmx-rent-increase-type",c.dataset.index=t;for(const[t,n]of Object.entries(l)){const o=document.createElement("option");o.value=t,o.textContent=n,t===e.inflation_type&&(o.selected=!0),c.appendChild(o)}s.appendChild(c),o.appendChild(s);const d=document.createElement("div");if(d.className="pmx-rent-increases-col-action",!n){const e=document.createElement("button");e.type="button",e.className="pmx-rent-increase-copy-btn",e.title="Copy to all rows below",e.dataset.index=t,e.innerHTML='<span class="pmx-copy-icon">Copy down <span class="icon icon-arrow-down"></span></span>',d.appendChild(e)}return o.appendChild(d),o}(t,n,n===s.length-1);e.appendChild(o)}))}function v(){const e=document.querySelector(t);if(!e)return;const n=e.querySelectorAll(".pmx-rent-increase-amount"),o=e.querySelectorAll(".pmx-rent-increase-type");n.forEach(e=>{const t=parseInt(e.dataset.index,10);t>=0&&t<s.length&&(s[t].amount=e.value)}),o.forEach(e=>{const t=parseInt(e.dataset.index,10);t>=0&&t<s.length&&(s[t].inflation_type=e.value)})}function w(){const e=document.querySelector(t);e&&e.querySelectorAll(".pmx-rent-increases-row").forEach(e=>{const t=parseInt(e.dataset.index,10);if(t>=0&&t<s.length&&t<i.length){const n=s[t],o=i[t],r=f(n.amount)!==f(o.amount)||n.inflation_type!==o.inflation_type,a=e.querySelector(".pmx-rent-increase-amount"),l=e.querySelector(".pmx-rent-increase-type");a&&a.classList.toggle("dirty",f(n.amount)!==f(o.amount)),l&&l.classList.toggle("dirty",n.inflation_type!==o.inflation_type),e.classList.toggle("is-dirty",r)}})}async function b(t){const f=++d;!function(){const t=document.querySelector(e);if(!t)return;const o=t.querySelector(".pmx-rent-increases-loading"),r=t.querySelector(".pmx-rent-increases-content"),a=t.querySelector(".pmx-rent-increases-error");o&&(o.style.display="block"),r&&(r.style.display="none"),a&&(a.style.display="none");const i=document.querySelector(n);i&&(i.disabled=!0)}();try{const v=await fetch(m(t),{headers:{"Content-Type":"application/json","X-CSRFToken":p()},method:"GET"});if(f!==d)return;if(!v.ok)throw new Error("Failed to load rent increases");const w=await v.json();if(f!==d)return;r=t,u=t,l=w.inflation_type_choices||{},i=JSON.parse(JSON.stringify(w.rent_increases||[])),s=JSON.parse(JSON.stringify(w.rent_increases||[])),c="rules"===w.schedule_type;const b=document.querySelector(o);b&&(b.textContent=a||w.tenant_name||""),c?h(t):(y(),g()),function(){const t=document.querySelector(e);if(!t)return;const o=t.querySelector(".pmx-rent-increases-loading"),r=t.querySelector(".pmx-rent-increases-content"),a=t.querySelector(".pmx-rent-increases-error");o&&(o.style.display="none"),r&&(r.style.display="block"),a&&(a.style.display="none");const i=document.querySelector(n);i&&(i.disabled=!1,i.textContent="Save")}()}catch(t){if(f!==d)return;console.error("Failed to load rent increases:",t),function(){const t=document.querySelector(e);if(!t)return;const n=t.querySelector(".pmx-rent-increases-loading"),o=t.querySelector(".pmx-rent-increases-content"),r=t.querySelector(".pmx-rent-increases-error");n&&(n.style.display="none"),o&&(o.style.display="none"),r&&(r.style.display="block")}()}}async function x(){if(!r)return;if(r!==u)return;if(c)return;v();const e=r,t=d,o=C(),a={rent_increases:s.map(e=>({amount:e.amount,inflation_type:e.inflation_type,year:e.year}))},l=document.querySelector(n);l&&(l.disabled=!0,l.textContent="Saving...");try{const n=`${m(e)}update/`,r=await fetch(n,{body:JSON.stringify(a),headers:{"Content-Type":"application/json","X-CSRFToken":p()},method:"POST"});if(!r.ok){const e=await r.json();throw new Error(e.error||"Failed to save rent increases")}const c=t===d;!function(e,t){const n=document.querySelector(`.pmx-rent-increases-btn[data-tenant-id="${e}"]`);if(!n)return;const o=void 0!==t?t:C();n.classList.toggle("has-rent-increases",o),n.classList.contains("pmx-btn-disabled")||(n.title=o?"Rent increases defined":"No rent increases")}(e,o),window.PMXToast&&window.PMXToast.success("Rent increases saved"),c&&(i=JSON.parse(JSON.stringify(s)),w(),P())}catch(e){console.error("Failed to save rent increases:",e),t===d&&(window.PMXToast?window.PMXToast.error(e.message||"Failed to save rent increases"):window.alert(e.message||"Failed to save rent increases"))}finally{t===d&&l&&(l.disabled=!1,l.textContent="Save")}}function S(t,n){r=t,a=n;const o=document.querySelector(e);o&&("function"==typeof o.showModal&&o.showModal(),b(t))}function P(){const t=document.querySelector(e);
1if(!t)return;"function"==typeof t.close&&t.close(),d++,r=null,a=null,u=null,i=[],s=[],c=!1;const o=document.querySelector(n);o&&(o.disabled=!1,o.textContent="Save"),y()}function C(){return s.some(e=>{const t=parseFloat(e.amount);return!isNaN(t)&&0!==t})}function T(e){const t=e.closest(".pmx-formset-row"),n=e.classList.contains("has-rent-increases")?"Rent increases defined":"No rent increases";let o=!1;if(t){const e=t.querySelector(".pmx-col-lease-start"),n=t.querySelector(".pmx-col-lease-end");o=e&&e.classList.contains("pmx-cell-dirty")||n&&n.classList.contains("pmx-cell-dirty")}o?(e.classList.add("pmx-btn-disabled"),e.title=`${n} · Save or revert dates to edit`):(e.classList.remove("pmx-btn-disabled"),e.title=n)}window.PMXRentIncreasesModal={closeModal:P,initRentIncreasesModal:function(o){if(!o)return;document.addEventListener("click",e=>{const t=e.target.closest(".pmx-rent-increases-btn");if(!t)return;if(e.stopPropagation(),e.preventDefault(),t.classList.contains("pmx-btn-disabled"))return;const n=t.dataset.tenantId,o=t.dataset.tenantName;n&&S(n,o)});const r=document.querySelector(e);if(!r)return;const a=r.querySelector(n);a&&a.addEventListener("click",x);const i=r.querySelector(t);i&&(i.addEventListener("click",e=>{const t=e.target.closest(".pmx-rent-increase-copy-btn");if(t){const e=parseInt(t.dataset.index,10);v(),function(e){if(e<0||e>=s.length-1)return;const t=s[e],n=t.amount,o=t.inflation_type;for(let t=e+1;t<s.length;t++)s[t].amount=n,s[t].inflation_type=o;g(),w()}(e)}}),i.addEventListener("input",e=>{e.target.classList.contains("pmx-rent-increase-amount")&&(v(),w())}),i.addEventListener("change",e=>{e.target.classList.contains("pmx-rent-increase-type")&&(v(),w())}));const l=r.querySelector(".pmx-dialog-close"),c=r.querySelector(".pmx-dialog-cancel-btn");l&&l.addEventListener("click",P),c&&c.addEventListener("click",P),r.addEventListener("click",function(e){e.target===r&&P()}),function(e){e.querySelectorAll(".pmx-rent-increases-btn").forEach(T),new MutationObserver(e=>{for(const t of e){if("class"!==t.attributeName)continue;const e=t.target,n=e.classList.contains("pmx-formset-row")?e:e.matches(".pmx-col-lease-start, .pmx-col-lease-end")?e.closest(".pmx-formset-row"):null;if(!n)continue;const o=n.querySelector(".pmx-rent-increases-btn");o&&T(o)}}).observe(e,{attributes:!0,attributeFilter:["class"],subtree:!0})}(o)},loadRentIncreases:b,openModal:S,saveRentIncreases:x}}();const MODULE_PATH="./rent-increases-modal";function makeDeferred(){let e;return{promise:new Promise(t=>{e=t}),resolve:e}}function annualBody(e){return{ok:!0,json:()=>Promise.resolve({tenant_name:e,schedule_type:"annual",rent_increases:[],inflation_type_choices:{}})}}function setupDom(){document.body.innerHTML='\n        <button class="pmx-rent-increases-btn" data-tenant-id="111"></button>\n        <button class="pmx-rent-increases-btn" data-tenant-id="222"></button>\n        <dialog id="rent-increases-modal">\n            <div class="pmx-rent-increases-loading"></div>\n            <div class="pmx-rent-increases-content"></div>\n            <div class="pmx-rent-increases-error"></div>\n            <div id="rent-increases-body"></div>\n            <span id="rent-increases-tenant-name"></span>\n            <button id="rent-increases-save-btn">Save</button>\n        </dialog>\n    ',HTMLDialogElement.prototype.showModal=jest.fn(),HTMLDialogElement.prototype.close=jest.fn()}function loadModule(){let e;return jest.isolateModules(()=>{require(MODULE_PATH),e=window.PMXRentIncreasesModal}),e}function flush(){return new Promise(e=>setTimeout(e,0))}function postCalls(){return global.fetch.mock.calls.filter(e=>e[1]&&"POST"===e[1].method)}describe("legacy rent-increases modal concurrency guards",()=>{let e;beforeEach(()=>{setupDom(),window.TENANT_CONFIG={rentIncreasesEndpoint:"/properties/api/{tenant_id}/rent-increases/"},e=loadModule()}),afterEach(()=>{delete global.fetch,jest.restoreAllMocks()}),it("a stale GET for closed tenant A does not overwrite reopened tenant B",async()=>{const t=makeDeferred(),n=makeDeferred();global.fetch=jest.fn((e,o)=>o&&"POST"===o.method?Promise.resolve({ok:!0,json:()=>Promise.resolve({})}):e.includes("/111/")?t.promise:n.promise),e.openModal(111,"Tenant A"),e.closeModal(),e.openModal(222,"Tenant B"),n.resolve(annualBody("Tenant B")),await flush(),t.resolve(annualBody("Tenant A")),await flush(),await e.saveRentIncreases();const o=postCalls();expect(o).toHaveLength(1),expect(o[0][0]).toContain("/222/"),expect(o[0][0]).not.toContain("/111/")}),it("Save is inert while the reopened tenant's schedule is still loading",async()=>{const t=makeDeferred();global.fetch=jest.fn((e,n)=>n&&"POST"===n.method?Promise.resolve({ok:!0,json:()=>Promise.resolve({})}):e.includes("/111/")?Promise.resolve(annualBody("Tenant A")):t.promise),e.openModal(111,"Tenant A"),await flush(),e.closeModal(),e.openModal(222,"Tenant B"),await e.saveRentIncreases(),expect(postCalls()).toHaveLength(0),t.resolve(annualBody("Tenant B")),await flush()}),it("resets the Save button after a successful save (no stale 'Saving...')",async()=>{global.fetch=jest.fn((e,t)=>t&&"POST"===t.method?Promise.resolve({ok:!0,json:()=>Promise.resolve({})}):Promise.resolve(annualBody("Tenant A"))),e.openModal(111,"Tenant A"),await flush(),await e.saveRentIncreases();const t=document.querySelector("#rent-increases-save-btn");expect(t.disabled).toBe(!1),expect(t.textContent).toBe("Save")}),it("an in-flight save for A does not close or mutate reopened tenant B",async()=>{const t=makeDeferred();global.fetch=jest.fn((e,n)=>n&&"POST"===n.method?t.promise:Promise.resolve(annualBody(e.includes("/111/")?"Tenant A":"Tenant B"))),e.openModal(111,"Tenant A"),await flush(),e.saveRentIncreases(),await flush(),e.closeModal(),e.openModal(222,"Tenant B"),await flush(),HTMLDialogElement.prototype.close.mockClear(),t.resolve({ok:!0,json:()=>Promise.resolve({})}),await flush(),expect(HTMLDialogElement.prototype.close).not.toHaveBeenCalled(),await e.saveRentIncreases();const n=postCalls();expect(n[n.length-1][0]).toContain("/222/")})}),function(){"use strict";const e=".pmx-rent-display",t=".pmx-rent-popover";function n(e,t,n,o){const r=parseFloat((e||"0").toString().replace(/,/g,""))||0;if(r<=0)return"—";
1const a=r.toLocaleString(void 0,{maximumFractionDigits:2,minimumFractionDigits:2});switch(t){case"sf_per_year":return`${n}${a} / ${o} / yr`;case"sf_per_month":return`${n}${a} / ${o} / mo`;case"year":return`${n}${a} / yr`;case"month":return`${n}${a} / mo`;default:return`${n}${a} / ${o} / yr`}}function o(e){if(!e)return;const t=e.dataset.amount||"0",o=e.dataset.type||"sf_per_year",r=e.dataset.currency||"$",a=e.dataset.units||"SF";e.textContent=n(t,o,r,a),e.title="Click to edit"}const r={popoverSelector:t,cellSelector:".pmx-col-rent",displaySelector:e,getOriginalValues:function(t){const n=t.querySelector(e),o=t.querySelector(".pmx-rent-fields");let r="",a="sf_per_year";if(o){const e=o.querySelector("input[name$='-tenant_rent']"),t=o.querySelector("select[name$='-tenant_rent_type']");r=e?e.value.replace(/,/g,""):"",a=t?t.value:"sf_per_year"}else n&&(r=n.dataset.amount||"",a=n.dataset.type||"sf_per_year");return{amount:parseFloat(r)||0,type:a||"sf_per_year"}},getCurrentValues:function(e){const t=e.querySelector(".pmx-rent-input"),n=e.querySelector(".pmx-rent-type-select");return{amount:parseFloat((o=t,o?window.jQuery&&window.jQuery.fn.autoNumeric&&window.jQuery(o).data("autoNumeric")?window.jQuery(o).autoNumeric("get")||"":o.value.replace(/,/g,""):""))||0,type:n?n.value:"sf_per_year"};var o},setInputValues:function(e,t){const n=e.querySelector(".pmx-rent-input"),o=e.querySelector(".pmx-rent-type-select");n&&function(e,t){if(e)if(window.jQuery&&window.jQuery.fn.autoNumeric){const n=window.jQuery(e);n.data("autoNumeric")||n.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"}),""!==t&&null!=t?n.autoNumeric("set",t):e.value=""}else e.value=""!==t&&null!=t?t:""}(n,t.amount),o&&(o.value=t.type||"sf_per_year")},syncToFields:function(e,t){const n=e.querySelector(".pmx-col-rent");if(!n)return;const o=n.querySelector(".pmx-rent-fields");if(!o)return;const r=o.querySelector("input[name$='-tenant_rent']"),a=o.querySelector("select[name$='-tenant_rent_type']");r&&(r.value=t.amount),a&&(a.value=t.type)},updateDisplay:function(t,n){const r=t.querySelector(e);r&&(r.dataset.amount=n.amount,r.dataset.type=n.type,o(r))},onOpen:function(e){const t=e.querySelector(".pmx-rent-input");if(t&&window.jQuery&&window.jQuery.fn.autoNumeric){const e=window.jQuery(t);e.data("autoNumeric")||e.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"})}}};function a(e){if(!e.target.matches(".pmx-rent-input"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}function i(e){if(!e.target.matches(".pmx-rent-type-select"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}window.PMXRentPopover={formatRent:n,initRent:function(t){t&&(t.querySelectorAll(e).forEach(o),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(r),document.addEventListener("input",a),document.addEventListener("keyup",a),document.addEventListener("change",i))},syncRentPopoverToFields:function(e,n){if(void 0===n&&(n=!0),!e)return;let o=e.querySelector(t);if(!o){const n=document.querySelectorAll(`${t}.is-visible`);for(const t of n)if(t.pmxTriggerCell===e){o=t;break}}if(!o&&window.PMXPopover&&window.PMXPopover.getCurrentPopover){const t=window.PMXPopover.getCurrentPopover();t&&t.pmxTriggerCell===e&&(o=t)}if(!o)return;const a=e.closest(".pmx-formset-row"),i=r.getCurrentValues(o);if(r.syncToFields(a,i),r.updateDisplay(e,i),n&&(e.classList.add("pmx-cell-dirty"),a)){a.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(a)}},updateRentDisplay:o}}(),function(){"use strict";const e=new Map;async function t(t,r){const a=t.dataset.recordId,i=t.querySelector("input[name$='-square_feet']");if(!i||!r)return;let s=i.value.replace(/,/g,"");if((s=parseInt(s,10)||0)<=0)o(t);else try{const i=await fetch(r,{body:JSON.stringify({square_feet:s,tenant_id:a}),headers:{"Content-Type":"application/json","X-CSRFToken":function(){if(window.PMXFormsetTable&&window.PMXFormsetTable.getCSRFToken)return window.PMXFormsetTable.getCSRFToken();const e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:null}()},method:"POST"}),l=await i.json();l.valid?(o(t),e.set(a,{valid:!0})):(n(t,l.message),e.set(a,{message:l.message,valid:!1}))}catch(e){console.error("Space validation failed:",e)}}function n(e,t){let n=e.querySelector(".pmx-space-warning");const o=e.querySelector(".pmx-col-size");if(!o)return;n||((n=document.createElement("div")).className="pmx-space-warning pmx-validation-warning",o.appendChild(n)),n.style.cssText="display: block !important; margin-top: 4px; background: #f2dede; border: 1px solid #ebcccc; border-radius: 3px; padding: 4px 6px; font-size: 11px; color: #a94442; line-height: 1.3; white-space: normal;",n.textContent=t||"Exceeds building capacity";const r=o.querySelector("input");r&&r.classList.add("pmx-input-warning"),e.classList.add("pmx-has-validation-error")}function o(e){const t=e.querySelector(".pmx-space-warning");t&&(t.style.display="none");const n=e.querySelector(".pmx-col-size");if(n){const e=n.querySelector("input");e&&e.classList.remove("pmx-input-warning")}e.classList.remove("pmx-has-validation-error")}function r(){for(const[,t]of e)if(!1===t.valid)return!0;return!1}window.PMXSpaceValidator={clearSpaceValidationWarning:o,getValidationErrors:function(){const t=[];for(const[,n]of e)!1===n.valid&&n.message&&t.push(n.message);return t},hasValidationErrors:r,setupSpaceValidation:function(e,n){if(!n)return;let o=null;var a;e.addEventListener("input",e=>{const r=e.target;if(!r.matches("input[name$='-square_feet']"))return;const i=r.closest(".pmx-formset-row");i&&(a=i,o&&clearTimeout(o),o=setTimeout(()=>{t(a,n)},500))}),e.addEventListener("change",e=>{const r=e.target;if(!r.matches("input[name$='-square_feet']"))return;const a=r.closest(".pmx-formset-row");a&&(o&&(clearTimeout(o),o=null),t(a,n))});const i=e.closest("form")||e.querySelector("form");i&&i.addEventListener("submit",t=>
1{if(r()){t.preventDefault(),t.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix size validation errors before saving"):window.alert("Please fix size validation errors before saving");const n=e.querySelector(".pmx-has-validation-error");return n&&n.scrollIntoView({behavior:"smooth",block:"center"}),!1}},!0)},showSpaceValidationWarning:n,validateTenantSpace:t}}(),function(){"use strict";let e=null,t=null,n=null,o={},r=!1;function a(e){const o=e.querySelector("input[name$='-lease_start_date']"),r=e.querySelector("input[name$='-lease_end_date']"),a=e.querySelector("input[name$='-availability_start']"),i=e.querySelector("input[name$='-availability_end']");let s="",l="",c=null,d=null;if(o&&r)s=o.value,l=r.value,c=a?a.value:null,d=i?i.value:null;else{const t=e.querySelector(".pmx-col-lease-start"),n=e.querySelector(".pmx-col-lease-end"),o=e.querySelector(".pmx-col-availability"),r=t?t.querySelector(".pmx-date-display"):null,a=n?n.querySelector(".pmx-date-display"):null,i=o?o.querySelector(".pmx-availability-display"):null;s=r&&r.dataset.value||"",l=a&&a.dataset.value||"";let u=o?o.querySelector(".pmx-dates-popover"):null;if(!u||!u.classList.contains("is-visible")){const t=document.querySelector(".pmx-dates-popover.is-visible");t&&t.pmxTriggerRow===e&&(u=t)}if(u&&u.classList.contains("is-visible")){const e=u.querySelector(".pmx-date-input[data-target='availability_start']"),t=u.querySelector(".pmx-date-input[data-target='availability_end']");c=e?e.value:null,d=t?t.value:null}else i&&(c=i.dataset.availStart||null,d=i.dataset.availEnd||null);if(!s&&!l)return!1}const u=c||d,p=e.querySelector(".pmx-col-lease-start"),m=e.querySelector(".pmx-col-lease-end"),f=p?p.querySelector(".pmx-date-display"):null,h=m?m.querySelector(".pmx-date-display"):null;p&&p.classList.remove("has-date-error","has-date-info"),m&&m.classList.remove("has-date-error","has-date-info"),f&&f.removeAttribute("title"),h&&h.removeAttribute("title"),e.classList.remove("has-lease-date-error");let y=!1;if(s&&l&&l<=s&&(m&&h&&(m.classList.add("has-date-error"),h.title="End date must be after start date"),e.classList.add("has-lease-date-error"),y=!0),!y&&window.PMXFormValidation&&window.PMXFormValidation.validateLeaseAvailability){const o=window.PMXFormValidation.validateLeaseAvailability({analysisEnd:n||"",analysisStart:t||"",availabilityEnd:d||"",availabilityStart:c||"",hasCustomAvailability:u,leaseEnd:l,leaseStart:s});o.startResult.message&&p&&f&&(f.title=o.startResult.message,o.startResult.isError?(p.classList.add("has-date-error"),e.classList.add("has-lease-date-error"),y=!0):o.startResult.isWarning&&p.classList.add("has-date-info"));const r=m&&m.classList.contains("has-date-error");o.endResult.message&&!r&&m&&h&&(h.title=o.endResult.message,o.endResult.isError?(m.classList.add("has-date-error"),e.classList.add("has-lease-date-error"),y=!0):o.endResult.isWarning&&m.classList.add("has-date-info"))}else if(!y){let o=null,r=!1;s&&(u&&c&&s<c?(o="Lease start is before availability start",r=!0):u&&d&&s>d?(o="Lease start is after availability end",r=!0):t&&s<t?o="Lease starts before analysis period":n&&s>n&&(o="Lease starts after analysis period")),o&&p&&f&&(f.title=o,r?(p.classList.add("has-date-error"),e.classList.add("has-lease-date-error"),y=!0):p.classList.add("has-date-info"));let a=null,i=!1;const g=m&&m.classList.contains("has-date-error");l&&!g&&(u&&d&&l>d?(a="Lease end is after availability end",i=!0):u&&c&&l<c?(a="Lease end is before availability start",i=!0):n&&l>n?a="Lease ends after analysis period":t&&l<t&&(a="Lease ends before analysis period")),a&&m&&h&&(h.title=a,i?(m.classList.add("has-date-error"),e.classList.add("has-lease-date-error"),y=!0):m.classList.add("has-date-info"))}return y}async function i(t){if(!e)return;let n=t.querySelector("input[name$='-name']");n||(n=t.querySelector("input[data-field='name']"));let o=t.querySelector("input[name$='-suite_number']");o||(o=t.querySelector("input[data-field='suite_number']"));const r=t.dataset.recordId,a=n?n.value.trim():"",i=o?o.value.trim():"";if(!a)return void s(t);let l=t.querySelector(".pmx-table-duplicate-warning");if(!l){(l=document.createElement("div")).className="pmx-table-duplicate-warning",l.style.cssText="position: absolute; top: 100%; left: 0; right: 0; background: #f2dede; border: 1px solid #ebcccc; border-radius: 3px; padding: 4px 6px; font-size: 11px; color: #a94442; line-height: 1.3; z-index: 10; white-space: nowrap;";const e=n.closest("td");e&&(e.style.position="relative",e.appendChild(l))}try{const n=await fetch(e,{body:JSON.stringify({exclude_tenant_id:r,name:a,suite_number:i}),headers:{"Content-Type":"application/json","X-CSRFToken":function(){const e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:""}()},method:"POST"}),o=await n.json();o.valid?s(t):(l.textContent=o.message||"Duplicate tenant found",l.style.display="block",t.classList.add("has-dupl
1icate-error"))}catch(e){console.error("Table duplicate validation error:",e),s(t)}}function s(e){const t=e.querySelector(".pmx-table-duplicate-warning");t&&(t.style.display="none"),e.classList.remove("has-duplicate-error")}function l(e){const t=e.dataset.recordId||"new";o[t]&&clearTimeout(o[t]),o[t]=setTimeout(()=>{i(e)},500)}function c(e){let t=e.closest("tr.pmx-formset-row");if(!t){const n=e.closest(".pmx-dates-popover");n&&n.pmxTriggerRow&&(t=n.pmxTriggerRow)}return t}window.PMXTableValidation={init:function(){if(r)return;const o=window.TENANT_CONFIG||{};e=o.validateDuplicateEndpoint||null,t=o.analysisStartDate||null,n=o.analysisEndDate||null;const i=document.getElementById("tenant-table-body");i?(r=!0,i.addEventListener("change",e=>{const t=e.target,n=t.closest("tr.pmx-formset-row");n&&(t.name&&(t.name.endsWith("-lease_start_date")||t.name.endsWith("-lease_end_date"))&&a(n),t.name&&(t.name.endsWith("-name")||t.name.endsWith("-suite_number"))&&l(n))}),i.addEventListener("input",e=>{const t=e.target,n=t.closest("tr.pmx-formset-row");n&&t.name&&(t.name.endsWith("-name")||t.name.endsWith("-suite_number"))&&l(n)}),setTimeout(()=>{i.querySelectorAll(".pmx-date-input").forEach(e=>{e.addEventListener("change",()=>{const t=c(e);t&&a(t)}),e.addEventListener("blur",()=>{const t=c(e);t&&a(t)})})},100),document.addEventListener("change",e=>{const t=e.target;if(!t.matches||!t.matches(".pmx-dates-popover .pmx-date-input"))return;const n=c(t);n&&a(n)}),document.addEventListener("blur",e=>{const t=e.target;if(!t.matches||!t.matches(".pmx-dates-popover .pmx-date-input"))return;const n=c(t);n&&a(n)},!0),i.querySelectorAll("tr.pmx-formset-row:not(.pmx-pagination-hidden)").forEach(e=>{a(e),l(e)})):console.warn("[PMX] Tenant table body not found")},validateTableRowDuplicate:i,validateTableRowLeaseDates:a},window.validateTableRowLeaseDates=a}(),function(){"use strict";const e=".pmx-ti-terms-display",t=".pmx-ti-popover";function n(e,t,n,o){const r=parseFloat((e||"0").toString().replace(/,/g,""))||0;if(r<=0)return"—";switch(t){case"per_sf":return`${n}${r.toLocaleString()}/${o}`;case"total":default:return`${n}${r.toLocaleString()}`}}function o(e){if(!e)return;const t=e.dataset.amount||"0",o=e.dataset.type||"total",r=e.dataset.currency||"$",a=e.dataset.units||"SF";e.textContent=n(t,o,r,a),e.title="Click to edit",e.classList.add("pmx-clickable")}const r={popoverSelector:t,cellSelector:".pmx-col-ti-terms",displaySelector:e,getOriginalValues:function(t){const n=t.querySelector(e),o=t.querySelector(".pmx-ti-fields");let r="",a="total";if(o){const e=o.querySelector("input[name$='-tenant_improvements']"),t=o.querySelector("select[name$='-tenant_improvements_type']");r=e?e.value.replace(/,/g,""):"",a=t?t.value:"total"}else n&&(r=n.dataset.amount||"",a=n.dataset.type||"total");return{amount:parseFloat(r)||0,type:a||"total"}},getCurrentValues:function(e){const t=e.querySelector(".pmx-ti-amount-input"),n=e.querySelector(".pmx-ti-type-select");return{amount:parseFloat((o=t,o?window.jQuery&&window.jQuery.fn.autoNumeric&&window.jQuery(o).data("autoNumeric")?window.jQuery(o).autoNumeric("get")||"":o.value.replace(/,/g,""):""))||0,type:n?n.value:"total"};var o},setInputValues:function(e,t){const n=e.querySelector(".pmx-ti-amount-input"),o=e.querySelector(".pmx-ti-type-select");n&&function(e,t){if(e)if(window.jQuery&&window.jQuery.fn.autoNumeric){const n=window.jQuery(e);n.data("autoNumeric")||n.autoNumeric({decimalPlacesOverride:2,minimumValue:"0"}),""!==t&&null!=t?n.autoNumeric("set",t.toString().replace(/,/g,"")):e.value=""}else e.value=""!==t&&null!=t?t:""}(n,t.amount),o&&(o.value=t.type||"total")},syncToFields:function(e,t){const n=e.querySelector(".pmx-col-ti-terms");if(!n)return;const o=n.querySelector(".pmx-ti-fields");if(!o)return;const r=o.querySelector("input[name$='-tenant_improvements']"),a=o.querySelector("select[name$='-tenant_improvements_type']");r&&(r.value=t.amount),a&&(a.value=t.type)},updateDisplay:function(t,n){const r=t.querySelector(e);r&&(r.dataset.amount=n.amount,r.dataset.type=n.type,o(r))},onOpen:function(e){const t=e.querySelector(".pmx-ti-amount-input");if(t&&window.jQuery&&window.jQuery.fn.autoNumeric){const e=window.jQuery(t);e.data("autoNumeric")||e.autoNumeric({decimalPlacesOverride:2,minimumValue:"0"})}}};function a(e){if(!e.target.matches(".pmx-ti-amount-input"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}function i(e){if(!e.target.matches(".pmx-ti-type-select"))return;const n=e.target.closest(t);if(!n)return;const o=n.pmxTriggerCell;if(!o)return;const a=r.getCurrentValues(n);r.updateDisplay(o,a)}
1window.PMXTIPopover={formatTITerms:n,initTITerms:function(t){t&&(t.querySelectorAll(e).forEach(o),window.PMXPopover&&window.PMXPopover.register&&window.PMXPopover.register(r),document.addEventListener("input",a),document.addEventListener("keyup",a),document.addEventListener("change",i))},syncTIPopoverToFields:function(e,n){if(void 0===n&&(n=!0),!e)return;let o=e.querySelector(t);if(!o){const n=document.querySelectorAll(`${t}.is-visible`);for(const t of n)if(t.pmxTriggerCell===e){o=t;break}}if(!o&&window.PMXPopover&&window.PMXPopover.getCurrentPopover){const t=window.PMXPopover.getCurrentPopover();t&&t.pmxTriggerCell===e&&(o=t)}if(!o)return;const a=e.closest(".pmx-formset-row"),i=r.getCurrentValues(o);if(r.syncToFields(a,i),r.updateDisplay(e,i),n&&(e.classList.add("pmx-cell-dirty"),a)){a.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(a)}},updateTITermsDisplay:o}}(),function(){"use strict";const e="pmx-submitting",t="button[type='submit'], input[type='submit']";function n(){const e=document.querySelector("meta[name='csrf-token']");if(e)return e.getAttribute("content");const t=document.cookie.split(";");for(let e of t)if((e=e.trim()).startsWith("csrftoken="))return e.substring(10);const n=document.querySelector("input[name='csrfmiddlewaretoken']");return n?n.value:null}function o(n,o){const r=n.querySelector(t);r&&(o?(n.classList.add(e),r.disabled=!0,r.dataset.originalHtml=r.innerHTML,r.innerHTML='\n                <span class="pmx-spinner"></span>\n                <span>Saving...</span>\n            '):(n.classList.remove(e),r.dataset.originalHtml&&(r.innerHTML=r.dataset.originalHtml)))}async function r(e,t={}){const{onSuccess:r=null,onError:a=null,successMessage:i="Saved successfully",showToast:s=!0,resetOnSuccess:l=!1}=t,c=e.action||window.location.href,d=e.method&&e.method.toUpperCase()||"POST";o(e,!0);try{const t=new FormData(e),u=await fetch(c,{method:d,body:t,headers:{"X-Requested-With":"XMLHttpRequest","X-CSRFToken":n()},credentials:"same-origin"});let p=null;const m=u.headers.get("content-type");if(m&&m.includes("application/json")&&(p=await u.json()),u.ok){return window.PMXErrors&&window.PMXErrors.clearFormErrors(e),s&&window.PMXToast&&window.PMXToast.success(i),(e.closest("#formset-parent")||e).classList.remove("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(e),l&&e.reset(),r&&r(p,u),p}if(p&&window.PMXErrors){const t=p.errors||p;window.PMXErrors.displayErrors(e,t)}throw s&&window.PMXToast&&window.PMXToast.error("Please fix the errors below"),a&&a(p,u),new Error("Form validation failed")}catch(e){throw"Form validation failed"!==e.message&&(console.error("Form submission error:",e),window.PMXToast&&window.PMXToast.error("An error occurred. Please try again."),a&&a(null,null)),e}finally{o(e,!1)}}function a(e,t={}){e.dataset.ajaxInitialized||(e.dataset.ajaxInitialized="true",e.addEventListener("submit",async n=>{if(n.preventDefault(),e.querySelector(".has-lease-date-error"))window.PMXToast&&window.PMXToast.error("Please fix validation errors before saving");else try{await r(e,t)}catch(e){}}))}function i(){document.querySelectorAll("form.ajax-form").forEach(e=>a(e))}function s(e,t={}){const{showToast:n=!0,onDiscard:o=null}=t;e.reset(),window.PMXErrors&&window.PMXErrors.clearFormErrors(e),(e.closest("#formset-parent")||e).classList.remove("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(e),e.querySelectorAll(".pmx-row-dirty").forEach(e=>e.classList.remove("pmx-row-dirty")),e.querySelectorAll(".pmx-cell-dirty").forEach(e=>e.classList.remove("pmx-cell-dirty")),o&&o(e),n&&window.PMXToast&&window.PMXToast.success("Changes discarded")}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",i):i(),window.PMXForms={submitForm:r,initAjaxForm:a,initAllAjaxForms:i,getCSRFToken:n,setLoadingState:o,discardChanges:s,initDiscardButton:function(e,t={}){const n=e.querySelector(".pmx-discard-btn");n&&!n.dataset.initialized&&(n.dataset.initialized="true",n.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation(),s(e,t)}))}}}(),function(){"use strict";const e="pmx-cell-dirty",t="pmx-row-dirty",n="pmx-field-dirty",o=new WeakMap;let r=!1;function a(t){t&&(t.classList.add(e),u())}function i(t){t&&t.classList.remove(e)}function s(e){e&&(e.classList.add(t),u())}function l(e){e&&e.classList.add(n)}function c(e){e&&e.classList.remove(n)}function d(n){let r=!1;if(document.querySelectorAll("form").forEach(function(e){if(o.has(e)){o.get(e).isDirty&&(r=!0)}}),!r){const n=document.querySelectorAll("."+e),o=document.querySelectorAll("."+t);(n.length>0||o.length>0)&&(r=!0)}if(r)return n.preventDefault(),n.returnValue="",""}function u(){r||(window.addEventListener("beforeunload",d),r=!0)}function p(e){if(!e)return;const n=e.closest("form");if(n){o.has(n)||o.set(n,{isDirty:!1,originalValues:{}}),o.get(n).isDirty=!0}const r=e.closest("tr");r&&r.classList.add(t),u()}function m(e){if(!e)return;if(o.has(e)){o.get(e).isDirty=!1}
1e.querySelectorAll("."+n).forEach(function(e){e.classList.remove(n)})}function f(e){return!(!e||!o.has(e))&&o.get(e).isDirty}function h(e,t){return(e||"")!==(t||"")}window.PMXDirtyTracking={markCellDirty:a,markCellClean:i,isCellDirty:function(t){return!!t&&t.classList.contains(e)},markRowDirty:s,markRowClean:function(e){e&&e.classList.remove(t)},isRowDirty:function(e){return!!e&&e.classList.contains(t)},markFieldDirty:l,markFieldClean:c,isFieldDirty:function(e){return!!e&&e.classList.contains(n)},triggerFormDirty:p,markFormClean:m,isFormDirty:f,initFormDirtyTracking:function(e,t={}){if(!e)return null;const n=t.fieldSelector||".pmx-field",r={};function a(){e.querySelectorAll("input, select, textarea").forEach(function(e){const t=e.name;t&&("radio"===e.type?e.checked&&(r[t]=e.value):"checkbox"===e.type?r[t]=e.checked:r[t]=e.value)})}function i(e){return e.closest(n)}function s(t){const n=t.name;if(!(n&&n in r))return!1;let o=!1;if("radio"===t.type){const t=e.querySelector('input[name="'+n+'"]:checked');o=t&&r[n]!==t.value,e.querySelectorAll('input[name="'+n+'"]').forEach(function(e){const t=i(e);t&&(o?l(t):c(t))})}else if("checkbox"===t.type){o=r[n]!==t.checked;const e=i(t);e&&(o?l(e):c(e))}else{o=r[n]!==t.value;const e=i(t);e&&(o?l(e):c(e))}return o}function d(t){const n=t.target;if(n.matches("input, select, textarea")){s(n);const t=function(){const t=e.querySelectorAll("input, select, textarea");let n=!1;for(let e=0;e<t.length;e++)s(t[e])&&(n=!0);return n}();o.has(e)||o.set(e,{isDirty:!1,originalValues:{}}),o.get(e).isDirty=t}}return a(),o.set(e,{isDirty:!1,originalValues:r}),u(),e.addEventListener("change",d),e.addEventListener("input",d),e.addEventListener("submit",function(){m(e)}),{isDirty:function(){return f(e)},markClean:function(){m(e)},recaptureValues:function(){a(),o.get(e).isDirty=!1}}},storeOriginalValues:function(e,t){e&&(e.dataset.originalValues=JSON.stringify(t))},getOriginalValues:function(e){if(!e||!e.dataset.originalValues)return{};try{return JSON.parse(e.dataset.originalValues)}catch(e){return{}}},hasValueChanged:h,updateDirtyState:function(e,t,n,o=!0){const r=h(t,n);if(r){if(a(e),o){const t=e?e.closest(".pmx-formset-row"):null;t&&(s(t),p(t))}}else i(e);return r}}}(),function(){"use strict";let e=null;window.PMXDialog={confirm:function(t={}){const{title:n="Confirm",message:o="Are you sure?",confirmText:r="Confirm",cancelText:a="Cancel",danger:i=!1}=t;return new Promise(t=>{const s=e&&document.body.contains(e)?e:((e=document.createElement("dialog")).className="pmx-dialog pmx-dialog-confirm",e.innerHTML='\n            <div class="pmx-dialog-content">\n                <div class="pmx-dialog-header">\n                    <h3 class="pmx-dialog-title"></h3>\n                    <button type="button" class="pmx-dialog-close" aria-label="Close">&times;</button>\n                </div>\n                <div class="pmx-dialog-body"></div>\n                <div class="pmx-dialog-footer">\n                    <button type="button" class="pmx-btn pmx-btn-default pmx-dialog-cancel">Cancel</button>\n                    <button type="button" class="pmx-btn pmx-btn-primary pmx-dialog-confirm-btn">Confirm</button>\n                </div>\n            </div>\n        ',document.body.appendChild(e),e.addEventListener("click",t=>{t.target===e&&e.close("cancel")}),e.querySelector(".pmx-dialog-close").addEventListener("click",()=>{e.close("cancel")}),e);s.querySelector(".pmx-dialog-title").textContent=n;const l=s.querySelector(".pmx-dialog-body");l.textContent="";const c=document.createElement("p");c.textContent=o,l.appendChild(c),s.querySelector(".pmx-dialog-cancel").textContent=a;const d=s.querySelector(".pmx-dialog-confirm-btn");d.textContent=r,d.className=`pmx-btn ${i?"pmx-btn-danger":"pmx-btn-primary"} pmx-dialog-confirm-btn`;const u=d.cloneNode(!0);d.parentNode.replaceChild(u,d);const p=s.querySelector(".pmx-dialog-cancel"),m=p.cloneNode(!0);p.parentNode.replaceChild(m,p),m.addEventListener("click",()=>{s.close("cancel")}),u.addEventListener("click",()=>{s.close("confirm")});const f=()=>
1{s.removeEventListener("close",f),t("confirm"===s.returnValue)};s.addEventListener("close",f),s.showModal()})},choice:function(e={}){const{title:t="Choose an option",message:n="",choices:o=[]}=e;return new Promise(e=>{const r=document.createElement("dialog");r.className="pmx-dialog pmx-dialog-choice";const a=document.createElement("div");a.className="pmx-dialog-content";const i=document.createElement("div");i.className="pmx-dialog-header";const s=document.createElement("h3");s.className="pmx-dialog-title",s.textContent=t,i.appendChild(s);const l=document.createElement("button");l.type="button",l.className="pmx-dialog-close",l.setAttribute("aria-label","Close"),l.textContent="×",i.appendChild(l),a.appendChild(i);const c=document.createElement("div");c.className="pmx-dialog-body";const d=document.createElement("p");d.textContent=n,c.appendChild(d),a.appendChild(c);const u=document.createElement("div");u.className="pmx-dialog-footer",o.forEach(e=>{const t=document.createElement("button");t.type="button",t.className=`pmx-btn ${e.className||"pmx-btn-default"}`,t.dataset.value=e.value,t.textContent=e.label,u.appendChild(t)}),a.appendChild(u),r.appendChild(a),document.body.appendChild(r),r.addEventListener("click",e=>{e.target===r&&r.close("cancel")}),l.addEventListener("click",()=>{r.close("cancel")}),r.querySelectorAll("[data-value]").forEach(e=>{e.addEventListener("click",()=>{r.close(e.dataset.value)})}),r.addEventListener("close",()=>{e(r.returnValue||"cancel"),r.remove()}),r.showModal()})},open:function(e){e&&"function"==typeof e.showModal&&e.showModal()},close:function(e,t){e&&"function"==typeof e.close&&e.close(t)}}}(),function(){"use strict";function e(e,t){return e&&t&&t<=e?{valid:!1,message:"Lease end date must be after start date"}:{valid:!0,message:null}}function t(e){var t=e.leaseStart||"",n=e.leaseEnd||"",o=e.availabilityStart||"",r=e.availabilityEnd||"",a=e.analysisStart||"",i=e.analysisEnd||"",s=e.hasCustomAvailability||!1,l={message:null,isError:!1,isWarning:!1},c={message:null,isError:!1,isWarning:!1};return t&&(s&&o&&t<o?(l.message="Lease start is before availability start",l.isError=!0):s&&r&&t>r?(l.message="Lease start is after availability end",l.isError=!0):a&&t<a?(l.message="Lease starts before analysis period",l.isWarning=!0):i&&t>i&&(l.message="Lease starts after analysis period",l.isWarning=!0)),n&&!(t&&n&&n<t)&&(s&&r&&n>r?(c.message="Lease end is after availability end",c.isError=!0):s&&o&&n<o?(c.message="Lease end is before availability start",c.isError=!0):i&&n>i?(c.message="Lease ends after analysis period",c.isWarning=!0):a&&n<a&&(c.message="Lease ends before analysis period",c.isWarning=!0)),{startResult:l,endResult:c,hasErrors:l.isError||c.isError}}function n(e,t){var n=(t=t||{}).className||"pmx-validation-warning",o=document.createElement("div");return o.className=n,o.style.cssText="display: none; margin-top: 4px; background: #f2dede; border: 1px solid #ebcccc; border-radius: 3px; padding: 6px 8px; font-size: 12px; color: #a94442; line-height: 1.4;",e&&e.appendChild(o),o}function o(e,t){e&&(e.textContent=t,e.style.display="block")}function r(e,t,n){if(!e)return;e.textContent="";const o=document.createElement("span");if(o.textContent=t,e.appendChild(o),n){e.appendChild(document.createElement("br")),e.appendChild(document.createElement("br"));const t=document.createElement("span");if(t.appendChild(document.createTextNode(n.prefix||"")),n.date){const e=document.createElement("strong");e.textContent=n.date,t.appendChild(e)}t.appendChild(document.createTextNode(n.suffix||"")),e.appendChild(t)}e.style.display="block"}function a(e){e&&(e.style.display="none")}function i(e){if(!e)return"";var t=e.split("-");return t.length>=2?["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][parseInt(t[1],10)-1]+" "+t[0]:e}function s(e){if(e.valid)return null;if("start"===e.error_type&&e.valid_periods&&e.valid_periods.length>0)return{prefix:"Capacity is available starting ",date:i(e.valid_periods[0]),suffix:". Consider setting custom availability dates."};
1if("end"===e.error_type&&e.invalid_periods&&e.invalid_periods.length>0){var t=i(function(e){if(!e)return"";var t=e.split("-"),n=parseInt(t[0],10),o=parseInt(t[1],10);return(o-=1)<1&&(o=12,n-=1),n+"-"+(o<10?"0"+o:""+o)+"-01"}(e.invalid_periods[0])),n=".";return e.has_later_valid_periods&&(n=". There are other periods where it fits as well."),{prefix:"This size fits until ",date:t,suffix:n}}if("size"===e.error_type&&e.valid_periods&&e.valid_periods.length>0){var o=e.valid_periods.slice(0,3).map(i);return 1===o.length?{prefix:"This size would fit starting ",date:o[0],suffix:". Consider setting custom availability dates."}:{prefix:"This size would fit during: ",date:o.join(", "),suffix:". Consider setting custom availability dates."}}return null}async function l(e){var t=e.endpoint,n=e.squareFeet,o=e.csrfToken;if(!t||n<=0)return{valid:!0,message:null};var r={square_feet:n,availability_method:e.availabilityMethod||"analysis"};e.tenantId&&(r.exclude_tenant_id=e.tenantId),e.availabilityStart&&(r.availability_start=e.availabilityStart),e.availabilityEnd&&(r.availability_end=e.availabilityEnd);try{var a=await fetch(t,{body:JSON.stringify(r),headers:{"Content-Type":"application/json","X-CSRFToken":o},method:"POST"});return await a.json()}catch(e){return console.error("Space validation error:",e),{valid:!0,message:null}}}var c={};function d(e,t){c[e]||(c[e]=[]),c[e].push(t)}function u(e,t){var n=[],o=t.marketLeaseTerm||0,r=12*o;return o<=0?{errors:n,warnings:[]}:(e.monthsVacantOverride&&e.monthsVacant>r&&n.push("Months vacant ("+e.monthsVacant+") exceeds market lease term ("+r+" months)"),e.renewalFreeRentOverride&&e.renewalFreeRent>r&&n.push("Renewal free rent ("+e.renewalFreeRent+") exceeds market lease term ("+r+" months)"),{errors:n,warnings:[]})}function p(e,n){var o=[],r=[];e.leaseStart&&e.leaseEnd&&e.leaseEnd<=e.leaseStart&&o.push("Lease end date must be after start date");var a=t({leaseStart:e.leaseStart,leaseEnd:e.leaseEnd,availabilityStart:e.availabilityStart,availabilityEnd:e.availabilityEnd,analysisStart:n.analysisStart,analysisEnd:n.analysisEnd,hasCustomAvailability:e.hasCustomAvailability});return a.startResult.isError?o.push(a.startResult.message):a.startResult.isWarning&&r.push(a.startResult.message),a.endResult.isError?o.push(a.endResult.message):a.endResult.isWarning&&r.push(a.endResult.message),{errors:o,warnings:r}}d("mlp",u),d("dates",p),window.PMXFormValidation={validateLeaseDates:e,validateLeaseAvailability:t,setupLeaseDateValidation:function(t){var r=t.startInput,i=t.endInput,s=t.warningContainer||(i?i.closest(".pmx-field")||i.parentElement:null),l=t.warningClass||"pmx-lease-date-warning",c=t.inputErrorClass||"pmx-input-error",d=t.onValidationChange||function(){};if(!r||!i)return{validate:function(){return!0},isBlocked:function(){return!1},destroy:function(){}};var u=n(s,{className:l}),p=!1;function m(){var t=e(r.value,i.value);return t.valid?(a(u),i.classList.remove(c),p=!1):(o(u,t.message),i.classList.add(c),p=!0),d(t.valid),t.valid}function f(){m()}r.addEventListener("change",f),i.addEventListener("change",f);var h=r.closest("form"),y=null;return h&&(y=function(e){if(p)return e.preventDefault(),e.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix the lease date error before saving."):window.alert("Please fix the lease date error before saving."),i.focus(),!1},h.addEventListener("submit",y,!0)),m(),{validate:m,isBlocked:function(){return p},destroy:function(){r.removeEventListener("change",f),i.removeEventListener("change",f),h&&y&&h.removeEventListener("submit",y,!0),u&&u.parentNode&&u.parentNode.removeChild(u)}}},validateSpace:l,setupSpaceValidation:function(e){var t=e.input,o=e.endpoint,i=e.tenantId,c=e.warningContainer||(t?t.closest(".pmx-field")||t.parentElement:null),d=e.getAvailabilityData||function(){return{method:"analysis",start:null,end:null}},u=e.getCSRFToken||function(){var e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:""},p=e.onValidationChange||function(){},m=e.debounceMs||500,f=e.showDateSuggestions||!1;if(!t||!o)return{validate:function(){return Promise.resolve(!0)},isBlocked:function(){return!1},destroy:function(){}};var h=n(c,{className:"pmx-space-warning"}),y=!1,g=null;async function v(){var e=parseInt(t.value.replace(/,/g,""),10)||0;if(e<=0)return a(h),t.classList.remove("pmx-input-warning"),y=!1,p(!0),!0;var n=d(),c=await l({endpoint:o,squareFeet:e,tenantId:i,availabilityMethod:n.method,availabilityStart:n.start,availabilityEnd:n.end,csrfToken:u()});if(c.valid)a(h),t.classList.remove("pmx-input-warning"),y=!1;else{var m=c.message||"Exceeds building capacity",g=null;f&&((g=s(c))||"custom"!==n.method||c.valid_periods&&0!==c.valid_periods.length||(g=s(await l({endpoint:o,squareFeet:e,tenantId:i,availabilityMethod:"analysis",availabilityStart:null,availabilityEnd:null,csrfToken:u()})))),r(h,m,g),t.classList.add("pmx-input-warning"),y=!0}return p(c.valid),c.valid}function w(){g&&clearTimeout(g),g=setTimeout(v,m)}t.addEventListener("input",w),t.addEventListener("blur",function(){g&&(clearTimeout(g),g=null),v()});var b=t.closest("form"),x=null;return b&&(x=function(e){if(y)return e.preventDefault(),e.stopPropagation(),window.PMXToast?window.PMXToast.showError("Please fix the size validation error before saving."):window.alert("Please fix the size validation error before saving."),t.focu
1s(),!1},b.addEventListener("submit",x,!0)),{validate:v,isBlocked:function(){return y},destroy:function(){t.removeEventListener("input",w),t.removeEventListener("blur",v),b&&x&&b.removeEventListener("submit",x,!0),g&&clearTimeout(g),h&&h.parentNode&&h.parentNode.removeChild(h)}}},generateDateSuggestion:s,registerPopoverValidator:d,clearPopoverValidators:function(e){e?delete c[e]:c={}},validatePopover:function(e,t,n){for(var o=c[e]||[],r=[],a=[],i=0;i<o.length;i++){var s=o[i](t,n||{});s.errors&&s.errors.length>0&&(r=r.concat(s.errors)),s.warnings&&s.warnings.length>0&&(a=a.concat(s.warnings))}return{valid:0===r.length,errors:r,warnings:a}},getPopoverValidators:function(e){return c[e]||[]},validators:{mlp:u,dates:p},createWarningElement:n,showWarning:o,showWarningWithSuggestion:r,hideWarning:a,formatDateForDisplay:i}}(),function(){"use strict";const e=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function t(e,t={}){const n="string"==typeof e?parseFloat(e.replace(/,/g,"")):e;return isNaN(n)?"0":n.toLocaleString(void 0,t)}function n(t){if(!t)return"—";const n=new Date(`${t}T00:00:00`);return isNaN(n.getTime())?"—":`${e[n.getMonth()]} ${n.getFullYear()}`}window.PMXFormatting={formatCurrency:function(e,n="$",o={}){const{minimumFractionDigits:r=0,maximumFractionDigits:a=2}=o;return`${n}${t(e,{maximumFractionDigits:a,minimumFractionDigits:r})}`},formatDateDisplay:n,formatDateRange:function(e,t){const o=n(e),r=n(t);return"—"===o&&"—"===r?"—":"—"===o?`— to ${r}`:"—"===r?`${o} —`:`${o} — ${r}`},formatDecimal:function(e){return t(e,{maximumFractionDigits:2,minimumFractionDigits:2})},formatNumber:t,formatWholeNumber:function(e){return t(e,{maximumFractionDigits:0,minimumFractionDigits:0})},parseFormattedNumber:function(e){if(!e)return 0;const t=e.replace(/,/g,"");return parseFloat(t)||0}}}(),function(){"use strict";let e=null,t=!1,n=!1,o=!1;const r=[".pmx-col-name",".pmx-col-suite",".pmx-col-size",".pmx-col-lc",".pmx-col-abatement",".pmx-col-amount",".pmx-col-type",".pmx-col-percent-fixed",".pmx-col-start-date",".pmx-col-end-date",".pmx-col-inflation"];function a(e){r.forEach(t=>{const n=e.querySelector(t);if(!n)return;const o=n.querySelector("input[type='text'], input[type='number'], input:not([type])"),r=n.querySelector("select"),a=o||r;a&&(a.classList.contains("pmx-inline-input")||a.classList.add("pmx-inline-input"),a.dataset.original||(a.dataset.original=a.value||""))})}function i(e,t){const n=e.querySelectorAll(t);n.length>0?n.forEach(e=>{const t=e.querySelector("input[name$='-id']")||e.querySelector("input[name='id']");t&&t.value&&!e.getAttribute("data-record-id")&&e.setAttribute("data-record-id",t.value),a(e)}):e.querySelectorAll(".formset").forEach(e=>{const t=e.querySelector("form")||e,n=t.querySelector("input[name$='-id']")||t.querySelector("input[name='id']");if(n&&n.value){e.setAttribute("data-record-id",n.value);const o=t.querySelector("input[name$='-name']")||t.querySelector("input[name='name']");if(o&&o.value&&e.setAttribute("data-record-name",o.value),!e.querySelector(".pmx-drag-handle")){const t=document.createElement("span");t.className="pmx-drag-handle",t.innerHTML='\n                        <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">\n                            <circle cx="5" cy="3" r="1.5"></circle>\n                            <circle cx="11" cy="3" r="1.5"></circle>\n                            <circle cx="5" cy="8" r="1.5"></circle>\n                            <circle cx="11" cy="8" r="1.5"></circle>\n                            <circle cx="5" cy="13" r="1.5"></circle>\n                            <circle cx="11" cy="13" r="1.5"></circle>\n                        </svg>\n                    ',e.insertBefore(t,e.firstChild)}if(!e.querySelector(".pmx-action-buttons")){const t=e.querySelector("a.pmx-btn, a.btn");if(t){const e=document.createElement("span");e.className="pmx-action-buttons",e.innerHTML='\n                            <button type="button" class="pmx-btn pmx-btn-default pmx-clone-btn" title="Clone">
1\n                                <span class="icon icon-copy" aria-hidden="true"></span>\n                            </button>\n                            <button type="button" class="pmx-btn pmx-btn-danger pmx-delete-btn" title="Delete">\n                                <span class="icon icon-trash" aria-hidden="true"></span>\n                            </button>\n                        ',t.parentNode.insertBefore(e,t.nextSibling)}}}})}function s(e,t){if(!e.classList.contains("pmx-inline-input"))return;const n=e.closest("td"),o=e.closest(t);if(!n||!o)return;const r=e.dataset.original||"";(e.value||"").replace(/,/g,"")!==r.replace(/,/g,"")?window.PMXDirtyTracking?window.PMXDirtyTracking.markCellDirty(n):n.classList.add("pmx-cell-dirty"):window.PMXDirtyTracking?window.PMXDirtyTracking.markCellClean(n):n.classList.remove("pmx-cell-dirty")}function l(e,t,n,o,r){const a=document.getElementById(n);if(!a)return;let i=0;e.querySelectorAll(`${t}, .formset`).forEach(e=>{const t=e.querySelector("input[name$='-DELETE']");t&&t.checked||i++}),a.textContent=i;const s=a.nextElementSibling;s&&s.classList.contains("pmx-stat-label")&&(s.textContent=1===i?o:r)}function c(e,t){let n;return function(...o){clearTimeout(n),n=setTimeout(()=>e.apply(this,o),t)}}function d(e){if(!window.jQuery||!jQuery.fn.autoNumeric)return null;if("number"===e.type)return null;const t=jQuery(e);if(t.data("autoNumeric"))return null;t.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"});const n=t.val();return n&&t.autoNumeric("set",n),t}function u(e,t){if(!window.jQuery||!jQuery.fn.autoNumeric)return;e.querySelectorAll(t).forEach(e=>{if("number"===e.type)return;const t=jQuery(e);if(t.data("autoNumeric")){const e=t.val();e&&t.autoNumeric("set",e)}})}function p(e){e.classList.add("dirty");const t=e.closest("form")||e;window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(t)}function m(e,n){if(t)return;t=!0;let o=null,r=null,a=null;function i(){o&&r&&(o.classList.remove("is-open"),r.appendChild(o),o.pmxOriginalParent=null,o=null,r=null,a=null)}document.addEventListener("click",e=>{!o||o.contains(e.target)||e.target.closest(".pmx-actions-toggle")||o.querySelector("[data-pmx-confirm-active]")||i()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&o&&i()}),document.addEventListener("click",e=>{const t=e.target.closest(".pmx-actions-toggle");if(!t)return;if(e.preventDefault(),e.stopPropagation(),o&&a===t)return void i();const s=t.closest(".pmx-actions-dropdown").querySelector(".pmx-actions-menu");if(!s)return;o&&i(),r=s.parentNode,a=t;const l=t.closest(n);s.pmxRow=l,s.pmxOriginalParent=r,document.body.appendChild(s);const c=t.getBoundingClientRect();s.style.position="fixed",s.style.left=`${c.left}px`,s.style.top=`${c.bottom+4}px`,s.classList.add("is-open"),o=s}),document.addEventListener("click",e=>{const t=e.target.closest(".pmx-action-item");t&&!t.classList.contains("pmx-move-btn")&&!e.target.closest(".pmx-delete-btn")&&o&&i()})}function f(t,o,r,a,i,s={}){const l=t.querySelector(o);if(!l||!a)return;if(n)return;n=!0;const{totalCount:c=null}=s;let d=null;function u(){d&&(d.remove(),d=null)}function p(t,n,o,r,a,i,s,l){const c=s||o.length,d=o.indexOf(t),p=l||d+1;if(isNaN(n)||n<1||n>c)return void(window.PMXToast&&window.PMXToast.showError(`Position must be between 1 and ${c}`));if(n===p)return void u();if(s&&window.PMXServerPagination){const e=t.getAttribute("data-record-id");if(!e)return;return u(),void fetch(r,{body:JSON.stringify({move_record_id:parseInt(e,10),new_position:n}),headers:{"Content-Type":"application/json","X-CSRFToken":v()},method:"POST"}).then(e=>{if(!e.ok)throw new Error("Failed to move record");return e.json()}).then(()=>{const e=window.PMXServerPagination.getPageSize(),t=Math.ceil(n/e);window.location.href=`${window.location.pathname}?page=${t}&t=${Date.now()}`}).catch(e=>{console.error("Error moving record:",e),window.PMXToast&&window.PMXToast.showError("Failed to move record")})}const m=n-1,f=t.parentNode;if(f.removeChild(t),m>=o.length-1)f.appendChild(t);else{const e=m,n=f.querySelectorAll(i)[e];n?f.insertBefore(t,n):f.appendChild(t)}if(t.classList.add("pmx-reordered"),setTimeout(()=>t.classList.remove("pmx-reordered"),2e3),u(),e){const t=e.getState().pageSize,o=Math.ceil(n/t);e.refresh(),e.goToPage(o)}!function(e,t,n,o){const r=[];
1e.querySelectorAll(o).forEach(e=>{const t=e.getAttribute("data-record-id");t&&r.push(parseInt(t,10))});const a={};a[n]=r,fetch(t,{body:JSON.stringify(a),headers:{"Content-Type":"application/json","X-CSRFToken":v()},method:"POST"}).then(e=>{if(!e.ok)throw new Error("Failed to save order");return e.json()}).then(()=>{window.PMXToast&&window.PMXToast.showSuccess("Order updated")}).catch(e=>{console.error("Error saving order:",e),window.PMXToast&&window.PMXToast.showError("Failed to save order")})}(f,r,a,i)}document.addEventListener("click",e=>{!d||d.contains(e.target)||e.target.closest(".pmx-move-btn")||u()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&d&&u()}),document.addEventListener("click",e=>{const t=e.target.closest(".pmx-move-btn");if(!t)return;e.preventDefault(),e.stopPropagation();const n=t.closest(".pmx-actions-menu"),o=n&&n.pmxRow?n.pmxRow:t.closest(r);o&&(d&&u(),function(e,t,n,o,r,a,i){const s=function(e,t){const n=e.querySelectorAll(t);return Array.from(n).filter(e=>{const t=e.querySelector("input[name$='-DELETE']");return!t||!t.checked})}(n,a),l=s.indexOf(t),c=i||s.length,u=window.PMXServerPagination?window.PMXServerPagination.getCurrentPage():1,m=window.PMXServerPagination?window.PMXServerPagination.getPageSize():s.length,f=i?(u-1)*m+l+1:l+1,h=document.createElement("div");h.className="pmx-move-popover",h.innerHTML=`\n                <div class="pmx-move-popover-header">Move to position</div>\n                <div class="pmx-move-popover-input">\n                    <input type="number" min="1" max="${c}" value="${f}"\n                           placeholder="${f}" class="pmx-position-input">\n                    <button type="button" class="pmx-btn pmx-btn-primary pmx-btn-sm pmx-position-go">Go</button>\n                </div>\n                <div class="pmx-move-popover-info">Current: ${f} of ${c}</div>\n            `;const y=e.getBoundingClientRect();h.style.position="fixed",h.style.left=`${y.right+8}px`,h.style.top=`${y.top}px`,document.body.appendChild(h),d=h;const g=h.querySelector(".pmx-position-input");g.focus(),g.select(),h.querySelector(".pmx-position-go").addEventListener("click",()=>{const e=parseInt(g.value,10);p(t,e,s,o,r,a,i,f)}),g.addEventListener("keydown",e=>{if("Enter"===e.key){e.preventDefault();const n=parseInt(g.value,10);p(t,n,s,o,r,a,i,f)}})}(t,o,l,a,i,r,c))})}function h(e,t,n,r){if(!n)return;if(o)return;o=!0;let a=null,i=null;function s(){a&&(a.remove(),a=null,i=null)}function l(e,t,n,o,r,a){o.disabled=!0,r.style.display="";const i=a.replace("{id}",e);fetch(i,{body:JSON.stringify({notes:t}),credentials:"same-origin",headers:{"Content-Type":"application/json","X-CSRFToken":v(),"X-Requested-With":"XMLHttpRequest"},method:"PATCH"}).then(e=>{if(!e.ok)throw new Error("Failed to save notes");return e.json()}).then(()=>{n.setAttribute("data-notes",t),t.trim()?(n.classList.add("has-notes"),n.title="View/Edit Notes"):(n.classList.remove("has-notes"),n.title="Add Notes"),window.PMXToast&&window.PMXToast.showSuccess("Notes saved"),s()}).catch(e=>{console.error("Error saving notes:",e),o.disabled=!1,r.style.display="none",window.PMXToast&&window.PMXToast.showError("Failed to save notes")})}document.addEventListener("click",e=>{!a||a.contains(e.target)||e.target.closest(".pmx-notes-btn")||s()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&a&&s()}),document.addEventListener("click",e=>{const o=e.target.closest(".pmx-notes-btn");if(!o)return;e.preventDefault(),e.stopPropagation();const c=o.closest(t);c&&(a&&i===o?s():(a&&s(),function(e,t,n,o){const r=t.getAttribute("data-record-id"),c=t.getAttribute("data-record-name")||o,d=e.getAttribute("data-notes")||"",u=document.createElement("div");u.className="pmx-notes-popover",u.innerHTML=`\n                <div class="pmx-notes-popover-header">\n                    <span class="pmx-notes-title">Notes for ${w(c)}</span>\n                    <button type="button" class="pmx-notes-close" title="Close">&times;</button>\n                </div>\n                <textarea class="pmx-notes-textarea" placeholder="Add notes...">${w(d)}</textarea>\n                <div class="pmx-notes-footer">
1\n                    <span class="pmx-notes-saving" style="display: none;">Saving...</span>\n                    <button type="button" class="pmx-btn pmx-btn-default pmx-notes-cancel">Cancel</button>\n                    <button type="button" class="pmx-btn pmx-btn-primary pmx-notes-save">Save</button>\n                </div>\n            `;const p=e.getBoundingClientRect();u.style.position="fixed",u.style.left=`${p.left-280}px`,u.style.top=`${p.bottom+4}px`,document.body.appendChild(u);const m=u.getBoundingClientRect();m.right>window.innerWidth-10&&(u.style.left=`${window.innerWidth-m.width-10}px`);m.left<10&&(u.style.left="10px");m.bottom>window.innerHeight-10&&(u.style.top=`${p.top-m.height-4}px`);a=u,i=e;const f=u.querySelector(".pmx-notes-textarea");f.focus();const h=u.querySelector(".pmx-notes-close"),y=u.querySelector(".pmx-notes-cancel"),g=u.querySelector(".pmx-notes-save"),v=u.querySelector(".pmx-notes-saving");h.addEventListener("click",s),y.addEventListener("click",s),g.addEventListener("click",()=>{const t=f.value;l(r,t,e,g,v,n)}),f.addEventListener("keydown",t=>{if("Enter"===t.key&&(t.ctrlKey||t.metaKey)){t.preventDefault();const o=f.value;l(r,o,e,g,v,n)}})}(o,c,n,r)))})}function y(e){const t=e.querySelector(".pmx-save-btn");function n(){const n=e.classList.contains("dirty"),o=e.querySelector(".has-lease-date-error");t.disabled=!n||o,n&&!o&&t.classList.remove("pmx-saved"),t.title=o?"Fix validation errors before saving":n?"":"No changes to save"}t&&(e.dataset.pmxSaveButtonInitialized||(e.dataset.pmxSaveButtonInitialized="true",new MutationObserver(t=>{for(const o of t){if("class"!==o.attributeName)continue;const t=o.target;if(t===e||t.classList.contains("pmx-formset-row")){n();break}}}).observe(e,{attributes:!0,attributeFilter:["class"],subtree:!0}),n()))}function g(e){const t=e.options[e.selectedIndex];e.title=t?t.text:""}function v(){const e=document.cookie.split("; ").find(e=>e.startsWith("csrftoken="));if(e)return e.split("=")[1];const t=document.querySelector("input[name='csrfmiddlewaretoken']");return t?t.value:""}function w(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}window.PMXFormsetTable={debounce:c,enhanceFormsetRows:i,enhanceInlineInputs:a,escapeHtml:w,getCSRFToken:v,init:function(t={}){const{containerId:n="formset-parent",tableBodySelector:o=null,rowSelector:r=".pmx-formset-row",countElementId:a=null,recordName:v="record",recordNamePlural:w="records",paginationContainerId:b=null,pageSize:x=25,amountFieldSelector:S=null,tooltipSelectSelector:P=null,sortableColumns:C={},editableFields:T=[],sortEndpoint:D=null,cloneEndpoint:E=null,deleteEndpoint:M=null,updateEndpoint:k=null,sortBodyKey:_="record_ids",successMessage:q="Saved successfully",onSuccess:$=null,onDiscard:L=null}=t,X=document.getElementById(n);if(X)return X.pmxConfig=t,i(X,r),function(e,t){e.addEventListener("input",e=>{s(e.target,t)}),e.addEventListener("change",e=>{s(e.target,t)})}(X,r),window.PMXSorting&&D&&o&&function(e,t,n,o){if("undefined"==typeof Sortable)return void console.warn("SortableJS not loaded - sorting disabled");const r=e.querySelector(t)||e;window.PMXSorting.initSortable(r,{apiEndpoint:n,bodyKey:o,handle:".pmx-drag-handle",onSortSuccess(){},recordIdAttr:"data-record-id"})}(X,o,D,_),window.PMXActions&&window.PMXActions.initActions(X,{cloneEndpoint:E,deleteEndpoint:M,onCloneSuccess:()=>window.location.reload(),onDeleteSuccess:()=>window.location.reload()}),window.PMXInlineEdit&&k&&T.length>0&&function(e,t,n){e.querySelectorAll(".pmx-input, .form-control").forEach(e=>{const t=e.name&&e.name.split("-").pop()||e.name;if(t){const n=e.closest(".form-group")||e.parentNode;n.setAttribute("data-field",t)}}),window.PMXInlineEdit.initContainerDelegated(e,{apiEndpoint:t,editableFields:n})}(X,k,T),window.PMXForms&&(window.PMXForms.initAjaxForm(X,{onSuccess(){X.querySelectorAll(`${r}, .formset`).forEach(e=>e.classList.remove("pmx-row-dirty")),X.querySelectorAll(".pmx-cell-dirty").forEach(e=>e.classList.remove("pmx-cell-dirty")),S&&u(X,S),function(e){const t=e.querySelector(".pmx-save-btn");t&&(t.classList.add("pmx-saved"),t.disabled=!0,setTimeout(()=>{t.classList.remove("pmx-saved")},2e3))}(X),$&&$(X)},successMessage:q}),window.PMXForms.initDiscardButton(X,{onDiscard(){S&&u(X,S),L&&L(X)}})),y(X),a&&function(e,t,n,o,r){l(e,t,n,o,r),e.addEventListener("change",()=>{l(e,t,n,o,r)}),e.addEventListener("input",c(()=>{l(e,t,n,o,r)},300))}(X,r,a,v,w),S&&function(e,t){if(!window.jQuery||!jQuery.fn.autoNumeric)return;
1e.querySelectorAll(".pmx-formset-row:not(.pmx-pagination-hidden)").forEach(e=>{e.querySelectorAll(t).forEach(d)}),e.addEventListener("focusin",e=>{e.target.matches(t)&&d(e.target)},{passive:!0});const n=e.closest("form")||e.querySelector("form");n&&jQuery(n).on("submit",()=>{const n=e.querySelectorAll(t);n.forEach(e=>{const t=jQuery(e);t.data("autoNumeric")&&t.val(t.autoNumeric("get"))})})}(X,S),function(e){const t=e.querySelector(".pmx-table-scroll-container"),n=e.querySelector(".pmx-formset-table");function o(){t.scrollLeft>0?n.classList.add("is-scrolled"):n.classList.remove("is-scrolled")}t&&n&&(t.addEventListener("scroll",o),o())}(X),o&&b&&function(t,n,o,r,a,i){if(!window.PMXTablePagination)return;const s=t.querySelector(n);s&&0!==s.querySelectorAll(o).length&&(e=window.PMXTablePagination.init({controlsContainerId:r,onPageChange:e=>{e.forEach(e=>{i&&e.querySelectorAll(i).forEach(d),window.validateTableRowLeaseDates&&window.validateTableRowLeaseDates(e),window.PMXRentPopover&&e.querySelectorAll(".pmx-rent-display").forEach(window.PMXRentPopover.updateRentDisplay),window.PMXRecoveryPopover&&e.querySelectorAll(".pmx-recovery-display").forEach(window.PMXRecoveryPopover.updateRecoveryDisplay),window.PMXTIPopover&&window.PMXTIPopover.updateTITermsDisplay&&e.querySelectorAll(".pmx-ti-terms-display").forEach(window.PMXTIPopover.updateTITermsDisplay),window.PMXMLPPopover&&window.PMXMLPPopover.updateMLPDisplay&&e.querySelectorAll(".pmx-mlp-display").forEach(window.PMXMLPPopover.updateMLPDisplay),window.PMXDatesPopover&&window.PMXDatesPopover.updateAvailabilityDisplay&&e.querySelectorAll(".pmx-availability-display").forEach(window.PMXDatesPopover.updateAvailabilityDisplay)})},pageSize:a,rowSelector:o,tableBodySelector:n}))}(X,o,r,b,x,S),o&&Object.keys(C).length>0&&function(t,n,o,r,a){const i=t.querySelector(".pmx-formset-table"),s=t.querySelector(n);if(!i||!s)return;const l=[];s.querySelectorAll(".pmx-formset-row").forEach(e=>{const t=e.getAttribute("data-record-id");t&&l.push(t)});let c={column:null,direction:null};Object.keys(o).forEach(n=>{const r=i.querySelector(`th.pmx-col-${n}`);if(!r)return;r.classList.add("pmx-sortable");const a=document.createElement("span");a.className="pmx-sort-indicator",r.appendChild(a),r.addEventListener("click",()=>{!function(n){const r=o[n];let a=null;if(a=c.column===n?"asc"===c.direction?"desc":"desc"===c.direction?null:"asc":"asc",c.column=a?n:null,c.direction=a,i.querySelectorAll("th.pmx-sortable").forEach(e=>{e.classList.remove("pmx-sorted-asc","pmx-sorted-desc")}),a){const e=i.querySelector(`th.pmx-col-${n}`);e&&e.classList.add(`pmx-sorted-${a}`)}const d=Array.from(s.querySelectorAll(".pmx-formset-row"));null===a?d.sort((e,t)=>{const n=e.getAttribute("data-record-id"),o=t.getAttribute("data-record-id");return l.indexOf(n)-l.indexOf(o)}):d.sort((e,t)=>{const n=r.getValue(e),o=r.getValue(t);let i=0;return i="number"===r.type?n-o:n.localeCompare(o),"asc"===a?i:-i});const u=window.scrollY;d.forEach(e=>{s.appendChild(e)}),null!==a&&p(t),e&&(e.refresh(),e.goToPage(1)),window.scrollTo(0,u)}(n)})});const d=t.querySelector(".pmx-discard-btn");d&&d.addEventListener("click",()=>{!function(){c.column=null,c.direction=null,i.querySelectorAll("th.pmx-sortable").forEach(e=>{e.classList.remove("pmx-sorted-asc","pmx-sorted-desc")});const t=Array.from(s.querySelectorAll(".pmx-formset-row"));t.sort((e,t)=>{const n=e.getAttribute("data-record-id"),o=t.getAttribute("data-record-id");return l.indexOf(n)-l.indexOf(o)}),t.forEach(e=>{s.appendChild(e)}),e&&e.refresh()}()})}(X,o,C),m(0,r),o&&D&&f(X,o,r,D,_),k&&h(0,r,k,v),P&&function(e,t){e.querySelectorAll(t).forEach(e=>{g(e),e.addEventListener("change",()=>{g(e)})})}(X,P),function(e,t){const n=new URLSearchParams(window.location.search);if("new"!==n.get("focus"))return;n.delete("focus");const o=n.toString()?`${window.location.pathname}?${n.toString()}`:window.location.pathname;window.history.replaceState({},"",o);const r=e.querySelector(t);if(!r)return;r.classList.add("pmx-row-highlight"),setTimeout(()=>{r.classList.remove("pmx-row-highlight")},2e3);const a=r.querySelector("input[name$='-name']");a&&setTimeout(()=>{a.focus(),a.select()},100)}(X,r),{container:X,refresh(){e&&e.refresh()}};console.warn(`Formset container #${n} not found`)},initActionsDropdown:m,initMoveToPosition:f,initNotesPopover:h,initSaveButton:y,markFormDirty:p}}(),function(){"use strict";const e="pmx-row-dirty",t="pmx-saving";function n(e,t={}){const{editableFields:n=[],apiEndpoint:s=null,recordIdAttr:l="data-record-id",onSaveSuccess:c=null,onSaveError:d=null}=t;if(!e.getAttribute(l))return void console.warn("Row missing record ID attribute");const u={};
1n.forEach(t=>{const a="string"==typeof t?t:t.name,i=e.querySelector(`[data-field="${a}"]`);if(!i)return;const s=i.querySelector("input, select, textarea");s&&(u[a]=o(s),s.addEventListener("input",()=>{r(e,u,n)}),s.addEventListener("change",()=>{r(e,u,n)}))});const p=e.querySelector(".pmx-inline-save");p&&p.addEventListener("click",()=>{a(e,n,s,l,u,c,d)});const m=e.querySelector(".pmx-inline-cancel");m&&m.addEventListener("click",()=>{i(e,n,u)})}function o(e){return"checkbox"===e.type?e.checked:"number"===e.type?parseFloat(e.value)||0:e.value}function r(t,n,r){let a=!1;r.forEach(e=>{const r="string"==typeof e?e:e.name,i=t.querySelector(`[data-field="${r}"]`);if(!i)return;const s=i.querySelector("input, select, textarea");if(s){o(s)!==n[r]&&(a=!0)}}),a?window.PMXDirtyTracking?window.PMXDirtyTracking.markRowDirty(t):t.classList.add(e):window.PMXDirtyTracking?window.PMXDirtyTracking.markRowClean(t):t.classList.remove(e);const i=t.querySelector(".pmx-inline-save");i&&(i.disabled=!a)}async function a(n,r,a,i,s,l,c){if(!a)return void console.error("No API endpoint configured for inline save");const d=n.getAttribute(i);n.classList.add(t);const u={id:parseInt(d,10)};r.forEach(e=>{const t="string"==typeof e?e:e.name,r=n.querySelector(`[data-field="${t}"]`);if(!r)return;const a=r.querySelector("input, select, textarea");a&&(u[t]=o(a))});try{const i=window.PMXForms&&window.PMXForms.getCSRFToken(),p=await fetch(a.replace("{id}",d),{method:"PATCH",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest","X-CSRFToken":i},credentials:"same-origin",body:JSON.stringify(u)});if(!p.ok){throw{response:p,data:await p.json().catch(()=>null)}}const m=await p.json();r.forEach(e=>{const t="string"==typeof e?e:e.name,r=n.querySelector(`[data-field="${t}"]`);if(!r)return;const a=r.querySelector("input, select, textarea");a&&(s[t]=o(a))}),window.PMXDirtyTracking?window.PMXDirtyTracking.markRowClean(n):n.classList.remove(e),window.PMXToast&&window.PMXToast.success("Saved"),l&&l(m,n)}catch(e){console.error("Failed to save row:",e),e.data&&window.PMXErrors&&Object.keys(e.data).forEach(t=>{const o=n.querySelector(`[data-field="${t}"]`);if(o){const n=o.querySelector("input, select, textarea");n&&window.PMXErrors.showFieldError(n,e.data[t])}}),window.PMXToast&&window.PMXToast.error("Failed to save"),c&&c(e,n)}finally{n.classList.remove(t)}}function i(t,n,o){var r,a;n.forEach(e=>{const n="string"==typeof e?e:e.name,r=t.querySelector(`[data-field="${n}"]`);if(!r)return;const i=r.querySelector("input, select, textarea");i&&void 0!==o[n]&&(i=i,a=o[n],"checkbox"===i.type?i.checked=Boolean(a):i.value=a)}),window.PMXDirtyTracking?window.PMXDirtyTracking.markRowClean(t):t.classList.remove(e),window.PMXErrors&&n.forEach(e=>{const n="string"==typeof e?e:e.name,o=t.querySelector(`[data-field="${n}"]`);if(o){const e=o.querySelector("input, select, textarea");e&&window.PMXErrors.clearFieldError(e)}})}window.PMXInlineEdit={createInlineControls:function(){const e=document.createElement("div");return e.className="pmx-inline-controls",e.innerHTML='\n            <button type="button" class="pmx-btn pmx-btn-xs pmx-btn-success pmx-inline-save" disabled title="Save changes">\n                <span class="icon icon-checkmark" aria-hidden="true"></span>\n            </button>\n            <button type="button" class="pmx-btn pmx-btn-xs pmx-btn-default pmx-inline-cancel" title="Cancel changes">\n                <span class="icon icon-cross" aria-hidden="true"></span>\n            </button>\n        ',e},initContainer:function(e,t={}){e.querySelectorAll("[data-record-id]").forEach(e=>n(e,t))},initContainerDelegated:function(e,t={}){const{editableFields:n=[],apiEndpoint:s=null,recordIdAttr:l="data-record-id",onSaveSuccess:c=null,onSaveError:d=null}=t,u=new Set(n.map(e=>"string"==typeof e?e:e.name)),p=new Map;e.querySelectorAll(`[${l}]`).forEach(e=>{const t=e.getAttribute(l),r={};n.forEach(t=>{const n="string"==typeof t?t:t.name,a=e.querySelector(`[data-field="${n}"]`);if(a){const e=a.querySelector("input, select, textarea");e&&(r[n]=o(e))}}),p.set(t,r)});const m=e=>{const t=e.target;if(!t.matches("input, select, textarea"))return;const o=t.closest("[data-field]");if(!o)return;
1const a=o.dataset.field;if(!u.has(a))return;const i=t.closest(`[${l}]`);if(!i)return;const s=i.getAttribute(l),c=p.get(s);c&&r(i,c,n)};return e.addEventListener("input",m,{passive:!0}),e.addEventListener("change",m,{passive:!0}),e.addEventListener("click",e=>{const t=e.target.closest(".pmx-inline-save");if(t){const e=t.closest(`[${l}]`);if(e){const t=e.getAttribute(l),o=p.get(t);a(e,n,s,l,o,c,d)}return}const o=e.target.closest(".pmx-inline-cancel");if(o){const e=o.closest(`[${l}]`);if(e){const t=e.getAttribute(l),o=p.get(t);i(e,n,o)}}}),{originalValuesMap:p}},initInlineEdit:n,revertRow:i}}(),function(){"use strict";const e="has-error",t="pmx-field-error";function n(e){let t=e.closest(".form-group");return t||((t=e.closest("td"))?t:(t=e.closest(".pmx-input-group, .input-group"))&&t.parentElement?t.parentElement:null)}function o(o,a){const i=n(o);if(!i)return void console.warn("Could not find form-group for field:",o);i.classList.add(e);const s=i.querySelector(`.${t}`);s&&s.remove();const l=document.createElement("span");l.className=`pmx-help-block ${t}`,l.textContent=a;const c=i.querySelector(".pmx-input-group, .input-group")||o;c.parentNode.insertBefore(l,c.nextSibling),o.addEventListener("focus",function e(){r(o),o.removeEventListener("focus",e)},{once:!0})}function r(o){const r=n(o);if(!r)return;r.classList.remove(e);const a=r.querySelector(`.${t}`);a&&a.remove()}function a(n){n.querySelectorAll(`.${e}`).forEach(t=>{t.classList.remove(e)}),n.querySelectorAll(`.${t}`).forEach(e=>e.remove())}function i(e,t){const n=e.querySelector(".pmx-non-field-errors");n&&n.remove();const o=document.createElement("div");o.className="pmx-alert pmx-alert-danger pmx-non-field-errors",o.setAttribute("role","alert");const r=document.createElement("ul");r.className="pmx-list-unstyled",t.forEach(e=>{const t=document.createElement("li");t.textContent=e,r.appendChild(t)}),o.appendChild(r),e.insertBefore(o,e.firstChild)}window.PMXErrors={showFieldError:o,clearFieldError:r,clearFormErrors:a,displayErrors:function(e,t){if(a(e),Object.keys(t).forEach(n=>{const r=function(e,t){let n=e.querySelector(`[name="${t}"]`);return n||(n=e.querySelector(`[name$="-${t}"]`)),n||(n=e.querySelector(`#id_${t}`)),n}(e,n);if(!r)return void console.warn(`Field not found for error: ${n}`);let a=t[n];Array.isArray(a)&&(a=a.join(" ")),o(r,a)}),t.__all__||t.non_field_errors){const n=t.__all__||t.non_field_errors,o=Array.isArray(n)?n:[n];i(e,o)}},showNonFieldErrors:i}}(),function(){"use strict";const e="is-visible",t=new WeakMap,n=new WeakMap,o=[".pmx-rent-popover",".pmx-recovery-popover",".pmx-ti-popover",".pmx-dates-popover"];function r(n,r=[]){n&&(o.forEach(t=>{r.includes(t)||n.querySelectorAll(`${t}.${e}`).forEach(t=>{t.classList.remove(e)})}),t.delete(n))}function a(t){t&&t.classList.remove(e)}function i(n,o,a){o&&(r(n,[a]),o.classList.add(e),t.set(n,o))}function s(n,o,r){if(!o)return!1;return o.classList.contains(e)?(a(o),t.delete(n),!1):(i(n,o,r),!0)}function l(t){return t&&t.classList.contains(e)}function c(t,o,r={}){if(!t||!o)return;const{preferredPosition:a="bottom",offsetY:i=4,alignRight:s=!1}=r;n.has(t)||n.set(t,{originalParent:t.parentNode,originalNextSibling:t.nextSibling});const l=o.getBoundingClientRect();t.parentNode!==document.body&&document.body.appendChild(t),t.style.cssText="",t.style.position="fixed",t.style.zIndex="10000",t.style.margin="0",t.style.transform="none";const c=window.innerWidth,d=c-20;t.style.background="#fff",t.style.border="1px solid #d1dce5",t.style.borderRadius="4px",t.style.boxShadow="0 4px 12px rgba(0, 0, 0, 0.15)",t.style.padding="12px",t.style.minWidth="280px",t.style.maxWidth=`${d}px`,t.classList.add(e);const u=t.getBoundingClientRect(),p=Math.min(u.width||250,d),m=(u.he
1ight,(l.left+l.right)/2);if(s||m>c/2){const e=c-l.right;t.style.left="auto",t.style.right=`${Math.max(e,10)}px`}else{let e=l.left;e+p>c-10&&(e=c-p-10),e<10&&(e=10),t.style.right="auto",t.style.left=`${e}px`}const f=window.innerHeight,h=(l.top+l.bottom)/2,y=f-l.bottom,g=l.top;let v=!1;"top"===a?v=!0:"bottom"===a&&h<f/2?v=!1:g>y&&(v=!0);const w=(v?g:y)-20;if(t.style.maxHeight=`${w}px`,t.style.overflowY="auto",v){const e=f-l.top+i;t.style.top="auto",t.style.bottom=`${Math.max(e,10)}px`}else t.style.bottom="auto",t.style.top=`${l.bottom+i}px`}function d(t){if(!t)return;if(window.PMXPopoverUtils&&(t.pmxTriggerCell&&window.PMXPopoverUtils.clearCellEditing(t.pmxTriggerCell),t.pmxTriggerRow)){t.pmxTriggerRow.querySelectorAll(".pmx-col-lease-start, .pmx-col-lease-end, .pmx-col-availability").forEach(e=>{window.PMXPopoverUtils.clearCellEditing(e)})}t.classList.remove(e);const o=n.get(t);o&&o.originalParent&&(t.style.cssText="",o.originalNextSibling?o.originalParent.insertBefore(t,o.originalNextSibling):o.originalParent.appendChild(t),n.delete(t))}function u(t,n){const{cellSelector:o,popoverSelector:r,ignoreSelectors:a=[]}=n;document.addEventListener("click",n=>{if(!n.target.closest(o)){for(const e of a)if(n.target.closest(e))return;t.querySelectorAll(`${r}.${e}`).forEach(t=>{t.classList.remove(e)})}})}function p(t,n){document.addEventListener("keydown",o=>{"Escape"===o.key&&t.querySelectorAll(`${n}.${e}`).forEach(t=>{t.classList.remove(e)})})}function m(e,t,n){e.addEventListener("keydown",e=>{"Enter"===e.key&&e.target.matches(t)&&(e.preventDefault(),n&&n(e.target))})}function f(t,n,o,r,a){t.addEventListener("click",t=>{const i=t.target.closest(n);if(!i)return;const s=i.closest(o),l=i.closest(r);s&&l&&(a&&a(l),s.classList.remove(e))})}function h(){document.addEventListener("click",t=>{const n=t.target.closest(".pmx-popover-close");if(!n)return;const o=n.parentElement;o&&(o.parentNode===document.body?d(o):o.classList.remove(e))})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",h):h();const y=[];let g=null,v=null,w=!1;function b(e,t){if(!e||!t)return!0;const n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!0;for(const o of n){const n=e[o],r=t[o];if((null===n||void 0===n?"":String(n))!==(null===r||void 0===r?"":String(r)))return!0}return!1}function x(e,t,n){if(!t||!n)return;if((e&&e.getDirtyCells?e.getDirtyCells(n,t):[t]).forEach(e=>{e&&e.classList.remove("pmx-cell-dirty")}),n.querySelector(".pmx-cell-dirty"))return;n.classList.remove("pmx-row-dirty");const o=n.closest("tbody");if(!(o&&o.querySelector(".pmx-row-dirty"))){const e=document.getElementById("formset-parent");e&&e.classList.remove("dirty");const t=n.closest("form");t&&window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(t),window.PMXServerPagination&&window.PMXServerPagination.updateStateIndicator&&window.PMXServerPagination.updateStateIndicator(!1)}}function S(e,t){const n=e.querySelector(".pmx-popover-footer");n&&(n.style.display=t?"block":"none")}function P(e,t,n,o,r){if(!e||!t||!n)return;t.pmxTriggerCell=n,t.pmxTriggerRow=o,g=t,v=e;const a=e.getDirtyCells?e.getDirtyCells(o,n):[n];a.some(e=>e&&e.classList.contains("pmx-cell-dirty"))||(t.pmxOriginalValues=e.getOriginalValues(n),window.PMXDirtyTracking&&window.PMXDirtyTracking.storeOriginalValues&&window.PMXDirtyTracking.storeOriginalValues(t,t.pmxOriginalValues)),window.PMXPopoverUtils&&a.forEach(e=>{e&&window.PMXPopoverUtils.markCellEditing(e)}),e.onOpen&&e.onOpen(t,n,o),c(t,r||n.querySelector(e.displaySelector||"[class*='-display']")||n);const i=e.getOpenValues?e.getOpenValues(n,o):e.getOriginalValues(n);e.setInputValues&&e.setInputValues(t,i),S(t,!1);const s=e.getFocusableElements?e.getFocusableElements(t):t.querySelectorAll("input:not([type='hidden']):not(:disabled), select:not(:disabled)");s.length>0&&s[0].focus()}function C(e){if(!e)return;const t=e.pmxTriggerCell,n=e.pmxTriggerRow;if(window.PMXPopoverUtils){(v&&v.getDirtyCells&&n?v.getDirtyCells(n,t):t?[t]:[]).forEach(e=>{e&&window.PMXPopoverUtils.clearCellEditing(e)}),window.PMXPopoverUtils.hideDiscardFooter(e)}d(e),window.PMXPopoverUtils?window.PMXPopoverUtils.setCloseTimestamp():window.pmxLastPopoverCloseTime=Date.now(),g===e&&(g=null,v=null)}function T(e,t){if(!e||!t)return!0;const n=t.pmxTriggerCell,o=t.pmxTriggerRow||(n?n.closest(".pmx-formset-row"):null);if(!n)return C(t),!0;if(n.classList.contains("has-field-error"))return!1;const r=e.getCurrentValues(t),a=t.pmxOriginalValues;if(e.onBeforeCommit){if(!1===e.onBeforeCommit(t,n,o))return!1}if(e.validate){const a=t.pmxOriginalValues,i=e.validate(r,a,{cell:n,row:o,popover:t});if(i&&!i.valid)return!1}return e.syncToFields&&e.syncToFields(o,r),e.updateDisplay&&e.updateDisplay(n,r),e.applyDirtyState?e.applyDirtyState({currentValues:r,originalValues:a,row:o,cell:n,popover:t}):b(r,a)?function(e,t,n){if(!t||!n)return;
1(e&&e.getDirtyCells?e.getDirtyCells(n,t):[t]).forEach(e=>{e&&e.classList.add("pmx-cell-dirty")}),n.classList.add("pmx-row-dirty");const o=document.getElementById("formset-parent");o&&o.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(n)}(e,n,o):x(e,n,o),e.onClose&&e.onClose(t),C(t),!0}function D(e,t){if(!e||!t)return;const n=t.pmxTriggerCell,o=t.pmxTriggerRow||(n?n.closest(".pmx-formset-row"):null);let r=t.pmxOriginalValues;if(!r&&window.PMXDirtyTracking&&window.PMXDirtyTracking.getOriginalValues&&((r=window.PMXDirtyTracking.getOriginalValues(t))&&0===Object.keys(r).length&&(r=null),r&&void 0===r.isSimple&&(r.isSimple=!r.structure),r&&r.structure&&!r.structureName&&n)){const e=n.querySelector(".pmx-recovery-structure-select")||t&&t.querySelector(".pmx-recovery-structure-select");if(e){const t=e.querySelector(`option[value="${r.structure}"]`);t&&(r.structureName=t.text)}}r&&n&&(e.setInputValues&&e.setInputValues(t,r),e.updateDisplay&&e.updateDisplay(n,r),e.syncToFields&&o&&e.syncToFields(o,r),e.applyDirtyState?e.applyDirtyState({currentValues:r,originalValues:r,row:o,cell:n,popover:t}):x(e,n,o)),e.onAfterDiscard&&e.onAfterDiscard(t,n),e.onClose&&e.onClose(t),C(t)}window.PMXPopover={closeAllFixedPopovers:function(){document.querySelectorAll(`body > .${e}`).forEach(e=>{n.has(e)&&d(e)})},closeAllPopovers:r,closePopover:a,createPopover:function(e,t){const{displaySelector:n,cellSelector:o,popoverSelector:r,doneButtonSelector:a,inputSelector:i,ignoreSelectors:l=[],onOpen:c,onClose:d,onDone:h,onEnter:y}=t;e.addEventListener("click",t=>{const a=t.target.closest(n);if(!a)return;const i=a.closest(o),l=i?i.querySelector(r):null;if(!l)return;if(t.target.closest(r))return;const u=s(e,l,r);u&&c?c(i,l):!u&&d&&d(i,l)}),u(e,{cellSelector:o,ignoreSelectors:l,popoverSelector:r}),p(e,r),a&&h&&f(e,a,r,o,h),i&&y&&m(e,i,y)},hideFixedPopover:d,isPopoverVisible:l,openPopover:i,setupClickOutside:u,setupDoneButton:f,setupEnterSubmit:m,setupEscapeClose:p,showFixedPopover:c,togglePopover:s,updateFixedPopoverPosition:function(e,t,n={}){if(!e||!t||!l(e))return;const{preferredPosition:o="bottom",offsetY:r=4,alignRight:a=!1}=n,i=window.innerWidth,s=i-20,c=t.getBoundingClientRect(),d=Math.min(e.offsetWidth||250,s),u=(c.left+c.right)/2;if(a||u>i/2){const t=i-c.right;e.style.left="auto",e.style.right=`${Math.max(t,10)}px`}else{let t=c.left;t+d>i-10&&(t=i-d-10),t<10&&(t=10),e.style.right="auto",e.style.left=`${t}px`}const p=window.innerHeight,m=(c.top+c.bottom)/2,f=p-c.bottom,h=c.top;let y=!1;if("top"===o?y=!0:"bottom"===o&&m<p/2?y=!1:h>f&&(y=!0),y){const t=p-c.top+r;e.style.top="auto",e.style.bottom=`${Math.max(t,10)}px`}else e.style.bottom="auto",e.style.top=`${c.bottom+r}px`},register:function(e){if(!e.popoverSelector||!e.cellSelector)return void console.error("PMXPopover.register: popoverSelector and cellSelector are required");const t=["getOriginalValues","getCurrentValues","syncToFields","updateDisplay"];for(const n of t)if("function"!=typeof e[n])return void console.error(`PMXPopover.register: ${n} callback is required`);e.shouldCommitOnEnter=!1!==e.shouldCommitOnEnter,y.push(e),w||(w=!0,document.addEventListener("click",e=>{if(e.target.closest(".pmx-popover-close")&&g&&v)return e.preventDefault(),e.stopPropagation(),void D(v,g);if(e.target.closest(".pmx-discard-link")&&g&&v)return e.preventDefault(),e.stopPropagation(),void D(v,g);if(!g||!e.target.closest(v.popoverSelector)){for(const t of y){const n=t.triggerSelector||t.cellSelector,o=e.target.closest(n);if(o){const n=o.closest(".pmx-formset-row"),r=t.triggerSelector?o.closest(t.cellSelector.split(",").map(e=>e.trim()).join(", "))||n.querySelector(t.cellSelector.split(",")[0].trim()):o;if(g&&v===t){const e=g.pmxTriggerCell;if(e&&e.contains(o))return void T(t,g)}const a=n?n.querySelector(t.popoverSelector):null;if(!a)return;if(g&&v&&document.body.contains(g)){if(!T(v,g))return}else g=null,v=null;if(window.PMXPopoverUtils&&window.PMXPopoverUtils.shouldPreventOpen())return;return e.preventDefault(),void P(t,a,r,n,t.triggerSelector?o:null)}}if(g&&v){if(e.target.closest(".datepicker, .ui-datepicker, .daterangepicker"))return;T(v,g)||e.stopImmediatePropagation()}}},!0),document.addEventListener("keydown",e=>{"Escape"===e.key&&g&&v&&D(v,g)}),document.addEventListener("keydown",e=>{"Enter"===e.key&&g&&v&&"SELECT"!==e.target.tagName&&!1!==v.shouldCommitOnEnter&&(e.preventDefault(),T(v,g))}),document.addEventListener("keydown",e=>{if("Tab"!==e.key)return;if(!g||!v)return;const t=g,n=v,o=n.getFocusableElements?n.getFocusableElements(t):t.querySelectorAll("input:not([type='hidden']):not(:disabled), select:not(:disabled)"),r=Array.from(o),a=r.indexOf(e.target),i=t.pmxTriggerCell;e.shiftKey?a<=0&&(e.preventDefault(),D(n,t),window.PMXPopoverUtils&&window.PMXPopoverUtils.focusAdjacentCell(i,-1)):a!==r.length-1&&-1!==a||(e.preventDefault(),T(n,t),window.PMXPopoverUtils&&window.PMXPopoverUtils.focusAdjacentCell(i,1))}),document.addEventListener("input",e=>{if(!g||!v)return;if(!e.target.closest(v.popoverSelector))return;const t=b(v.getCurrentValues(g),g.pmxOriginalValues);S(g,t)}),document.addEventListener("change",e=>
1{if(!g||!v)return;if(!e.target.closest(v.popoverSelector))return;const t=b(v.getCurrentValues(g),g.pmxOriginalValues);S(g,t)}))},getCurrentPopover:function(){return g},commit:function(){return!g||!v||T(v,g)},discard:function(){g&&v&&D(v,g)},close:function(){g&&C(g)}}}(),function(){"use strict";const e=150;function t(e){if(!e)return;const t=e.querySelector("input:not([type='hidden']):not(:disabled), select:not(:disabled)");t&&(t.focus(),t.select&&t.select())}function n(e){const t=e.querySelector(".pmx-popover-footer");t&&(t.style.display="block")}function o(e){const t=e.querySelector(".pmx-popover-footer");t&&(t.style.display="none")}window.pmxLastPopoverCloseTime=window.pmxLastPopoverCloseTime||0,window.PMXPopoverUtils={clearCellEditing:function(e){e&&e.classList.remove("pmx-cell-editing")},focusAdjacentCell:function(e,n){if(!e)return;const o=e.closest(".pmx-formset-row");if(!o)return;const r=Array.from(o.querySelectorAll("td:not(.hidden)")),a=r.indexOf(e);if(-1===a)return;const i=a+n;if(i>=0&&i<r.length)t(r[i]);else{const e=Array.from(document.querySelectorAll(".pmx-formset-row:not(.hidden)")),r=e.indexOf(o)+n;if(r>=0&&r<e.length){const o=e[r],a=Array.from(o.querySelectorAll("td:not(.hidden)")),i=n>0?a[0]:a[a.length-1];i&&t(i)}}},focusCellInput:t,formatCurrency:function(e,t,n){t=t||"$",n=void 0!==n?n:2;const o=parseFloat((e||"0").toString().replace(/,/g,""))||0;return o<=0?"—":t+o.toLocaleString(void 0,{maximumFractionDigits:n,minimumFractionDigits:n})},getAutoNumericValue:function(e){return e?window.jQuery&&window.jQuery.fn.autoNumeric&&window.jQuery(e).data("autoNumeric")?window.jQuery(e).autoNumeric("get")||"":e.value.replace(/,/g,""):""},hasChanged:function(e,t){if(!e||!t)return!0;const n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!0;for(const o of n){const n=e[o],r=t[o];if("number"==typeof n||"number"==typeof r){if(parseFloat(n)!==parseFloat(r))return!0}else if(n!==r)return!0}return!1},hideDiscardFooter:o,markCellDirty:function(e){if(!e)return;e.classList.add("pmx-cell-dirty");const t=e.closest(".pmx-formset-row");if(t){t.classList.add("pmx-row-dirty");const e=document.getElementById("formset-parent");e&&e.classList.add("dirty"),window.PMXDirtyTracking&&window.PMXDirtyTracking.triggerFormDirty(t)}},markCellEditing:function(e){e&&e.classList.add("pmx-cell-editing")},setAutoNumericValue:function(e,t){if(e)if(window.jQuery&&window.jQuery.fn.autoNumeric){const n=window.jQuery(e);n.data("autoNumeric")||n.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"}),t?n.autoNumeric("set",t):e.value=""}else e.value=t||""},setCloseTimestamp:function(){window.pmxLastPopoverCloseTime=Date.now()},shouldPreventOpen:function(){return Date.now()-window.pmxLastPopoverCloseTime<e},showDiscardFooter:n,updateDiscardFooter:function(e,t){t?n(e):o(e)}}}(),function(){"use strict";let e=!1,t=!1,n={cloneEndpoint:null,deleteEndpoint:null,recordIdAttr:"data-record-id",onCloneSuccess:null,onDeleteSuccess:null};function o(){const e=document.cookie.split("; ").find(e=>e.startsWith("csrftoken="));if(e)return e.split("=")[1];const t=document.querySelector("input[name='csrfmiddlewaretoken']");return t?t.value:""}async function r(e,t={}){const{apiEndpoint:n,onSuccess:r=null,onError:a=null}=t;if(n)try{const t=o(),i=n.replace("{id}",e),s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest","X-CSRFToken":t},credentials:"same-origin",body:JSON.stringify({source_id:e})});if(!s.ok){let e="Failed to clone record";try{const t=await s.json(),n=Object.keys(t)[0];n&&Array.isArray(t[n])?e=t[n][0]:n&&"string"==typeof t[n]&&(e=t[n]),console.error("Clone error response:",t)}catch(e){console.error("Clone error (non-JSON):",e)}const t=new Error(e);throw t.isCloneError=!0,t}const l=await s.json();return window.PMXToast&&window.PMXToast.success("Record cloned"),r?r(l):window.location.reload(),l}catch(e){if(console.error("Failed to clone record:",e),window.PMXToast){const t=e.isCloneError?e.message:"Failed to clone record";window.PMXToast.error(t)}throw a&&a(e),e}else console.error("No API endpoint configured for clone")}async function a(e,t={}){const{apiEndpoint:n,onSuccess:r=null,onError:a=null}=t;if(n)try{const t=o(),i=await fetch(n.replace("{id}",e),{method:"DELETE",headers:{"X-Requested-With":"XMLHttpRequest","X-CSRFToken":t},credentials:"same-origin"});if(!i.ok)throw new Error(`HTTP ${i.status}`);window.PMXToast&&window.PMXToast.success("Record deleted"),r?r():window.location.reload()}catch(e){throw console.error("Failed to delete record:",e),window.PMXToast&&window.PMXToast.error("Failed to delete record"),a&&a(e),e}else console.error("No API endpoint configured for delete")}function i(e={}){const{title:t="Confirm",message:n="Are you sure?",confirmText:o="Confirm",cancelText:r="Cancel",danger:a=!1}=e;return window.PMXDialog?window.PMXDialog.confirm({title:t,message:n,
1confirmText:o,cancelText:r,danger:a}):Promise.resolve(window.confirm(n))}window.PMXActions={cloneRecord:r,deleteRecord:a,confirmAndDelete:async function(e,t,n={}){await i({title:"Delete Record",message:`Are you sure you want to delete "${t}"? This action cannot be undone.`,confirmText:"Delete",cancelText:"Cancel",danger:!0})&&await a(e,n)},showConfirmModal:i,initActions:function(o,i={}){const{cloneEndpoint:s=null,deleteEndpoint:l=null,recordIdAttr:c="data-record-id",recordNameAttr:d="data-record-name",onCloneSuccess:u=null,onDeleteSuccess:p=null}=i;function m(e){const t=e.closest(".pmx-actions-menu");return t&&t.pmxRow?t.pmxRow:e.closest(`[${n.recordIdAttr}]`)}n={cloneEndpoint:s,deleteEndpoint:l,recordIdAttr:c,onCloneSuccess:u,onDeleteSuccess:p},s&&!e&&(e=!0,document.addEventListener("click",e=>{if(!n.cloneEndpoint)return;const t=e.target.closest(".pmx-clone-btn");if(!t)return;e.preventDefault(),e.stopPropagation();const o=m(t);o?r(o.getAttribute(n.recordIdAttr),{apiEndpoint:n.cloneEndpoint,onSuccess:n.onCloneSuccess}):console.error("Could not find row for clone button")})),l&&!t&&(t=!0,document.addEventListener("click",e=>{if(!n.deleteEndpoint)return;const t=e.target.closest(".pmx-delete-btn");if(!t)return;e.preventDefault(),e.stopPropagation();const o=m(t);if(o){const e=o.getAttribute(n.recordIdAttr);!function(e,t,n){const o=e.parentNode,r=Array.from(o.childNodes).map(e=>e.cloneNode(!0));o.dataset.pmxConfirmActive="true";const a=document.createElement("span");a.className="pmx-inline-confirm";const i=document.createElement("span");i.className="pmx-confirm-text",i.textContent="Delete?",a.appendChild(i);const s=document.createElement("button");s.type="button",s.className="pmx-btn pmx-btn-danger pmx-btn-xs pmx-confirm-yes",s.title="Yes, delete",s.textContent="Yes",a.appendChild(s);const l=document.createElement("button");l.type="button",l.className="pmx-btn pmx-btn-default pmx-btn-xs pmx-confirm-no",l.title="Cancel",l.textContent="No",a.appendChild(l),o.textContent="",o.appendChild(a),o.dataset.pmxConfirmActive="true",s.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),delete o.dataset.pmxConfirmActive,t()}),l.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),delete o.dataset.pmxConfirmActive,o.textContent="",r.forEach(e=>o.appendChild(e)),n&&n()})}(t,()=>{a(e,{apiEndpoint:n.deleteEndpoint,onSuccess:n.onDeleteSuccess})})}}))},createActionButtons:function(e={}){const{showClone:t=!0,showDelete:n=!0,showEdit:o=!1,editUrl:r="#"}=e,a=document.createElement("div");if(a.className="pmx-action-buttons btn-group",o){const e=document.createElement("a");e.href=r,e.className="pmx-btn pmx-btn-xs pmx-btn-default pmx-edit-btn",e.title="Edit";const t=document.createElement("span");t.className="icon icon-pencil",t.setAttribute("aria-hidden","true"),e.appendChild(t),a.appendChild(e)}if(t){const e=document.createElement("button");e.type="button",e.className="pmx-btn pmx-btn-xs pmx-btn-default pmx-clone-btn",e.title="Clone";const t=document.createElement("span");t.className="icon icon-copy",t.setAttribute("aria-hidden","true"),e.appendChild(t),a.appendChild(e)}if(n){const e=document.createElement("button");e.type="button",e.className="pmx-btn pmx-btn-xs pmx-btn-danger pmx-delete-btn",e.title="Delete";const t=document.createElement("span");t.className="icon icon-trash",t.setAttribute("aria-hidden","true"),e.appendChild(t),a.appendChild(e)}return a}}}(),function(){"use strict";const e="pmx-dragging",t="pmx-reordered",n=".pmx-drag-handle";async function o(e,t,n,o,r="record_ids"){const a=e.querySelectorAll(`[${n}]`),i=Array.from(a).map(e=>{const t=e.getAttribute(n);return parseInt(t,10)}),s=o||window.PMXForms&&window.PMXForms.getCSRFToken(),l={};l[r]=i;const c=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest","X-CSRFToken":s},credentials:"same-origin",body:JSON.stringify(l)});if(!c.ok)throw new Error(`HTTP ${c.status}`);return c.json()}async function r(e,t,n,o,r){const a=parseInt(e.value,10);if(isNaN(a)||a<1)return void(window.PMXToast&&window.PMXToast.error("Please enter a valid position number"));const i=t.getAttribute("data-record-id");if(n)try{const e=window.PMXForms&&window.PMXForms.getCSRFToken(),t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest","X-CSRFToken":e},credentials:"same-origin",body:JSON.stringify({record_id:parseInt(i,10),new_position:a})});if(!t.ok)throw new Error(`HTTP ${t.status}`);window.PMXToast&&window.PMXToast.success(`Moved to position ${a}`),o?o(i,a):window.location.reload()}catch(e){console.error("Failed to move record:",e),window.PMXToast&&window.PMXToast.error("Failed to move record"),r&&r(e)}else console.error("No API endpoint configured for move to position")}window.PMXSorting={initSortable:function(r,a={}){if("undefined"==typeof Sortable)return console.warn("SortableJS not loaded. Drag-and-drop sorting disabled."),null;if(r.dataset.pmxSortableInitialized)return null;r.dataset.pmxSortableInitialized="true";const{apiEndpoint:i=null,recordIdAttr:s="data-record-id",handle:l=n,onSortSuccess:c=null,onSortError:d=null,csrfToken:u=null,bodyKey:p="record_ids"}=a;return Sortable.create(r,{handle:l,animation:150,ghostClass:"pmx-sort-ghost",chosenClass:"pmx-sort-chosen",dragClass:e,onStart(){document.body.classList.add("pmx-is-sorting")},onEnd(){document.body.classList.remove("pmx-is-sorting");const e=r.querySelectorAll(`[${s}]`);
1e.forEach(e=>{e.classList.add(t)}),i&&o(r,i,s,u,p).then(()=>{c&&c(),window.PMXToast&&window.PMXToast.success("Order saved"),e.forEach(e=>{e.classList.remove(t)})}).catch(e=>{console.error("Failed to save order:",e),d&&d(e),window.PMXToast&&window.PMXToast.error("Failed to save order")})}})},initMoveToPosition:function(e,t={}){if(e.dataset.pmxMoveToPositionInitialized)return;e.dataset.pmxMoveToPositionInitialized="true";const{inputSelector:n=".pmx-move-position-input",buttonSelector:o=".pmx-move-position-btn",apiEndpoint:a=null,onMoveSuccess:i=null,onMoveError:s=null}=t;e.querySelectorAll(n).forEach(e=>{const t=e.closest("[data-record-id]"),n=t&&t.querySelector(o);t&&n&&(n.addEventListener("click",()=>{r(e,t,a,i,s)}),e.addEventListener("keypress",n=>{"Enter"===n.key&&(n.preventDefault(),r(e,t,a,i,s))}))})},createDragHandle:function(){const e=document.createElement("span");return e.className="pmx-drag-handle",e.setAttribute("title","Drag to reorder"),e.setAttribute("aria-label","Drag to reorder"),e.innerHTML='\n            <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">\n                <circle cx="5" cy="3" r="1.5"></circle>\n                <circle cx="11" cy="3" r="1.5"></circle>\n                <circle cx="5" cy="8" r="1.5"></circle>\n                <circle cx="11" cy="8" r="1.5"></circle>\n                <circle cx="5" cy="13" r="1.5"></circle>\n                <circle cx="11" cy="13" r="1.5"></circle>\n            </svg>\n        ',e},createMoveToPositionInput:function(e){const t=document.createElement("div");return t.className="pmx-move-position",t.innerHTML=`\n            <input\n                type="number"\n                class="form-control pmx-move-position-input"\n                value="${e}"\n                min="1"\n                title="Enter position number"\n                aria-label="Move to position"\n            />\n            <button type="button" class="pmx-btn pmx-btn-xs pmx-btn-default pmx-move-position-btn" title="Move to this position">\n                <span class="icon icon-arrow-right" aria-hidden="true"></span>\n            </button>\n        `,t},saveOrder:o}}(),function(){"use strict";const e=25;function t(t){const{tableBodySelector:n,controlsContainerId:r,fetchUrl:a,pageSize:i=e,totalCount:s=0,onPageLoad:l=null,onSaveAll:c=null,updateEndpoint:d=null,propertyId:u=null,sortField:p="sort_order",sortOrder:m="asc",onSortChange:f=null}=t,h=document.querySelector(n),y=document.getElementById(r);if(!h)return console.warn("Server pagination: Table body not found:",n),null;const g={currentPage:1,isLoading:!1,pageSize:i,totalCount:s,totalPages:Math.ceil(s/i),sortField:p,sortOrder:m};let v=null;function w(){return null!==h.querySelector(".pmx-row-dirty")}function b(){return h.querySelectorAll(".pmx-row-dirty")}function x(e){e.classList.add("pmx-row-dirty"),o(!0);const t=document.getElementById("formset-parent");t&&t.classList.add("dirty");const n=document.getElementById("submit-formset");n&&(n.disabled=!1,n.removeAttribute("disabled"))}function S(e){if(e.classList.remove("pmx-row-dirty"),e.querySelectorAll(".pmx-cell-dirty").forEach(e=>{e.classList.add("pmx-cell-saved"),setTimeout(()=>{e.classList.remove("pmx-cell-dirty","pmx-cell-saved")},500)}),!w()){o(!1);const t=document.getElementById("formset-parent");t&&t.classList.remove("dirty");const n=e.closest("form");n&&window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(n)}}const P={months_vacant:".pmx-col-mlp",renewal_probability:".pmx-col-mlp",renewal_abatement:".pmx-col-mlp",market_leasing_profile:".pmx-col-mlp",lease_start_date:".pmx-col-lease-start",lease_end_date:".pmx-col-lease-end",availability_start:".pmx-col-availability",availability_end:".pmx-col-availability",square_feet:".pmx-col-sqft",reimbursements:".pmx-col-recovery",reimbursement_type:".pmx-col-recovery",recovery_structure:".pmx-col-recovery",tenant_rent:".pmx-col-rent",tenant_rent_type:".pmx-col-rent",tenant_improvements:".pmx-col-ti",tenant_improvements_type:".pmx-col-ti"};function C(e,t){if(!e||!t)return;const n={};Object.keys(t).forEach(e=>{const o=P[e];if(o){const r=Array.isArray(t[e])?t[e][0]:t[e];
1n[o]||(n[o]=[]),n[o].push({field:e,message:r})}}),Object.keys(n).forEach(t=>{const o=e.querySelector(t);o&&(o.classList.add("has-field-error"),o.dataset.fieldErrors=JSON.stringify(n[t]))})}function T(){if(window.PMXDialog)return window.PMXDialog.choice({title:"Unsaved Changes",message:"You have unsaved changes. What would you like to do?",choices:[{value:"cancel",label:"Cancel",className:"pmx-btn-default"},{value:"discard",label:"Discard",className:"pmx-btn-warning"},{value:"save",label:"Save",className:"pmx-btn-primary"}]});const e=window.confirm("You have unsaved changes. Click OK to save, or Cancel to discard.");return Promise.resolve(e?"save":"discard")}function D(){b().forEach(e=>{e.querySelectorAll(".pmx-inline-input[data-original]").forEach(e=>{const t=e.dataset.original||"";if(window.jQuery&&jQuery.fn.autoNumeric){const n=jQuery(e);if(n.data("autoNumeric"))return void n.autoNumeric("set",t.replace(/,/g,""))}e.value=t}),e.querySelectorAll(".pmx-date-input[data-original]").forEach(e=>{e.value=e.dataset.original||""}),function(e){const t=e.querySelector(".pmx-col-rent");if(t){const e=t.querySelector(".pmx-rent-popover"),n=t.querySelector(".pmx-rent-display"),o=t.querySelector(".pmx-rent-input"),r=t.querySelector(".pmx-rent-type-select");if(e&&n){const t=k(e);n.dataset.amount=t.amount||"",n.dataset.type=t.type||"sf_per_year",o&&(o.value=t.amount||""),r&&(r.value=t.type||"sf_per_year")}}const n=e.querySelector(".pmx-col-recovery");if(n){const e=n.querySelector(".pmx-recovery-popover"),t=n.querySelector(".pmx-recovery-display");if(e&&t&&e.dataset.originalValues){const o=k(e),r=e.querySelector(".pmx-recovery-type-select"),a=e.querySelector(".pmx-recovery-amount-input"),i=e.querySelector(".pmx-recovery-structure-select"),s=e.querySelector(".pmx-recovery-method[value='simple']"),l=e.querySelector(".pmx-recovery-method[value='custom']"),c=e.querySelector(".pmx-recovery-simple-fields"),d=e.querySelector(".pmx-recovery-custom-fields"),u=void 0!==o.isSimple?o.isSimple:!o.structure;let p=o.structureName||"";if(!p&&o.structure&&i){const e=i.querySelector(`option[value="${o.structure}"]`);e&&(p=e.text)}if(t.dataset.type=o.type||"total_year",t.dataset.amount=o.amount||"",t.dataset.structureId=o.structure||"",t.dataset.structureName=p,u){s&&(s.checked=!0),l&&(l.checked=!1),c&&(c.style.display="block"),d&&(d.style.display="none"),r&&(r.value=o.type||"total_year"),a&&(a.value=o.amount||""),i&&(i.value="");const t=e.querySelector(".pmx-recovery-amount-field");if(t){const e="pro_rata"!==o.type;t.style.display=e?"block":"none"}}else l&&(l.checked=!0),s&&(s.checked=!1),c&&(c.style.display="none"),d&&(d.style.display="block"),i&&(i.value=o.structure||""),a&&(a.value=o.amount||""),r&&(r.value=o.type||"total_year");const m=n.querySelector(".pmx-recovery-fields");if(m){const e=m.querySelector("select[name$='-recovery_structure']"),t=m.querySelector("input[name$='-reimbursements']"),n=m.querySelector("select[name$='-reimbursement_type']");e&&(e.value=o.structure||""),t&&(t.value=o.amount||""),n&&(n.value=o.type||"total_year")}}}const o=e.querySelector(".pmx-col-ti-terms");if(o){const e=o.querySelector(".pmx-ti-popover"),t=o.querySelector(".pmx-ti-terms-display");if(e&&t){const n=k(e);t.dataset.tiAmount=n.ti_amount||"",t.dataset.tiType=n.ti_type||"none";const o=e.querySelector(".pmx-ti-amount-input"),r=e.querySelector(".pmx-ti-type-select");o&&(o.value=n.ti_amount||""),r&&(r.value=n.ti_type||"none")}}const r=e.querySelector(".pmx-col-mlp");if(r){const e=r.querySelector(".pmx-mlp-popover"),t=r.querySelector(".pmx-mlp-display");if(e&&t){const n=k(e);void 0!==n.renewal_free_rent&&(t.dataset.renewalFreeRent=n.renewal_free_rent),void 0!==n.months_vacant&&(t.dataset.monthsVacant=n.months_vacant),void 0!==n.renewal_probability&&(t.dataset.renewalProbability=n.renewal_probability);const o=e.querySelector(".pmx-renewal-abatement-input"),r=e.querySelector(".pmx-months-vacant-input"),a=e.querySelector(".pmx-renewal-probability-input");o&&void 0!==n.renewal_free_rent&&(o.value=n.renewal_free_rent),r&&void 0!==n.months_vacant&&(r.value=n.months_vacant),a&&void 0!==n.renewal_probability&&(a.value=n.renewal_probability)}}const a=e.querySelector(".pmx-col-availability");if(a){const e=a.querySelector(".pmx-availability-display"),t=a.querySelector(".pmx-date-input[data-target='availability_start']"),n=a.querySelector(".pmx-date-input[data-target='availability_end']");e&&(t&&(e.dataset.availStart=t.dataset.original||""),n&&(e.dataset.availEnd=n.dataset.original||""))}}
1(e),E(e),e.querySelectorAll(".pmx-cell-dirty").forEach(e=>{e.classList.remove("pmx-cell-dirty")}),e.querySelectorAll(".has-field-error").forEach(e=>{e.classList.remove("has-field-error"),delete e.dataset.fieldErrors}),S(e)}),o(!1);const e=document.getElementById("formset-parent");if(e){e.classList.remove("dirty");const t=e.closest("form")||e;window.PMXDirtyTracking&&window.PMXDirtyTracking.markFormClean(t)}window.PMXToast&&window.PMXToast.success("Changes discarded")}function E(e){if(window.PMXRentPopover){const t=e.querySelector(".pmx-rent-display");t&&window.PMXRentPopover.updateRentDisplay(t)}if(window.PMXRecoveryPopover){const t=e.querySelector(".pmx-recovery-display");t&&window.PMXRecoveryPopover.updateRecoveryDisplay(t)}if(window.PMXTIPopover){const t=e.querySelector(".pmx-ti-terms-display");t&&window.PMXTIPopover.updateTITermsDisplay(t)}if(window.PMXMLPPopover){const t=e.querySelector(".pmx-mlp-display");t&&window.PMXMLPPopover.updateMLPDisplay(t)}if(window.PMXDatesPopover){const t=e.querySelector(".pmx-availability-display");t&&window.PMXDatesPopover.updateAvailabilityDisplay(t)}!function(e){const t=e.querySelector(".pmx-date-input[data-target='lease_start_date']"),n=e.querySelector(".pmx-date-input[data-target='lease_end_date']"),o=e.querySelector(".pmx-date-display[data-field='lease_start']"),r=e.querySelector(".pmx-date-display[data-field='lease_end']");if(t&&o){const e=t.dataset.original||"";o.dataset.value=e,o.textContent=M(e)}if(n&&r){const e=n.dataset.original||"";r.dataset.value=e,r.textContent=M(e)}}(e)}function M(e){if(!e)return"—";const t=e.split("-");if(3!==t.length)return"—";const n=t[0],o=parseInt(t[1],10)-1;return o<0||o>11?"—":`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][o]} ${n}`}function k(e){if(!e)return{};if(window.PMXDirtyTracking)return window.PMXDirtyTracking.getOriginalValues(e);try{return JSON.parse(e.dataset.originalValues||"{}")}catch(e){return{}}}async function _(){const e=b();if(0===e.length)return!0;if(c)try{return await c(e),e.forEach(e=>{$(e),S(e)}),o(!1,!0),!0}catch(e){return console.error("Save failed:",e),window.PMXToast&&window.PMXToast.error("Failed to save changes"),!1}if(!u)return console.warn("No propertyId configured for saving"),!1;const t=e=>d?d.includes("{id}")?d.replace("{id}",e):d.endsWith("/")?`${d}${e}/`:d:`/properties/api/${u}/tenants/${e}/`;let n=!0;const r=L();for(const o of e){const e=o.dataset.recordId;if(!e)continue;const a=q(o);try{const i=await fetch(t(e),{body:JSON.stringify(a),headers:{"Content-Type":"application/json","X-CSRFToken":r},method:"PATCH"});if(i.ok)$(o),S(o);else{const t=await i.json().catch(()=>({}));if(console.error("Save failed for row:",e,"Data sent:",a,"Error:",t),window.PMXToast&&Object.keys(t).length>0){const e=Object.keys(t)[0],n=Array.isArray(t[e])?t[e][0]:t[e];window.PMXToast.error(`${e}: ${n}`)}C(o,t),n=!1}}catch(t){console.error("Save error for row:",e,"Data sent:",a,"Error:",t),n=!1}}return n?(o(!1,!0),window.PMXToast&&window.PMXToast.success("Changes saved")):window.PMXToast&&window.PMXToast.error("Some changes failed to save"),n}function q(e){const t={};e.querySelectorAll(".pmx-inline-input[data-field]").forEach(e=>{const n=e.dataset.field;let o=e.value;if(e.classList.contains("pmx-numeric-input")||e.classList.contains("pmx-money-input")){const e=(o||"").replace(/,/g,"").trim();o=e&&parseFloat(e)||0}else"SELECT"===e.tagName?o=""===o?null:o:"date"===e.type&&(o=o&&o.trim()?o:null);t[n]=o});const n=e.querySelector(".pmx-rent-display");n&&(t.tenant_rent=parseFloat(n.dataset.amount)||0,t.tenant_rent_type=n.dataset.type||"sf_per_year");const o=e.querySelector(".pmx-recovery-display");if(o){const e=o.dataset.structureId;e?(t.reimbursement_method="custom",t.recovery_structure=parseInt(e,10),t.reimbursements=null,t.reimbursement_type=null):(t.reimbursement_method="simple",t.recovery_structure=null,t.reimbursements=parseFloat(o.dataset.amount)||0,t.reimbursement_type=o.dataset.type||"total_year")}const r=e.querySelector(".pmx-ti-terms-display");r&&(t.tenant_improvements=parseFloat(r.dataset.amount)||0,t.tenant_improvements_type=r.dataset.type||"total");const a=e.querySelector(".pmx-mlp-display");if(a){const e=a.dataset.mlpId;t.market_leasing_profile=e?parseInt(e,10):null,t.months_vacant=parseInt(a.dataset.monthsVacant,10)||0,t.renewal_probability=parseInt(a.dataset.renewalProbability,10)||0,t.renewal_abatement=parseInt(a.dataset.renewalAbatement,10)||0,t.months_vacant_overriden="true"===a.dataset.monthsVacantOverriden,t.renewal_probability_overriden="true"===a.dataset.renewalProbabilityOverriden,t.renewal_free_rent_overriden="true"===a.dataset.renewalFreeRentOverriden}const i=e.querySelector(".pmx-expense-display");i&&(t.expense_amount=parseFloat(i.dataset.amount)||0,t.expense_type=i.dataset.type||"year");const s=e.querySelector(".pmx-term-display");if(s){const e=s.dataset.startDate,n=s.dataset.endDate;t.start_date=e&&e.trim()?e:null,t.end_date=n&&n.trim()?n:null}const l=e.querySelector(".pmx-col-lease-start .pmx-date-display"),c=e.querySelector(".pmx-col-lease-end .pmx-date-display"),d=e.querySelector(".pmx-availability-display");if(l){const e=l.dataset.value;t.lease_start_date=e&&e.trim()?e:null}if(c){const e=c.dataset.value;t.lease_end_date=e&&e.trim()?e:null}if(d){const e=d.dataset.availStart,n=d.dataset.availEnd;t.availability_start=e&&e.trim()?e:null,t.availability_end=n&&n.trim()?n:null}return t}function $(e){e.querySelectorAll(".pmx-inline-input[data-original]").forEach(e
1=>{e.dataset.original=e.value}),e.querySelectorAll(".pmx-date-input[data-original]").forEach(e=>{e.dataset.original=e.value});const t=e.querySelector(".pmx-expense-input[data-original]");t&&(t.dataset.original=t.value);const n=e.querySelector(".pmx-expense-type-select[data-original]");n&&(n.dataset.original=n.value);const o=e.querySelector(".pmx-term-start-input[data-original]");o&&(o.dataset.original=o.value);const r=e.querySelector(".pmx-term-end-input[data-original]");if(r&&(r.dataset.original=r.value),window.PMXDirtyTracking){const t=e.querySelector(".pmx-rent-display"),n=e.querySelector(".pmx-rent-popover");t&&n&&window.PMXDirtyTracking.storeOriginalValues(n,{amount:t.dataset.amount||"",type:t.dataset.type||""});const o=e.querySelector(".pmx-recovery-display"),r=e.querySelector(".pmx-recovery-popover");o&&r&&window.PMXDirtyTracking.storeOriginalValues(r,{amount:o.dataset.amount||"",type:o.dataset.type||"",structure:o.dataset.structureId||""});const a=e.querySelector(".pmx-expense-display"),i=e.querySelector(".pmx-expense-popover");a&&i&&window.PMXDirtyTracking.storeOriginalValues(i,{amount:a.dataset.amount||"",type:a.dataset.type||""});const s=e.querySelector(".pmx-term-display"),l=e.querySelector(".pmx-term-popover");s&&l&&window.PMXDirtyTracking.storeOriginalValues(l,{start_date:s.dataset.startDate||"",end_date:s.dataset.endDate||""});const c=e.querySelector(".pmx-ti-terms-display"),d=e.querySelector(".pmx-ti-popover");c&&d&&window.PMXDirtyTracking.storeOriginalValues(d,{amount:c.dataset.amount||"",type:c.dataset.type||""});const u=e.querySelector(".pmx-mlp-display"),p=e.querySelector(".pmx-mlp-popover");u&&p&&window.PMXDirtyTracking.storeOriginalValues(p,{mlpId:u.dataset.mlpId||"",monthsVacant:u.dataset.monthsVacant||"",monthsVacantOverriden:u.dataset.monthsVacantOverriden||"",renewalAbatement:u.dataset.renewalAbatement||"",renewalFreeRentOverriden:u.dataset.renewalFreeRentOverriden||"",renewalProbability:u.dataset.renewalProbability||"",renewalProbabilityOverriden:u.dataset.renewalProbabilityOverriden||""})}delete e.dataset.datesOriginalValues}function L(){const e=document.querySelector("[name=csrfmiddlewaretoken]");return e?e.value:""}async function X(e){if(!(e<1||e>g.totalPages)&&e!==g.currentPage){if(w()){const e=await T();if("save"===e){if(!await _())return}else{if("discard"!==e)return;D()}}await A(e)}}async function A(e){v&&v.abort(),g.isLoading=!0,F(),v=new AbortController;try{const t=`${a}?page=${e}&page_size=${g.pageSize}&sort=${g.sortField}&order=${g.sortOrder}`,n=await fetch(t,{headers:{"X-CSRFToken":L()},signal:v.signal});if(!n.ok)throw new Error(`HTTP ${n.status}`);const o=await n.json();g.currentPage=o.page,g.totalPages=o.total_pages,g.totalCount=o.total_count,o.sort&&(g.sortField=o.sort),o.order&&(g.sortOrder=o.order),document.querySelectorAll("body > .pmx-actions-menu").forEach(e=>{e.classList.remove("is-open"),e.remove()});const r=[".pmx-expense-popover",".pmx-term-popover",".pmx-rent-popover",".pmx-recovery-popover",".pmx-ti-popover",".pmx-mlp-popover",".pmx-dates-popover"];document.querySelectorAll(`body > ${r.join(", body > ")}`).forEach(e=>{e.pmxTriggerCell&&window.PMXPopoverUtils&&window.PMXPopoverUtils.clearCellEditing(e.pmxTriggerCell),e.pmxTriggerCell=null,e.classList.remove("is-visible"),e.remove()}),window.PMXPopover&&window.PMXPopover.closeAllFixedPopovers&&window.PMXPopover.closeAllFixedPopovers(),window.jQuery&&(h.querySelectorAll(".pmx-money-input, .pmx-numeric-input, .pmx-expense-input").forEach(e=>{const t=jQuery(e);if(t.data("autoNumeric"))try{t.autoNumeric("destroy")}catch(e){}}),jQuery(h).find("*").addBack().each(function(){jQuery.removeData(this)})),h.querySelectorAll("[data-pmx-server-pagination-initialized]").forEach(e=>{delete e.pmxOriginalParent}),h.innerHTML=o.html,N();const i=h.closest(".pmx-table-scroll-container");if(i&&i.scrollTo(0,0),l){const e=h.querySelectorAll(".pmx-formset-row");l(Array.from(e),g.currentPage)}f&&f(g.sortField,g.sortOrder)}catch(e){if("AbortError"===e.name)return;console.error("Failed to fetch page:",e),window.PMXToast&&window.PMXToast.error("Failed to load page")}finally{g.isLoading=!1,v=null,F()}}function N(e=null){var t;(e?Array.from(e):Array.from(h.querySelectorAll(".pmx-formset-row"))).forEac
1h(e=>{if("true"!==e.dataset.pmxServerPaginationInitialized){if(e.dataset.pmxServerPaginationInitialized="true",E(e),window.jQuery&&jQuery.fn.autoNumeric){e.querySelectorAll(".pmx-money-input").forEach(e=>{if("number"===e.type)return;const t=jQuery(e);if(!t.data("autoNumeric")){t.autoNumeric({decimalPlacesOverride:2,minimumValue:"-100000000"});const e=t.val();e&&t.autoNumeric("set",e)}}),e.querySelectorAll(".pmx-numeric-input").forEach(e=>{if("number"===e.type)return;const t=jQuery(e);if(!t.data("autoNumeric")){t.autoNumeric({decimalPlacesOverride:0,maximumValue:"9999999999999",minimumValue:"0"});const e=t.val();e&&t.autoNumeric("set",e.replace(/,/g,""))}})}(e=e).querySelectorAll("input, select").forEach(t=>{const n=()=>{const n=t.closest("td");if(n&&t.classList.contains("pmx-inline-input")){const e=t.dataset.original||"",o=t.value||"",r=o.replace(/,/g,"")!==e.replace(/,/g,"");r?window.PMXDirtyTracking?window.PMXDirtyTracking.markCellDirty(n):n.classList.add("pmx-cell-dirty"):window.PMXDirtyTracking?window.PMXDirtyTracking.markCellClean(n):n.classList.remove("pmx-cell-dirty")}const o=null!==e.querySelector(".pmx-cell-dirty"),r=function(e){const t=e=>e&&Object.keys(e).length>0,n=(e,t)=>(parseFloat(e)||0)===(parseFloat(t)||0),o=e.querySelector(".pmx-rent-display");if(o){const r=e.querySelector(".pmx-rent-popover");if(r&&window.PMXDirtyTracking){const e=window.PMXDirtyTracking.getOriginalValues(r);if(t(e)){const t=o.dataset.amount||"",r=o.dataset.type||"";if(!n(e.amount,t)||e.type!==r)return!0}}}const r=e.querySelector(".pmx-recovery-display");if(r){const o=e.querySelector(".pmx-recovery-popover");if(o&&window.PMXDirtyTracking){const e=window.PMXDirtyTracking.getOriginalValues(o);if(t(e)){const t=r.dataset.type||"",o=r.dataset.amount||"";if(e.type!==t||!n(e.amount,o))return!0}}}const a=e.querySelector(".pmx-expense-display");if(a){const o=e.querySelector(".pmx-expense-popover");if(o&&window.PMXDirtyTracking){const e=window.PMXDirtyTracking.getOriginalValues(o);if(t(e)){const t=a.dataset.amount||"",o=a.dataset.type||"";if(!n(e.amount,t)||e.type!==o)return!0}}}const i=e.querySelector(".pmx-term-display");if(i){const n=e.querySelector(".pmx-term-popover");if(n&&window.PMXDirtyTracking){const e=window.PMXDirtyTracking.getOriginalValues(n);if(t(e)){const t=i.dataset.startDate||"",n=i.dataset.endDate||"";if(e.start_date!==t||e.end_date!==n)return!0}}}return!1}(e);o||r?x(e):S(e)};t.addEventListener("input",n),t.addEventListener("change",n)})}})}function F(){if(!y)return;if(g.totalPages<=1)return y.innerHTML="",void(y.style.display="none");y.style.display="";let e=`\n                <div class="pmx-pagination pmx-server-pagination">\n                    <span class="pmx-pagination-info">\n                        Showing ${(g.currentPage-1)*g.pageSize+1}-${Math.min(g.currentPage*g.pageSize,g.totalCount)} of ${g.totalCount}\n                        ${g.isLoading?'<span class="pmx-loading-spinner-small"></span>':""}\n                    </span>\n                    <div class="pmx-pagination-controls">\n            `;e+=`\n                <button type="button"\n                        class="pmx-btn pmx-btn-default pmx-btn-sm pmx-page-prev"\n                        ${1===g.currentPage||g.isLoading?"disabled":""}>\n                    <span class="icon icon-arrow-left"></span>\n                </button>\n            `,function(){const e=[],t=g.totalPages,n=g.currentPage;if(t<=7)for(let n=1;n<=t;n++)e.push(n);else{e.push(1),n>3&&e.push("...");const o=Math.max(2,n-1),r=Math.min(t-1,n+1);for(let t=o;t<=r;t++)e.push(t);n<t-2&&e.push("..."),e.push(t)}return e}().forEach(t=>{e+="..."===t?'<span class="pmx-pagination-ellipsis">...</span>':`\n                        <button type="button"\n                                class="pmx-btn pmx-btn-sm pmx-page-num ${t===g.currentPage?"pmx-btn-primary":"pmx-btn-default"}"\n                                data-page="${t}"\n                                ${g.isLoading?"disabled":""}>\n                            ${t}\n                        </button>\n                    `}),e+=`\n                <button type="button"\n                        class="pmx-btn pmx-btn-default pmx-btn-sm pmx-page-next"\n                        ${g.currentPage===g.totalPages||g.isLoading?"disabled":""}>
1\n                    <span class="icon icon-arrow-right"></span>\n                </button>\n            `,e+="\n                    </div>\n                </div>\n            ",y.innerHTML=e;const t=y.querySelector(".pmx-page-prev"),n=y.querySelector(".pmx-page-next"),o=y.querySelectorAll(".pmx-page-num");t&&t.addEventListener("click",()=>{X(g.currentPage-1)}),n&&n.addEventListener("click",()=>{X(g.currentPage+1)}),o.forEach(e=>{e.addEventListener("click",()=>{X(parseInt(e.dataset.page,10))})})}F(),N();const I=document.querySelector("#state-indicator .pmx-discard-btn");return I&&I.addEventListener("click",()=>{D()}),{collectRowData:q,discardAllChanges:D,firstPage:()=>X(1),getState:function(){return{...g}},goToPage:X,hasDirtyRows:w,initializeRows:e=>N(e),lastPage:()=>X(g.totalPages),markRowClean:S,markRowDirty:x,nextPage:()=>X(g.currentPage+1),prevPage:()=>X(g.currentPage-1),refresh:async function(){await A(g.currentPage)},saveAllDirty:_,sortBy:async function(e){if(w()){const e=await T();if("save"===e){if(!await _())return}else{if("discard"!==e)return;D()}}g.sortField===e?"asc"===g.sortOrder?g.sortOrder="desc":(g.sortField="sort_order",g.sortOrder="asc"):(g.sortField=e,g.sortOrder="asc"),await A(1)},updateTotalCount:function(e){g.totalCount=e,g.totalPages=Math.ceil(e/g.pageSize),g.currentPage>g.totalPages&&(g.currentPage=Math.max(1,g.totalPages)),F()}}}let n=null;function o(e,t=!1){let n=document.getElementById("state-indicator");n&&(e?(n.classList.add("has-unsaved"),n.classList.remove("has-saved")):(n.classList.remove("has-unsaved"),t?n.classList.add("has-saved"):n.classList.remove("has-saved")));const o=document.getElementById("submit-formset");o&&(e?(o.disabled=!1,o.removeAttribute("disabled")):o.disabled=!0)}window.PMXServerPagination={getCurrentPage:function(){return n?n.getState().currentPage:1},getPageSize:function(){return n?n.getState().pageSize:e},goToPage:function(e,t){n&&(n.goToPage,n.goToPage(e).then(()=>{t&&t()}).catch(()=>{}))},init:function(e){return n=t(e)},updateStateIndicator:o}}(),function(){"use strict";const e=25;window.PMXTablePagination={init:function(t){const{tableBodySelector:n,rowSelector:o="tr",controlsContainerId:r,pageSize:a=e,onPageChange:i=null}=t,s=document.querySelector(n),l=document.getElementById(r);if(!s)return console.warn("Table body not found:",n),null;const c={currentPage:1,pageSize:a,totalRows:0,totalPages:0};let d=[];function u(){const e=s.querySelectorAll(o);d=Array.from(e).map((e,t)=>({element:e,isInDOM:!0,index:t}))}function p(){return d.filter(e=>{const t=e.element.querySelector("input[name$='-DELETE']");return!t||!t.checked})}function m(){const e=p();c.totalRows=e.length,c.totalPages=Math.ceil(c.totalRows/c.pageSize),c.currentPage>c.totalPages&&(c.currentPage=Math.max(1,c.totalPages))}function f(){const e=p(),t=(c.currentPage-1)*c.pageSize,n=t+c.pageSize,o=new Set;for(let r=t;r<n&&r<e.length;r++)o.add(e[r].index);if(d.forEach(e=>{const t=o.has(e.index);if(t&&!e.isInDOM){let t=!1;for(let n=e.index+1;n<d.length;n++)if(d[n].isInDOM){s.insertBefore(e.element,d[n].element),t=!0;break}t||s.appendChild(e.element),e.isInDOM=!0,e.element.classList.remove("pmx-pagination-hidden"),e.element.style.display=""}else!t&&e.isInDOM&&(e.element.classList.add("pmx-pagination-hidden"),s.removeChild(e.element),e.isInDOM=!1)}),function(){if(!l)return;if(c.totalPages<=1)return l.innerHTML="",void(l.style.display="none");l.style.display="";const e=(c.currentPage-1)*c.pageSize+1,t=Math.min(c.currentPage*c.pageSize,c.totalRows);let n=`\n                <div class="pmx-pagination">\n                    <span class="pmx-pagination-info">\n                        Showing ${e}-${t} of ${c.totalRows}\n                    </span>\n                    <div class="pmx-pagination-controls">\n            `;n+=`\n                <button type="button" class="pmx-btn pmx-btn-default pmx-btn-sm pmx-page-prev"\n                        ${1===c.currentPage?"disabled":""}>\n                    <span class="icon icon-arrow-left"></span>\n                </button>\n            `,function(){const e=[],t=c.totalPages,n=c.currentPage;if(t<=7)for(let n=1;n<=t;n++)e.push(n);else{e.push(1),n>3&&e.push("...");const o=Math.max(2,n-1),r=Math.min(t-1,n+1);for(let t=o;t<=r;t++)e.push(t);n<t-2&&e.push("..."),e.push(t)}return e}
1().forEach(e=>{n+="..."===e?'<span class="pmx-pagination-ellipsis">...</span>':`\n                        <button type="button"\n                                class="pmx-btn pmx-btn-sm pmx-page-num ${e===c.currentPage?"pmx-btn-primary":"pmx-btn-default"}"\n                                data-page="${e}">\n                            ${e}\n                        </button>\n                    `}),n+=`\n                <button type="button" class="pmx-btn pmx-btn-default pmx-btn-sm pmx-page-next"\n                        ${c.currentPage===c.totalPages?"disabled":""}>\n                    <span class="icon icon-arrow-right"></span>\n                </button>\n            `,n+="\n                    </div>\n                </div>\n            ",l.innerHTML=n;const o=l.querySelector(".pmx-page-prev"),r=l.querySelector(".pmx-page-next"),a=l.querySelectorAll(".pmx-page-num");o&&o.addEventListener("click",()=>y(c.currentPage-1)),r&&r.addEventListener("click",()=>y(c.currentPage+1)),a.forEach(e=>{e.addEventListener("click",()=>{const t=parseInt(e.dataset.page,10);y(t)})})}(),i){const o=e.slice(t,n).map(e=>e.element);i(o,c.currentPage)}}function h(){[...d].sort((e,t)=>e.index-t.index).forEach(e=>{if(!e.isInDOM){let t=!1;for(let n=e.index+1;n<d.length;n++){const o=d.find(e=>e.index===n);if(o&&o.isInDOM){s.insertBefore(e.element,o.element),t=!0;break}}t||s.appendChild(e.element),e.isInDOM=!0}e.element.style.display="none"});const e=p(),t=(c.currentPage-1)*c.pageSize,n=t+c.pageSize;e.forEach((e,o)=>{o>=t&&o<n&&(e.element.style.display="",e.element.classList.remove("pmx-pagination-hidden"))})}function y(e){e<1||e>c.totalPages||(c.currentPage=e,f())}document.createComment("pmx-pagination-placeholder");const g=s.closest("form");return g&&g.addEventListener("submit",()=>{h()},{capture:!0}),u(),m(),f(),{goToPage:y,refresh:function(){u(),m(),f()},getState:function(){return{...c}},addRow:function(e){d.push({element:e,isInDOM:!0,index:d.length}),m(),y(c.totalPages)},restoreAllRows:h,nextPage:()=>y(c.currentPage+1),prevPage:()=>y(c.currentPage-1),firstPage:()=>y(1),lastPage:()=>y(c.totalPages)}}}}(),function(){"use strict";const e=3e3,t="pmx-toast-container";function n(e){e.classList.add("pmx-toast-exit"),setTimeout(()=>{e.parentNode&&e.parentNode.removeChild(e)},300)}function o(o,r){const a=function(){let e=document.getElementById(t);return e||((e=document.createElement("div")).id=t,e.className="pmx-toast-container",document.body.appendChild(e)),e}(),i=function(e,t){const o=document.createElement("div");o.className=`pmx-toast pmx-toast-${t}`,o.setAttribute("role","alert"),o.setAttribute("aria-live","polite");const r="success"===t?"icon-checkmark":"icon-cross",a=document.createElement("span");a.className=`icon ${r}`,a.setAttribute("aria-hidden","true"),o.appendChild(a);const i=document.createElement("span");i.className="pmx-toast-message",i.textContent=e,o.appendChild(i);const s=document.createElement("button");s.type="button",s.className="pmx-toast-close",s.setAttribute("aria-label","Close");const l=document.createElement("span");return l.className="icon icon-cross",l.setAttribute("aria-hidden","true"),s.appendChild(l),o.appendChild(s),s.addEventListener("click",()=>n(o)),o}(o,r);return a.appendChild(i),requestAnimationFrame(()=>{i.classList.add("pmx-toast-enter")}),setTimeout(()=>n(i),e),i}window.PMXToast={success:e=>o(e,"success"),error:e=>o(e,"error"),warning:e=>o(e,"warning"),showSuccess:e=>o(e,"success"),showError:e=>o(e,"error"),showWarning:e=>o(e,"warning")}}();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.