$(document).ready(function() { // Функции для отображения сообщений function showMessage(type, text) { const messageId = type + 'Message'; const $message = $('#' + messageId); $message.text(text).fadeIn(300); setTimeout(() => { $message.fadeOut(300); }, 5000); } // Проверка, является ли email администратора function isAdminEmail(email) { const adminEmails = ['admin@aeterna.ru', 'administrator@aeterna.ru', 'aeterna@mail.ru']; return adminEmails.includes(email.toLowerCase()); } // Валидация ФИО (без цифр) function validateFIO(fio) { const words = fio.trim().split(/\s+/); // Проверяем, что минимум 2 слова и нет цифр const hasNoDigits = !/\d/.test(fio); return words.length >= 2 && words.every(word => word.length >= 2) && hasNoDigits; } // Валидация города function validateCity(city) { return city.trim().length >= 2 && /^[а-яА-ЯёЁ\s-]+$/.test(city); } // Валидация email function validateEmail(email) { const localPart = email.split('@')[0]; // Проверка на кириллические символы перед @ if (/[а-яА-ЯёЁ]/.test(localPart)) { showError('email', 'В тексте перед знаком "@" не должно быть кириллических символов'); return false; } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { showError('email', 'Введите корректный email адрес'); return false; } hideError('email'); return true; } // Валидация телефона function validatePhone(phone) { const phoneRegex = /^(\+7|8)[\s-]?\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$/; return phoneRegex.test(phone.replace(/\s/g, '')); } // Валидация пароля function validatePassword(password) { return password.length >= 6; } // Показать/скрыть ошибку function showError(fieldId, message) { $('#' + fieldId).addClass('error'); $('#' + fieldId + '-error').text(message).show(); } function hideError(fieldId) { $('#' + fieldId).removeClass('error'); $('#' + fieldId + '-error').hide(); } // Валидация формы function validateForm() { let isValid = true; // Валидация ФИО const fio = $('#fio').val(); if (!validateFIO(fio)) { if (/\d/.test(fio)) { showError('fio', 'ФИО не должно содержать цифры'); } else { showError('fio', 'ФИО должно содержать минимум 2 слова (каждое от 2 символов)'); } isValid = false; } else { hideError('fio'); } // Валидация города const city = $('#city').val(); if (!validateCity(city)) { showError('city', 'Укажите корректное название города (только русские буквы)'); isValid = false; } else { hideError('city'); } // Валидация email const email = $('#email').val(); if (!validateEmail(email)) { showError('email', 'Введите корректный email адрес'); isValid = false; } else { hideError('email'); } // Валидация телефона const phone = $('#phone').val(); if (!validatePhone(phone)) { showError('phone', 'Введите номер в формате: +7(912)999-12-23'); isValid = false; } else { hideError('phone'); } // Валидация пароля const password = $('#password').val(); if (!validatePassword(password)) { showError('password', 'Пароль должен содержать минимум 6 символов'); isValid = false; } else { hideError('password'); } // Проверка совпадения паролей const confirmPassword = $('#confirm-password').val(); if (password !== confirmPassword) { showError('confirm-password', 'Пароли не совпадают'); isValid = false; } else { hideError('confirm-password'); } // Проверка согласия с условиями if (!$('#privacy').is(':checked')) { $('#privacy-error').show(); isValid = false; } else { $('#privacy-error').hide(); } return isValid; } // Реальная валидация при вводе $('input').on('blur', function() { const fieldId = $(this).attr('id'); const value = $(this).val(); switch(fieldId) { case 'fio': if (!validateFIO(value)) { if (/\d/.test(value)) { showError(fieldId, 'ФИО не должно содержать цифры'); } else { showError(fieldId, 'ФИО должно содержать минимум 2 слова'); } } else { hideError(fieldId); } break; case 'city': if (!validateCity(value)) { showError(fieldId, 'Укажите корректное название города'); } else { hideError(fieldId); } break; case 'email': if (!validateEmail(value)) { showError(fieldId, 'Введите корректный email адрес'); } else { hideError(fieldId); } break; case 'phone': if (!validatePhone(value)) { showError(fieldId, 'Введите номер в формате: +7(912)999-12-23'); } else { hideError(fieldId); } break; case 'password': if (!validatePassword(value)) { showError(fieldId, 'Пароль должен содержать минимум 6 символов'); } else { hideError(fieldId); } break; case 'confirm-password': const password = $('#password').val(); if (value !== password) { showError(fieldId, 'Пароли не совпадают'); } else { hideError(fieldId); } break; } }); // Обработка отправки формы $('#registrationForm').on('submit', function(e) { e.preventDefault(); if (validateForm()) { const email = $('#email').val(); const isAdmin = isAdminEmail(email); // Сохраняем данные пользователя в localStorage const userData = { email: email, fio: $('#fio').val(), phone: $('#phone').val(), isAdmin: isAdmin, registered: new Date().toISOString() }; localStorage.setItem('userData', JSON.stringify(userData)); localStorage.setItem('isLoggedIn', 'true'); localStorage.setItem('isAdmin', isAdmin.toString()); // Эмуляция успешной регистрации showMessage('success', 'Регистрация прошла успешно! ' + (isAdmin ? 'Вы зарегистрированы как администратор.' : 'Добро пожаловать в AETERNA!')); setTimeout(() => { // Перенаправление на главную страницу window.location.href = 'cite_mebel.php'; }, 2000); } else { showMessage('error', 'Пожалуйста, исправьте ошибки в форме'); } }); // Плавная прокрутка к якорям $('a[href^="#"]').on('click', function(event) { var target = $(this.getAttribute('href')); if (target.length) { event.preventDefault(); $('html, body').stop().animate({ scrollTop: target.offset().top }, 1000); } }); // Переключение между регистрацией и входом $('.login-btn').on('click', function() { showMessage('warning', 'Переход к форме входа...'); setTimeout(() => { window.location.href = 'вход.php'; }, 1000); }); // Обработка ссылки "Сменить пароль" $('.password-link').on('click', function(e) { e.preventDefault(); showMessage('warning', 'Функция смены пароля будет доступна после регистрации'); }); // Маска для телефона $('#phone').on('input', function() { let value = $(this).val().replace(/\D/g, ''); if (value.startsWith('7') || value.startsWith('8')) { value = value.substring(1); } if (value.length > 0) { value = '+7(' + value; if (value.length > 6) value = value.substring(0, 6) + ')' + value.substring(6); if (value.length > 10) value = value.substring(0, 10) + '-' + value.substring(10); if (value.length > 13) value = value.substring(0, 13) + '-' + value.substring(13); if (value.length > 16) value = value.substring(0, 16); } $(this).val(value); }); // Запрет ввода цифр в поле ФИО $('#fio').on('input', function() { let value = $(this).val(); // Удаляем цифры из значения value = value.replace(/\d/g, ''); $(this).val(value); }); }); // Для входа (файл вход.html) $(document).ready(function() { // Проверяем, если пользователь уже вошел if (localStorage.getItem('isLoggedIn') === 'true') { const userData = JSON.parse(localStorage.getItem('userData') || '{}'); if (userData.email) { $('#login-email').val(userData.email); } } // Функция проверки пароля администратора function checkAdminPassword(email, password) { // Административные аккаунты const adminAccounts = { 'admin@aeterna.ru': 'admin123', 'administrator@aeterna.ru': 'admin123', 'aeterna@mail.ru': 'admin123' }; return adminAccounts[email.toLowerCase()] === password; } // Валидация формы входа $('#loginForm').on('submit', function(e) { e.preventDefault(); let isValid = true; const email = $('#login-email').val(); const password = $('#login-password').val(); // Валидация email if (!isValidEmail(email)) { $('#email-error').show(); isValid = false; } else { $('#email-error').hide(); } // Валидация пароля if (password.length < 6) { $('#password-error').show(); isValid = false; } else { $('#password-error').hide(); } if (isValid) { // Здесь обычно отправка данных на сервер showMessage('success', 'Вы успешно вошли в систему!'); // Перенаправление на главную страницу через 1.5 секунды setTimeout(function() { window.location.href = 'cite_mebel.php'; }, 1500); } }); // Функция показа сообщений function showMessage(type, text) { const messageId = type + 'Message'; const $message = $('#' + messageId); $message.text(text).show(); setTimeout(function() { $message.fadeOut(); }, 3000); } // Скрываем сообщения об ошибках при фокусе на полях $('input').on('focus', function() { $(this).next('.error-message').hide(); }); // Обработка чекбокса "Запомнить меня" $('#remember').on('change', function() { if ($(this).is(':checked')) { const email = $('#login-email').val(); if (email) { localStorage.setItem('rememberedEmail', email); } } else { localStorage.removeItem('rememberedEmail'); } }); // Автозаполнение email, если пользователь выбрал "Запомнить меня" const rememberedEmail = localStorage.getItem('rememberedEmail'); if (rememberedEmail) { $('#login-email').val(rememberedEmail); $('#remember').prop('checked', true); } // Обработка ссылки "Забыли пароль?" $('.forgot-password').on('click', function(e) { e.preventDefault(); showMessage('info', 'Для восстановления пароля обратитесь к администратору'); }); });