PageSourceSearch

http://xn--80akhsdcgnobh.xn--p1ai/bitrix/templates/concept_kraken_s1/js/forms.js

js xn--80akhsdcgnobh.xn--p1ai collected 2026-09-29 19:16:13 UTC 20,513 bytes, 655 lines download raw bytes

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 krakenResizeVideo() {
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.kraken-modal-dialog").addClass(
41            'pos-absolute');
42        else {
43            $("div.video-modal div.kraken-modal-dialog").removeClass('pos-absolute');
44        }
45    } else {
46        $("div.video-modal div.kraken-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('_krakenFirstEnter' + idSect + idElem);
99    var firstEnterVal = BX.getCookie('_krakenFirstEnterVal' + idSect + idElem);
100
101    setTimeout(function() {
102        form.css('min-height', form.outerHeight());
103    }, 100);
104    form.find('.krakentimer').addClass('active');
105
106    if(forCookieTime <= 0)
107        forCookieTime = 1;
108    
109
110    if (typeof(firstEnter) == "undefined" || firstEnterVal != timerVal) {
111
112
113        BX.setCookie('_krakenFirstEnter' + idSect + idElem, mainTime, {
114            expires: forCookieTime * 60 * 60
115        });
116        BX.setCookie('_krakenFirstEnterVal' + idSect + idElem, timerVal, {
117            expires: forCookieTime * 60 * 60
118        });
119        firstEnter = BX.getCookie('_krakenFirstEnter' + idSect + idElem);
120        firstEnterVal = BX.getCookie('_krakenFirstEnterVal' + 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('.krakentimer').countdown({
135        until: timerVal,
136        format: 'HMS',
137        onExpiry: liftOff,
138        layout: form.find('.krakentimer').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 (!$('.kraken-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 ($('.kraken-modal').hasClass('form-modal'))
401        {
402            formAttentionScroll(arParams.form_block.find('.has-error:first').offset().top - arParam
402s.form_block.parents(
403                '.kraken-modal-dialog').offset().top, arParams.form_block.parents(".kraken-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 ($('.kraken-modal').hasClass('form-modal'))
485                                formAttentionScroll(arParams.form_block.find('.thank').offset().top - arParams.form_block.parents(
486                                    '.kraken-modal-dialog').offset().top, arParams.form_block.parents(".kraken-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/kraken/ajax/forms.php";
548    if (form.hasClass('form-cart') || form.hasClass('form-page-cart')) 
549        path = "/bitrix/components/concept/kraken.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.