PageSourceSearch

https://class365.ru/wp-content/themes/rgtheme/js/cust.js?1790369392

js class365.ru collected 2026-09-25 20:50:16 UTC 53,886 bytes, 1,134 lines download raw bytes

1jQuery( document ).ready(function() {
2    
3    jQuery('.policy-agree').removeClass('active');
4    
5    // Наблюдаем за новыми элементами
6    const policyobserver = new MutationObserver(function(mutations) {
7        mutations.forEach(function(mutation) {
8            mutation.addedNodes.forEach(function(node) {
9                if (node.nodeType === 1) { // если это элемент
10                    if (node.matches && node.matches('.policy-agree')) {
11                        $(node).removeClass('active');
12                    }
13                    if (node.querySelectorAll) {
14                        $(node).find('.policy-agree').removeClass('active');
15                    }
16                }
17            });
18        });
19    });
20
21    policyobserver.observe(document.body, {
22        childList: true,
23        subtree: true
24    });
25    
26    /**
27     * Универсальная валидация .policy-agree
28     * Автоматически добавляет .policy-error, если его нет
29     * @param {HTMLElement|jQuery} form - форма, в которой ищем .policy-agree
30     * @returns {boolean} true, если валидация пройдена
31     */
32    window.validatePolicyAgree = function(form) {
33        const $form = jQuery(form);
34        let $policy = null;
35
36        // 🔍 Проверяем, это ли форма из квиза?
37        const $quizButtons = $form.find('.parents-step__buttons--last button[type=submit]').first();
38
39        if ($quizButtons.length) {
40            // Это квиз → ищем .policy-agree рядом с .parents-step__buttons--last
41            $policy = $quizButtons.siblings('.modal__policy').find('.policy-agree').first()
42                    || $quizButtons.next('.modal__policy').find('.policy-agree').first()
43                    || $quizButtons.parent().find('.modal__policy .policy-agree').first();
44        } else {
45            // Обычная форма → стандартный поиск
46            $policy = $form.find('.policy-agree').first();
47
48            if (!$policy.length) {
49                $policy = $form.next().find('.policy-agree').first();
50            }
51            if (!$policy.length) {
52                $policy = $form.siblings('.policy-agree').first();
53            }
54            if (!$policy.length) {
55                $policy = $form.parent().siblings('.policy-agree').first();
56            }
57        }
58
59        // Если не нашли .policy-agree — пропускаем валидацию
60        if (!$policy.length || $policy.attr('data-required') === 'false') {
61            return true;
62        }
63
64        // Проверяем/создаём .policy-error
65        let $error = $policy.find('.policy-error');
66        if ($error.length === 0) {
67            $error = jQuery('<div class="policy-error">Пожалуйста, подтвердите согласие</div>').hide();
68            $policy.append($error);
69        }
70
71        // Если галочка стоит — всё ок
72        if ($policy.hasClass('active')) {
73            $error.hide();
74            $form.removeClass('disabled')
75                .find('input[type=submit], button[type=submit], .submit-wrap')
76                .removeClass('off');
77            return true;
78        }
79
80        // Если не стоит — показываем ошибку и блокируем
81        $error.show();
82        $form.addClass('disabled')
83            .find('input[type=submit], button[type=submit], .submit-wrap')
84            .addClass('off');
85
86        return false;
87    };
88
89    // Выбираем целевой элемент для mutation observerleave-popup
90    var target = document.body;
91    
92    const url = jQuery(location).attr('href');
93    const urlObj = new URL(url);
94    const businessurl = JSON.stringify({
95        protocol: urlObj.protocol,
96        host: urlObj.host,
97        pathname: urlObj.pathname,
98    });
99
100
101    jQuery.cookie("businessurl",businessurl);
102
103    var form_data  = new FormData();
104    jQuery("input[name='phone']").blur(function() {
105        jQuery("input[name='form_fields[another_phone]']").val(jQuery(this).val().replace(/[^\d]/g, '').substr(jQuery(this).val().replace(/[^\d]/g, '').length - 10));
106    })
107
108    jQuery(".callback-btn").click(function(e) {
109        e.preventDefault();
110        
111        if (typeof ym !== 'undefined') {
112            ym(16081030, 'reachGoal', 'zakazat-zvonok-click');
113        }
114        
115        var data = {
116			'action': 'callback'
117		};
118		$.ajax({
119			url:"/wp-admin/admin-ajax.php", // обработчик
120			data:data, // данные
121			type:'POST', // тип запроса
122			success:function(data){
123				if( data ) {
124                    jQuery("body").append(data);
125                    jQuery(".callback__close").click(function() {
126                        jQuery(".callback").remove();
127                    })
128                    jQuery(".callback__overlay").click(function() {
129                        jQuery(".callback").remove();
130                    })
131                    jQuery(document).keydown(function(e) {
132                        if (e.which == 27) {
133                            jQuery(".callback").remove();
134                        }
135                    });
136				}
137			}
138		});
139    })
140    
141    window.findClosestForm = function(elem) {
142        let $elem = jQuery(elem);
143
144        let $form = $elem.closest('form');
145        if ($form.length)
146            return $form;
147
148        const maxLevelsUp = 5;
149        for (let i = 0; i < maxLevelsUp; i++) {
150            $elem = $elem.parent();
151            if (!$elem.length)
152                break;
153
154            $form = $elem.find('form').first();
155            if ($form.length)
156                return $form;
157        }
158
159        $form = $elem.prevAll('form').first();
160        if ($form.length)
161            return $form;
162
163        $form = $elem.nextAll('form').first();
164        if ($form.length)
165            return $form;
166
167        console.warn('Форма не найдена для элемента:', elem);
168        return null;
169    }
170    
171    window.check_policy = function(elem) {
172        const $elem = jQuery(elem);
173        const $form = findClosestForm(elem);
174    
175        if (!$form) return;
176    
177        // Переключаем активность
178        $elem.toggleClass('active');
179    
180        // Находим ошибку
181        const $error = $elem.find('.policy-error');
182    
183        if ($elem.hasClass('active')) {
184            // Галочка установлена → скрываем ошибку и РАЗБЛОКИРУЕМ форму
185            $error.hide();
186            $form.removeClass('disabled')
187                 .find('input[type=submit], button[type=submit], .submit-wrap')
188                 .removeClass('off');
189        } else {
190            // Галочка снята → не показываем ошибку (пока), но можно оставить
191            $error.hide(); // или оставить видимой — по желанию
192            // Форму не блокируем здесь — это делает validatePolicyAgree при submit
193        }
194    };
195    
196    
197    if (window.innerWidth <= 480) {
198        const removingSnippetObserver = new MutationObserver(() => {
199            const rhSnippet = document.getElementById('rh-snippet');
200            if (rhSnippet) {
201                rhSnippet.remove();
202            }
203        });
204    
205        removingSnippetObserver.observe(document.body, {
206            childList: true,
207            subtree: true
208        });
209    }
210
211    
212    // Конфигурация observer (за какими изменениями наблюдать)
213    const config = {
214        attributes: false,
215        childList: true,
216        subtree: false
217    };
218
219    // Колбэк-функция при срабатывании мутации
220    const callback = function (mutationsList, observer) {
221        for (let mutation of mutationsList) {
222            if (mutation.type === "childList") {
223                console.log("childList");
224    
225                // 1. Инициализация маски телефона
226                jQuery("input[type=tel]:not(.checki__form-phone)").inputmask({ 
227                    mask: "(+9(999)-999-99-99)|(+9(999)-999-99-99[9][9])", 
228                    placeholder: "_", 
229                    skipOptionalPartCharacter: " ", 
230                    greedy: false 
231                });
232    
233                // 2. Изолированная обработка ввода телефона (с защитой от дублирования событий .off)
234                jQuery("input[name='phone']").off("input").on("input", function () {
235                    var $phoneInput = jQuery(this);
236                    var $form = $phoneInput.closest("form");
237                    var cleanedVal = $phoneInput.val().replace(/[^\d]/g, "");
238                    
239                    $form.find("input[name='form_fields[another_phone]']").val(
240                        cleanedVal.substr(cleanedVal.length - 10)
241                    );
242                });
243                
244                // 3. Сбор кук и меток при клике на отправку вопросов
245                jQuery(".form-questions__send").off("click").one("click", function () {
246                    var $form = jQuery(this).closest("form");
247    
248                    if (location.href.indexOf("?") > -1) {
249                        if (jQuery.cookie("utm_visit") == null) {
250                            jQuery.cookie("utm_visit", location.href.substr(location.href.indexOf("?") + 1));
251                        }
252                    } else {
253                        jQuery.removeCookie("utms");
254                        $form.find("input[name='form_fields[utms]']").val("");
255                    }
256    
257                    // Корректная подстановка Цели (target) на основе имени родительского блока вопросов
258                    $form.find("input[name='form_fields[time]']").each(function () {
259                        var $timeInput = jQuery(this);
260                        var questionBlockName = $timeInput.closest(".form-questions").attr("name") || "";
261                        $timeInput.closest("form").find("input[name='form_fields[target]']").val(questionBlockName);
262                    });
263    
264                    // Записываем системные метки СТРОГО внутрь текущей кликнутой формы
265                    $form.find("input[name='form_fields[enter_dot]']").val(location.href);
266                    $form.find("input[name='form_fields[utms]']").val(jQuery.cookie("utms"));
267                    $form.find("input[name='form_fields[roi_id]']").val(jQuery.cookie("roistat_visit"));
268                    $form.find("input[name='form_fields[yandex_metr]']").val(jQuery.cookie("_ym_uid"));
269                    $form.find("input[name='form_fields[google_metr]']").val(jQuery.cookie("_ga"));
270                });
271            }
272        }
273    };
274
275
276    // Создаём экземпляр наблюдателя с указанной функцией колбэка
277    const observer = new MutationObserver(callback);
278    
279    // let mutations = observer.takeRecords();
280    // Начинаем наблюдение за настроенными изменениями целевого элемента
281    observer.observe(target, config);
282    
283    // Later, you can stop observing
284    // observer.disconnect();
285
286
287    // here was LeavePopup script
288    
289    
290
291    jQuery(".mlp-btn").click(function(e) {
292        e.preventDefault()
293        var data = {
294			'action': 'mlppopup'
295		};
296        jQuery.ajax({
297			url:"/wp-admin/admin-ajax.php", 
298			data:data, 
299			type:'POST',
300			success:function(data){
301				if( data ) {
302                    jQuery("body").append(data);
303                    jQuery(".mlp-popup__overlay").click(function() {
304                       jQuery(".mlp-popup").remove();
305                    })
306                    jQuery(".mlp-popup__close").click(function() {
307                       jQuery(".mlp-popup").remove();
308                    })
309                    jQuery(document).keydown(function(e) {
310                      if (e.which == 27) {
311                        jQuery(".mlp-popup").remove();
312                      }
313                    });
314				}
315			}
316		});
317    })
318
319
320    jQuery("input[type=tel]:not(.checki__form-phone)").inputmask({mask:"(+9(999)-999-99-99)|(+9(999)-999-99-99[9][9])",placeholder:"_",skipOptionalPartCharacter:" ",greedy:false});
321    
322    jQuery(".checki__form-phone").inputmask({mask:"(+9(999)-999-99-99)|(+9(999)-999-99-99[9][9])",placeholder:"_",skipOptionalPartCharacter:" ",greedy:false});
323
324    jQuery(function($){
325        if ($("#true_loadmore").length != 0) {
326            $('#true_loadmore').click(function(){
327                var pos = $('#true_loadmore').offset().top;
328                var text = $('#true_loadmore').text();
329                $(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
330                var data = {
331                    'action': 'loadmore',
332                    'query': true_posts,
333                    'page' : current_page
334                };
335                $.ajax({
336                    url:ajaxurl, // обработчик
337                    data:data, // данные
338                    type:'POST', // тип запроса
339                    success:function(data){
340                        if( data ) {
341                            $('#true_loadmore').text(text).before(data);
342                            current_page++; // увеличиваем номер страницы на единицу
343                            $(window).scrollTop(pos - jQuery(window).height()/2)
344                            if (current_page == max_pages) $("#true_loadmore").remove(); // если последняя страница, удаляем кнопку
345                        } else {
346                            $('#true_loadmore').remove(); // если мы дошли до последней страницы постов, скроем кнопку
347                        }
348                    }
349                });
350        	});
351        }
352
353        function scrolUrl(page) {
354            $(window).scroll(function(){
355                var bottomOffset = 1500; // отступ от нижней границы сайта, до которого должен доскроллить пользователь, чтобы подгрузились новые посты
356                //var pos = $('#load-post').offset().top;
357                //$(this).text('Загружаю...'); // изменяем текст кнопки, вы также можете добавить прелоадер
358                var data = {
359                    'action': 'loadpost',
360                    'query': true_posts,
361                    'page' : current_page
362                    };
363                if( $(document).scrollTop() > ($(document).height() - bottomOffset) && !$('.more--'+page+'-page').hasClass('load-post')) {
364                    $.ajax({
365                        url:ajaxurl, // обработчик
366                        data:data, // данные
367                        type:'POST', // тип запроса
368                        beforeSend: function( xhr){
369                            $('.more--'+page+'-page').addClass('load-post');
370                        },
371                        success:function(data){
372                            if( data ) {
373                                $('.more--'+page+'-page').append(data);
374                                $('.more--'+page+'-page').removeClass('load-post');
375                                current_page++; // увеличиваем номер страницы на единицу
376                                // $(window).scrollTop(pos - jQuery(window).height()/2)
377                                if (current_page == max_pages) $("#load-post").remove(); // если последняя страница, удаляем кнопку
378                            }
379                        }
380                    });
381                }
382                
383                var st = $(this).scrollTop();
384                if (st > lastScrollTop){
385                    if ($(".more--"+page+"-page .stati--page").length != 0 && $(".more--"+page+"-page .stati--page:nth-child("+itemNum+")").length != 0) {
386                        if ($(document).scrollTop() > $(".more--"+page+"-page .stati--page:nth-child("+itemNum+")").offset().top - $(window).height()) {
387                            window.history.pushState("object or string", "Title", "/"+page+"/"+$(".more--"+page+"-page .stati--page:nth-child("+itemNum+") .stati__item").attr("data-slug"));
388                            itemNum++;
389                        }
390                    }
391                } else {
392                    if ($(".more--"+page+"-page .stati--page").length != 0 && $(".more--"+page+"-page .stati--page:nth-child("+itemNum+")").length != 0) {
393                        if ($(document).scrollTop() < $(".more--"+page+"-page .stati--page:nth-child("+itemNum+")").offset().top) {
394                            if (itemNum != 1) {
395                                itemNum--;
396                                window.history.pushState("object or string", "Title", "/"+page+"/"+$(".more--"+page+"-page .stati--page:nth-child("+itemNum+") .stati__item").attr("data-slug"));
397                            } else if (itemNum == 1) {
398                                window.history.pushState("object or string", "Title", "/"+page+"/"+$(".stati--page .stati__item").attr("data-slug"));
399                            }
400                        }
401                    } else {
402                        itemNum--;
403                    }
404                }
405                lastScrollTop = st;
406            });
407        }
408
409    	if ($(".more--stati-page").length != 0) {
410            var lastScrollTop = 0;
411            var itemNum = 1;
412            scrolUrl('stati');
413        }
414
415        if ($(".more--novosti-page").length != 0) {
416            var lastScrollTop = 0;
417            var itemNum = 1;
418            scrolUrl('novosti');
419        }
420
421        $('.rotate-left').click(function() {
422            $('.stati__rubriki--mobile-wrap').animate({
423                scrollLeft: '-='+ document.querySelector('.stati__rubriki--mobile-wrap').scrollWidth,
424            }, 500, function() {
425                //код по завершении анимации
426            });
427            // $(".stati__rubriki--mobile-wrap").scrollLeft(500);
428        })
429        
430        $('.rotate-right').click(function() {
431            $('.stati__rubriki--mobile-wrap').animate({
432                scrollLeft: '+='+ document.querySelector('.stati__rubriki--mobile-wrap').scrollWidth,
433            }, 500, function() {
434                //код по завершении анимации
435            });
436            // $(".stati__rubriki--mobile-wrap").scrollLeft(500);
437        })
438    });
439
440    jQuery('.bottom__menu-trigger').on('click', function() {
441        this.classList.toggle("change");
442        jQuery('.bottom-menu__menu').slideToggle(300, function(){
443        if( jQuery(this).css('display') === "none"){
444                jQuery(this).removeAttr('style');
445            }
446        });
447    });
448
449    jQuery('.top__menu-trigger').on('click', function() {
450        this.classList.toggle("change");
451        jQuery('.top-menu__menu').slideToggle(300, function(){
452            if( jQuery(this).css('display') === "none"){
453                jQuery(this).removeAttr('style');
454            }
455        });
456    });
457
458
459    jQuery(".send-form").off('submit').on('submit', function(e) {
460        e.preventDefault();
461        
462        if (!validatePolicyAgree(this)) return;
463        
464        form_data.append('Телефон', jQuery(this).find("input[name='phone']").val());
465        jQuery(this).find("input[name='form_fields[bitrix_id]']").val(jQuery.cookie('ASE_authUserId'));
466        form_data.append('another_phone', jQuery(this).find("input[name='form_fields[another_phone]']").val());
467        form_data.append('bitrix_id', jQuery(this).find("input[name='form_fields[bitrix_id]']").val());
468        form_data.append('publication_code', jQuery(this).find("input[name='form_fields[publication_code]']").val());
469        form_data.append('Время', jQuery(this).find("input[name='form_fields[time]']").val());
470        form_data.append('Цель', jQuery(this).find("input[name='form_fields[target]']").val());
471        form_data.append('Точка_входа', jQuery(this).find("input[name='form_fields[enter_dot]']").val());
472        form_data.append('UTMS', jQuery(this).find("input[name='form_fields[utms]']").val());
473        form_data.append('RoistatID', jQuery(this).find("input[name='form_fields[roi_i
473d]']").val());
474        form_data.append('Яндекс_Метрика', jQuery(this).find("input[name='form_fields[yandex_metr]']").val());
475        form_data.append('Гугл_Метрика', jQuery(this).find("input[name='form_fields[google_metr]']").val());
476        form_data.append('form_name', jQuery(this).attr("name"));
477        
478        jQuery.ajax({
479            url: "/wp-content/themes/rgtheme/webhook.php",
480            type:     "POST", 
481            processData: false,
482            contentType: false,
483            data: form_data, 
484            success: function(data){
485            
486            }
487        });
488        
489        jQuery.ajax({
490            url:     '/wp-content/themes/rgtheme/sendMail.php', 
491            type:     "POST", 
492            dataType: "html", 
493            data: jQuery(this).serialize()+'&entry_url='+encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first),  
494            success: function(response) { 
495                var modal_content = `
496                    <div class="modal zayav-pu">
497                        <div class="modal__container">
498                            <div class="modal__title">Спасибо за обращение!</div>
499                            <div class="modal__policy">Ваша заявка успешно отправлена, наш специалист<br>свяжется с вами в ближайшее время</div>
500                            <button class="modal__close modal__close-success"></button>
501                        </div>
502                        <div class="modal__overlay"></div>
503                    </div>
504                `
505                jQuery('body').append(modal_content);
506            },
507            error: function(response) { 
508                console.log(response);
509            }
510        });
511    })
512
513    jQuery(document)
514        .off("submit", ".stati__form form")
515        .on("submit", ".stati__form form", function (e) {
516            e.preventDefault();
517
518            var $form = jQuery(this);
519            if (!validatePolicyAgree(this)) return;
520
521            if ($form.hasClass("callme-form_och")) {
522                handleCallMeFormOch($form);
523                return;
524            }
525
526            var goal = $form.data("metrika-goal");
527            $form.find("input[type=submit], button[type=submit]").attr("disabled", "disabled");
528
529            // ==========================================
530            // БЕЗОПАСНОЕ РЕШЕНИЕ ДЛЯ ВЕБХУКА (БЕЗ БАГОВ)
531            // ==========================================
532            // Создаем FormData СТРОГО внутри события и передаем туда саму форму (this).
533            // Браузер сам автоматически соберет ВСЕ поля формы в правильном формате,
534            // включая файлы (если они есть) и сохраняя структуру массивов form_fields!
535            var webhookFormData = new FormData(this);
536
537            // Если в вашей старой версии webhook.php ключи проверялись жестко на кириллице
538            // (например, $_POST['Телефон']), мы дописываем их вручную, чтобы PHP их точно увидел:
539            webhookFormData.append("Телефон", $form.find("input[name='phone']").val());
540            webhookFormData.append("another_phone", $form.find("input[name='form_fields[another_phone]']").val());
541            webhookFormData.append("bitrix_id", $form.find("input[name='form_fields[bitrix_id]']").val());
542            webhookFormData.append("publication_code", $form.find("input[name='form_fields[publication_code]']").val());
543            webhookFormData.append("Время", $form.find("input[name='form_fields[time]']").val());
544            webhookFormData.append("Цель", $form.find("input[name='form_fields[target]']").val());
545            webhookFormData.append("Точка_входа", $form.find("input[name='form_fields[enter_dot]']").val());
546            webhookFormData.append("UTMS", $form.find("input[name='form_fields[utms]']").val());
547            webhookFormData.append("RoistatID", $form.find("input[name='form_fields[roi_i
547d]']").val());
548            webhookFormData.append("Яндекс_Метрика", $form.find("input[name='form_fields[yandex_metr]']").val());
549            webhookFormData.append("Гугл_Метрика", $form.find("input[name='form_fields[google_metr]']").val());
550            webhookFormData.append("form_name", $form.attr("name") || "");
551
552            let requestType = $form.find("input[name='form_fields[request_type]']").val();
553            if (requestType) {
554                webhookFormData.append("request_type", requestType);
555            }
556
557            const urlParams = new URLSearchParams(window.location.search);
558            const utmKeys = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
559            let hasUtm = false;
560
561            utmKeys.forEach((key) => {
562                const value = urlParams.get(key);
563                if (value) {
564                    webhookFormData.append(key, value);
565                    hasUtm = true;
566                }
567            });
568
569            if (!hasUtm) {
570                jQuery.removeCookie("utms");
571                webhookFormData.set("UTMS", "");
572            }
573
574            // Отправляем вебхук в CRM в оригинальном multipart/form-data формате
575            jQuery.ajax({
576                url: "/wp-content/themes/rgtheme/webhook.php",
577                type: "POST",
578                processData: false, // Обязательно для FormData
579                contentType: false, // Обязательно для FormData
580                data: webhookFormData,
581                success: function (data) {
582                    console.log("Вебхук доставлен:", data);
583                },
584                error: function (xhr) {
585                    console.error("Ошибка вебхука:", xhr.status, xhr.responseText);
586                },
587            });
588
589            // ==========================================
590            // ОТПРАВКА НА ПОЧТУ (СТАНДАРТНАЯ СЕРИАЛИЗАЦИЯ)
591            // ==========================================
592            jQuery.ajax({
593                url: "/wp-content/themes/rgtheme/sendMail.php",
594                type: "POST",
595                dataType: "html",
596                data: $form.serialize() + "&entry_url=" + encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first),
597                success: function (response) {
598                    jQuery(".callback").remove();
599
600                    var modal_content = `
601                <div class="modal zayav-pu">
602                    <div class="modal__container">
603                        <div class="modal__title">Спасибо за обращение!</div>
604                        <div class="modal__policy">Ваша заявка успешно отправлена, наш специалист<br>свяжется с вами в ближайшее время</div>
605                        <button class="modal__close modal__close-success"></button>
606                    </div>
607                    <div class="modal__overlay"></button></div>
608                </div>
609            `;
610                    jQuery("body").append(modal_content);
611
612                    if (goal && typeof ym !== "undefined") {
613                        ym(16081030, "reachGoal", goal);
614                    }
615                },
616                error: function (xhr) {
617                    console.error("Ошибка мейлера:", xhr.status);
618                    $form.find("input[type=submit], button[type=submit]").removeAttr("disabled");
619                },
620            });
621        });
622
623    jQuery(".checki__form form").off('submit').on('submit', function(e) {
624        e.preventDefault();
625        
626        if (!validatePolicyAgree(this)) return;
627        
628        form_data.append('Телефон', jQuery(this).find("input[name='phone']").val());
629        jQuery(this).find("input[name='form_fields[bitrix_id]']").val(jQuery.cookie('ASE_authUserId'));
630        form_data.append('another_phone', jQuery(this).find("input[name='form_fields[another_phone]']").val());
631        form_data.append('bitrix_id', jQuery(this).find("input[name='form_fields[bitrix_id]']").val());
632        form_data.append('publication_code', jQuery(this).find("input[name='form_fields[publication_code]']").val());
633        form_data.append('Время', jQuery(this).find("input[name='form_fields[time]']").val());
634        form_data.append('Цель', jQuery(this).find("input[name='form_fields[target]']").val());
635        form_data.append('Точка_входа', jQuery(this).find("input[name='form_fields[enter_dot]']").val());
636        form_data.append('UTMS', jQuery(this).find("input[name='form_fields[utms]']").val());
637        form_data.append('RoistatID', jQuery(this).find("input[name='form_fields[roi_i
637d]']").val());
638        form_data.append('Яндекс_Метрика', jQuery(this).find("input[name='form_fields[yandex_metr]']").val());
639        form_data.append('Гугл_Метрика', jQuery(this).find("input[name='form_fields[google_metr]']").val());
640        form_data.append('form_name', jQuery(this).attr("name"));
641
642        jQuery.ajax({
643            url: "/wp-content/themes/rgtheme/webhook_och.php",
644            type:     "POST", 
645            processData: false,
646            contentType: false,
647            data: form_data,
648            success: function(data){
649
650            }
651        });
652
653        jQuery.ajax({
654            url:     '/wp-content/themes/rgtheme/checkiMail.php', 
655            type:     "POST", 
656            dataType: "html", 
657            data: jQuery(this).serialize()+'&entry_url='+encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first), 
658            success: function(response) { 
659                var modal_content = `
660                    <div class="modal zayav-pu">
661                        <div class="modal__container">
662                            <div class="modal__title">Спасибо за обращение!</div>
663                            <div class="modal__policy">Ваша заявка успешно отправлена, наш специалист<br>свяжется с вами в ближайшее время</div>
664                            <button class="modal__close modal__close-success"></button>
665                        </div>
666                        <div class="modal__overlay"></div>
667                    </div>
668                `
669                jQuery('body').append(modal_content);
670      	    },
671          	error: function(response) { 
672                 
673          	}
674    	});
675    })
676    
677    
678    function handleCallMeFormOch(form) {
679        if (!validatePolicyAgree(form)) return;
680        
681        form.find('input[type=submit]').attr('disabled', 'disabled');
682    
683        let form_data = new FormData();
684        form_data.append('Телефон', form.find("input[name='phone']").val());
685        form_data.append('another_phone', form.find("input[name='form_fields[another_phone]']").val());
686        form_data.append('bitrix_id', form.find("input[name='form_fields[bitrix_id]']").val());
687        form_data.append('publication_code', form.find("input[name='form_fields[publication_code]']").val());
688        form_data.append('Время', form.find("input[name='form_fields[time]']").val());
689        form_data.append('Цель', form.find("input[name='form_fields[target]']").val());
690        form_data.append('Точка_входа', form.find("input[name='form_fields[enter_dot]']").val());
691        form_data.append('UTMS', form.find("input[name='form_fields[utms]']").val());
692        form_data.append('RoistatID', form.find("input[name='form_fields[roi_id]']").val());
693        form_data.append('Яндекс_Метрика', form.find("input[name='form_fields[yandex_metr]']").val());
694        form_data.append('Гугл_Метрика', form.find("input[name='form_fields[google_metr]']").val());
695        form_data.append('form_name', form.attr("name"));
696        
697        let requestType = form.find("input[name='form_fields[request_type]']").val();
698        if(requestType){
699            form_data.append('request_type', requestType);  
700        }
701    
702        let query = window.location.search.substring(1);
703        if (query) {
704            let params = new URLSearchParams(query); 
705            let utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
706        
707            utmParams.forEach(param => {
708                if (params.has(param)) { 
709                    let value = params.get(param);
710                    if (value) { 
711                        form_data.append(param, decodeURIComponent(value)); 
712                    }
713                }
714            });
715        } else {
716            jQuery.removeCookie('utms');
717            form_data.set('UTMS', '');
718        }
719    
720        jQuery.ajax({
721            url: "/wp-content/themes/rgtheme/webhook_och.php",
722            type: "POST",
723            processData: false,
724            contentType: false,
725            data: form_data,
726            success: function(data) {
727                console.log(data);
728            }
729        });
730    
731        jQuery.ajax({
732            url: "/wp-content/themes/rgtheme/checkiMail.php",
733            type: "POST",
734            dataType: "html",
735            data: form.serialize() + '&entry_url=' + encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first),
736            success: function(response) {
737                form.find("input[name='phone']").val("");
738                form.find('input[type=submit]').removeAttr('disabled');
739                let modal_content = `
740                    <div class="modal zayav-pu">
741                        <div class="modal__container">
742                            <div class="modal__title">Спасибо за обращение!</div>
743                            <div class="modal__policy">Ваша заявка успешно отправлена, наш специалист<br>свяжется с вами в ближайшее время</div>
744                            <button class="modal__close modal__close-success"></button>
745                        </div>
746                        <div class="modal__overlay"></div>
747                    </div>
748                `;
749                jQuery('body').append(modal_content);
750            },
751            error: function(response) {
752                console.error('Ошибка при отправке данных:', response);
753                form.find('input[type=submit]').removeAttr('disabled');
754            }
755        });
756    }
757
758
759    jQuery(".callme-form_och").off('submit').on('submit', function(e) {
760        e.preventDefault();
761        handleCallMeFormOch(jQuery(this));  
762    })
763
764
765    jQuery('.h2Anchor').on( 'click', function(e){
766        e.preventDefault()
767        var el = jQuery(this);
768        var dest = jQuery(".resheniya__content-wrap").eq(el.attr('data-h2id') - 1); // получаем направление
769        if(dest !== undefined && dest !== '') { // проверяем существование
770            $('html').animate({
771                scrollTop: $(dest).offset().top - 60 // прокручиваем страницу к требуемому элементу
772            }, 500 // скорость прокрутки
773            );
774        }
775        return false;
776    });
777
778    function handleMenuScroll(menuClass, targetSelector) {
779        var $menu = jQuery(".bottom-menu");
780        var $target = jQuery(targetSelector);
781    
782        if (jQuery("." + menuClass).length !== 0 && $target.length !== 0) {
783            var targetOffset = $target.offset().top;
784    
785            jQuery(window).scroll(function() {
786                var scrollTop = jQuery(document).scrollTop();
787                
788                if (scrollTop > targetOffset - 100) {
789                    $menu.removeClass(menuClass);
790                } else if (scrollTop < targetOffset) {
791                    $menu.addClass(menuClass);
792                }
793            });
794        }
795    }
796    
797    // Теперь просто вызываем её для каждого случая:
798    handleMenuScroll("bottom-menu--resheniya", ".resheniya__content-wrap:nth-child(1)");
799    handleMenuScroll("bottom-menu--resheniya--v2", ".resheniya__content-wrap:nth-child(1)");
800    handleMenuScroll("bottom-menu--mainpage", ".main-page__content");
801
802
803
804    if ($(".resheniya__btn-main .more__btn").length != 0) {
805        document.querySelector(".resheniya__btn-main .more__btn").addEventListener("click", function(e) {
806            e.preventDefault();
807            this.classList.toggle("fold-active");
808            document.querySelector(".resheniya__list--unfold").classList.toggle("resheniya__list--overlay");
809            if (document.querySelector(".resheniya__list--unfold").style.maxHeight) {
810                document.querySelector(".resheniya__list--unfold").style.maxHeight = null;
811                document.querySelector(".more__btn-text").innerText = "Все решения";
812            } else {
813                document.querySelector(".resheniya__list--unfold").style.maxHeight = document.querySelector(".resheniya__list--unfold").scrollHeight + "px";
814                document.querySelector(".more__btn-text").innerText = "Скрыть";
815            }
816        });
817    }
818
819    if ($(".eqvairing__btn").length != 0) {
820        document.querySelector(".eqvairing__btn").addEventListener("click", function(e) {
821            e.preventDefault();
822            this.classList.toggle("fold-active");
823            if (document.querySelector(".eqvairing_list--unfold").style.maxHeight) {
824                document.querySelector(".eqvairing_list--unfold").style.maxHeight = null;
825            } else {
826                document.querySelector(".eqvairing_list--unfold").style.maxHeight = document.querySelector(".eqvairing_list--unfold").scrollHeight + "px";
827            }
828        });
829    }
830
831	if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
832		var acc = document.getElementsByClassName("footer__column-link--sub");
833		var i;
834
835		for (i = 0; i < acc.length; i++) {
836            acc[i].addEventListener("click", function(e) {
837
838                e.preventDefault();
839                this.classList.toggle("sub-active");
840                var panel = this.nextElementSibling;
841                if (panel.style.maxHeight) {
842                    panel.style.maxHeight = null;
843                } else {
844                    panel.style.maxHeight = panel.scrollHeight + "px";
845                }
846		    });
847		}
848	}
849	
850    jQuery(".form-questions__send").one("click", function() {
851        if (location.href.indexOf('?') > -1) {
852            if (jQuery.cookie('utm_visit') == null) {
853                jQuery.cookie('utm_visit', location.href.substr(location.href.indexOf("?") + 1));
854            }
855        }
856        else{
857            jQuery.removeCookie('utms');
858            jQuery(this).find("input[name='form_fields[utms]']").val('');
859        }
860
861        jQuery("input[name='form_fields[time]']").each(function() {
862            jQuery(this).closest("form").find("input[name='form_fields[target]']").val(jQuery(this).closest(".form-questions").attr("name"));
863        });
864
865        jQuery("input[name='form_fields[enter_dot]']").val(location.href);
866        jQuery("input[name='form_fields[utms]']").val(jQuery.cookie('utms'));
867        jQuery("input[name='form_fields[roi_id]']").val(jQuery.cookie('roistat_visit'));
868        jQuery("input[name='form_fields[yandex_metr]']").val(jQuery.cookie('_ym_uid'));
869        jQuery("input[name='form_fields[google_metr]']").val(jQuery.cookie('_ga'));
870    })
871
872    jQuery(".stati__description ul li a").click(function(e) {
873        var thisId = jQuery(this).attr("href");
874        if (thisId.indexOf('#') > -1) {
875            e.preventDefault()
876            jQuery('html, body').animate({
877                scrollTop: jQuery(thisId).offset().top - 200
878            }, 1000);
879        }
880    })
881
882    if (jQuery("#widget-slider").length != 0) {
883        jQuery('#widget-slider').owlCarousel({
884            items: 1,
885            slideSpeed: 500,
886            loop: true,
887            nav: true,
888            dots: false,
889            margin: 60,
890            autoHeight:true,
891            navText: [
892                '<div class="wg-slider__arrows wg-slider__arrows--prev-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="11" height="18" viewBox="0 0 11 18" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.292969 16.293L1.70718 17.7072L10.4143 9.00007L1.70718 0.292969L0.292969 1.70718L7.58586 9.00008L0.292969 16.293Z" fill="#54BCE3"/></svg></div>',
893                '<div class="wg-slider__arrows wg-slider__arrows--next-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="11" height="18" viewBox="0 0 11 18" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M0.292969 16.293L1.70718 17.7072L10.4143 9.00007L1.70718 0.292969L0.292969 1.70718L7.58586 9.00008L0.292969 16.293Z" fill="#54BCE3"/></svg></div>'
894            ],
895            autoplay: false,
896            autoplayTimeout: 6000,
897            paginationSpeed : 6000,
898            rewindSpeed : 6000,
899            stopOnHover : true,
900            responsive: {
901                // Ширина от 500 пикселей
902                1024: {
903                   // Количество элементов 2
904                   items: 1
905                },
906                768: {
907                    // Количество элементов 2
908                    items: 2,
909                    margin: 20
910                },
911                // Ширина от 800 пикселей
912                100: {
913                    // Количество элементов 3
914                    items: 1
915                }
916            }
917        });
918    }
919
920
921    jQuery(".preview_img img").click(function() {
922        licIndex = jQuery(this).parent().parent().index()
923        var data = {
924            'action': 'blanki',
925            'id': jQuery(this).attr('data-post-id')
926        };
927        jQuery.ajax({
928            url:"/wp-admin/admin-ajax.php", // обработчик
929            data:data, // данные
930            type:'POST', // тип запроса
931            success: function(data){
932                jQuery("body").append(data);
933                jQuery("#blanki__images").attr("data-index", licIndex);
934                jQuery('#blanki__images').owlCarousel({
935                    items: 1,
936                    slideSpeed: 500,
937                    loop: true,
938                    nav: true,
939                    margin: 10,
940                    navText: [
941                        '<div class="slider__arrows slider__arrows--prev-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="36" viewBox="0 0 25 46" fill="none"><path d="M24 1L2 23L24 45" stroke="#fff" stroke-width="2"/></svg></div>',
942                        '<div class="slider__arrows slider__arrows--next-arrow"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="36" viewBox="0 0 25 46" fill="none"><path d="M24 1L2 23L24 45" stroke="#fff" stroke-width="2"/></svg></div>'
943                    ],
944                    paginationSpeed : 6000,
945                    rewindSpeed : 6000,
946                    stopOnHover : true,
947                    startPosition: jQuery("#licenzii__lightbox-slider").attr("data-index")
948                });
949                jQuery(".blanki__lightbox-close").click(function() {
950                    jQuery(".blanki__lightbox").remove();
951                })
952                jQuery(".blanki__lightbox-overlay").click(function() {
953                    jQuery(".blanki__lightbox").remove();
954                })
955                jQuery(document).keydown(function(e) {
956                    if (e.which == 27) {
957                        jQuery(".blanki__lightbox").remove();
958                    }
959                });
960            }
961        });
962      })
963
964    jQuery("a[href=#reg]").click(function(e) {
965        var nowPosition = jQuery(window).scrollTop();
966        e.preventDefault()
967        
968        var clickSource = jQuery(this).attr('data-metrika-goal') || 'nezaregclass365';
969        
970        jQuery.ajax({
971            url: "/wp-content/themes/rgtheme/popups/registerPu.php",
972            success: function(data){
973                jQuery("body").css("overflow", "hidden").append(data);
974                jQuery(window).scrollTop(nowPosition);
975        
976                jQuery("input[name='phone']").on('input', function() {
977                    jQuery("input[name='form_fields[another_phone]']").val(jQuery(this).val().replace(/[^\d]/g, '').substr(jQuery(this).val().replace(/[^\d]/g, '').length - 10));
978                })
979                if (location.href.indexOf('?') > -1) {
980                    if (jQuery.cookie('utm_visit') == null) {
981                        jQuery.cookie('utm_visit', location.href.substr(location.href.indexOf("?") + 1));
982                    }
983                }else{
984                    jQuery.removeCookie('utms');
985                }
986        
987                jQuery("input[name='form_fields[enter_dot]']").val(location.href);
988                jQuery("input[name='form_fields[utms]']").val(jQuery.cookie('utms'));
989                jQuery("input[name='form_fields[roi_id]']").val(jQuery.cookie('roistat_visit'));
990                jQuery("input[name='form_fields[yandex_metr]']").val(jQuery.cookie('_ym_uid'));
991                jQuery("input[name='form_fields[google_metr]']").val(jQuery.cookie('_ga'));
992        
993                jQuery(".reg-form").off('submit').on('submit', function(e) {
994                    e.preventDefault()
995                    
996                    if (!validatePolicyAgree(this)) return;
997                    
998                    var form_data  = new FormData();
999        
1000                    var google_client_id = jQuery(this).find("input[name='form_fields[google_metr]']").val();
1001                    var yandex_client_id = jQuery(this).find("input[name='form_fields[yandex_metr]']").val();
1002                    if(jQuery.cookie('ref')){
1003                        var reff = jQuery.cookie('ref');
1004                    }else{
1005                        reff = '';
1006                    }
1007        
1008                    form_data.append('Телефон', jQuery(this).find("input[name='phone']").val());
1009                    jQuery(this).find("input[name='form_fields[bitrix_id]']").val(jQuery.cookie('ASE_authUserId'));
1010                    form_data.append('another_phone', jQuery(this).find("input[name='form_fields[another_phone]']").val());
1011                    form_data.append('bitrix_id', jQuery(this).find("input[name='form_fields[bitrix_id]']").val());
1012                    form_data.append('publication_code', jQuery(this).find("input[name='form_fields[publication_code]']").val());
1013                    form_data.append('Время', jQuery(this).find("input[name='form_fields[time]']").val());
1014                    form_data.append('Цель', jQuery(this).find("input[name='form_fields[target]']").val());
1015                    form_data.append('Точка_входа', jQuery(this).find("input[name='form_fields[enter_dot]']").val());
1016                    form_data.append('UTMS', jQuery(this).find("input[name='form_fields[utms]']").val());
1017                    form_data.append('RoistatID', jQuery(this).find("input[name='form_fields[roi_id]']").val());
1018                    form_data.append('Яндекс_Метрика', jQuery(this).find("input[name='form_fields[yandex_metr]']").val());
1019                    form_data.append('Гугл_Метрика', jQuery(this).find("input[name='form_fields[google_metr]']").val());
1020                    form_data.append('form_name', jQuery(this).attr("name"));
1021        
1022        
1023                    let query = window.location.search.substring(1);
1024                    if (query) {
1025                        let params = new URLSearchParams(query); 
1026                        let utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
1027                    
1028                        utmParams.forEach(param => {
1029                            if (params.has(param)) { 
1030                                let value = params.get(param); 
1031                                if (value) { 
1032                                    form_data.append(param, decodeURIComponent(value)); 
1033                                }
1034                            }
1035                        });
1036                    } else {
1037                        form_data.set('UTMS', ''); 
1038                    }
1039        
1040                    var roistat_visit = jQuery(this).find("input[name='form_fields[roi_id]']").val();
1041                    var url_first = encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first);
1042                    var userphone = jQuery(this).find("input[name='phone']").val().replace(/[^\d]/g, '');
1043        
1044                    jQuery.ajax({
1045                        url: "/wp-content/themes/rgtheme/webhook.php",
1046                        type:     "POST",
1047                        processData: false,
1048                        contentType: false,
1049                        data: form_data, 
1050                        success: function(data){
1051                        
1052                        }
1053                    });
1054        
1055                    jQuery.ajax({
1056                        url:     '/wp-content/themes/rgtheme/sendMail.php', 
1057                        type:     "POST", 
1058                        dataType: "html", 
1059                        data: jQuery(this).serialize()+'&entry_url='+encodeURIComponent(JSON.parse(jQuery.cookie("businessurl")).url_first),  
1060                        success: function(response) {
1061                            jQuery(".modal").html('');
1062                            var modal_content = `
1063            
1064                                <div class="modal__container">
1065                                    <div class="modal__title">Спасибо за обращение!</div>
1066                                    <div class="modal__policy">Ваша заявка успешно отправлена, наш специалист<br>свяжется с вами в ближайшее время</div>
1067                                    <button class="modal__close modal__close-success"></button>
1068                                </div>
1069                                <div class="modal__overlay"></div>
1070                                
1071                            `
1072                            jQuery('.modal').append(modal_content);
1073                      	},
1074                      	error: function(response) { 
1075                      	    console.error(response)
1076                      	}
1077                	});
1078        			if (typeof ym !== 'undefined') {
1079                        ym(16081030, 'reachGoal', clickSource);
1080                    }
1081                })
1082        
1083                jQuery(".modal__close").click(function() {
1084                    jQuery("body").removeAttr("style");
1085                    jQuery(this).parents(".modal").remove();
1086                })
1087                jQuery(".modal__overlay").click(function() {
1088                    jQuery("body").removeAttr("style");
1089                    jQuery(this).parents(".modal").remove();
1090                })
1091                jQuery(document).keydown(function(e) {
1092                    if (e.which == 27) {
1093                        jQuery("body").removeAttr("style");
1094                        jQuery(".modal").remove();
1095                    }
1096                });
1097            }
1098        });
1099    })
1100});
1101
1102jQuery(document).on("click", ".modal__close-success", function() {
1103    jQuery("body").removeAttr("style");
1104    jQuery(".modal").remove();
1105})
1106jQuery(document).on("click", ".modal__overlay", function() {
1107    jQuery("body").removeAttr("style");
1108    jQuery(".modal").remove();
1109})
1110
1111// online-check pages scripts
1112jQuery(document).ready(function () {
1113
1114    jQuery('.callme-form_och input[type="submit"]:not(.done)').click(function () {
1115        jQuery(this).addClass('done');
1116        jQuery(this).parent().find('input[type="tel"]').addClass('done');
1117    })
1118    jQuery('.spoiler-body').css('height', 0)
1119    
1120    jQuery('.spoiler-trigger').click(function () {
1121        $ah = jQuery(this).parent().find('.spoiler-body-wrap').height()
1122        console.log($ah);
1123        if(jQuery(this).find('span').text() != "Свернуть"){
1124            jQuery(this).attr('backtext', jQuery(this).find('span').text())
1125            jQuery(this).parent().find('.spoiler-body').animate({height:$ah+30},500)
1126            jQuery(this).find('span').text("Свернуть")
1127            jQuery(this).find('svg').css('rotate', '180')
1128        } else{
1129            jQuery(this).parent().find('.spoiler-body').animate({height:0},500)
1130            jQuery(this).find('span').text(jQuery(this).attr('backtext'))
1131            jQuery(this).find('svg').css('rotate', '0')
1132        }
1133    })
1134})

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.