PageSourceSearch

https://prpartner.ru/local/templates/prpartner/assets/js/app.js?v=1.7.6.0

js prpartner.ru collected 2026-09-26 08:48:30 UTC 37,651 bytes, 1,229 lines download raw bytes

1$(document).ready(function(){
2    var win = $(window);
3    var ww = win.width();
4    var wh = win.height();
5    var tablet = 992;
6    var mobile = 767;
7    var isTablet = false;
8    var isMobile = false;
9    var scrollPos = win.scrollTop();
10    var map;
11
12
13    //$('.modal_feedback').modal('show');
14
15    $('.modal').on('hidden.bs.modal', function(){
16        $('body').removeClass('modal-open');
17    });
18
19    $('.modal').on('shown.bs.modal', function(){
20        $('body').addClass('modal-open');
21    });
22
23    // Viewport values
24    function win_resize() {
25        ww = win.width();
26        wh = win.height();
27
28        if(tablet > ww) {
29            isTablet = true;
30        } else {
31            isTablet = false;
32        }
33
34        if(mobile > ww) {
35            isMobile = true;
36        } else {
37            isMobile = false;
38        }
39    }
40
41    function win_scroll() {
42        scrollPos = win.scrollTop();
43    }
44
45    win_scroll();
46    win_resize();
47
48    win.on('resize', win_resize);
49    win.on('scroll', win_scroll);
50
51    $.fn.isInViewport = function() {
52		if($(this).length >0){
53        var elementTop = $(this).offset().top;
54        var elementBottom = elementTop + $(this).outerHeight();
55
56        var viewportTop = scrollPos;
57        var viewportBottom = viewportTop + wh;
58
59        return elementBottom > viewportTop && elementTop < viewportBottom;
60		}
61};
62
63
64    // Main feedback
65     //  var mainFeedback = $('.main__feedback');
66    //   var mainFeedbackBox = mainFeedback.find('.contact_line');
67
68     //  if(mainFeedback.length) {
69      //     var nextBox = $('.js-contact_line--next');
70      //     var nextBoxPos = 0;
71
72        //   win.on('scroll', function(){
73          //     if(!isTablet) {
74               //    if(nextBox.length) {
75               //        nextBoxPos = Math.round(nextBox.offset().top);
76              //     }
77
78              //    if(scrollPos > 80) {
79                 //      mainFeedbackBox.addClass('is-collapsed');
80                //   } else {
81               //        mainFeedbackBox.removeClass('is-collapsed');
82               //    }
83
84              //     if(scrollPos + (wh - 160) > nextBoxPos) {
85                //       mainFeedbackBox.addClass('is-hidden');
86                //       nextBox.removeClass('is-collapsed');
87                //   } else {
88               //        mainFeedbackBox.removeClass('is-hidden');
89            //           nextBox.addClass('is-collapsed');
90            //       }
91           //    }
92      //  });
93    //}
94
95
96    // Main
97    var main_page = $('.main');
98
99    if(main_page.length) {
100        var header = $('.top');
101        var btnMainHead = $('.js-main-head');
102        var btnMainPrinciples = $('.js-main-principles');
103        var btnMainComplex = $('.js-main-complex');
104        var MainHead = $('.main__head');
105        var MainPrinciples = $('.main__principles');
106        var MainComplex = $('.main__complex');
107        var mainBackdrop = $('.main__backdrop');
108        var mainBackdropBtn = $('.main__backdrop-close');
109        var mainFb = $('.main__feedback');
110        var mainPdf = $('.main__download');
111        var mainRate = $('.main__rating');
112
113        function mainBackdropShow(showCloseBtn) {
114            header.stop(true).animate({'opacity': '0.05'}, 300);
115            mainRate.stop(true).animate({'opacity': '0.05'}, 300);
116            mainPdf.stop(true).animate({'opacity': '0.05'}, 300);
117            mainFb.stop(true).animate({'opacity': '0.05'}, 300);
118            mainBackdrop.stop(true).fadeIn(300);
119
120            if(showCloseBtn) {
121                mainBackdropBtn.fadeIn(250);
122            } else {
123                mainBackdropBtn.fadeOut(250);
124            }
125        }
126
127        function mainBackdropHide() {
128            header.animate({'opacity': '1'}, 300);
129            mainRate.stop(true).animate({'opacity': '1'}, 300);
130            mainPdf.stop(true).animate({'opacity': '1'}, 300);
131            mainFb.animate({'opacity': '1'}, 300);
132
133            $('.main__backdrop').fadeOut(300);
134        }
135
136        function mainCloseAll() {
137            mainBackdropHide();
138
139            prinsiplesPause();
140
141            if(isMobile && $('.main__principles-wrap-mobile-2').hasClass('flickity-enabled')) {
142                prinsiples2Pause();
143                prinsiples3Pause();
144            }
145
146            $('body').removeClass('is-hold');
147
148            MainHead.removeClass('is-active').animate({'opacity': '0'}, 300);
149            MainPrinciples.removeClass('is-active').animate({'opacity': '0'}, 300);
150            MainComplex.removeClass('is-active').animate({'opacity': '0'}, 300);
151        }
152
153        // Close btn
154        mainBackdropBtn.on('click', function(){
155            mainCloseAll();
156        });
157
158        // Head
159        btnMainHead.on('click', function(){
160            if(isTablet) {
161                mainCloseAll();
162                $('body').addClass('is-hold');
163                mainBackdropShow(true);
164                MainHead.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
165            }
166        });
167
168        btnMainHead.on('mouseover', function(){
169            if(!isTablet) {
170                mainBackdropShow();
171                MainHead.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
172            }
173        });
174
175        btnMainHead.on('mouseleave', function(){
176            if(!isTablet) {
177                mainBackdropHide();
178                MainHead.removeClass('is-active').animate({'opacity': '0'}, 300);
179            }
180        });
181
182        // Principles
183        btnMainPrinciples.on('click', function(){
184            if(isTablet) {
185                mainCloseAll();
186                $('body').addClass('is-hold');
187                mainBackdropShow(true);
188                prinsiplesPlay();
189
190                if(isMobile && $('.main__principles-wrap-mobile-2').hasClass('flickity-enabled')) {
191                    prinsiples2Play();
192                    prinsiples3Play();
193                }
194
195                MainPrinciples.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
196            }
197        });
198
199        btnMainPrinciples.on('mouseover', function(){
200            if(!isTablet) {
201                mainBackdropShow();
202
203                MainPrinciples.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
204                prinsiplesPlay();
205            }
206        });
207
208        btnMainPrinciples.on('mouseleave', function(){
209            if(!isTablet) {
210                mainBackdropHide();
211
212                MainPrinciples.removeClass('is-active').animate({'opacity': '0'}, 300);
213                prinsiplesPause();
214            }
215        });
216
217        // Complex
218        btnMainComplex.on('click', function(){
219            if(isTablet) {
220                mainCloseAll();
221                $('body').addClass('is-hold');
222                mainBackdropShow(true);
223                MainComplex.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
224            }
225        });
226
227        btnMainComplex.on('mouseover', function(){
228            if(!isTablet) {
229                mainBackdropShow();
230
231                MainComplex.stop(true).addClass('is-active').animate({'opacity': '1'}, 300);
232            }
233        });
234
235        btnMainComplex.on('mouseleave', function(){
236            if(!isTablet) {
237                mainBackdropHide();
238                MainComplex.removeClass('is-active').animate({'opacity': '0'}, 300);
239            }
240        });
241
242
243        // Services
244        var servicesItem = $('.services__item');
245        var servicesItemLink = servicesItem.find('a');
246        var servicesMore = $('.services__more');
247        var servicesText;
248        var servicesClass;
249
250        servicesItem.on('mouseover', function(){
251            if(!isTablet) {
252                servicesText = $(this).attr('data-text');
253                servicesClass = $(this).attr('data-pos') + ' show';
254
255                servicesMore.removeClass('p-left p-center p-right p-top p-middle p-bottom');
256
257                servicesItem.not($(this)).addClass('is-hidden');
258                servicesMore.addClass(servicesClass).find('p').html(servicesText);
259            }
260        });
261
262        servicesItem.on('mouseleave', function(){
263            if(!isTablet) {
264                servicesItem.removeClass('is-hidden');
265                servicesMore.removeClass('show');
266            }
267        });
268
269        // servicesItemLink.on('click', function(e){
270        //     if(!isTablet) {
271        //         e.preventDefault();
272        //     }
273        // });
274
275
276        // Prinsiples ticker mobile2
277        var prinsiples2TickerSpeed = 2;
278        var prinsiples2Ticker = null;
279        var isPrinsiples2Paused = true;
280        var prinsiples2TickerBox = document.querySelector('.main__principles-wrap-mobile-2');
281
282        function prinsiples2TickerUpdate() {
283            if (isPrinsiples2Paused) return;
284
285            if (prinsiples2Ticker.slides) {
286                prinsiples2Ticker.x = (prinsiples2Ticker.x - prinsi
286ples2TickerSpeed) % prinsiples2Ticker.slideableWidth;
287                prinsiples2Ticker.selectedIndex = prinsiples2Ticker.dragEndRestingSelect();
288                prinsiples2Ticker.updateSelectedSlide();
289                prinsiples2Ticker.settle(prinsiples2Ticker.x);
290            }
291            window.requestAnimationFrame(prinsiples2TickerUpdate);
292        }
293
294        function prinsiples2Pause() {
295            isPrinsiples2Paused = true;
296        }
297
298        function prinsiples2Play() {
299            if(isPrinsiples2Paused) {
300                isPrinsiples2Paused = false;
301                window.requestAnimationFrame(prinsiples2TickerUpdate);
302            }
303        }
304
305        prinsiples2Ticker = new Flickity(prinsiples2TickerBox, {
306            autoPlay: false,
307            prevNextButtons: false,
308            pageDots: false,
309            draggable: true,
310            wrapAround: true,
311            selectedAttraction: 0.015,
312            friction: 0.25,
313            draggable: false,
314            freeScroll: true,
315            rightToLeft: true,
316            imagesLoaded: true,
317        });
318        prinsiples2Ticker.x = 0;
319
320        prinsiples2TickerUpdate();
321
322
323        // Prinsiples ticker mobile3
324        var prinsiples3TickerSpeed = 2;
325        var prinsiples3Ticker = null;
326        var isPrinsiples3Paused = true;
327        var prinsiples3TickerBox = document.querySelector('.main__principles-wrap-mobile-3');
328
329        function prinsiples3TickerUpdate() {
330            if (isPrinsiples3Paused) return;
331
332            if (prinsiples3Ticker.slides) {
333                prinsiples3Ticker.x = (prinsiples2Ticker.x - prinsi
333ples3TickerSpeed) % prinsiples3Ticker.slideableWidth;
334                prinsiples3Ticker.selectedIndex = prinsiples3Ticker.dragEndRestingSelect();
335                prinsiples3Ticker.updateSelectedSlide();
336                prinsiples3Ticker.settle(prinsiples3Ticker.x);
337            }
338            window.requestAnimationFrame(prinsiples3TickerUpdate);
339        }
340
341        function prinsiples3Pause() {
342            isPrinsiples3Paused = true;
343        }
344
345        function prinsiples3Play() {
346            if(isPrinsiples3Paused) {
347                isPrinsiples3Paused = false;
348                window.requestAnimationFrame(prinsiples3TickerUpdate);
349            }
350        }
351
352        prinsiples3Ticker = new Flickity(prinsiples3TickerBox, {
353            autoPlay: false,
354            prevNextButtons: false,
355            pageDots: false,
356            draggable: true,
357            wrapAround: true,
358            selectedAttraction: 0.015,
359            friction: 0.25,
360            draggable: false,
361            freeScroll: true,
362            initialIndex: 3,
363            imagesLoaded: true,
364        });
365        prinsiples3Ticker.x = 0;
366
367        prinsiples3TickerUpdate();
368
369
370
371        // Prinsiples ticker
372        var prinsiplesTickerSpeed = 2;
373        var prinsiplesTicker = null;
374        var isPrinsiplesPaused = true;
375        var prinsiplesTickerBox = document.querySelector('.main__principles .main__principles-wrap');
376
377        function prinsiplesTickerUpdate() {
378            if (isPrinsiplesPaused) return;
379
380            if (prinsiplesTicker.slides) {
381                prinsiplesTicker.x = (prinsiplesTicker.x - prinsi
381plesTickerSpeed) % prinsiplesTicker.slideableWidth;
382                prinsiplesTicker.selectedIndex = prinsiplesTicker.dragEndRestingSelect();
383                prinsiplesTicker.updateSelectedSlide();
384                prinsiplesTicker.settle(prinsiplesTicker.x);
385            }
386            window.requestAnimationFrame(prinsiplesTickerUpdate);
387        }
388
389        function prinsiplesPause() {
390            isPrinsiplesPaused = true;
391        }
392
393        function prinsiplesPlay() {
394            if(isPrinsiplesPaused) {
395                isPrinsiplesPaused = false;
396                window.requestAnimationFrame(prinsiplesTickerUpdate);
397            }
398        }
399
400        prinsiplesTicker = new Flickity(prinsiplesTickerBox, {
401            autoPlay: false,
402            prevNextButtons: false,
403            pageDots: false,
404            draggable: true,
405            wrapAround: true,
406            selectedAttraction: 0.015,
407            friction: 0.25,
408            draggable: false,
409            freeScroll: true,
410            imagesLoaded: true,
411        });
412        prinsiplesTicker.x = 0;
413
414        prinsiplesTickerUpdate();
415
416
417        // Logos ticker
418        var tickerSpeed = 1;
419        var logosTickers = [];
420        var logosBoxes = document.querySelectorAll('.clients__row');
421
422        Array.prototype.forEach.call(logosBoxes, function(box, index) {
423            var state = { paused: true, flkty: null };
424
425            state.flkty = new Flickity(box, {
426                autoPlay: false,
427                prevNextButtons: false,
428                pageDots: false,
429                wrapAround: true,
430                selectedAttraction: 0.015,
431                friction: 0.25,
432                rightToLeft: box.classList.contains('clients__row--right'),
433                draggable: false,
434                imagesLoaded: true,
435            });
436
437            function tick() {
438                if (state.paused) return;
439                if (state.flkty.slides) {
440                    state.flkty.x = (state.flkty.x - tickerSpeed) % state.flkty.slideableWidth;
441                    state.flkty.selectedIndex = state.flkty.dragEndRestingSelect();
442                    state.flkty.updateSelectedSlide();
443                    state.flkty.settle(state.flkty.x);
444                }
445                window.requestAnimationFrame(tick);
446            }
447
448            state.play = function() {
449                if (state.paused) {
450                    state.paused = false;
451                    window.requestAnimationFrame(tick);
452                }
453            };
454            state.pause = function() { state.paused = true; };
455
456            tick();
457            logosTickers.push(state);
458        });
459
460        function logosPlayAll() { logosTickers.forEach(function(t) { t.play(); }); }
461        function logosPauseAll() { logosTickers.forEach(function(t) { t.pause(); }); }
462
463        if(isTablet || isMobile) {
464            logosPlayAll();
465        } else {
466            $(window).on('resize scroll', function() {
467                if ($('.clients__list').isInViewport()) {
468                    logosPlayAll();
469                } else {
470                    logosPauseAll();
471                }
472            });
473        }
474    }
475
476
477    // Cases
478    var cases_item = $('.cases_main__item');
479    var cases_entry = $('.cases__entry');
480    var cases_main = $('.cases_main');
481
482    if(cases_main.length) {
483        var cases_collapse = function() {
484            var case_height = cases_item.height();
485            var case_margin = parseInt(cases_item.css('margin-bottom'));
486            var case_offset = case_height + case_margin;
487
488            $('.cases_main__item:first').css({marginTop: -case_offset});
489            $('.cases_main .section__head').css({marginBottom: case_offset});
490        }
491
492        cases_collapse();
493
494        $(window).on('resize', function(){
495            cases_collapse();
496        });
497    }
498
499    if(cases_item.length) {
500        var cases_item_thumb = cases_item.find('.cases_main__item-thumb');
501
502        cases_item_thumb.on('mouseover', function(){
503            $(this).closest('.cases_main__item').addClass('is-hover');
504        });
505
506        cases_item_thumb.on('mouseleave', function(){
507            $(this).closest('.cases_main__item').removeClass('is-hover');
508        });
509    }
510
511    if(cases_entry.length) {
512        var cases_entry_thumb = cases_entry.find('.cases__entry-thumb');
513
514        cases_entry_thumb.on('mouseover', function(){
515            $(this).closest('.cases__entry').addClass('is-hover');
516        });
517
518        cases_entry_thumb.on('mouseleave', function(){
519            $(this).closest('.cases__entry').removeClass('is-hover');
520        });
521    }
522
523
524
525    // Top lang
526    var top_lang = $('.top__lang-selected');
527
528    $('body').on('click', function(){
529        top_lang.parent().removeClass('top__lang--active');
530    });
531
532    top_lang.on('click', function(){
533        $(this).parent().toggleClass('top__lang--active');
534
535        return false;
536    });
537
538
539    // Burger menu
540    var burger = $('.top__burger');
541
542    burger.on('click', function(){
543        $('body').toggleClass('is-hold');
544        $('.menu').fadeToggle(300);
545        burger.toggleClass('top__burger--active');
546    });
547
548
549    // About us
550
551    var history_list = $('.aboutus__history-list');
552
553    if(history_list.length) {
554        setTimeout(function(){
555            history_list.flickity({
556                percentPosition: true,
557                contain: true,
558                freeScroll: true,
559                pageDots: false,
560                cellAlign: 'left',
561                imagesLoaded: true,
562            });
563        }, 500);
564    }
565
566
567    // Cases page gallery
568    var cases_gallery = $('.case__gallery-list');
569
570    if(cases_gallery.length) {
571        var cases_gallery_list = cases_gallery.flickity({
572            cellAlign: 'left',
573            freeScroll: true,
574            contain: true,
575            wrapAround: true,
576            pageDots: false,
577            prevNextButtons: false,
578            imagesLoaded: true,
579        });
580
581        var flkty_gallery = cases_gallery_list.data('flickity');
582
583        function updateStatus() {
584            var cellNumber = flkty_gallery.selectedIndex + 1;
585
586            $('.case__gallery__nav-indexof-index').text(cellNumber);
587            $('.case__gallery__nav-indexof-of').text(flkty_gallery.cells.length);
588        }
589        updateStatus();
590
591        cases_gallery_list.on('select.flickity', updateStatus);
592
593        $('.case__gallery-nav-prev').on('click', function() {
594            cases_gallery_list.flickity('previous');
595        });
596
597        $('.case__gallery-nav-next').on('click', function() {
598            cases_gallery_list.flickity('next');
599        });
600    }
601
602
603    // Cases page stats
604    var cases_stats = $('.case__stats-list');
605
606    if(cases_stats.length) {
607        var cases_stats_list = cases_stats.flickity({
608            cellAlign: 'left',
609            freeScroll: true,
610            contain: false,
611            wrapAround: true,
612            pageDots: false,
613            prevNextButtons: false,
614            imagesLoaded: true,
615        });
616
617        var flkty_stats = cases_stats_list.data('flickity');
618
619        function updateStatus() {
620            var cellNumber = flkty_stats.selectedIndex + 1;
621
622            $('.case__stats__nav-indexof-index').text(cellNumber);
623            $('.case__stats__nav-indexof-of').text(flkty_stats.cells.length);
624        }
625        updateStatus();
626
627        cases_stats_list.on('select.flickity', updateStatus);
628
629        $('.case__stats-nav-prev').on('click', function() {
630            cases_stats_list.flickity('previous');
631        });
632
633        $('.case__stats-nav-next').on('click', function() {
634            cases_stats_list.flickity('next');
635        });
636    }
637
638
639
640    // Filter
641    function declOfNum(number, titles)  {
642        cases = [2, 0, 1, 1, 1, 2];
643        return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];
644    }
645
646    $('.page_filter__search-toggle').on('click', function(e){
647        // if(isMobile || isTablet) {
648        //     $(this).closest('form').submit();
649        // } else {
650            e.preventDefault();
651
652            $(this).toggleClass('page_filter__search-toggle--active');
653            $(this).parent().find('.page_filter__search-input').fadeToggle(300).focus();
654            $(this).parent().find('.page_filter__search-toggle .icon').fadeToggle(300);
655       // }
656    });
657
658
659    // Filter toggle
660    $('.page_filter__option-value').on('click', function(){
661        $this = $(this);
662        var parent = $this.closest('.page_filter__option');
663        var type = parent.attr('data-filter-select');
664        var box = $('[data-filter-name="'+type+'"]');
665
666        if(box.is(':visible')) {
667            //$('body').removeClass('is-hold');
668            parent.removeClass('page_filter__option--active');
669            box.slideUp(300);
670            $('.page_filter__search, .page_filter__option').removeClass('is-disabled');
671        } else {
672            //$('html, body').animate({scrollTop: 0}, 500, function(){
673                //$('body').addClass('is-hold');
674                parent.addClass('page_filter__option--active');
675                box.slideDown(300);
676                $('.page_filter__search, .page_filter__option').not(parent).addClass('is-disabled');
677            //});
678        }
679    });
680
681
682    // Hide filter btn
683    $('.page_filter_box__ctrl .btn').on('click', function(){
684        $('body').removeClass('is-hold');
685        $('.page_filter_box').slideUp(300);
686        $('.page_filter__option').removeClass('page_filter__option--active');
687        $('.page_filter__search, .page_filter__option').removeClass('is-disabled');
688    });
689
690
691    // Filter select items
692    $('.page_filter__chkb input').on('change', function(){
693        var calc = 0;
694        var $this = $(this);
695        var parent = $this.closest('.page_filter_box');
696        var type = parent.attr('data-filter-name');
697        var list = parent.find('.page_filter_box__list');
698        var list_item = list.find('.page_filter__chkb');
699        var select = $('[data-filter-select="'+type+'"]');
700        var select_text = select.find('.page_filter__option-value-val');
701        var select_all = parent.find('.js-filter-all');
702        var select_all_start = select_all.attr('data-start-text');
703
704        if($this.hasClass('js-filter-all')) {
705            if(this.checked) {
706                list_item.find('input').prop('checked', true);
707                if(select_all_start) {
708                    select_text.text(select_all_start);
709                } else {
710                    select_text.text('Все');
711                }
712            } else {
713                list_item.find('input').prop('checked', false);
714                select_text.text('Выберите');
715            }
716        } else {
717            var i = 0;
718            parent.find('.js-filter-all').prop('checked', false);
719
720            list_item.each(function(){
721                i++;
722                calc = list.find('.page_filter__chkb input:checked').length
723
724                if(calc == 0) {
725                    select_text.text('Выберите')
726                } else {
727                    if(i == calc) {
728                        if(select_all_start) {
729                            select_text.text(select_all_start);
730                        } else {
731                            select_text.text('Все');
732                        }
733                    } else {
734                        select_text.text(calc + ' ' + declOfNum(calc, ['выбрана', 'выбраны', 'выбрано']))
735                    }
736                }
737            });
738        }
739
740        return false;
741
742    });
743
744
745    // Map
746    // var contacts_map = $('.contacts__map');
747
748    // if(contacts_map.length) {
749    //     var mainPosition = {
750    //         lat: 55.745630,
751    //         lng: 37.667340
752    //     };
753
754    //     var iconMain = {
755    //         url: 'assets/images/ico-marker.png',
756    //         scaledSize: new google.maps.Size(45, 64),
757    //     };
758
759    //     var mapOptions = {
760    //         center: mainPosition,
761    //         zoom: 16,
762    //         mapTypeControl: false,
763    //         styles: [ { "featureType": "poi", "elementType": "labels.icon", "stylers": [ { "color": "#000000" }, { "weight": 1.5 } ] }, { "featureType": "poi", "elementType": "labels.text.fill", "stylers": [ { "color": "#000000" }, { "lightness": 50 } ] }, { "featureType": "poi.business", "stylers": [ { "visibility": "off" } ] }, { "featureType": "poi.park", "elementType": "labels.text", "stylers": [ { "visibility": "off" } ] } ],
764    //     };
765
766    //     map = new google.maps.Map(document.getElementById('gmap'), mapOptions);
767
768    //     var marker = new google.maps.Marker({
769	// 		position: mainPosition,
770	// 		map: map,
771    //         icon: iconMain,
772    //         title: 'PR Partner',
773	// 	});
774    // }
775
776    // Contacts
777    $('.js-show-req').on('click', function(){
778        $('.js-show-franch').removeClass('contacts__links-btn--active');
779        $('.contacts__franch').removeClass('contacts__franch--active');
780        $('.contacts__whattowatch').fadeOut(250);
781
782        $(this).toggleClass('contacts__links-btn--active');
783        $('.contacts__requisites').toggleClass('contacts__requisites--active');
784    });
785
786    $('.js-show-franch').on('click', function(){
787        $('.js-show-req').removeClass('contacts__links-btn--active');
788        $('.contacts__requisites').removeClass('contacts__requisites--active');
789        $('.contacts__whattowatch').fadeOut(250);
790
791        $(this).toggleClass('contacts__links-btn--active');
792        $('.contacts__franch').toggleClass('contacts__franch--active');
793    });
794
795    $('.js-whattowatch-show').on('click', function(){
796        $('.contacts__whattowatch').fadeIn(250);
797    });
798
799    $('.js-whattowatch-close').on('click', function(){
800        $('.contacts__whattowatch').fadeOut(250);
801    });
802
803
804    // FAQ
805    var faq = $('.faq');
806
807    if(faq.length) {
808        $('.faq__item').on('click', function(){
809            $(this).toggleClass('faq__item--active');
810            $(this).find('.faq__item-body').slideToggle(250);
811        });
812    }
813
814
815    // Reviews
816    var reviews = $('.reviews');
817
818    if(reviews.length) {
819        $(document).on('click', '.reviews__item-more', function(){
820            var $this = $(this);
821            var parent = $this.closest('.reviews__item');
822            var more = parent.find('.reviews__item-text-more');
823            var dots = parent.find('.dotdotdot');
824
825            parent.toggleClass('reviews__item--active');
826            more.fadeToggle(250);
827            dots.fadeToggle(250);
828        });
829    }
830
831
832    // Scrollto
833    var anchor = $('.js-scrollto');
834
835    if(anchor.length) {
836        anchor.each(function(){
837            $(this).on('click', function(e){
838                e.preventDefault();
839
840                var target = $(this.getAttribute('href'));
841
842                $('html, body').stop().animate({
843                    scrollTop: target.offset().top
844                }, 1000);
845            });
846        });
847    }
848
849
850    // Inp file
851    $('.inp-file input').on('change', function(){
852        var $this = $(this);
853        var file_wrap = $this.closest('.inp-file');
854        var file_list = file_wrap.find('.inp-file-list ul');
855
856        file_list.find('li').remove();
857
858        for (var i = 0; i < $(this).get(0).files.length; ++i) {
859            file_name = $(this).get(0).files[i].name;
860            file_list.append('<li>'+file_name+'</li>');
861        }
862    });
863
864
865    // Inp selectbox
866    var selectbox = $('.inp-selectbox');
867
868    if(selectbox.length) {
869        // Toggle
870        $('.inp-selectbox-current').on('click', function(){
871            $(this).parent().toggleClass('inp-selectbox--active');
872            $(this).parent().find('.inp-selectbox-list').slideToggle(250);
873        });
874    }
875
876    // Inp branches
877    var inp_service = $('.inp-service').find('input');
878    var inp_branches = $('.inp-branches').find('input');
879
880    if(inp_service.length) {
881        inp_service.on('change', function(){
882            if(this.checked && this.value == 'PR') {
883                $('.inp-branches').slideDown(250);
884            } else {
885                $('.inp-branches').slideUp(250);
886
887                inp_branches.each(function(){
888                    $(this).prop('checked', false);
889                });
890            }
891        });
892    }
893
894
895    // Open modal selected
896    var modal_feedback = $('#modal_feedback');
897
898	var RECAPTCHA_SITE_KEY = '6Lc9_pEmAAAAACB05Szxd-p1JBHMNRY41VCv1TNI';
899
900	function formIsEn() {
901		return window.location.href.indexOf('https://prpartner.ru/en/') === 0;
902	}
903
904	function formSuccessUrl(suffix) {
905		var url = window.location.href;
906		if (url.indexOf('https://prpartner.ru/en/') === 0) {
907			return 'https://prpartner.ru/en/success/' + suffix;
908		}
909		if (url.indexOf('https://prpartner.ru/ch/') === 0) {
910			return 'https://prpartner.ru/ch/success/' + suffix;
911		}
912		return 'https://prpartner.ru/success/' + suffix;
913	}
914
915	function formValidate(form) {
916		var valid = true;
917		$('[type="text"]', form).each(function(){
918			if (!$(this).val()) {
919				valid = false;
920				$(this).addClass('error');
921			} else {
922				$(this).removeClass('error');
923			}
924		});
925		return valid;
926	}
927
928	function formMessage(form, text) {
929		var box = $(form).find('.form-message');
930		if (!box.length) {
931			box = $('<div class="form-message"></div>');
932			$(form).append(box);
933		}
934		box.text(text);
935	}
936
937	function formLock(form) {
938		var btn = $(form).find('[type="submit"]');
939		if (typeof btn.data('label') === 'undefined') {
940			btn.data('label', btn.html());
941		}
942		btn.attr('disabled', 'disabled').html(formIsEn() ? 'Sending...' : 'Отправляем...');
943	}
944
945	function formUnlock(form) {
946		var btn = $(form).find('[type="submit"]');
947		btn.removeAttr('disabled').html(btn.data('label'));
948	}
949
950	function formFail(form) {
951		formUnlock(form);
952		formMessage(form, formIsEn()
953			? 'Failed to send. Please try again or email [email protected]'
954			: 'Не удалось отправить заявку. Попробуйте ещё раз или напишите на [email protected]');
955	}
956
957	function formToken(form) {
958		var d = $.Deferred();
959		var field = $(form).find('[name="g-recaptcha-response"]');
960		if (!field.length) {
961			return d.resolve().promise();
962		}
963		if (typeof grecaptcha === 'undefined' || typeof grecaptcha.execute !== 'function') {
964			return d.reject().promise();
965		}
966		grecaptcha.ready(function(){
967			grecaptcha.execute(RECAPTCHA_SITE_KEY, {action: 'submit'}).then(function(token){
968				field.val(token);
969				d.resolve();
970			}, function(){
971				d.reject();
972			});
973		});
974		return d.promise();
975	}
976
977	function formGoals() {
978		try {
979			if (typeof yaCounter31847876 === 'undefined') {
980				return;
981			}
982			yaCounter31847876.reachGoal('callback');
983			var href = document.location.href;
984			if (href.indexOf('/services/pr/') != -1 || href.indexOf('/services/smm/') != -1 || href.indexOf('/services/event/') != -1) {
985				yaCounter31847876.reachGoal('zakaz');
986			}
987		} catch (e) {}
988	}
989
990	function formGoal(name, done) {
991		var called = false;
992		var finish = function(){
993			if (!called) {
994				called = true;
995				done();
996			}
997		};
998		setTimeout(finish, 1000);
999		try {
1000			yaCounter31847876.reachGoal(name, {}, finish);
1001		} catch (e) {
1002			finish();
1003		}
1004	}
1005
1006	function formSend(form, suffix, goals) {
1007		if (!formValidate(form)) {
1008			return;
1009		}
1010		formMessage(form, '');
1011		formLock(form);
1012		formToken(form).done(function(){
1013			$.ajax({
1014				type: 'POST',
1015				url: '/ajax/',
1016				data: new FormData(form),
1017				processData: false,
1018				contentType: false,
1019				dataType: 'text'
1020			}).done(function(raw){
1021				var res = null;
1022				try {
1023					res = JSON.parse(raw);
1024				} catch (e) {
1025					res = null;
1026				}
1027				if (res && res.success === false) {
1028					formFail(form);
1029					return;
1030				}
1031				var go = function(){
1032					window.location.href = formSuccessUrl(suffix);
1033				};
1034				if (goals === true) {
1035					formGoals();
1036				} else if (goals) {
1037					formGoal(goals, go);
1038					return;
1039				}
1040				go();
1041			}).fail(function(){
1042				formFail(form);
1043			});
1044		}).fail(function(){
1045			formFail(form);
1046		});
1047	}
1048
1049	$('#page_feedback_form').submit(function(){
1050		formSend(this, '?feedback', true);
1051		return false;
1052	});
1053
1054	$('#modal_feedback form').submit(function(){
1055		formSend(this, '?feedback', true);
1056		return false;
1057	});
1058
1059	$('.hr_entry__form form').submit(function(){
1060		formSend(this, '', false);
1061		return false;
1062	});
1063
1064	$('#modal_franch form').submit(function(){
1065		formSend(this, '?franch', false);
1066		return false;
1067	});
1068
1069	$('#modal_callback form').submit(function(){
1070		formSend(this, '?callback', false);
1071		return false;
1072	});
1073
1074	var widgetForm = $('#modal_widget form');
1075
1076	function widgetApplyType(type) {
1077		var inp = widgetForm.find('[name="CONTACT"]');
1078		inp.removeClass('error').val('');
1079		inp.off('.inputmasks').removeData('inputmasks');
1080		if ($.fn.inputmask) {
1081			inp.inputmask('remove');
1082		}
1083		if (type === 'phone') {
1084			inp.attr('placeholder', inp.data('ph-phone'));
1085			if (typeof listCountries !== 'undefined' && typeof maskOpts !== 'undefined' && $.fn.inputmasks) {
1086				inp.inputmasks($.extend(true, {}, maskOpts, {list: listCountries}));
1087			}
1088		} else {
1089			inp.attr('placeholder', inp.data(type === 'email' ? 'ph-email' : 'ph-telegram'));
1090		}
1091	}
1092
1093	if (widgetForm.length) {
1094		widgetForm.find('[name="CONTACT_TYPE"]').on('change', function(){
1095			widgetApplyType(this.value);
1096		});
1097		widgetApplyType(widgetForm.find('[name="CONTACT_TYPE"]:checked').val() || 'phone');
1098	}
1099
1100	widgetForm.submit(function(){
1101		var type = $(this).find('[name="CONTACT_TYPE"]:checked').val();
1102		var inp = $(this).find('[name="CONTACT"]');
1103		var value = $.trim(inp.val());
1104		var ok = true;
1105		if (type === 'phone') {
1106			ok = $.fn.inputmask ? inp.inputmask('isComplete') : value.replace(/\D/g, '').length >= 7;
1107		} else if (type === 'email') {
1108			ok = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
1109		} else {
1110			ok = value.length >= 2;
1111		}
1112		if (!ok) {
1113			formValidate(this);
1114			inp.addClass('error');
1115			return false;
1116		}
1117		formSend(this, '?callback', 'callback_widget');
1118		return false;
1119	});
1120	const currentUrl = window.location.href;
1121
1122	if (currentUrl.includes('?feedback')) {
1123	  const linkElement = document.querySelector('.link-sucess-download');
1124	  if (linkElement) {
1125		linkElement.classList.add('d-flex');
1126	  }
1127	}
1128
1129    $('[data-feedback-selected]').on('click', function(e){
1130        e.preventDefault();
1131
1132        var selected = $(this).attr('data-feedback-selected');
1133
1134        modal_feedback.find('input[value="'+selected+'"]').prop('checked', true);
1135        modal_feedback.find('.inp-service .inp-selectbox').addClass('inp-selectbox--active');
1136        modal_feedback.find('.inp-service .inp-selectbox-list').slideDown(250);
1137
1138        if(selected === 'PR') {
1139            modal_feedback.find('.inp-branches').slideDown(250);
1140            modal_feedback.find('.inp-branches .inp-selectbox').addClass('inp-selectbox--active');
1141            modal_feedback.find('.inp-branches .inp-selectbox-list').slideDown(250);
1142        }
1143
1144        modal_feedback.modal('show');
1145    });
1146
1147    modal_feedback.on('hide.bs.modal', function(){
1148        modal_feedback.find('.inp-branches').slideUp(250);
1149        modal_feedback.find('.inp-branches .inp-selectbox, .inp-service .inp-selectbox').removeClass('inp-selectbox--active');
1150        modal_feedback.find('.inp-branches .inp-selectbox-list, .inp-service .inp-selectbox-list').slideUp(250);
1151    });
1152
1153// setTimeout(function() {
1154//    $('#modal_msd').modal('show');
1155// }, 5000);
1156// $(function () {
1157//   if (localStorage.getItem('modal_msd_shown')) return;
1158// 
1159//   setTimeout(function () {
1160//     $('#modal_msd').modal({
1161//       backdrop: false,
1162 //      keyboard: true,
1163//       show: true
1164//     });
1165//     localStorage.setItem('modal_msd_shown', '1');
1166//   }, 20000);
1167
1168//   $('#modal_msd').on('shown.bs.modal', function () {
1169//     $('body').removeClass('modal-open').css({
1170//       'overflow': '',
1171//       'padding-right': ''
1172//     });
1173//   });
1174
1175//   $('#modal_msd').on('hidden.bs.modal', function () {
1176//     $('body').removeClass('modal-open');
1177//   });
1178// }); 
1179 $('.animMainText').marquee({
1180    duration: 20000,
1181    startVisible: true,
1182    duplicated: true
1183  });
1184
1185
1186});
1187
1188
1189// Функция для обновления значений
1190
1191document.addEventListener('DOMContentLoaded', function () {
1192
1193	const breadcrumbs = document.querySelector('.breadcrumbs');
1194	const defaultBreadcrumbsTop = parseInt(window.getComputedStyle(breadcrumbs).top) + 147;
1195	const defaultBreadcrumbsTop2 = parseInt(window.getComputedStyle(breadcrumbs).top) + 39;
1196	updateStyles();
1197	function updateStyles() {
1198		const panelBack = document.querySelector('#bx-panel-back');
1199		const topElement = document.querySelector('.top');
1200		const mainElement = document.querySelector('.page-main .main');
1201
1202		if (panelBack && topElement) {
1203			const height = panelBack.offsetHeight;
1204			topElement.style.top = `${height}px`;
1205
1206			// Логика для .page-main .main
1207			if (mainElement) {
1208				mainElement.style.marginTop = `${height}px`;
1209			}
1210			if (height <= 147 && breadcrumbs) {
1211				breadcrumbs.style.top = `${defaultBreadcrumbsTop}px`;
1212			}
1213			if (height <= 39 && breadcrumbs) {
1214				breadcrumbs.style.top = `${defaultBreadcrumbsTop2}px`;
1215			}
1216		}
1217	}
1218
1219	const observer = new MutationObserver(updateStyles);
1220	const panelBack = document.querySelector('#bx-panel-back');
1221	if (panelBack) {
1222		observer.observe(panelBack, {
1223			attributes: true,  // Отслеживаем изменения атрибутов (включая высоту)
1224			childList: true,   // Отслеживаем добавление/удаление дочерних элементов
1225			subtree: true      // Отслеживаем изменения в поддереве
1226		});
1227	}
1228console.log('test');
1229});

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.