/* A-LINE consultation helper. No storage, network requests, tracking or automatic transmission. */ (function () { 'use strict'; const stages = { concern: { label: '住宅ローンの返済を続けられるか不安です。', title: '滞納する前から、相談できます。', body: 'まずは借入先に、返済方法の見直しが可能か相談しましょう。A-LINEでは売却を決める前から、住まいと今後の選択肢を整理します。', check: '毎月の返済がどのくらい負担になっているか。いまの家に住み続けたいか。分かる範囲で構いません。' }, late: { label: '住宅ローンの支払いが遅れています。', title: 'いま確認できることを、一緒に。', body: '返済の遅れや借入先からの連絡の状況を整理します。借入先への相談を進めながら、売却する場合の見通しも確認していきましょう。', check: 'いつ頃から支払いが遅れているか。借入先から、どのような連絡が来ているか。' }, notice: { label: '金融機関・裁判所から通知が届いています。', title: 'まず、書類の名前と期限を確認。', body: '通知に書かれた期限や手続きの段階によって、選べる方法が変わります。書類をお手元に、借入先・通知の窓口へ早めに確認し、A-LINEにもご相談ください。', check: '書類の名称、発行日、記載された期限や入札日。対応できるかどうかは、内容を確認したうえで判断します。' }, unsure: { label: '住宅ローンと住まいについて、まずは話を聞いてほしいです。', title: '話せるところから、少しずつ。', body: '最初から詳しい住所やローン残高を伝える必要はありません。まずは、いま気になっていることをお聞かせください。', check: 'ご相談したいことと、連絡を受けやすい方法・時間帯。' } }; const wishes = { options: '今の状況で、どのような選択肢があるか知りたいです。', stay: 'できれば今の家に住み続けたいと考えています。', sell: '売却した場合の流れや、その後の暮らしについて相談したいです。', cost: '必要な費用や、売却後に残る住宅ローンについて知りたいです。' }; const considerations = { ask: '連絡方法や時間帯は、まず相談させてください。', text: '最初は文章でのやり取りを希望します。電話は事前にご相談ください。', 'no-voicemail': '留守番電話にはメッセージを残さないでください。', 'no-post': '自宅への郵送は、事前にご相談ください。' }; function makeMessage(stage, wish, consideration) { const chosen = stages[stage] || stages.unsure; return ['A-LINE ご担当者様', '住宅ローン返済・住まいについての相談です。', chosen.label, wishes[wish] || wishes.options, considerations[consideration] || considerations.ask, 'よろしくお願いいたします。'].join('\n'); } // Pure function export for verification; this branch is not used by browsers. if (typeof module === 'object' && module.exports) module.exports = { stages, wishes, considerations, makeMessage }; if (typeof document === 'undefined') return; const root = document.getElementById('aline-ninbai'); if (!root) return; const select = root.querySelector('#contact-stage'); const wish = root.querySelector('#wish'); const consideration = root.querySelector('#consideration'); const message = root.querySelector('#message-text'); const copyStatus = root.querySelector('#copy-status'); const radios = [...root.querySelectorAll('input[name="stage"]')]; function updateMessage() { message.value = makeMessage(select.value, wish.value, consideration.value); copyStatus.textContent = ''; } function updateGuidance(value) { const stage = stages[value] || stages.unsure; root.querySelector('#guidance-title').textContent = stage.title; root.querySelector('#guidance-body').textContent = stage.body; root.querySelector('#guidance-check').textContent = stage.check; select.value = Object.hasOwn(stages, value) ? value : 'unsure'; radios.forEach(radio => { radio.checked = radio.value === value; }); updateMessage(); } radios.forEach(radio => radio.addEventListener('change', () => updateGuidance(radio.value))); select.addEventListener('change', () => updateGuidance(select.value)); wish.addEventListener('change', updateMessage); consideration.addEventListener('change', updateMessage); root.querySelector('#copy-message').addEventListener('click', async () => { if (navigator.clipboard && window.isSecureContext) { try { await navigator.clipboard.writeText(message.value); copyStatus.textContent = 'コピーしました。送信先に貼り付けてください。'; return; } catch (_) { /* Manual selection remains available when clipboard access is denied. */ } } message.focus(); message.select(); message.setSelectionRange(0, message.value.length); copyStatus.textContent = '文章を選択しました。手動でコピーしてください。'; }); function reset() { wish.value = 'options'; consideration.value = 'ask'; updateGuidance('unsure'); radios.forEach(radio => { radio.checked = false; }); } root.querySelector('#reset-helper').addEventListener('click', () => { reset(); copyStatus.textContent = '選択をリセットしました。'; }); // Avoid retaining consultation choices when navigating back via the browser cache. window.addEventListener('pageshow', event => { if (event.persisted) reset(); }); reset(); root.classList.add('enhanced'); }());