(function () { 'use strict'; function ready(callback) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', callback); } else { callback(); } } ready(function () { var modal = document.getElementById('ndQuoteModal'); var form = document.getElementById('ndQuoteForm'); var status = document.getElementById('ndQuoteStatus'); var result = document.getElementById('ndQuoteResult'); var resultTitle = document.getElementById('ndQuoteResultTitle'); var resultMessage = document.getElementById('ndQuoteResultMessage'); var resultIcon = result ? result.querySelector('.nd-quote-result__icon i') : null; var resultBack = result ? result.querySelector('[data-quote-result-back]') : null; var resultClose = result ? result.querySelector('[data-quote-result-close]') : null; var triggers = document.querySelectorAll('.nd-quote-trigger'); var closeButtons = modal ? modal.querySelectorAll('[data-quote-close]') : []; var customerType = form ? form.querySelector('[name="musteri_tipi"]') : null; var companyField = form ? form.querySelector('[name="firma_adi"]') : null; var loadingDate = form ? form.querySelector('[name="yukleme_tarihi"]') : null; var lastFocused = null; if (!modal || !form) { return; } if (loadingDate) { var today = new Date(); var month = String(today.getMonth() + 1); var day = String(today.getDate()); loadingDate.min = today.getFullYear() + '-' + (month.length < 2 ? '0' + month : month) + '-' + (day.length < 2 ? '0' + day : day); } function updateCompanyRequirement() { if (!customerType || !companyField) { return; } companyField.required = customerType.value === 'Firma'; } if (customerType) { customerType.addEventListener('change', updateCompanyRequirement); updateCompanyRequirement(); } function openModal(event) { if (event) { event.preventDefault(); } lastFocused = document.activeElement; modal.classList.add('is-open'); modal.setAttribute('aria-hidden', 'false'); document.body.classList.add('nd-modal-open'); window.setTimeout(function () { var firstInput = form.querySelector('select, input:not([type="hidden"]), textarea'); if (firstInput) { firstInput.focus(); } }, 50); } function hideResult() { if (!result) { return; } result.classList.remove('is-visible', 'is-success', 'is-error'); result.setAttribute('aria-hidden', 'true'); form.classList.remove('is-result-hidden'); } function showResult(success, message, language) { if (!result || !resultTitle || !resultMessage) { status.className = 'nd-quote-form__status ' + (success ? 'is-success' : 'is-error'); status.textContent = message; return; } result.classList.remove('is-success', 'is-error'); result.classList.add('is-visible', success ? 'is-success' : 'is-error'); result.setAttribute('aria-hidden', 'false'); form.classList.add('is-result-hidden'); resultTitle.textContent = success ? (language === 'EN' ? 'Request received' : 'Talebiniz Alındı') : (language === 'EN' ? 'Request could not be sent' : 'Talep Gönderilemedi'); resultMessage.textContent = message || (language === 'EN' ? 'Please try again.' : 'Lütfen tekrar deneyin.'); if (resultIcon) { resultIcon.className = 'fa ' + (success ? 'fa-check' : 'fa-exclamation'); } if (resultBack) { resultBack.style.display = success ? 'none' : 'inline-flex'; } window.setTimeout(function () { var focusTarget = success ? resultClose : resultBack; if (focusTarget) { focusTarget.focus(); } }, 50); } function closeModal() { modal.classList.remove('is-open'); modal.setAttribute('aria-hidden', 'true'); document.body.classList.remove('nd-modal-open'); hideResult(); if (lastFocused && typeof lastFocused.focus === 'function') { lastFocused.focus(); } } for (var i = 0; i < triggers.length; i++) { triggers[i].addEventListener('click', openModal); } for (var j = 0; j < closeButtons.length; j++) { closeButtons[j].addEventListener('click', closeModal); } if (resultBack) { resultBack.addEventListener('click', function () { hideResult(); var submitButton = form.querySelector('.nd-quote-form__submit'); if (submitButton) { submitButton.focus(); } }); } if (resultClose) { resultClose.addEventListener('click', closeModal); } document.addEventListener('keydown', function (event) { if (!modal.classList.contains('is-open')) { return; } if (event.key === 'Escape' || event.keyCode === 27) { closeModal(); return; } if (event.key === 'Tab' || event.keyCode === 9) { var focusArea = result && result.classList.contains('is-visible') ? result : form; var focusable = focusArea.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'); if (!focusable.length) { return; } var first = focusable[0]; var last = focusable[focusable.length - 1]; if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); } else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus(); } } }); form.addEventListener('submit', function (event) { event.preventDefault(); if (!form.checkValidity()) { form.reportValidity(); return; } var submitButton = form.querySelector('.nd-quote-form__submit'); var submitLabel = submitButton.querySelector('span'); var originalLabel = submitLabel.textContent; var language = form.querySelector('[name="form_lang"]').value; status.className = 'nd-quote-form__status'; status.textContent = ''; submitButton.disabled = true; submitButton.classList.add('is-loading'); submitLabel.textContent = language === 'EN' ? 'Sending...' : 'Gönderiliyor...'; var xhr = new XMLHttpRequest(); xhr.open('POST', form.action, true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onreadystatechange = function () { if (xhr.readyState !== 4) { return; } submitButton.disabled = false; submitButton.classList.remove('is-loading'); submitLabel.textContent = originalLabel; var response; try { response = JSON.parse(xhr.responseText); } catch (error) { response = { success: false, message: language === 'EN' ? 'An unexpected error occurred. Please try again.' : 'Beklenmeyen bir hata oluştu. Lütfen tekrar deneyin.' }; } showResult(Boolean(response.success), response.message, language); if (response.success) { form.reset(); updateCompanyRequirement(); } }; xhr.onerror = function () { submitButton.disabled = false; submitButton.classList.remove('is-loading'); submitLabel.textContent = originalLabel; showResult(false, language === 'EN' ? 'The connection could not be established. Please try again.' : 'Bağlantı kurulamadı. Lütfen tekrar deneyin.', language); }; xhr.send(new FormData(form)); }); }); }());