{"version":3,"file":"chunks/2ddf3fbd87dd37.js","mappings":"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","sources":["webpack:///./resources/js/components/specific/tco/tco-calc.ts","webpack:///./resources/js/components/specific/tco/tco-labels.ts","webpack:///./resources/js/components/specific/tco/tco-screen-edit.ts","webpack:///./resources/js/components/specific/tco/tco-screen-start.ts","webpack:///./resources/js/components/specific/tco/tco-screen-results.ts","webpack:///./resources/js/components/specific/tco/tco-build.ts","webpack:///./resources/js/components/specific/tco/tco-calculator.ts"],"sourcesContent":["import TCO from \"./tco-build\";\n\nconst tiers = {\n  USD: {\n    server: {\n      small: 717.84,\n      medium: 863.3,\n      large: 2_108.77,\n      xl: 3_963.98\n    },\n    dc: {\n      small: 932.5,\n      medium: 1_208.88,\n      large: 5_656.6,\n      xl: 9_742.75\n    }\n  },\n  JPY: {\n    server: {\n      small: 75_628.39,\n      medium: 90_953.40,\n      large: 222_170.52,\n      xl: 417_627.09\n    },\n    dc: {\n      small: 98_244.00,\n      medium: 127_362.16,\n      large: 595_953.92,\n      xl: 1_026_452.30\n    }\n  }\n};\n\n\nconst adminSalary = {\n  USD: 100_134,\n  JPY: 14_768_945\n};\n\nconst medianHourly = {\n  USD: 50.77,\n  JPY: 5_274.75\n};\n\ntype Info = {\n  numberOfAdmins: number;\n  updatesPerYear: number;\n  downtimePerUpdate: any;\n  overhead: any;\n  adminSalary: any;\n  medianHourly: any;\n  useAccess: any;\n  accessPrice: any;\n  products: [\n    {\n      price: any;\n      chosenProductKey: any;\n      instances: [\n        {\n          isAvailable: any;\n          deployment: string;\n          users: number,\n          infra: number,\n          productIndex: number,\n          instanceIndex: number,\n        },\n      ],\n      deployment: string,\n      customPrice?: number\n    },\n  ],\n  plannedDowntime: boolean,\n  edition: string\n};\n\nexport default class Calc {\n  static getTiers(users: number) {\n    if (users < 1000) {\n      return 'small';\n    } else if (users < 10_000) {\n      return 'medium'\n    } else if (users > 100_000) {\n      return 'large';\n    } else {\n      return 'xl';\n    }\n  }\n\n  static getTotalSelfManagedCosts(info: Info) {\n    return this.getTotalOperationalCosts(info) + this.getTotalAnnualMaintenance(info);\n  }\n\n  static getProductInstanceInfrastructureCost(info: Info, productIndex: number, instanceIndex: number) {\n    return tiers[TCO.currency()][info.products[productIndex].deployment][this.getTiers(info.products[productIndex].instances[instanceIndex].users)] * 12;\n  }\n\n  static getTotalInfraCostPerProduct(info: Info, productIndex: number) {\n    return info.products[productIndex].instances.reduce((sum, instance, instanceIndex) => {\n      return sum + (instance.infra ? instance.infra : this.getProductInstanceInfrastructureCost(info, productIndex, instanceIndex));\n    }, 0);\n  }\n\n  static getTotalInfrastructureCost(info: Info) {\n    let instances = info.products.map((product, productIndex) => {\n      let newInstances = product.instances;\n      newInstances.forEach((instance, instanceIndex) => {\n        instance.productIndex = productIndex;\n        instance.instanceIndex = instanceIndex;\n      })\n      return newInstances;\n    }).flat();\n    return instances.reduce((instanceTotal, instance) => {\n      return instanceTotal + (instance.infra ? instance.infra : this.getProductInstanceInfrastructureCost(info, instance.productIndex, instance.instanceIndex));\n    }, 0);\n  }\n\n  static getTotalOperationalCosts(info: Info) {\n    return this.getTotalInfrastructureCost(info) + this.getTotalITLaborCost(info) + this.getPlannedDowntimeCosts(info);\n  }\n\n  static getHighestUsersAmongInstances(info: Info) {\n    let allInstances = info.products.map(product => {\n      return product.instances.map(instance => {\n        return instance.users;\n      })\n    }).flat();\n    return Math.max(...allInstances);\n  }\n\n  static getPlannedDowntimeCosts(info: Info) {\n    if (info.plannedDowntime) {\n      return this.getHighestUsersAmongInstances(info)\n        * this.getMedianHourly(info)\n        * this.getDowntimePerUpdate(info)\n        * this.getUpdatesPerYear(info);\n    }\n    return 0;\n  }\n\n  static getTotalAnnualMaintenance(info: Info) {\n    return info.products.reduce((productSum, product) => {\n      return productSum + (product.customPrice ? product.customPrice : product.price);\n    }, 0);\n  }\n\n  static getTotalAnnualCloudSubscription(info: Info, productInfo) {\n    let edition = info.edition == \"premium\" ? \"cloudPremium\" : \"cloudStandard\";\n    return info.products.reduce((productSum, product) => {\n      let isAvailable = productInfo[product.chosenProductKey][edition].available;\n      let productPrice = info.edition == \"premium\" && isAvailable ? \"cloudPremium\" : \"cloudStandard\";\n      return productSum + product[productPrice];\n    }, 0) + (info.useAccess ? info.accessPrice : 0);\n  }\n\n\n  static getTotalCloudCosts(info: Info, productInfo) {\n    return this.getTotalAnnualCloudSubscription(info, productInfo) ;\n  }\n\n  static getAdminSalary(info: Info) {\n    return info?.adminSalary ? info.adminSalary : adminSalary[TCO.currency()];\n  }\n\n  static getMedianHourly(info: Info) {\n    return info?.medianHourly ? info.medianHourly : medianHourly[TCO.currency()];\n  }\n\n  static getUpdatesPerYear(info: Info) {\n    return info?.updatesPerYear ? info?.updatesPerYear : 2;\n  }\n\n  static getDowntimePerUpdate(info: Info) {\n    return info?.downtimePerUpdate ? info?.downtimePerUpdate : 3;\n  }\n\n  static getNumberOfAdmins(info: Info) {\n    return info?.numberOfAdmins ? info.numberOfAdmins : (this.getHighestUsersAmongInstances(info) > 5000 ? 2 : 1);\n  }\n\n  static getTotalITLaborCost(info: Info) {\n    return (info.adminSalary ? info.adminSalary : adminSalary[TCO.currency()])\n      * this.getNumberOfAdmins(info)\n      * (info.overhead ? 1.4 : 1);\n  }\n\n}\n","let labels: { [name: string]: any; };\n\nexport default class Labels {\n  static init(passedLabels: typeof labels) {\n    labels = passedLabels;\n  }\n\n  static get(key: string) {\n    return labels[key];\n  }\n}\n","import TCO from \"./tco-build\";\nimport Calc from \"./tco-calc\";\nimport Labels from \"./tco-labels\";\n\nexport default class TCOEdit {\n  static getEditPage(printVersion?: boolean) {\n    let contain = TCO.getEl({ className: 'container-fluid edit-screen' });\n    let row = TCO.getEl({ className: 'row' });\n    contain.appendChild(row);\n    if (!printVersion) {\n      row.appendChild(TCO.getEl({\n        className: 'column text-center column-md-6 column-md-push-3',\n        innerHTML: `\n          <h2>${Labels.get(\"editHeadline\")}</h2>\n          <div class=\"text-oversized\">\n            <p>${Labels.get(\"editSubhead\")}</p>\n          </div>\n        `\n      }))\n    }\n    row.appendChild(this.getOperationalCostsSection(printVersion));\n    row.appendChild(this.getAnnualMaintenanceSection(printVersion));\n    if (!printVersion) {\n      row.appendChild(this.getPageButtons());\n    }\n    return contain;\n  }\n\n  static getOperationalCostsSection(printVersion?: boolean) {\n    let opCosts = TCO.getEl({\n      className: \"op-costs gray-card\"\n    });\n    opCosts.appendChild(TCO.getEl({\n      tag: 'button',\n      innerHTML: Labels.get(\"resetSectionDefaults\"),\n      className: 'reset',\n      onclick: () => {\n        this.resetOpCosts()\n      }\n    }));\n    opCosts.appendChild(TCO.getDottedLine({\n      label: Labels.get(\"operationalCosts\"),\n      value: TCO.formatNum(Calc.getTotalOperationalCosts(TCO.getEditInfo())),\n      description: `<p>${Labels.get(\"operationalCostsDescription\")}</p>`\n    }));\n    opCosts.appendChild(this.getInfrastructureSection(printVersion));\n    opCosts.appendChild(this.getITLaborSection(printVersion));\n    opCosts.appendChild(this.getPlannedDowntimeSection(printVersion));\n    return opCosts;\n  }\n\n  static getInfrastructureSection(printVersion?: boolean) {\n    let infraSection = TCO.getEl({\n      className: 'section-infrastructure nest-level-1',\n      htmlNode: TCO.getDottedLine({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"infrastructure\"),\n        tag: 'h4',\n        tooltip: Labels.get(\"infrastructureTooltip\"),\n        tooltipNum: 5,\n        value: TCO.formatNum(Calc.getTotalInfrastructureCost(TCO.getEditInfo())),\n        description: `<p>${Labels.get(\"infrastructureDescription\")}</p>`\n      })\n    });\n\n    /* product infrastructure costs */\n    let editableInfrastructures = TCO.getEl({\n      className: 'section-edit-products nest-level-2 ',\n      innerHTML: `\n        <div class=\"labels-values line-item\">\n          <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"products\")}</h5></div>\n          <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"annualExpenses\")}</h5></div>\n        </div>\n        `\n    });\n\n    TCO.getEditInfo(\"products\").forEach((_product: any, productIndex: number) => {\n      editableInfrastructures.appendChild(this.getProductEditLine(productIndex, printVersion));\n    });\n    infraSection.appendChild(editableInfrastructures);\n\n    return infraSection;\n  }\n\n  static getProductEditLine(productIndex: number, printVersion?: boolean) {\n    let allProducts = TCO.getEditInfo(\"products\");\n    let selectedProduct = allProducts[productIndex];\n    let productEditLine = TCO.getEl({ className: \"product-edit-line\" });\n    productEditLine.innerHTML = `\n      <div class=\"labels-values\">\n        <div class=\"labels-side\"><h4>${selectedProduct.productTitle}</h4></div>\n        <div class=\"values-side\"><p class=\"bold\">${TCO.formatNum(Calc.getTotalInfraCostPerProduct(TCO.getEditInfo(), productIndex))} ${Labels.get(\"aYear\")}</p></div>\n      </div>\n    `;\n\n    selectedProduct.instances.forEach((_instance: any, instanceIndex: number) => {\n      let productUsers = TCO.getProducts(selectedProduct.chosenProductKey).labels.users\n      productEditLine.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: `<span class=\"bold-inst\">${Labels.get(\"instanceLabel\")} ${instanceIndex + 1}</span> ${selectedProduct.instances[instanceIndex].users} ${productUsers}`,\n        placeholder: TCO.formatNum(Calc.getProductInstanceInfrastructureCost(TCO.getEditInfo(), productIndex, instanceIndex), true),\n        value: selectedProduct.instances[instanceIndex].infra ? TCO.formatNum(selectedProduct.instances[instanceIndex].infra, true) : '',\n        sideLabel: TCO.currency(),\n        onchange: (e) => {\n          selectedProduct.instances[instanceIndex].infra = TCO.sanitizedNum(e.target.value);\n          TCO.setEditInfo(\"products\", allProducts);\n          TCO.renderEditScreen();\n        }\n      }));\n    })\n    return productEditLine;\n  }\n\n  static getITLaborSection(printVersion?: boolean) {\n    let itLabor = TCO.getEl({\n      className: 'section-it-labor nest-level-1',\n      htmlNode: TCO.getDottedLine({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"itLabor\"),\n        tag: 'h4',\n        tooltip: Labels.get(\"itLaborTooltip\"),\n        tooltipNum: 6,\n        value: TCO.formatNum(Calc.getTotalITLaborCost(TCO.getEditInfo())),\n        description: `<p>${Labels.get(\"itLaborDescription\")}</p>`\n      })\n    });\n\n    /* infrastructure headers */\n    let editableInfrastructures = TCO.getEl({\n      className: 'section-admin-lines nest-level-2 ',\n      innerHTML: `\n        <div class=\"line-item labels-values\">\n          <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"factors\")}</h5></div>\n          <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"multipliers\")}</h5></div>\n        </div>\n        `\n    });\n    itLabor.appendChild(editableInfrastructures);\n\n    /* Number of administrators */\n    editableInfrastructures.appendChild(TCO.getLineItem({\n      isPrintVersion: printVersion,\n      label: Labels.get(\"numOfAdministrators\"),\n      placeholder: TCO.formatNum(Calc.getNumberOfAdmins(TCO.getEditInfo()), true),\n      value: TCO.getEditInfo(\"numberOfAdmins\") ? TCO.formatNum(TCO.getEditInfo(\"numberOfAdmins\"), true) : '',\n      onchange: (e) => {\n        TCO.setEditInfo(\"numberOfAdmins\", TCO.sanitizedNum(e.target.value));\n        TCO.renderEditScreen();\n      }\n    }));\n\n    /* Median annual salary, admins */\n    editableInfrastructures.appendChild(TCO.getLineItem({\n      isPrintVersion: printVersion,\n      label: Labels.get(\"medianAnnualSalary\"),\n      placeholder: TCO.formatNum(Calc.getAdminSalary(), true),\n      value: TCO.getEditInfo(\"adminSalary\") ? TCO.formatNum(TCO.getEditInfo(\"adminSalary\"), true) : '',\n      sideLabel: TCO.currency(),\n      onchange: (e) => {\n        TCO.setEditInfo(\"adminSalary\", TCO.sanitizedNum(e.target.value));\n        TCO.renderEditScreen();\n      }\n    }));\n\n    /* Overhead (remove for contractors) */\n    editableInfrastructures.appendChild(TCO.getLineItem({\n      label: Labels.get(\"overhead\"),\n      type: 'checkbox',\n      id: 'overhead-toggle',\n      checked: TCO.getEditInfo(\"overhead\"),\n      onchange: (e) => {\n        TCO.setEditInfo(\"overhead\", e.target.checked);\n        TCO.renderEditScreen();\n      }\n    }));\n\n    return itLabor;\n  }\n\n\n  static getPlannedDowntimeSection(printVersion?: boolean) {\n    let plannedDowntimeSection = TCO.getEl({ className: 'nest-level-1 section-planned-downtime' });\n    plannedDowntimeSection.appendChild(TCO.getDottedLine({\n      isPrintVersion: printVersion,\n      label: Labels.get(\"plannedDowntime\"),\n      tag: 'h4',\n      tooltip: Labels.get(\"plannedDowntimeEditTooltip\"),\n      tooltipNum: 7,\n      id: 'planned-downtime-toggle',\n      onchange: (e) => {\n        TCO.track(\"Planned downtime\");\n        TCO.setEditInfo(\"plannedDowntime\", e.target.checked);\n        TCO.renderEditScreen()\n      },\n      checked: TCO.getEditInfo(\"plannedDowntime\"),\n      value: TCO.formatNum(Calc.getPlannedDowntimeCosts(TCO.getEditInfo())),\n      description: `<p> ${TCO.getEditInfo(\"plannedDowntime\") ? Labels.get(\"plannedDowntimeDescriptionOn\") : Labels.get(\"plannedDowntimeDescriptionOff\")}`\n    }));\n\n\n\n    if (TCO.getEditInfo().plannedDowntime) {\n      let downTimeItems = TCO.getEl({\n        className: 'nest-level-2', innerHTML: `\n        <div class=\"line-item labels-values\">\n          <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"factors\")}</h5></div>\n          <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"multipliers\")}</h5></div>\n        </div>\n      `});\n\n      /* user count from largest instance */\n      downTimeItems.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"userCount\"),\n        placeholder: TCO.formatNum(Calc.getHighestUsersAmongInstances(TCO.getEditInfo()), true),\n        value: TCO.getEditInfo(\"maxUserCount\") ? TCO.formatNum(TCO.getEditInfo(\"maxUserCount\"), true) : '',\n        sideLabel: Labels.get(\"users\"),\n        onchange: (e) => {\n          TCO.setEditInfo(\"maxUserCount\", TCO.sanitizedNum(e.target.value));\n          TCO.renderEditScreen();\n        }\n      }));\n      /* median hourly wage */\n      downTimeItems.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"medianHourly\"),\n        placeholder: TCO.formatNum(Calc.getMedianHourly(), true, 2),\n        value: TCO.getEditInfo(\"medianHourly\") ? TCO.formatNum(TCO.getEditInfo(\"medianHourly\"), true, 2) : '',\n        sideLabel: TCO.currency(),\n        onchange: (e) => {\n          TCO.setEditInfo(\"medianHourly\", TCO.sanitizedNum(e.target.value, true));\n          TCO.renderEditScreen();\n        }\n      }));\n      /* downtime per udpate (hours) */\n      downTimeItems.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"downtimePerUpdate\"),\n        placeholder: TCO.formatNum(Calc.getDowntimePerUpdate(), true),\n        value: TCO.getEditInfo(\"downtimePerUpdate\") ? TCO.formatNum(TCO.getEditInfo(\"downtimePerUpdate\"), true) : '',\n        sideLabel: Labels.get(\"hours\"),\n        onchange: (e) => {\n          TCO.setEditInfo(\"downtimePerUpdate\", TCO.sanitizedNum(e.target.value));\n          TCO.renderEditScreen();\n        }\n      }));\n      /* updates per year */\n      downTimeItems.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: Labels.get(\"updatesPerYear\"),\n        placeholder: TCO.formatNum(Calc.getUpdatesPerYear(), true),\n        value: TCO.getEditInfo(\"updatesPerYear\") ? TCO.formatNum(TCO.getEditInfo(\"updatesPerYear\"), true) : '',\n        sideLabel: Labels.get(\"updates\"),\n        onchange: (e) => {\n          TCO.setEditInfo(\"updatesPerYear\", TCO.sanitizedNum(e.target.value));\n          TCO.renderEditScreen();\n        }\n      }));\n      plannedDowntimeSection.appendChild(downTimeItems);\n    }\n\n    return plannedDowntimeSection\n  }\n\n  static resetOpCosts() {\n    let resetProducts = TCO.getEditInfo(\"products\")\n    resetProducts.forEach((product, productInstance) => {\n      product.instances.forEach((instance, instanceIndex) => {\n        delete resetProducts[productInstance].instances[instanceIndex].infra;\n      })\n    })\n    TCO.setEditInfo(\"products\", resetProducts);\n    TCO.setEditInfo(\"numberOfAdmins\", null);\n    TCO.setEditInfo(\"adminSalary\", null);\n    TCO.setEditInfo(\"overhead\", true);\n    TCO.setEditInfo(\"plannedDowntime\", false);\n    TCO.setEditInfo(\"maxUserCount\", false);\n    TCO.setEditInfo(\"medianHourly\", false);\n    TCO.setEditInfo(\"downtimePerUpdate\", false);\n    TCO.setEditInfo(\"updatesPerYear\", false);\n    TCO.renderEditScreen();\n  }\n\n  static resetAnnualMaintenance() {\n    let resetProducts = TCO.getEditInfo(\"products\")\n    resetProducts.forEach((product, productInstance) => {\n      delete resetProducts[productInstance].customPrice;\n    });\n    TCO.setEditInfo(\"products\", resetProducts);\n    TCO.renderEditScreen();\n  }\n\n  static getAnnualMaintenanceSection(printVersion) {\n    let annualMaintenance = TCO.getEl({\n      className: \"maintenance-costs gray-card\"\n    })\n    annualMaintenance.appendChild(TCO.getEl({\n      tag: 'button',\n      innerHTML: Labels.get(\"resetSectionDefaults\"),\n      className: 'reset',\n      onclick: () => {\n        this.resetAnnualMaintenance()\n      }\n    }));\n\n    annualMaintenance.appendChild(TCO.getDottedLine({\n      label: Labels.get(\"annualMaintenance\"),\n      value: TCO.formatNum(Calc.getTotalAnnualMaintenance(TCO.getEditInfo())),\n      description: `<p>${Labels.get(\"annualMaintenanceDescription\")} </p>`\n    }));\n    let productsMaintenance = TCO.getEl({\n      className: 'nest-level-1 maintenance-products',\n      innerHTML: `\n      <div class=\"line-item labels-values\">\n        <div class=\"labels-side\"><h5 class=\"eyebrows\">${Labels.get(\"products\")}</h5></div>\n        <div class=\"values-side\"><h5 class=\"eyebrows\">${Labels.get(\"annualRenewalPrice\")}</h5></div>\n      </div>\n      `\n    })\n    TCO.getEditInfo(\"products\").forEach((product) => {\n      productsMaintenance.appendChild(TCO.getLineItem({\n        isPrintVersion: printVersion,\n        label: product.productTitle,\n        placeholder: TCO.formatNum(product.price, true),\n        value: product.customPrice ? TCO.formatNum(product.customPrice, true) : '',\n        sideLabel: TCO.currency(),\n        onchange: (e) => {\n          product.customPrice = TCO.sanitizedNum(e.target.value);\n          TCO.renderEditScreen();\n        }\n      }))\n    });\n\n    annualMaintenance.appendChild(productsMaintenance);\n    return annualMaintenance;\n  }\n\n  static getPageButtons() {\n    let buttonContainer = TCO.getEl({ className: 'container-fluid bottom-buttons' });\n    buttonContainer.appendChild(TCO.getEl({\n      tag: 'button',\n      className: 'button button--two button--regular button--secondary',\n      innerText: Labels.get(\"back\"),\n      onclick: () => {\n        TCO.track(\"Back\", \"Cancel edits\", TCO.getEditInfo());\n        TCO.renderResultsScreen();\n        window.scrollTo(0, 400);\n      }\n    }));\n    buttonContainer.appendChild(TCO.getEl({\n      tag: 'button',\n      className: 'button button--two button--regular button--primary',\n      innerText: Labels.get(\"updateResults\"),\n      onclick: () => {\n        TCO.track(\"Update results\", \"Recalculate\", TCO.getEditInfo());\n        TCO.saveEditInfo();\n        TCO.renderResultsScreen();\n        window.scrollTo(0, 400);\n      }\n    }));\n\n    return buttonContainer;\n  }\n}","import TCO from \"./tco-build\";\nimport Labels from \"./tco-labels\";\n\nlet activeDialogProduct = 0;\n\nexport default class TCOStart {\n  static getStartPage(withError?: boolean, withDialog?: boolean) {\n    let contain = TCO.getEl({ className: 'container-fluid start-screen' });\n    let row = TCO.getEl({ className: 'row' });\n    contain.appendChild(row);\n    row.appendChild(TCO.getEl({\n      tag: 'a',\n      className: 'admin-notice faux-link',\n      href: Labels.get(\"linkComparator\"),\n      target: \"_blank\",\n      innerHTML: Labels.get(\"adminNotice\"),\n      onclick: () => {\n        TCO.track(\"here\", \"Comparator link\");\n      }\n    }))\n    row.appendChild(this.getIntro());\n    let numOfProductsAvailable = Object.keys(TCO.getProducts()).filter(product => { return product.indexOf('access') == -1 }).length;\n    TCO.getInfo(\"products\").forEach((enteredProduct, productIndex) => {\n      row.appendChild(this.getProductLineItem(productIndex, withError));\n    });\n    if (TCO.getInfo(\"products\").length < numOfProductsAvailable) {\n      row.appendChild(this.getProductLineItemAdder());\n    }\n    row.appendChild(this.getCostEstimatorButton());\n    if (withDialog) {\n      contain.appendChild(this.getDialogWindow())\n    }\n\n    return contain;\n  }\n\n  static getIntro() {\n    return TCO.getEl({\n      className: 'column text-center',\n      innerHTML: `\n        <h3>${Labels.get(\"heading\")}</h3>\n        <p>${Labels.get(\"subHeading\")}</p>`\n    });\n  }\n\n  static syncDropdownProduct(productIndex: number, option) {\n    let theseProducts = TCO.getInfo(\"products\");\n    theseProducts[productIndex].chosenProductKey = option.value;\n    theseProducts[productIndex].productTitle = option.selectedOptions ? option.selectedOptions[0].dataset.title : option.dataset.title;\n    theseProducts[productIndex].deployment = option.selectedOptions ? option.selectedOptions[0].dataset.deployment : option.dataset.title;\n\n    TCO.setInfo(\"products\", theseProducts);\n  }\n\n  static getProductsDropdown(productIndex: number) {\n    let thisProductLineItem = TCO.getInfo(\"products\")[productIndex];\n    let firstAvailableProduct = thisProductLineItem.chosenProductKey;\n    let buttonsContainer = TCO.getEl({ className: 'buttons-container' })\n    let allEl = TCO.getEl();\n    let selectEl = TCO.getEl({ tag: 'select' });\n    for (var product in TCO.getProducts()) {\n      let optionProduct = TCO.getProducts(product);\n      let optionString = ``;\n      let isActiveProduct = thisProductLineItem.chosenProductKey == product;\n      let isDisabledProduct = TCO.getInfo(\"products\").map(prod => { return prod.chosenProductKey }).includes(product) && product != thisProductLineItem.chosenProductKey;\n\n      if (product.indexOf('access') == -1) {\n        optionString += `\n          <option ${isActiveProduct ? 'selected' : ''} data-title=\"${optionProduct.productTitle}\" data-deployment=\"${optionProduct.deployment}\" value=\"${product}\" ${isDisabledProduct ? 'disabled' : ''}>\n            ${optionProduct.productTitle} \n          </option>`;\n        selectEl.innerHTML += optionString;\n        buttonsContainer.appendChild(TCO.getEl({\n          tag: 'button',\n          dataTitle: optionProduct.productTitle,\n          dataDeployment: optionProduct.deployment,\n          innerText: optionProduct.productTitleDropdown,\n          className: `product-selector ${isDisabledProduct ? 'disabled' : (isActiveProduct ? 'active' : '')}`,\n          dataTooltip: isDisabledProduct ? Labels.get(\"productDisabledTooltip\") : '',\n          tabIndex: isDisabledProduct ? -1 : '',\n          value: product,\n          onclick: (e) => {\n            if (!isDisabledProduct) {\n              this.syncDropdownProduct(productIndex, e.target)\n              TCO.renderStartScreen();\n              TCO.track(e.target.value, \"Change product\");\n            } else {\n              e.target.classList.add('tooltip');\n            }\n          }\n        }));\n\n        if (firstAvailableProduct == '' && !thisProductLineItem.deployment && !isDisabledProduct) {\n          firstAvailableProduct = product;\n        }\n      }\n    }\n\n    let firstAvailableProductObject = TCO.getProducts(firstAvailableProduct);\n\n    let fakeSelectEl = TCO.getEl({\n      tag: 'button',\n      className: 'fake-select hidden',\n      dataTitle: firstAvailableProductObject.productTitle,\n      dataDeployment: firstAvailableProductObject.productTitle,\n      value: firstAvailableProductObject.productTitle,\n      innerText: firstAvailableProductObject.productTitle,\n      onmousedown: (e) => {\n        e.preventDefault();\n        let elsContainer = e.target.nextElementSibling;\n        elsContainer.style.display = (elsContainer.style.display == 'block' ? 'none' : 'block');\n      },\n      onfocus: (e) => {\n        e.target.nextElementSibling.style.display = 'block';\n      }\n    });\n\n    this.syncDropdownProduct(productIndex, selectEl);\n\n    allEl.appendChild(selectEl);\n    allEl.appendChild(fakeSelectEl);\n    allEl.appendChild(buttonsContainer);\n    return allEl;\n  }\n\n  static getProductInstances(productIndex: number, withError?: boolean) {\n    let thisProductLineItem = TCO.getInfo(\"products\")[productIndex];\n    let thisProduct = TCO.getInfo(\"products\")[productIndex];\n    let productKey = thisProductLineItem.chosenProductKey;\n    let productInfo = TCO.getProducts(productKey);\n    let ulElement = TCO.getEl({\n      tag: 'ul',\n      innerHTML: `<p>${productInfo.labels.userTiers}</p>`\n    });\n    thisProductLineItem.instances.forEach((_instance: any, instanceIndex: number) => {\n      let thisProductInstance = thisProduct.instances[instanceIndex];\n      let liEl = TCO.getEl({\n        tag: \"li\",\n        innerHTML: `<p class=\"bold\">${Labels.get(\"instanceLabel\")} ${instanceIndex + 1} - ${productInfo.labels.howManyUsers}</p>`\n      });\n\n      let textInput = TCO.getEl({\n        tag: 'input',\n        type: 'text',\n        className: withError && TCO.isNotValidNumOfUsers(thisProductInstance.users, productKey) ? 'error' : '',\n        autocomplete: 'off',\n        id: `instance${productIndex}${instanceIndex}`,\n        value: thisProductInstance.users > 0 ? thisProductInstance.users : \"\",\n        onkeyup: (e) => {\n          window.focused = `instance${productIndex}${instanceIndex}`;\n          thisProductInstance.users = TCO.sanitizedNum(e.target.value);\n          TCO.renderStartScreen();\n        }\n      })\n      liEl.appendChild(textInput);\n      if (withError && TCO.isNotValidNumOfUsers(thisProductInstance.users, productKey)) {\n        liEl.appendChild(TCO.getEl({\n          className: 'error',\n          innerHTML: TCO.errorSVG(),\n          htmlNode: TCO.getEl({\n            tag: 'a',\n            href: thisProductInstance.users > TCO.getMaxNumUsers(productKey) ? Labels.get(\"linkContact\") : '',\n            target: \"_blank\",\n            className: 'faux-link',\n            innerHTML: thisProductInstance.users > TCO.getMaxNumUsers(productKey) ? Labels.get(\"errorTooHigh\").replace('{{xxx}}', TCO.getMaxNumUsers(productKey)).replace('{{yyy}}', productInfo.labels.users) : Labels.get(\"errorBlank\"),\n            onclick: () => {\n              if (thisProductInstance.users > TCO.getMaxNumUsers(productKey)) {\n                TCO.track(\"Contact us\");\n              }\n            }\n          })\n        }));\n      }\n      if (thisProductLineItem.instances.length > 1) {\n        liEl.appendChild(this.getProductInstanceRemover(productIndex, instanceIndex));\n      }\n      ulElement.appendChild(liEl);\n    });\n    if (thisProductLineItem.instances.length < 5) {\n      ulElement.appendChild(this.getProductInstanceAdder(productIndex));\n    } else {\n      ulElement.appendChild(TCO.getEl({\n        tag: \"li\",\n        className: \"contact-for-more\",\n        htmlNode: TCO.getEl({\n          tag: \"a\",\n          href: Labels.get(\"linkContact\"),\n          className: \"faux-link\",\n          target: \"_blank\",\n          innerHTML: Labels.get(\"contactForMoreInstances\"),\n          onclick: () => {\n            TCO.track(\"Contact us\")\n          }\n        })\n      }\n      ));\n    }\n    return ulElement;\n  }\n\n  static getProductInstanceRemover(productIndex: number, instanceIndex: number) {\n    return TCO.getEl({\n      tag: \"button\",\n      title: Labels.get(\"remove\"),\n      className: \"remove-instance\",\n      innerHTML: \"✕\",\n      onclick: () => {\n        let theseProducts = TCO.getInfo(\"products\");\n        theseProducts[productIndex].instances.splice(instanceIndex, 1)\n        TCO.setInfo(\"products\", theseProducts);\n        TCO.renderStartScreen();\n        TCO.track(\"Remove product instance\");\n      }\n    })\n  }\n\n  static getProductInstanceAdder(productIndex: number) {\n    let theseProducts = TCO.getInfo(\"products\");\n    let thisProduct = theseProducts[productIndex];\n    let isDisabled = thisProduct.instances[thisProduct.instances.length - 1].users < 1;\n    return TCO.getEl({\n      tag: \"button\",\n      className: `add-instance ${isDisabled ? 'inactive' : ''}`,\n      innerHTML: `<span class=\"plus\">+</span> ${Labels.get(\"addAnotherInstance\")}<span class=\"tooltip\" data-tooltip=\"${Labels.get(\"instanceTooltip\").replace(/<br>/g, '\\n')}\"></span>`,\n      onclick: () => {\n        if (!isDisabled) {\n          thisProduct.instances.push({ users: 0 });\n          TCO.setInfo(\"products\", theseProducts);\n          TCO.renderStartScreen();\n          TCO.track(\"Add product\");\n        }\n      }\n    });\n  }\n\n  static getProductLineItem(productIndex: number, withError?: boolean) {\n    let productKey = TCO.getInfo(\"products\")[productIndex].chosenProductKey ? TCO.getInfo(\"products\")[productIndex].chosenProductKey : [Object.keys(TCO.getProducts())[0]];\n    let productInfo = TCO.getProducts(productKey);\n    let productLineItem = TCO.getEl({ className: \"product-selected gray-card\", onclick: (e) => { if (e.target.querySelector('.buttons-container')) { e.target.querySelector('.buttons-container').style.display = 'none'; } } });\n    let inner = TCO.getEl({ className: \"product-inner\" });\n    productLineItem.appendChild(inner);\n\n    if (TCO.getInfo(\"products\").length > 1) {\n      productLineItem.appendChild(this.getProductLineItemRemover(productIndex));\n    }\n    inner.appendChild(TCO.getEl({ tag: 'h3', innerHTML: `${Labels.get(\"productAndDeployment\")} <span class=\"tooltip\" data-tooltip=\"${Labels.get(\"productTooltip\").replace(/<br>/g, '\\n')}\"></span>` }));\n    inner.appendChild(this.getProductsDropdown(productIndex));\n    inner.appendChild(TCO.getEl({ tag: 'h3', innerHTML: productInfo.labels.instancesAndUsers }));\n    inner.appendChild(this.getProductInstances(productIndex, withError));\n    return productLineItem;\n  }\n\n  static getProductLineItemAdder() {\n    let container = TCO.getEl({ className: 'add-more-products' });\n    container.appendChild(TCO.getEl({\n      tag: \"button\",\n      className: \"add-product-line-item\",\n      innerHTML: `<span>+</span> ${Labels.get(\"addAnotherProduct\")}`,\n      onclick: () => {\n        let allProducts = TCO.getInfo(\"products\");\n        allProducts.push({ chosenProductKey: \"\", instances: [{ users: 0 }] });\n        TCO.setInfo(\"products\", allProducts);\n        TCO.renderStartScreen();\n        TCO.track(\"Add another product\");\n      }\n    }));\n    return container;\n  }\n\n  static getCostEstimatorButton() {\n    let container = TCO.getEl({ className: 'estimate-costs' });\n    container.appendChild(TCO.getEl({\n      tag: \"button\",\n      className: \"button button--two button--regular button-primary\",\n      innerHTML: Labels.get(\"estimate\"),\n      onclick: () => {\n        if (TCO.isValidEntry()) {\n          TCO.renderResultsScreen();\n          TCO.scrollToBeginning();\n          TCO.track(\"Estimate\", \"invalid entry\");\n        } else {\n          TCO.renderStartScreen(true);\n          TCO.track(\"Estimate\");\n        }\n      }\n    }));\n    return container;\n  }\n\n  static getProductLineItemRemover(productIndex: number) {\n    return TCO.getEl({\n      tag: 'button',\n      className: 'delete-product-line-item',\n      innerHTML: `<span>✕</span> ${Labels.get(\"remove\")}`,\n      onclick: () => {\n        activeDialogProduct = productIndex;\n        TCO.renderStartScreen(false, true);\n        TCO.track(\"Remove product\");\n      }\n    });\n  }\n\n  static getDialogWindow() {\n    let outer = TCO.getEl({ className: 'outer-dialog' });\n    let inner = TCO.getEl({\n      className: 'inner-dialog',\n      innerHTML: `\n        <h3>${Labels.get(\"removeProductHeadline\")}</h3>\n        <p>${Labels.get(\"removeProductDescription\")}</p>\n      `\n    });\n    inner.appendChild(TCO.getEl({\n      innerText: Labels.get(\"confirm\"),\n      tag: 'button',\n      className: \"button button--one button--regular button--primary\",\n      onclick: () => {\n        let allProducts = TCO.getInfo(\"products\");\n        allProducts.splice(activeDialogProduct, 1);\n        TCO.setInfo(\"products\", allProducts);\n        TCO.renderStartScreen();\n        TCO.track(\"Confirm\", \"Confirmed remove product\");\n      }\n    }));\n    inner.appendChild(TCO.getEl({\n      innerText: Labels.get(\"cancel\"),\n      tag: 'button',\n      className: \"button button--one button--regular button--secondary\",\n      onclick: () => {\n        TCO.renderStartScreen();\n        TCO.track(\"Cancel\", \"Cancelled remove product\");\n      }\n    }));\n\n    outer.appendChild(inner);\n\n    return outer;\n  }\n}\n","import TCO from \"./tco-build\";\nimport TCOEdit from \"./tco-screen-edit\";\nimport Calc from \"./tco-calc\";\nimport Labels from \"./tco-labels\";\n\nlet yMax = 0;\n\nexport default class TCOResults {\n  static getResultsPage() {\n    /* calculate prices */\n\n    TCO.getInfo(\"products\").forEach((product) => {\n      product.instances.forEach((instance) => {\n        instance.price =\n          TCO.getContentfulPricing(\n            product.chosenProductKey,\n            product.deployment,\n            instance.users\n          ) * (product.deployment == \"server\" ? 0.5 : 1);\n        instance.cloudStandard = TCO.getContentfulPricing(\n          product.chosenProductKey,\n          \"cloudStandard\",\n          instance.users\n        );\n        instance.cloudPremium = TCO.getContentfulPricing(\n          product.chosenProductKey,\n          \"cloudPremium\",\n          instance.users\n        );\n      });\n      product.price = product.instances.reduce((sum, instance) => {\n        return sum + instance.price;\n      }, 0);\n      product.cloudStandard = product.instances.reduce((sum, instance) => {\n        return sum + instance.cloudStandard;\n      }, 0);\n      product.cloudPremium = product.instances.reduce((sum, instance) => {\n        return sum + instance.cloudPremium;\n      }, 0);\n    });\n    TCO.setInfo(\n      \"accessPrice\",\n      TCO.getContentfulPricing(\n        \"atlassian_access\",\n        \"cloud\",\n        Calc.getHighestUsersAmongInstances(TCO.getInfo())\n      )\n    );\n\n    yMax = Math.max(\n      Calc.getTotalSelfManagedCosts(TCO.getInfo()),\n      this.getCloudTotal()\n    );\n\n    let contain = TCO.getEl({ className: \"result-screen\" });\n    contain.appendChild(this.getGraph());\n    contain.appendChild(this.getComparison());\n    contain.appendChild(TCO.getEl({ innerHTML: TCO.getResultsContent() }));\n    contain.appendChild(this.getResultFooter());\n\n    return contain;\n  }\n\n  static getGraph() {\n    let subHeadline = \"\";\n    if (Calc.getTotalSelfManagedCosts(TCO.getInfo()) > this.getCloudTotal()) {\n      let cost = TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo()));\n      subHeadline = `<h3>${Labels.get(\"resultSubheadSavings\").replace(\n        \"{{xxx}}\",\n        cost\n      )}</h3>`;\n    }\n    let graph = TCO.getEl({\n      className: \"graph-contain container-fluid xs-comfortable-top\",\n      innerHTML: `\n        <div class=\"row flex-container\">\n          <div class=\"headline column-lg-4 column-md-12\">\n            ${this.getHeadline()}\n          </div>\n          <div class=\"graph column-lg-8 column-md-12\">\n            <div class=\"card-outer\">\n            <div class=\"card\">\n            <div class=\"x-axis x1 labels\" style=\"height: ${\n              (Calc.getTotalSelfManagedCosts(TCO.getInfo()) / yMax) * 100\n            }%;\">\n              <div class=\"op-costs\" style=\"height: ${\n                (Calc.getTotalOperationalCosts(TCO.getInfo()) /\n                  Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n                100\n              }%;\">\n                ${Labels.get(\"operationalCosts\")}\n              </div>\n              <div class=\"annual-maintenance\" style=\"height: ${\n                (Calc.getTotalAnnualMaintenance(TCO.getInfo()) /\n                  Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n                100\n              }%;\">\n                ${Labels.get(\"annualMaintenanceLicenses\")}\n              </div>\n            </div>\n            <div class=\"x-axis x2 rectangles\" style=\"height: ${\n              (Calc.getTotalSelfManagedCosts(TCO.getInfo()) / yMax) * 100\n            }%;\">\n              <h4>${Labels.get(\"selfManaged\")}</h4>\n\n              <div class=\"y100\" style=\"height: ${\n                (Calc.getTotalOperationalCosts(TCO.getInfo()) /\n                  Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n                100\n              }%;\">\n                <h5>${TCO.formatNum(\n                  Calc.getTotalSelfManagedCosts(TCO.getInfo())\n                )}</h5>\n              </div>\n              <div class=\"y200\" style=\"height: ${\n                (Calc.getTotalAnnualMaintenance(TCO.getInfo()) /\n                  Calc.getTotalSelfManagedCosts(TCO.getInfo())) *\n                100\n              }%;\"></div>\n\n            </div>\n            <div class=\"x-axis x3 rectangles\" style=\"height: 100%;\">\n              <h4>${Labels.get(\"cloud\")}</h4>\n\n              <div class=\"t300\" style=\"height: ${\n                (this.getCloudTotal() / yMax) * 100\n              }%;\">\n                <h5>${TCO.formatNum(this.getCloudTotal())}</h5>\n\n              </div>\n            </div>\n            <div class=\"x-axis x4\" style=\"height: 100%;\">\n              <div style=\"height: ${(this.getCloudTotal() / yMax) * 100}%;\">\n                ${Labels.get(\"atlassianCloudSubscriptionService\")}\n              </div>\n            </div>\n            </div>\n            </div>\n            ${subHeadline}\n          </div>\n        </div>\n    `,\n    });\n    return graph;\n  }\n\n  static getCloudTotal() {\n    return Calc.getTotalCloudCosts(TCO.getInfo(), TCO.getProducts());\n  }\n\n  static getHeadline() {\n    let tagline;\n    let costs;\n    if (Calc.getTotalSelfManagedCosts(TCO.getInfo()) < this.getCloudTotal()) {\n      costs = TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo()));\n      tagline = `<img src=\"${Labels.get(\"imageNoSavings\")}\"><h2>${Labels.get(\n        \"resultHeadlineNoSavings\"\n      )}</h2>`;\n    } else {\n      costs = TCO.formatNum(\n        Calc.getTotalSelfManagedCosts(TCO.getInfo()) - this.getCloudTotal()\n      );\n      tagline = `<img src=\"${Labels.get(\"imageSavings\")}\"><h1>${Labels.get(\n        \"resultHeadlineSavings\"\n      )}</h1>`;\n    }\n    return tagline.replace(\"{{xxx}}\", costs);\n  }\n\n  static getComparison(print) {\n    let contain = TCO.getEl({\n      className: print ? \"n0\" : \"b50\",\n      innerHTML: print\n        ? \"\"\n        : `<svg class=\"curve-container__curve n0\" viewBox=\"10 -20 1870 210\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">  <path fill=\"#DEEBFF\" d=\"M977.9,76.2 C475.2,-17.4 0.2,132.5 0.2,132.5 L0.2,275.5 L1891.3,275.5 L1891.3,0.7 C1891.3,0.7 1480.6,169.8 977.9,76.2 Z\"></path> </svg>`,\n    });\n    let innerRow = TCO.getEl({ className: \"row flex-container\" });\n    contain.appendChild(innerRow);\n    innerRow.appendChild(this.getSelfManagedSection(print));\n    innerRow.appendChild(this.getCloudSection(print));\n    if (!print) {\n      innerRow.appendChild(\n        TCO.getEl({\n          tag: \"button\",\n          innerHTML: `&#10226; ${Labels.get(\"startOver\")}`,\n          className:\n            \"start-over button button--one button--regular button--secondary\",\n          onclick: () => {\n            TCO.resetInfo();\n            TCO.renderStartScreen();\n            TCO.scrollToBeginning();\n            TCO.track(\"Start over\");\n          },\n        })\n      );\n    }\n\n    return contain;\n  }\n\n  static getSelfManagedSection(print) {\n    let style = print ? this.getPrintStyle() : \"\";\n    let self = TCO.getEl({\n      className: \"half self-managed\",\n      style: style,\n      innerHTML: `\n        <h2>${Labels.get(\"selfManagedCosts\")}</h2>\n        <p class=\"self-managed-description\">${\n          print ? \"\" : Labels.get(\"selfManagedDescription\")\n        } </p>\n      `,\n    });\n    self.appendChild(\n      TCO.getDottedLine({\n        label: Labels.get(\"operationalCosts\"),\n        value: TCO.formatNum(Calc.getTotalOperationalCosts(TCO.getInfo())),\n      })\n    );\n\n    let selfOpCosts = TCO.getEl({ className: \"nest-level-3\" });\n\n    /* infrastructure costs */\n    selfOpCosts.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: Labels.get(\"infrastructure\"),\n        value: TCO.formatNum(Calc.getTotalInfrastructureCost(TCO.getInfo())),\n      })\n    );\n\n    /* IT labor costs */\n    selfOpCosts.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: Labels.get(\"itLabor\"),\n        value: TCO.formatNum(Calc.getTotalITLaborCost(TCO.getInfo())),\n      })\n    );\n\n    /* planned downtime costs */\n    selfOpCosts.appendChild(\n      TCO.getDottedLine({\n        isPrintVersion: print,\n        tag: \"p\",\n        label: Labels.get(\"plannedDowntime\"),\n        tooltip: Labels.get(\"plannedDowntimeTooltip\"),\n        tooltipNum: 1,\n        id: \"planned-downtime-toggle\",\n        onchange: (e) => {\n          TCO.track(\"Planned downtime\");\n          TCO.setInfo(\"plannedDowntime\", e.target.checked);\n          TCO.renderResultsScreen();\n        },\n        checked: TCO.getInfo(\"plannedDowntime\"),\n        value: TCO.formatNum(Calc.getPlannedDowntimeCosts(TCO.getInfo())),\n      })\n    );\n    self.appendChild(selfOpCosts);\n\n    self.appendChild(\n      TCO.getDottedLine({\n        label: Labels.get(\"annualMaintenance\"),\n        value: TCO.formatNum(Calc.getTotalAnnualMaintenance(TCO.getInfo())),\n      })\n    );\n    let selfMaintenance = TCO.getEl({ className: \"nest-level-3\" });\n\n    /* product maintenance costs */\n    TCO.getInfo(\"products\").forEach((product) => {\n      selfMaintenance.appendChild(\n        TCO.getDottedLine({\n          tag: \"p\",\n          label: product.productTitle,\n          value: product.customPrice\n            ? product.customPrice\n            : TCO.formatNum(product.price),\n        })\n      );\n    });\n    selfMaintenance.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: \"&nbsp;\",\n        value: \"&nbsp;\",\n        className: \"transp\",\n      })\n    );\n    self.appendChild(selfMaintenance);\n    if (Calc.getHighestUsersAmongInstances(TCO.getInfo()) > 1000) {\n      /* spacer for loyalty discount */\n      self.appendChild(\n        TCO.getDottedLine({\n          label: \"&nbsp;\",\n          value: \"&nbsp;\",\n          className: \"transp\",\n        })\n      );\n    }\n\n    /* self managed costs */\n    self.appendChild(\n      TCO.getDottedLine({\n        className: \"total\",\n        tag: \"h2\",\n        label: Labels.get(\"total\"),\n        value: TCO.formatNum(Calc.getTotalSelfManagedCosts(TCO.getInfo())),\n      })\n    );\n    self.appendChild(\n      TCO.getEl({\n        className: \"after-half\",\n        innerHTML: `${Labels.get(\"curious\")} <br>`,\n        htmlNode: TCO.getEl({\n          tag: \"button\",\n          className: \"component__link link-arrow\",\n          innerHTML: Labels.get(\"editAssumptions\") + TCO.linkArrow(),\n          onclick: () => {\n            TCO.syncInfoToEditMode();\n            TCO.renderEditScreen();\n            TCO.track(\"Edit assumptions\");\n            TCO.scrollToBeginning();\n          },\n        }),\n      })\n    );\n\n    return self;\n  }\n\n  static getCloudSection(print) {\n    let style = print ? this.getPrintStyle() : \"\";\n    let cloud = TCO.getEl({\n      className: \"half cloud\",\n      style: style,\n      innerHTML: `<h2>${Labels.get(\"cloudComparison\")}</h2>`,\n    });\n    let switcher = TCO.getEl({ className: \"switcher\" });\n    switcher.appendChild(\n      TCO.getEl({\n        tag: \"button\",\n        className: TCO.getInfo(\"edition\") == \"standard\" ? \"active\" : \"\",\n        innerText: Labels.get(\"standard\"),\n        onclick: () => {\n          TCO.setInfo(\"edition\", \"standard\");\n          TCO.renderResultsScreen();\n          TCO.track(\"Standard edition\");\n        },\n      })\n    );\n    switcher.appendChild(\n      TCO.getEl({\n        tag: \"button\",\n        className: TCO.getInfo(\"edition\") == \"premium\" ? \"active\" : \"\",\n        innerText: Labels.get(\"premium\"),\n        onclick: () => {\n          TCO.setInfo(\"edition\", \"premium\");\n          TCO.renderResultsScreen();\n          TCO.track(\"Premium edition\");\n        },\n      })\n    );\n    switcher.appendChild(\n      TCO.getEl({\n        tag: \"span\",\n        className: \"tooltip\",\n        dataTooltip: Labels.get(\"editionTooltip\"),\n      })\n    );\n\n    if (!print) {\n      cloud.appendChild(switcher);\n    }\n\n    /* operational costs */\n    cloud.appendChild(\n      TCO.getDottedLine({\n        label: Labels.get(\"operationalCosts\"),\n        value: TCO.formatNum(0),\n      })\n    );\n\n    let cloudOpCosts = TCO.getEl({ className: \"nest-level-3\" });\n    cloudOpCosts.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: Labels.get(\"infrastructure\"),\n        value: TCO.formatNum(0),\n      })\n    );\n    cloudOpCosts.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: Labels.get(\"itLabor\"),\n        value: TCO.formatNum(0),\n      })\n    );\n    cloudOpCosts.appendChild(\n      TCO.getDottedLine({\n        tag: \"p\",\n        label: Labels.get(\"plannedDowntime\"),\n        value: TCO.formatNum(0),\n      })\n    );\n    cloud.appendChild(cloudOpCosts);\n\n    /* annual subscriptions */\n    cloud.appendChild(\n      TCO.getDottedLine({\n        isPrintVersion: print,\n        label: Labels.get(\"annualSubscriptions\"),\n        tooltip: Labels.get(\"annualSubscriptionsTooltip\"),\n        tooltipNum: 2,\n        value: TCO.formatNum(\n          Calc.getTotalAnnualCloudSubscription(TCO.getInfo(), TCO.getProducts())\n        ),\n      })\n    );\n    let annualSubscriptions = TCO.getEl({ className: \"nest-level-3\" });\n\n    TCO.getInfo(\"products\").forEach((product) => {\n      /* adjusted for missing premium prices */\n      let cloudType =\n        TCO.getInfo(\"edition\") == \"standard\" ? \"cloudStandard\" : \"cloudPremium\";\n      let productInfo = TCO.getProducts(product.chosenProductKey);\n      let productGenericTitle = productInfo.productTitleGeneric;\n      let isAvailable = productInfo[cloudType].available;\n      let numPrice = product[cloudType];\n      let shownPrice = isAvailable\n        ? TCO.formatNum(numPrice)\n        : TCO.formatNum(product.cloudStandard);\n      let suffix =\n        TCO.getInfo(\"edition\") == \"premium\" && isAvailable\n          ? Labels.get(\"premium\")\n          : Labels.get(\"standard\");\n      let tooltip = !isAvailable\n        ? TCO.getEl({\n            tag: \"span\",\n            className: \"tooltip\",\n            dataTooltip: Labels.get(\"priceUnavailable\"),\n          }).outerHTML\n        : \"\";\n      annualSubscriptions.appendChild(\n        TCO.getDottedLine({\n          tag: \"p\",\n          label: `${productGenericTitle} ${suffix} ${tooltip}`,\n          value: shownPrice,\n        })\n      );\n    });\n\n    /* atlassian access */\n    annualSubscriptions.appendChild(\n      TCO.getDottedLine({\n        isPrintVersion: print,\n        tag: \"p\",\n        label: \"Atlassian Access\",\n        tooltip: Labels.get(\"atlassianAccessTooltip\"),\n        tooltipNum: 3,\n        id: \"atlassian-access-toggle\",\n        onchange: (e) => {\n          TCO.track(\"Atlassian Access\");\n          TCO.setInfo(\"useAccess\", e.target.checked);\n          TCO.renderResultsScreen();\n        },\n        checked: TCO.getInfo(\"useAccess\"),\n        value: TCO.formatNum(\n          TCO.getInfo(\"useAccess\") ? TCO.getInfo(\"accessPrice\") : 0\n        ),\n      })\n    );\n\n    cloud.appendChild(annualSubscriptions);\n\n    cloud.appendChild(\n      TCO.getDottedLine({\n        className: \"total\",\n        tag: \"h2\",\n        label: Labels.get(\"total\"),\n        value: TCO.formatNum(\n          Calc.getTotalCloudCosts(TCO.getInfo(), TCO.getProducts())\n        ),\n      })\n    );\n    cloud.appendChild(\n      TCO.getEl({\n        className: \"after-half\",\n        innerHTML: Labels.get(\"cloudDiscounts\"),\n      })\n    );\n    return cloud;\n  }\n\n  static getPrintStyle() {\n    return \"float: left; width: 46%; padding: 2%; margin: 0;\";\n  }\n\n  static getResultFooter() {\n    let allFooters = TCO.getEl();\n    let contain = TCO.getEl({\n      className: \"container-fluid n20 xs-comfortable\",\n    });\n    let row = TCO.getEl({ className: \"row reduced-row flex-container\" });\n    contain.appendChild(row);\n    let col1 = TCO.getEl({\n      className: \"column column-md-8\",\n      innerHTML: Labels.get(\"whatsNext\"),\n      htmlNode: TCO.getEl({\n        tag: \"a\",\n        href: Labels.get(\"linkLearnMore\"),\n        className: \"button button--one button--regular button--primary\",\n        innerText: Labels.get(\"getStarted\"),\n        onclick: () => {\n          TCO.track(\"Get started\");\n        },\n      }),\n    });\n\n    let col2 = TCO.getEl({\n      className: \"column column-md-4 column--vertical-rule left-2 left-n50\",\n    });\n    col2.appendChild(\n      TCO.getEl({\n        innerHTML: Labels.get(\"saveEstimate\"),\n        htmlNode: TCO.getEl({\n          tag: \"button\",\n          className:\n            \"button button--one button--regular button--secondary download-pdf\",\n          innerHTML: Labels.get(\"downloadPDF\"),\n          onclick: (e) => {\n            e.target.classList.add(\"printing\");\n            let options = {\n              margin: 0.5,\n              filename: \"report.pdf\",\n              image: { type: \"jpeg\", quality: 0.98 },\n              html2canvas: { scale: 1 },\n              jsPDF: { unit: \"in\", format: \"a3\", orientation: \"landscape\" },\n            };\n            let printContainer = TCO.getEl();\n            TCO.syncInfoToEditMode();\n            printContainer.innerHTML +=\n              this.getComparison(true).outerHTML +\n              `<div class=\"html2pdf__page-break\"></div>\n            <h1>${Labels.get(\"editHeadline\")}:</h1>` +\n              TCOEdit.getEditPage(true).outerHTML +\n              `<ol class=\"plain-numbers\">\n                <li>1. ${Labels.get(\"plannedDowntimeTooltip\")}</li>\n                <li>2. ${Labels.get(\"annualSubscriptionsTooltip\")}</li>\n                <li>3. ${Labels.get(\"atlassianAccessTooltip\")}</li>\n                <li>4. ${Labels.get(\"loyaltyTooltip\")}</li>\n                <li>5. ${Labels.get(\"infrastructureTooltip\")}</li>\n                <li>6. ${Labels.get(\"itLaborTooltip\")}</li>\n                <li>7. ${Labels.get(\"plannedDowntimeEditTooltip\")}</li>\n              </ol>\n              <p class=\"text-small\">${Labels.get(\"footnoteResults\")}</p>\n              `;\n\n            import(\n              /* webpackChunkName: \"html2pdf\" */\n              \"js-html2pdf\"\n            ).then((html2pdf) => {\n              var exporter = new html2pdf.default(printContainer, options);\n\n              exporter\n                .getPdf(true)\n                .then(() => {\n                  e.target.classList.remove(\"printing\");\n                })\n                .error((err) => {\n                  console.log(err);\n                });\n\n              TCO.track(\"Print estimate\");\n            });\n          },\n        }),\n      })\n    );\n\n    col2.appendChild(\n      TCO.getEl({\n        innerHTML: Labels.get(\"needToTalk\"),\n        htmlNode: TCO.getEl({\n          tag: \"a\",\n          href: Labels.get(\"linkContactResults\"),\n          className: \"button button--link contact-us\",\n          innerHTML: Labels.get(\"contactUs\"),\n          onclick: () => {\n            TCO.track(\"Contact us\");\n          },\n        }),\n      })\n    );\n\n    row.appendChild(col1);\n    row.appendChild(col2);\n\n    let footnoteContainer = TCO.getEl({ className: \"container-fluid n0\" });\n    footnoteContainer.appendChild(\n      TCO.getEl({\n        className: \"row reduced-row\",\n        htmlNode: TCO.getEl({\n          className: \"column\",\n          innerHTML: `<p>${Labels.get(\"footnoteResults\")}</p>`,\n        }),\n      })\n    );\n    allFooters.appendChild(contain);\n    allFooters.appendChild(footnoteContainer);\n\n    return allFooters;\n  }\n}\n","import TCOEdit from \"./tco-screen-edit\";\nimport TCOStart from \"./tco-screen-start\";\nimport TCOResults from \"./tco-screen-results\";\nimport tracking from '../../../utils/tracking';\n\nconst indexKeys = {\n  0: 'first',\n  1: 'second',\n  2: 'third',\n  3: 'fourth',\n  4: 'fifth',\n  5: 'sixth',\n  6: 'seventh',\n  7: 'eight',\n  8: 'ninth',\n  9: 'tenth',\n  10: 'eleventh',\n  11: 'twelfth',\n  12: 'thirteenth',\n  13: 'fourteenth',\n  14: 'fifteenth'\n};\n\ntype Product = {\n  chosenProductKey: string,\n  productTitle: string,\n  deployment: string,\n  instances: any[]\n};\n\nlet editInfo: any = {};\nlet tcoDom: HTMLElement;\nlet info: {\n  edition: string,\n  useAccess: boolean,\n  accessPrice: number,\n  overhead: boolean,\n  plannedDowntime: boolean,\n  products: Product[],\n}\nlet products: Product[];\nlet resultsContent: any;\nlet currencyCode: string;\n\nexport default class TCO {\n\n  static init(passedDom: HTMLElement, passedProducts: Product[], results: any, currency: string) {\n    products = passedProducts;\n    info = this.getEmptyStart();\n    tcoDom = passedDom;\n    resultsContent = results;\n    currencyCode = currency;\n    this.renderStartScreen();\n\n    tcoDom.addEventListener('click', (e) => {\n      if (!e.target.tagName.match(/input|textarea/)) {\n        window.focused = null;\n      }\n    });\n\n    window.addEventListener('hashchange', () => {\n      if (window.location.hash == '') {\n        this.renderStartScreen();\n      } else if (this.isValidEntry()) {\n        if (window.location.hash == \"#results\") {\n          this.renderResultsScreen();\n        } else if (window.location.hash == \"#edit\") {\n          this.renderEditScreen();\n        }\n      }\n    })\n  }\n\n  static scrollToBeginning() {\n    tcoDom.scrollIntoView();\n  }\n\n  static getEmptyStart() {\n    let firstProduct = Object.keys(products)[0];\n    let emptyObject = {\n      edition: 'standard',\n      useAccess: true,\n      accessPrice: 0,\n      overhead: true,\n      plannedDowntime: false,\n      products: [{\n        chosenProductKey: firstProduct,\n        productTitle: products[firstProduct].productKey,\n        deployment: products[firstProduct].deployment,\n        instances: [{ users: 0 }]\n      }]\n    }\n    return emptyObject;\n  }\n\n  static resetInfo() {\n    for (var key in info) {\n      delete info[key];\n    }\n    info = this.getEmptyStart();\n  }\n\n  static getProducts(key) {\n    return key ? products[key] : products;\n  }\n\n  static currency() {\n    return currencyCode;\n  }\n\n  static labels(label) {\n    return labels[label];\n  }\n\n  static getInfo(key) {\n    return key ? info[key] : info;\n  }\n\n  static setInfo(key, val) {\n    if (val == null) {\n      delete info[key];\n    } else {\n      info[key] = val;\n    }\n  }\n\n  static getEditInfo(key) {\n    return key ? editInfo[key] : editInfo;\n  }\n\n  static setEditInfo(key, val) {\n    if (val == null) {\n      delete editInfo[key];\n    } else {\n      editInfo[key] = val;\n    }\n  }\n\n  static syncInfoToEditMode() {\n    editInfo = JSON.parse(JSON.stringify(info));\n  }\n\n  static saveEditInfo() {\n    info = JSON.parse(JSON.stringify(editInfo));\n  }\n\n  static getResultsContent() {\n    return resultsContent;\n  }\n\n  static getContentfulPricing(product, deployment = 'server', users = 50) {\n    let price = 0;\n    const theProduct = products[product][deployment];\n    const numOfTiers = theProduct.pricingTiers.length;\n    const multiplier = theProduct.period == \"MONTHLY\" ? 10 : 1;\n    let pricingStrategy = \"FIXED_COST\";\n    if (users > 0) {\n      for (let t = 0; t < numOfTiers; t++) {\n        let priceTier = theProduct.pricingTiers[t];\n        let upper = priceTier.unitLimitUpper ? priceTier.unitLimitUpper : priceTier.unitLimitLower;\n        if ((users >= priceTier.unitLimitLower && users <= upper) || (t == numOfTiers - 1 && users > upper)) {\n          pricingStrategy = priceTier.pricingStrategy;\n          price = priceTier.price;\n          break;\n        }\n      }\n    }\n    let usersMultiplier = pricingStrategy == \"MARGINAL_PER_UNIT\" ? users : 1;\n    return price * multiplier * usersMultiplier;\n  }\n\n  static getEl(options) {\n    let el = document.createElement(options?.tag ? options.tag : 'div');\n    for (var opt in options) {\n      if (opt == \"htmlNode\") {\n        el.appendChild(options.htmlNode);\n      } else if (opt.indexOf('data') == 0) {\n        let dataAtt = opt.replace('data', '').toLowerCase();\n        let dataVal = options[opt];\n        if (dataAtt == \"tooltip\") {\n          dataVal = dataVal.replace(/<br>/g, '\\n');\n        }\n        el.dataset[dataAtt] = dataVal;\n      } else if (opt != \"tag\" && options[opt]) {\n        el[opt] = options[opt];\n      }\n    }\n    return el;\n  }\n\n  static renderStartScreen(withErrors?: boolean, withDialog?: boolean) {\n    tcoDom.innerHTML = '';\n    tcoDom.appendChild(TCOStart.getStartPage(withErrors, withDialog));\n    if (window.focused && document.getElementById(window.focused)) {\n      document.getElementById(focused).focus();\n    }\n    if (withErrors) {\n      document.querySelector('.error').scrollIntoView();\n    }\n    if (window.location.hash != '') {\n      window.location.hash = ''\n    }\n  }\n\n  static renderEditScreen() {\n    tcoDom.innerHTML = '';\n    tcoDom.appendChild(TCOEdit.getEditPage());\n    if (window.location.hash != '#edit') {\n      window.location.hash = '#edit';\n    }\n  }\n\n  static renderResultsScreen(withError?: boolean) {\n    tcoDom.innerHTML = '';\n    tcoDom.appendChild(TCOResults.getResultsPage(withError));\n    if (window.location.hash != '#results') {\n      window.location.hash = '#results';\n    }\n  }\n\n  static getLineItem(options) {\n    let lineItem = this.getEl({\n      className: 'line-item labels-values',\n      innerHTML: `<div class=\"labels-side\"><p>${options.label}</p></div>`\n    });\n    let lineValue = this.getEl({ className: 'values-side' });\n    lineItem.appendChild(lineValue);\n    lineValue.appendChild(this.getEl({\n      tag: options.isPrintVersion ? 'button' : 'input',\n      id: options.id ? options.id : '',\n      type: options.type ? options.type : 'text',\n      placeholder: options.placeholder,\n      value: options.value,\n      onchange: options.onchange,\n      checked: options.checked,\n      className: options.type == \"checkbox\" ? 'toggle' : '',\n      innerText: options.isPrintVersion ? (options.value ? options.value : options.placeholder) : ''\n    }));\n    if (options.type == \"checkbox\") {\n      lineValue.appendChild(this.getEl({ tag: 'label', htmlFor: options.id, innerHTML: this.toggleSVG(options.checked) }));\n    }\n    lineValue.appendChild(this.getEl({ tag: 'span', className: 'side-label', innerHTML: options.sideLabel ? options.sideLabel : '' }));\n    return lineItem;\n  }\n\n\n  static getDottedLine(options) {\n    let isCheckbox = options.id && options.id.length;\n    let tooltip = options.tooltip ? ` <span class=\"${options.isPrintVersion ? 'num' : 'tooltip'}\" data-tooltip=\"${options.tooltip.replace(/<br>/g, '\\n')}\">${options.isPrintVersion ? options.tooltipNum : ''}</span>` : '';\n    let dotted = TCO.getEl({ className: `dotted-line ${options.className ? options.className : ''}` });\n    let headingLabel = TCO.getEl({ tag: options.tag ? options.tag : 'h3', innerHTML: `${options.label} ${tooltip}` });\n    if (options.id) {\n      headingLabel.appendChild(TCO.getEl({\n        tag: 'input',\n        id: options.id,\n        type: 'checkbox',\n        checked: options.checked,\n        className: 'toggle',\n        onchange: options.onchange ? options.onchange : () => {\n          TCO.track(options.label, options.id);\n        }\n      }));\n      headingLabel.appendChild(TCO.getEl({ tag: 'label', htmlFor: options.id, innerHTML: TCO.toggleSVG(options.checked) }));\n    }\n    dotted.appendChild(headingLabel);\n    dotted.appendChild(TCO.getEl({ tag: 'span', className: !isCheckbox || options.checked ? \"line\" : \"\" }));\n    if (!isCheckbox || options.checked) {\n      dotted.appendChild(TCO.getEl({ tag: options.tag ? options.tag : 'h4', innerHTML: options.value }));\n    }\n    if (options.description) {\n      dotted.appendChild(TCO.getEl({ className: 'description', innerHTML: options.description }));\n    }\n    return dotted;\n  }\n\n  static linkArrow() {\n    return `<svg class=\"link-arrow-image\" width=\"11px\" height=\"8px\" viewBox=\"0 0 11 8\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"><g class=\"group-path\" transform=\"translate(-138.000000, -586.000000)\" fill=\"#0052CC\"><path d=\"M145.2803,586.507862 L144.2193,587.568863 L145.9393,589.287862 L138.7503,589.287862 C138.3363,589.287862 138.0003,589.623862 138.0003,590.037862 C138.0003,590.451862 138.3363,590.787862 138.7503,590.787862 L145.9393,590.787862 L144.2193,592.507862 L145.2803,593.568863 L148.8103,590.037862 L145.2803,586.507862 Z\"></path></g></g></svg>`;\n  }\n\n  static errorSVG() {\n    return `<svg width=\"18\" height=\"16\" viewBox=\"0 0 18 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"17.771\" height=\"16\" fill=\"white\" fill-opacity=\"0.01\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.45289 2.65537C9.6328 2.72249 9.79625 2.82086 9.93391 2.94487L14.5011 7.05621C14.6389 7.18016 14.7483 7.32737 14.8229 7.48941C14.8975 7.65144 14.9359 7.82513 14.9359 8.00054C14.9359 8.17595 14.8975 8.34964 14.8229 8.51168C14.7483 8.67371 14.6389 8.82092 14.5011 8.94487L9.93391 13.0562C9.79625 13.1802 9.6328 13.2786 9.45289 13.3457C9.27299 13.4128 9.08016 13.4474 8.88543 13.4474C8.69069 13.4474 8.49786 13.4128 8.31796 13.3457C8.13805 13.2786 7.9746 13.1802 7.83694 13.0562L3.26979 8.94487C3.13194 8.82092 3.02259 8.67371 2.94798 8.51168C2.87336 8.34964 2.83496 8.17595 2.83496 8.00054C2.83496 7.82513 2.87336 7.65144 2.94798 7.48941C3.02259 7.32737 3.13194 7.18016 3.26979 7.05621L7.83694 2.94487C7.9746 2.82086 8.13805 2.72249 8.31796 2.65537C8.49786 2.58826 8.69069 2.55371 8.88543 2.55371C9.08016 2.55371 9.27299 2.58826 9.45289 2.65537ZM8.36184 9.13827C8.5007 9.2633 8.68904 9.33354 8.88542 9.33354C9.0818 9.33354 9.27014 9.2633 9.40901 9.13827C9.54787 9.01325 9.62588 8.84368 9.62588 8.66687V5.33354C9.62588 5.15673 9.54787 4.98716 9.40901 4.86213C9.27014 4.73711 9.0818 4.66687 8.88542 4.66687C8.68904 4.66687 8.5007 4.73711 8.36184 4.86213C8.22298 4.98716 8.14496 5.15673 8.14496 5.33354V8.66687C8.14496 8.84368 8.22298 9.01325 8.36184 9.13827ZM8.36184 11.1383C8.5007 11.2633 8.68904 11.3335 8.88542 11.3335C9.0818 11.3335 9.27014 11.2633 9.40901 11.1383C9.54787 11.0133 9.62588 10.8437 9.62588 10.6669C9.62588 10.4901 9.54787 10.3205 9.40901 10.1955C9.27014 10.0704 9.0818 10.0002 8.88542 10.0002C8.68904 10.0002 8.5007 10.0704 8.36184 10.1955C8.22298 10.3205 8.14496 10.4901 8.14496 10.6669C8.14496 10.8437 8.22298 11.0133 8.36184 11.1383Z\" fill=\"#DE350B\"/></svg>`;\n  }\n\n  static toggleSVG(on) {\n    if (on) {\n      return `<svg width=\"32\" height=\"20\" viewBox=\"0 0 32 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"32\" height=\"16\" rx=\"8\" fill=\"#00875A\"/><rect width=\"12\" height=\"12\" transform=\"translate(3.19995 1.59961)\" fill=\"white\" fill-opacity=\"0.01\"/><path d=\"M6.56739 7.76082C6.47712 7.66481 6.35259 7.60832 6.2209 7.60364C6.0892 7.59895 5.96097 7.64645 5.86411 7.73581C5.76725 7.82516 5.70957 7.94914 5.70363 8.08079C5.69769 8.21243 5.74397 8.3411 5.83239 8.43882L7.63839 10.3983C7.90689 10.6613 8.30689 10.6613 8.55539 10.4133L8.73739 10.2338C9.39466 9.58743 10.0512 8.94026 10.7069 8.29232L10.7269 8.27232C11.3397 7.66835 11.9494 7.06117 12.5559 6.45082C12.6465 6.35592 12.6962 6.22918 12.6943 6.09796C12.6923 5.96675 12.6388 5.84156 12.5454 5.74942C12.4519 5.65729 12.326 5.60558 12.1948 5.60547C12.0635 5.60536 11.9375 5.65684 11.8439 5.74882C11.2402 6.35599 10.6335 6.96016 10.0239 7.56132L10.0039 7.58132C9.37553 8.20246 8.74636 8.8228 8.11639 9.44232L6.56739 7.76082Z\" fill=\"white\" stroke=\"white\"/><circle cx=\"23.8\" cy=\"8\" r=\"6\" fill=\"white\"/></svg>`;\n    }\n    return `<svg width=\"32\" height=\"20\" viewBox=\"0 0 32 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 8C0 3.58172 3.58172 0 8 0H24C28.4183 0 32 3.58172 32 8C32 12.4183 28.4183 16 24 16H8C3.58172 16 0 12.4183 0 8Z\" fill=\"#6B778C\"/><rect width=\"8\" height=\"8\" transform=\"translate(19 4)\" fill=\"white\" fill-opacity=\"0.01\"/><path d=\"M22.9999 7.52821L21.2356 5.76387C21.1727 5.70315 21.0885 5.66955 21.0011 5.67031C20.9137 5.67107 20.8301 5.70613 20.7683 5.76793C20.7065 5.82974 20.6714 5.91334 20.6707 6.00074C20.6699 6.08814 20.7035 6.17234 20.7642 6.23521L22.5286 7.99954L20.7642 9.76387C20.7035 9.82674 20.6699 9.91094 20.6707 9.99834C20.6714 10.0857 20.7065 10.1693 20.7683 10.2311C20.8301 10.2929 20.9137 10.328 21.0011 10.3288C21.0885 10.3295 21.1727 10.2959 21.2356 10.2352L22.9999 8.47087L24.7642 10.2352C24.8271 10.2959 24.9113 10.3295 24.9987 10.3288C25.0861 10.328 25.1697 10.2929 25.2315 10.2311C25.2933 10.1693 25.3284 10.0857 25.3291 9.99834C25.3299 9.91094 25.2963 9.82674 25.2356 9.76387L23.4712 7.99954L25.2356 6.23521C25.2674 6.20446 25.2928 6.16767 25.3103 6.12701C25.3277 6.08634 25.3369 6.0426 25.3373 5.99834C25.3377 5.95408 25.3293 5.91019 25.3125 5.86922C25.2957 5.82826 25.271 5.79104 25.2397 5.75974C25.2084 5.72844 25.1712 5.70369 25.1302 5.68693C25.0892 5.67017 25.0454 5.66174 25.0011 5.66212C24.9568 5.66251 24.9131 5.6717 24.8724 5.68917C24.8318 5.70664 24.795 5.73204 24.7642 5.76387L22.9999 7.52821Z\" fill=\"white\" stroke=\"white\" stroke-width=\"1.5\"/><circle cx=\"8.3999\" cy=\"8\" r=\"6\" fill=\"white\"/></svg>`\n  }\n\n  static resultSVG(cloudCostsLess) {\n    if (cloudCostsLess) {\n      return '';\n    }\n    return '';\n  }\n\n  static convertForTracking(info, isOld) {\n    let newObj = {};\n    let prefix = isOld ? 'edited_' : '';\n    newObj.edition = info.edition;\n    let allKeys = ['useAccess', 'numberOfAdmins', 'medianAnnualSalary', 'accessPrice', 'overhead', 'plannedDowntime'];\n    allKeys.forEach(key => {\n      if (info[key]) {\n        newObj[prefix + key] = info[key];\n      }\n    })\n    info.products.forEach((product, productIndex) => {\n      let prodKey = indexKeys[productIndex];\n      newObj[prefix + prodKey + \"_product\"] = product.chosenProductKey;\n      newObj[prefix + prodKey + \"_product_deployment\"] = product.deployment;\n      newObj[prefix + prodKey + \"_product_price\"] = product.price;\n      if (product.customPrice) {\n        newObj[prefix + prodKey + \"_product_custom_price\"] = product.customPrice;\n      }\n      product.instances.forEach((instance, instanceIndex) => {\n        let instKey = indexKeys[instanceIndex];\n        newObj[prefix + prodKey + \"_product_\" + instKey + \"_instance_users\"] = instance.users;\n        if (instance.infra) {\n          newObj[prefix + prodKey + \"_product_\" + instKey + \"_instance_infrastructure\"] = instance.infra;\n        }\n      })\n    });\n    return newObj;\n  }\n\n  static track(linkType, linkInfo, oldInfo) {\n    let currentInfo = this.convertForTracking(this.getInfo());\n    let trackInfo = Object.assign({}, currentInfo);\n    trackInfo.label = linkType;\n    trackInfo.eventComponent = \"linkButton\";\n    trackInfo.eventContainer = \"TCO Calculator\";\n    if (linkInfo) {\n      trackInfo.labelDescription = linkInfo;\n    }\n    if (oldInfo) {\n      let old = this.convertForTracking(oldInfo, true);\n      trackInfo = Object.assign(trackInfo, old);\n    }\n    tracking.trackEvent('clicked', trackInfo);\n  }\n\n  static sanitizedNum(num, allowDecimal) {\n    if (allowDecimal) {\n      return Number(num.replace(/[^\\d\\.]/g, ''));\n    }\n    return Number(num.replace(/[^\\d]/g, ''));\n  }\n\n  static formatNum(num, noCurrencyCode, decimalPlaces) {\n    let places = decimalPlaces ? decimalPlaces : 0;\n    if (num || num === 0) {\n      return Number(num).toFixed(places).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") + (noCurrencyCode ? \"\" : (\" \" + this.currency()))\n    }\n    return \"__\";\n  }\n\n  static getMaxNumUsers(productKey) {\n    return this.getProducts(productKey).maxUsers;\n  }\n\n  static isNotValidNumOfUsers(num, productKey) {\n    return num == 0 || (num > this.getMaxNumUsers(productKey));\n  }\n\n  static isValidEntry() {\n    let allInstances = TCO.getInfo(\"products\").map(product => {\n      return product.instances.map(instance => {\n        return { productKey: product.chosenProductKey, users: instance.users };\n      })\n    }).flat();\n    let errors = allInstances.filter(instance => { return this.isNotValidNumOfUsers(instance.users, instance.productKey); });\n    return errors.length == 0;\n  }\n}","import TCO from \"./tco-build\";\nimport Labels from \"./tco-labels\";\n\nexport default class TCOTool {\n  domRoot: HTMLElement;\n  params: any;\n  labels: any;\n  mainRoot: any;\n  availableProducts: any;\n  resultsContent: any;\n  currencyCode: string;\n  isEmbeddedIframe?: boolean;\n\n  constructor(domRoot: HTMLElement, params: any) {\n    this.domRoot = domRoot;\n    this.params = params;\n    this.labels = params.labels;\n    this.mainRoot = this.domRoot.querySelector('.tco-page');\n    this.availableProducts = params.products;\n    this.resultsContent = params.resultsContent;\n    this.currencyCode = '';\n    (async () => {\n      const results = await Promise.all(params.pricingObject);\n      for (let result in results) {\n        this.currencyCode = results[result].currencyCode;\n        let productKey = results[result].identifiers.productKey;\n        let pricingKey = results[result].identifiers.pricingKey.replace(/\\./g, '_');\n        let deployment = results[result].identifiers.deployment;\n        let period = results[result].identifiers.period;\n        if (!this.availableProducts[productKey]) {\n           this.availableProducts[productKey] = {};\n        }\n        this.availableProducts[productKey][deployment] = results[result];\n        this.availableProducts[productKey][deployment].period = period;\n        this.availableProducts[productKey][deployment].pricingKey = pricingKey;\n        this.availableProducts[productKey][deployment].deployment = deployment;\n        this.availableProducts[productKey][deployment].available = results[result].pricingTiers ? results[result].pricingTiers.length > 0 : false;\n      }\n      this.init();      \n    })();\n  }\n  \n  init() {\n    if (window.location !== window.parent.location) {\n      this.isEmbeddedIframe = true;\n    }\n    Labels.init(this.labels);\n    TCO.init(this.mainRoot, this.availableProducts, this.resultsContent, this.currencyCode);\n  }\n\n}"],"names":["labels","tiers","USD","server","small","medium","large","xl","dc","JPY","adminSalary","medianHourly","Calc","_classCallCheck","key","value","users","info","this","getTotalOperationalCosts","getTotalAnnualMaintenance","productIndex","instanceIndex","TCO","currency","products","deployment","getTiers","instances","_this","reduce","sum","instance","infra","getProductInstanceInfrastructureCost","_this2","map","product","newInstances","forEach","flat","instanceTotal","getTotalInfrastructureCost","getTotalITLaborCost","getPlannedDowntimeCosts","allInstances","Math","max","apply","plannedDowntime","getHighestUsersAmongInstances","getMedianHourly","getDowntimePerUpdate","getUpdatesPerYear","productSum","customPrice","price","productInfo","edition","isAvailable","chosenProductKey","available","useAccess","accessPrice","getTotalAnnualCloudSubscription","updatesPerYear","downtimePerUpdate","numberOfAdmins","getNumberOfAdmins","overhead","Labels","passedLabels","TCOEdit","printVersion","contain","getEl","className","row","appendChild","innerHTML","concat","get","getOperationalCostsSection","getAnnualMaintenanceSection","getPageButtons","opCosts","tag","onclick","resetOpCosts","getDottedLine","label","formatNum","getEditInfo","description","getInfrastructureSection","getITLaborSection","getPlannedDowntimeSection","infraSection","htmlNode","isPrintVersion","tooltip","tooltipNum","editableInfrastructures","_product","getProductEditLine","allProducts","selectedProduct","productEditLine","productTitle","getTotalInfraCostPerProduct","_instance","productUsers","getProducts","getLineItem","placeholder","sideLabel","onchange","e","sanitizedNum","target","setEditInfo","renderEditScreen","itLabor","getAdminSalary","type","id","checked","plannedDowntimeSection","track","downTimeItems","resetProducts","productInstance","_this3","annualMaintenance","resetAnnualMaintenance","productsMaintenance","buttonContainer","innerText","renderResultsScreen","window","scrollTo","saveEditInfo","activeDialogProduct","TCOStart","withError","withDialog","href","getIntro","numOfProductsAvailable","Object","keys","filter","indexOf","length","getInfo","enteredProduct","getProductLineItem","getProductLineItemAdder","getCostEstimatorButton","getDialogWindow","option","theseProducts","selectedOptions","dataset","title","setInfo","thisProductLineItem","firstAvailableProduct","buttonsContainer","allEl","selectEl","_loop","optionProduct","optionString","isActiveProduct","isDisabledProduct","prod","includes","dataTitle","dataDeployment","productTitleDropdown","dataTooltip","tabIndex","classList","add","syncDropdownProduct","renderStartScreen","firstAvailableProductObject","fakeSelectEl","onmousedown","preventDefault","elsContainer","nextElementSibling","style","display","onfocus","thisProduct","productKey","ulElement","userTiers","thisProductInstance","liEl","howManyUsers","textInput","isNotValidNumOfUsers","autocomplete","onkeyup","focused","errorSVG","getMaxNumUsers","replace","getProductInstanceRemover","getProductInstanceAdder","splice","isDisabled","push","productLineItem","querySelector","inner","getProductLineItemRemover","getProductsDropdown","instancesAndUsers","getProductInstances","container","isValidEntry","scrollToBeginning","outer","yMax","TCOResults","getContentfulPricing","cloudStandard","cloudPremium","getTotalSelfManagedCosts","getCloudTotal","getGraph","getComparison","getResultsContent","getResultFooter","subHeadline","cost","getHeadline","getTotalCloudCosts","tagline","costs","print","innerRow","getSelfManagedSection","getCloudSection","resetInfo","getPrintStyle","self","selfOpCosts","selfMaintenance","linkArrow","syncInfoToEditMode","cloud","switcher","cloudOpCosts","annualSubscriptions","cloudType","productGenericTitle","productTitleGeneric","numPrice","shownPrice","suffix","outerHTML","allFooters","col1","col2","options","margin","filename","image","quality","html2canvas","scale","jsPDF","unit","format","orientation","printContainer","getEditPage","then","html2pdf","getPdf","remove","error","err","console","log","footnoteContainer","tcoDom","resultsContent","currencyCode","indexKeys","editInfo","passedDom","passedProducts","results","getEmptyStart","addEventListener","tagName","match","location","hash","scrollIntoView","firstProduct","_labels","_x","arguments","toString","val","JSON","parse","stringify","undefined","theProduct","numOfTiers","pricingTiers","multiplier","period","pricingStrategy","t","priceTier","upper","unitLimitUpper","unitLimitLower","el","document","createElement","opt","dataAtt","toLowerCase","dataVal","withErrors","getStartPage","getElementById","focus","getResultsPage","lineItem","lineValue","htmlFor","toggleSVG","isCheckbox","dotted","headingLabel","on","cloudCostsLess","isOld","newObj","prefix","prodKey","instKey","linkType","linkInfo","oldInfo","currentInfo","convertForTracking","trackInfo","assign","eventComponent","eventContainer","labelDescription","old","tracking","num","allowDecimal","Number","noCurrencyCode","decimalPlaces","places","toFixed","maxUsers","_regeneratorRuntime","exports","Op","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","state","Error","done","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_defineProperties","props","descriptor","input","hint","prim","toPrimitive","res","String","_toPrimitive","TCOTool","domRoot","params","Constructor","mainRoot","availableProducts","_callee","pricingKey","_context","all","pricingObject","identifiers","init","args","protoProps","parent","isEmbeddedIframe"],"sourceRoot":""}