PageSourceSearch

https://x-car.ru/js/main.js?01092502102026

js x-car.ru collected 2026-10-02 01:09:37 UTC 16,894 bytes, 503 lines download raw bytes

1var contactRecaptcha, callRecaptcha, contactsRecaptcha;
2
3$(document).ready(function(){
4	calcHeight();
5
6    $(window).resize(function() {
7        calcHeight();
8    });
9
10	var url = new URL(window.location.href);
11	url.searchParams.delete('l_id');
12	window.history.pushState({ path: url.href }, '', url.href);
13
14	if($('.cookies-panel').length){
15		setTimeout(function(){
16			$('.cookies-panel').addClass('opened');
17		}, 2000);
18	}
19
20	$(document).on('click', '.close-cookies-btn', function(){
21		$.ajax({
22			type:'GET',
23			url: '/accept-cookies',
24			data:{},
25			processData: false,
26			contentType: false,
27			success:function(data){
28				$('.cookies-panel').removeClass('opened');
29			},
30			error:function(data){
31
32			}
33		});
34	});
35
36	$(document).on('click', '.google-play-btn', function(e){
37		var	btn = $(this);
38		ym(89356185,'reachGoal','clickGooglePlay');
39
40		setTimeout(function(){
41			document.location = $(btn).data('href');
42		}, 1000);
43	});
44	$(document).on('click', '.app-store-btn', function(e){
45		var	btn = $(this);
46		ym(89356185,'reachGoal','clickAppStore');
47
48		setTimeout(function(){
49			document.location = $(btn).data('href');
50		}, 1000);
51	});
52
53	$(document).on('submit', '#contactsForm', function(e){
54		e.preventDefault();
55    var form = $('#contactsForm')[0];
56		var data = new FormData(form);
57
58		var url = $(form).attr('action');
59
60    $(form).find('.invalid-feedback').remove();
61    $(form).find('.form-input, label').removeClass('is-invalid');
62    $(form).find('label').removeClass('form-control');
63	$(form).find('button.main-btn').attr('disabled', true);
64		if(data){
65			$.ajax({
66				type:'POST',
67				url: url,
68				data:data,
69				processData: false,
70				contentType: false,
71				success:function(data){
72			          $('#contactModal').modal('hide');
73			          showMessage('<p>Ваша заявка принята!</p><p>Мы скоро Вам ответим.</p>', 'success', 5);
74			          $(form).find('.form-input').val('');
75					  $(form).find('button.main-btn').attr('disabled', false);
76
77					  grecaptcha.reset(contactRecaptcha);
78				},
79				error:function(data){
80					var errors = data.responseJSON.errors;
81					var errMsg = 'Поле не заполнено или имеет неправильный формат',
82					policyError = 'Пожалуйста подтвердите согласие с условиями';
83
84					$.each(errors, function(input, error){
85					$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
86						if(input == 'acceptPolicy'){
87							$(form).find('input[name="acceptPolicy"]').closest('label').addClass('form-control is-invalid').after('<span class="invalid-feedback" role="alert">'+policyError+'</span>')
88						}else{
89							$(form).find('.form-input[name="'+input+'"]').after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
90						}
91					});
92
93					$(form).find('button.main-btn').attr('disabled', false);
94
95					grecaptcha.reset(contactRecaptcha);
96				}
97			});
98		}
99	});
100
101    var checkScroll;
102    $(document).scroll(function(e){
103        if($(this).scrollTop() > 30){
104            $('header').addClass('fixed-header');
105			if($('body').hasClass('dark-mode')){
106				if($('.page').hasClass('driver-page')){
107					//$('header').find('.main-logo').attr('src', '/static_images/logo.svg');
108				}
109			}
110        }else{
111            $('header').removeClass('fixed-header');
112			if($('body').hasClass('dark-mode') && !$('.main-menu').hasClass('open')){
113				if($('.page').hasClass('driver-page')){
114					//$('header').find('.main-logo').attr('src', '/static_images/logo_light.svg');
115				}
116			}
117        }
118    });
119
120    $(document).on('click', '.show-modal-btn', function(){
121        var msg = $(this).data('dialog-message'),
122            target = $(this).data('target');
123            console.log(target, msg);
124        $(target).find('.dialog-text').html(msg);
125        $(target).modal('show');
126    });
127
128    $('#callModal').on('hidden.bs.modal', function (e) {
129        $(this).find('.dialog-text').html('');
130    });
131
132    $(document).on('submit', '#callForm', function(e){
133		e.preventDefault();
134        var form = $('#callForm')[0];
135		var data = new FormData(form);
136
137		var url = '/request-call';
138
139        $(form).find('.invalid-feedback').remove();
140        $(form).find('.form-input').removeClass('is-invalid');
141		$(form).find('button.main-btn').attr('disabled', true);
142		if(data){
143			$.ajax({
144				type:'POST',
145				url: url,
146				data:data,
147				processData: false,
148				contentType: false,
149				success:function(data){
150                    $('#callModal').modal('hide');
151                    showMessage('<p>Ваша заявка принята!</p><p>Мы скоро Вам ответим.</p>', 'success', 5);
152                    $(form).find('.form-input').val('');
153					$(form).find('button.main-btn').attr('disabled', false);
154
155					grecaptcha.reset(callRecaptcha);
156				},
157				error:function(data){
158                    var errors = data.responseJSON.errors;
159
160					var errMsg = 'Поле не заполнено или имеет неправильный формат',
161					policyError = 'Пожалуйста подтвердите согласие с условиями';
162
163					$.each(errors, function(input, error){
164					$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
165						if(input == 'acceptPolicy'){
166							$(form).find('input[name="acceptPolicy"]').closest('label').addClass('form-control is-invalid').after('<span class="invalid-feedback" role="alert">'+policyError+'</span>')
167						}else{
168							$(form).find('.form-input[name="'+input+'"]').after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
169						}
170					});
171					$(form).find('button.main-btn').attr('disabled', false);
172
173					grecaptcha.reset(callRecaptcha);
174				}
175			});
176		}
177	});
178
179	$(document).on('submit', '#partnersForm', function(e){
180		e.preventDefault();
181        var form = $('#partnersForm')[0];
182		var data = new FormData(form);
183
184		var url = $(form).attr('action');
185
186        $(form).find('.invalid-feedback').remove();
187        $(form).find('.form-input, .form-control').removeClass('is-invalid');
188		$(form).find('button.main-btn').attr('disabled', true);
189		if(data){
190			$.ajax({
191				type:'POST',
192				url: url,
193				data:data,
194				processData: false,
195				contentType: false,
196				success:function(data){
197					if($('#partnersModal').length){
198						$('#partnersModal').modal('hide');
199					}
200                    //showMessage('<p>Ваша заявка принята!</p><p>Мы сообщим Вам информацию о дате и времени проведения конференции по Email или в СМС сообщении.</p><p>Для получения дополнительной информации Вы можете обратиться в нашу службу поддержки.</p>', 'success', 10);
201					$('#resultDialogModal').modal();
202                    $(form).find('.form-input').val('');
203					$(form).find('button.main-btn').attr('disabled', false);
204				},
205				error:function(data){
206                    var errors = data.responseJSON.errors;
207
208					var errMsg = 'Поле не заполнено или имеет неправильный формат',
209					policyError = 'Пожалуйста подтвердите согласие с условиями';
210
211					$.each(errors, function(input, error){
212					$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
213						if(input == 'acceptPolicy'){
214							$(form).find('input[name="acceptPolicy"]').closest('label').addClass('form-control is-invalid').after('<span class="invalid-feedback" role="alert">'+policyError+'</span>')
215						}else{
216							$(form).find('.form-input[name="'+input+'"]').after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
217						}
218					});
219					$(form).find('button.main-btn').attr('disabled', false);
220				}
221			});
222		}
223	});
224
225	$(document).on('submit', '#webinarForm', function(e){
226		e.preventDefault();
227        var form = $('#webinarForm')[0];
228		var data = new FormData(form);
229
230		var url = $(form).attr('action');
231
232        $(form).find('.invalid-feedback').remove();
233        $(form).find('.form-input, .form-control').removeClass('is-invalid');
234		$(form).find('button.main-btn').attr('disabled', true);
235		if(data){
236			$.ajax({
237				type:'POST',
238				url: url,
239				data:data,
240				processData: false,
241				contentType: false,
242				success:function(data){
243					if($('#webinarModal').length){
244						$('#webinarModal').modal('hide');
245					}
246                    showMessage('<p>Ваша заявка принята!</p><p>Мы сообщим Вам информацию о дате и времени проведения вебинара по Email или в СМС сообщении.</p><p>Для получения дополнительной информации Вы можете обратиться в нашу службу поддержки.</p>', 'success', 10);
247                    $(form).find('.form-input').val('');
248					$(form).find('button.main-btn').attr('disabled', false);
249				},
250				error:function(data){
251                    var errors = data.responseJSON.errors;
252
253					var errMsg = 'Поле не заполнено или имеет неправильный формат',
254					policyError = 'Пожалуйста подтвердите согласие с условиями';
255
256					$.each(errors, function(input, error){
257					$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
258						if(input == 'acceptPolicy'){
259							$(form).find('input[name="acceptPolicy"]').closest('label').addClass('form-control is-invalid').after('<span class="invalid-feedback" role="alert">'+policyError+'</span>')
260						}else{
261							$(form).find('.form-input[name="'+input+'"]').after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
262						}
263					});
264					$(form).find('button.main-btn').attr('disabled', false);
265				}
266			});
267		}
268	});
269
270	// poll functionality
271	setTimeout(function(){
272		$('.show-poll-btn').click();
273	}, 10000);
274
275	$(document).on('click', '.show-poll-btn', function(){
276		$('#pollModal').show();
277	});
278
279	$(document).on('click', '.change-step-btn', function(){
280		var step = $(this).data('step');
281
282		$(this).closest('.poll-step').removeClass('active-step');
283		$('.poll-step[data-step="'+step+'"]').addClass('active-step');
284	});
285
286	$(document).on('submit', '#pollForm', function(e){
287		e.preventDefault();
288        var form = $('#pollForm')[0];
289		var data = new FormData(form);
290
291		var url = '/send-poll';
292
293        $(form).find('.invalid-feedback').remove();
294        $(form).find('.form-input').removeClass('is-invalid');
295		$(form).find('button.main-btn').attr('disabled', true);
296		if(data){
297			$.ajax({
298				type:'POST',
299				url: url,
300				data:data,
301				processData: false,
302				contentType: false,
303				success:function(data){
304					$('.poll-step').removeClass('active-step');
305					$('.poll-step[data-step="6"]').addClass('active-step');
306					$(form).find('button.main-btn').attr('disabled', false);
307				},
308				error:function(data){
309                    var errors = data.responseJSON.errors;
310
311					$('.poll-step').removeClass('active-step');
312					$('.poll-step[data-step="2"]').addClass('active-step');
313
314                    $.each(errors, function(input, error){
315                        var errMsg = '';
316                        if(input == 'name'){
317                            errMsg = 'Поле должно быть заполнено';
318                        }
319                        if(input == 'phone'){
320                            errMsg = 'Поле не заполнено или имеет неправильный формат';
321                        }
322                        var inputItem = $(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
323
324                        $(inputItem).after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
325                    });
326					$(form).find('button.main-btn').attr('disabled', false);
327				}
328			});
329		}
330	});
331
332	$(document).on('click', '.close-poll-btn', function(){
333		$.ajax({
334			type:'GET',
335			url: '/close-poll',
336			data:{},
337			processData: false,
338			contentType: false,
339			success:function(data){
340				$('#pollModal .close').click();
341			},
342			error:function(data){
343
344			}
345		});
346	});
347
348	$(document).on('click', '.answer-btn', function(){
349		var answersBlock = $(this).closest('.poll-answers'),
350			questionInput = $('input[name="'+ answersBlock.data('question')+'"]');
351
352		answersBlock.find('.answer-btn').removeClass('active-answer');
353		$(this).addClass('active-answer');
354
355		$(questionInput).val($(this).html());
356	});
357
358	$(document).on('submit', '#brandingForm', function(e){
359		e.preventDefault();
360    	var form = $('#brandingForm')[0];
361		var data = new FormData(form);
362
363		var url = $(form).attr('action');
364
365    $(form).find('.invalid-feedback').remove();
366    $(form).find('.form-input, label').removeClass('is-invalid');
367    $(form).find('label').removeClass('form-control');
368	$(form).find('button.main-btn').attr('disabled', true);
369		if(data){
370			$.ajax({
371				type:'POST',
372				url: url,
373				data:data,
374				processData: false,
375				contentType: false,
376				success:function(data){
377          			showMessage('Ваша заявка отправлена!');
378          			$(form).find('.form-input').val('');
379					$(form).find('button.main-btn').attr('disabled', false);
380				},
381				error:function(data){
382					var errors = data.responseJSON.errors;
383					var errMsg = 'Поле не заполнено или имеет неправильный формат';
384
385					$.each(errors, function(input, error){
386						$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
387					});
388					$(form).find('input[name="phone"]').after('<span class="invalid-feedback" role="alert">'+errMsg+'</span>');
389					$(form).find('button.main-btn').attr('disabled', false);
390				}
391			});
392		}
393	});
394
395	$(document).on('click', '.scroll-to-btn', function(){
396        if($('.menu-open').length){
397            $('.menu-btn').trigger('click');
398        }
399        scrollTo($(this).data('scroll-to'));
400    });
401
402	$(document).on('submit', '#getContactsForm', function(e){
403		e.preventDefault();
404    	var form = $('#getContactsForm')[0];
405		var data = new FormData(form);
406
407		var url = $(form).attr('action');
408
409	    $(form).find('.invalid-feedback').remove();
410	    $(form).find('.form-input, label').removeClass('is-invalid');
411
412		if(data){
413			$.ajax({
414				type: form.method,
415				url: url,
416				data:data,
417				processData: false,
418				contentType: false,
419				success:function(data){
420			         if(data.contacts){
421						 $('.contacts-container').html(data.contacts);
422					 }else{
423					 	grecaptcha.reset(contactsRecaptcha);
424					}
425				},
426				error:function(data){
427					var errors = data.responseJSON.errors;
428
429					//$(form).find('.form-input[name="'+input+'"]').addClass('is-invalid');
430					$(form).find('#contactsRecaptcha').after('<span class="invalid-feedback d-block" role="alert">'+errors.recaptcha[0]+'</span>');
431
432					grecaptcha.reset(contactsRecaptcha);
433				}
434			});
435		}
436	});
437
438});
439
440function showMessage(message, type = 'success', delay = 3){
441	$('.info-message').remove();
442	$('.page').append('<div class="info-message '+type+'-message">'+message+'</div>');
443
444	$('.info-message').fadeIn().delay(delay*1000).fadeOut();
445	delay++;
446	setTimeout(function(){
447		$('.info-message').remove();
448	}, delay*1000);
449}
450
451function onRequestSubmit() {
452	$('#contactsForm').submit();
453}
454function onCallSubmit() {
455	$('#callForm').submit();
456}
457
458function onPartnerSubmit() {
459	$('#partnersForm').submit();
460}
461
462function onBrandingSubmit(token) {
463	$('#brandingForm').submit();
464}
465
466function checkLength(input, length = 15) {
467    if($(input).val().length == length)
468        return false;
469    return true;
470}
471
472function onloadCallback(){
473	var sitekey = '6LdzTPggAAAAADi4F7SShCmNf3jH--NJ2K5h5jmJ';
474
475	contactRecaptcha = grecaptcha.render('contactRecaptcha', {
476      'sitekey' : sitekey,
477	  //'size': 'invisible',
478    });
479
480	if($('#callRecaptcha').length){
481		callRecaptcha = grecaptcha.render('callRecaptcha', {
482	      'sitekey' : sitekey,
483		  //'size': 'invisible',
484	    });
485	}
486
487	if($('#contactsRecaptcha').length){
488		contactsRecaptcha = grecaptcha.render('contactsRecaptcha', {
489			'sitekey' : sitekey,
490		});
491	}
492}
493
494function scrollTo(scrollToElem){
495    $('html, body, .page').animate({
496        scrollTop: $(scrollToElem).offset().top - 70
497    }, 1000);
498}
499
500function calcHeight(){
501  let vh = window.innerHeight * 0.01;
502  $('body').attr('style', '--vh:'+vh+'px');
503}

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.