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 $2 $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, "&") 431 .replace(/</g, "<") 432 .replace(/>/g, ">") 433 .replace(/"/g, """) 434 .replace(/'/g, "'"); 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.