Прихожие

Образцы мебели в этой категории

Прихожая
«Пралине»
Прихожая
«Шарлотта»
Прихожая
«Контраст»
Прихожая
«Оригинал»
Прихожая
«Гранде»
Прихожая
«Ровена»

// Конфигурация reCAPTCHA const SITE_KEY = '6LfAhvgrAAAAAC7CMWC6A0zyR5RJ2TPpHszyajFy'; // Используем переменные для действий чтобы избежать конфликта с Smarty var actionRequest = 'request'; var actionSubmit = 'submit'; document.addEventListener('DOMContentLoaded', function() { var form = document.getElementById('request-form'); var submitBtn = document.getElementById('request_submit'); var modal = document.getElementById('request'); if (!form) return; // Инициализация reCAPTCHA при открытии модального окна if (modal) { modal.addEventListener('show.bs.modal', function() { // Сброс формы form.reset(); var messageDiv = document.getElementById('request-form-messages'); if (messageDiv) messageDiv.style.display = 'none'; }); modal.addEventListener('shown.bs.modal', function() { // Генерируем токен reCAPTCHA при открытии if (typeof grecaptcha !== 'undefined') { grecaptcha.ready(function() { // Создаем объект для действия чтобы избежать фигурных скобок var actionObj = {}; actionObj.action = actionRequest; grecaptcha.execute(SITE_KEY, actionObj).then(function(token) { document.getElementById('recaptchaResponse').value = token; }); }); } }); } // Обработка отправки формы form.addEventListener('submit', function(e) { e.preventDefault(); console.log('Начало отправки формы с reCAPTCHA'); // Проверка honeypot поля var honeypot = form.querySelector('input[name="website"]'); if (honeypot.value !== '') { showMessage('Обнаружена подозрительная активность.', 'error'); return; } // Валидация email var email = document.getElementById('request_email').value; if (!isValidEmail(email)) { showMessage('Пожалуйста, введите корректный email адрес.', 'error'); document.getElementById('request_email').focus(); return; } // Проверка телефона var phone = document.getElementById('request_phone_input').value; if (!phone.trim()) { showMessage('Пожалуйста, введите телефон.', 'error'); document.getElementById('request_phone_input').focus(); return; } // Блокировка кнопки отправки submitBtn.disabled = true; submitBtn.textContent = 'Отправка...'; submitBtn.setAttribute('aria-label', 'Идет отправка формы...'); // Обновление токена reCAPTCHA и отправка формы if (typeof grecaptcha !== 'undefined') { grecaptcha.ready(function() { // Создаем объект для действия чтобы избежать фигурных скобок var actionObj = {}; actionObj.action = actionSubmit; grecaptcha.execute(SITE_KEY, actionObj).then(function(token) { document.getElementById('recaptchaResponse').value = token; // Сбор данных формы var formData = new FormData(form); console.log('Отправка запроса с reCAPTCHA токеном'); // Отправка данных на сервер fetch('/assets/components/callback/action_request.php', { method: 'POST', body: formData }) .then(function(response) { console.log('Статус ответа:', response.status); return response.json(); }) .then(function(data) { console.log('Ответ сервера:', data); if (data.success) { showMessage('✅ Форма успешно отправлена! Мы свяжемся с вами в ближайшее время.', 'success'); form.reset(); // Закрываем модальное окно через 3 секунды setTimeout(function() { closeModal(); }, 3000); } else { showMessage('❌ ' + data.message, 'error'); console.log('Детали ошибки:', data.debug); } }) .catch(function(error) { console.error('Ошибка сети:', error); showMessage('Ошибка сети. Пожалуйста, проверьте соединение и попробуйте снова.', 'error'); }) .finally(function() { submitBtn.disabled = false; submitBtn.textContent = 'Отправить'; submitBtn.setAttribute('aria-label', 'Отправить форму'); }); }).catch(function(recaptchaError) { console.error('Ошибка reCAPTCHA:', recaptchaError); showMessage('Ошибка системы безопасности. Пожалуйста, обновите страницу.', 'error'); submitBtn.disabled = false; submitBtn.textContent = 'Отправить'; submitBtn.setAttribute('aria-label', 'Отправить форму'); }); }); } else { showMessage('Ошибка загрузки системы безопасности.', 'error'); submitBtn.disabled = false; submitBtn.textContent = 'Отправить'; submitBtn.setAttribute('aria-label', 'Отправить форму'); } }); // Функция для закрытия модального окна function closeModal() { var modal = document.getElementById('request'); if (modal) { // Способ 1: Через Bootstrap if (typeof bootstrap !== 'undefined') { var bsModal = bootstrap.Modal.getInstance(modal); if (bsModal) { bsModal.hide(); return; } } // Способ 2: Через jQuery if (typeof $ !== 'undefined' && $.fn.modal) { $(modal).modal('hide'); return; } // Способ 3: Прямое скрытие modal.style.display = 'none'; document.body.classList.remove('modal-open'); // Убираем backdrop var backdrops = document.querySelectorAll('.modal-backdrop'); backdrops.forEach(function(backdrop) { backdrop.remove(); }); } } // Функция для показа сообщений function showMessage(message, type) { var messageDiv = document.getElementById('request-form-messages'); if (messageDiv) { messageDiv.textContent = message; messageDiv.className = 'form-messages alert alert-' + type; messageDiv.style.display = 'block'; messageDiv.setAttribute('role', 'alert'); // Автоскрытие для ошибок через 5 секунд if (type === 'error') { setTimeout(function() { messageDiv.style.display = 'none'; }, 5000); } } else { console.log('Сообщение:', message); } } // Функция валидации email function isValidEmail(email) { var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); } });