PageSourceSearch

https://kuplu-nissan.ru/wp-content/themes/nissan/inc/ox_forms/data/base/js/script.js

js kuplu-nissan.ru collected 2026-10-06 00:18:20 UTC 11,648 bytes, 455 lines download raw bytes

1function oxInitForm(selector, onsend = false){
2	var res = {};
3	res.form = hjq(selector).first();
4	res.button = res.form.find('input.send');
5	res.result = res.form.find('div.result');;
6	res.blocks = [];
7	
8	res.form.find('input.req, select.req').each(function(index, item){
9		var jitem = hjq(item); 
10		var parent = jitem.closest('.block');
11		if (parent.hasClass('act'))
12			jitem.attr('required', true);
13	});
14	
15	res.form.find('.block').each(function(index, item){
16		var block = hjq(item);
17		block.oxShow = function(){
18			block.addClass('act');
19			block.find('input.req, select.req').each(function(index, item){
20				var jitem = hjq(item); 
21				var parent = jitem.closest('.block');
22				if (parent.is(block) || parent.css('display') != 'none')
23					jitem.attr('required', true);
24			});
25			block.slideDown(400, function(){
26				$html = hjq('html');
27				var bt = block.offset().top;
28				var bb = bt + block.height();
29				var ht = $html.scrollTop();
30				var hb = ht + hjq(window).height();
31				var n = -1;
32				if (bt < ht)
33					n = bt;
34				else if (bb > hb){
35					n = ht + (bb - hb);
36					if (n > bt)
37						n = bt;
38				}
39				if (n >= 0){
40					$html.animate({
41						scrollTop: n
42					}, 400);
43				}
44			});
45		};
46		block.oxHide = function(desact = false){
47			if (desact)
48				block.removeClass('act');
49			block.slideUp();
50			block.find('input.req, select.req').attr('required', false);
51		};
52		block.oxIsShow = function(){
53			return block.css('display') != 'none';
54		};
55		block.setState = function(vis, deact){
56			if (vis == this.oxIsShow())
57				return;
58			if (vis)
59				this.oxShow()
60			else
61				this.oxHide(deact);
62		};
63		res.blocks[item.id] = block;
64	});
65	
66	res.form.find('.radio_buttons input[type="radio"]').change(function(){
67		var input = hjq(this);
68		input.closest('.radio_buttons').find('label').removeClass('active');
69		input.closest('label').addClass('active');
70	});
71	
72	res.form.find('.radio_buttons input[type="radio"]').each(function(index, item){
73		if (this.checked)
74			hjq(this).closest('label').addClass('active');
75	});
76	
77	res.form.find('div.slider_cont.one, div.slider_cont.simple_one').each(function(index, item){
78		var div = hjq(item);
79		var sinput = div.find('input.slider_input');
80		var hinput = div.find('input.res');
81		var cval = 0;
82		
83		function getSVal(){
84			var val = sinput.val().replace(/[^0-9]/gim, '');
85			if (val < div.data('min'))
86				cval = div.data('min');
87			else if (val > div.data('max'))
88				cval = div.data('max');
89			else
90				cval = val;
91		}
92		
93		function setSVal(){
94			hinput.val(cval);
95			if (sinput.length)
96				sinput.val(cval.toString().replace(/(d)(?=(d{3})+(?!d))/g, '$1 '));
97		}
98		
99		if (sinput.length)
100			getSVal();
101		else
102			cval = hinput.val();
103		setSVal();
104		var sc = div.find('div.slider');
105		sc.slider({
106			animate: 'fast',
107			min: div.data('min'),
108			max: div.data('max'),
109			value: cval,
110			range: 'min',
111			step: parseInt(div.data('step')),
112			slide: function(event, ui){
113				cval = ui.value;
114				setSVal();
115			}
116		});
117		
118		if (sinput.length){
119			var time = false;
120			sinput.keyup(function(){
121				clearTimeout(time);
122				time = setTimeout(function(){
123					getSVal();
124					setSVal();
125					sc.slider('value', cval);
126				}, 2000);
127			});
128		}
129	});
130	
131	res.form.find('div.slider_cont.two').each(function(index, item){
132		var div = hjq(item);
133		var sinputs = div.find('input.slider_input');
134		var hinputs = div.find('input.res');
135		var cvals = [0, 0];
136		
137		function getSVals(index = -1){
138			start = index < 0 ? 0 : index;
139			end = index < 0 ? sinputs.length : index + 1;
140			for (i = start; i < end; i++){
141				var val = sinputs[i].value.replace(/[^0-9]/gim, '');
142				if (val < div.data('min'))
143					cvals[i] = div.data('min');
144				else if (val > div.data('max'))
145					cvals[i] = div.data('max');
146				else
147					cvals[i] = val;
148			}
149			if (index >= 0){
150				if (index == 0){
151					if (cvals[0] > cvals[1])
152						cvals[0] = cvals[1];
153				}
154				else{
155					if (cvals[1] < cvals[0])
156						cvals[1] = cvals[0];
157				}
158			}
159		}
160		
161		function setSVals(){
162			for (i = 0; i < sinputs.length; i++){
163				sinputs[i].value = cvals[i].toString().replace(/(d)(?=(d{3})+(?!d))/g, '$1 ');
164				hinputs[i].value = cvals[i];
165			}
166		}
167		
168		getSVals(); 
169		setSVals();
170		var sc = div.find('div.slider');
171		sc.slider({
172			animate: 'fast',
173			min: div.data('min'),
174			max: div.data('max'),
175			values: cvals,
176			range: true,
177			step: parseInt(div.data('step')),
178			slide: function(event, ui){
179				cvals = ui.values;
180				setSVals();
181			}
182		}); 
183		
184		var times = [false, false];
185		sinputs.keyup(function(){
186			var index = sinputs.index(this);
187			clearTimeout(times[index]);
188			times[index] = setTimeout(function(){
189				getSVals(index);
190				setSVals();
191				sc.slider('values', cvals);
192			}, 2000);
193		});
194	});
195
196	hjq.mask.definitions['h']='[4|9]';
197	res.form.find('input.phone').mask('+7(h99) 999-99-99');
198	res.form.find('input.passport_series').mask('99-99');
199	res.form.find('input.passport_number').mask('999999');
200	res.form.find('input.passport_sn').mask('9999 999999');
201	res.form.find('input.passport_depcode').mask('999-999');
202	
203	res.form.find('.notice').mouseover(function(e){
204		if (e.target == this)
205			hjq(this).find('.notice_text').fadeIn();
206	});
207	
208	res.form.find('.notice').mouseout(function(){
209		hjq(this).find('.notice_text').fadeOut();
210	});
211	
212	res.form.find('input.kladr').each(function(index, item){
213		var input = hjq(item);
214		var selected = false;
215		input.kladr({
216			type: hjq.kladr.type.city,
217			withParents: true,
218			labelFormat: function(obj, query){
219				var label = '';
220
221				var name = obj.name.toLowerCase();
222				query = query.name.toLowerCase();
223
224				var start = name.indexOf(query);
225				start = start > 0 ? start : 0;
226
227				if (obj.typeShort)
228					label += obj.typeShort + '. ';
229
230				if (query.length < obj.name.length) {
231					label += obj.name.substr(0, start);
232					label += '<strong>' + obj.name.substr(start, query.length) + '</strong>';
233					label += obj.name.substr(start + query.length, obj.name.length - query.length - start);
234				}
235				else
236					label += '<strong>' + obj.name + '</strong>';
237
238				if (obj.parents){
239					for (var k = obj.parents.length - 1; k > -1; k--){
240						var parent = obj.parents[k];
241						if (parent.name) {
242							if (label) label += '<small>, </small>';
243							label += '<small>' + parent.name + ' ' + parent.typeShort + '.</small>';
244						}
245					}
246				}
247
248				return label;
249			},
250			select: function(obj){
251				var city = obj.typeShort + '. ' + obj.name;
252				var region = city;
253				var text = city;
254				obj.parents.forEach(function(item, index){
255					if (item.contentType == 'region'){
256						region = item.name + ' ' + item.typeShort + '.';
257						text += ', ' + region;
258					}
259				});
260				input.val(text);
261				res.form.find('input[name="city"]').val(city);
262				res.form.find('input[name="region"]').val(region);
263				selected = true;
264			}
265		});
266		input.blur(function(){
267			if (!selected)
268				input.val('');
269		});
270	});
271	
272	res.form.find('.kladr_v2').each(function(index, item){
273		var cont = hjq(item);
274		var city_selected = false;
275		var icity = cont.find('.kl_city');
276		icity.val('');
277		var rregions = cont.find('input.region');
278		var rcities = cont.find('input.city');
279		
280		function setVal(inputs, code, name){
281			inputs.each(function(index, item){
282				var $item = hjq(item);
283				$item.val($item.hasClass('code') ? code : name);
284			});
285		}
286		
287		var istreet = cont.find('.kl_street');
288		if (istreet.length){
289			istreet.val('');
290			istreet.prop('disabled', true);
291			var rstreets = cont.find('input.street');
292			var street_selected = false;
293			
294			istreet.kladr({
295				type: hjq.kladr.type.street,
296				parentType: hjq.kladr.type.city,
297				verify: true,
298				check: function(obj){
299					if (!obj){
300						street_selected = false;
301						istreet.val('');
302					}
303				},
304				select: function(obj){
305					var text = obj.typeShort + '. ' + obj.name;
306					istreet.val(text);
307					setVal(rstreets, obj.id, text);
308					street_selected = true;
309				}
310			});
311			
312			istreet.blur(function(){
313				if (!street_selected)
314					istreet.val('');
315			});
316		}
317		
318		icity.kladr({
319			type: hjq.kladr.type.city,
320			withParents: true,
321			verify: true,
322			check: function(obj){
323				if (!obj){
324					city_selected = false;
325					icity.val('');
326					if (istreet.length){
327						street_selected = false;
328						istreet.val('');
329						istreet.prop('disabled', true);
330					}
331				}
332			},
333			labelFormat: function(obj, query){
334				var label = '';
335
336				var name = obj.name.toLowerCase();
337				query = query.name.toLowerCase();
338
339				var start = name.indexOf(query);
340				start = start > 0 ? start : 0;
341
342				if (obj.typeShort)
343					label += obj.typeShort + '. ';
344
345				if (query.length < obj.name.length) {
346					label += obj.name.substr(0, start);
347					label += '<strong>' + obj.name.substr(start, query.length) + '</strong>';
348					label += obj.name.substr(start + query.length, obj.name.length - query.length - start);
349				}
350				else
351					label += '<strong>' + obj.name + '</strong>';
352
353				if (obj.parents){
354					for (var k = obj.parents.length - 1; k > -1; k--){
355						var parent = obj.parents[k];
356						if (parent.name) {
357							if (label) label += '<small>, </small>';
358							label += '<small>' + parent.name + ' ' + parent.typeShort + '.</small>';
359						}
360					}
361				}
362
363				return label;
364			},
365			select: function(obj){
366				var city = {name: obj.typeShort + '. ' + obj.name, code: obj.id};
367				var region = city;
368				var text = city.name;
369				obj.parents.forEach(function(item, index){
370					if (item.contentType == 'region'){
371						region = {name: item.name + ' ' + item.typeShort + '.', code: item.id};
372						text += ', ' + region.name;
373					}
374				});
375				icity.val(text);
376				setVal(rcities, city.code, city.name);
377				setVal(rregions, region.code, region.name);
378				city_selected = true;
379				if (istreet.length){
380					istreet.kladr('parentId', city.code);
381					istreet.prop('disabled', false);
382				}
383			}
384		});
385		
386		icity.blur(function(){
387			if (!city_selected)
388				icity.val('');
389		});
390	});
391	
392	res.sended = false;
393	res.sendForm = function (debug = false){
394		if (res.sended && !debug)
395			return;
396		
397		function isFunction(functionToCheck){
398			return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
399		}
400		
401		res.sended = true;
402		res.result.text('');
403		var send_data = {
404			source: window.location.href
405		};
406		res.form.find('input.res, select.res').each(function(index, item){
407			if ((item.type != 'radio' && item.type != 'checkbox') || item.checked){
408				var jitem = hjq(item); 
409				var parent = jitem.closest('.block');
410				if (parent.length == 0 || (parent.closest('.ox_form').is(res.form) && parent.hasClass('act'))){
411					var val = item.value;
412					if (jitem.hasClass('x30'))
413						val = val * 30;
414					send_data[item.name] = val;
415				} 
416			}
417		});
418		if (!debug){
419			if (isFunction(window.before_ox_form_send))
420				window.before_ox_form_send(send_data);
421			hjq.ajax({
422				method: 'POST',
423				url: '//ox.dev.ndkl.ru/api/records.send',
424				data: send_data, 
425				dataType: 'json',
426				success: function(data){
427					res.sended = data.status == 'ok';
428					res.result.text(res.sended ? 'Заявка успешно отправлена' : (data.message ? data.message : 'Произошла ошибка'));
429					if (onsend !== false)
430						onsend(data);
431					if (isFunction(window.after_ox_form_send))
432						window.after_ox_form_send(send_data, res.sended ? 'success' : 'error');
433				},
434				error: function(){
435					res.result.text('Произошла ошибка');
436					res.sended = false;
437					if (onsend !== false)
438						onsend(false);
439					if (isFunction(window.after_ox_form_send))
440						window.after_ox_form_send(send_data, 'error');
441				}
442			});
443		}
444		else
445			console.log(send_data);
446	}
447	
448	return res;
449}
450
451
452	
453
454
455

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.