401 lines
23 KiB
JavaScript
401 lines
23 KiB
JavaScript
// Глобальные переводы (расширены для location, about, booking, food)
|
||
window.translations = {
|
||
ru: {
|
||
nav_about: "О нас",
|
||
nav_food: "Кухня",
|
||
nav_location: "Где мы",
|
||
nav_booking: "Бронь",
|
||
hero_title: "Добро пожаловать",
|
||
hero_subtitle: "Ваш идеальный отдых на берегу Черного моря",
|
||
hero_btn: "Забронировать номер",
|
||
about_title: "Море в шаговой доступности",
|
||
about_subtitle: "Бескрайние пляжи Гудауты",
|
||
about_text: "Наш отель расположен в живописном селе Мгудзырхуа. Мы предлагаем комфортные номера и прямой выход к широкому, чистому галечно-песчаному пляжу.",
|
||
about_extra: "Гудаутский район известен как «Золотой берег Абхазии» – здесь самые широкие пляжи, прогретое море и уникальный микроклимат, сочетающий горный и морской воздух.",
|
||
fact1: "🏝️ Золотой берег Абхазии",
|
||
fact2: "🌡️ Температура моря до +28°C летом",
|
||
fact3: "⛰️ Чистейший воздух у подножия Кавказа",
|
||
fact4: "🍇 Собственные виноградники и вино",
|
||
food_title: "Вкус Абхазии",
|
||
food_subtitle: "Домашняя кухня из местных продуктов",
|
||
food_text: "Почувствуйте гостеприимство! Свежайший сыр сулугуни, мамалыга, овощи с грядки и домашнее вино.",
|
||
food_request: "🍽️ Учитываем пожелания по питанию",
|
||
food_chef: "👨🍳 Приготовим блюдо для Вас – спросите у шефа",
|
||
food_breakfast: "🕒 Завтрак: с 8:30 до 10:00",
|
||
food_lunch: "🕒 Обед: с 12:00 до 14:00",
|
||
food_dinner: "🕒 Ужин: с 19:00 до 21:00",
|
||
food_note: "📢 Сообщите администратору о любых предпочтениях при заселении – мы всё организуем!",
|
||
loc_title: "Удобное расположение",
|
||
book_title: "Забронировать отдых",
|
||
label_name: "Ваше имя",
|
||
label_phone: "Номер телефона",
|
||
ph_name: "Иван Иванов",
|
||
fz152: "Согласие на обработку данных (152-ФЗ)",
|
||
book_btn: "Отправить заявку",
|
||
footer_text: "© 2026 Hotel 777. Абхазия, Мгудзырхуа.",
|
||
cookie_text: "Мы используем файлы cookie для улучшения работы сайта.",
|
||
cookie_btn: "Согласен",
|
||
alert_msg: "Спасибо! Ваша заявка принята.",
|
||
loc_address_label: "Наш Адрес:",
|
||
loc_coords_label: "Координаты:",
|
||
loc_show_map: "Показать карту",
|
||
loc_city_sukhum: "Сухум",
|
||
loc_city_ochamchyra: "Очамчыра",
|
||
loc_city_tkvarcheli: "Ткуарчал",
|
||
loc_city_gal: "Гал",
|
||
loc_city_new_athos: "Новый Афон",
|
||
loc_city_primorsk: "Приморск",
|
||
loc_city_gudauta: "Гудаута",
|
||
loc_km: "км",
|
||
book_adults: "Количество взрослых",
|
||
book_children: "Количество детей (до 12 лет)",
|
||
book_checkin: "Дата заезда",
|
||
book_checkout: "Дата выезда",
|
||
please_fill_all: "Пожалуйста, заполните все обязательные поля",
|
||
booking_success: "Заявка отправлена! Мы свяжемся с вами.",
|
||
booking_error: "Ошибка отправки. Попробуйте позже.",
|
||
loc_facts_sukhum: [
|
||
"🏛️ Один из древнейших городов мира, основан в VI веке до н.э.",
|
||
"🌿 Ботанический сад — один из старейших на Кавказе (основан в 1838 году).",
|
||
"🐬 Летом можно наблюдать дельфинов прямо у набережной."
|
||
],
|
||
loc_facts_ochamchyra: [
|
||
"🌊 Известен своим широким пляжем и чистой водой.",
|
||
"🏚️ В окрестностях находятся руины древнего храма.",
|
||
"🍊 Славится цитрусовыми садами."
|
||
],
|
||
loc_facts_tkvarcheli: [
|
||
"⛰️ Город расположен в живописном ущелье, окружён горами.",
|
||
"🚂 Железнодорожная станция на живописной ветке.",
|
||
"💧 Рядом находятся уникальные горные озёра."
|
||
],
|
||
loc_facts_gal: [
|
||
"🌾 Важный сельскохозяйственный центр Абхазии.",
|
||
"🍈 Знаменит дынями и арбузами, выращиваемыми в регионе.",
|
||
"🏛️ Имеет богатую историю, связанную с мегрельской культурой."
|
||
],
|
||
loc_facts_new_athos: [
|
||
"⛪ Знаменит Новоафонским монастырём (XIX век).",
|
||
"🕯️ Экскурсия в пещеру — одно из самых ярких впечатлений.",
|
||
"🚞 Работает канатная дорога к монастырю."
|
||
],
|
||
loc_facts_primorsk: [
|
||
"🌅 Уютный посёлок с отличными пляжами.",
|
||
"🏞️ Близость к Пицундскому заповеднику.",
|
||
"🍷 В окрестностях производят домашнее вино."
|
||
],
|
||
loc_facts_gudauta: [
|
||
"🎖️ Город воинской славы, родина многих героев.",
|
||
"🏖️ Широкие галечные пляжи — одни из лучших в Абхазии.",
|
||
"🍇 Традиционные виноградники и знаменитые сорта винограда."
|
||
],
|
||
loc_facts_default: "✨ Удивительные места ждут вас!"
|
||
},
|
||
en: {
|
||
nav_about: "About Us",
|
||
nav_food: "Cuisine",
|
||
nav_location: "Where We Are",
|
||
nav_booking: "Booking",
|
||
hero_title: "Welcome",
|
||
hero_subtitle: "Your perfect getaway on the Black Sea coast",
|
||
hero_btn: "Book a room",
|
||
about_title: "Sea within walking distance",
|
||
about_subtitle: "Endless beaches of Gudauta",
|
||
about_text: "Our hotel is located in the picturesque village of Mgudzyrkhua. We offer comfortable rooms and direct access to the wide, clean pebble-sand beach.",
|
||
about_extra: "The Gudauta district is known as the 'Golden Beach of Abkhazia' – the widest beaches, warm sea, and a unique microclimate combining mountain and sea air.",
|
||
fact1: "🏝️ Golden Beach of Abkhazia",
|
||
fact2: "🌡️ Sea temperature up to +28°C in summer",
|
||
fact3: "⛰️ Cleanest air at the foot of the Caucasus",
|
||
fact4: "🍇 Own vineyards and wine",
|
||
food_title: "Taste of Abkhazia",
|
||
food_subtitle: "Homemade cuisine from local ingredients",
|
||
food_text: "Feel the hospitality! Suluguni cheese, mamalyga, garden vegetables, and homemade wine.",
|
||
food_request: "🍽️ We accommodate dietary preferences",
|
||
food_chef: "👨🍳 We'll cook a dish for you – ask the chef",
|
||
food_breakfast: "🕒 Breakfast: 8:30 – 10:00",
|
||
food_lunch: "🕒 Lunch: 12:00 – 14:00",
|
||
food_dinner: "🕒 Dinner: 19:00 – 21:00",
|
||
food_note: "📢 Tell the administrator about any preferences at check-in – we'll arrange everything!",
|
||
loc_title: "Convenient location",
|
||
book_title: "Book your holiday",
|
||
label_name: "Your name",
|
||
label_phone: "Phone number",
|
||
ph_name: "Ivan Ivanov",
|
||
fz152: "Consent to data processing (152-FZ RF)",
|
||
book_btn: "Send request",
|
||
footer_text: "© 2026 Hotel 777. Abkhazia, Mgudzyrkhua.",
|
||
cookie_text: "We use cookies to improve the website.",
|
||
cookie_btn: "Agree",
|
||
alert_msg: "Thank you! Your request has been accepted.",
|
||
loc_address_label: "Our Address:",
|
||
loc_coords_label: "Coordinates:",
|
||
loc_show_map: "Show map",
|
||
loc_city_sukhum: "Sukhum",
|
||
loc_city_ochamchyra: "Ochamchira",
|
||
loc_city_tkvarcheli: "Tkvarcheli",
|
||
loc_city_gal: "Gal",
|
||
loc_city_new_athos: "New Athos",
|
||
loc_city_primorsk: "Primorsk",
|
||
loc_city_gudauta: "Gudauta",
|
||
loc_km: "km",
|
||
book_adults: "Number of adults",
|
||
book_children: "Number of children (under 12)",
|
||
book_checkin: "Check-in date",
|
||
book_checkout: "Check-out date",
|
||
please_fill_all: "Please fill all required fields",
|
||
booking_success: "Request sent! We will contact you.",
|
||
booking_error: "Submission error. Please try again later.",
|
||
loc_facts_sukhum: [
|
||
"🏛️ One of the oldest cities in the world, founded in the 6th century BC.",
|
||
"🌿 Botanical Garden – one of the oldest in the Caucasus (founded 1838).",
|
||
"🐬 Dolphins can be seen near the embankment in summer."
|
||
],
|
||
loc_facts_ochamchyra: [
|
||
"🌊 Known for its wide beach and clear water.",
|
||
"🏚️ Ruins of an ancient temple are nearby.",
|
||
"🍊 Famous for citrus groves."
|
||
],
|
||
loc_facts_tkvarcheli: [
|
||
"⛰️ The city is located in a picturesque gorge, surrounded by mountains.",
|
||
"🚂 Railway station on a scenic branch.",
|
||
"💧 Unique mountain lakes are nearby."
|
||
],
|
||
loc_facts_gal: [
|
||
"🌾 An important agricultural center of Abkhazia.",
|
||
"🍈 Famous for melons and watermelons grown in the region.",
|
||
"🏛️ Has a rich history related to Mingrelian culture."
|
||
],
|
||
loc_facts_new_athos: [
|
||
"⛪ Famous for the New Athos Monastery (19th century).",
|
||
"🕯️ A tour of the cave is one of the most vivid experiences.",
|
||
"🚞 A cable car runs to the monastery."
|
||
],
|
||
loc_facts_primorsk: [
|
||
"🌅 A cozy town with excellent beaches.",
|
||
"🏞️ Close to the Pitsunda Nature Reserve.",
|
||
"🍷 Homemade wine is produced in the area."
|
||
],
|
||
loc_facts_gudauta: [
|
||
"🎖️ City of military glory, birthplace of many heroes.",
|
||
"🏖️ Wide pebble beaches – some of the best in Abkhazia.",
|
||
"🍇 Traditional vineyards and famous grape varieties."
|
||
],
|
||
loc_facts_default: "✨ Amazing places are waiting for you!"
|
||
},
|
||
ab: {
|
||
nav_about: "Ҳара ҳхәыҷра",
|
||
nav_food: "Аџьа",
|
||
nav_location: "Ҳара иҟоу",
|
||
nav_booking: "Аҭагалара",
|
||
hero_title: "Бзиала шәаабеит",
|
||
hero_subtitle: "Амшын Еиқәа аԥшазы уара уидеалтә уахыҧсыра",
|
||
hero_btn: "Аҭаӡара аҭагалатә",
|
||
about_title: "Амшын ашьапыла ихьчо",
|
||
about_subtitle: "Гәдоуҭа иаҵәаку аҧшаҳәақәа",
|
||
about_text: "Ҳара ахәҭа ҳҟоуп агәаҟаратә ақыҭа Мгудзырхуа. Ҳара ҳааҭауеит комфорттә аҭаӡарақәа нас амшын аҟныҵла аҩаӡара.",
|
||
about_extra: "Гәдоуҭа араион иҭоуҳәоуп «Аԥсны Аџьа аԥша» ҳәа – абар аҧшаҳәақәа иреиҳау, амшын аҵаԥхьа ишәоит +28°C, уи аҭыԥ амикроклимат ҳаирҭоит ашьха нас амшын.",
|
||
fact1: "🏝️ Аԥсны Аџьа аԥша",
|
||
fact2: "🌡️ Амшын аҵаԥхьа +28°C аҟынӡа",
|
||
fact3: "⛰️ Акавказ аҵаҟа иҟоу аҵхыҵ",
|
||
fact4: "🍇 Ҳара авиноградникқәа нас авин",
|
||
food_title: "Аԥсны аҵәа",
|
||
food_subtitle: "Аџьа ҭаацәарантәи аҭыԥтә афасаҟәақәа рыла",
|
||
food_text: "Ашьааҭра шәаазыр! Ибжьа асулугуни, абаста, аҵиаа ҵаҟатәи нас аҭаацәарантәи аҵаа.",
|
||
food_request: "🍽️ Ашәхәаҭаҩра аиҭаҵра шәаазырҵоит",
|
||
food_chef: "👨🍳 Шәы жәҩаны ахәылҵа ишәаазырҵоит – ашеф ишәааҽазыр",
|
||
food_breakfast: "🕒 Ашәхә: 8:30 – 10:00 азы",
|
||
food_lunch: "🕒 Абжьара: 12:00 – 14:00",
|
||
food_dinner: "🕒 Аҵх: 19:00 – 21:00",
|
||
food_note: "📢 Администратор ишәааҽазыр ахынчә қәыԥсқәа – ҳара иҭабуп!",
|
||
loc_title: "Каратә аҭыԥкаара",
|
||
book_title: "Ахыҧсыра аҭагалара",
|
||
label_name: "Шәхы",
|
||
label_phone: "Ателефон аномер",
|
||
ph_name: "Иван Иванов",
|
||
fz152: "Аинформациа аҟаҵаразы аиҭаҵра (152-ФЗ РФ)",
|
||
book_btn: "Азаявка аҭаҭатә",
|
||
footer_text: "© 2026 Hotel 777. Аԥсны, Мгудзырхуа.",
|
||
cookie_text: "Ҳара асаит аҟаҵара аҵәаҵәаразы cookie-файлқәа ҳхылаҩуеит.",
|
||
cookie_btn: "Аиҭаҵра",
|
||
alert_msg: "Иҭабуп! Шәзаявка алырҵеит.",
|
||
loc_address_label: "Ҳара адрес:",
|
||
loc_coords_label: "Акоординатқәа:",
|
||
loc_show_map: "Ахәаҧшра карта",
|
||
loc_city_sukhum: "Аҟәа",
|
||
loc_city_ochamchyra: "Очамчыра",
|
||
loc_city_tkvarcheli: "Тҟәарчал",
|
||
loc_city_gal: "Гал",
|
||
loc_city_new_athos: "Афон Ҿыц",
|
||
loc_city_primorsk: "Приморск",
|
||
loc_city_gudauta: "Гәдоуҭа",
|
||
loc_km: "км",
|
||
book_adults: "Аҧшәмаҭааҩцәа рхыҧхьаӡара",
|
||
book_children: "Аҵлақәа рхыҧхьаӡара (12 шықәса рҟынӡа)",
|
||
book_checkin: "Аҭагалара амш",
|
||
book_checkout: "Акәылара амш",
|
||
please_fill_all: "Ишәҧшәа, азықәҭа змоу аҭыԥқәа рымч",
|
||
booking_success: "Азаявка ацәыҵит! Ҳара шәыҟазаалак шәааҽазыр.",
|
||
booking_error: "Ацәыҵра аҟаҵаразы алшара. Ушәа агәаҧш, ушәа шәааҽаз.",
|
||
loc_facts_sukhum: [
|
||
"🏛️ Адунеи аиҳабылакьықәа руакы, VI ашәышықәса рахь нҵа иҟоуп.",
|
||
"🌿 Аботаникатә сад — Акавказ аиҳабылакьықәа руакы (1838 ш.).",
|
||
"🐬 Амшын аҟынӡа дельфинқәа аԥсабарала уаԥхьоит."
|
||
],
|
||
loc_facts_ochamchyra: [
|
||
"🌊 Иҭоуҳәоуп иаау аҧшаҳәаҟынтәи ласа аҵакыра.",
|
||
"🏚️ Иҝеиԥшу аҩныҵҟатәи ацқьатә уахәама иҟоуп.",
|
||
"🍊 Ацитрусқәа рҵаҵәра рымоуп."
|
||
],
|
||
loc_facts_tkvarcheli: [
|
||
"⛰️ Ақалақь ашьхақәа рыкәтә аҟны иҟоуп.",
|
||
"🚂 Ацәахаҵатә аиаша аҟны астанциа.",
|
||
"💧 Ихадоу ашьхатә иоу аӡиқәа ҷыдала иҟоуп."
|
||
],
|
||
loc_facts_gal: [
|
||
"🌾 Аԥсны аҳәынҭқарратә аԥштәыҩсатә центр.",
|
||
"🍈 Иҭоуҳәоуп аҵәа, арбузқәа.",
|
||
"🏛️ Амингрел ҳәынҭқарратә культура иааҵанакуеит."
|
||
],
|
||
loc_facts_new_athos: [
|
||
"⛪ Иҭоуҳәоуп Афон Ҵыцтәи ауахәама (XIX ашә.).",
|
||
"🕯️ Ацқьатә хьаҧсаҟны аиҭаҵра — аиҳабылакьықәа руакы.",
|
||
"🚞 Ауахәамаҟны аканат аҩра ұсуеит."
|
||
],
|
||
loc_facts_primorsk: [
|
||
"🌅 Амшын аԥшазы ухыҧсыразы ҷыдатә ақыҭа.",
|
||
"🏞️ Пицундатә заповедник аҟынтәи аҩаӡара.",
|
||
"🍷 Аҭыҧ аҟны аҭаацәарантәи аҵаа аҟаҵоуп."
|
||
],
|
||
loc_facts_gudauta: [
|
||
"🎖️ Аиааира аиҭаҵра ақалақь, аиааираҭҵаақәа рҭаацәара.",
|
||
"🏖️ Иаау аҧшаҳәақәа — Аԥсны аиҳабылакьықәа руакы.",
|
||
"🍇 Аҭыԥтәи авиноградникқәа нас иҭоуҳәоу авин асортқәа."
|
||
],
|
||
loc_facts_default: "✨ Амилакьатә аҭыԥқәа шәаажәлар!"
|
||
}
|
||
};
|
||
|
||
// Функция закрытия модального окна
|
||
window.closeModal = function() {
|
||
const modal = document.getElementById('cityModal');
|
||
if (modal) modal.style.display = 'none';
|
||
};
|
||
|
||
// Принятие куки
|
||
window.acceptCookies = function() {
|
||
localStorage.setItem('cookiesAccepted', 'true');
|
||
const banner = document.getElementById('cookieBanner');
|
||
if (banner) banner.classList.remove('show');
|
||
};
|
||
|
||
document.addEventListener("DOMContentLoaded", () => {
|
||
// --- Установка статичного фона для hero (первое изображение) ---
|
||
const hero = document.querySelector('.hero');
|
||
const firstImage = 'img/h777.webp';
|
||
const img = new Image();
|
||
img.src = firstImage;
|
||
img.onload = () => {
|
||
hero.style.backgroundImage = `linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('${img.src}')`;
|
||
};
|
||
// Ошибка 404 tiny.webp больше не возникает, так как мы не используем его в качестве фона по умолчанию
|
||
|
||
// Локализация основных элементов (с data-i18n)
|
||
const langSelect = document.getElementById('langSwitch');
|
||
let currentLang = localStorage.getItem('siteLang') || 'ru';
|
||
|
||
const updateText = (lang) => {
|
||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||
const key = el.getAttribute('data-i18n');
|
||
if (window.translations[lang][key]) el.innerHTML = window.translations[lang][key];
|
||
});
|
||
document.querySelectorAll('[data-i18n-ph]').forEach(el => {
|
||
const key = el.getAttribute('data-i18n-ph');
|
||
if (window.translations[lang][key]) el.placeholder = window.translations[lang][key];
|
||
});
|
||
localStorage.setItem('siteLang', lang);
|
||
|
||
if (typeof window.updateLocationLanguage === 'function') {
|
||
window.updateLocationLanguage(lang);
|
||
}
|
||
if (typeof window.updateAboutLanguage === 'function') {
|
||
window.updateAboutLanguage(lang);
|
||
}
|
||
};
|
||
|
||
langSelect.value = currentLang;
|
||
updateText(currentLang);
|
||
langSelect.onchange = (e) => updateText(e.target.value);
|
||
|
||
// Cookie
|
||
if (!localStorage.getItem('cookiesAccepted')) {
|
||
setTimeout(() => document.getElementById('cookieBanner').classList.add('show'), 2000);
|
||
}
|
||
|
||
// Форма бронирования (без intl-tel-input)
|
||
const bookingForm = document.getElementById('bookingForm');
|
||
if (bookingForm) {
|
||
bookingForm.onsubmit = async (e) => {
|
||
e.preventDefault();
|
||
const lang = localStorage.getItem('siteLang') || 'ru';
|
||
const name = document.getElementById('name').value.trim();
|
||
const phone = document.getElementById('phone').value.trim();
|
||
const adults = parseInt(document.getElementById('adults').value);
|
||
const children = parseInt(document.getElementById('children').value) || 0;
|
||
const checkin = document.getElementById('checkin').value;
|
||
const checkout = document.getElementById('checkout').value;
|
||
const consent = document.getElementById('consent').checked;
|
||
|
||
if (!name || !phone || !adults || !checkin || !checkout || !consent) {
|
||
alert(window.translations[lang].please_fill_all);
|
||
return;
|
||
}
|
||
|
||
const payload = { name, phone, adults, children, checkin, checkout };
|
||
|
||
try {
|
||
const response = await fetch('/api/bookings', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify(payload)
|
||
});
|
||
const result = await response.json();
|
||
const msgDiv = document.getElementById('bookingMessage');
|
||
if (response.ok) {
|
||
msgDiv.innerHTML = `<div style="color: green; background:#e0f2e9; padding:0.8rem; border-radius:12px;">${window.translations[lang].booking_success}</div>`;
|
||
bookingForm.reset();
|
||
document.getElementById('adults').value = '1';
|
||
document.getElementById('children').value = '0';
|
||
} else {
|
||
msgDiv.innerHTML = `<div style="color: red;">${result.error || window.translations[lang].booking_error}</div>`;
|
||
}
|
||
} catch (err) {
|
||
document.getElementById('bookingMessage').innerHTML = `<div style="color: red;">${window.translations[lang].booking_error}</div>`;
|
||
}
|
||
};
|
||
}
|
||
|
||
// Анимации при скролле (один IntersectionObserver)
|
||
const observer = new IntersectionObserver((entries) => {
|
||
entries.forEach(entry => {
|
||
if (entry.isIntersecting) {
|
||
entry.target.style.animationPlayState = 'running';
|
||
observer.unobserve(entry.target); // отключаем после появления
|
||
}
|
||
});
|
||
}, { threshold: 0.1, rootMargin: '50px' });
|
||
|
||
document.querySelectorAll('.animate').forEach(el => {
|
||
el.style.animationPlayState = 'paused';
|
||
observer.observe(el);
|
||
});
|
||
|
||
// Модальное окно: закрытие по крестику и по клику на фон
|
||
const modal = document.getElementById('cityModal');
|
||
if (modal) {
|
||
const closeBtn = modal.querySelector('.modal-close');
|
||
if (closeBtn) closeBtn.addEventListener('click', window.closeModal);
|
||
modal.addEventListener('click', (e) => {
|
||
if (e.target === modal) window.closeModal();
|
||
});
|
||
}
|
||
}); |