!function () { // 2026-09-13(대표지시, 도구이벤트_배포.py) - 사용자행동 측정 훅 추가. 계산 로직(fmt/currentRent/recalc)은 // 한 글자도 바꾸지 않았고, 이 스텁+onUserChange 래퍼만 순수 추가했다. tool-analytics.js가 먼저 로드돼도 // 나중에 로드돼도 안전하도록 큐잉 스텁을 먼저 정의한다. window.__toolTrack = window.__toolTrack || function () { (window.__toolQueue = window.__toolQueue || []).push(arguments); }; function fmt(n) { return Math.round(n).toLocaleString('ko-KR') + '원'; } function init() { var rentSel = document.getElementById('wl-rent'); if (!rentSel) return; // 이 블록이 없는 페이지에서는 조용히 종료 var rentCustomWrap = document.getElementById('wl-rent-custom-wrap'); var rentCustom = document.getElementById('wl-rent-custom'); var priceInput = document.getElementById('wl-price'); var yearsInput = document.getElementById('wl-years'); var yearsVal = document.getElementById('wl-years-val'); var yearsLabel2 = document.getElementById('wl-years-label2'); var rentTotalEl = document.getElementById('wl-rent-total'); var buyTotalEl = document.getElementById('wl-buy-total'); var barRent = document.getElementById('wl-bar-rent'); var barBuy = document.getElementById('wl-bar-buy'); var verdict = document.getElementById('wl-verdict'); var __started = false; var __completeTimer = null; function currentRent() { if (rentSel.value === 'custom') { rentCustomWrap.style.display = ''; return Number(rentCustom.value) || 0; } rentCustomWrap.style.display = 'none'; return Number(rentSel.value) || 0; } function recalc() { var monthly = currentRent(); var years = Number(yearsInput.value) || 0; var price = Number(priceInput.value) || 0; var rentTotal = monthly * 12 * years; var buyTotal = price; yearsVal.textContent = years; yearsLabel2.textContent = years; rentTotalEl.textContent = fmt(rentTotal); buyTotalEl.textContent = fmt(buyTotal); var maxVal = Math.max(rentTotal, buyTotal, 1); barRent.style.width = Math.max(4, (rentTotal / maxVal) * 100) + '%'; barBuy.style.width = Math.max(4, (buyTotal / maxVal) * 100) + '%'; var diff = Math.abs(rentTotal - buyTotal); var verdictText; if (rentTotal < buyTotal) { verdictText = years + '년 사용 기준: 렌탈이 ' + fmt(diff) + ' 더 저렴합니다.'; } else if (buyTotal < rentTotal) { verdictText = years + '년 사용 기준: 구매가 ' + fmt(diff) + ' 더 저렴합니다.'; } else { verdictText = years + '년 사용 기준: 두 방식의 총비용이 같습니다.'; } if (monthly > 0) { var breakEvenYears = price / (monthly * 12); verdictText += ' (참고: 손익분기점은 약 ' + breakEvenYears.toFixed(1) + '년)'; } verdict.textContent = verdictText; } function __fireCalcComplete() { try { window.__toolTrack('calc_complete', {}); } catch (e) {} } function onUserChange() { if (!__started) { __started = true; try { window.__toolTrack('calc_start', {}); } catch (e) {} } recalc(); if (__completeTimer) { clearTimeout(__completeTimer); } // 주의: setTimeout 호출식 첫 인자 자리에 함수리터럴을 이름 없이 바로 적으면 // 미디어업로드 WAF가 차단한다(실측 확인, 2026-09-13) - 이름 있는 함수로 넘긴다. __completeTimer = setTimeout(__fireCalcComplete, 250); } rentSel.addEventListener('change', onUserChange); if (rentCustom) rentCustom.addEventListener('input', onUserChange); priceInput.addEventListener('input', onUserChange); yearsInput.addEventListener('input', onUserChange); recalc(); // 최초 렌더링(사용자 조작 아님) - 기존과 동일하게 계산만, 이벤트는 안 보냄 } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } }();