1var site_id = ""; 2var cur_pos = 0; 3var cart_page = "N"; 4 5function getChar(evt) { 6 evt = (evt) ? evt : window.event; 7 var charCode = (evt.which) ? evt.which : evt.keyCode; 8 if (charCode > 31 && (charCode < 46 || charCode > 57)) { 9 return null; 10 } 11 return true; 12} 13 14 15 16function mobileMenuPositionFooter() { 17 if ($('.open-menu-mobile').height() > ($( 18 'div.open-menu-mobile div.menu-mobile-inner').outerHeight() + $( 19 'div.open-menu-mobile div.foot-wrap').outerHeight(true))) $( 20 'div.open-menu-mobile div.foot-wrap').addClass('absolute'); 21 else { 22 $('div.open-menu-mobile div.foot-wrap').removeClass('absolute'); 23 } 24} 25 26function openMenuFooterPos() { 27 var totalHeight = $('.open-menu .head-menu-wrap').outerHeight(true) + $( 28 '.open-menu .body-menu').outerHeight(true) + $( 29 '.open-menu .footer-menu-wrap').outerHeight(true); 30 var needHeight = $('.open-menu').height() - totalHeight + $( 31 '.open-menu .body-menu').outerHeight(); 32 if ($(window).height() > totalHeight) $('.open-menu .body-menu').css( 33 'min-height', needHeight + 'px'); 34} 35 36function constructorResizeVideo() { 37 var win_height = $('div.video-modal').height(); 38 var modal = 590; 39 if ($(window).width() > 767) { 40 if (win_height > modal) $("div.video-modal div.constructor-modal-dialog").addClass( 41 'pos-absolute'); 42 else { 43 $("div.video-modal div.constructor-modal-dialog").removeClass('pos-absolute'); 44 } 45 } else { 46 $("div.video-modal div.constructor-modal-dialog").addClass('pos-absolute'); 47 } 48} 49 50function scrollToBlock(dist, elem) { 51 52 if(elem) 53 { 54 $('div.wrapper').removeClass('blur'); 55 $("body").removeClass("modal-open"); 56 $("div.modalArea").children().remove(); 57 58 var moreDist = 0; 59 if ($('header').hasClass("fixed")) moreDist = 70; 60 if ($('div').is(".catalog-card-wrap") || $('div').is(".catalog-list-wrap")) { 61 moreDist = 40; 62 if ($('header').hasClass("fixed")) moreDist = 110; 63 if (elem) { 64 if (elem.hasClass('review')) moreDist = 130; 65 } 66 } 67 68 var destinationhref = parseInt($(dist).offset().top - moreDist); 69 70 $("html:not(:animated),body:not(:animated)").animate({ 71 scrollTop: destinationhref 72 }, 1000, "linear", function() { 73 74 setTimeout( 75 function(){ 76 77 if( 100 < Math.abs(parseInt($(dist).offset().top - moreDist) - destinationhref) ) 78 { 79 $("html:not(:animated),body:not(:animated)").animate({ 80 scrollTop: parseInt($(dist).offset().top - moreDist) 81 }, 300, "linear"); 82 } 83 }, 300); 84 } 85 ); 86 87 } 88} 89 90function timerCookie(form) { 91 var timeout = true; 92 var timerVal = form.find('input.timerVal').val(); 93 var forCookieTime = parseFloat(form.find('input.forCookieTime').val()); 94 var totalTime = 0; 95 var mainTime = new Date().getTime(); 96 var idElem = form.find("input[name='element']").val(); 97 var idSect = form.find('input.idSect').val(); 98 var firstEnter = BX.getCookie('_constructorFirstEnter' + idSect + idElem); 99 var firstEnterVal = BX.getCookie('_constructorFirstEnterVal' + idSect + idElem); 100 101 setTimeout(function() { 102 form.css('min-height', form.outerHeight()); 103 }, 100); 104 form.find('.constructortimer').addClass('active'); 105 106 if(forCookieTime <= 0) 107 forCookieTime = 1; 108 109 110 if (typeof(firstEnter) == "undefined" || firstEnterVal != timerVal) { 111 112 113 BX.setCookie('_constructorFirstEnter' + idSect + idElem, mainTime, { 114 expires: forCookieTime * 60 * 60 115 }); 116 BX.setCookie('_constructorFirstEnterVal' + idSect + idElem, timerVal, { 117 expires: forCookieTime * 60 * 60 118 }); 119 firstEnter = BX.getCookie('_constructorFirstEnter' + idSect + idElem); 120 firstEnterVal = BX.getCookie('_constructorFirstEnterVal' + idSect + idElem); 121 } 122 123 124 totalTime = ((mainTime - firstEnter) / 1000).toFixed(); 125 126 127 if (totalTime < timerVal * 60) timerVal = timerVal * 60 - totalTime; 128 else{ 129 timeout = false; 130 } 131 132 133 134 if (timeout) form.find('.constructortimer').countdown({ 135 until: timerVal,
136 format: 'HMS', 137 onExpiry: liftOff, 138 layout: form.find('.constructortimer').html() 139 }, $.countdown.regionalOptions['ru']); 140 else { 141 form.find('.questions').removeClass('active'); 142 form.find('.timeout_text').addClass('active'); 143 } 144 145 function liftOff() { 146 form.find('.questions').removeClass('active'); 147 form.find('.timeout_text').addClass('active'); 148 } 149} 150 151function parseCount(newVal, step, minVal) { 152 var ost = newVal % step; 153 var step_ = step - ost; 154 155 newVal = newVal - minVal; 156 newVal -= (newVal % step); 157 158 if(step_ >= ost) 159 { 160 newVal += minVal; 161 } 162 163 else 164 { 165 newVal += minVal + step; 166 } 167 168 169 if (newVal <= minVal || isNaN(newVal)) 170 newVal = minVal; 171 172 return newVal; 173} 174 175function formatNum(val) { 176 val = String(val).replace(/(\d)(?=(\d{3})+([^\d]|$))/g, '$1 '); 177 return val; 178} 179 180 181function formAttentionScroll(dist, parent) { 182 parent.animate({ 183 scrollTop: dist 184 }, 700); 185} 186 187 188 189$(document).on('change', ".form.send input[type='file']", 190 function(){ 191 192 var inp = $(this); 193 var file_list_name = ""; 194 195 $(inp[0].files).each( 196 function(key){ 197 file_list_name += "<span>"+inp[0].files[key].name+"</span><br/>"; 198 } 199 ); 200 201 202 if(!file_list_name.length) 203 return; 204 205 inp.parents('form.send').addClass('file-download'); 206 inp.parents('label').find('.area-files-name').html(file_list_name); 207 inp.parents('label').removeClass("area-file"); 208 inp.closest('.load-file').removeClass("has-error"); 209 210 } 211); 212 213 214 215 216$(document).on("click", "form.form input[type='checkbox']", function() { 217 $(this).parents("div.wrap-agree").removeClass("has-error"); 218}); 219 220 221 222function validGroupCheckbox(arParams){ 223 224 var error = 0; 225 226 for (key in arParams){ 227 228 var cheked = false; 229 230 for (var i = 0; i < arParams[key].length; i++){ 231 232 if(arParams[key][i].checked) 233 cheked = true; 234 } 235 236 if(!cheked) 237 { 238 if(error == 0) 239 error = 1; 240 241 for (var i = 0; i < arParams[key].length; i++){ 242 243 $(arParams[key][i]).addClass('has-error'); 244 } 245 } 246 } 247 248 return error; 249} 250 251function validGroupSelect(arParams){ 252 var error = 0; 253 254 for (key in arParams){ 255 256 var cheked = false; 257 258 for (var i = 0; i < arParams[key].length; i++){ 259 260 if(arParams[key][i].checked) 261 cheked = true; 262 } 263 264 if(!cheked) 265 { 266 if(error == 0) 267 error = 1; 268 269 $(arParams[key][0]).parents(".form-select").addClass('has-error'); 270 } 271 } 272 return error; 273} 274 275 276function sendForm(arParams) 277{ 278 279 var error = 0, 280 formSendAll = new FormData(), 281 actionGoals = "CALLBACK"; 282 283 if(arParams.form_block.attr("id")) 284 formSendAll.append("element", arParams.form_block.attr("id").replace("form-", "")); 285 286 formSendAll.append("send", "Y"); 287 formSendAll.append("tmpl_path", $("input.tmpl_path").val()); 288 /*formSendAll.append("typeForm", arParams.typeForm); 289 formSendAll.append("fromBasket", arParams.fromBasket);*/ 290 formSendAll.append("site_id", $("input.site_id").val()); 291 formSendAll.append("url", decodeURIComponent(location.href)); 292 293 294 if(arParams.form_block.hasClass('form-page-cart')) 295 actionGoals = "ORDER"; 296 else if(arParams.form_block.hasClass('fast-order')) 297 actionGoals = "FAST_ORDER"; 298 299 300 301 302 for (var i = 1; i <= 10; i++){ 303 if($("input#custom-input-"+i).val().length>0) 304 formSendAll.append("custom-input-"+i, $("input#custom-input-"+i).val()); 305 } 306 307 308 if (typeof(arParams.agreecheck.val()) != "undefined") { 309 if (!arParams.agreecheck.prop("checked")) { 310 arParams.agreecheck.parents("div.wrap-agree").addClass("has-error"); 311 error = 1; 312 } 313 } 314 $("input[type='email'], input[type='text'], input[type='password'], textarea", arParams.form_block).each( 315 function(key, value) { 316 if ($(this).hasClass("email") && $(this).val().length > 0) { 317 if (!( 318 /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/ 319 ).test($(this).val())) { 320 $(this).parent("div.input").addClass("has-error"); 321 error = 1; 322 } 323 } 324 if ($(this).hasClass("require")) { 325 if ($(this).val().trim().length <= 0){ 326 $(this).val(""); 327 $(this).parent("div.input").addClass("has-error"); 328 error = 1; 329 } 330 } 331 } 332 ); 333 334 335 $("input[type='file']", arParams.form_block).each(function(key, value) { 336 if ($(this).hasClass("require")) { 337 if ($(this).closest('.load-file').find('span.area-file').hasClass( 338 'area-file')) { 339 $(this).closest('.load-file').addClass("has-error"); 340 error = 1; 341 } 342 } 343 });
344 345 346 347 if (!$('.constructor-modal').hasClass('form-modal')) 348 { 349 var otherHeight = 0; 350 351 if ($('header').hasClass('fixed')) 352 otherHeight = $('header .header-top').outerHeight(true); 353 354 } 355 356 357 358 var arChecbox = {}, newKey = null; 359 360 $("input.check-require[type='checkbox']", arParams.form_block).each( 361 function(key, value) 362 { 363 newKey = $(this).attr('name').replace("[]", ""); 364 365 if(typeof arChecbox[newKey] == "undefined") 366 arChecbox[newKey] = []; 367 368 arChecbox[newKey].push(this); 369 } 370 ); 371 372 if(newKey) 373 error = validGroupCheckbox(arChecbox); 374 375 delete arChecbox; 376 newKey = null; 377 378 var arRadio = {}; 379 $(".select-require input.opinion[type='radio']", arParams.form_block).each( 380 function(key, value) 381 { 382 newKey = $(this).attr('name'); 383 384 if(typeof arRadio[newKey] == "undefined") 385 arRadio[newKey] = []; 386 387 arRadio[newKey].push(this); 388 } 389 ); 390 391 if(newKey) 392 error = validGroupSelect(arRadio); 393 394 delete arChecbox; 395 newKey = null; 396 397 398 399 if (error == 1) { 400 if ($('.constructor-modal').hasClass('form-modal')) 401 { 402 formAttentionScroll(arParams.form_block.find('.has-error:first').offset().top - arParams.form_block.parents( 403 '.constructor-modal-dialog').offset().top, arParams.form_block.parents(".constructor-modal")); 404 } 405 else if (arParams.form_block.hasClass('form-cart') && !arParams.form_block.hasClass('form-page-cart')) 406 { 407 formAttentionScroll(arParams.form_block.find('.has-error:first').offset().top - arParams.form_block.parents(".body").offset().top, arParams.form_block.parents(".cart-parent")); 408 } 409 else 410 { 411 formAttentionScroll(arParams.form_block.find('.has-error:first').offset().top - otherHeight, $("html:not(:animated),body:not(:animated)")); 412 } 413 } 414 if (error == 0) { 415 arParams.form_block.css({ 416 "height": arParams.form_block.outerHeight() + "px" 417 }); 418 419 form_arr = arParams.form_block.find(':input,select,textarea').serializeArray(); 420 421 for (var i = 0; i < form_arr.length; i++) 422 { 423 formSendAll.append(form_arr[i].name, form_arr[i].value); 424 }; 425 426 if (arParams.form_block.hasClass('file-download')) 427 { 428 arParams.form_block.find('input[type=file]').each(function(key) 429 { 430 431 var inp = $(this); 432 var file_list_name = ""; 433 434 $(inp[0].files).each( 435 function(k){ 436 formSendAll.append(inp.attr('name'), inp[0].files[k], inp[0].files[k].name); 437 } 438 ); 439 440 }); 441 } 442 443 if(arParams.captchaToken.length>0) 444 formSendAll.append("captchaToken", arParams.captchaToken); 445 446 447 arParams.button.removeClass("active"); 448 arParams.load.addClass("active"); 449 setTimeout(function() { 450 $.ajax({
451 url: arParams.path, 452 type: "post", 453 contentType: false, 454 processData: false, 455 data: formSendAll, 456 dataType: 'json', 457 success: function(json) { 458 /*$("body").append(json);*/ 459 460 461 if (json.OK == "N") { 462 arParams.button.addClass("active"); 463 arParams.load.removeClass("active"); 464 } 465 if (json.OK == "Y") 466 { 467 if (!arParams.form_block.hasClass('form-page-cart')) 468 { 469 arParams.questions.removeClass("active"); 470 arParams.thank.addClass("active"); 471 } 472 473 if(actionGoals=="CALLBACK") 474 addGoal(actionGoals); 475 476 477 $.ajax({
478 url: "/", 479 type: "post", 480 success: function(json) {} 481 }); 482 483 setTimeout(function() { 484 if ($('.constructor-modal').hasClass('form-modal')) 485 formAttentionScroll(arParams.form_block.find('.thank').offset().top - arParams.form_block.parents( 486 '.constructor-modal-dialog').offset().top, arParams.form_block.parents(".constructor-modal")); 487 else if (arParams.form_block.hasClass('form-cart') && !arParams.form_block.hasClass('form-page-cart')) { 488 formAttentionScroll(arParams.form_block.find('.thank').offset().top - arParams.form_block.parents( 489 ".body").offset().top, arParams.form_block.parents(".cart-parent")); 490 } else { 491 formAttentionScroll(arParams.form_block.find('.thank').offset().top - 492 otherHeight, $("html:not(:animated),body:not(:animated)")); 493 } 494 }, 300); 495 496 if (arParams.form_block.hasClass('form-cart')){ 497 498 setTimeout(function() 499 { 500 clearBasket(); 501 arParams.form_block.find(".areacart-form").children().remove(); 502 arParams.form_block.find(".cart-back").removeClass('active'); 503 arParams.form_block.find(".areacart-form").removeClass('active'); 504 arParams.form_block.find(".info-table").addClass('active'); 505 }, 3000); 506 } 507 508 if (arParams.form_block.hasClass('form-page-cart')){ 509 clearBasket(); 510 $('div.google-spin-wrapper').addClass('active'); 511 $(".cart-first-block").find(".part-wrap").hide(); 512 $(".cart-first-block").find(".form-cart-wrap").hide(); 513 } 514 515 if(typeof json.CART_LINK != "undefined") 516 { 517 if(json.CART_LINK.length>0){ 518 setTimeout(function() { 519 window.location.href = json.CART_LINK; 520 }, 1000); 521 } 522 } 523 524 if (typeof(arParams.linkHREF) != "undefined") 525 { 526 setTimeout(function() {
527 window.location.href = arParams.linkHREF; 528 }, 3200); 529 } 530 531 532 533 if (json.SCRIPTS.length > 0) 534 $('body').append("<script>"+json.SCRIPTS+"</script>"); 535 536 } 537 } 538 }); 539 }, 1000); 540 } 541} 542 543 544$(document).on("click", "button.btn-submit", function(){ 545 546 var form = $(this).parents("form.send"); 547 var path = "/bitrix/tools/constructor/ajax/forms.php"; 548 if (form.hasClass('form-cart') || form.hasClass('form-page-cart')) 549 path = "/bitrix/components/artdrom/constructor.cart/order.php"; 550 551 552 paramsForm = { 553 form_block: form, 554 path: path, 555 button: $(this), 556 linkHREF: $(this).attr("data-link"), 557 header: $("input[name='header']", form), 558 agreecheck: $("input.agreecheck", form), 559 questions: $("div.questions", form), 560 load: $("div.load", form), 561 thank: $("div.thank", form), 562 captchaToken: "" 563 564 }; 565 566 if($("body").hasClass('captcha')) 567 { 568 grecaptcha.execute($(".captcha-site-key").val(), {action: 'homepage'}).then(function(token) { 569 570 paramsForm.captchaToken = token; 571 sendForm(paramsForm); 572 }); 573 } 574 else{ 575 sendForm(paramsForm); 576 } 577 578 579}); 580$(document).on("focus", "form input[type='text'], form input[type='email'], form textarea", function() { 581 $(this).parent("div.input").removeClass("has-error"); 582 if ($(this).val().length <= 0 && !$(this).hasClass("phone")) { 583 $(this).attr("data-placeholder", $(this).attr("placeholder")); 584 $(this).attr("placeholder", ""); 585 } 586}); 587$(document).on("blur", "form input[type='text'], form textarea", function() { 588 if ($(this).val().length <= 0 && !$(this).hasClass("phone")) $(this).attr( 589 "placeholder", $(this).attr("data-placeholder")); 590}); 591$(document).on("keypress", "form.form div.count input", function(e) { 592 e = e || event; 593 if (e.ctrlKey || e.altKey || e.metaKey) return; 594 var chr = getChar(e); 595 if (chr == null) return false; 596}); 597$(document).on("keyup", "form.form div.count input", function(e) { 598 var value = $(this).val().toString(); 599 var newVal = ""; 600 for (var i = 0; i < value.length; i++) { 601 if (value[i] == "0" || value[i] == "1" || value[i] == "2" || value[i] == 602 "3" || value[i] == "4" || value[i] == "5" || value[i] == "6" || value[i] == 603 "7" || value[i] == "8" || value[i] == "9") newVal += value[i]; 604 } 605 if (newVal == 0) newVal = 1; 606 $(this).val(newVal); 607 if ($(this).val() == "") $(this).parent().addClass('in-focus'); 608}); 609$(document).on("click", "form.form div.count span.plus", function(e) { 610 var input = $(this).parent("div.count").find("input"); 611 var value = parseFloat(input.val()); 612 if (isNaN(value)) value = 0; 613 value += 1; 614 input.val(value); 615 if ($(this).val() == "") $(this).parent().addClass('in-focus'); 616}); 617$(document).on("click", "form.form div.count span.minus", function(e) { 618 var input = $(this).parent("div.count").find("input"); 619 var value = parseFloat(input.val()); 620 if (isNaN(value)) value = 0; 621 value -= 1; 622 if (value < 0) value = ''; 623 if (value == 0) value = 1; 624 input.val(value); 625}); 626$(document).on("keypress", ".only-num", function(e) { 627 e = e || event; 628 if (e.ctrlKey || e.altKey || e.metaKey) return; 629 var chr = getChar(e); 630 if (chr == null) return false; 631}); 632$(document).on("focus", "input.focus-anim, textarea.focus-anim", function() { 633 if ($(this).val() == "") $(this).parent().addClass('in-focus'); 634}); 635$(document).on("blur", "input.focus-anim, textarea.focus-anim", function() { 636 element = $(this); 637 setTimeout(function() { 638 if (element.val() == "") element.parent().removeClass('in-focus'); 639 }, 200); 640}); 641 642 643$(document).on('click', '.inp-show-js-padding', 644 function(){ 645 646 var str = $(this).find(".inp-show-js-length").text().length; 647 648 if(str >= 48) 649 $(this).find("textarea").addClass('two-rows'); 650 651 if(str >= 78) 652 $(this).find("textarea").addClass('three-rows'); 653 654 } 655);
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.