PageSourceSearch

https://stilanabel.by/js/basket.js?178915637748200

js stilanabel.by collected 2026-10-05 00:12:42 UTC 48,200 bytes, 1,326 lines download raw bytes

1/**
2 *Инициализация галлерее на карточке
3 */
4
5function InitCartTovGallery() {
6
7    var objClick = $(this)
8    if (objClick.is(".active"))
9        return;
10    var parentObj = objClick.parents(".item_imgs:first");
11    //все ссылки
12    var TablesProduct = $(".imageBox", parentObj);
13    var TablesDescription = $(".image_descr", parentObj);
14    var linksProduct = $(".more_images_wrap .pager li", parentObj);
15
16    linksProduct.removeClass("active");
17    TablesProduct.addClass("tabs_content");
18
19    var curIndex = linksProduct.index(objClick);
20    TablesProduct.eq(curIndex).removeClass("tabs_content");
21    TablesDescription.removeClass('active').eq(curIndex).addClass("active");
22
23    objClick.addClass("active");
24
25    //генерируем событие смены картинки для обновления кнопок социальных сетей
26    $(this).closest(".js_delovoy_gallery").trigger("change");
27
28    return false;
29}
30
31/**
32 *Провелка ввода
33 */
34function CheckInputKey(params, event) {
35    var ob = params.displayValueObj;
36    var itemSection = params.mainObj.parents(".catalogProductsGroup");
37
38    switch (event.keyCode) {
39        case 107:
40        case 187:
41            params.metods.addValue(event);
42            ob.setCursorPosition(ob.val().length);
43            return false;
44            break;
45        case 109:
46        case 189:
47            params.metods.ordValue(event);
48            ob.setCursorPosition(ob.val().length);
49            return false;
50            break;
51        case 37://лево
52
53            if ((typeof (ob.val()) === 'undefined') || !ob.val().length || !ob.GetCursorPosition()) {
54                params.metods.ordValue(event);
55                ob.setCursorPosition(0);
56                return false;
57            }
58
59            break;
60
61        case 39://право
62
63            if (typeof (ob.val()) === 'undefined' || !ob.val().length || (ob.GetCursorPosition() >= ob.val().length)) {
64                params.metods.addValue(event)
65                ob.setCursorPosition(ob.val().length);
66                return false;
67            }
68
69            break;
70        case 38://вверх 
71            var items = $(".productItem,.productItemOrder", itemSection);
72            var curPos = items.index(params.mainObj);
73
74            if (curPos > 0) {
75
76                items.eq(--curPos).find(".inpTovCount").focus();
77                initBasketWorker(itemSection);
78            } else if (!curPos && itemSection.prevAll(".catalog_item, .catalog_rows_list").filter(":first").length) {
79                itemSection = itemSection.prevAll(".catalog_item, .catalog_rows_list").filter(":first");
80                initBasketWorker(itemSection);
81                items = $(".productItem, .productItemOrder", itemSection);
82                items.find(".inpTovCount").filter(":last").focus();
83            }
84
85
86            return false;
87        case 9:
88        case 40: //вниз
89
90
91            var items = $(".productItem, .productItemOrder", itemSection);
92            var curPos = items.index(params.mainObj);
93
94            if ((curPos + 1) < items.length) {
95
96                items.eq(++curPos).find(".inpTovCount").focus();
97                initBasketWorker(itemSection);
98            } else if ((curPos + 1) >= items.length && itemSection.nextAll(".catalog_item, .catalog_rows_list").filter(":first").length) {
99                itemSection = itemSection.nextAll(".catalog_item, .catalog_rows_list").filter(":first");
100                initBasketWorker(itemSection);
101                items = $(".productItem, .productItemOrder", itemSection);
102                items.find(".inpTovCount").filter(":first").focus();
103            }
104
105
106            return false;
107    }
108}
109
110function CatalogAfterAddInBasket(params) {
111    CatalogAfterDeleteInBasket(params);
112
113}
114
115function CatalogAfterDeleteInBasket(params) {
116
117    if (isNaN(params.lastData.TOV))
118        $.each(params.lastData.TOV, function (key, value) {
119            CatalogParseResult(key, value, params);
120        });
121
122}
123
124function CatalogParseResult(key, value, params) {
125    params.mainObj.removeClass('forgot_product');
126    if (value.INFO.TYPE == 'ADD' || value.INFO.TYPE == 'MESSAGE')//добавление
127    {
128        $(".productItem" + key).addClass('in_basket').closest('.item_area').addClass('product__in_basket');
129        params.curentValue = 0;
130        SetEmptyField(params);
131        $(".price:not(.price__new, .price__old)", $(".productItem" + key)).html(value.TOVAR_PRICE);
132        var lab = $(".price", $(".productItem" + key)).data('label');
133        var edPr = $(".price", $(".productItem" + key)).data('price_per_kg_l');
134        if (!!lab && !!edPr) {
135
136            var nEdPrice = value.TOVAR_PRICE_NUMBER / edPr * 1000;
137
138            if (!!nEdPrice && nEdPrice != NaN) {
139                nEdPrice = nEdPrice.toFixed(2);
140                nEdPrice = nEdPrice.replace('.', ',');
141                $('.price-for-ed').html(lab + nEdPrice+' р.');
142            }
143        }
144        // если это был клик со списка продукции то проверям на градацию и выводим цену до деноминации
145        // если количоство  = 0
146        $(".curQuantity", $(".productItem" + key)).html(value.TOVAR_QTY);
147        $(".hiddenWarningObj.product_warning" + key).addClass("js_warning_show").show();
148    } else if (value.INFO.TYPE == 'ACTION_MESSAGE') {
149        if ($('.correctQantity').length > 0) {
150            $('.correctQantity', params.mainObj).trigger('click');
151        }
152        params.displayValueObj.val(value.FREEQTY);
153    } else if (value.INFO.TYPE == 'DELETE')//удаление
154    {
155        $(".productItem" + key).removeClass('in_basket').closest('.item_area').removeClass('product__in_basket');
156        $(".price", $(".productItem" + key)).html(value.TOVAR_PRICE);
157        var lab = $(".price", $(".productItem" + key)).data('label');
158        var edPr = $(".price", $(".productItem" + key)).data('price_per_kg_l');
159        if (!!lab && !!edPr) {
160            tp = value.TOVAR_PRICE.replace('от', '');
161            tp = tp.replace('p.', '');
162            tp = tp.replace(',', '.');
163            tp = parseFloat(tp.replace(' ', ''));
164
165            var nEdPrice = tp / edPr * 1000;
166
167            if (!!nEdPrice) {
168                nEdPrice = nEdPrice.toFixed(2);
169                nEdPrice = nEdPrice.replace('.', ',');
170                $('.price-for-ed').html(lab + 'от '+nEdPrice+' р.');
171            }
172        }
173        $(".curQuantity", $(".productItem" + key)).empty();
174        $(".hiddenWarningObj.product_warning" + key).removeClass("js_warning_show").hide();
175    } else//все остальные случаии
176    {
177    }
178
179
180}
181
182
183/**
184 *Обнуление поля
185 */
186function SetEmptyField(params) {
187    if (params.curentValue <= 1) {
188        params.curentValue = 0;
189        params.displayValueObj.val("");
190        return false;
191    }
192    return true;
193}
194
195
196function SubmitAllProducts() {
197    var buttonClick = $(this);
198    var itemsObj = buttonClick.parents(".catalog_item,.catalog_rows_list,.item_info").filter(":first");
199
200    if (!itemsObj.length)
201        return false;
202    var sendData = "";
203
204    //Сюда запоминаем методы и аргументы для вызова из each
205    var callAlerts = {};
206
207    //далее идем по инициализированным элементам для дальнейшего submita
208    $(".basketIsInit", itemsObj).each(function () {
209        var params = $(this).data("params");
210        params.displayValueObj.trigger("keyup");
211        if (params.curentValue) {
212            sendData += "&" + params.addAction + "[" + params.productId + "]=" + params.curentValue+'&customPageType='+$(this).data('page')+'&curPage='+window.location.href;
213        } else {
214            //Если при добавлении у товара не указано количество, добавляем в объект вызов конструктора сообщений
215            var messages = {};
216            messages[params.productId] = {INFO: {TYPE: "ERROR", MESSAGE: "Укажите количество товара"}};
217            callAlerts[params.productId] = {call: params.metods.MessageBulder, arg: messages};
218        }
219    });
220
221    if (sendData.length) {
222        if (window.getClientWidth() <= 767) {
223            itemsObj = buttonClick.parents(".productItem").filter(":first");
224        }
225        loader_Custom_ajax_shadow(itemsObj);
226        $.ajax({
227            type: "POST",
228            url: '/include/basketArea.php',
229            data: "BASKETAJAX=Y" + sendData,
230            dataType: 'json'
231        }).done(SubmitAllParseResult);
232    } else {
233        //Показываем сообщение об ошибке
234        for (var k in callAlerts) {
235            callAlerts[k].call(callAlerts[k].arg);
236        }
237    }
238
239    return false;
240}
241
242function SubmitAllParseResult(data) {
243    $(".basketItemsTotalSum").html(data.TOTAL_SUMM_FORMATED);
244    $(".basketItemsCount").html(data.COUNT_TOV);
245    $('.basket_field').html(data.BASKET_STATE);
246
247
248    if (isNaN(data.TOV))
249        $.each(data.TOV, function (key, value) {
250            $(".basketIsInit.productItem" + key).each(function () {
251                var params = $(this).data("params");
252                if (params) {
253                    CatalogParseResult(key, value, params);
254                    params.lastData = data;
255
256                    if (parseInt(params.lastData.CHANGET) > 0 && params.showAlerts)
257                        params.metods.MessageBulder(params.lastData.TOV)
258                }
259                if (typeof dataLayer != 'undefined') {
260                    dataLayer.push({
261                        'ecommerce': {
262                            'currencyCode': 'BYN',
263                            'add': {                                // 'add' actionFieldObject measures.
264                                'products': [dataLayerConstants[params.productId]]
265                            },
266                        },
267                        'event': 'gtm-ee-event',
268                        'gtm-ee-event-category': 'Enhanced Ecommerce',
269                        'gtm-ee-event-action': 'Adding a Product to a Shopping Cart',
270                        'gtm-ee-event-non-interaction': 'False',
271                    });
272                }
273                return false;
274            })
275
276        });
277
278    loader_Custom_ajax_remove();
279}
280
281function InputEvents(obj) {
282    $(obj).hover(function () {
283        $(this).focus();
284        $('.status_msg').removeClass('show');
285        var curRow = $(this).closest('.productItem');
286        if (curRow.is(".in_basket") && (curRow.next().is(".hiddenWarningObj.js_warning_show") || $(".hiddenWarningObj.js_warning_show", curRow).length)) {
287            return;
288        }
289        $('.status_msg', curRow).addClass('show');
290    }, function () {
291        $(this).closest('.productItem').find('.status_msg').removeClass('show');
292
293    });
294
295}
296
297
298function initBasketWorker(obj) {
299
300    if ($(obj).is('.basketInit'))
301        return;
302
303    $(obj).addClass('basketInit');
304
305    var basketItems = $(".productItem", obj);
306    if ($(obj).is(".productItem"))
307        basketItems = $(obj);
308
309    basketItems.workWithBasket({
310        callbackAfterDelete: CatalogAfterDeleteInBasket,
311        callbackAfterChange: CatalogAfterAddInBasket,
312        callbackBeforeDigitCheck: CheckInputKey,
313        callbackBeforeMin: SetEmptyField,
314        displayValueObjEventWorker: InputEvents
315    });
316
317    $(".inpTovCount, .rem_one, .add_one, .btnProductAdd", basketItems).on("focus", function () {
318        $(obj).addClass('inputInFocus');
319    }).on("blur", function () {
320        $(obj).removeClass('inputInFocus');
321    });
322
323    $(".js_spec_price", basketItems).each(function () {
324        var obj = $(this);
325        var topMargin = (obj.height() - obj.closest('td,.js_cartPriceParams').height()) / 2;
326        obj.css('margin-top', -topMargin);
327    });
328
329    initBootomBascketAdd();
330
331}
332
333
334/****************************
335 *Основная логика
336 ****************************/
337(function ($) {
338    $.workWithBasket = function (sourse, options) {
339
340        function DigitInput(e) {
341
342            if (typeof params.callbackBeforeDigitCheck == 'function')
343                if (params.callbackBeforeDigitCheck(params, e) === false)
344                    return false;
345
346            if (e.keyCode == 9)
347                return false;
348
349            params.lastData = {};
350
351
352            //право лево
353            if (e.keyCode == 37 || e.keyCode == 39)
354                return true;
355            //цифра клавиатуры
356            if ((e.keyCode > 47 && e.keyCode < 58) || (e.keyCode > 95 && e.keyCode < 106)) {
357                checForRecalc();
358                return true;
359            }
360            //бэкспейс делит
361            if (e.keyCode == 8 || e.keyCode == 46) {
362                checForRecalc();
363                return true;
364            }
365
366            return false;
367        }
368
369        function DigitInputSetValue(e) {
370            params.curentValue = parseInt($(this).val());
371
372            if (e.keyCode == 13) {
373                params.metods.add2basket();
374                false;
375            }
376
377            return true;
378        }
379
380        /**
381         * Инкремент значения
382         */
383        function addValue(event) {
384            if (typeof params.callbackBeforePl == 'function')
385                if (params.callbackBeforePl(params) === false)  //прервет выполнение если calback вернет ошибку
386                    return false;
387
388            if (isNaN(params.curentValue))
389                params.curentValue = 0;
390            if (isNaN(params.curentInboxValue))
391                params.curentInboxValue = 0;
392            params.curentValue = parseInt( params.curentValue);
393            if (event.shiftKey && params.curentInboxValue > 0) {
394                currentNumberPackages = ~~(params.curentValue / params.curentInboxValue); //получаем выбранное кол-во упаковок
395                params.curentValue = (++currentNumberPackages * params.curentInboxValue); //добавляем еще одну
396            } else {
397                params.curentValue += parseInt(params.step);
398            }
399
400            SetValue();
401            checForRecalc();
402
403            return true;
404        }
405
406        /**
407         * Декримент значения
408         */
409        function ordValue(event) {
410
411            if (typeof params.callbackBeforeMin == 'function') {
412                //прервет выполнение если calback вернет ошибку
413                if (params.callbackBeforeMin(params) === false)
414                    return false;
415            }
416
417            if (isNaN(params.curentValue))
418                params.curentValue = 0;
419            if (isNaN(params.curentInboxValue))
420                params.curentInboxValue = 0;
421
422            if (params.curentValue == 0)
423                return false;
424
425            if (event.shiftKey && params.curentInboxValue > 0) {
426                currentNumberPackages = Math.ceil(params.curentValue / params.curentInboxValue); //получаем выбранное кол-во упаковок
427                params.curentValue = (--currentNumberPackages * params.curentInboxValue); //убираем одну упаковку
428            } else {
429                params.curentValue -= params.step;
430            }
431
432            if (params.curentValue <= 0) {
433                params.curentValue = params.step
434                SetValue();
435            } else {
436                SetValue();
437                checForRecalc();
438            }
439            return true;
440        }
441
442
443        function checForRecalc() {
444            if (params.recalcAfterChange) {
445                clearTimeout(params.timeoutID);
446                params.timeoutID = setTimeout(params.metods.add2basket, params.recalcDelay)
447
448            }
449        }
450
451
452        /**
453         * Установка значения
454         */
455        function SetValue() {
456
457            params.curentValue = Math.round(params.curentValue * 100) / 100;
458
459
460            if ($(params.displayValueObj).is("input"))
461                $(params.displayValueObj).val(parseInt(params.curentValue));
462            else
463                $(params.displayValueObj).html(parseInt(params.curentValue));
464
465            if (typeof params.callbackAfterQuantityChange == 'function')
466                params.callbackAfterQuantityChange(params);
467
468        }
469
470        // добавление в отмеченные товары
471        function add2basket() {
472            if (!params.curentValue) {
473                PrepareAlerArea();
474                params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("brown_msg").html("Введите количество").show();
475                AlertSetAction(params.alertsMessageAutoHide);
476                return false;
477            }
478
479            if (typeof params.callbackBeforeChange == 'function') {
480                //прервет выполнение если calback вернет ошибку
481                if (params.callbackBeforeChange(params) === false)
482                    return false;
483            }
484
485            loader_Custom_ajax_shadow($('.basket_field'));
486            loader_Custom_ajax_shadow($(params.mainObj));
487
488            $.ajax({
489                type: "POST",
490                url: '/include/basketArea.php',
491                data: "BASKETAJAX=Y&" + params.addAction + "[" + params.productId + "]=" + params.curentValue + params.onAddAddParam+'&customPageType='+$(params.mainObj).data('page'),
492                dataType: 'json'
493            }).done(AddEventWorker);
494
495
496        }
497
498        function AddEventWorker(data) {
499            params.lastData = data;
500
501            $(".basketItemsTotalSum").html(params.lastData.TOTAL_SUMM_FORMATED);
502            $(".basketItemsCount").html(params.lastData.COUNT_TOV);
503
504            $(params.mainObj).addClass(params.onChangeToggleClass);
505
506
507            if ($(params.mainObj).find(".priceItem").length) {
508                $(params.mainObj).find(".priceItem").html(params.lastData.ITEM_PRICE_FORMATED);
509                params.curentValue = parseInt(params.lastData.ITEM_COUNT);
510                SetValue();
511            }
512
513            if (parseInt(parseInt(params.lastData.ITEM_COUNT)))
514                $('.workwithBasket' + params.productId).addClass('full');
515            else
516                $('.workwithBasket' + params.productId).removeClass('full');
517
518            $('.workwithBasket' + params.productId).removeClass('inWishList');
519
520            $("#substitute").removeClass("nochanged");
521            $('.basket_field').html(params.lastData.BASKET_STATE);
522            loader_Custom_ajax_remove();
523
524            if (typeof params.callbackAfterChange == 'function' && params.callbackAfterChange(params))
525                return;
526
527            if (parseInt(params.lastData.CHANGET) > 0 && params.showAlerts)
528                MessageBulder(params.lastData.TOV);
529
530            if (typeof dataLayer != 'undefined') {
531                dataLayer.push({
532                    'ecommerce': {
533                        'currencyCode': 'BYN',
534                        'add': {                                // 'add' actionFieldObject measures.
535                            'products': [dataLayerConstants[params.productId]]
536                        },
537                    },
538                    'event': 'gtm-ee-event',
539                    'gtm-ee-event-category': 'Enhanced Ecommerce',
540                    'gtm-ee-event-action': 'Adding a Product to a Shopping Cart',
541                    'gtm-ee-event-non-interaction': 'False',
542                });
543            }
544        }
545
546        // добавление в корзину
547        function delete2basket() {
548
549
550            if (typeof params.callbackBeforeDelete == 'function') {
551                //прервет выполнение если calback вернет ошибку
552                if (params.callbackBeforeDelete(params) === false)
553                    return false;
554            }
555
556            loader_Custom_ajax_shadow($('.basket_field'));
557            $(params.mainObj).addClass(params.onDeleteToggleClass);
558            loader_Custom_ajax_shadow($(params.mainObj));
559
560            $.ajax({
561                type: "POST",
562                url: '/include/basketArea.php',
563                data: "BASKETAJAX=Y&" + params.delAction + "[" + params.productId + "]=" + params.productId + params.onDeleteAddParam+'&customPageType='+$(params.mainObj).data('page'),
564                dataType: 'json'
565
566            }).done(DeleteEventWorker);
567
568
569        }
570
571
572        function DeleteEventWorker(data) {
573            params.lastData = data;
574            $(".basketItemsTotalSum").html(params.lastData.TOTAL_SUMM_FORMATED);
575            $(".basketItemsCount").html(params.lastData.COUNT_TOV);
576
577            if (parseInt(parseInt(params.lastData.ITEM_COUNT)))
578                $('.workwithBasket' + params.productId).addClass('in_basket');
579            else
580                $('.workwithBasket' + params.productId).removeClass('in_basket');
581
582            $('.basket_field').html(params.lastData.BASKET_STATE);
583
584            $("#substitute").removeClass("nochanged");
585
586            loader_Custom_ajax_remove();
587
588            if (typeof params.callbackAfterDelete == 'function' && params.callbackAfterDelete(params) == false)
589                return;
590
591            if (parseInt(params.lastData.CHANGET) > 0 && params.showAlerts)
592                MessageBulder(params.lastData.TOV);
593
594            if (typeof dataLayer != 'undefined') {
595                dataLayer.push({
596                    'ecommerce': {
597                        'currencyCode': 'BYN',
598                        'remove': {                                // 'add' actionFieldObject measures.
599                            'products': [dataLayerConstants[params.productId]]
600                        },
601                    },
602                    'event': 'gtm-ee-event',
603                    'gtm-ee-event-category': 'Enhanced Ecommerce',
604                    'gtm-ee-event-action': 'Removing a Product from a Shopping Cart',
605                    'gtm-ee-event-non-interaction': 'False',
606                });
607            }
608        }
609
610
611        function MessageBulder(tovChanges) {
612            $.each(tovChanges, function (key, changes) {
613                if (parseInt(key) == params.productId) {
614                    PrepareAlerArea();
615
616                    switch (changes.INFO.TYPE) {
617                        case "DELETE":
618                        case "ERROR":
619                            showDeleteAlert(changes.INFO.MESSAGE);
620                            break;
621                        case "CHANGE":
622                            showChangeAlert(changes.INFO.MESSAGE);
623                            break;
624                        case "ADD":
625                            showAddAlert(changes.INFO.MESSAGE);
626                            break;
627                        case "ACTION_MESSAGE":
628                            showActionMessageAlert(changes.INFO.MESSAGE);
629                            break;
630
631                        default:
632
633                            showMessageAlert(changes.INFO.MESSAGE);
634                    }
635                }
636
637            });
638        }
639
640        function showDeleteAlert(message) {
641            if (!params.alertsDelete)
642                return;
643
644            params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("red_msg").html(message).show();
645            AlertSetAction(params.alertsDeleteAutoHide);
646        }
647
648
649        function showAddAlert(message) {
650            if (!params.alertsAdd)
651                return;
652            params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("green_msg").html(message).show();
653            AlertSetAction(params.alertsAddAutoHide);
654
655        }
656
657        function showChangeAlert(message) {
658            if (!params.alertsChange)
659                return;
660            params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("green_msg").html(message).show();
661            AlertSetAction(params.alertsChangeAutoHide);
662
663        }
664
665        function showMessageAlert(message) {
666            if (!params.alertsMessage)
667                return;
668
669            params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("brown_msg").html(message).show();
670            AlertSetAction(params.alertsMessageAutoHide);
671        }
672
673
674        function showActionMessageAlert(message) {
675            if (!params.alertMessageWithAction)
676                return;
677
678            params.curAlert = $("<span class='status_msg'/>").prependTo(params.alertBox).addClass("yellow_msg").html(message).show().css('display', 'inline-block');
679
680            AlertSetAction(0);
681        }
682
683        function AlertSetAction(AutoHide) {
684            if (parseInt(AutoHide) > 0) {
685                setTimeout(HideAlert, params.alertsDeleteAutoHide);
686                return;
687            }
688            params.curAlert.on("click", params.alertCorrectQuantityClass, correctQuantity);
689            params.curAlert.on("click", HideAlert);
690        }
691
692        function correctQuantity() {
693
694            if(typeof params.lastData.TOV == 'undefined'){
695                return false;
696            }
697
698            if (parseInt(params.lastData.CHANGET) == 0 || !params.lastData.TOV[params.productId])
699                return false;
700
701            var curProduct = params.lastData.TOV[params.productId];
702
703            if (params.addAction == "ADD")
704                params.curentValue = parseInt(curProduct.FREEQTY) - parseInt(curProduct.TOVAR_QTY);
705            else
706                params.curentValue = curProduct.FREEQTY;
707
708
709            params.metods.add2basket();
710            HideAlert();
711
712
713            return false;
714        }
715
716        function HideAlert() {
717            params.curAlert.fadeTo(params.alertsAutoHideSpeed, 0, function () {
718                    $(this).remove()
719                }
720            );
721        }
722
723        /**
724         *Подготовка к ставке сообщения
725         */
726        function PrepareAlerArea() {
727            if (!params.alertInsertBefore)
728                return false;
729
730            if (!params.alertInsertBefore.prev(".alertObj").length) {
731                params.alertBox = $("<div  class='alertObj' />").insertBefore(params.alertInsertBefore);
732                params.alertBox.css({
733                    position: "relative",
734                    "float": "left"
735                });
736            }
737            params.alertBox.empty();
738        }
739
740        var params = options;
741        params.mainObj = $(sourse);
742        params.timeoutID = 0;
743        params.productId = parseInt(params.mainObj.find(".productID").val());
744
745        if (!params.productId)
746            return false;
747
748
749        if (!params.mainObj.find(options.setValue).length)
750            return false;
751
752        params.alertInsertBefore = params.mainObj.find(options.alertInsertBeforeObj);
753
754        params.displayValueObj = params.mainObj.find(options.setValue);
755
756        params.curentValue = parseInt(params.displayValueObj.val());
757        if (isNaN(params.curentValue))
758            params.curentValue = 0;
759
760        params.inboxValueObj = params.mainObj.find(options.setInboxValue);
761        params.curentInboxValue = parseInt(params.inboxValueObj.val());
762        if (isNaN(params.curentInboxValue))
763            params.curentInboxValue = 0;
764
765        $(params.displayValueObj).unbind().keydown(DigitInput).keyup(DigitInputSetValue); //удалени всех навешенных обработчиков
766        /*
767         Навешивание пользовательских обработчиков
768         */
769        //Поле ввода
770
771
772        //Инициализация плюса
773        if (params.mainObj.find(options.addOne).length) {
774            params.plusObj = params.mainObj.find(options.addOne);
775            params.plusObj.unbind();//удалени всех навешенных обработчиков
776            params.plusObj.click(addValue);
777        }
778
779
780        //Инициализация минуса
781        if (params.mainObj.find(options.ordOne).length) {
782            params.minusObj = params.mainObj.find(options.ordOne);
783            params.minusObj.unbind();//удалени всех навешенных обработчиков
784            params.minusObj.click(ordValue);
785        }
786
787        //Инициализация добавления
788        if (params.mainObj.find(options.submit).length) {
789
790            params.submitObj = params.mainObj.find(options.submit);
791            params.submitObj.off();//удалени всех навешенных обработчиков
792            params.mainObj.on("click", options.submit, add2basket);
793        }
794
795        if (params.displayValueObjEventWorker) {
796            params.displayValueObjEventWorker(params.displayValueObj, params);
797            params.displayValueObjEventWorker(params.addOne, params);
798            params.displayValueObjEventWorker(params.ordOne, params);
799            params.displayValueObjEventWorker(params.submit, params);
800        }
801
802
803        //Инициализация удаление
804        if (params.mainObj.find(options.del).length) {
805            params.delObj = params.mainObj.find(options.del);
806            params.delObj.unbind();//удалени всех навешенных обработчиков
807            params.mainObj.on("click", options.del, delete2basket);
808        }
809
810        params.metods = {
811            ordValue: ordValue,
812            SetValue: SetValue,
813            addValue: addValue,
814            delete2basket: delete2basket,
815            add2basket: add2basket,
816            MessageBulder: MessageBulder,
817            AlertSetAction: AlertSetAction,
818            PrepareAlerArea: PrepareAlerArea
819        };
820
821        params.step = 1;
822
823        if (params.onDeleteAddParam.length && params.onDeleteAddParam[0] != '&')
824            params.onDeleteAddParam = "&" + params.onDeleteAddParam;
825
826        if (params.onAddAddParam.length && params.onAddAddParam[0] != '&')
827            params.onAddAddParam = "&" + params.onAddAddParam;
828
829
830        params.mainObj.data("params", params)
831        params.mainObj.addClass("basketIsInit");
832    }
833
834
835    $.fn.workWithBasket = function (options) {
836        //количество банеров
837
838
839        //вешаем обработчик
840        $(this).each(function () {
841            if ($(this).is(".basketIsInit"))
842                return;
843
844            var optionsInit = jQuery.extend({
845                submit: '.btnProductAdd', //класс сабмита
846                del: '.btnProductDel', //класс кнопки удалть 
847                addOne: '.add_one', //класс добавления единицы
848                ordOne: '.rem_one', //класс уменишения на единицу
849
850                addAction: "ADD",
851                delAction: "DEL",
852                setValue: '.inpTovCount', //класс текущего количества товара
853                setInboxValue: '.hideInpTovInbox', //класс кол-ва текущего товара в упаковке
854
855
856                /*Оповещения */
857                alertInsertBeforeObj: '.add_one_box:first',
858                showAlerts: true, //Отлючение всех оповещений
859                alertsAutoHideSpeed: 300, //скорость сорктия ооповещения
860                alertsDelete: true, //показывать событие добавление
861                alertsDeleteAutoHide: 1000, //автоскрытие после
862                alertsAdd: true, //показвать событие добавления
863                alertsAddAutoHide: 1000, //авто скрытие после
864                alertsChange: true, //показвать событие Изменения
865                alertsChangeAutoHide: 1000, //авто скрытие после
866                alertsMessage: true, //показвать событие добавления максимального количества
867                alertsMessageAutoHide: 1000, //авто скрытие после
868                alertMessageWithAction: true, //показвать событие добавления больше доступного
869                alertCorrectQuantityClass: ".correctQantity", //класс для ссылки корректировки количества
870
871                onDeleteAddParam: "",
872                onAddAddParam: "",
873                recalcAfterChange: false, //делать пересчет при измении количества
874                recalcDelay: 500, //задерка перед пересчетом корзин
874ы при изменнии количества
875
876                onDeleteToggleClass: 'deleteItem', //класс который добавиться и пропадет при удалении
877                onChangeToggleClass: 'changeItem', //класс которы добавиться и пропадет при добавлении
878
879                callbackBeforeDigitCheck: false,
880                callbackAfterQuantityChange: false, //после устновки новго значения
881                callbackBeforeChange: false, //перед ajax отправкой в козину
882                callbackAfterChange: false, //после получения ответа
883                callbackBeforeDelete: false, //перед удалением товара в корзине
884                callbackAfterDelete: false, //после удаления товара в корзине
885
886                displayValueObjEventWorker: false//функция добавляет пользовательские обработчики
887            }, options);
888
889
890            new $.workWithBasket(this, optionsInit);
891        });
892
893        return this;
894    }
895
896})(jQuery);
897
898
899/**
900 *добавление в избранное пользователя
901 */
902function AddToUserFavorite() {
903    var objFavoriteClick = $(this);
904    var menuAreaContent = $(".menuAreaContent");
905    var currentNum = parseInt($(".favorite .num ", menuAreaContent).html());
906    var sendFavorID = objFavoriteClick.attr("favoriteID");
907
908    objFavoriteClick = $(".favoriteLink" + sendFavorID);
909    var objFavoriteStar = $('.favoritreStar' + sendFavorID);
910    var sendData = ((objFavoriteClick.attr("favoriteType") == 'supplies') ? "FAVORITES_SUPPLIES" : "FAVORITES_SECTIONS") + "=" + sendFavorID;
911
912    loader_Custom_ajax_shadow($(".favorite", menuAreaContent));
913    loader_Custom_ajax_shadow(objFavoriteClick);
914
915    var options = {
916        url: "/include/GetFavorites.php",
917        dataType: "json",
918        type: "POST",
919        data: sendData,
920        success: function (data) {
921
922            var currentNumAjax = parseInt(data.NUM);
923
924            if (currentNumAjax > currentNum) {
925                objFavoriteClick.removeClass("ico_fav_pas").addClass("ico_fav_act").attr("title", "Удалить из избранного")
926                    .next('.favoriteLink').text('Удалить из избранного');
927                objFavoriteStar.addClass('favoritreStar');
928            }
929            if (currentNumAjax < currentNum) {
930                objFavoriteClick.removeClass("ico_fav_act").addClass("ico_fav_pas").attr("title", "Добавить в избранное")
931                    .next('.favoriteLink').text('Добавить в избранное');
932                ;
933                objFavoriteStar.removeClass('favoritreStar');
934            }
935
936            if (currentNumAjax > 0)
937                $(".favorite .num", menuAreaContent).removeClass("hide");
938            else
939                $(".favorite .num", menuAreaContent).addClass("hide");
940
941            $(".favorite .num", menuAreaContent).html(currentNumAjax);
942
943            loader_Custom_ajax_remove();
944
945        }
946    };
947
948    $.ajax(options);
949    return false;
950}
951
952function SetProductImage() {
953    var ImageInRow = $(".delovoyCatalogGallery img", this);
954    var MainImage = $(".img_box:not(.noChangeImage) img", $(this).closest(".catalogProductsGroup"));
955    if (ImageInRow.length && MainImage.length) {
956        var timeOut = MainImage.data("timeOut");
957        var origImage = MainImage.data("origImage");
958
959        //сброс таймера на обратное изменение изображения
960        if (timeOut)
961            clearTimeout(timeOut);
962
963        //сохранение оригинала изображения
964        if (!origImage)
965            MainImage.data("origImage", MainImage.attr("src"));
966
967        var newImge = ImageInRow.attr('rel');
968        MainImage.attr("src", newImge);
969
970    }
971}
972
973function UnsetProductImage() {
974    var ImageInRow = $(".delovoyCatalogGallery img", this);
975    var MainImage = $(".img_box:not(.noChangeImage)", $(this).closest(".catalogProductsGroup"));
976    if (ImageInRow.length && MainImage.length) {
977        var origImage = MainImage.data("origImage");
978        var timeOut = setTimeout(function () {
979            MainImage.attr("src", origImage);
980        }, 200);
981
982        MainImage.data("timeOut", timeOut)
983    }
984
985}
986
987function ImageRowHoverInit(e, bxObj) {
988    $(".productItem", bxObj).on("mouseenter", SetProductImage).on("mouseleave", UnsetProductImage)
989    $(document).on("mouseenter", ".productItem", SetProductImage).on("mouseleave", ".productItem", UnsetProductImage)
990
991
992}
993
994function FilterAreaInit(e, bxObj) {
995    //фиксация ширины
996    $('.filters_area', bxObj).width(190);
997    /*$('.filters_area', bxObj).SetFixedState({
998        correctTopPosition: 75,
999        canCorrectPosition: true,
1000        addWinHeightToScroll: true,
1001        animateFixed: false
1002    });
1003
1004    $('.catalog_filters').SetFixedState({
1005        correctTopPosition: 75,
1006        canCorrectPosition: true,
1007        animateFixed: false
1008    });*/
1009    if($('.catalog_list').height() > $('.filters_area').height()){
1010        $('.filters_area').stick_in_parent({
1011            offset_top: 75,
1012            parent: '.catalog_area'
1013        });
1014    }
1015    $(window).on('scroll', function () {
1016
1017        var optionsInit = jQuery.extend({
1018            toggleClass: 'state_fixed',
1019            closestContentObj: '.content',
1020            correctTopPosition: 60,
1021            canCorrectPosition: true,
1022            addWinHeightToScroll: false,
1023            bootomPosition: false,
1024            isInitObj: 'fixedStateInit',
1025            setClassCallback: false,
1026            unsetClassCallback: false,
1027            animateFixed: false
1028        });
1029
1030
1031        /*if ($('.catalog_filters').hasClass('state_fixed'))
1032            $('.catalog_filters').css('margin-right', -(($('.main').width() - $(window).scrollLeft()) / 2));
1033        else
1034            $('.catalog_filters').css({'margin-right': 'auto', right: -(($('.main').width() - $('.content > .wrapper').width()) / 2)});*/
1035    });
1036    $(window).trigger('scroll');
1037    $(window).on('resize', function () {
1038        $(window).trigger('scroll');
1039    });
1040
1041    $('.js_filters_toogle_btn').on('click', function () {
1042        var filtersToogleBtn = $(this);
1043        var catalogFilters = filtersToogleBtn.closest('.catalog_filters');
1044        catalogFilters.toggleClass('open');
1045        $('.filters_area').trigger("sticky_kit:recalc");
1046    });
1047
1048    $(document).on('click', function (e) {
1049        if (!$(e.target).closest('.catalog_filters').length)
1050            $('.catalog_filters').removeClass('open');
1051
1052    });
1053}
1054
1055function PopupHelperPlace(e, bxObj) {
1056    $('.js_hlpr_lnk:not(.helperInit)', bxObj).each(function (i) {
1057        var curObj = $(this);
1058        curObj.addClass("helperInit");
1059        curObj.on('click', function () {
1060
1061            var curentHelper = $(this),
1062                trgtPopup = curentHelper.closest('.js_hlpr_grp').find('.js_hlpr_pop'),
1063                ofsPos = curentHelper.offset(),
1064                windTop = $(window).scrollTop(),
1065                boderTailHeight = 12;
1066
1067            if (trgtPopup.is(".activeHelperInfo")) {
1068                $(document).triggerHandler("click.PopupHelperPlace");
1069                return;
1070            }
1071
1072            $(document).triggerHandler("click.PopupHelperPlace");
1073
1074            trgtPopup.css({'visibility': 'hidden'}).show();
1075
1076            var pRealTop = ofsPos.top - trgtPopup.outerHeight() - boderTailHeight;
1077            if ($('.search_area').hasClass('state_fixed'))
1078                pRealTop = pRealTop - $('.search_area').outerHeight();
1079
1080            if (pRealTop < windTop)
1081                $("html, body").animate({
1082                    scrollTop: pRealTop
1083                }, 'fast');
1084
1085            trgtPopup.addClass("activeHelperInfo").css({visibility: "visible"});
1086
1087        })
1088    });
1089
1090
1091}
1092
1093
1094function WarningInit(e, bxObj) {
1095    var warningList = $(".hiddenWarningObj", $('.content'));
1096
1097    // $(".deleteAction", warningList).on("click", function () {
1098    $(document).on("click", '.content .hiddenWarningObj .deleteAction', function () {
1099        var productID = $(this).attr("rel");
1100
1101
1102        if (productID.length)
1103            $("." + productID, bxObj).trigger("click");
1104
1105        $(this).closest(".hiddenWarningObj").hide();
1106        return false;
1107    });
1108
1109    $(document).on("click", '.content .hiddenWarningObj .warningShow', function (e) {
1110        var elm = $(e.target);
1111        var productID = elm.attr("rel");
1112        if (elm.closest(".hiddenWarningObj").length == 0) {
1113            return false;
1114        }
1115        var warnID = elm.closest(".hiddenWarningObj").attr("rel").split('_');
1116        var curentValues = GetCookieBitrix("WARNINGN_SHOW");
1117
1118        var index;
1119        for (index = 0; index < warnID.length; ++index) {
1120            curentValues += (curentValues.length ? "|" : "") + productID + "_" + warnID[index];
1121        }
1122
1123        elm.closest(".hiddenWarningObj").remove();
1124        SetCookieBitrix("BITRIX_SM_WARNINGN_SHOW", curentValues, 31, "/")
1125        return false;
1126    });
1127
1128
1129}
1130
1131
1132$(document).ready(function () {
1133
1134    $(document).on("click.PopupHelperPlace", function (e) {
1135        if (!$(e.target).closest('.activeHelperInfo').length && !$(e.target).closest('.js_hlpr_lnk').length)
1136            $('.activeHelperInfo').removeClass("activeHelperInfo").hide();
1137
1138    });
1139
1140
1141    $('body').on('onAjaxReload.ImageRowHover', ImageRowHoverInit);
1142    $('body').on('onAjaxReload.FilterAreaInit', FilterAreaInit);
1143    $('body').on('onAjaxReload.PopupHelperPlace', PopupHelperPlace);
1144    $('body').on('onAjaxReload.WarningInit', WarningInit);
1145    $('body').on('onAjaxReload.lastOrderWindow', LastOrderWindow)
1146    $('body').on('onAjaxReload.initFilter', InitFilter)
1147
1148    $(".content").on('click', ".favoriteLink", AddToUserFavorite);
1149
1150    $(".content").on('mouseover', '.catalog_item, tr.productItem, .item_price_info.productItemOrder,.catalog_str_action .table_cell.productItem', function () {
1151        initBasketWorker(this);
1152    });
1153
1154    $(".content").on("click", "a.btn_stl.btn_bskt", SubmitAllProducts);
1155
1156    $(".more_images_wrap .pager li").on("click", InitCartTovGallery);
1157
1158
1159//    $(".item_imgs .imageBox").height($(".item_imgs .imageBox").maxHeight());
1160    $(".showAdditionalBlockInfo").on("click", function () {
1161        $(this).prev('.additionalDescription').removeClass('hide');
1162        $(this).remove();
1163        return false;
1164    });
1165
1166    $("body").on("click", ".links_box.youSearch li a", function () {
1167        $("#main_search_input").val($(this).html()).trigger("keyup");
1168        return false;
1169    });
1170
1171    $(".search_box").on("click", ".search_examples .example", function () {
1172        $("#main_search_input").val($(this).html()).trigger("keyup");
1173        return false;
1174    });
1175
1176
1177    InitFilter(false, $("#FilterSubmitAction"));
1178
1179    ImageRowHoverInit(false, $(".catalog_list"));
1180    FilterAreaInit(false, $(".right_sidebar.catalog_filters"));
1181    PopupHelperPlace(false, $(".catalog_table"));
1182    WarningInit(false, $(".content"));
1183    LastOrderWindow(false, $(".search_box"));
1184});
1185
1186
1187var currentReloadTimer = 0;
1188
1189function InitFilter(e, bxObj) {
1190    $(".filters_group .ch_box_line", bxObj).on("click.filterCheck", OnFilterCheckBoxChange);
1191    $(".filters_group", bxObj).on("mouseenter.FilterChangeCheck", ChangeFilterCategory);
1192    $('.filter_link').on('click', function (e) {
1193        e.preventDefault();
1194        var id = $(this).data('id');
1195        $('#' + id).trigger('click');
1196    });
1197
1198    //$('.filters_area').trigger("sticky_kit:detach");
1199}
1200
1201
1202function OnFilterCheckBoxChange() {
1203
1204    var currentObj = $(this);
1205    if (currentObj.is(".disabled") || currentObj.is(".clicked")) {
1206        return;
1207    }
1208
1209
1210    //если это клик по хэшу фильтра
1211    // if ($("a", currentObj).length) {
1212    //     currentObj.addClass("clicked");
1213    //     $("a", currentObj).triggerHandler("click");
1214    //     return;
1215    // }
1216
1217    $("#FilterSubmitAction").data("filterset", 1);
1218    $("#OpenFilterProp").val($(currentObj).closest(".filter_content").attr("rel"));
1219    clearTimeout(currentReloadTimer);
1220    currentReloadTimer = setTimeout(FormFilterAjaxSubmit, 200);
1221}
1222
1223
1224function ChangeFilterCategory() {
1225    var currentCategory = parseInt($("#OpenFilterProp").val());
1226    var selectedCategory = parseInt($(this).attr("rel"))
1227    if (currentCategory != selectedCategory && $("#FilterSubmitAction").data("filterset")) {
1228        $("#OpenFilterProp").val($(this).attr("rel"));
1229        FormFilterAjaxSubmit();
1230    }
1231
1232}
1233
1234
1235function FormFilterAjaxSubmit() {
1236    clearTimeout(currentReloadTimer);
1237
1238    if (!$("#FilterSubmitAction").data("filterset")) {
1239        return;
1240    }
1241
1242    $("#FilterSubmitAction").triggerHandler("submit");
1243
1244}
1245
1246function InitSubstituteCloseButton() {
1247    var btn = $("#substitute");
1248    var href = btn.attr("onclick");
1249    href = "if($(this).hasClass('nochanged')){$('#popup_bg').hide();return false;}else{" + href + "}";
1250    btn.attr("onclick", href);
1251}
1252
1253function LastOrderWindow(e, bxObj) {
1254
1255    var galleryCont = $(".lastBasketStateAction", bxObj);
1256
1257    if (galleryCont.length) {
1258        $(galleryCont).delovoyGallery("OpenGallery", {
1259            callbackAfretOpen: function (options) {
1260                options.Obj.galleryLeftName.width(585);
1261                options.Obj.galleryLeftName.html("Что сделать с товарами, добавленными в прошлый раз?");
1262                options.Obj.galleryRight.remove();
1263                options.Obj.galleryLeft.css({
1264                    background: "none",
1265                    width: 585
1266                });
1267
1268                options.Obj.galleryRight.css({
1269                    position: "relative",
1270                    top: "-10px",
1271                    "float": "right"
1272                });
1273
1274
1275                options.Obj.galleryLeftContainer.html(galleryCont.html());
1276
1277                $("input[type=radio]", options.Obj.galleryLeftContainer).addClass("niceRadio").one("change.LastOrderWindow", function () {
1278                    $(".partnerSelect", options.Obj.galleryLeftContainer).removeClass("disabled");
1279                    $("input[type=radio]", options.Obj.galleryLeftContainer).off("click.LastOrderWindow");
1280                });
1281
1282                NiceCheckInit();
1283
1284                $(options.Obj.gallery).height("auto");
1285                $("div", options.Obj.gallery).filter(":not(.noauto)").height("auto");
1286
1287                $(".partnerCancel", options.Obj.galleryLeftContainer).on("click", function () {
1288                    $(galleryContOpen).delovoyGallery("CloseGallery");
1289                });
1290
1291            },
1292            height: 230,
1293            width: 600,
1294            rightPartWidth: 120,
1295            leftPartWidth: 590
1296        });
1297
1298    }
1299    return false;
1300}
1301
1302
1303/**
1304 *  Проверка состояния корзины
1305 * @returns {undefined}
1306 */
1307function CheckBasketState() {
1308    loader_Custom_ajax_shadow($('.basket_field'));
1309
1310    $.ajax({
1311        type: "POST",
1312        url: '/include/basketArea.php',
1313        data: "BASKETAJAX=Y",
1314        dataType: 'json'
1315    }).done(function (data) {
1316        $(".basketItemsTotalSum").html(data.TOTAL_SUMM_FORMATED);
1317        $(".basketItemsCount").html(data.COUNT_TOV);
1318        $('.basket_field').html(data.BASKET_STATE);
1319
1320
1321        loader_Custom_ajax_remove();
1322    });
1323
1324    curLocation = window.location.href;
1325
1326}

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.