PageSourceSearch

https://www.major-rentacar.ru/js/fw.Mammon.js?v=5

js major-rentacar.ru collected 2026-10-05 00:17:57 UTC 17,227 bytes, 567 lines download raw bytes

1var fw_MAMMON = function(){
2	if(typeof(fw_MAMMON) !== "undefined") return fw_MAMMON;
3	var $mammon = {};
4
5	var check = function(value, type, item){
6		var reg = false;
7		//приводим к строке
8		if (value !== undefined && !isNaN(value) && value !== null) value = value + "";
9		if (value === null) value = '';
10		switch(type){
11			case 'ne':
12				if($.empty($.trim(String(value)))) return false;
13				break;
14			case 's':
15				if(value === undefined) return false;
16				break;
17			case 'i'://integer
18				if(value === undefined || isNaN(value*1)) return false;
19				break;
20			/* НИЧЕГО НЕ ДЕЛАЕТ! */
21			case 'c'://checkbox
22				if(value !== undefined && isNaN(value*1)) return false;
23				break;
24			case 'a':
25				if(value === undefined || typeof value !== "object") return false;
26				break;
27			case 'wene':
28				if (value === undefined || $.empty(value))
29					return false;
30				break;
31			case 'mail_list':
32				if (value === undefined) return false;
33				var tmp = value.split(',');
34				reg = /^.+@.+\..+$/;
35				for(var i in tmp){
36					if(!reg.test(tmp[i])) return false;
37				}
38				reg = false;
39				break;
40			case 'regno':
41				if (value === undefined) return false;
42				var translate_to_rus = {'A' : 'А','B':'В','E':'Е','K':'К','M':'М','H':'Н','O':'О','P':'Р','C':'С','T':'Т','Y':'У','X':'Х'};
43				value = value.toUpperCase();
44				for (var en in translate_to_rus){
45					value = value.replace('/'+en+'/g', translate_to_rus[en]);
46				}
47				if(/[^0-9АВЕКМНОРСТУХ]/.test(value) || !/([^\d])([\d]{3})([^\d]+)([\d]{2,3})/.test(value)) return false;
48				break;
49			case 'fl':
50				reg = /^(?:\-?\d+([\.||,]\d{0,})?)?$/;
51				break;
52			case 'code':
53				reg = /^[a-z_0-9]+$/;
54				break;
55			case 'mail':
56				value = value.toLowerCase();
57				reg = /^(.*?<)?[-a-z0-9!#$%&\'*+\/=?^_`{|}~]+(?:\.[-a-z0-9!#$%&\'*+\/=?^_`{|}~]+)*@(?:[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(?:aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[a-z][a-z])>?$/;
58				break;
59			case 'd':
60				reg = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
61				break;
62			case 'ph':
63                reg = /^\+?([0-9- ]{0,5})?([(|-][0-9- ]{0,6}[)|-])?[0-9- ]{5,10}$/;
64				break;
65			case 'vin':
66				value = value.toUpperCase();
67				reg = /^[0-9A-HJ-NPR-Z]+$/;
68				break;
69			case 'reg':
70				reg = item.pattern;
71				break;
72			case 'rus':
73				return !(/[^а-яё\-\ ]/i.test(value));
74				break;
75		}
76		if(reg && (value == undefined || value.search(reg) == -1)){
77			return false;
78		}
79		return true;
80	};
81	 
82	$mammon = {
83		// Доп функция для определения ширины скролла
84		getScrollWidth: function(){
85			// Заводим окружение
86			var scrollWidth;
87			// Возвращаем функцию
88			return function(){
89				if(scrollWidth === undefined){
90					var testContent = $("<div>").html("m</br>r<br/>F</br>l<br/>e</br>s</br>h</br>k</br>a");
91					var testScroll = $('<div>').css({
92						overflowY: "scroll",
93						position: "absolute",
94						width: 50,
95						height: 40,
96						left: 0,
97						top: -40
98					}).append(testContent);
99					testScroll.appendTo($("body:first"));
100					scrollWidth = Math.max(0, testScroll.width() - testContent.width());
101					testScroll.remove();
102				}
103				return scrollWidth;
104			}
105		}(),
106		fixBodyScroll: function(){
107			var $body_scroll_fix = {};
108			var default_options = {
109				fix_class: "body_scroll_fix"
110			};
111			var min_site_width = 0;
112			var lastWidth = 0;
113			var classes_list = {};
114			var has_resize_event = false;
115
116			function setMinSiteWidth(site_width){
117				min_site_width = site_width;
118			}
119			function addToClassesCollection(new_class){
120				classes_list[new_class] = "."+new_class;
121			}
122			function getCollection(){
123				var classes_selector = "";
124				for(var class_selector in classes_list){
125					if(classes_list.hasOwnProperty(class_selector)){
126						classes_selector += classes_list[class_selector]+",";
127					}
128				}
129				classes_selector = classes_selector.substr(0, classes_selector.length - 1);
130				var collection = $(classes_selector);
131				if(collection.length == 0) return false;
132				return collection;
133			}
134			
135			function updateBodyFixScrollWidth(){
136				var collection = getCollection();
137				if(collection){
138					var newWidth = Math.max(parseInt(window.innerWidth)||0, parseInt(document.documentElement.clientWidth)||0) - fw_MAMMON.getScrollWidth();
139					if(newWidth < min_site_width){
140						newWidth = min_site_width;
141					}
142					if(newWidth !== lastWidth){
143						lastWidth = newWidth;
144						collection.css({width:newWidth});
145					}
146				}
147			}
148			
149			function initResizeEvent(){
150				if(!has_resize_event){
151					has_resize_event = true;
152					$(window).bind('resize.fix_body_scroll', function(){
153						updateBodyFixScrollWidth();
154					});
155				}
156			}
157			
158			$body_scroll_fix = {
159				setNewFix: function(custom_options){
160					// Ненадо ничего фиксить, где скролл не изменяет ширину
161					if(fw_MAMMON.getScrollWidth() == 0) return;
162					var options = $.extend({}, default_options, custom_options);
163					// Добавляем новый класс в коллекцию классов
164					addToClassesCollection(options.fix_class);
165					// Вешаем событие на ресайз
166					initResizeEvent();
167					// Запускаем первый раз сразу для обработки имеющихся блоков
168					updateBodyFixScrollWidth();
169				},
170				setMinWidth: setMinSiteWidth,
171				doFix: updateBodyFixScrollWidth
172			};
173			return $body_scroll_fix;
174		}(),
175		objectsEquals: function(first_obj, second_obj, func){
176			if(fw_MAMMON.objCount(first_obj) != fw_MAMMON.objCount(second_obj)) return false;
177			for(var key in first_obj){
178				if(first_obj.hasOwnProperty(key)){
179					if(!second_obj[key]) return false;
180					if(func && typeof(func) == "function"){
181						if(!func(first_obj[key], second_obj[key])){
182							return false;
183						}
184					}
185				}
186			}
187			return true;
188		},
189		objCount:function(obj){
190			var count = 0;
191			for (var k in obj) if (obj.hasOwnProperty(k)) ++count;
192			return count;
193		},
194		setOnBeforeUnload:function(message){
195			window.onbeforeunload = function (evt) {
196				if (typeof evt == "undefined") {
197					evt = window.event;
198				}
199				if (evt) {
200					evt.returnValue = message;
201				}
202				return message;
203			}
204		},
205		clearOnBeforeUnload:function(){
206			window.onbeforeunload = function(){};
207		},
208		// Иногда нужно!
209		serializeObj:function(selector){
210			var serializedObj = {};
211			$(selector).find("input[type!='checkbox'][type!='radio'],select,textarea,input[type='checkbox']:checked,input[type='radio']:checked").each(function(){
212				if(!$.empty($(this).attr("name"))){
213					serializedObj[$(this).attr("name")] = $(this).val();
214				}
215			});
216			return serializedObj;
217		},
218		smartTouchHover: function(){
219			$(document).on("touchstart.smart_touch", ".smart_touch", function(){
220				$(this).addClass('tapped');
221			});
222			$(document).on("touchend.smart_touch", ".smart_touch", function(){
223				$(this).removeClass('tapped');
224			});
225		},
226		serializeObjSmart:function(selector){
227			var serializedObj = {};
228			$(selector).find("input[type!='checkbox'][type!='radio'],select,textarea,input[type='checkbox']:checked,input[type='radio']:checked").each(function(){
229				if(!$.empty($(this).attr("name"))){
230					var name = $(this).attr("name");
231					if(/^.*?\[.*?\]$/.test(name)){
232						var array_name = name.replace(/^(.*?)\[.*?\]$/, "$1");
233						var array_key = name.replace(/^.*?\[(.*?)\]$/, "$1");
234						if(!serializedObj.hasOwnProperty(array_name)){
235							serializedObj[array_name] = $.empty(array_key) ? [] : {};
236						}
237						if($.empty(array_key)){
238							serializedObj[array_name].push($(this).val());
239						}
240						else{
241							serializedObj[array_name][array_key] = $(this).val();
242						}
243					}
244					else{
245						serializedObj[name] = $(this).val();
246					}
247				}
248			});
249			return serializedObj;
250		},
251		serializePost:function(selector){
252			var serializedArray = [];
253			$(selector).find("input[type!='checkbox'][type!='radio'],select,textarea,input[type='checkbox']:checked,input[type='radio']:checked").each(function(){
254				if(!$.empty($(this).attr("name"))){
255					serializedArray[serializedArray.length] = {"name":$(this).attr("name"),"value":$(this).val()};
256				}
257			});
258			return serializedArray;
259		},
260		serializePostWithCKEditor:function(selector){
261			var serializedArray = [];
262			$(selector).find("input[type!='checkbox'][type!='radio'],select,input[type='checkbox']:checked,input[type='radio']:checked").each(function(){
263				if(!$.empty($(this).attr("name"))){
264					serializedArray[serializedArray.length] = {"name":$(this).attr("name"),"value":$(this).val()};
265				}
266			});
267			// Отдельно процессим текстареа:
268			$(selector).find("textarea").each(function(){
269				var $textarea = $mammon.processCKEditor($(this));
270				if(!$.empty($($textarea).attr("name"))){
271					serializedArray[serializedArray.length] = {"name":$($textarea).attr("name"),"value":$($textarea).val()};
272				}
273			});
274			return serializedArray;
275		},
276		processCKEditor:function(textarea){
277			//Проверяем глобальный объект CKEDITOR на странице.
278			if(typeof(CKEDITOR) != "undefined"){
279				//Собираем все textarea в контейнере, пробуем найти их в CKEDITOR.instances 
280				var id = textarea.attr("id");
281				if(CKEDITOR.instances[id] != undefined){
282					CKEDITOR.instances[id].updateElement();
283				}
284			}
285			return textarea;
286		},
287		serializeArr:function(selector){
288			var serializedArray = [];
289			$(selector).find("input[type!='checkbox'][type!='radio'],select,textarea,input[type='checkbox']:checked,input[type='radio']:checked").each(function(){
290				if($(this).attr("name") != undefined){
291					serializedArray[serializedArray.length] = $(this).val();
292				}
293			});
294			return serializedArray;
295		},
296		getPostArray:function(obj){
297			var newArray = [];
298			for(var key in obj){
299				if(obj.hasOwnProperty(key)){
300					var tmpObj = (typeof(obj[key]) === 'object') ? obj[key] : {'name': key, 'value': obj[key]};
301					newArray = newArray.concat(tmpObj);
302				}
303			}
304			return newArray;
305		},
306		getObjFromPost:function(post_data){
307			var newObj = {};
308			for(var i=0; i < post_data.length; i++){
309				if(post_data[i].name === undefined) continue;
310				var name = post_data[i].name.replace(/\[.*\]/,"");
311				// Проверяем имя на массив.
312				var value = post_data[i].value;
313				if(post_data[i].name.match(/\[.*\]/)){
314					var in_bracers = post_data[i].name.replace(/.*\[(.*)\]/,"$1");
315					if(newObj[name] == undefined){
316						newObj[name] = (in_bracers === "")?[]:{};
317					}
318					newObj[name][(in_bracers === "")?newObj[name].length:in_bracers] = value;
319				}
320				else{
321					newObj[name] = value;
322				}
323			}
324			return newObj;
325		},
326		preventDefaultSafe: function(event) {
327			if(!event){
328				event = window.event;
329			}
330			if(event.stopPropagation){
331				event.stopPropagation();
332			}
333			else{
334				event.cancelBubble = true;
335			}
336			if(event.preventDefault){
337				event.preventDefault();
338			}
339			else{
340				event.returnValue = false;
341			}
342		},
343		formattedNumber: function(value, precision){
344			var val = parseFloat(value);
345			precision = isFinite(precision) ? precision : 0;
346			var valueStr = String(val.toFixed(precision)).reverse();
347			valueStr = $.trim((valueStr.replace(/(([0-9]*\.)?[0-9]{3})/g, '$1 ')).reverse());
348			return valueStr;
349		},
350		formattedRegNo: function(regNo){
351			var replacementSimbol = {
352				'А': 'A',
353				'В': 'B',
354				'Е': 'E',
355				'К': 'K',
356				'М': 'M',
357				'Н': 'H',
358				'О': 'O',
359				'Р': 'P',
360				'С': 'C',
361				'Т': 'T',
362				'У': 'Y',
363				'Ð¥': 'X',
364				'Б': 'M',
365				'а': 'A',
366				'в': 'B',
367				'е': 'E',
368				'к': 'K',
369				'м': 'M',
370				'н': 'H',
371				'о': 'O',
372				'р': 'P',
373				'c': 'C',
374				'т': 'T',
375				'у': 'Y',
376				'х': 'X',
377				'б': 'M'
378			};
379			if($.empty(regNo)) return "";
380			return (regNo.strtr(replacementSimbol)).replace(/([^\d])([\d]+)([^\d]+)([\d]+)/, '<span class="number">$1&thinsp;$2&thinsp;$3</span><span class="region">$4</span>');
381		},
382		formattedSimpleRegNo: function(regNo){
383			if($.empty(regNo)) return "Не указан";
384			return regNo.replace(/([^\d])([\d]+)([^\d]+)([\d]+)/, '$1 $2 $3 $4');
385		},
386		addSlashes: function(str) {
387			str = str.replace(/\\?("|')/g, '\\$1');
388			return str;
389		},
390		removeQuotes: function(str) {
391			str = str.replace(/("|')/g, '');
392			return str;
393		},
394		writeStrToCopyContainer:function(include_str){
395			var copy_input = $('<input class="block_to_clipboard_input" type="text" value=""/>').val(include_str);
396			var copy_container = $('<div class="block_to_clipboard"></div>').html(copy_input);
397			var copy_overlay = $('<div class="block_to_clipboard_overlay"></div>');
398			var remove_hook = function(){
399				$(".block_to_clipboard,.block_to_clipboard_overlay").animate({opacity:0},200,function(){
400					$(this).remove();
401				});
402			};
403			copy_input.bind("keyup",remove_hook);
404			copy_overlay.click(remove_hook);
405			$("body:first").append(copy_overlay).append(copy_container);
406			copy_input.select();
407		},
408		isjQueryObj:function(obj){
409			return obj instanceof jQuery;
410		},
411		getNextPropertyInObj:function(current_property_key, obj) {
412			var getProperty = false;
413			for (var key in obj) {
414				if (obj.hasOwnProperty(key)) {
415					if (getProperty) return obj[key];
416					if (key == current_property_key) {
417						getProperty = true;
418					}
419				}
420			}
421			return false;
422		},
423		getDayOfWeek:function(date_variable){
424			var days = ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"];
425			return days[date_variable.getDay()];
426		},
427		escapeHtml:function(unsafe){
428			if(typeof(unsafe) == "string"){
429				return unsafe
430					.replace(/&/g, "&amp;")
431					.replace(/</g, "&lt;")
432					.replace(/>/g, "&gt;")
433					.replace(/"/g, "&quot;")
434					.replace(/'/g, "&#039;");
435			}
436			return unsafe;
437		},
438		/**
439		 * Валидирует список значений.
440		 * @param values assoc array[
441		 * 		{name1 : value1},
442		 * 		...
443		 * 		{name2 : value2}
444		 * ]
445		 * @param validations array of objects [
446		 * 		name1 : {
447		 *     		type : 'i:ne', //httpDataLib type
448		 *			message : 'errmessage1'
449		 *			pattern : regExp //если type = 'reg'
450		 * 		},
451		 * 		...
452		 * 		name2 : {
453		 *     		type : type2,
454		 *			message : 'errmessage2'
455		 * 		}...
456		 * 	]
457		 * @returns {boolean} || {array}
458		 */
459		validateAll : function(form_fields, validations){
460			console.log(validations);
461			var i, j,
462				errors = {};
463			for(i in validations){
464				var types = validations[i].type.split(':');
465				for(j = 0; j < types.length ; j++){
466					if(!check(form_fields[i], types[j], validations[i])){
467						errors[i] = validations[i];
468					}
469				}
470			}
471			return $.empty(errors) ? false : errors;
472		},
473		/**
474		 * Валидирует одно значение
475		 * @param value
476		 * @param item object {type : 'i:ne', message : 'errmessage1', pattern : regExp}
477		 * @returns {boolean} || {array}
478		 */
479		validate : function(value, item){
480			var types = item.type.split(':'),
481				j,
482				errors = [];
483			for(j = 0; j < types.length ; j++){
484				if(!check(value, types[j], item)){
485					errors.push(item);
486				}
487			}
488			return $.empty(errors) ? false : errors;
489		},
490		// Функция имеет право дописываться.
491		markBodyByDevice: function(){
492			if($mammon.isiPhone()){
493				$("html:first").addClass("is_iphone");
494			}
495		},
496		isMobileDevice : function() {
497			return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|touch/i.test(navigator.userAgent);
498		},
499		isMobileDeviceWithoutViewPort : function() {
500			return $mammon.isMobileDevice() && $("meta[name=viewport]").length == 0;
501		},
502		isiPhone : function() {
503			return /iPhone/i.test(navigator.userAgent);
504		},
505		isiPad : function() {
506			return /iPad/i.test(navigator.userAgent);
507		},
508		lteIE7 : function() {
509			return document.all && !document.querySelector;
510		},
511		isIE7 : function() {
512			return navigator.appVersion.indexOf("MSIE 7.") != -1;
513		},
514		isIE8 : function() {
515			return (navigator.userAgent.indexOf('IE 8') != -1);
516		},
517		isIE : function() {
518			return /MSIE (\d+\.\d+);|Trident\/7.0/.test(navigator.userAgent);
519		},
520		getEnglishDateString:function(str) {
521			var monthes = {
522				"Январь":"January",
523				"Февраль":"February",
524				"Март":"March",
525				"Апрель":"April",
526				"Август":"August",
527				"Сентябрь":"September",
528				"Октябрь":"October",
529				"Ноябрь":"November",
530				"Декабрь":"December"
531			};
532			for (var val in monthes) {
533				str = str.replace(val,monthes[val]);
534			}
535			return str;
536		},
537		morph: function(value, word0, word1, word2){
538			if(/1\d$/.test(value)){
539				return word2;
540			}
541			else if(/1$/.test(value)){
542				return word0;
543			}
544			else if(/(2|3|4)$/.test(value)){
545				return word1;
546			}
547			else{
548				return word2;
549			}
550		},
551		getFirstZIndexFromParents: function(obj){
552			var parents = $(obj).parents(),
553				zIndex = 0;
554			parents.each(function(){
555				if(this.style && this.style.zIndex){
556					zIndex = this.style.zIndex | 0;
557					return false;
558				}
559			});
560			return zIndex;
561		},
562		getPhoneBody: function(phone, country_code){
563			return "" + (country_code || "+7") + phone.replace(/[\D]/g, "");
564		}
565	};
566	return $mammon;
567}();

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.