PageSourceSearch

https://r-energiya.ru/assets/templates/re/assets/custom-scripts.js?v=1812

js r-energiya.ru collected 2026-10-01 23:53:46 UTC 10,300 bytes, 280 lines download raw bytes

1//window.smartCaptcha.render(
2//    $(form_id).find('.smart-captcha')[0], {
3//    sitekey: window.sitekey,
4//})
5
6//Функция выбора направления в зависимости от раздела	
7// Функция для получения значения куки по имени
8function getCookie(name) {
9	let matches = document.cookie.match(new RegExp(
10		"(?:^|; )" + name.replace(/([$?*|{}\(\)\[\]\\\/\+^])/g, '\\$&') + "=([^;]*)"
11	));
12	return matches ? decodeURIComponent(matches[1]) : undefined;
13}
14
15// Функция для установки активного таба в заданном блоке на основе куки
16function setActiveTabs() {
17
18	// Получаем значение куки "direction"
19	const directionCookie = getCookie("direction");
20
21	const footerNas = document.querySelector("#footer-services-nas");
22	const footerBus = document.querySelector("#footer-services-bus");
23	const menuNas = document.querySelector("#menu-mobile-switcher-nas");
24	const menuBus = document.querySelector("#menu-mobile-switcher-bus");
25
26	// Устанавливаем активный таб и показываем соответствующий nav
27	if (directionCookie === "bus") {
28		footerBus.click();
29		menuBus.click();
30	} else {
31		footerNas.click();
32		menuNas.click();
33	}
34}
35// Ждем полной загрузки DOM перед выполнением скрипта
36document.addEventListener("DOMContentLoaded", setActiveTabs);
37//END Функция выбора направления в зависимости от раздела
38
39//Функция проверки обязательности полей
40function requiredInput() {
41    const checkbox1 = $('#c_1'); // Преобразуем в jQuery-объект
42    const checkbox2 = $('#c_2'); // Преобразуем в jQuery-объект
43
44    if (checkbox1.is(':checked')) { // Проверяем состояние чекбокса
45        $('.contact-form__field input[name=tel]').attr('required', 'required');
46    } else {
47        $('.contact-form__field input[name=tel]').removeAttr('required');
48    }
49
50    if (checkbox2.is(':checked')) { // Проверяем состояние чекбокса
51        $('.contact-form__field input[name=email]').attr('required', 'required');
52    } else {
53        $('.contact-form__field input[name=email]').removeAttr('required');
54    }
55}
56
57//END Функция проверки обязательности полей
58
59//Функция чекбоксов в ФОСах
60document.addEventListener('DOMContentLoaded', function () {
61	// Получаем чекбоксы по их ID
62	const checkbox1 = document.getElementById('c_1');
63	const checkbox2 = document.getElementById('c_2');
64	const checkbox3 = document.getElementById('c_3');
65
66	// Добавляем событие на c_3
67    if (checkbox3) { // Проверяем, существует ли checkbox3
68      checkbox3.addEventListener('change', function () {
69        if (checkbox3.checked) {
70          // Проверяем существование checkbox1 и checkbox2 перед обращением к ним
71          if (checkbox1) {
72            checkbox1.checked = false;
73          }
74          if (checkbox2) {
75            checkbox2.checked = false;
76          }
77        }
78      });
79    }
80
81
82	// Добавляем события на c_1 и c_2, чтобы сбросить c_3 при их выборе
83	[checkbox1, checkbox2].forEach(checkbox => {
84      if (checkbox) { // Проверяем существование каждого checkbox перед добавлением обработчика
85        checkbox.addEventListener('change', function () {
86          if (checkbox.checked && checkbox3) { // Проверяем существование checkbox3 перед обращением
87            checkbox3.checked = false;
88          }
89			requiredInput();
90        });
91      }
92    });
93
94});
95//END Функция чекбоксов в ФОСах
96
97
98//Функция выключения кнопки отправки без чекбокса согласия
99document.addEventListener('DOMContentLoaded', function () {
100	// Получаем элементы чекбокса и кнопки
101	const consentCheckbox = document.getElementById('politika');
102	const submitButton = document.querySelector('.contact-form__submit');
103
104	// Изначально блокируем кнопку
105	submitButton.disabled = true;
106
107	// Добавляем обработчик события изменения состояния чекбокса
108	consentCheckbox.addEventListener('change', function () {
109		// Устанавливаем свойство disabled в зависимости от состояния чекбокса
110		submitButton.disabled = !consentCheckbox.checked;
111	});
112});
113//END Функция выключения кнопки отправки без чекбокса согласия
114
115
116//Функция фильтрации в контактах
117//Реинициализация карты при каждом аяксе
118function initUnitsMap() {
119	let iconSize = [40, 40];
120	let iconOffset = [-20, -20];
121	let zoom = 11;
122	if (window.innerWidth < 992) {
123		iconSize = [30, 30];
124		iconOffset = [-15, -15];
125		zoom = 10;
126	}
127	const map2 = document.querySelector(".contacts-units__map");
128	if (map2) {
129		let mapInit2 = function() {
130			ymaps.ready(init);
131			function init() {
132				const center = map2.getAttribute("data-coordinates").split(",");
133				const items = [];
134				const collection = new ymaps.GeoObjectCollection(null, {});
135				const cards = document.querySelectorAll(".units-card");
136				const closeButtons = document.querySelectorAll(".units-card__close");
137				if (cards.length) {
138					cards.forEach((card) => {
139						card.style.display = "none";
140						const center2 = card.getAttribute("data-coordinates").split(",");
141						const item = { center: center2, card };
142						items.push(item);
143					});
144					closeButtons.forEach((closeButton) => {
145						closeButton.addEventListener("click", () => {
146							cards.forEach((card) => {
147								card.style.display = "none";
148							});
149						});
150					});
151				}
152				const contactMap = new ymaps.Map(map2, {
153					center,
154					zoom,
155					controls: []
156				});
157				contactMap.geoObjects.add(collection);
158				items.forEach((item) => {
159					createPlacemark(item, collection);
160				});
161				function createPlacemark(item, collection2) {
162					const placemark = new ymaps.Placemark(
163						item.center,
164						{
165							balloonContent: item.content
166						},
167						{
168							iconLayout: "default#imageWithContent",
169							iconImageHref: "assets/templates/re/images/pin.svg",
170							iconImageSize: iconSize,
171							iconImageOffset: iconOffset
172						}
173					);
174					collection2.add(placemark);
175					placemark.events.add("click", (e) => {
176						cards.forEach((card) => {
177							card.style.display = "none";
178						});
179						item.card.style.display = "block";
180					});
181				}
182				collection.events.add("click", (e) => {
183					collection.each(function(geoObject) {
184						geoObject.options.set("iconImageHref", "assets/templates/re/images/pin.svg");
185					});
186					e.get("target").options.set("iconImageHref", "assets/templates/re/images/pin-red.svg");
187				});
188				contactMap.controls.remove("geolocationControl");
189				contactMap.controls.remove("searchControl");
190				contactMap.controls.remove("trafficControl");
191				contactMap.controls.remove("typeSelector");
192				contactMap.controls.remove("fullscreenControl");
193				contactMap.controls.remove("rulerControl");
194				contactMap.behaviors.disable(["scrollZoom"]);
195			}
196		};
197		var mapInit = mapInit2;
198		mapInit2();
199	}
200}
201
202//Фильтрация списка
203jQuery(document).ready(function ($) {
204	$('.contacts-units__filter .checkbox__input').on('change', function () {
205		// Собираем массив значений всех выбранных чекбоксов
206		var selectedValues = $('.contacts-units__filter .checkbox__input:checked').map(function () {
207			return $(this).val();
208		}).get();
209
210
211		// Отправляем AJAX-запрос на список
212		$.ajax({
213			type: "POST",
214			url: "/ajax/contacts-ajax-list.html",
215			data: { selected: selectedValues },
216			success: function (response) {
217				// Обновление содержимого блока
218				$('.contacts-units__list.units-list').html(response);
219			},
220			error: function (xhr, status, error) {
221				console.error('Произошла ошибка:', error);
222			}
223		});
224		// Отправляем AJAX-запрос на карту
225		$.ajax({
226			type: "POST",
227			url: "/ajax/contacts-ajax-map.html",
228			data: { selected: selectedValues },
229			success: function (response) {
230				// Обновление содержимого блока
231				$('.contacts-units__map').html(response);
232				initUnitsMap();
233			},
234			error: function (xhr, status, error) {
235				console.error('Произошла ошибка:', error);
236			}
237		});
238	});
239});
240
241//END Функция фильтрации в контактах
242
243//проверка состояние чекбокса
244$(document).ready(function() {
245	// Функция для проверки состояния чекбокса
246	function toggleSubmitButton() {
247		if ($("#politika").is(":checked")) {
248			$(".contact-form__submit").prop("disabled", false);
249		} else {
250			$(".contact-form__submit").prop("disabled", true);
251		}
252	}
253
254	// Инициализация проверки при загрузке страницы
255	toggleSubmitButton();
256
257	// Проверка состояния чекбокса при его изменении
258	$("#politika").change(function() {
259		toggleSubmitButton();
260	});
261});
262
263
264$(document).bind('mousemove',function(){
265		$('form.antispam').each(function(){
266			$(this).attr('action',$(this).attr('rel-action'));
267			$(this).removeAttr('rel-action');
268		});
269		$(document).unbind('mousemove');
270	});
271	$(document).bind('touchstart',function(){
272		$('form.antispam').each(function(){
273			$(this).attr('action',$(this).attr('rel-action'));
274			$(this).removeAttr('rel-action');
275		});
276		$(document).unbind('touchstart');
277	});	
278
279
280

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.