PageSourceSearch

https://lk.subaru.ru/js/forms.js?6abfddf8ce5c7

js subaru.ru collected 2026-10-02 16:39:37 UTC 43,382 bytes, 1,449 lines download raw bytes

1
2var smsInterval2;
3var smsTimer2;
4
5var tempPhone = '';
6var tempEmail = '';
7
8var passwordFormMayBeEmpty = false;
9
10$(document).ready(function(){
11	$.optionsValidForm = {
12		ignore: [],
13        focusInvalid: false,
14        rules: {
15            name: {
16                required: true,
17                minlength: 3,
18                maxlength: 40,
19                cyrillicvalidation: true
20            },
21            lastname: {
22                required: true,
23                minlength: 3,
24                maxlength: 40,
25                cyrillicvalidation: true
26            },
27            /*patroname: {
28                required: true,
29                minlength: 3,
30                maxlength: 40,
31                cyrillicvalidation: true
32            },*/
33            fullname: {
34                required: true,
35                minlength: 3,
36                maxlength: 60,
37            },
38            email: {
39                required: true,
40                email: true,
41            },
42            phone: {
43                required: true,
44                minlength: 10,
45            },
46            code: {
47                required: true,
48                minlength: 4,
49            },
50            city: {
51                required: true,
52                minlength: 3,
53            },
54            birthday: {
55                required: true,
56            },
57            gender: {
58                required: true,
59            },
60            password: {
61                required: function(element){
62                	return !passwordFormMayBeEmpty;
63                },
64                minlength: 8,
65            },
66            password2: {
67                required: true,
68                minlength: 8,
69                equalTo: "[name='password']",
70            },
71            editPassword: {
72            	minlength: 8,
73            },
74            editPassword2: {
75            	minlength: 8,
76                equalTo: "[name='editPassword']",
77            },
78            agree: {
79                required: true,
80			},
81			dealer_id: {
82                required: true,
83			},
84			city_id: {
85                required: true,
86			},
87			ownertype_id: {
88                required: true,
89			},
90			model_id: {
91                /*required: true,*/
92
93                required: function(element){
94					return $(".model_name-wrapper").css('display') == 'none';
95				}
96			},
97			model_name: {
98				required: function(element){
99					return $("select[name='model_id']").val().length < 1;
100				}
101			},
102			year: {
103                required: true,
104                number: true,
105				minlength: 4,
106				maxlength: 4,
107				min: 1990,
108				max: 2022,
109			},
110			car_name: {
111                required: false,
112			},
113			/*vin: {
114                required: true,
115			},*/
116			vin0: {
117                required: true,
118			},
119			subaruId: {
120				required: true,
121				number: true,
122			},
123			mileage: {
124				/*required: true,*/
125				number: true,
126			},
127			need_date1: {
128				required: true,
129			},
130			need_time1: {
131				required: true,
132			},
133			color: {
134				required: false,
135			},
136			engine: {
137				required: false,
138			}
139		},
140		messages: {
141	        password2: {
142	        	equalTo: "Повторите пароль в точности",
143			},
144			year: {
145				minlength: "Неверный год",
146				maxlength: "Неверный год",
147				min: "Минимальный год: 1990",
148				max: "Максимальный год: 2022",
149			},
150		},
151		errorPlacement: function(error, element) {
152			if (element.is(':checkbox')) {
153				element.parent().addClass('cb-error');
154			} else if (element.is(':radio')) {
155				element.parent().parent().addClass('cb-error');
156			} else if (element.is('select')) {
157				element.parent().parent().addClass('error');
158				element.parent().parent().parent().find('.error-text').html(error.html());
159			} else {
160				element.parent().find('.error-text').html(error.html());
161				return true;
162			}
163		},
164
165		highlight: function (element, errorClass, validClass) {
166			var elem = $(element);
167			elem.parent().addClass(errorClass);
168		},
169
170		unhighlight: function (element, errorClass, validClass) {
171			var elem = $(element);
172			elem.removeClass(errorClass);
173
174			elem.parents(".form-group").removeClass(errorClass);
175			elem.parents(".form-group").parent().removeClass(errorClass);
176
177			elem.parents(".form-group").removeClass("cb-error");
178			elem.parents(".form-group").parent().removeClass("cb-error");
179		},
180    };
181
182    $.validator.addMethod("cyrillicvalidation",
183        function(value, element) {
184            var regex = /^([а-яА-ЯЁё ])*$/;
185            return regex.test(value);
186        },
187        "Введите русские символы"
188    );
189
190    $(".project-form").each(function(index, elem){
191    	$(elem).validate($.optionsValidForm);
192	});
193
194	$("#login-form").submit(function(){
195
196		var frm = $(this);
197
198		if (!frm.hasClass("checked"))
199			passwordFormMayBeEmpty = true;
200
201		if (frm.valid()) {
202
203			if (frm.hasClass("disabled"))
204    			return false;
205
206			frm.addClass("disabled");
207
208			var fields = {
209				phone: $.trim($("#login-form input[name='phone']").val()),
210				password: $.trim($("#login-form input[name='password']").val()),
211			};
212
213			$.post('/profile/login', {fields: fields}, function(data){
214
215				frm.removeClass("disabled");
216
217				if (data.status == 'error') {
218
219					if (data.errors) {
220						if (data.errors.phone) {
221							//frm.find("input[name='phone']").parent().addClass('error');
222							//frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
223
224							location.href = '/profile/signup?phone='+encodeURIComponent($.trim($("#login-form input[name='phone']").val()));
225
226						} else {
227							frm.find("input[name='phone']").parent().removeClass('error');
228							passwordFormMayBeEmpty = false;
229							frm.addClass("checked");
230
231							setTimeout(function(){
232								frm.find("input[name='password']").parent().removeClass('error');
233								$(".form-group-login-password").show();
234							}, 100);
235						}
236
237						if (data.errors.password) {
238							frm.find("input[name='password']").parent().addClass('error');
239							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
240						} else {
241							frm.find("input[name='password']").parent().removeClass('error');
242						}
243					} else {
244						message("Ошибка!|||"+data.message);
245					}
246				} else {
247					location.href = '/';
248				}
249			}, 'json');
250		}
251
252		return false;
253	});
254
255	$("#loginEmail-form").submit(function(){
256		
257		var frm = $(this);
258
259		if (frm.valid()) {
260
261			if (frm.hasClass("disabled"))
262    			return false;
263
264			frm.addClass("disabled");
265
266			var fields = {
267				email: $.trim($("#loginEmail-form input[name='email']").val()),
268				password: $.trim($("#loginEmail-form input[name='password']").val()),
269			};
270
271			$.post('/profile/loginEmail', {fields: fields}, function(data){
272
273				frm.removeClass("disabled");
274
275				if (data.status == 'error') {
276
277					if (data.errors) {
278						if (data.errors.email) {
279							frm.find("input[name='email']").parent().addClass('error');
280							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
281						} else {
282							frm.find("input[name='email']").parent().removeClass('error');
283						}
284
285						if (data.errors.password) {
286							frm.find("input[name='password']").parent().addClass('error');
287							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
288						} else {
289							frm.find("input[name='password']").parent().removeClass('error');
290						}
291
292					} else {
293						message("Ошибка!|||"+data.message);
294					}
295				} else {
296					location.href = '/';
297				}
298			}, 'json');
299		}
300
301		return false;
302	});
303
304	$("#loginSubaruId-form").submit(function(){
305		
306		var frm = $(this);
307
308		if (frm.valid()) {
309
310			if (frm.hasClass("disabled"))
311    			return false;
312
313			frm.addClass("disabled");
314
315			var fields = {
316				subaruId: $.trim($("#loginSubaruId-form input[name='subaruId']").val()),
317				password: $.trim($("#loginSubaruId-form input[name='password']").val()),
318			};
319
320			$.post('/profile/loginsubaruid', {fields: fields}, function(data){
321
322				frm.removeClass("disabled");
323
324				if (data.status == 'error') {
325
326					if (data.errors) {
327						if (data.errors.subaruId) {
328							frm.find("input[name='subaruId']").parent().addClass('error');
329							frm.find("input[name='subaruId']").parent().find('.error-text').html(data.errors.subaruId);
330						} else {
331							frm.find("input[name='subaruId']").parent().removeClass('error');
332						}
333
334						if (data.errors.password) {
335							frm.find("input[name='password']").parent().addClass('error');
336							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
337						} else {
338							frm.find("input[name='password']").parent().removeClass('error');
339						}
340					} else {
341						message("Ошибка!|||"+data.message);
342					}
343				} else {
344					location.href = '/';
345				}
346			}, 'json');
347		}
348
349		return false;
350	});
351
352	$("#signup-form").submit(function(){
353		
354		var frm = $(this);
355
356		if (frm.valid()) {
357
358			if (frm.hasClass("disabled"))
359    			return false;
360
361			frm.addClass("disabled");
362
363			var fields = {
364				phone: $.trim($("#signup-form input[name='phone']").val()),
365				code: $.trim($("#signup-form input[name='code']").val()),
366			};
367
368			$.post('/profile/signup', {fields: fields}, function(data){
369
370				frm.removeClass("disabled");
371
372				if (data.status == 'error') {
373
374					if (data.errors) {
375						if (data.errors.phone) {
376							frm.find("input[name='phone']").parent().addClass('error');
377							frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
378						} else {
379							frm.find("input[name='phone']").parent().removeClass('error');
380						}
381
382						if (data.errors.code) {
383							frm.find("input[name='code']").parent().addClass('error');
384							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
385						} else {
386							frm.find("input[name='code']").parent().removeClass('error');
387						}
388					} else {
389						message("Ошибка!|||"+data.message);
390					}
391				} else {
392					location.href = '/profile/signup';
393				}
394			}, 'json');
395		}
396
397		return false;
398	});
399
400	$("#signup2-form").submit(function(){
401		
402		var frm = $(this);
403
404		if (frm.valid()) {
405
406			if (frm.hasClass("disabled"))
407    			return false;
408
409			frm.addClass("disabled");
410
411			var fields = {
412				password: $.trim($("#signup2-form input[name='password']").val()),
413			};
414
415			$.post('/profile/signup2', {fields: fields}, function(data){
416
417				frm.removeClass("disabled");
418
419				if (data.status == 'error') {
420
421					if (data.errors) {
422						if (data.errors.password) {
423							frm.find("input[name='password']").parent().addClass('error');
424							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
425						} else {
426							frm.find("input[name='password']").parent().removeClass('error');
427						}
428					} else {
429						message("Ошибка!|||"+data.message);
430					}
431				} else {
432					location.reload();
433				}
434			}, 'json');
435		}
436
437		return false;
438	});
439
440	$("#signup3-form").submit(function(){
441		
442		var frm = $(this);
443
444		if (frm.valid()) {
445
446			if (frm.hasClass("disabled"))
447    			return false;
448
449			frm.addClass("disabled");
450
451			var fields = {
452				name: $.trim($("#signup3-form input[name='name']").val()),
453				lastname: $.trim($("#signup3-form input[name='lastname']").val()),
454				email: $.trim($("#signup3-form input[name='email']").val()),
455
456				patroname: $.trim($("#signup3-form input[name='patroname']").val()),
457				city: $.trim($("#signup3-form input[name='city']").val()),
458				birthday: $.trim($("#signup3-form input[name='birthday']").val()),
459				gender: $.trim($("#signup3-form input[name='gender']:checked").val()),
460				nickname: $.trim($("#signup3-form input[name='nickname']").val()),
461			};
462
463			$.post('/profile/signup3', {fields: fields}, function(data){
464
465				frm.removeClass("disabled");
466
467				if (data.status == 'error') {
468
469					if (data.errors) {
470						if (data.errors.name) {
471							frm.find("input[name='name']").parent().addClass('error');
472							frm.find("input[name='name']").parent().find('.error-text').html(data.errors.name);
473						} else {
474							frm.find("input[name='name']").parent().removeClass('error');
475						}
476
477						if (data.errors.lastname) {
478							frm.find("input[name='lastname']").parent().addClass('error');
479							frm.find("input[name='lastname']").parent().find('.error-text').html(data.errors.lastname);
480						} else {
481							frm.find("input[name='lastname']").parent().removeClass('error');
482						}
483
484						if (data.errors.nickname) {
485							frm.find("input[name='nickname']").parent().addClass('error');
486							frm.find("input[name='nickname']").parent().find('.error-text').html(data.errors.nickname);
487						} else {
488							frm.find("input[name='nickname']").parent().removeClass('error');
489						}
490
491						if (data.errors.email) {
492							frm.find("input[name='email']").parent().addClass('error');
493							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
494						} else {
495							frm.find("input[name='email']").parent().removeClass('error');
496						}
497
498						if (data.errors.birthday) {
499							frm.find("input[name='birthday']").parent().addClass('error');
500							frm.find("input[name='birthday']").parent().find('.error-text').html(data.errors.birthday);
501						} else {
502							frm.find("input[name='birthday']").parent().removeClass('error');
503						}
504
505						if (data.errors.city) {
506							frm.find("input[name='city']").parent().addClass('error');
507							frm.find("input[name='city']").parent().find('.error-text').html(data.errors.city);
508						} else {
509							frm.find("input[name='city']").parent().removeClass('error');
510						}
511					} else {
512						message("Ошибка!|||"+data.message);
513					}
514				} else {
515					location.href = '/';
516				}
517			}, 'json');
518		}
519
520		return false;
521	});
522
523	$("#edit-form").submit(function(){
524		
525		var frm = $(this);
526
527		if (frm.valid()) {
528
529			if (frm.hasClass("disabled"))
530    			return false;
531
532			frm.addClass("disabled");
533
534			var fields = {
535				name: $.trim($("#edit-form input[name='name']").val()),
536				lastname: $.trim($("#edit-form input[name='lastname']").val()),
537				patroname: $.trim($("#edit-form input[name='patroname']").val()),
538				nickname: $.trim($("#edit-form input[name='nickname']").val()),
539				city: $.trim($("#edit-form input[name='city']").val()),
540				birthday: $.trim($("#edit-form input[name='birthday']").val()),
541				gender: $.trim($("#edit-form input[name='gender']:checked").val()),
542				password: $.trim($("#edit-form input[name='editPassword']").val()),
543			};
544
545			$.post('/profile/edit', {fields: fields}, function(data){
546
547				frm.removeClass("disabled");
548
549				if (data.status == 'error') {
550
551					if (data.errors) {
552						if (data.errors.name) {
553							frm.find("input[name='name']").parent().addClass('error');
554							frm.find("input[name='name']").parent().find('.error-text').html(data.errors.name);
555						} else {
556							frm.find("input[name='name']").parent().removeClass('error');
557						}
558
559						if (data.errors.lastname) {
560							frm.find("input[name='lastname']").parent().addClass('error');
561							frm.find("input[name='lastname']").parent().find('.error-text').html(data.errors.lastname);
562						} else {
563							frm.find("input[name='lastname']").parent().removeClass('error');
564						}
565
566						if (data.errors.nickname) {
567							frm.find("input[name='nickname']").parent().addClass('error');
568							frm.find("input[name='nickname']").parent().find('.error-text').html(data.errors.nickname);
569						} else {
570							frm.find("input[name='nickname']").parent().removeClass('error');
571						}
572
573						/*if (data.errors.birthday) {
574							frm.find("input[name='birthday']").parent().addClass('error');
575							frm.find("input[name='birthday']").parent().find('.error-text').html(data.errors.birthday);
576						} else {
577							frm.find("input[name='birthday']").parent().removeClass('error'
577);
578						}*/
579
580						if (data.errors.birthday) {
581							frm.find("input[name='birthday']").parent().addClass('error');
582							frm.find("input[name='birthday']").parent().find('.error-text').html(data.errors.birthday);
583						} else {
584							frm.find("input[name='birthday']").parent().removeClass('error');
585						}
586
587						if (data.errors.city) {
588							frm.find("input[name='city']").parent().addClass('error');
589							frm.find("input[name='city']").parent().find('.error-text').html(data.errors.city);
590						} else {
591							frm.find("input[name='city']").parent().removeClass('error');
592						}
593
594						if (data.errors.password) {
595							frm.find("input[name='password']").parent().addClass('error');
596							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
597						} else {
598							frm.find("input[name='password']").parent().removeClass('error');
599						}
600					} else {
601						message("Ошибка!|||"+data.message);
602					}
603				} else {
604					location.href = '/profile';
605				}
606			}, 'json');
607		}
608
609		return false;
610	});
611
612	$("#recoverEmail-form").submit(function(){
613		
614		var frm = $(this);
615
616		if (frm.valid()) {
617
618			if (frm.hasClass("disabled"))
619    			return false;
620
621			frm.addClass("disabled");
622
623			var fields = {
624				email: $.trim($("#recoverEmail-form input[name='email']").val()),
625				code: $.trim($("#recoverEmail-form input[name='code']").val()),
626			};
627
628			$.post('/profile/recoverEmail', {fields: fields}, function(data){
629
630				frm.removeClass("disabled");
631
632				if (data.status == 'error') {
633
634					if (data.errors) {
635						if (data.errors.email) {
636							frm.find("input[name='email']").parent().addClass('error');
637							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
638						} else {
639							frm.find("input[name='email']").parent().removeClass('error');
640						}
641
642						if (data.errors.code) {
643							frm.find("input[name='code']").parent().addClass('error');
644							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
645						} else {
646							frm.find("input[name='code']").parent().removeClass('error');
647						}
648					} else {
649						message("Ошибка!|||"+data.message);
650					}
651				} else {
652					location.href = '/profile';
653				}
654			}, 'json');
655		}
656
657		return false;
658	});
659
660	$("#recover-form").submit(function(){
661		
662		var frm = $(this);
663
664		if (frm.valid()) {
665
666			if (frm.hasClass("disabled"))
667    			return false;
668
669			frm.addClass("disabled");
670
671			var fields = {
672				phone: $.trim($("#recover-form input[name='phone']").val()),
673				code: $.trim($("#recover-form input[name='code']").val()),
674			};
675
676			$.post('/profile/recover', {fields: fields}, function(data){
677
678				frm.removeClass("disabled");
679
680				if (data.status == 'error') {
681
682					if (data.errors) {
683						if (data.errors.phone) {
684							frm.find("input[name='phone']").parent().addClass('error');
685							frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
686						} else {
687							frm.find("input[name='phone']").parent().removeClass('error');
688						}
689
690						if (data.errors.code) {
691							frm.find("input[name='code']").parent().addClass('error');
692							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
693						} else {
694							frm.find("input[name='code']").parent().removeClass('error');
695						}
696					} else {
697						message("Ошибка!|||"+data.message);
698					}
699				} else {
700					location.href = '/profile';
701				}
702			}, 'json');
703		}
704
705		return false;
706	});
707
708	$("#login-sms-form").submit(function(){
709		
710		var frm = $(this);
711
712		if (frm.valid()) {
713
714			if (frm.hasClass("disabled"))
715    			return false;
716
717			frm.addClass("disabled");
718
719			var fields = {
720				phone: $.trim($("#login-sms-form input[name='phone']").val()),
721				code: $.trim($("#login-sms-form input[name='code']").val()),
722			};
723
724			$.post('/profile/loginsms', {fields: fields}, function(data){
725
726				frm.removeClass("disabled");
727
728				if (data.status == 'error') {
729
730					if (data.errors) {
731						if (data.errors.phone) {
732							frm.find("input[name='phone']").parent().addClass('error');
733							frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
734						} else {
735							frm.find("input[name='phone']").parent().removeClass('error');
736						}
737
738						if (data.errors.code) {
739							frm.find("input[name='code']").parent().addClass('error');
740							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
741						} else {
742							frm.find("input[name='code']").parent().removeClass('error');
743						}
744					} else {
745						message("Ошибка!|||"+data.message);
746					}
747				} else {
748					location.href = '/profile';
749				}
750			}, 'json');
751		}
752
753		return false;
754	});
755
756	$("#edit-phone-form").submit(function(){
757		
758		var frm = $(this);
759
760		if (frm.valid()) {
761
762			if (frm.hasClass("disabled"))
763    			return false;
764
765			frm.addClass("disabled");
766
767			var fields = {
768				phone: $.trim($("#edit-phone-form input[name='phone']").val()),
769				password: $.trim($("#edit-phone-form input[name='password']").val()),
770			};
771
772			$.post('/profile/editPhoneStep1', {fields: fields}, function(data){
773
774				frm.removeClass("disabled");
775
776				if (data.status == 'error') {
777
778					if (data.errors) {
779						if (data.errors.phone) {
780							frm.find("input[name='phone']").parent().addClass('error');
781							frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
782						} else {
783							frm.find("input[name='phone']").parent().removeClass('error');
784						}
785
786						if (data.errors.password) {
787							frm.find("input[name='password']").parent().addClass('error');
788							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
789						} else {
790							frm.find("input[name='password']").parent().removeClass('error');
791						}
792					} else {
793						hidePopup("#modal-change-number");
794
795						message("Ошибка!|||"+data.message);
796					}
797				} else {
798					hidePopup("#modal-change-number");
799					clearInterval(smsInterval2);
800
801					$("#edit-phone-form-step2 .to-send-sms-2").addClass("not-active");
802
803					tempPhone = $.trim($("#edit-phone-form input[name='phone']").val());
804
805					$("#edit-phone-form-step2 .sms-timer").html('01:00');
806					$("#edit-phone-form-step2 .form-foot p:eq(1)").show();
807
808					smsTimer2 = 60;
809					smsInterval2 = setInterval(function(){
810						let t1 = Math.floor(smsTimer2 / 60);
811						let t2 = smsTimer2 - t1 * 60;
812
813						if (t1 < 10) t1 = '0'+t1;
814						if (t2 < 10) t2 = '0'+t2;
815
816						$("#edit-phone-form-step2 .sms-timer").html(t1+':'+t2);
817
818						smsTimer2--;
819						if (smsTimer2 < 0) {
820							clearInterval(smsInterval2);
821							$("#edit-phone-form-step2 .to-send-sms-2").removeClass("not-active");
822							$("#edit-phone-form-step2 .form-foot p:eq(1)").hide();
823						}
824
825					}, 1000);
826
827					showPopup("#modal-number-sms");
828				}
829			}, 'json');
830		}
831
832		return false;
833	});
834
835	$("#edit-phone-form-step2").submit(function(){
836		
837		var frm = $(this);
838
839		if (frm.valid()) {
840
841			if (frm.hasClass("disabled"))
842    			return false;
843
844			frm.addClass("disabled");
845
846			var fields = {
847				phone: tempPhone,
848				code: $.trim($("#edit-phone-form-step2 input[name='code']").val()),
849			};
850
851			$.post('/profile/editPhoneStep2', {fields: fields}, function(data){
852
853				frm.removeClass("disabled");
854
855				if (data.status == 'error') {
856
857					if (data.errors) {
858						if (data.errors.code) {
859							frm.find("input[name='code']").parent().addClass('error');
860							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
861						} else {
862							frm.find("input[name='code']").parent().removeClass('error');
863						}
864					} else {
865						hidePopup("#modal-number-sms");
866						clearInterval(smsInterval2);
867
868						message("Ошибка!|||"+data.message);
869					}
870				} else {
871					hidePopup("#modal-number-sms");
872					clearInterval(smsInterval2);
873
874					location.href = '/profile';
875				}
876			}, 'json');
877		}
878
879		return false;
880	});
881
882
883	$("#edit-email-form").submit(function(){
884
885		var frm = $(this);
886
887		if (frm.valid()) {
888
889			if (frm.hasClass("disabled"))
890    			return false;
891
892			frm.addClass("disabled");
893
894			var fields = {
895				email: $.trim($("#edit-email-form input[name='email']").val()),
896				password: $.trim($("#edit-email-form input[name='password']").val()),
897			};
898
899			$.post('/profile/editEmailStep1', {fields: fields}, function(data){
900
901				frm.removeClass("disabled");
902
903				if (data.status == 'error') {
904
905					if (data.errors) {
906						if (data.errors.email) {
907							frm.find("input[name='email']").parent().addClass('error');
908							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
909						} else {
910							frm.find("input[name='email']").parent().removeClass('error');
911						}
912
913						if (data.errors.password) {
914							frm.find("input[name='password']").parent().addClass('error');
915							frm.find("input[name='password']").parent().find('.error-text').html(data.errors.password);
916						} else {
917							frm.find("input[name='password']").parent().removeClass('error');
918						}
919					} else {
920						hidePopup("#modal-email-succes");
921
922						message("Ошибка!|||"+data.message);
923					}
924				} else {
925					hidePopup("#modal-email-succes");
926					clearInterval(smsInterval2);
927
928					$("#edit-email-form-step2 .to-send-email-2").addClass("not-active");
929
930					tempEmail = $.trim($("#edit-email-form input[name='email']").val());
931
932					$("#edit-email-form-step2 .sms-timer").html('01:00');
933					$("#edit-email-form-step2 .form-foot p:eq(1)").show();
934
935					smsTimer2 = 60;
936					smsInterval2 = setInterval(function(){
937						let t1 = Math.floor(smsTimer2 / 60);
938						let t2 = smsTimer2 - t1 * 60;
939
940						if (t1 < 10) t1 = '0'+t1;
941						if (t2 < 10) t2 = '0'+t2;
942
943						$("#edit-email-form-step2 .sms-timer").html(t1+':'+t2);
944
945						smsTimer2--;
946						if (smsTimer2 < 0) {
947							clearInterval(smsInterval2);
948							$("#edit-email-form-step2 .to-send-email-2").removeClass("not-active");
949							$("#edit-email-form-step2 .form-foot p:eq(1)").hide();
950						}
951
952					}, 1000);
953
954					showPopup("#modal-email-succes-sms");
955				}
956			}, 'json');
957		}
958
959		return false;
960	});
961
962	$("#edit-email-form-step2").submit(function(){
963		
964		var frm = $(this);
965
966		if (frm.valid()) {
967
968			if (frm.hasClass("disabled"))
969    			return false;
970
971			frm.addClass("disabled");
972
973			var fields = {
974				email: tempEmail,
975				code: $.trim($("#edit-email-form-step2 input[name='code']").val()),
976			};
977
978			$.post('/profile/editEmailStep2', {fields: fields}, function(data){
979
980				frm.removeClass("disabled");
981
982				if (data.status == 'error') {
983
984					if (data.errors) {
985						if (data.errors.code) {
986							frm.find("input[name='code']").parent().addClass('error');
987							frm.find("input[name='code']").parent().find('.error-text').html(data.errors.code);
988						} else {
989							frm.find("input[name='code']").parent().removeClass('error');
990						}
991					} else {
992						hidePopup("#modal-email-succes-sms");
993						clearInterval(smsInterval2);
994
995						message("Ошибка!|||"+data.message);
996					}
997				} else {
998					hidePopup("#modal-email-succes-sms");
999					clearInterval(smsInterval2);
1000
1001					location.href = '/profile';
1002				}
1003			}, 'json');
1004		}
1005
1006		return false;
1007	});
1008
1009	$("#request-form").submit(function(){
1010		
1011		var frm = $(this);
1012
1013		if (frm.valid()) {
1014
1015			if (frm.hasClass("disabled"))
1016    			return false;
1017
1018			frm.addClass("disabled");
1019
1020			var fields = {
1021				name: $.trim($("#request-form input[name='fullname']").val()),
1022				phone: $.trim($("#request-form input[name='phone']").val()),
1023				email: $.trim($("#request-form input[name='email']").val()),
1024				cityId: $.trim($("#request-form select[name='city_id']").val()),
1025				dealerId: $.trim($("#request-form select[name='dealer_id']").val()),
1026				type: $.trim($("#request-form input[name='type']").val()),
1027
1028				need_date: $.trim($("#request-form input[name='need_date']").val()),
1029				planned_works: $.trim($("#request-form input[name='planned_works']").val()),
1030				
1031			};
1032
1033			$.post('/profile/request', {fields: fields}, function(data){
1034
1035				frm.removeClass("disabled");
1036
1037				if (data.status == 'error') {
1038
1039					if (data.errors) {
1040						if (data.errors.name) {
1041							frm.find("input[name='fullname']").parent().addClass('error');
1042							frm.find("input[name='fullname']").parent().find('.error-text').html(data.errors.name);
1043						} else {
1044							frm.find("input[name='fullname']").parent().removeClass('error');
1045						}
1046
1047						if (data.errors.phone) {
1048							frm.find("input[name='phone']").parent().addClass('error');
1049							frm.find("input[name='phone']").parent().find('.error-text').html(data.errors.phone);
1050						} else {
1051							frm.find("input[name='phone']").parent().removeClass('error');
1052						}
1053
1054						if (data.errors.email) {
1055							frm.find("input[name='email']").parent().addClass('error');
1056							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
1057						} else {
1058							frm.find("input[name='email']").parent().removeClass('error');
1059						}
1060
1061						if (data.errors.city) {
1062							frm.find("select[name='city_id']").parent().parent().parent().addClass('error');
1063							frm.find("select[name='city_id']").parent().parent().parent().find('.error-text').html(data.errors.city);
1064						} else {
1065							frm.find("select[name='city_id']").parent().parent().parent().removeClass('error');
1066						}
1067
1068						if (data.errors.dealer) {
1069							frm.find("select[name='dealer_id']").parent().parent().parent().addClass('error');
1070							frm.find("select[name='dealer_id']").parent().parent().parent().find('.error-text').html(data.errors.dealer);
1071						} else {
1072							frm.find("select[name='dealer_id']").parent().parent().parent().removeClass('error');
1073						}
1074					} else {
1075						message("Ошибка!|||"+data.message);
1076					}
1077				} else {
1078					location.href = '/profile';
1079				}
1080			}, 'json');
1081		}
1082
1083		return false;
1084	});
1085
1086	$("#confirm-form").submit(function(){
1087		
1088		var frm = $(this);
1089
1090		if (frm.valid()) {
1091
1092			if (frm.hasClass("disabled"))
1093    			return false;
1094
1095			frm.addClass("disabled");
1096
1097			var fields = {
1098				email: $.trim($("#confirm-form input[name='email']").val()),
1099				cityId: $.trim($("#confirm-form select[name='city_id']").val()),
1100				dealerId: $.trim($("#confirm-form select[name='dealer_id']").val()),
1101				need_date: $.trim($("#confirm-form input[name='need_date1']").val()) + ' ' + $.trim($("#confirm-form input[name='need_time1']").val()),
1102				confirm_type: $.trim($("#confirm-form input[name='confirm_type']").val()),
1103				carId: $("#modal-confiirm-prof").attr('data-car-id'),
1104			};
1105
1106			$.post('/profile/requestConfirm', {fields: fields}, function(data){
1107
1108				frm.removeClass("disabled");
1109
1110				if (data.status == 'error') {
1111
1112					if (data.errors) {
1113						if (data.errors.email) {
1114							frm.find("input[name='email']").parent().addClass('error');
1115							frm.find("input[name='email']").parent().find('.error-text').html(data.errors.email);
1116						} else {
1117							frm.find("input[name='email']").parent().removeClass('error');
1118						}
1119
1120						if (data.errors.city) {
1121							frm.find("select[name='city_id']").parent().parent().parent().addClass('error');
1122							frm.find("select[name='city_id']").parent().parent().parent().find('.error-text').html(data.errors.city);
1123						} else {
1124							frm.find("select[name='city_id']").parent().parent().parent().removeClass('error');
1125						}
1126
1127						if (data.errors.dealer) {
1128							frm.find("select[name='dealer_id']").parent().parent().parent().addClass('error');
1129							frm.find("select[name='dealer_id']").parent().parent().parent().find('.error-text').html(data.errors.dealer);
1130						} else {
1131							frm.find("select[name='dealer_id']").parent().parent().parent().removeClass('error');
1132						}
1133
1134						if (data.errors.need_date) {
1135							frm.find("input[name='need_date1']").parent().addClass('error');
1136							frm.find("input[name='need_date1']").parent().find('.error-text').html(data.errors.need_date1);
1137						} else {
1138							frm.find("input[name='need_date1']").parent().removeClass('error');
1139						}
1140					} else {
1141						message("Ошибка!|||"+data.message);
1142					}
1143				} else {
1144					if (fields.confirm_type == 'user')
1145						location.href = '/profile';
1146					else
1147						location.reload();
1148				}
1149			}, 'json');
1150		}
1151
1152		return false;
1153	});
1154
1155	$("#garage-add-form").submit(function(){
1156
1157		var vin = $.trim($("#garage-vin-form input[name='vin0']").val());
1158		if (vin.length > 0 && vin.length < 17) {
1159			$("#garage-vin-form input[name='vin0']").parent().addClass("error");
1160			$("#garage-vin-form input[name='vin0']").parent().find('.error-text').html("Неверный VIN-код");
1161			return false;
1162
1163		} else {
1164			$("#garage-vin-form input[name='vin0']").parent().removeClass("error");
1165		}
1166		
1167		var frm = $(this);
1168
1169		if (frm.valid()) {
1170
1171			if (frm.hasClass("disabled"))
1172    			return false;
1173
1174			frm.addClass("disabled");
1175			$(".to-submit-another-form[data-form='garage-add-form']").addClass("disabled");
1176
1177			var fields = {
1178				modelId: $.trim($("#garage-add-form select[name='model_id']").val()),
1179				modelName: $.trim($("#garage-add-form input[name='model_name']").val()),
1180				year: $.trim($("#garage-add-form input[name='year']").val()),
1181				name: $.trim($("#garage-add-form [name='car_name']").val()),
1182				ownerTypeId: $.trim($("#garage-add-form select[name='ownertype_id']").val()),
1183				engine: $.trim($("#garage-add-form [name='engine']").val()),
1184				color: $.trim($("#garage-add-form [name='color']").val()),
1185				mileage: $.trim($("#garage-add-form [name='mileage']").val()),
1186				vin: vin,
1187			};
1188
1189			if (($(".form-add-auto img").attr('src') || '').length > 0)
1190				fields.image = $(".form-add-auto img").attr('src');
1191
1192			$.post('/garage/add', {fields: fields}, function(data){
1193
1194				frm.removeClass("disabled");
1195				$(".to-submit-another-form[data-form='garage-add-form']").removeClass("disabled");
1196
1197				if (data.status == 'error') {
1198
1199					if (data.errors) {
1200
1201						if (data.errors.vin) {
1202							$("#garage-vin-form input[name='vin0']").parent().addClass('error');
1203							$("#garage-vin-form input[name='vin0']").parent().find('.error-text').html(data.errors.vin);
1204						} else {
1205							$("#garage-vin-form input[name='vin0']").parent().removeClass('error');
1206						}
1207
1208						if (data.errors.mileage) {
1209							frm.find("input[name='mileage']").parent().addClass('error');
1210							frm.find("input[name='mileage']").parent().find('.error-text').html(data.errors.mileage);
1211						} else {
1212							frm.find("input[name='mileage']").parent().removeClass('error');
1213						}
1214
1215						if (data.errors.engine) {
1216							frm.find("input[name='engine']").parent().addClass('error');
1217							frm.find("input[name='engine']").parent().find('.error-text').html(data.errors.engine);
1218						} else {
1219							frm.find("input[name='engine']").parent().removeClass('error');
1220						}
1221
1222						if (data.errors.color) {
1223							frm.find("input[name='color']").parent().addClass('error');
1224							frm.find("input[name='color']").parent().find('.error-text').html(data.errors.color);
1225						} else {
1226							frm.find("input[name='color']").parent().removeClass('error');
1227						}
1228
1229						if (data.errors.name) {
1230							frm.find("input[name='car_name']").parent().addClass('error');
1231							frm.find("input[name='car_name']").parent().find('.error-text').html(data.errors.name);
1232						} else {
1233							frm.find("input[name='car_name']").parent().removeClass('error');
1234						}
1235
1236						if (data.errors.model) {
1237							frm.find("select[name='model_id']").parent().parent().parent().addClass('error');
1238							frm.find("select[name='model_id']").parent().parent().parent().find('.error-text').html(data.errors.model);
1239						} else {
1240							frm.find("select[name='model_id']").parent().parent().parent().removeClass('error');
1241						}
1242
1243						if (data.errors.year) {
1244							frm.find("select[name='year']").parent().parent().parent().addClass('error');
1245							frm.find("select[name='year']").parent().parent().parent().find('.error-text').html(data.errors.year);
1246						} else {
1247							frm.find("select[name='year']").parent().parent().parent().removeClass('error');
1248						}
1249
1250						if (data.errors.ownertype) {
1251							frm.find("select[name='ownertype_id']").parent().parent().parent().addClass('error');
1252							frm.find("select[name='ownertype_id']").parent().parent().parent().find('.error-text').html(data.errors.ownertype);
1253						} else {
1254							frm.find("select[name='ownertype_id']").parent().parent().parent().removeClass('error');
1255						}
1256
1257					} else {
1258						message("Ошибка!|||"+data.message);
1259					}
1260				} else {
1261					location.href = '/';
1262				}
1263			}, 'json');
1264		} else {
1265			var err = frm.find(".error:eq(0)");
1266			if (err.length) {
1267				$("html,body").stop().animate({scrollTop: err.offset().top-50}, 200);
1268			}
1269		}
1270
1271		return false;
1272	});
1273
1274	$("#garage-edit-form").submit(function(){
1275
1276		var frm = $(this);
1277
1278		if (frm.valid()) {
1279
1280			if (frm.hasClass("disabled"))
1281    			return false;
1282
1283			frm.addClass("disabled");
1284
1285			var id = parseInt(frm.attr('data-id')) || 0;
1286
1287			var fields = {
1288				modelId: $.trim($("#garage-edit-form select[name='model_id']").val()),
1289				modelName: $.trim($("#garage-edit-form input[name='model_name']").val()),
1290				year: $.trim($("#garage-edit-form input[name='year']").val()),
1291				name: $.trim($("#garage-edit-form [name='car_name']").val()),
1292				ownerTypeId: $.trim($("#garage-edit-form select[name='ownertype_id']").val()),
1293				vin: $.trim($("#garage-edit-form input[name='vin']").val()),
1294				mileage: $.trim($("#garage-edit-form input[name='mileage']").val()),
1295				engine: $.trim($("#garage-edit-form [name='engine']").val()),
1296				color: $.trim($("#garage-edit-form [name='color']").val()),
1297			};
1298
1299			$.post('/garage/edit/'+id, {fields: fields}, function(data){
1300
1301				frm.removeClass("disabled");
1302
1303				if (data.status == 'error') {
1304
1305					if (data.errors) {
1306
1307						if (data.errors.vin) {
1308							frm.find("input[name='vin']").parent().addClass('error');
1309							frm.find("input[name='vin']").parent().find('.error-text').html(data.errors.vin);
1310						} else {
1311							frm.find("input[name='vin']").parent().removeClass('error');
1312						}
1313
1314						if (data.errors.mileage) {
1315							frm.find("input[name='mileage']").parent().addClass('error');
1316							frm.find("input[name='mileage']").parent().find('.error-text').html(data.errors.mileage);
1317						} else {
1318							frm.find("input[name='mileage']").parent().removeClass('error');
1319						}
1320
1321						if (data.errors.engine) {
1322							frm.find("input[name='engine']").parent().addClass('error');
1323							frm.find("input[name='engine']").parent().find('.error-text').html(data.errors.engine);
1324						} else {
1325							frm.find("input[name='engine']").parent().removeClass('error');
1326						}
1327
1328						if (data.errors.color) {
1329							frm.find("input[name='color']").parent().addClass('error');
1330							frm.find("input[name='color']").parent().find('.error-text').html(data.errors.color);
1331						} else {
1332							frm.find("input[name='color']").parent().removeClass('error');
1333						}
1334
1335						if (data.errors.name) {
1336							frm.find("input[name='car_name']").parent().addClass('error');
1337							frm.find("input[name='car_name']").parent().find('.error-text').html(data.errors.name);
1338						} else {
1339							frm.find("input[name='car_name']").parent().removeClass('error');
1340						}
1341
1342						if (data.errors.model) {
1343							frm.find("select[name='model_id']").parent().parent().parent().addClass('error');
1344							frm.find("select[name='model_id']").parent().parent().parent().find('.error-text').html(data.errors.model);
1345						} else {
1346							frm.find("select[name='model_id']").parent().parent().parent().removeClass('error');
1347						}
1348
1349						if (data.errors.year) {
1350							frm.find("select[name='year']").parent().parent().parent().addClass('error');
1351							frm.find("select[name='year']").parent().parent().parent().find('.error-text').html(data.errors.year);
1352						} else {
1353							frm.find("select[name='year']").parent().parent().parent().removeClass('error');
1354						}
1355
1356						if (data.errors.ownertype) {
1357							frm.find("select[name='ownertype_id']").parent().parent().parent().addClass('error');
1358							frm.find("select[name='ownertype_id']").parent().parent().parent().find('.error-text').html(data.errors.ownertype);
1359						} else {
1360							frm.find("select[name='ownertype_id']").parent().parent().parent().removeClass('error');
1361						}
1362
1363					} else {
1364						message("Ошибка!|||"+data.message);
1365					}
1366				} else {
1367					location.href = '/garage/item/'+id;
1368				}
1369			}, 'json');
1370		} else {
1371			var err = frm.find(".error:eq(0)");
1372			if (err.length) {
1373				$("html,body").stop().animate({scrollTop: err.offset().top-50}, 200);
1374			}
1375		}
1376
1377		return false;
1378	});
1379
1380
1381	$("#garage-vin-form").submit(function(){
1382
1383		var frm = $(this);
1384
1385		if (frm.valid()) {
1386
1387			if (frm.hasClass("disabled"))
1388    			return false;
1389
1390			frm.addClass("disabled");
1391
1392			var id = parseInt(frm.attr('data-id')) || 0;
1393
1394			var fields = {
1395				vin: $.trim($("#garage-vin-form input[name='vin0']").val()),
1396			};
1397
1398			$.post('/garage/findvin', {fields: fields}, function(data){
1399
1400				frm.removeClass("disabled");
1401
1402				if (data.status == 'error') {
1403
1404					if (data.errors) {
1405
1406						if (data.errors.vin) {
1407							frm.find("input[name='vin0']").parent().addClass('error');
1408							frm.find("input[name='vin0']").parent().find('.error-text').html(data.errors.vin);
1409						} else {
1410							frm.find("input[name='vin0']").parent().removeClass('error');
1411						}
1412
1413					} else {
1414						message("Ошибка!|||"+data.message);
1415					}
1416				} else {
1417					//console.log(data);
1418
1419					$("#garage-add-form select[name='model_id']").val(data.model_id);
1420					setTimeout(function(){
1421						$("#garage-add-form select[name='model_id']").selectric("update");
1422					}, 5);
1423
1424					$("#garage-add-form input[name='year']").val(data.year);
1425
1426					if (data.engine)
1427						$("#garage-add-form input[name='engine']").val(data.engine);
1428
1429					/*setTimeout(function(){
1430						$("#garage-add-form select[name='year']").selectric("update");
1431					}, 5);*/
1432				}
1433			}, 'json');
1434		}
1435
1436		return false;
1437	});
1438
1439	$("#garage-add-form select[name='model_id'], #garage-edit-form select[name='model_id']").change(function(){
1440		var val = $.trim($(this).val());
1441		if (val.length > 0) {
1442			$(".model_name-wrapper").hide();
1443		} else {
1444			$(".model_name-wrapper").show();
1445		}
1446		return false;
1447	});
1448	
1449});

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.