// Глобальные переводы (расширены для location, about, booking) 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: "Почувствуйте гостеприимство! Свежайший сыр сулугуни, мамалыга, овощи с грядки и домашнее вино.", 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.", 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", // New booking fields 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.", // City facts (English) 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: "Ашьааҭра шәаазыр! Ибжьа асулугуни, абаста, аҵиаа ҵаҟатәи нас аҭаацәарантәи аҵаа.", 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: "км", // New booking fields in Abkhaz book_adults: "Аҧшәмаҭааҩцәа рхыҧхьаӡара", book_children: "Аҵлақәа рхыҧхьаӡара (12 шықәса рҟынӡа)", book_checkin: "Аҭагалара амш", book_checkout: "Акәылара амш", please_fill_all: "Ишәҧшәа, азықәҭа змоу аҭыԥқәа рымч", booking_success: "Азаявка ацәыҵит! Ҳара шәыҟазаалак шәааҽазыр.", booking_error: "Ацәыҵра аҟаҵаразы алшара. Ушәа агәаҧш, ушәа шәааҽаз.", // City facts Abkhaz (simplified) 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: "✨ Амилакьатә аҭыԥқәа шәаажәлар!" } }; // Функция закрытия модального окна (глобальная, используется также в location.js) 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 images = ['img/h777.webp', 'img/h777o.webp', 'img/h777l.webp', 'img/h777z.webp']; let currentImg = 0; const setHeroBackground = () => { const img = new Image(); img.src = images[currentImg]; img.onload = () => { hero.style.backgroundImage = `linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('${img.src}')`; }; }; setHeroBackground(); setInterval(() => { currentImg = (currentImg + 1) % images.length; setHeroBackground(); }, 15000); // Локализация основных элементов (с data-i18n) const langSelect = document.getElementById('langSwitch'); let currentLang = localStorage.getItem('siteLang') || 'ru'; const updateText = (lang) => { // Обновляем элементы с data-i18n 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); } // Форма бронирования с отправкой на сервер 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 = `
${window.translations[lang].booking_success}
`; bookingForm.reset(); document.getElementById('adults').value = '1'; document.getElementById('children').value = '0'; } else { msgDiv.innerHTML = `
${result.error || window.translations[lang].booking_error}
`; } } catch (err) { document.getElementById('bookingMessage').innerHTML = `
${window.translations[lang].booking_error}
`; } }; } // Анимации при скролле const obs = new IntersectionObserver(entries => { entries.forEach(en => { if (en.isIntersecting) en.target.style.animationPlayState = 'running'; }); }); document.querySelectorAll('.animate').forEach(el => { el.style.animationPlayState = 'paused'; obs.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(); }); } });