1var e=class{constructor(){if(this.elements=this.initializeElements(),this.state=this.initializeState(),!this.validateElements()){console.error(`Required DOM elements not found. Pricing calculator cannot initialize.`);return}this.bindEvents(),this.initializeCalculations()}initializeElements(){return{emailSelect:document.querySelector(`#emailitemselect`),smsSelect:document.querySelector(`#smsitemselect`),emailResult:document.querySelector(`.email-result`),smsResult:document.querySelector(`.sms-result`),emailMonthlyTotal:document.querySelector(`.email-monthly-total`),emailAnnualTotal:document.querySelector(`.annual-email`),smsAnnualTotal:document.querySelector(`.annual-sms`),emailsmsAnnualTotal:document.querySelector(`.annual-emailsms`),emailsmsAnnualMonthly:document.querySelector(`.annual-emailsms-monthly`),saveDiscount:document.querySelector(`.discount-value`)}}initializeState(){return{monthlyEmail:0,monthlySms:0,monthlyTotal:0,annualEmail:0,annualSms:0,annualTotal:0,annualMonthlyEquivalent:0,saveDiscountPercent:0}}validateElements(){return[`emailSelect`,`smsSelect`,`emailResult`,`smsResult`,`emailMonthlyTotal`,`emailAnnualTotal`,`smsAnnualTotal`,`emailsmsAnnualTotal`,`emailsmsAnnualMonthly`,`saveDiscount`].every(e=>this.elements[e]?!0:(console.warn(`Required element not found: ${e}`),!1))}getSelectValue(e,t){try{if(!e||!(e instanceof HTMLSelectElement))return console.warn(`Invalid select element provided`),0;let n=e.selectedIndex;if(n===-1)return console.warn(`No option selected`),0;let r=e.options[n].getAttribute(t);return r&&parseInt(r,10)||0}catch(e){return console.error(`Error getting select value for ${t}:`,e),0}}updateElementText(e,t){try{e&&e.textContent!==void 0?e.textContent=t:console.warn(`Invalid element provided for text update`)}catch(e){console.error(`Error updating element text:`,e)}}calculateAnnualWithDiscount(e,t){if(!e||e<=0)return 0;let n=1-t/100;return Math.round(e*12*n)}calculateSavingsPercentage(e,t){if(!e||e<=0)return 0;let n=e-t;return Math.round(n/e*100)}updateCalculations(){try{this.state.monthlyEmail=this.getSelectValue(this.elements.emailSelect,`price`),this.state.monthlySms=this.getSelectValue(this.elements.smsSelect,`price`),this.state.monthlyTotal=this.state.monthlyEmail+this.state.monthlySms;let e=this.getSelectValue(this.elements.smsSelect,`data_Discount_sms`);this.state.annualEmail=this.getSelectValue(this.elements.emailSelect,`data_annual_email`),this.state.annualSms=this.calculateAnnualWithDiscount(this.state.monthlySms,e),this.state.annualTotal=this.state.annualEmail+this.state.annualSms,this.state.annualMonthlyEquivalent=Math.round(this.state.annualTotal/12);let t=(this.state.monthlyEmail+this.state.monthlySms)*12;this.state.saveDiscountPercent=Math.max(0,this.calculateSavingsPercentage(t,this.state.annualTotal)),this.updateDisplay()}catch(e){console.error(`Error in updateCalculations:`,e)}}updateDisplay(){this.updateElementText(this.elements.emailResult,`$${this.state.monthlyEmail.toLocaleString()}`),this.updateElementText(this.elements.smsResult,`$${this.state.monthlySms.toLocaleString()}`),this.updateElementText(this.elements.emailMonthlyTotal,`$${this.state.monthlyTotal.toLocaleString()}`),this.updateElementText(this.elements.emailAnnualTotal,`$${this.state.annualEmail.toLocaleString()}`),this.updateElementText(this.elements.smsAnnualTotal,`$${this.state.annualSms.toLocaleString()}`),this.updateElementText(this.elements.emailsmsAnnualTotal,`$${this.state.annualTotal.toLocaleString()}`),this.updateElementText(this.elements.emailsmsAnnualMonthly,`$${this.state.annualMonthlyEquivalent.toLocaleString()}`),this.updateElementText(this.elements.saveDiscount,`${this.state.saveDiscountPercent.toLocaleString()}%`)}handleEmailChange(){try{this.state.monthlyEmail=this.getSelectValue(this.elements.emailSelect,`price`),this.updateCalculations()}catch(e){console.error(`Error handling email change:`,e)}}handleSmsChange(){try{this.state.monthlySms=this.getSelectValue(this.elements.smsSelect,`price`),this.updateCalculations()}catch(e){console.error(`Error handling SMS change:`,e)}}bindEvents(){try{this.elements.emailSelect&&this.elements.emailSelect.addEventListener(`change`,()=>this.handleEmailChange()),this.elements.smsSelect&&this.elements.smsSelect.addEventListener(`change`,()=>this.handleSmsChange())}catch(e){console.error(`Error binding events:`,e)}}initializeCalculations(){try{this.handleEmailChange(),this.handleSmsChange()}catch(e){console.error(`Error initializing calculations:`,e)}}getState(){return{...this.state}}destroy(){try{this.elements.emailSelect&&this.elements.emailSelect.removeEventListener(`change`,this.handleEmailChange),this.elements.smsSelect&&this.elements.smsSelect.removeEventListener(`change`,this.handleSmsChange)}catch(e){console.error(`Error destroying calculator:`,e)}}};function t(){document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{new e}):new e}t();
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.