PageSourceSearch

https://asyrhotel.kz/js/main.js?v=20260930a

js asyrhotel.kz collected 2026-10-02 00:22:06 UTC 49,556 bytes, 879 lines download raw bytes

1/* ASYR Hotel — interactions & i18n */
2
3(function () {
4  "use strict";
5
6  const yearEl = document.getElementById("year");
7  if (yearEl) yearEl.textContent = String(new Date().getFullYear());
8
9  /* Sticky header state */
10  const header = document.querySelector(".site-header");
11  const onScroll = () => {
12    if (!header) return;
13    header.classList.toggle("is-scrolled", window.scrollY > 8);
14  };
15  window.addEventListener("scroll", onScroll, { passive: true });
16  onScroll();
17
18  /* Mobile nav toggle */
19  const nav = document.getElementById("mainNav");
20  const toggle = document.querySelector(".nav-toggle");
21  const closeNav = () => {
22    if (!nav || !toggle) return;
23    nav.classList.remove("is-open");
24    toggle.setAttribute("aria-expanded", "false");
25  };
26  if (nav && toggle) {
27    toggle.addEventListener("click", () => {
28      const open = nav.classList.toggle("is-open");
29      toggle.setAttribute("aria-expanded", open ? "true" : "false");
30    });
31    nav.querySelectorAll(".nav-link:not(.nav-dd-toggle), .nav-dd-link").forEach((el) => {
32      el.addEventListener("click", closeNav);
33    });
34    document.addEventListener("click", (e) => {
35      if (
36        nav.classList.contains("is-open") &&
37        !nav.contains(e.target) &&
38        !toggle.contains(e.target)
39      ) {
40        closeNav();
41      }
42    });
43    window.addEventListener("keydown", (e) => {
44      if (e.key === "Escape") closeNav();
45    });
46  }
47
48  /* Hero background video (self-hosted, autoplay safeguard) */
49  const heroVideoEl = document.getElementById("hero-video");
50  if (heroVideoEl) {
51    heroVideoEl.muted = true;
52    const tryPlay = () => {
53      const p = heroVideoEl.play();
54      if (p && typeof p.catch === "function") p.catch(() => {});
55    };
56    tryPlay();
57    // Some browsers block autoplay until first interaction — retry then.
58    ["click", "touchstart", "scroll"].forEach((evt) =>
59      window.addEventListener(evt, tryPlay, { once: true, passive: true })
60    );
61    heroVideoEl.addEventListener("error", () => {
62      const wrap = heroVideoEl.closest(".hero-video");
63      if (wrap) wrap.style.display = "none";
64    });
65  }
66
67  /* Carousels */
68  document.querySelectorAll("[data-carousel]").forEach((root) => {
69    const track = root.querySelector(".carousel-track");
70    const slides = Array.from(root.querySelectorAll(".carousel-slide"));
71    const prev = root.querySelector(".carousel-prev");
72    const next = root.querySelector(".carousel-next");
73    const dotsWrap = root.querySelector(".carousel-dots");
74    if (!track || slides.length === 0) return;
75    let index = 0;
76
77    const dots = slides.map((_, i) => {
78      const b = document.createElement("button");
79      b.type = "button";
80      b.addEventListener("click", () => go(i, true));
81      dotsWrap && dotsWrap.appendChild(b);
82      return b;
83    });
84
85    function go(i, user) {
86      index = (i + slides.length) % slides.length;
87      track.style.transform = `translateX(-${index * 100}%)`;
88      dots.forEach((d, di) => d.classList.toggle("active", di === index));
89      if (user) restart();
90    }
91
92    prev && prev.addEventListener("click", () => go(index - 1, true));
93    next && next.addEventListener("click", () => go(index + 1, true));
94
95    let timer = null;
96    const delay = parseInt(root.getAttribute("data-autoplay"), 10);
97    function restart() {
98      if (!delay) return;
99      clearInterval(timer);
100      timer = setInterval(() => go(index + 1), delay);
101    }
102    if (delay) {
103      restart();
104      root.addEventListener("mouseenter", () => clearInterval(timer));
105      root.addEventListener("mouseleave", restart);
106    }
107    go(0);
108  });
109
110  /* Gallery & reviews lightbox */
111  const lightbox = document.getElementById("lightbox");
112  if (lightbox) {
113    const lbImg = document.getElementById("lightbox-img");
114    const closeBtn = lightbox.querySelector(".lightbox-close");
115    const prevBtn = lightbox.querySelector(".lightbox-prev");
116    const nextBtn = lightbox.querySelector(".lightbox-next");
117    let items = [];
118    let current = 0;
119
120    function open(i) {
121      if (!items.length) return;
122      current = (i + items.length) % items.length;
123      lbImg.src = items[current].src;
124      lbImg.alt = items[current].alt || "";
125      lightbox.classList.add("is-open");
126      lightbox.setAttribute("aria-hidden", "false");
127      document.body.style.overflow = "hidden";
128    }
129    function close() {
130      lightbox.classList.remove("is-open");
131      lightbox.setAttribute("aria-hidden", "true");
132      document.body.style.overflow = "";
133    }
134
135    document.querySelectorAll("[data-lightbox]").forEach((grid) => {
136      const imgs = Array.from(grid.querySelectorAll("img"));
137      imgs.forEach((img, i) => {
138        const trigger =
139          img.closest(".gallery-item, .review-proof, button") || img;
140        if (!trigger || trigger === grid) return;
141        trigger.style.cursor = "pointer";
142        trigger.addEventListener("click", (e) => {
143          e.preventDefault();
144          items = imgs;
145          open(i);
146        });
147      });
148    });
149
150    closeBtn && closeBtn.addEventListener("click", close);
151    prevBtn && prevBtn.addEventListener("click", () => open(current - 1));
152    nextBtn && nextBtn.addEventListener("click", () => open(current + 1));
153    lightbox.addEventListener("click", (e) => {
154      if (e.target === lightbox) close();
155    });
156    window.addEventListener("keydown", (e) => {
157      if (!lightbox.classList.contains("is-open")) return;
158      if (e.key === "Escape") close();
159      if (e.key === "ArrowLeft") open(current - 1);
160      if (e.key === "ArrowRight") open(current + 1);
161    });
162  }
163
164  /* Scroll reveal */
165  const revealEls = document.querySelectorAll(
166    ".hotel-block, .card-item, .conference-content, .restaurant-content, .about-content, .offer-panel, .benefit, .review-card"
167  );
168  revealEls.forEach((el, i) => {
169    el.classList.add("reveal");
170    el.style.setProperty("--i", String(i % 8));
171  });
172
173  if ("IntersectionObserver" in window) {
174    const io = new IntersectionObserver(
175      (entries) => {
176        entries.forEach((entry) => {
177          if (entry.isIntersecting) {
178            entry.target.classList.add("is-visible");
179            io.unobserve(entry.target);
180          }
181        });
182      },
183      { threshold: 0.12, rootMargin: "0px 0px -40px 0px" }
184    );
185    revealEls.forEach((el) => io.observe(el));
186  } else {
187    revealEls.forEach((el) => el.classList.add("is-visible"));
188  }
189
190  /* Default dates: today / tomorrow */
191  const today = new Date();
192  const tomorrow = new Date(today);
193  tomorrow.setDate(tomorrow.getDate() + 1);
194  const fmt = (d) => d.toISOString().slice(0, 10);
195
196  const checkin = document.getElementById("checkin");
197  const checkout = document.getElementById("checkout");
198  const offerDates = document.getElementById("offer-dates");
199  if (checkin) {
200    checkin.value = fmt(today);
201    checkin.min = fmt(today);
202  }
203  if (checkout) {
204    checkout.value = fmt(tomorrow);
205    checkout.min = fmt(tomorrow);
206  }
207  if (offerDates) {
208    offerDates.value = fmt(today);
209    offerDates.min = fmt(today);
210  }
211
212  if (checkin && checkout) {
213    checkin.addEventListener("change", () => {
214      const next = new Date(checkin.value);
215      next.setDate(next.getDate() + 1);
216      checkout.min = fmt(next);
217      if (checkout.value <= checkin.value) checkout.value = fmt(next);
218    });
219  }
220
221  /* ——— i18n RU / EN ——— */
222  const dict = {
223    ru: {
224      tagline: "Сеть отелей в Астане",
225      nav_home: "Главная",
226      nav_hotels: "Отели",
227      nav_all_hotels: "Все филиалы",
228      nav_advantages: "Преимущества",
229      nav_rooms: "Номера",
230      nav_conference: "Конференц-зал",
231      nav_restaurant: "Ресторан",
232      nav_about: "О нас",
233      nav_contacts: "Контакты",
234      cta_book: "Забронировать номер",
235      cta_hotels: "Выбрать отель",
236      cta_find: "Найти свободный номер",
237      cta_wa: "Написать в WhatsApp",
238      wa_text: "Здравствуйте, пишу с сайта. (Просим НЕ удалять готовое сообщение).",
239      cta_tg: "Связаться в Telegram",
240      hero_title: "Познайте истинное казахское гостеприимство в Астане",
241      hero_desc:
242        "Сеть современных отелей ASYR — это идеальный выбор для тех, кто ценит искреннее тепло, домашний уют и безупречный сервис в самом сердце делового центра столицы. Просторные номера, тишина и внимание к каждой детали для вашего отдыха и вдохновения.",
243      eb_hero: "Астана · Казахстан",
244      eb_booking: "Онлайн-бронирование",
245      eb_hotels: "Наши отели",
246      eb_gallery: "Фотогалерея",
247      eb_reviews: "Отзывы",
248      reviews_title: "Отзывы гостей",
249      gallery_title: "Атмосфера отелей ASYR",
250      gal1: "Фасады и территория",
251      gal2: "Просторные номера",
252      gal3: "Завтраки и рестораны",
253      gal4: "Конференц-зал",
254      gal5: "Бассейн и фитнес",
255      gal6: "Лобби и зоны отдыха",
256      gallery_note:
257        "Замените плейсхолдеры на реальные фотографии отелей в папке images/gallery.",
258      eb_adv: "Преимущества",
259      eb_conf: "Мероприятия",
260      eb_aud: "Для кого",
261      eb_about: "О бренде",
262      eb_offer: "Прямое бронирование",
263      stat1_prefix: "",
264      stat1_label: "отеля в Астане",
265      stat2_label: "номеров",
266      qb1: "10 минут от аэропорта — быстрый маршрут без пробок.",
267      qb2: "Великолепный вид на EXPO — панорамные виды на главную достопримечательность.",
268      qb3: "100 парковочных мест бесплатно — большая парковка для вашего авто.",
269      qb4: "Вкусный завтрак включен — сытное начало дня для каждого гостя.",
270      booking_lead: "Выберите даты поездки",
271      booking_lead2: "и забронируйте лучший номер",
272      booking_lead_hl: "за 1 минуту",
273      label_checkin: "Заезд",
274      label_checkout: "Выезд",
275      label_hotel: "Отель",
276      label_dates: "Выбор дат",
277      label_hotel_pick: "Выбор отеля",
278      exely_note: "",
279      hotels_title: "Выберите удобный для вас филиал Asyr Hotel в Астане",
280      hotel3_badge: "Скоро открытие",
281      hotel1_address:
282        "г. Астана, проспект Кабанбай батыра, 53 (на территории кампуса Назарбаев Университета)",
283      hotel1_rooms: "60 комфортных номеров",
284      hotel1_desc:
285        "Тихий, зелёный и охраняемый район, в двух шагах от ТРЦ MEGA Silk Way. Подойдёт и для семейного отдыха, и для деловых поездок.",
286      hotel1_cta: "Забронировать на Кабанбай",
287      hotel_more: "Подробнее о филиале",
288      branch_name_qb: "Филиал на проспекте Кабанбай батыра",
289      branch_name_ex: "Филиал на Экспо",
290      branch_name_tu: "Филиал на проспекте Туран",
291      branches_other: "Другие филиалы ASYR Hotel",
292      branch_photos: "Фотографии",
293      branch_breakfast_kicker: "Завтраки",
294      branch_breakfast_title: "Шведский стол и завтраки ASYR",
295      branch_address_label: "Адрес:",
296      branch_wa: "WhatsApp",
297      branch_wa_action: "Написать",
298      branch_routes: "Построить маршрут",
299      branch_call: "Позвонить",
300      branch_map_hint: "Как добраться",
301      hotel2_address: "г. Астана, ул. Турар Рыскулова, 5/1",
302      hotel2_rooms: "16 современных номеров",
303      hotel2_desc:
304        "Стильный отель в непосредственной близости от выставочного комплекса EXPO и Сферы «Нур Алем». Прекрасные панорамные виды на ф
304утуристическую архитектуру столицы, высокий уровень тишины и комфорта для полноценного отдыха после продуктивного дня.",
305      hotel2_cta: "Забронировать на Экспо",
306      hotel3_address: "г. Астана, ул. Абикена Бектурова, 4/1",
307      hotel3_rooms: "41 номер повышенной комфортности",
308      hotel3_desc:
309        "Новый филиал сети в спортивной и медицинской части города. Рядом — главные арены и медицинские центры. Современный интерьер, продуманные номера и традиционное гостеприимство ASYR.",
310      hotel3_cta: "Забронировать на Туран",
311      adv_title: "Почему гости выбирают сеть отелей ASYR?",
312      adv1_title: "Просторные номера",
313      adv1_text:
314        "Площадь номеров достигает рекордных 40–50 кв.м. — в разы больше стандартных гостиничных номеров.",
315      adv2_title: "Большой фонд",
316      adv2_text:
317        "Всего 117 уютных и продуманных номеров различных категорий в сети (от Junior Suite до Family Suite номеров).",
318      adv3_title: "Халяльный формат проживания",
319      adv3_text:
320        "Мы уважаем традиции наших гостей. В наших ресторанах и на завтраках подаются исключительно халяль-блюда, а в отелях поддерживается безалкогольная, спокойная и чистая атмосфера.",
321      adv4_title: "Премиум-локация",
322      adv4_text:
323        "Мы находимся в самом развитом районе левого берега — рядом с EXPO, ТРЦ MEGA Silk Way, стадионом «Астана Арена» и ледовым дворцом «Алау».",
324      adv5_title: "Технологичность",
325      adv5_text:
326        "Каждый номер оснащен современным Smart TV для вашего качественного досуга и отдыха.",
327      adv6_title: "Домашний уют",
328      adv6_text:
329        "Бесплатный чай, кофе и все необходимые принадлежности в каждом номере обновляются ежедневно.",
330      adv7_title: "Выгода для бизнеса",
331      adv7_text:
332        "Специальные комплексные предложения на аренду конференц-зала при одновременном бронировании номеров для гостей.",
333      adv8_title: "Здоровье и спорт",
334      adv8_text:
335        "Для наших гостей доступен бесплатный доступ в бассейн олимпийского класса и фитнес-зал для поддержания формы.",
336      conf_title: "Современный конференц-зал для ваших мероприятий",
337      conf_usp:
338        "Проведите событие на высшем уровне в деловом центре столицы с проживанием для всей команды в одном здании!",
339      conf_desc:
340        "Ищете идеальное место для проведения бизнес-встречи, семинара, воркшопа или презентации? Наш мультимедийный зал спроектирован так, чтобы обеспечить максимальный фокус и комфорт участников:",
341      conf1: "Вместимость до 60 человек — гибкие варианты рассадки под любой формат.",
342      conf2:
343        "Яркий интерактивный экран — безупречная визуализация презентаций, графиков и медиа-контента.",
344      conf3: "Высокие потолки 7 метров — обилие света, пространства и свежего воздуха.",
345      conf4:
346        "Спецпредложение на проживание: при организации мероприятия — эксклюзивные скидки на размещение команды или спикеров.",
347      conf_cta: "Забронировать конференц-зал",
348      eb_rest: "Ресторан",
349      rest_title: "Ресторан отеля ASYR",
350      rest_text:
351        "Ресторан отеля предлагает сытные завтраки для гостей, а также явÐ
351»ÑÐµÑ‚ся идеальной площадкой для проведения банкетов и мероприятий вместимостью до 100 человек. Зал полностью готов к вашему событию и оснащен современным интерактивным LED-экраном для трансляции любого медиаконтента.",
352      rest_f1: "Сытные завтраки для гостей отеля",
353      rest_f2: "Банкеты и мероприятия до 100 человек",
354      rest_f3: "Интерактивный LED-экран для медиаконтента",
355      rest_f4: "Халяльное меню без алкоголя",
356      rest_cta: "Забронировать банкет",
357      aud_title: "Отели ASYR созданы для тех, кто ценит комфорт",
358      aud1_title: "Семьи",
359      aud1_text:
360        "Просторные номера позволяют хорошо отдохнуть с семьей, к тому же территория отеля безопасна для детей.",
361      aud2_title: "Родственники",
362      aud2_text:
363        "Комфортное халяль-размещение близких во время семейных торжеств (Кудалык, Тусау-кесер) с ресторанным обслуживанием.",
364      aud3_title: "Командировочные",
365      aud3_text:
366        "Рабочая зона в номерах, высокоскоростной Wi-Fi, отчетные документы, прачечная и идеальная тишина для работы.",
367      aud4_title: "Групповые заезды",
368      aud4_text:
369        "Возможность единовременного расселения больших групп участников форумов, выставок EXPO и корпоративных гостей.",
370      aud5_title: "Спортсмены",
371      aud5_text:
372        "Близость к главным спортивным комплексам («Астана Арена», «Алау»), халяльное меню.",
373      aud6_title: "Туристы",
374      aud6_text:
375        "10 минут от аэропорта и вы в центре главных футуристических достопримечательностей столицы.",
376      about_title: "Бренд ASYR — синоним искренней заботы",
377      about_p1:
378        "ASYR — это растущая сеть отелей в Астане. Наша главная задача проста: чтобы каждый гость чувствовал заботу и внимание. Мы объединили современный сервис мирового уровня с настоящим домашним уютом.",
379      about_p2:
380        "У нас вы найдёте не просто номер для ночлега, а удобное пространство, где приятно отдыхать, работать и набираться сил. Совсем скоро откроем новые рестораны и залы со шведским столом. Добро пожаловать в ASYR — здесь вам искренне рады в любое время суток!",
381      offer_title: "Планируете поездку в Астану?",
382      offer_sub:
383        "Забронируйте номер напрямую на официальном сайте прямо сейчас и получите лучшую цену!",
384      offer_alt:
385        "Или просто напишите нам, и мы подберем номер под ваш бюджет за 3 минуты:",
386      footer_about:
387        "Сеть отелей в Астане с искренним казахским гостеприимством и халяль-форматом проживания.",
388      footer_nav: "Навигация",
389      footer_branches: "Филиалы",
390      footer_contacts_h: "Контакты",
391      footer_city: "Астана, Казахстан",
392      footer_rights: "Все права защищены.",
393    },
394    en: {
395      tagline: "Hotel chain in Astana",
396      nav_home: "Home",
397      nav_hotels: "Hotels",
398      nav_all_hotels: "All branches",
399      nav_advantages: "Advantages",
400      nav_rooms: "Rooms",
401      nav_conference: "Conference",
402      nav_restaurant: "Restaurant",
403      nav_about: "About",
404      nav_contacts: "Contacts",
405      cta_book: "Book a room",
406      cta_hotels: "Choose a hotel",
407      cta_find: "Find available room",
408      cta_wa: "Message on WhatsApp",
409      wa_text: "Hello, I'm writing from the website. (Please do NOT delete this pre-filled message).",
410      cta_tg: "Contact on Telegram",
411      hero_title: "Experience true Kazakh hospitality in Astana",
412      hero_desc:
413        "ASYR is a modern hotel chain for those who value genuine warmth, home-like comfort and impeccable service in the heart of the capital’s business district. Spacious rooms, quiet and attention to every detail for your rest and inspiration.",
414      eb_hero: "Astana · Kazakhstan",
415      eb_booking: "Online booking",
416      eb_hotels: "Our hotels",
417      eb_gallery: "Gallery",
418      eb_reviews: "Reviews",
419      reviews_title: "Guest reviews",
420      gallery_title: "The atmosphere of ASYR hotels",
421      gal1: "Facades & grounds",
422      gal2: "Spacious rooms",
423      gal3: "Breakfasts & dining",
424      gal4: "Conference hall",
425      gal5: "Pool & fitness",
426      gal6: "Lobby & lounges",
427      gallery_note:
428        "Replace the placeholders with real hotel photos in the images/gallery folder.",
429      eb_adv: "Advantages",
430      eb_conf: "Events",
431      eb_aud: "Who it's for",
432      eb_about: "The brand",
433      eb_offer: "Direct booking",
434      stat1_prefix: "",
435      stat1_label: "hotels in Astana",
436      stat2_label: "rooms",
437      qb1: "10 minutes from the airport — a fast route without traffic jams.",
438      qb2: "Magnificent EXPO views — panoramic vistas of the landmark.",
439      qb3: "100 free parking spaces — a large parking lot for your car.",
440      qb4: "Delicious breakfast included — a hearty start to the day for every guest.",
441      booking_lead: "Choose your travel dates",
442      booking_lead2: "and book the best room",
443      booking_lead_hl: "in 1 minute",
444      label_checkin: "Check-in",
445      label_checkout: "Check-out",
446      label_hotel: "Hotel",
447      label_dates: "Select dates",
448      label_hotel_pick: "Select hotel",
449      exely_note: "",
450      hotels_title: "Choose the ASYR Hotel branch that suits you in Astana",
451      hotel3_badge: "Opening soon",
452      hotel1_address:
453        "Astana, Kabanbay Batyr Ave. 53 (Nazarbayev University campus)",
454      hotel1_rooms: "60 comfortable rooms",
455      hotel1_desc:
456        "A quiet, green and secured neighbourhood, a short walk from MEGA Silk Way mall. Suitable for family stays and business trips.",
457      hotel1_cta: "Book on Kabanbay Avenue",
458      hotel_more: "About this branch",
459      branch_name_qb: "Branch on Kabanbay Batyr Avenue",
460      branch_name_ex: "Branch at Expo",
461      branch_name_tu: "Branch on Turan Avenue",
462      branches_other: "Other ASYR Hotel branches",
463      branch_photos: "Photos",
464      branch_breakfast_kicker: "Breakfast",
465      branch_breakfast_title: "Buffet breakfast at ASYR",
466      branch_address_label: "Address:",
467      branch_wa: "WhatsApp",
468      branch_wa_action: "Message",
469      branch_routes: "Get directions",
470      branch_call: "Call",
471      branch_map_hint: "How to get there",
472      hotel2_address: "Astana, Turar Ryskulov St. 5/1",
473      hotel2_rooms: "16 modern rooms",
474      hotel2_desc:
475        "A stylish hotel next to the EXPO complex and Nur Alem Sphere. Fine panoramic views of the capital’s futuristic architecture, with quiet and comfort for a full rest after a productive day.",
476      hotel2_cta: "Book at Expo branch",
477      hotel3_address: "Astana, Abiken Bekturov St. 4/1",
478      hotel3_rooms: "41 premium comfort rooms",
479      hotel3_desc:
480        "A new branch of the chain in the sports and medical part of the city. Nearby are the main arenas and medical centres. Modern interiors, thoughtfully designed rooms and ASYR’s traditional hospitality.",
481      hotel3_cta: "Book on Turan Avenue",
482      adv_title: "Why guests choose the ASYR hotel chain",
483      adv1_title: "Spacious rooms",
484      adv1_text:
485        "Room size reaches a record 40–50 sq.m. — several times larger than standard hotel rooms.",
486      adv2_title: "Large inventory",
487      adv2_text:
488        "117 cozy, thoughtfully designed rooms across categories (from Junior Suite to Family Suite rooms).",
489      adv3_title: "Halal stay format",
490      adv3_text:
491        "We respect our guests’ traditions. Restaurants and breakfasts serve only halal dishes; hotels maintain an alcohol-free, calm and clean atmosphere.",
492      adv4_title: "Premium location",
493      adv4_text:
494        "We are in the most developed Left Bank area — near EXPO, MEGA Silk Way, Astana Arena and Alau ice palace.",
495      adv5_title: "Technology",
496      adv5_text:
497        "Every room has a modern Smart TV for quality leisure and rest.",
498      adv6_title: "Home comfort",
499      adv6_text:
500        "Free tea, coffee and essentials in every room are refreshed daily.",
501      adv7_title: "Business value",
502      adv7_text:
503        "Special package offers for conference hall rental when booking rooms for guests at the same time.",
504      adv8_title: "Health & sport",
505      adv8_text:
506        "Guests enjoy free access to an Olympic-class pool and fitness gym.",
507      conf_title: "A modern conference hall for your events",
508      conf_usp:
509        "Host a top-level event in the capital’s business hub with accommodation for the whole team in one building!",
510      conf_desc:
511        "Looking for the ideal place for a business meeting, seminar, workshop or presentation? Our multimedia hall is designed for maximum focus and participant comfort:",
512      conf1: "Capacity up to 60 people — flexible seating for any format.",
513      conf2:
514        "Bright interactive screen — flawless visualization of presentations, charts and media.",
515      conf3: "7-meter high ceilings — plenty of light, space and fresh air.",
516      conf4:
517        "Special stay offer: exclusive discounts on rooms for your team or speakers when hosting an event.",
518      conf_cta: "Book the conference hall",
519      eb_rest: "Restaurant",
520      rest_title: "ASYR hotel restaurant",
521      rest_text:
522        "The hotel restaurant offers hearty breakfasts for guests and is an ideal venue for banquets and events for up to 100 people. The hall is fully ready for your event and equipped with a modern interactive LED screen for broadcasting any media content.",
523      rest_f1: "Hearty breakfasts for hotel guests",
524      rest_f2: "Banquets and events for up to 100 people",
525      rest_f3: "Interactive LED screen for media content",
526      rest_f4: "Halal menu, alcohol-free",
527      rest_cta: "Book a banquet",
528      aud_title: "ASYR hotels are made for those who value comfort",
529      aud1_title: "Families",
530      aud1_text:
531        "Spacious rooms let you rest well with your family; the hotel grounds are safe for children.",
532      aud2_title: "Relatives",
533      aud2_text:
534        "Comfortable halal stays for loved ones during family celebrations (Kudalyk, Tusau-keser) with restaurant service.",
535      aud3_title: "Business travelers",
536      aud3_text:
537        "Work area in rooms, high-speed Wi-Fi, reporting documents, laundry and ideal quiet for work.",
538      aud4_title: "Group arrivals",
539      aud4_text:
540        "Simultaneous accommodation for large groups of forum, EXPO and corporate guests.",
541      aud5_title: "Athletes",
542      aud5_text:
543        "Close to major sports venues (Astana Arena, Alau), halal menu.",
544      aud6_title: "Tourists",
545      aud6_text:
546        "10 minutes from the airport and you are at the heart of the capital’s futuristic landmarks.",
547      about_title: "The ASYR brand — a synonym for sincere care",
548      about_p1:
549        "ASYR is a growing hotel chain in Astana. Our main task is simple: to make every guest feel care and attention. We combine modern world-class service with genuine home comfort.",
550      about_p2:
551        "Here you will find not just a room for the night, but a comfortable space where it is pleasant to rest, work and recharge. Very soon we will open new restaurants and buffet halls. Welcome to ASYR — here you are sincerely welcome at any time of day.",
552      offer_title: "Planning a trip to Astana?",
553      offer_sub:
554        "Book a room directly on the official website now and get the best price!",
555      offer_alt:
556        "Or simply message us and we will find a room for your budget in 3 minutes:",
557      footer_about:
558        "A hotel chain in Astana with sincere Kazakh hospitality and a halal stay format.",
559      footer_nav: "Navigation",
560      footer_branches: "Branches",
561      footer_contacts_h: "Contacts",
562      footer_city: "Astana, Kazakhstan",
563      footer_rights: "All rights reserved.",
564    },
565    kz: {
566      tagline: "Астанадағы қонақ үйлер желісі",
567      nav_home: "Басты бет",
568      nav_hotels: "Қонақ үйлер",
569      nav_all_hotels: "Барлық филиалдар",
570      nav_advantages: "Артықшылықтар",
571      nav_rooms: "Нөмірлер",
572      nav_conference: "Конференц-зал",
573      nav_restaurant: "Мейрамхана",
574      nav_about: "Біз туралы",
575      nav_contacts: "Байланыс",
576      cta_book: "Нөмір брондау",
577      cta_hotels: "Қонақ үй таңдау",
578      cta_find: "Бос нөмір табу",
579      cta_wa: "WhatsApp-қа жазу",
580      wa_text: "Сәлеметсіз бе, сайттан жазып отырмын. (Дайын хабарламаны ӨШІРМЕҢІЗ).",
581      cta_tg: "Telegram арқылы байланысу",
582      hero_title: "Астанада нағыз қазақи қонақжайлылықты сезініңіз",
583      hero_desc:
584        "ASYR заманауи қонақ үйлер желісі — шынайы жылылықты, үй жайлылығын және мінсіз қызметті бағалайтындар үшін елорда орталығындағы үздік таңдау.",
585      eb_hero: "Астана · Қазақстан",
586      eb_booking: "Онлайн брондау",
587      eb_hotels: "Біздің қонақ үйлер",
588      eb_gallery: "Фотогалерея",
589      eb_reviews: "Пікірлер",
590      reviews_title: "Қонақтардың пікірлері",
591      gallery_title: "ASYR қонақ үйлерінің атмосферасы",
592      gal1: "Қасбеттер мен аумақ",
593      gal2: "Кең нөмірлер",
594      gal3: "Таңғы ас пен мейрамханалар",
595      gal4: "Конференц-зал",
596      gal5: "Бассейн мен фитнес",
597      gal6: "Лобби мен демалыс аймақтары",
598      gallery_note:
599        "images/gallery қалтасындағы плейсхолдерлерді нақты фотосуреттермен ауыстырыңыз.",
600      eb_adv: "Артықшылықтар",
601      eb_conf: "Іс-шаралар",
602      eb_aud: "Кімдер үшін",
603      eb_about: "Бренд туралы",
604      eb_offer: "Тікелей брондау",
605      stat1_prefix: "Астанада",
606      stat1_label: "қонақ үй",
607      stat2_label: "нөмір",
608      qb1: "Әуежайдан 10 минут — кептеліссіз жылдам жол.",
609      qb2: "EXPO-ға тамаша көрініс — басты көрікті жердің панорамасы.",
610      qb3: "100 тегін тұрақ орны — көлігіңізге арналған үлкен тұрақ.",
611      qb4: "Дәмді таңғы ас кіреді — әр қонаққа тойымды күн бастауы.",
612      booking_lead: "Сапар күндерін таңдаңыз",
613      booking_lead2: "және ең жақсы нөмірді",
614      booking_lead_hl: "1 минутта брондаңыз",
615      label_checkin: "Кіру",
616      label_checkout: "Шығу",
617      label_hotel: "Қонақ үй",
618      label_dates: "Күндерді таңдау",
619      label_hotel_pick: "Қонақ үй таңдау",
620      exely_note: "",
621      hotels_title: "Астанадағы өзіңізге ыңғайлы ASYR Hotel-ді таңдаңыз",
622      hotel3_badge: "Жақында ашылады",
623      hotel1_address:
624        "Астана қ., Қабанбай батыр даңғылы, 53 (Назарбаев Университеті кампусы аумағында)",
625      hotel1_rooms: "60 жайлы нөмір",
626      hotel1_desc:
627        "Тыныш, жасыл әрі күзетілетін аудан, MEGA Silk Way СОО-дан екі қадам жерде. Отбасылық демалысқа да, іскерлік сапарларға да сай.",
628      hotel1_cta: "Қабанбай даңғылындағы филиалда брондау",
629      hotel_more: "Филиал туралы толығырақ",
630      branch_name_qb: "Қабанбай батыр даңғылындағы филиал",
631      branch_name_ex: "Эксподағы филиал",
632      branch_name_tu: "Тұран даңғылындағы филиал",
633      branches_other: "Басқа ASYR Hotel филиалдары",
634      branch_photos: "Фотосуреттер",
635      branch_breakfast_kicker: "Таңғы ас",
636      branch_breakfast_title: "ASYR швед үстелі мен таңғы асы",
637      branch_address_label: "Мекенжай:",
638      branch_wa: "WhatsApp",
639      branch_wa_action: "Жазу",
640      branch_routes: "Маршрут құру",
641      branch_call: "Қоңырау шалу",
642      branch_map_hint: "Қалай жетуге болады",
643      hotel2_address: "Астана қ., Тұрар Рысқұлов көшесі, 5/1",
644      hotel2_rooms: "16 заманауи нөмір",
645      hotel2_desc:
646        "EXPO көрме кешені мен «Нұр Әлем» сферасына жақын орналасқан сәнді қоÐ
646½Ð°Ò› үй. Елорданың футуристік сәулетіне панорамалық көріністер, тыныштық пен жайлылықтың жоғары деңгейі.",
647      hotel2_cta: "Эксподағы филиалда брондау",
648      hotel3_address: "Астана қ., Әбікен Бектұров көшесі, 4/1",
649      hotel3_rooms: "41 жоғары жайлылықтағы нөмір",
650      hotel3_desc:
651        "Қаланың спорттық және медициналық бөлігіндегі желінің жаңа филиалы. Жақын жерде — басты ареналар мен медициналық орталықтар. Заманауи интерьер, ойластырылған нөмірлер және ASYR дәстүрлі қонақжайлылығы.",
652      hotel3_cta: "Тұран даңғылындағы филиалда брондау",
653      adv_title: "Неге қонақтар ASYR қонақ үйлер желісін таңдайды?",
654      adv1_title: "Кең нөмірлер",
655      adv1_text:
656        "Нөмірлер ауданы 40–50 ш.м-ге жетеді — стандарттыдан бірнеше есе үлкен.",
657      adv2_title: "Үлкен қор",
658      adv2_text:
659        "Әртүрлі санаттағы 117 ойластырылған нөмір — Junior Suite-тен Family нөмерлеріне дейін.",
660      adv3_title: "Халал формат",
661      adv3_text:
662        "Тек халал тағамдар, алкогольсіз, тыныш әрі таза орта.",
663      adv4_title: "Премиум орналасу",
664      adv4_text:
665        "Сол жағалаудың ең дамыған ауданы — EXPO, MEGA Silk Way, «Астана Арена» және «Алау» жанында.",
666      adv5_title: "Технологиялылық",
667      adv5_text:
668        "Әр нөмір сапалы демалыс үшін заманауи Smart TV-мен жабдықталған.",
669      adv6_title: "Үй жайлылығы",
670      adv6_text:
671        "Тегін шай, кофе және барлық қажетті керек-жарақтар күн сайын жаңартылады.",
672      adv7_title: "Бизнеске тиімді",
673      adv7_text:
674        "Қонақтарға нөмір брондағанда конференц-залды жалға алуға кешенді ұсыныстар.",
675      adv8_title: "Денсаулық пен спорт",
676      adv8_text:
677        "Қонақтарға олимпиадалық бассейн мен фитнес-залға тегін кіру мүмкіндігі.",
678      conf_title: "Іс-шараларыңызға арналған заманауи конференц-зал",
679      conf_usp:
680        "Елорданың іскерлік орталығында бүкіл команданы бір ғимаратта орналастыра отырып, іс-шараны жоғары деңгейде өткізіңіз.",
681      conf_desc:
682        "Іскерлік кездесулерге, семинарларға, воркшоптарға және презентацияларға арналған мультимедиялық зал — қатысушылардың максималды назары мен жайлылығы үшін:",
683      conf1: "60 адамға дейін сыйымдылық — кез келген форматқа икемді орналастыру.",
684      conf2:
685        "Жарқын интерактивті экран — презентациялар мен медианың мінсіз визуализациясы.",
686      conf3: "7 метрлік биік төбелер — мол жарық, кеңістік пен таза ауа.",
687      conf4:
688        "Арнайы ұсыныс: команда мен спикерлерді орналастыруға эксклюзивті жеңілдіктер.",
689      conf_cta: "Конференц-залды брондау",
690      eb_rest: "Мейрамхана",
691      rest_title: "ASYR қонақ үйінің мейрамханасы",
692      rest_text:
693        "Қонақ үй мейрамханасы қонақтарға тойымды таңғы ас ұсынады, сондай-ақ 100 адамға дейін банкеттер мен іс-шаралар өткізуге арналған тамаша алаң. Зал сіздің іс-шараңызға толық дайын және кез келген медиаконтентті көрсетуге арналған заманауи интерактивті LED-экранмен жабдықталған.",
694      rest_f1: "Қонақ үй қонақтарына тойымды таңғы ас",
695      rest_f2: "100 адамға дейін банкеттер мен іс-шаралар",
696      rest_f3: "Медиаконтентке арналған интерактивті LED-экран",
697      rest_f4: "Алкогольсіз халал ас мәзірі",
698      rest_cta: "Банкет брондау",
699      aud_title: "ASYR қонақ үйлері жайлылықты бағалайтындар үшін жасалған",
700      aud1_title: "Отбасылар",
701      aud1_text:
702        "Кең нөмірлер отбасыңызбен жақсы демалуға мүмкіндік береді, онымен қоса, қонақүйдің аймағы қауіп
702сіз.",
703      aud2_title: "Туыстар",
704      aud2_text:
705        "Отбасылық тойларда (Құдалық, Тұсаукесер) жақындарды халал орналастыру, мейрамханалық қызмет көрсету.",
706      aud3_title: "Іссапаршылар",
707      aud3_text:
708        "Нөмірдегі жұмыс аймағы, жоғары жылдамдықты Wi-Fi, есеп құжаттары, кір жуу және мінсіз тыныштық.",
709      aud4_title: "Топтық орналасу",
710      aud4_text:
711        "Форумдар, EXPO көрмелері мен корпоративтік қонақтардың үлкен топтарын бір мезгілде орналастыру.",
712      aud5_title: "Спортшылар",
713      aud5_text:
714        "«Астана Арена» мен «Алау»-ға жақындық, халал ас мәзірі.",
715      aud6_title: "Туристер",
716      aud6_text:
717        "Әуежайдан 10 минут — сіз елорданың басты футуристік көрікті жерлерінің орталығындасыз.",
718      about_title: "ASYR бренді — шынайы қамқорлықтың синонимі",
719      about_p1:
720        "ASYR — Астанадағы өсіп келе жатқан қонақүйлер желісі. Басты мақсатымыз қарапайым: әр қонақ қамқорлық пен назарды сезінсін. Біз әлемдік деңгейдегі заманауи сервисті нағыз үй жайлылығымен біріктірдік.",
721      about_p2:
722        "Бізде сіз тек түнеуге арналған нөмір емес, демалуға, жұмыс істеуге және күш жинауға ыңғайлы кеңістік табасыз. Жақында жаңа мейрамханалар мен швед үстелі залдарын ашамыз. ASYR-ге қош келдіңіз — мұнда сізді тәуліктің кез келген уақытында шын жүректен қарсы алады!",
723      offer_title: "Астанаға сапар жоспарлап жүрсіз бе?",
724      offer_sub:
725        "Ресми сайтта тікелей брондап, ең жақсы бағаны алыңыз!",
726      offer_alt:
727        "Немесе бізге жазыңыз — бюджетіңізге сай нөмірді 3 минутта таңдап береміз:",
728      footer_about:
729        "Астанадағы шынайы қазақ қонақжайлылығы мен халал тұру форматы бар қонақ үйлер желісі.",
730      footer_nav: "Навигация",
731      footer_branches: "Филиалдар",
732      footer_contacts_h: "Байланыс",
733      footer_city: "Астана, Қазақстан",
734      footer_rights: "Барлық құқықтар қорғалған.",
735    },
736  };
737
738  if (window.ASYR_PAGE_I18N) {
739    for (const lang of ["ru", "en", "kz"]) {
740      Object.assign(dict[lang], window.ASYR_PAGE_I18N[lang] || {});
741    }
742  }
743
744  const FLAGS = { ru: "🇷🇺", kz: "🇰🇿", en: "🇬🇧" };
745  const WA_PHONE = "77775986571";
746
747  function waUrl(lang, phone) {
748    const pack = dict[lang] || dict.ru;
749    const text = encodeURIComponent(pack.wa_text || dict.ru.wa_text);
750    return `https://wa.me/${phone || WA_PHONE}?text=${text}`;
751  }
752
753  function updateWaLinks(lang) {
754    document.querySelectorAll("[data-wa-link]").forEach((el) => {
755      el.href = waUrl(lang, el.getAttribute("data-wa-phone") || WA_PHONE);
756    });
757  }
758
759  function applyLang(lang) {
760    const pack = dict[lang] || dict.ru;
761    document.documentElement.lang = lang;
762    document.querySelectorAll("[data-i18n]").forEach((el) => {
763      const key = el.getAttribute("data-i18n");
764      if (pack[key] != null) el.textContent = pack[key];
765    });
766    const titleKey = document.body && document.body.getAttribute("data-i18n-title");
767    if (titleKey && pack[titleKey]) document.title = pack[titleKey];
768    const descKey = document.body && document.body.getAttribute("data-i18n-desc");
769    const metaDesc = document.querySelector('meta[name="description"]');
770    if (descKey && metaDesc && pack[descKey]) {
771      metaDesc.setAttribute("content", pack[descKey]);
772    }
773    document.querySelectorAll("[data-policy-lang]").forEach((el) => {
774      el.hidden = el.getAttribute("data-policy-lang") !== lang;
775    });
776    document.querySelectorAll(".lang-btn, .lang-opt").forEach((btn) => {
777      btn.classList.toggle("active", btn.dataset.lang === lang);
778    });
779    const dd = document.getElementById("langDd");
780    if (dd) {
781      const flag = dd.querySelector("[data-flag]");
782      const code = dd.querySelector("[data-code]");
783      if (flag) flag.textContent = FLAGS[lang] || "";
784      if (code) code.textContent = lang.toUpperCase();
785    }
786    updateWaLinks(lang);
787    if (typeof window.updateTrackingLinks === "function") {
788      window.updateTrackingLinks();
789    }
790    try {
791      localStorage.setItem("asyr-lang", lang);
792    } catch (_) {}
793  }
794
795  /* Hotels nav dropdown */
796  document.querySelectorAll(".nav-dd").forEach((dd) => {
797    const toggle = dd.querySelector(".nav-dd-toggle");
798    if (!toggle) return;
799    toggle.addEventListener("click", (e) => {
800      e.stopPropagation();
801      const open = dd.classList.toggle("is-open");
802      toggle.setAttribute("aria-expanded", open ? "true" : "false");
803    });
804  });
805  document.addEventListener("click", (e) => {
806    document.querySelectorAll(".nav-dd.is-open").forEach((dd) => {
807      if (!dd.contains(e.target)) {
808        dd.classList.remove("is-open");
809        const t = dd.querySelector(".nav-dd-toggle");
810        if (t) t.setAttribute("aria-expanded", "false");
811      }
812    });
813  });
814  window.addEventListener("keydown", (e) => {
815    if (e.key !== "Escape") return;
816    document.querySelectorAll(".nav-dd.is-open").forEach((dd) => {
817      dd.classList.remove("is-open");
818      const t = dd.querySelector(".nav-dd-toggle");
819      if (t) t.setAttribute("aria-expanded", "false");
820    });
821  });
822
823  /* Language dropdown (header) */
824  const langDd = document.getElementById("langDd");
825  function closeLangDd() {
826    if (!langDd) return;
827    langDd.classList.remove("is-open");
828    const t = langDd.querySelector(".lang-dd-toggle");
829    if (t) t.setAttribute("aria-expanded", "false");
830  }
831  if (langDd) {
832    const ddToggle = langDd.querySelector(".lang-dd-toggle");
833    if (ddToggle) {
834      ddToggle.addEventListener("click", (e) => {
835        e.stopPropagation();
836        const open = langDd.classList.toggle("is-open");
837        ddToggle.setAttribute("aria-expanded", open ? "true" : "false");
838      });
839    }
840    document.addEventListener("click", (e) => {
841      if (!langDd.contains(e.target)) closeLangDd();
842    });
843    window.addEventListener("keydown", (e) => {
844      if (e.key === "Escape") closeLangDd();
845    });
846  }
847
848  document.querySelectorAll(".lang-btn, .lang-opt").forEach((btn) => {
849    btn.addEventListener("click", () => {
850      const next = btn.dataset.lang;
851      if (!next) return;
852      let prev = "ru";
853      try {
854        prev = localStorage.getItem("asyr-lang") || "ru";
855      } catch (_) {}
856      applyLang(next);
857      closeLangDd();
858      if (
859        next !== prev &&
860        document.querySelector("[id^='be-search-form'], #be-booking-form")
861      ) {
862        window.location.reload();
863      }
864    });
865  });
866
867  let initial = "ru";
868  try {
869    const params = new URLSearchParams(window.location.search);
870    const fromUrl = (params.get("lang") || "").toLowerCase();
871    if (fromUrl === "en" || fromUrl === "ru" || fromUrl === "kz") {
872      initial = fromUrl;
873    } else {
874      const saved = localStorage.getItem("asyr-lang");
875      if (saved === "en" || saved === "ru" || saved === "kz") initial = saved;
876    }
877  } catch (_) {}
878  applyLang(initial);
879})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.