PageSourceSearch

https://vemcogroup.com/hubfs/hub_generated/module_assets/1/4568221…/1788178330462/module_pricing-page.min.js

js vemcogroup.com collected 2026-10-06 00:07:23 UTC 29,847 bytes, 2 lines download raw bytes

1var module_456822168790=void document.querySelectorAll("[data-pricing-page]").forEach(pricingPage=>{pricingPage.querySelectorAll("[data-additional-fees-panel]").forEach(panel=>{panel.querySelector(".additional-fee")||panel.remove()});const triggers=pricingPage.querySelectorAll("[data-product-trigger]"),panels=pricingPage.querySelectorAll("[data-product-panel]"),currencySelectors=pricingPage.querySelectorAll("[data-currency-selector]"),vemtrackPricingView=pricingPage.querySelector('[data-pricing-view="vemtrack"]'),mapsPricingView=pricingPage.querySelector('[data-pricing-view="3d"]'),pricingCarousel=pricingPage.querySelector("[data-pricing-carousel]"),additionalFeesCarousel=pricingPage.querySelector("[data-additional-fees-carousel]"),vemtrackAdditionalFees=pricingPage.querySelector('[data-additional-fees-view="vemtrack"]'),mapsAdditionalFees=pricingPage.querySelector('[data-additional-fees-view="3d"]'),vemtrackComparison=pricingPage.querySelector('[data-pricing-comparison-view="vemtrack"]'),mapsComparison=pricingPage.querySelector('[data-pricing-comparison-view="3d"]'),viewToggleButtons=pricingPage.querySelectorAll("[data-pricing-view-toggle]"),viewSwitch=pricingPage.querySelector("[data-pricing-view-switch]"),quoteConfig=pricingPage.querySelector("[data-quote-config]"),quoteCart=pricingPage.querySelector("[data-quote-cart]"),quoteModal=pricingPage.querySelector("[data-quote-modal]"),quoteForm=pricingPage.querySelector("[data-quote-form]"),quoteItems=new Map,viewAnimationClasses=["is-slide-out-left","is-slide-in-right","is-slide-out-right","is-slide-in-left"];let viewTransitionId=0;const currencySymbols={eur:"€",try:"₺",dkk:"kr.",sek:"kr",gbp:"£",sar:"SAR",aed:"AED",brl:"R$",cad:"CA$",aud:"A$"},currencyByLanguage={ar:"aed",da:"dkk",de:"eur",en:"eur",es:"eur",pt:"brl",sv:"sek",tr:"try","en-au":"aud","en-ca":"cad","en-gb":"gbp"},tierRanks={vemcount_lite:1,vemcount_pro:2,vemtrack_lite:3,vemtrack_pro:4};function getCurrencyDisplay(currency){const language=document.documentElement.lang||"en";try{const parts=new Intl.NumberFormat(language,{style:"currency",currency:currency.toUpperCase(),currencyDisplay:"symbol"}).formatToParts(1),currencyIndex=parts.findIndex(part=>"currency"===part.type),amountIndex=parts.findIndex(part=>"integer"===part.type);if(-1===currencyIndex||-1===amountIndex)return{position:"before",spacing:""};const firstIndex=Math.min(currencyIndex,amountIndex),lastIndex=Math.max(currencyIndex,amountIndex);return{position:currencyIndex>amountIndex?"after":"before",spacing:parts.slice(firstIndex+1,lastIndex).some(part=>"literal"===part.type&&/\s/u.test(part.value))?" ":""}}catch{return{position:"before",spacing:""}}}function getQuoteLabel(name,fallback){return quoteConfig?.dataset[name]||fallback}function getPriceComponentData(component){const price=component.querySelector("[data-price]"),unit=component.querySelector(".pricing-card__unit, .additional-fee__unit"),prices={};return Object.keys(currencySymbols).forEach(currency=>{const value=Number(price?.dataset[currency]);Number.isFinite(value)&&(prices[currency]=value)}),{key:component.dataset.priceComponent,label:component.dataset.componentLabel||"",pricingType:component.dataset.pricingType||"fixed",chargeType:component.dataset.chargeType||"recurring",unit:component.dataset.unit||"flat",billingPeriod:component.dataset.billingPeriod||"none",percentage:Number(component.dataset.percentage)||0,unitLabel:(value=unit?.textContent,value?.replace(/\s+/g," ").trim()||""),prices:prices};var value}function findFeaturedOfferingButton(productKey){const featuredCard=Array.from(pricingPage.querySelectorAll('.pricing-card[data-featured="true"]')).find(card=>card.dataset.productKey===productKey&&"addon"!==card.dataset.offeringKind);return featuredCard?.querySelector("[data-quote-add-offering]")}function getProductScope(productKey){return["vemcount","vemtrack"].includes(productKey)?"vemcount-vemtrack":productKey}function getOfferingFamily(productKey,offeringKey){return tierRanks[offeringKey]?"vemcount-vemtrack":productKey}function getSelectedOffering(productKey,offeringKey=""){const family=getOfferingFamily(productKey,offeringKey);return Array.from(quoteItems.values()).find(item=>"offering"===item.kind&&getOfferingFamily(item.productKey,item.offeringKey)===family)}function getProductLogo(source,productKey){const cardLogo=source.closest(".pricing-card")?.querySelector(".pricing-card__logo");if(cardLogo)return{src:cardLogo.src,alt:cardLogo.alt};const productCardLogo=Array.from(pricingPage.querySelectorAll(".pricing-card")).find(card=>card.dataset.productKey===productKey)?.querySelector(".pricing-card__logo");return productCardLogo?{src:productCardLogo.src,alt:productCardLogo.alt}:null}function removeQuoteItem(itemId,render=!0){const item=quoteItems.get(itemId);item&&(item.lockedBy&&quoteItems.has(item.lockedBy)?removeQuoteItem(item.lockedBy,render):(quoteItems.delete(itemId),Array.from(quoteItems.values()).forEac
1h(candidate=>{const dependsOnOffering="offering"===item.kind&&candidate.requiredOfferingKey===item.offeringKey,wasAddedWithItem=candidate.lockedBy===itemId;(dependsOnOffering||wasAddedWithItem)&&quoteItems.delete(candidate.id)}),render&&renderQuoteCart()))}function addOffering(button,options={}){if(!button)return null;const card=button.closest(".pricing-card"),offeringKey=button.dataset.offeringKey,productKey=button.dataset.productKey,itemId=`offering:${offeringKey}`,existing=quoteItems.get(itemId);if(existing&&!options.required)return removeQuoteItem(itemId),null;const selectedOffering=getSelectedOffering(productKey,offeringKey);if(selectedOffering&&tierRanks[selectedOffering.offeringKey]&&tierRanks[offeringKey]&&tierRanks[selectedOffering.offeringKey]>tierRanks[offeringKey])return selectedOffering;selectedOffering&&selectedOffering.id!==itemId&&removeQuoteItem(selectedOffering.id,!1);const item=existing||{id:itemId,kind:"offering",offeringKey:offeringKey,productKey:productKey,title:button.dataset.itemTitle,logo:getProductLogo(button,productKey),components:Array.from(card.querySelectorAll("[data-price-component]")).map(getPriceComponentData)};if(quoteItems.set(itemId,item),"vemmaps_connect"===offeringKey){const requiredFeeButton=function(offeringKey){return Array.from(pricingPage.querySelectorAll("[data-quote-add-fee]")).find(button=>button.dataset.offeringKey===offeringKey)}("vemmaps_connect_integration");requiredFeeButton&&addComponent(requiredFeeButton,{lockedBy:itemId,skipDependencies:!0,skipRender:!0})}return options.skipRender||renderQuoteCart(),item}function addComponent(button,options={}){const componentElement=button.closest("[data-price-component]")||button.closest(".pricing-card")?.querySelector("[data-price-component]")||button.closest(".additional-fee")?.querySelector("[data-price-component]");if(!componentElement)return null;const component=getPriceComponentData(componentElement),itemId=`component:${component.key}`,existing=quoteItems.get(itemId);if(existing&&!options.lockedBy)return removeQuoteItem(itemId),null;const productKey=button.dataset.productKey,offeringKey=button.dataset.offeringKey;let requiredOfferingKey=null;if(!options.skipDependencies&&button.hasAttribute("data-quote-add-component")){const featuredButton=findFeaturedOfferingButton(productKey),featuredItem=addOffering(featuredButton,{required:!0,skipRender:!0});requiredOfferingKey=featuredItem?.offeringKey||featuredButton?.dataset.offeringKey||null}options.skipDependencies||!button.hasAttribute("data-quote-add-fee")||"vemmaps"===productKey||function(productKey){const scope=getProductScope(productKey);return Array.from(quoteItems.values()).find(item=>"offering"===item.kind&&getProductScope(item.productKey)===scope)}(productKey)||addOffering(findFeaturedOfferingButton(productKey),{required:!0,skipRender:!0}),options.skipDependencies||"vemmaps_setup"!==offeringKey||getSelectedOffering("vemmaps")||addOffering(function(offeringKey){return Array.from(pricingPage.querySelectorAll("[data-quote-add-offering]")).find(button=>button.dataset.offeringKey===offeringKey)}("vemmaps_solo"),{required:!0,skipRender:!0});const item=existing||{id:itemId,kind:button.hasAttribute("data-quote-add-fee")?"fee":"addon",offeringKey:offeringKey,productKey:productKey,title:button.dataset.itemTitle,logo:getProductLogo(button,productKey),components:[component]};if("percentage"===component.pricingType){const feeType=component.key.includes("shmp")?"shmp":component.key.includes("amc")?"amc":component.key,scope=getProductScope(productKey);Array.from(quoteItems.values()).forEach(candidate=>{const candidateComponent=candidate.components[0],candidateFeeType=candidateComponent?.key.includes("shmp")?"shmp":candidateComponent?.key.includes("amc")?"amc":candidateComponent?.key;candidate.id!==itemId&&"percentage"===candidateComponent?.pricingType&&getProductScope(candidate.productKey)===scope&&candidateFeeType===feeType&&quoteItems.delete(candidate.id)})}return requiredOfferingKey&&(item.requiredOfferingKey=requiredOfferingKey),options.lockedBy&&(item.lockedBy=options.lockedBy),quoteItems.set(itemId,item),options.skipRender||renderQuoteCart(),item}function formatQuotePrice(component,currency){if("percentage"===component.pricingType)return`+${component.percentage}%`;const value=component.prices[currency];if(!Number.isFinite(value))return"—";try{const formattedValue=new Intl.NumberFormat(document.documentElement.lang||"en",{maximumFractionDigits:Number.isInteger(value)?0:2}
1).format(value),symbol=currencySymbols[currency]||currency.toUpperCase(),display=getCurrencyDisplay(currency);return"after"===display.position?`${formattedValue}${display.spacing}${symbol}`:`${symbol}${display.spacing}${formattedValue}`}catch{return`${currencySymbols[currency]||currency.toUpperCase()}${value}`}}function getOrderedQuoteItems(){const items=Array.from(quoteItems.values()),productOrder=[];return items.forEach(item=>{productOrder.includes(item.productKey)||productOrder.push(item.productKey)}),productOrder.flatMap(productKey=>{const productItems=items.filter(item=>item.productKey===productKey);return[...productItems.filter(item=>"offering"===item.kind),...productItems.filter(item=>"offering"!==item.kind)]})}function getQuoteQuantity(name){const submissionInput=quoteForm?.querySelector(`[name="${name}"], [name$="/${name}"]`),input="hidden"===submissionInput?.type&&submissionInput.parentElement?.querySelector('input:not([type="hidden"])')||submissionInput,value=Number(input?.value);return Number.isFinite(value)&&value>0?value:1}function getQuoteQuantities(){return{locations:getQuoteQuantity("quote_number_of_locations"),countingPoints:getQuoteQuantity("quote_number_of_counting_points")}}function getComponentQuantity(unit,quantities=getQuoteQuantities()){return"device"===unit?quantities.countingPoints:"location"===unit?quantities.locations:1}function createQuoteItemElement(item){const currency=pricingPage.dataset.currency||"eur",element=document.createElement("article"),heading=document.createElement("div"),identity=document.createElement("div"),title=document.createElement("h3"),remove=document.createElement("button");if(element.className=`quote-cart__item quote-cart__item--${item.kind}`,heading.className="quote-cart__item-heading",identity.className="quote-cart__identity",title.className="quote-cart__item-title",title.textContent=item.title,item.logo?.src){const logo=document.createElement("img");logo.className="quote-cart__logo",logo.src=item.logo.src,logo.alt=item.logo.alt||"",identity.append(logo)}return identity.append(title),remove.type="button",remove.className="quote-cart__remove",remove.dataset.quoteRemove=item.id,remove.setAttribute("aria-label",`${getQuoteLabel("removeItemLabel","Remove")} ${item.title}`),remove.textContent="×",heading.append(identity,remove),element.append(heading),item.components.forEach(component=>{const priceRow=document.createElement("div"),unit=document.createElement("span"),price=document.createElement("strong");priceRow.className="quote-cart__item-price-row",unit.className="quote-cart__item-unit",price.className="quote-cart__item-price",unit.textContent=component.unitLabel,price.textContent=formatQuotePrice(component,currency),priceRow.append(unit,price),element.append(priceRow)}),element}function createQuoteTotalsElement(){const currency=pricingPage.dataset.currency||"eur",wrapper=document.createElement("div"),title=document.createElement("strong");return wrapper.className="quote-cart__total-box",title.className="quote-cart__total-label",title.textContent=getQuoteLabel("estimatedPriceLabel","Estimated price"),wrapper.append(title),function(){const currency=pricingPage.dataset.currency||"eur",quantities=getQuoteQuantities(),totals=new Map,percentagesByScope=new Map;return quoteItems.forEach(item=>{item.components.forEach(component=>{if("percentage"!==component.pricingType)return;const scope=getProductScope(item.productKey),current=percentagesByScope.get(scope)||0;percentagesByScope.set(scope,current+component.percentage)})}),quoteItems.forEach(item=>{item.components.forEach(component=>{if("percentage"===component.pricingType)return;const key=`${component.chargeType}:${component.unit}:${component.billingPeriod}`,current=totals.get(key)||{...component,value:0},multiplier=1+("device"===component.unit&&percentagesByScope.get(getProductScope(item.productKey))||0)/100,quantity=getComponentQuantity(component.unit,quantities);current.quantity=quantity,current.value+=(component.prices[currency]||0)*multiplier*quantity,totals.set(key,current)})}),Array.from(totals.values())}
1().forEach(total=>{const row=document.createElement("div"),unit=document.createElement("span"),amount=document.createElement("strong");row.className="quote-cart__total-row",unit.className="quote-cart__total-unit",amount.className="quote-cart__total-amount",unit.textContent=total.quantity>1?`${total.quantity} × ${total.unitLabel}`:total.unitLabel,amount.textContent="percentage"===total.pricingType?`+${total.value}%`:formatQuotePrice({...total,prices:{[currency]:total.value}},currency),row.append(unit,amount),wrapper.append(row)}),wrapper}function syncQuoteForm(){if(!quoteForm)return;const payload=function(){const currency=pricingPage.dataset.currency||"eur",quantities=getQuoteQuantities();return{currency:currency.toUpperCase(),language:document.documentElement.lang||"en",quantities:quantities,items:getOrderedQuoteItems().map(item=>({id:item.id,kind:item.kind,offeringKey:item.offeringKey,productKey:item.productKey,title:item.title,components:item.components.map(component=>({key:component.key,label:component.label,pricingType:component.pricingType,chargeType:component.chargeType,unit:component.unit,billingPeriod:component.billingPeriod,percentage:component.percentage,price:component.prices[currency]??null,quantity:getComponentQuantity(component.unit,quantities)}))}))}}(),values={quote_summary:[`Locations: ${payload.quantities.locations}`,`Counting points/entrances: ${payload.quantities.countingPoints}`,...payload.items.map(item=>`${item.title} (${item.components.map(component=>component.key).join(", ")})`)].join("\n"),quote_selection_json:JSON.stringify(payload),quote_currency:payload.currency,quote_language:payload.language},hubSpotForm=quoteForm.hubSpotForm;Object.entries(values).forEach(([name,value])=>{hubSpotForm?.setFieldValue?hubSpotForm.setFieldValue(`0-1/${name}`,value):quoteForm.querySelectorAll(`[name="${name}"], [name$="/${name}"]`).forEach(input=>{input.value=value})})}function connectHubSpotQuoteForm(){if(!quoteForm||!window.HubSpotFormsV4?.getForms)return!1;const form=window.HubSpotFormsV4.getForms().find(candidate=>candidate.getFormId()===quoteForm.dataset.quoteFormId);return!!form&&(quoteForm.hubSpotForm=form,syncQuoteForm(),!0)}function renderQuoteCart(){const itemCount=quoteItems.size;quoteCart&&(quoteCart.hidden=0===itemCount),pricingPage.querySelectorAll("[data-quote-count]").forEach(count=>{const label=1===itemCount?getQuoteLabel("itemSingularLabel","item"):getQuoteLabel("itemPluralLabel","items");count.textContent=`${itemCount} ${label}`}),pricingPage.querySelectorAll("[data-quote-items]").forEach(container=>{container.replaceChildren(...getOrderedQuoteItems().map(createQuoteItemElement))}),pricingPage.querySelectorAll("[data-quote-totals]").forEach(container=>{container.replaceChildren(createQuoteTotalsElement())}),pricingPage.querySelectorAll("[data-quote-add-offering]").forEach(button=>{const selected=quoteItems.has(`offering:${button.dataset.offeringKey}`);button.setAttribute("aria-pressed",String(selected)),button.closest(".pricing-card")?.classList.toggle("is-selected",selected)}),pricingPage.querySelectorAll("[data-quote-add-component], [data-quote-add-fee]").forEach(button=>{const componentElement=button.closest("[data-price-component]")||button.closest(".pricing-card")?.querySelector("[data-price-component]")||button.closest(".additional-fee")?.querySelector("[data-price-component]"),selected=!!componentElement&&quoteItems.has(`component:${componentElement.dataset.priceComponent}`);button.setAttribute("aria-pressed",String(selected)),button.closest(".pricing-card")?.classList.toggle("is-selected",selected)}),syncQuoteForm(),0===itemCount&&quoteModal&&!quoteModal.hidden&&closeQuoteModal()}function closeQuoteModal(){quoteModal&&(quoteModal.hidden=!0,document.body.classList.remove("quote-modal-open"),pricingPage.querySelector("[data-quote-open]")?.focus())}function clearViewAnimations(element){element?.classList.remove(...viewAnimationClasses)}function animateView(element,className){if(!element)return Promise.resolve();clearViewAnimations(element),element.classList.add(className);const reduceMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return new Promise(resolve=>{window.setTimeout(()=>{element.classList.remove(className),resolve()},reduceMotion?1:920)})}function waitForViewTransition(){const reduceMotion=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return new Promise(resolve=>{window.setTimeout(resolve,reduceMotion?1:920)})}function updateViewToggle(view){viewSwitch&&(viewSwitch.dataset.activeView=view),viewToggleButtons.forEach(button=>{const isActive=button.dataset.pricingViewToggle===view;button.classList.toggle("is-active",isActive),button.setAttribute("aria-pressed",String(isActive))})}function selectProduct(trigger){const productKey=trigger.dataset.productTrigger;viewTransitionId+=1,delete pricingPage.dataset.viewTransitioning,pricingPage.dataset.pricingExperience
1="vemtrack",pricingCarousel&&(pricingCarousel.dataset.activeView="vemtrack"),additionalFeesCarousel&&(additionalFeesCarousel.dataset.activeView="vemtrack"),clearViewAnimations(vemtrackPricingView),clearViewAnimations(mapsPricingView),clearViewAnimations(vemtrackComparison),clearViewAnimations(mapsComparison),vemtrackPricingView&&(vemtrackPricingView.removeAttribute("inert"),vemtrackPricingView.setAttribute("aria-hidden","false")),mapsPricingView&&(mapsPricingView.setAttribute("inert",""),mapsPricingView.setAttribute("aria-hidden","true")),vemtrackAdditionalFees&&(vemtrackAdditionalFees.removeAttribute("inert"),vemtrackAdditionalFees.setAttribute("aria-hidden","false")),mapsAdditionalFees&&(mapsAdditionalFees.setAttribute("inert",""),mapsAdditionalFees.setAttribute("aria-hidden","true")),vemtrackComparison&&(vemtrackComparison.hidden=!1,vemtrackComparison.removeAttribute("inert"),vemtrackComparison.setAttribute("aria-hidden","false")),mapsComparison&&(mapsComparison.hidden=!0,mapsComparison.setAttribute("inert",""),mapsComparison.setAttribute("aria-hidden","true")),updateViewToggle("vemtrack"),pricingPage.dataset.selectedProduct=productKey,triggers.forEach(item=>{const isSelected=item===trigger;item.classList.toggle("is-active",isSelected),item.setAttribute("aria-selected",String(isSelected)),item.tabIndex=isSelected?0:-1}),panels.forEach(panel=>{panel.hidden=panel.dataset.productPanel!==productKey})}function selectCurrency(currency){pricingPage.dataset.currency=currency,currencySelectors.forEach(selector=>{selector.value=currency}),pricingPage.querySelectorAll("[data-price]").forEach(price=>{const value=price.dataset[currency];void 0!==value&&""!==value&&(price.textContent=value)}),pricingPage.querySelectorAll("[data-currency-symbol]").forEach(symbol=>{!function(symbol,currency){const price=symbol.parentElement?.querySelector("[data-price]"),symbolText=currencySymbols[currency]??currency.toUpperCase(),display=getCurrencyDisplay(currency);"after"===display.position?(symbol.textContent=`${display.spacing}${symbolText}`,price?.after(symbol)):(symbol.textContent=`${symbolText}${display.spacing}`,price?.before(symbol))}(symbol,currency)}),renderQuoteCart()}function updateFeatureRowVisibility(comparison,row){const group=row.closest("[data-feature-group]"),toggle=group?.querySelector("[data-feature-group-toggle]"),isGroupExpanded="false"!==toggle?.getAttribute("aria-expanded"),isTableExpanded="true"===comparison.dataset.comparisonExpanded,isOverflowHidden="true"===row.dataset.comparisonOverflow&&!isTableExpanded;row.hidden=!isGroupExpanded||isOverflowHidden}if(pricingPage.querySelectorAll("[data-feature-comparison]").forEach(comparison=>{const notIncludedLabel=comparison.dataset.notIncludedLabel||"Not included";comparison.querySelectorAll("[data-feature-group-row]").forEach(row=>{row.querySelector("[data-feature-available]")?row.querySelectorAll("[data-comparison-cell]").forEach(cell=>{if(!cell.querySelector("[data-feature-available]")){const excluded=document.createElement("span");excluded.className="pricing-comparison__excluded",excluded.setAttribute("aria-label",notIncludedLabel),excluded.textContent="—",cell.replaceChildren(excluded)}}):row.remove()}),comparison.querySelectorAll("[data-feature-group]").forEach(group=>{group.querySelector("[data-feature-group-row]")||group.remove()});const featureRows=Array.from(comparison.querySelectorAll("[data-feature-group-row]")),moreWrap=comparison.querySelector("[data-comparison-more-wrap]");featureRows.length>10&&moreWrap&&(featureRows.slice(10).forEach(row=>{row.dataset.comparisonOverflow="true",row.hidden=!0}),comparison.querySelectorAll("[data-feature-group]").forEach(group=>{Array.from(group.querySelectorAll("[data-feature-group-row]")).every(row=>"true"===row.dataset.comparisonOverflow)&&(group.dataset.comparisonOverflowGroup="true",group.hidden=!0)}),moreWrap.hidden=!1)}),pricingPage.querySelectorAll("[data-feature-group-toggle]").forEach(toggle=>{toggle.addEventListener("click",()=>{const group=toggle.closest("[data-feature-group]"),comparison=toggle.closest("[data-feature-comparison]"),rows=group.querySelectorAll("[data-feature-group-row
1]"),isExpanded="true"===toggle.getAttribute("aria-expanded");toggle.setAttribute("aria-expanded",String(!isExpanded)),rows.forEach(row=>{updateFeatureRowVisibility(comparison,row)})})}),pricingPage.querySelectorAll("[data-feature-group-header]").forEach(header=>{header.addEventListener("click",event=>{event.target.closest("[data-feature-group-toggle]")||header.querySelector("[data-feature-group-toggle]")?.click()})}),pricingPage.querySelectorAll("[data-comparison-more]").forEach(button=>{button.addEventListener("click",()=>{const comparison=button.closest("[data-feature-comparison]"),nextExpanded=!("true"===comparison.dataset.comparisonExpanded),label=button.querySelector("[data-comparison-more-label]");comparison.dataset.comparisonExpanded=String(nextExpanded),button.setAttribute("aria-expanded",String(nextExpanded)),label&&(label.textContent=nextExpanded?comparison.dataset.showFewerLabel||"Show fewer features":comparison.dataset.showMoreLabel||"Show more features"),comparison.querySelectorAll("[data-feature-group-row]").forEach(row=>updateFeatureRowVisibility(comparison,row)),function(comparison){const isTableExpanded="true"===comparison.dataset.comparisonExpanded;comparison.querySelectorAll('[data-comparison-overflow-group="true"]').forEach(group=>{group.hidden=!isTableExpanded})}(comparison)})}),triggers.forEach(trigger=>{trigger.addEventListener("click",()=>selectProduct(trigger))}),viewToggleButtons.forEach(button=>{button.addEventListener("click",()=>{const view=button.dataset.pricingViewToggle;"true"!==pricingPage.dataset.viewTransitioning&&pricingPage.dataset.pricingExperience!==view&&("3d"===view?async function(){if(!vemtrackPricingView||!mapsPricingView||!pricingCarousel)return;const transitionId=++viewTransitionId;pricingPage.dataset.viewTransitioning="true",mapsPricingView.removeAttribute("inert"),mapsPricingView.setAttribute("aria-hidden","false"),pricingCarousel.dataset.activeView="3d",pricingPage.dataset.pricingExperience="3d",additionalFeesCarousel&&(additionalFeesCarousel.dataset.activeView="3d"),mapsAdditionalFees&&(mapsAdditionalFees.removeAttribute("inert"),mapsAdditionalFees.setAttribute("aria-hidden","false")),mapsComparison&&(mapsComparison.hidden=!1,mapsComparison.removeAttribute("inert"),mapsComparison.setAttribute("aria-hidden","false")),updateViewToggle("3d"),await Promise.all([waitForViewTransition(),animateView(vemtrackComparison,"is-slide-out-left"),animateView(mapsComparison,"is-slide-in-right")]),transitionId===viewTransitionId&&(vemtrackComparison&&(vemtrackComparison.hidden=!0,vemtrackComparison.setAttribute("inert",""),vemtrackComparison.setAttribute("aria-hidden","true")),vemtrackPricingView.setAttribute("inert",""),vemtrackPricingView.setAttribute("aria-hidden","true"),vemtrackAdditionalFees&&(vemtrackAdditionalFees.setAttribute("inert",""),vemtrackAdditionalFees.setAttribute("aria-hidden","true")),delete pricingPage.dataset.viewTransitioning)}():async function(){if(!vemtrackPricingView||!mapsPricingView||!pricingCarousel)return;const transitionId=++viewTransitionId;pricingPage.dataset.viewTransitioning="true",vemtrackPricingView.removeAttribute("inert"),vemtrackPricingView.setAttribute("aria-hidden","false"),vemtrackComparison&&(vemtrackComparison.hidden=!1,vemtrackComparison.removeAttribute("inert"),vemtrackComparison.setAttribute("aria-hidden","false")),pricingCarousel.dataset.activeView="vemtrack",pricingPage.dataset.pricingExperience="vemtrack",additionalFeesCarousel&&(additionalFeesCarousel.dataset.activeView="vemtrack"),vemtrackAdditionalFees&&(vemtrackAdditionalFees.removeAttribute("inert"),vemtrackAdditionalFees.setAttribute("aria-hidden","false")),updateViewToggle("vemtrack"),await Promise.all([waitForViewTransition(),animateView(vemtrackComparison,"is-slide-in-left"),animateView(mapsComparison,"is-slide-out-right")]),transitionId===viewTransitionId&&(mapsPricingView.setAttribute("inert",""),mapsPricingView.setAttribute("aria-hidden","true"),mapsAdditionalFees&&(mapsAdditionalFees.setAttribute("inert",""),mapsAdditionalFees.setAttribute("aria-hidden","true")),mapsComparison&&(mapsComparison.hidden=!0,mapsComparison.setAttribute("inert",""),mapsComparison.setAttribute("aria-hidden","true")),delete pricingPage.dataset.viewTransitioning)}())})}),pricingPage.querySelectorAll("[data-quote-add-offering]").forEach(button=>{button.addEventListener("click",()=>addOffering(button))}),pricingPage.querySelectorAll("[data-quote-add-component]").forEach(button=>{button.addEventListener("click",()=>addComponent(button))}),pricingPage.querySelectorAll("[data-quote-add-fee]").forEach(button=>{button.addEventListener("click",()=>addComponent(button))}),pricingPage.querySelectorAll("[data-quote-items]").forEach(container=>{container.addEventListener("click",event=>{const remove=event.target.closest("[data-quote-remove]");remove&&removeQuoteItem(remove.dataset.quoteRemove)})}),pricingPage.querySelector("[data-quote-collapse]")?.addEventListener("click",event=>{const nextCollapsed=!("true"===quoteCart.dataset.collapsed);quoteCart.dataset.collapsed=String(nextCollapsed),event.currentTarget.setAttribute("aria-expanded",String(!nextCollapsed)),event.currentTarget.setAttribute("aria-label",nextCollapsed?getQuoteLabel("exp
1andLabel","Expand order summary"):getQuoteLabel("collapseLabel","Collapse order summary"))}),pricingPage.querySelector("[data-quote-open]")?.addEventListener("click",function(){quoteModal&&0!==quoteItems.size&&(quoteModal.hidden=!1,document.body.classList.add("quote-modal-open"),syncQuoteForm(),quoteModal.querySelector(".quote-modal__close")?.focus())}),pricingPage.querySelectorAll("[data-quote-close]").forEach(button=>{button.addEventListener("click",closeQuoteModal)}),document.addEventListener("keydown",event=>{"Escape"===event.key&&quoteModal&&!quoteModal.hidden&&closeQuoteModal()}),quoteForm){if(new MutationObserver(syncQuoteForm).observe(quoteForm,{childList:!0,subtree:!0}),!connectHubSpotQuoteForm()){let formReadyAttempts=0;const formReadyInterval=window.setInterval(()=>{formReadyAttempts+=1,(connectHubSpotQuoteForm()||formReadyAttempts>=40)&&window.clearInterval(formReadyInterval)},250)}const updateQuoteQuantities=event=>{const fieldName=event.target.name?.split("/").pop()||event.target.closest('[data-hsfc-id="NumberField"]')?.querySelector('input[type="hidden"][name]')?.name.split("/").pop();["quote_number_of_locations","quote_number_of_counting_points"].includes(fieldName)&&(pricingPage.querySelectorAll("[data-quote-totals]").forEach(container=>{container.replaceChildren(createQuoteTotalsElement())}),syncQuoteForm())};quoteForm.addEventListener("input",updateQuoteQuantities),quoteForm.addEventListener("change",updateQuoteQuantities)}currencySelectors.forEach(selector=>{selector.addEventListener("change",event=>{selectCurrency(event.target.value)})}),pricingPage.dataset.pricingExperience="vemtrack",selectCurrency(function(){const language=document.documentElement.lang.toLowerCase(),baseLanguage=language.split("-")[0];return currencyByLanguage[language]??currencyByLanguage[baseLanguage]??"eur"}())});
2//# sourceURL=https://26327664.fs1.hubspotusercontent-eu1.net/hubfs/26327664/hub_generated/module_assets/1/456822168790/1788178330462/module_pricing-page.js

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.