PageSourceSearch

http://kgeu.ru/local/static_backend/js/script.js?176720126958396

js kgeu.ru collected 2026-10-02 08:37:56 UTC 58,396 bytes, 1,596 lines download raw bytes

1$(function() {
2
3    $(document).on('submit', '.js-form-send', function (e) {
4        e.preventDefault();
5
6        let $form = $(this),
7            $output = $form.find('.js-output'),
8            $btn = $form.find('button[type="submit"]');
9
10        if (!$form.hasClass('loading')) {
11            $form.addClass('loading');
12            $btn.attr('disabled', true);
13            $output.text('');
14            $form.removeClass('success');
15
16            $.ajax({
17                url: $form.data('action'),
18                data: new FormData($form[0]),
19                processData: false,
20                contentType: false,
21                type: 'POST',
22                cache: false,
23                dataType: 'json',
24                success: function (data) {
25
26                    if (data.result === "success") {
27                        $form[0].reset();
28
29                        Popup.openSuccess();
30                        //$output.html('Спасибо! Ваша заявка отправлена.');
31                        $form.addClass('success');
32
33                        setTimeout(function (){
34                            $output.html('');
35                            $form.removeClass('success');
36                        }, 7000)
37
38                    } else {
39
40                        $output.text(data.error);
41                    }
42                    $form.removeClass('loading');
43                    $btn.attr('disabled', false);
44                },
45                error: function () {
46                    $form.removeClass('loading');
47                    $btn.attr('disabled', false);
48                }
49            });
50
51        }
52    });
53
54    $(document).on('click', '.js-open-popup', function (e) {
55        e.preventDefault();
56
57        let form_id = $(this).data('id');
58        Popup.open(form_id);
59    });
60
61    $(document).on('click', '.js-more-info-staff', function (e) {
62        e.preventDefault();
63
64        //list-staff__row-detail
65        //list-staff__item
66        let $parent = $(this).parents('.list-staff__item');
67
68        $parent.toggleClass('show');
69    });
70
71    $(document).on('click', '.js-popup-menu-toggle', function (e) {
72        e.preventDefault();
73
74        $('body').toggleClass('no-scroll');
75    });
76
77    $(document).on('click', '#popup__overlay, #popup-menu.active1', function (e) {
78        e.preventDefault();
79
80        setTimeout(function (){
81            if(!$('#popup-menu').hasClass('active1'))
82                $('body').removeClass('no-scroll');
83        }, 500);
84    });
85
86   $(document).on('click', '.active1 a', function (e) {
87        e.preventDefault();
88
89        window.open($(this).attr('href'),"_self");
90    });
91
92    $(document).on('click', '.js-close-popup', function (e) {
93        e.preventDefault();
94        Popup.close();
95    });
96
97    $(document).on('click', '.js-load-more-news', function (e) {
98        e.preventDefault();
99
100        let targetContainer = $('.js-more-container'),
101            url = $('.js-load-more-news').attr('data-url');
102        if (url !== undefined) {
103            $.ajax({
104                type: 'GET',
105                data: $('.js-news-filter').serialize(),
106                url: url,
107                dataType: 'html',
108                success: function (data) {
109                    $('.js-load-more-news').remove();
110                    let elements = $(data).find('.js-more-item'),
111                        pagination = $(data).find('.js-load-more-news');
112
113                    targetContainer.append(elements);
114                    $('#load-more-append').after(pagination);
115                }
116            })
117        }
118    });
119
120    $(document).on('click', '.js-load-more', function (e) {
121        e.preventDefault();
122
123        let targetContainer = $('.js-more-container'),
124            url = $('.js-load-more').attr('data-url');
125        if (url !== undefined) {
126            $.ajax({
127                type: 'GET',
128                url: url,
129                dataType: 'html',
130                success: function (data) {
131                    $('.js-load-more').remove();
132                    //$('.js-load-more-navigation').remove();
133                    let elements = $(data).find('.js-more-item'),
134                        pagination = $(data).find('.js-load-more');
135                        //navigation = $(data).find('.js-load-more-navigation');
136
137                    targetContainer.append(elements);
138                    //targetContainer.after(navigation);
139                    $('#load-more-append').after(pagination);
140                }
141            })
142        }
143    });
144
145    if($('.js-load-more').length) {
146        let $load_more = $('.js-load-more');
147        $('#load-more-append').html($load_more)
148    }
149
150    $(document).on('change', '.js-search-files select', function (e) {
151        $(this).parents('form').trigger('submit');
152		if ($(this).parent().hasClass('section-sort-mobile__show')) {
153			$(this).parent().removeClass('section-sort-mobile__show');
154		}
155		if (!!$(this).parents('form').attr('data-new')) {
156			$(this).parents('form').find('.js-form-sort-reset').addClass('section-files__select-reset-show');
157		}
158    });
159
160	$(document).on('click', '.js-form-sort-reset', function(e){
161        e.preventDefault();
162
163		let targetContainer = $('.js-search-files-content'),
164			url = '/local/action/files_new.php',
165			dataSend = $(this).parents('form').serialize().replace("sort", ""),
166			sectionID = 0;
167
168		$('.select-default__dropdown .select-default__option').trigger('click');
169		
170		if ($('.js-section-item.section-item--active').length > 0) {
171			let arrData = $(this).parents('form').serialize().split('&'),
172				newData = "";
173			
174			sectionID = $('.js-section-item.section-item--active').data('section-id');
175				
176			$.each(arrData, function(index, item) {
177				if (item.length > 0) {
178					let arrItem = item.split('=');
179					if (arrItem[1].length > 0) {
180						if (arrItem[0] == 'sort') {
181						} else {
182							newData += item;
183							if (index != arrData.length-1) {
184								newData += "&";
185							}
186						}
187					}
188				}
189			});
190			if (newData.length > 0) {
191				dataSend = newData;
192			}
193		}
194
195		$.ajax({
196			type: 'post',
197			url: url,
198			data: dataSend,
199			dataType: 'json',
200			success: function (data) {
201				targetContainer.html(data.html);
202
203				let topBlock = $('.section-files__table').position().top;
204				if (topBlock > 0)
205					$("html, body").animate({ scrollTop: topBlock-20 }, "slow");
206
207				// кнопка сбросить фильтры
208				$('.js-form-sort-reset').removeClass('section-files__select-reset-show');
209				
210				if ($('.section-files__select.js-form-sort').hasClass('section-sort-mobile__show'))
211					$('.section-files__select.js-form-sort').removeClass('section-sort-mobile__show');
212				
213				if (sectionID > 0) {
214					if ($('.js-more-section[data-parent-section="'+sectionID+'"]').length > 0)
215						$('.js-more-section[data-parent-section="'+sectionID+'"]').show();
216					$('.js-more-item').hide();
217					if ($('.js-more-item[data-section-id="'+sectionID+'"]').length > 0)
218						$('.js-more-item[data-section-id="'+sectionID+'"]').show();
219				} else {
220					// по умолчанию
221					$('.js-more-section').show();
222					$('.js-more-item').show();
223				}
224			}
225		})
226	});
227
228
229	$(document).on('click', '.js-search-reset', function(e){e.preventDefault();
230
231		let targetContainer = $('.js-search-files-content'),
232			url = '/local/action/files_new.php',
233			dataSend = $(this).parents('form').serialize().replace("search", ""),
234			sectionID = 0;
235
236		if ($('.js-search-reset').length > 0 && $('.js-search-reset').hasClass('section-search-reset__show')) {
237			$('.js-search-reset').removeClass('section-search-reset__show');
238		}
239		if ($('.js-search-files').find('input[name="search"]').length > 0) {
240			if ($('.js-search-files').find('input[name="search"]').val().length > 0) {
241				$('.js-search-files').find('input[name="search"]').val('');
242			}
243		}
244		if ($('.js-section-item.section-item--active').length > 0) {
245			let arrData = $(this).parents('form').serialize().split('&'),
246				newData = "";
247			
248			sectionID = $('.js-section-item.section-item--active').data('section-id');
249				
250			$.each(arrData, function(index, item) {
251				if (item.length > 0) {
252					let arrItem = item.split('=');
253					if (arrItem[1].length > 0) {
254						if (arrItem[0] == 'search') {
255						} else {
256							newData += item;
257							if (index != arrData.length-1) {
258								newData += "&";
259							}
260						}
261					}
262				}
263			});
264			if (newData.length > 0) {
265				dataSend = newData;
266			}
267		}
268
269		$.ajax({
270			type: 'post',
271			url: url,
272			data: dataSend,
273			dataType: 'json',
274			success: function (data) {
275				targetContainer.html(data.html);
276
277				let topBlock = $('.section-files__table').position().top;
278				if (topBlock > 0)
279					$("html, body").animate({ scrollTop: topBlock-20 }, "slow");
280
281				// кнопка сбросить фильтры
282				$('.js-form-sort-reset').removeClass('section-files__select-reset-show');
283				
284				if ($('.section-files__select.js-form-sort').hasClass('section-sort-mobile__show'))
285					$('.section-files__select.js-form-sort').removeClass('section-sort-mobile__show');
286				
287				if (sectionID > 0) {
288					if ($('.js-more-section[data-parent-section="'+sectionID+'"]').length > 0)
289						$('.js-more-section[data-parent-section="'+sectionID+'"]').show();
290					$('.js-more-item').hide();
291					if ($('.js-more-item[data-section-id="'+sectionID+'"]').length > 0)
292						$('.js-more-item[data-section-id="'+sectionID+'"]').show();
293				} else {
294					// по умолчанию
295					$('.js-more-section').show();
296					$('.js-more-item').show();
297				}
298			}
299		})
300	});
301
302    $(document).on('submit', '.js-search-files', function (e) {
303        e.preventDefault();
304
305		if ($('.js-search-reset').length > 0) {
306			if ($('.js-search-reset').hasClass('section-search-reset__show'))
307				$('.js-search-reset').removeClass('section-search-reset__show');
308		}
309		if ($(this).find('input[name="search"]').length > 0) {
310			if ($(this).find('input[name="search"]').val().length > 0) {
311				// показать кнопку сбросить
312				if ($('.js-search-reset').length > 0)
313					$('.js-search-reset').addClass('section-search-reset__show');
314			}
315		}
316
317		if (!!$(this).attr('data-new')) {
318			let targetContainer = $('.js-search-files-content'),
319				url = '/local/action/files_new.php',
320				data = $(this).serialize();
321
322			if ($('.js-section-item.section-item--active').length > 0) {
323				let arrData = data.split('&'),
324					sectionID = $('.js-section-item.section-item--active').data('section-id'),
325					newData = "";
326				$.each(arrData, function(index, item) {
327					let arrItem = item.split('=');
328					if (arrItem[0] == 'section') {
329						newData += "section="+sectionID;
330					} else {
331						newData += item;
332					}
333					if (index != arrData.length-1) {
334						newData += "&";
335					}
336				});
337				if (newData.length > 0) {
338					data = newData;
339				}
340			}
341
342			$.ajax({
343				type: 'post',
344				url: url,
345				data: data,
346				dataType: 'json',
347				success: function (data) {
348					targetContainer.html(data.html);
349
350					let topBlock = $('.section-files__table').position().top;
351					if (topBlock > 0)
352						$("html, body").animate({ scrollTop: topBlock-20 }, "slow");
353
354					// кнопка сбросить фильтры
355				}
356			})
357		} else {
358			let targetContainer = $('.js-search-files-content'),
359				url = '/local/action/files.php';
360
361			$.ajax({
362				type: 'post',
363				url: url,
364				data: $(this).serialize(),
365				dataType: 'json',
366				success: function (data) {
367					targetContainer.html(data.html);
368				}
369			})
370		}
371
372    });
373
374    $(document).on('submit', '.js-search-jobs', function (e) {
375        e.preventDefault();
376
377        let targetContainer = $('.js-search-jobs-content'),
378            url = '/local/action/jobs.php';
379
380        $.ajax({
381            type: 'post',
382            url: url,
383            data: $(this).serialize(),
384            dataType: 'json',
385            success: function (data) {
386                targetContainer.html(data.html);
387            }
388        })
389
390    });
391
392    $(document).on('submit', '.js-search-docs', function (e) {
393        e.preventDefault();
394
395        let targetContainer = $('.js-search-docs-content'),
396            url = '/local/action/docs.php';
397
398        $.ajax({
399            type: 'post',
400            url: url,
401            data: $(this).serialize(),
402            dataType: 'json',
403            success: function (data) {
404                targetContainer.html(data.html);
405            }
406        })
407
408    });
409
410    $(document).on('submit', '.js-search-staff-q', function (e) {
411        e.preventDefault();
412
413        let q = $(this).find('[name="q"]').val();
414        $('.js-search-staff-mobile [name="q"]').val(q);
415        $('.js-search-staff-mobile').trigger('submit');
416    });
417
418    $(document).on('submit', '.js-search-staff', function (e) {
419        e.preventDefault();
420
421        let targetContainer = $('.js-search-staff-content'),
422            url = '/local/action/staff.php';
423
424        if($(this).hasClass('js-search-staff-mobile')) {
425
426        }
427
428        $.ajax({
429            type: 'post',
430            url: url,
431            data: $(this).serialize(),
432            dataType: 'json',
433            success: function (data) {
434                if(data.html == '')
435                    targetContainer.html('<div class="not-found">К сожалению, ничего не найдено.</div>');
436                else
437                    targetContainer.html(data.html);
438                $('#popup-filter .js-popup-filter-close').trigger('click');
439            }
440        })
441
442    });
443
444    $(document).on('change', '.js-search-programs-page input[type="checkbox"], .js-search-programs-page input[type="radio"]', function (e) {
445
446        let $form = $(this).parents('form'),
447            $tags = $form.find('.js-filter-tags'),
448            $tags_html = $form.find('.js-filter-tags-html');
449
450        $tags_html.html('');
451
452        $form.find('input[type="checkbox"]:checked').each(function (i, el){
453            let text = $(this).parents('.check-default').text(),
454                value = $(this).val();
455
456            $tags_html.append('<li class="depick__item" data-value="'+value+'">\n' +
457                '                <span>'+text+'</span>\n' +
458                '                <button></button>\n' +
459                '            </li>')
460        });
461
462        $tags.show();
463
464        $(this).parents('form').trigger('submit');
465    });
466
467    $(document).on('submit', '.js-search-programs', function (e) {
468        e.preventDefault();
469
470        let targetContainer = $('.js-more-container'),
471            url = $(this).attr('action');
472
473        $.ajax({
474            type: 'post',
475            url: url,
476            data: $(this).serialize(),
477            dataType: 'html',
478            success: function (data) {
479                let elements = $(data).find('.js-more-item');
480                //targetContainer.html(elements);
481
482                if(!elements.length)
483                    targetContainer.html('<div class="not-found">К сожалению, ничего не найдено.</div>');
484                else
485                    targetContainer.html(elements);
486
487                $('#popup-filter .js-popup-filter-close').trigger('click');
488            }
489        })
490
491    });
492
493    $(document).on('click', '.js-search-programs-clear', function (e) {
494        e.preventDefault();
495
496        let $form = $('.js-search-programs');
497        let $form2 = $('.js-search-programs-mobile');
498        $form[0].reset();
499        $form2[0].reset();
500
501        setTimeout(function (){
502            $form.eq(0).trigger('submit');
503        }, 300)
504
505    });
506
507    $(document).on('submit', '.js-search-programs-q', function (e) {
508        e.preventDefault();
509
510        let q = $(this).find('[name="q"]').val();
511        $('.js-search-programs-mobile [name="q"]').val(q);
512        $('.js-search-programs-mobile').trigger('submit');
513    });
514
515    $(document).on('keyup', '.js-institute-program-top [name="q"]', function (e) {
516        e.preventDefault();
517        let q = $(this).val();
518        $('.js-institute-program-page [name="q"]').val(q);
519        $('.js-institute-program-page').trigger('submit');
520    });
521
522    $(document).on('click', '.js-institute-program-top .form-search__btn-search', function (e) {
523        e.preventDefault();
524        let q = $('.js-institute-program-top [name="q"]').val();
525        $('.js-institute-program-page [name="q"]').val(q);
526        $('.js-institute-program-page').trigger('submit');
527    });
528
529    $(document).on('click', '[data-set-program]', function (e) {
530        e.preventDefault();
531
532        if($(this).parents('.swiper-slide').hasClass('active'))
533            return;
534
535        let value = $(this).data('set-program');
536        $('.js-institute-program-page [name="PROGRAM[]"]').val(value);
537        $('.js-institute-program-page').trigger('submit');
538
539        //$(this).parents('.swiper')[0].swiper.slideTo($(this).index());
540        let $slider = $(this).parents('.swiper'),
541            $slides = $slider.find('.swiper-slide');
542
543        $slides.removeClass('active');
544        $(this).parents('.swiper-slide').addClass('active');
545    });
546
547    $(document).on('submit', '.js-institute-program-page', function (e) {
548        e.preventDefault();
549
550        let targetContainer = $('.js-more-container'),
551            url = $(this).attr('action');
552
553        $.ajax({
554            type: 'post',
555            url: url,
556            data: $(this).serialize(),
557            dataType: 'html',
558            success: function (data) {
559                let elements = $(data).find('.js-more-item');
560                //targetContainer.html(elements);
561
562                if(!elements.length)
563                    targetContainer.html('<div class="not-found">К сожалению, ничего не найдено.</div>');
564                else
565                    targetContainer.html(elements);
566
567                //$('#popup-filter .js-popup-filter-close').trigger('click');
568            }
569        })
570    });
571
572    $(document).on('change', '.js-institute-program-page input[type="checkbox"], .js-institute-program-page input[type="radio"]', function (e) {
573
574        let $form = $(this).parents('form');
575        $form.trigger('submit');
576    });
577
578    let slider = document.getElementById('score-slider');
579    if(slider) {
580        slider.noUiSlider.on('end', function () {
581            let $form = $('.js-search-programs-page');
582            $form.trigger('submit');
583        });
584    }
585
586    let slider2 = document.getElementById('score-slider-2');
587    if(slider) {
588        slider2.noUiSlider.on('end', function () {
589            let $form = $('.js-search-programs-mobile');
590            $form.trigger('submit');
591        });
592    }
593
594    $(document).on('focusout', '.js-search-programs-page .js-number, .js-search-programs-mobile .js-number', function (e) {
595        e.preventDefault();
596
597        let $form = $(this).parents('form');
598        $form.trigger('submit');
599    });
600
601
602
603    //js-news-filter
604    $(document).on('submit', '.js-news-filter', function (e) {
605        e.preventDefault();
606
607        let targetContainer = $('.js-more-container'),
608            url = $(this).attr('action');
609
610        $(this).find('[name="AJAX"]').val('Y');
611
612        $.ajax({
613            type: 'post',
614            url: url,
615            data: $(this).serialize(),
616            dataType: 'html',
617            success: function (data) {
618                let elements = $(data).find('.js-more-item');
619
620                if(!elements.length)
621                    targetContainer.html('<div class="not-found list-events__item">К сожалению, ничего не найдено.</div>');
622                else
623                    targetContainer.html(elements);
624
625                $('#popup-filter .js-popup-filter-close').trigger('click');
626            }
627        })
628    });
629
630    $(document).on('submit', '.js-news-filter-mobile', function (e) {
631        e.preventDefault();
632
633        let q = $(this).find('[name="q"]').val();
634        $('.js-news-filter [name="q"]').val(q);
635        $('.js-news-filter').trigger('submit');
636    });
637
638    $(document).on('submit', '.js-news-filter-q', function (e) {
639        e.preventDefault();
640
641        let $form = $(this).parents('form');
642        $form.trigger('submit');
643    });
644
645    $(document).on('change', '.js-news-filter input[type="checkbox"], .js-news-filter input[type="radio"]', function (e) {
646
647        let $form = $(this).parents('form'),
648            $tags = $form.find('.js-filter-tags'),
649            $tags_html = $form.find('.js-filter-tags-html');
650
651        $tags_html.html('');
652
653        $form.find('input[type="checkbox"]:checked').each(function (i, el){
654            let text = $(this).parents('.check-default').text(),
655                value = $(this).val();
656
657            $tags_html.append('<li class="depick__item" data-value="'+value+'">\n' +
658                '                <span>'+text+'</span>\n' +
659                '                <button></button>\n' +
660                '            </li>')
661        });
662
663        $tags.show();
664
665        $(this).parents('form').trigger('submit');
666    });
667
668
669
670    $(document).on('submit', '.js-search-events', function (e) {
671        e.preventDefault();
672
673        let targetContainer = $('.js-more-container'),
674            url = $(this).attr('action');
675
676        $.ajax({
677            type: 'post',
678            url: url,
679            data: $(this).serialize(),
680            dataType: 'html',
681            success: function (data) {
682                let elements = $(data).find('.js-more-item');
683
684                if(!elements.length)
685                    targetContainer.html('<div class="not-found list-events__item">К сожалению, ничего не найдено.</div>');
686                else
687                    targetContainer.html(elements);
688
689                $('#popup-filter .js-popup-filter-close').trigger('click');
690            }
691        })
692
693    });
694
695    $(document).on('submit', '.js-search-events-mobile', function (e) {
696        e.preventDefault();
697
698        let q = $(this).find('[name="q"]').val();
699        $('.js-search-events [name="q"]').val(q);
700        $('.js-search-events').trigger('submit');
701    });
702
703    $(document).on('submit', '.js-search-events-q', function (e) {
704        e.preventDefault();
705
706        let $form = $(this).parents('form');
707        $form.trigger('submit');
708    });
709
710    $(document).on('change', '.js-search-events input[type="checkbox"], .js-search-events input[type="radio"]', function (e) {
711
712        let $form = $(this).parents('form'),
713            $tags = $form.find('.js-filter-tags'),
714            $tags_html = $form.find('.js-filter-tags-html');
715
716        $tags_html.html('');
717
718        $form.find('input[type="checkbox"]:checked').each(function (i, el){
719            let text = $(this).parents('.check-default').text(),
720                value = $(this).val();
721
722            $tags_html.append('<li class="depick__item" data-value="'+value+'">\n' +
723                '                <span>'+text+'</span>\n' +
724                '                <button></button>\n' +
725                '            </li>')
726        });
727
728        $tags.show();
729
730        $(this).parents('form').trigger('submit');
731    });
732
733    $(document).on('click', '.depick__item button', function (e) {
734        e.preventDefault();
735
736        let value = $(this).parents('.depick__item').data('value'),
737            $form = $(this).parents('form'),
738            $tags = $form.find('.js-filter-tags'),
739            $tags_html = $form.find('.js-filter-tags-html');
740
741        $('input[type="checkbox"][value="'+value+'"]').prop('checked', false);
742        $(this).parents('.depick__item').remove();
743
744        if(!$tags_html.find('li').length)
745            $tags.hide();
746
747        $form.trigger('submit');
748    });
749
750    $(document).on('focusout', '[name="date_1"], [name="date_2"]', function (e) {
751        e.preventDefault();
752
753        let $form = $(this).parents('form');
754        $form.trigger('submit');
755    });
756
757
758
759    let $h1 = $('.intro-simple__h1');
760    if($h1.length) {
761        let strlen_h1 = $h1.text().trim().length;
762        if(strlen_h1 >= 20)
763            $h1.addClass('intro-simple__h1-small');
764        if(strlen_h1 >= 50)
765            $h1.addClass('intro-simple__h1-small-desktop');
766    }
767
768    $('.vis-toggle').on('click', function(e) {
769        e.preventDefault();
770        $(this).next().toggleClass('closed');
771        return false;
772    });
773   
774//     // Конфигурация языков
775//     const LANGUAGES = ['ru', 'en', 'zh-CN'];
776//     const LANGUAGE_TEXTS = { 'ru': 'Ru', 'en': 'En', 'zh-CN': '中文' };
777    
778//     // Инициализация кнопки при загрузке
779//     setTimeout(function() {
780//         updateLangButton();
781//         initGoogleTranslate(); // Инициализируем Google Translate
782//     }, 700);
783
784//     // Функция инициализации Google Translate
785//     function initGoogleTranslate() {
786//         // Если уже загружен, ничего не делаем
787//         if (window.googleTranslateInitialized) return;
788        
789//         // Удаляем старые скрипты
790//         var oldScripts = document.querySelectorAll('script[src*="translate.google"]');
791//         oldScripts.forEach(script => {
792//             if (script && script.parentNode) {
793//                 script.parentNode.removeChild(script);
794//             }
795//         });
796        
797//         // Загружаем новый скрипт
798//         var script = document.createElement('script');
799//         script.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
800//         document.head.appendChild(script);
801        
802//         window.googleTranslateElementInit = function() {
803//             console.log('Google Translate загружен');
804            
805//             // Создаем виджет со всеми языками
806//             new google.translate.TranslateElement({
807//                 pageLanguage: 'ru',
808//                 includedLanguages: 'ru,en,zh-CN',
809//                 layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL,
810//                 autoDisplay: false
811//             }, 'google_translate_element');
812            
813//             // Скрываем виджет
814//             var widget = document.getElementById('google_translate_element');
815//             if (widget) {
816//                 widget.style.display = 'none';
817//                 widget.style.position = 'absolute';
818//                 widget.style.left = '-9999px';
819//             }
820            
821//             window.googleTranslateInitialized = true;
822//         };
823//     }
824
825//     // Функция обновления кнопки
826//     function updateLangButton() {
827//         // Определяем текущий язык страницы
828//         let currentLang = detectCurrentLanguage();
829//         console.log('Текущий язык страницы:', currentLang);
830        
831//         // Определяем, какой язык должен быть на кнопке (следующий в цикле)
832//         let nextLang = getNextLanguage(currentLang);
833        
834//         // Обновляем кнопку
835//         $('.js-lang-change')
836//             .data('lang', nextLang) // Куда будем переводить
837//             .attr('data-current', currentLang) // Текущий язык
838//             .find('span').text(LANGUAGE_TEXTS[nextLang]);
839        
840//         // Обновляем атрибут lang у html
841//         $('html').attr('lang', currentLang);
842//     }
843
844//     // Функция определения текущего языка
845//     function detectCurrentLanguage() {
846//         // 1. Проверяем куки Google Translate
847//         let cookies = document.cookie.split(';');
848//         for (let cookie of cookies) {
849//             cookie = cookie.trim();
850//             if (cookie.startsWith('googtrans=')) {
851//                 let value = cookie.substring(10);
852//                 if (value) {
853//                     // Извлекаем язык из формата /ru/en
854//                     let parts = value.split('/');
855//                     if (parts.length >= 3) {
856//                         let lang = parts[2];
857//                         if (LANGUAGES.includes(lang)) {
858//                             return lang;
859//                         }
860//                     }
861//                 }
862//             }
863//         }
864        
865//         // 2. Проверяем атрибут lang у html
866//         let htmlLang = $('html').attr('lang');
867//         if (htmlLang && LANGUAGES.includes(htmlLang)) {
868//             return htmlLang;
869//         }
870        
871//         // 3. По умолчанию русский
872//         return 'ru';
873//     }
874
875//     // Функция получения следующего языка в цикле
876//     function getNextLanguage(currentLang) {
877//         let currentIndex = LANGUAGES.indexOf(currentLang);
878//         if (currentIndex === -1) currentIndex = 0;
879        
880//         let nextIndex = (currentIndex + 1) % LANGUAGES.length;
881//         return LANGUAGES[nextIndex];
882//     }
883
884//     // Обработчик клика по кнопке
885//     $(document).on('click', '.js-lang-change', function(e) {
886//         e.preventDefault();
887//         e.stopPropagation();
888        
889//         let targetLang = $(this).data('lang'); // На какой язык переводим
890//         let currentLang = $(this).data('current') || detectCurrentLanguage();
891        
892//         console.log('Перевод с', currentLang, 'на', targetLang);
893        
894//         // Выполняем перевод
895//         performTranslation(targetLang, currentLang);
896        
897//         // Немедленно обновляем кнопку
898//         updateButtonImmediately(targetLang);
899//     });
900
901//     // Немедленное обновление кнопки
902//     function updateButtonImmediately(newLang) {
903//         let nextLang = getNextLanguage(newLang);
904        
905//         $('.js-lang-change')
906//             .data('lang', nextLang)
907//             .attr('data-current', newLang)
908//             .find('span').text(LANGUAGE_TEXTS[nextLang]);
909        
910//         $('html').attr('lang', newLang);
911//     }
912
913//     // Функция выполнения перевода
914//     function performTranslation(targetLang, currentLang) {
915//         console.log('Выполняем перевод с', currentLang, 'на', targetLang);
916        
917//         // Сохраняем выбранный язык
918//         saveLanguagePreference(targetLang);
919        
920//         // Применяем перевод через Google
921//         applyGoogleTranslation(targetLang);
922//     }
923
924//     // Сохранение языка в куки
925//     function saveLanguagePreference(lang) {
926//         document.cookie = `googtrans=/ru/${lang}; path=/; max-age=31536000`;
927//         document.cookie = `site_lang=${lang}; path=/; max-age=31536000`;
928//     }
929
930//     // Применение перевода через Google
931//     function applyGoogleTranslation(lang) {
932//         console.log('Применяем Google Translate для языка:', lang);
933        
934//         // Ждем пока Google Translate загрузится
935//         var checkInterval = setInterval(function() {
936//             if (typeof google !== 'undefined' && google.translate) {
937//                 clearInterval(checkInterval);
938//                 executeTranslation(lang);
939//             }
940//         }, 100);
941        
942//         // Таймаут на случай если Google не загрузится
943//         setTimeout(function() {
944//             clearInterval(checkInterval);
945//             if (typeof google !== 'undefined' && google.translate) {
946//                 executeTranslation(lang);
947//             } else {
948//                 console.error('Google Translate не загрузился');
949//                 // Перезагружаем Google Translate
950//                 window.googleTranslateInitialized = false;
951//                 initGoogleTranslate();
952                
953//                 // Повторяем попытку через 1 секунду
954//                 setTimeout(function() {
955//                     applyGoogleTranslation(lang);
956//                 }, 1000);
957//             }
958//         }, 2000);
959//     }
960
961//     // Выполнение перевода
962//     function executeTranslation(lang) {
963//         console.log('Выполняем перевод на', lang);
964        
965//         // Проверяем, есть ли виджет
966//         let selectField = document.querySelector("#google_translate_element select");
967        
968//         if (!selectField) {
969//             console.log('Селект не найден, создаем виджет...');
970//             createWidgetAndTranslate(lang);
971//             return;
972//         }
973        
974//         // Ищем нужный язык в селекте
975//         for (let i = 0; i < selectField.options.length; i++) {
976//             if (selectField.options[i].value === lang) {
977//                 selectField.selectedIndex = i;
978//                 selectField.dispatchEvent(new Event('change'));
979//                 console.log('Перевод применен');
980//                 return;
981//             }
982//         }
983        
984//         // Язык не найден в селекте
985//         console.log('Язык', lang, 'не найден в селекте, пересоздаем виджет...');
986//         createWidgetAndTranslate(lang);
987//     }
988
989//     // Создание виджета и перевод
990//     function createWidgetAndTranslate(lang) {
991//         // Удаляем старый виджет
992//         var oldWidget = document.getElementById('google_translate_element');
993//         if (oldWidget) oldWidget.innerHTML = '';
994        
995//         // Создаем новую функцию инициализации
996//         window.googleTranslateElementInit = function() {
997//             console.log('Создаем новый виджет для перевода на', lang);
998            
999//             new google.translate.TranslateElement({
1000//                 pageLanguage: 'ru',
1001//                 includedLanguages: 'ru,en,zh-CN',
1002//                 layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL,
1003//                 autoDisplay: false
1004//             }, 'google_translate_element');
1005            
1006//             // Скрываем виджет
1007//             var widget = document.getElementById('google_translate_element');
1008//             if (widget) {
1009//                 widget.style.display = 'none';
1010//                 widget.style.position = 'absolute';
1011//                 widget.style.left = '-9999px';
1012//             }
1013            
1014//             // Ждем и применяем перевод
1015//             setTimeout(function() {
1016//                 let select = document.querySelector("#google_translate_element select");
1017//                 if (select) {
1018//                     for (let i = 0; i < select.options.length; i++) {
1019//                         if (select.options[i].value === lang) {
1020//                             select.selectedIndex = i;
1021//                             select.dispatchEvent(new Event('change'));
1022//                             break;
1023//                         }
1024//                     }
1025//                 }
1026//             }, 500);
1027//         };
1028        
1029//         // Загружаем скрипт заново
1030//         window.googleTranslateInitialized = false;
1031//         initGoogleTranslate();
1032//     }
1033
1034//     // Восстановление состояния при загрузке
1035//     $(document).ready(function() {
1036//         console.log('Восстанавливаем состояние языка...');
1037        
1038//         // Проверяем, был ли выбран язык ранее
1039//         let savedLang = null;
1040//         let cookies = document.cookie.split(';');
1041        
1042//         for (let cookie of cookies) {
1043//             cookie = cookie.trim();
1044//             if (cookie.startsWith('googtrans=')) {
1045//                 let value = cookie.substring(10);
1046//                 if (value && value !== '/ru/ru') {
1047//                     let parts = value.split('/');
1048//                     if (parts.length >= 3) {
1049//                         savedLang = parts[2];
1050//                         break;
1051//                     }
1052//                 }
1053//             } else if (cookie.startsWith('site_lang=')) {
1054//                 savedLang = cookie.substring(10);
1055//                 break;
1056//             }
1057//         }
1058        
1059//         // Если есть сохраненный язык
1060//         if (savedLang && LANGUAGES.includes(savedLang)) {
1061//             console.log('Восстанавливаем сохраненный язык:', savedLang);
1062            
1063//             // Устанавливаем атрибут lang
1064//             $('html').attr('lang', savedLang);
1065            
1066//             // Если это не русский, применяем перевод через секунду
1067//             if (savedLang !== 'ru') {
1068//                 setTimeout(() => {
1069//                     applyGoogleTranslation(savedLang);
1070//                 }, 1500);
1071//             }
1072//         }
1073        
1074//         // Инициализируем кнопку
1075//         setTimeout(updateLangButton, 1000);
1076//     });
1077
1078//     // Слушатель изменений URL (на случай если Google меняет хэш)
1079//     window.addEventListener('hashchange', function() {
1080//         if (window.location.hash.includes('googtrans')) {
1081//             // Google применил перевод, обновляем кнопку через 0.5 сек
1082//             setTimeout(updateLangButton, 500);
1083//         }
1084//     });
1085
1086//     // Дополнительная проверка: если перевод не применился через 2 секунды
1087//     setInterval(function() {
1088//         // Проверяем, совпадает ли текущий язык с тем, что должен быть
1089//         let currentLang = detectCurrentLanguage();
1090//         let buttonLang = $('.js-lang-change').data('current');
1091        
1092//         if (buttonLang && currentLang !== buttonLang) {
1093//             console.log('Расхождение: кнопка показывает', buttonLang, 'а язык', currentLang);
1094//             updateLangButton();
1095//         }
1096//     }, 2000);
1097
1098    
1099//     $('.article-default ol').each(function (i, el){
1100//         let counts = $(el).find('> li').length;
1101//         if(counts > 8) {
1102//             $(el).find('> li').each(function (i2,el2) {
1103//                 if(i2 > 8)
1104//                     $(el2).addClass('li-no-counter-zero');
1105//             })
1106//         }
1107//     })
1108
1109});
1110// ========== КОД ПЕРЕКЛЮЧЕНИЯ ЯЗЫКОВ ==========
1111
1112// Состояние перевода
1113const TranslationManager = {
1114    currentLang: 'ru',
1115    isTranslating: false,
1116    
1117    // Коды языков для Google Translate
1118    langCodes: {
1119        'ru': 'ru',
1120        'en': 'en',
1121        'zh-CN': 'zh-TW'  // Google использует zh-TW вместо zh-CN
1122    },
1123    
1124    // Обратное сопоставление (код Google -> наш код)
1125    googleToOurLang: {
1126        'ru': 'ru',
1127        'en': 'en',
1128        'zh-TW': 'zh-CN',
1129        'zh': 'zh-CN',
1130        'zh-CN': 'zh-CN'
1131    },
1132    
1133    init: function() {
1134        console.log('Инициализация менеджера перевода');
1135        this.loadState();
1136        this.updateUI();
1137        
1138        // Загружаем Google Translate
1139        this.loadGoogleTranslate();
1140        
1141        // Применяем сохраненный перевод если нужно
1142        if (this.currentLang !== 'ru') {
1143            setTimeout(() => {
1144                this.applyTranslation(this.currentLang);
1145            }, 2000);
1146        }
1147    },
1148    
1149    loadState: function() {
1150        // Проверяем куки Google Translate
1151        const cookies = document.cookie.split(';');
1152        let googleLang = 'ru';
1153        
1154        for(let cookie of cookies) {
1155            cookie = cookie.trim();
1156            if(cookie.startsWith('googtrans=')) {
1157                const value = cookie.substring(10);
1158                if(value && value !== '/ru/ru') {
1159                    const parts = value.split('/');
1160                    if(parts.length >= 3) {
1161                        googleLang = parts[2];
1162                        break;
1163                    }
1164                }
1165            }
1166        }
1167        
1168        // Преобразуем код Google в наш код
1169        this.currentLang = this.googleToOurLang[googleLang] || 'ru';
1170        this.isTranslating = this.currentLang !== 'ru';
1171        
1172        // Проверяем нашу кастомную куку
1173        for(let cookie of cookies) {
1174            cookie = cookie.trim();
1175            if(cookie.startsWith('site_lang=')) {
1176                const lang = cookie.substring(10);
1177                if(lang === 'en' || lang === 'zh-CN' || lang === 'ru') {
1178                    this.currentLang = lang;
1179                    this.isTranslating = lang !== 'ru';
1180                    break;
1181                }
1182            }
1183        }
1184        
1185        // Обновляем атрибут lang у html
1186        document.documentElement.lang = this.currentLang;
1187        
1188        console.log('Загружено состояние: наш код', this.currentLang, 'Google код', googleLang, 'перевод:', this.isTranslating);
1189    },
1190    
1191    saveState: function(lang) {
1192        this.currentLang = lang;
1193        this.isTranslating = lang !== 'ru';
1194        
1195        // Преобразуем наш код в код Google
1196        const googleLang = this.langCodes[lang] || lang;
1197        
1198        // Сохраняем в куки
1199        if (lang === 'ru') {
1200            // Очищаем перевод
1201            document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
1202        } else {
1203            // Устанавливаем перевод
1204            document.cookie = `googtrans=/ru/${googleLang}; path=/; max-age=31536000`;
1205        }
1206        
1207        // Всегда сохраняем язык сайта
1208        document.cookie = `site_lang=${lang}; path=/; max-age=31536000`;
1209        
1210        // Обновляем атрибут lang у html
1211        document.documentElement.lang = lang;
1212        
1213        console.log('Сохранено состояние: наш код', lang, 'Google код', googleLang);
1214    },
1215    
1216    updateUI: function() {
1217        console.log('Обновление UI, язык:', this.currentLang);
1218        
1219        // Снимаем активность со всех кнопок
1220        $('.js-lang-change, .js-chinese-translate').removeClass('active');
1221        
1222        // Активируем нужную кнопку
1223        if (this.currentLang === 'en') {
1224            $('.js-lang-change').addClass('active');
1225        } else if (this.currentLang === 'zh-CN') {
1226            $('.js-chinese-translate').addClass('active');
1227        }
1228        // Для русского обе кнопки не активны
1229    },
1230    
1231    loadGoogleTranslate: function() {
1232        // Проверяем, не загружен ли уже Google Translate
1233        if (typeof google !== 'undefined' && google.translate) {
1234            return;
1235        }
1236        
1237        // Создаем контейнер для виджета
1238        if (!document.getElementById('google_translate_element')) {
1239            const widgetDiv = document.createElement('div');
1240            widgetDiv.id = 'google_translate_element';
1241            widgetDiv.style.cssText = 'position:absolute; left:-9999px; top:-9999px; width:0; height:0; overflow:hidden;';
1242            document.body.appendChild(widgetDiv);
1243        }
1244        
1245        // Удаляем старые скрипты
1246        document.querySelectorAll('script[src*="translate.google.com"]').forEach(script => {
1247            script.parentNode.removeChild(script);
1248        });
1249        
1250        // Создаем новую функцию инициализации
1251        window.googleTranslateElementInit = () => {
1252            console.log('Google Translate инициализирован');
1253            
1254            try {
1255                // Включаем нужные языки
1256                new google.translate.TranslateElement({
1257                    pageLanguage: 'ru',
1258                    includedLanguages: 'en,zh-TW',
1259                    layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL,
1260                    autoDisplay: false
1261                }, 'google_translate_element');
1262                
1263                // Скрываем баннер
1264                setTimeout(() => {
1265                    const banner = document.querySelector('.goog-te-banner-frame');
1266                    if (banner) {
1267                        banner.style.display = 'none';
1268                    }
1269                }, 1000);
1270            } catch (error) {
1271                console.error('Ошибка инициализации Google Translate:', error);
1272            }
1273        };
1274        
1275        // Загружаем скрипт
1276        const script = document.createElement('script');
1277        script.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
1278        document.head.appendChild(script);
1279    },
1280    
1281    toggleTranslation: function(lang) {
1282        console.log('Переключение на язык:', lang, 'текущий язык:', this.currentLang);
1283        
1284        // Проверяем текущий реальный язык через Google куки
1285        const realCurrentLang = this.getRealCurrentLang();
1286        console.log('Реальный текущий язык:', realCurrentLang);
1287        
1288        if ((this.currentLang === lang && realCurrentLang === lang) || 
1289            (lang === 'zh-CN' && realCurrentLang === 'zh-CN')) {
1290            // Если нажимаем на уже активный язык - возвращаем к русскому
1291            console.log('Возврат к русскому из', lang);
1292            this.returnToRussian();
1293        } else {
1294            // Включаем другой язык
1295            console.log('Включение языка:', lang);
1296            this.enableTranslation(lang);
1297        }
1298    },
1299    
1300    getRealCurrentLang: function() {
1301        // Проверяем куки Google Translate
1302        const cookies = document.cookie.split(';');
1303        
1304        for(let cookie of cookies) {
1305            cookie = cookie.trim();
1306            if(cookie.startsWith('googtrans=')) {
1307                const value = cookie.substring(10);
1308                if(value && value !== '/ru/ru') {
1309                    const parts = value.split('/');
1310                    if(parts.length >= 3) {
1311                        const googleLang = parts[2];
1312                        return this.googleToOurLang[googleLang] || 'ru';
1313                    }
1314                }
1315            }
1316        }
1317        
1318        return 'ru';
1319    },
1320    
1321    enableTranslation: function(lang) {
1322        this.saveState(lang);
1323        this.updateUI();
1324        this.applyTranslation(lang);
1325    },
1326    
1327    returnToRussian: function() {
1328        console.log('Возврат к русскому языку');
1329        
1330        // Сохраняем состояние
1331        this.saveState('ru');
1332        this.updateUI();
1333        
1334        // Отключаем перевод через Google
1335        this.disableGoogleTranslation();
1336        
1337        // Принудительно перезагружаем страницу для полного сброса
1338        setTimeout(() => {
1339            console.log('Принудительная перезагрузка для сброса перевода');
1340            window.location.href = window.location.pathname + window.location.search;
1341        }, 300);
1342    },
1343    
1344    applyTranslation: function(lang) {
1345        console.log('Применение перевода на', lang);
1346        
1347        const apply = () => {
1348            const select = document.querySelector("#google_translate_element select");
1349            if (!select) {
1350                c
1350onsole.log('Селект не найден, пересоздаем виджет');
1351                this.recreateWidget(lang);
1352                return;
1353            }
1354            
1355            // Получаем код Google для нашего языка
1356            const googleLang = this.langCodes[lang] || lang;
1357            console.log('Поиск кода Google:', googleLang, 'в селекте');
1358            
1359            // Ищем нужный язык в селекте
1360            for (let i = 0; i < select.options.length; i++) {
1361                const optionValue = select.options[i].value;
1362                
1363                if (optionValue === googleLang) {
1364                    select.selectedIndex = i;
1365                    select.dispatchEvent(new Event('change'));
1366                    console.log('Перевод применен:', optionValue, 'для нашего языка', lang);
1367                    
1368                    // Показываем баннер Google
1369                    setTimeout(() => {
1370                        const banner = document.querySelector('.goog-te-banner-frame');
1371                        if (banner) {
1372                            banner.style.display = 'block';
1373                            banner.style.zIndex = '999999';
1374                        }
1375                    }, 500);
1376                    
1377                    return;
1378                }
1379            }
1380            
1381            // Язык не найден
1382            console.log('Код Google', googleLang, 'не найден в селекте');
1383            console.log('Доступные языки в селекте:');
1384            for (let i = 0; i < select.options.length; i++) {
1385                console.log(`  ${select.options[i].value} - ${select.options[i].text}`);
1386            }
1387        };
1388        
1389        // Ждем загрузки Google Translate
1390        if (typeof google !== 'undefined' && google.translate) {
1391            apply();
1392        } else {
1393            console.log('Google Translate не загружен, ждем...');
1394            const check = setInterval(() => {
1395                if (typeof google !== 'undefined' && google.translate) {
1396                    clearInterval(check);
1397                    apply();
1398                }
1399            }, 100);
1400            
1401            // Таймаут
1402            setTimeout(() => {
1403                clearInterval(check);
1404                console.log('Таймаут загрузки Google Translate');
1405                this.loadGoogleTranslate();
1406                setTimeout(() => this.applyTranslation(lang), 1000);
1407            }, 3000);
1408        }
1409    },
1410    
1411    disableGoogleTranslation: function() {
1412        console.log('Отключение Google Translate');
1413        
1414        const disable = () => {
1415            try {
1416                const select = document.querySelector("#google_translate_element select");
1417                if (select) {
1418                    // Ищем русский язык
1419                    for (let i = 0; i < select.options.length; i++) {
1420                        if (select.options[i].value === 'ru') {
1421                            select.selectedIndex = i;
1422                            select.dispatchEvent(new Event('change'));
1423                            console.log('Google Translate отключен (переключен на русский)');
1424                            
1425                            // Скрываем баннер
1426                            setTimeout(() => {
1427                                const banner = document.querySelector('.goog-te-banner-frame');
1428                                if (banner) {
1429                                    banner.style.display = 'none';
1430                                }
1431                            }, 300);
1432                            
1433                            break;
1434                        }
1435                    }
1436                }
1437            } catch (error) {
1438                console.error('Ошибка при отключении Google Translate:', error);
1439            }
1440        };
1441        
1442        if (typeof google !== 'undefined' && google.translate) {
1443            disable();
1444        }
1445    },
1446    
1447    recreateWidget: function(lang) {
1448        console.log('Пересоздание виджета для языка:', lang);
1449        
1450        // Удаляем старый виджет
1451        const widget = document.getElementById('google_translate_element');
1452        if (widget) {
1453            widget.innerHTML = '';
1454        }
1455        
1456        // Удаляем все скрипты Google Translate
1457        document.querySelectorAll('script[src*="translate.google.com"]').forEach(script => {
1458            script.parentNode.removeChild(script);
1459        });
1460        
1461        // Получаем код Google для нашего языка
1462        const googleLang = this.langCodes[lang] || lang;
1463        
1464        // Создаем новую функцию инициализации
1465        window.googleTranslateElementInit = () => {
1466            console.log('Инициализация нового виджета для', lang, '(Google код:', googleLang, ')');
1467            
1468            try {
1469                new google.translate.TranslateElement({
1470                    pageLanguage: 'ru',
1471                    includedLanguages: 'en,' + googleLang,
1472                    layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL,
1473                    autoDisplay: false
1474                }, 'google_translate_element');
1475                
1476                // Ждем и применяем перевод
1477                setTimeout(() => {
1478                    const select = document.querySelector("#google_translate_element select");
1479                    if (select) {
1480                        for (let i = 0; i < select.options.length; i++) {
1481                            if (select.options[i].value === googleLang) {
1482                                select.selectedIndex = i;
1483                                select.dispatchEvent(new Event('change'));
1484                                console.log('Перевод применен через новый виджет:', googleLang);
1485                                return;
1486                            }
1487                        }
1488                    }
1489                }, 800);
1490            } catch (error) {
1491                console.error('Ошибка инициализации нового виджета:', error);
1492            }
1493        };
1494        
1495        // Загружаем скрипт
1496        this.loadGoogleTranslate();
1497    }
1498};
1499
1500// Инициализация при загрузке
1501$(document).ready(function() {
1502    console.log('Документ готов, запуск менеджера перевода');
1503    TranslationManager.init();
1504});
1505
1506// Обработчики кликов
1507$(document).on('click', '.js-lang-change', function(e) {
1508    e.preventDefault();
1509    e.stopPropagation();
1510    console.log('Клик по английской кнопке');
1511    TranslationManager.toggleTranslation('en');
1512});
1513
1514$(document).on('click', '.js-chinese-translate', function(e) {
1515    e.preventDefault();
1516    e.stopPropagation();
1517    console.log('Клик по китайской кнопке');
1518    TranslationManager.toggleTranslation('zh-CN');
1519});
1520
1521// Мониторинг изменений
1522$(document).ready(function() {
1523    // Отслеживаем изменения в куках
1524    let lastCookie = document.cookie;
1525    
1526    setInterval(() => {
1527        if (document.cookie !== lastCookie) {
1528            lastCookie = document.cookie;
1529            
1530            // Проверяем куку googtrans
1531            const cookies = document.cookie.split(';');
1532            let googleLang = 'ru';
1533            
1534            for(let cookie of cookies) {
1535                cookie = cookie.trim();
1536                if(cookie.startsWith('googtrans=')) {
1537                    const value = cookie.substring(10);
1538                    if(value && value !== '/ru/ru') {
1539                        const parts = value.split('/');
1540                        if(parts.length >= 3) {
1541                            googleLang = parts[2];
1542                            break;
1543                        }
1544                    }
1545                }
1546            }
1547            
1548            // Преобразуем код Google в наш код
1549            const ourLang = TranslationManager.googleToOurLang[googleLang] || 'ru';
1550            
1551            // Если язык изменился
1552            if (ourLang !== TranslationManager.currentLang) {
1553                console.log('Обнаружено изменение языка: Google код', googleLang, 'наш код', ourLang);
1554                
1555                TranslationManager.currentLang = ourLang;
1556                TranslationManager.updateUI();
1557            }
1558        }
1559    }, 1000);
1560    
1561    // Отслеживаем изменения атрибута lang у html
1562    const observer = new MutationObserver(function(mutations) {
1563        mutations.forEach(function(mutation) {
1564            if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {
1565                const newLang = document.documentElement.lang;
1566                console.log('Изменен атрибут lang:', newLang);
1567                
1568                // Синхронизируем состояние если нужно
1569                if (newLang !== TranslationManager.currentLang) {
1570                    TranslationManager.currentLang = newLang;
1571                    TranslationManager.updateUI();
1572                }
1573            }
1574        });
1575    });
1576    
1577    observer.observe(document.documentElement, {
1578        attributes: true,
1579        attributeFilter: ['lang']
1580    });
1581});
1582
1583// ========== КОНЕЦ КОДА ПЕРЕКЛЮЧЕНИЯ ЯЗЫКОВ ==========
1584function formatDate(date) {
1585    var d = new Date(date),
1586        month = '' + (d.getMonth() + 1),
1587        day = '' + d.getDate(),
1588        year = d.getFullYear();
1589
1590    if (month.length < 2)
1591        month = '0' + month;
1592    if (day.length < 2)
1593        day = '0' + day;
1594
1595    return [year, month, day].join('/');
1596}

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.