var good_word_forms = ['товаров','товар','товара','товаров']; var ruble_word_forms = ['рублей','рубль','рубля','рублей']; Object.size = function(obj) { var size = 0, key; for (key in obj) { if (obj.hasOwnProperty(key)) size++; } return size; }; function number_format(number, decimals, dec_point, thousands_sep ) { // Format a number with grouped thousands // // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + bugfix by: Michael White (http://crestidg.com) var i, j, kw, kd, km; // input sanitation & defaults if( isNaN(decimals = Math.abs(decimals)) ){ decimals = 2; } if( dec_point == undefined ){ dec_point = ","; } if( thousands_sep == undefined ){ thousands_sep = "."; } if (CURRENT_COMPANY == 15) { number = Math.round(number / 1000) * 1000; } i = parseInt(number = (+number || 0).toFixed(decimals)) + ""; if( (j = i.length) > 3 ){ j = j % 3; } else{ j = 0; } km = (j ? i.substr(0, j) + thousands_sep : ""); kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep); //kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : ""); kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : ""); return km + kw + kd; } function count_word(number, word_forms) { // return correct form of word // // by: Maxim Kovtun (emotionless at yandex.ru) // word forms example: good_word_forms = ['товаров','товар','товара','товаров']; number = number.toString(); if(number.length>1 && number.substr(number.length-2,2)>=11 && number.substr(number.length-2,2)<=14) return word_forms[0]; else if(number.substr(number.length-1,1)==1) return word_forms[1]; else if(number.substr(number.length-1,1)>=2 && number.substr(number.length-1,1)<=4) return word_forms[2]; else return word_forms[3]; } function RecountOrder(href) { var list = {}; $('#order_table tbody tr').each(function() { id = $(this).attr('id'); list['g['+id+']'] = $(this).find('input.input-count').attr('value'); } ); list['get_type'] = 'recount'; $.getJSON('/include/get_content.php', list, function(data) { $('#order_table tbody tr').each(function() { id = $(this).attr('id'); if(!(id in data.cart)) $(this).remove(); } ); UpdateOrder(data); if(href) location.href = href; } ); } function DeleteItems(objJQcheckbox) { var list = {}; var rows_to_del = []; i=0; objJQcheckbox.each(function() { list['g['+i+']'] = $(this).attr('name').replace('del_item_',''); // id товаров для удаления rows_to_del.push($(this).parents('tr')); // объекты-строки для удаления i++; } ); if(Object.size(list)) { list['get_type'] = 'delitems'; $.getJSON('/include/get_content.php', list, function(data) { // удаляем строки if(rows_to_del.length) { for(i=0; iВ корзине нет ни одного товара

'); UpdateCart(false); } } ); } } function UpdateOrder(data) { var cart_mess = ''; var coeff = data.cart_coeff || 1; // устанавливаем цену каждого товара и вычисляем сумму за товар $.each(data.cart, function(i, good) { line = $('#'+good.id); // строка с товаром line.find('td.price').text(number_format(data.do_round?Math.round(Math.round(parseFloat(good.price))*coeff):Math.round(parseFloat(good.price)*100)/100*coeff, 2, ',', ' ')); // цена товара line.find('input.input-count').attr('value',good.num); // количество товара line.find('td.sum').text(number_format(parseInt(good.num)*(data.do_round?Math.round(Math.round(parseFloat(good.price))*coeff):Math.round(parseFloat(good.price)*100)/100*coeff), 2, ',', ' ')); //сумма товара } ); // обновляем итого, общее количество товаров, общую сумму и вес (если есть) $('#total_price').text(number_format(data.cart_total.cart_sum, 2, ',', ' ')); if($('#total_weight').size()!=0) $('#total_weight').text(number_format(data.cart_total.cart_weight, 3, ',', ' ')); if($('#total_volume').size()!=0) $('#total_volume').text(number_format(data.cart_total.cart_volume, 2, ',', ' ')); var $order_coeff_notice = $('.order-coeff-notice'); if($order_coeff_notice.size()!=0) { if(data.cart_coeff) { $order_coeff_notice.show(); $('#order_table td').filter('.price,.sum').addClass('order-coeff'); } else { $order_coeff_notice.hide(); $('#order_table td').filter('.price,.sum').removeClass('order-coeff'); } } if(data.cart_total.cart_num) { cart_mess = Count(data.cart)+' '+count_word(Count(data.cart), good_word_forms); if(is_show_price) cart_mess += ' на '+number_format(parseFloat(data.cart_total.cart_sum), 2, ',', ' ')+' руб.'; } else cart_mess = 'нет товаров'; UpdateCart(cart_mess); } function DeleteSelected() { DeleteItems($('#order_table tbody input.del_checkbox:checked')); } function DeleteAll() { if(confirm('Удалить все товары?')) DeleteItems($('#order_table tbody input.del_checkbox')); } function AddItem(id, obj, count, is_set) { var list = {}; var cart_mess = '', $tmp; list['g'] = id; if(typeof(count)!='undefined') list['q'] = count; else list['q'] = typeof(obj)=='undefined'?(is_set?0:1):$('#quantity_'+id).val(); list['get_type'] = is_set?'setitem':'additem'; $.getJSON('/include/get_content.php', list, function(data) { if(data.cart_total.cart_num) { cart_mess = Count(data.cart)+' '+count_word(Count(data.cart), good_word_forms); if(is_show_price){ cart_mess += ((window.opener != null && $(window.opener.document).find('.links-block .link-cart .cart_total').length) || $('.links-block .link-cart .cart_total').length ? '
на ' : ' на ') + number_format(parseFloat(data.cart_total.cart_sum), 2, ',', ' ') + ' руб.'; } } else cart_mess = 'нет товаров'; UpdateCart(cart_mess); if(id in data.cart) { $('a.in_basket_'+id).css('display','inline'); $tmp = $('#good_'+id+'_count').text(data.cart[id].num); $tmp = $('#good_'+id+'_count_pcs').text(data.cart[id].num + ' шт').closest('.js-good-order-block').parent(); $tmp.find('.offers__cart-link').removeClass('hidden'); $tmp.find('.p-card__order-info').removeClass('hidden'); if ($('body').hasClass('goodlock')) { $tmp = $('.js-good2cart[data-id='+id+']'); $tmp.addClass($tmp.hasClass('offers__order-btn') ? 'offers__order-btn--in-cart' : 'p-card__order-btn--in-cart').closest('.js-good-order-block').find('.counter__field-input').attr('data-value', data.cart[id].num); } } else { $('a.in_basket_'+id).css('display','none'); $tmp = $('#good_'+id+'_count_pcs').text($('#good_'+id+'_count_pcs').attr('data-default')).closest('.js-good-order-block.offers__order-wrap').parent().find('.offers__cart-link').addClass('hidden'); if ($('body').hasClass('goodlock')) { $tmp = $('.js-good2cart[data-id='+id+']') $tmp.removeClass($tmp.hasClass('offers__order-btn') ? 'offers__order-btn--in-cart' : 'p-card__order-btn--in-cart').closest('.js-good-order-block').find('.counter__field-input').attr('data-value', '0'); } } } ); } function NoAuthAddItem(id, obj) { alert("Для покупки товаров вам необходимо авторизоваться на сайте"); document.forms["login_form"].elements["login"].focus(); return false; } function PreAddItem(id, obj) { objInput = $(obj); objDynamicBuy = $('#count_to_buy'); new_top = (objInput.offset().top - 9); new_left = (objInput.offset().left - 46) + 24 - objDynamicBuy.find('input').width(); window.setTimeout(function() { objDynamicBuy.find('input').attr('id', 'quantity_'+id).val('').focus(); }, 10); objDynamicBuy.offset({top: new_top, left: new_left}).css({'visibility': 'visible', 'width': (65 + objInput.width()) + 'px'}); objDynamicBuy.find('img').attr('src', objInput.attr('src')); // привязываем событие - закрытие окна по Escape $("body").bind('keydown', CloseCountOnEsc); } function AddDynamicItem(obj, count_id) { id = $(obj).parent().find('input').attr('id').replace(/quantity_/,''); count = $('#quantity_'+id).val(); if(count!='' && count!=0) AddItem(id, true); $('#'+count_id).css('visibility','hidden'); // удаляем событие - закрытие окна по Escape $("body").unbind('keydown', CloseCountOnEsc); } function PreAddOneItem(id, obj) { objInput = $(obj); objDynamicBuy = $('#count_to_buy_one_item'); new_top = (objInput.offset().top-7); new_left = (objInput.offset().left-9); objDynamicBuy.find('input').attr('id', 'quantity_'+id).val(''); objDynamicBuy.offset({top: new_top, left: new_left}).css('visibility','visible'); objDynamicBuy.find('input').focus(); // привязываем событие - закрытие окна по Escape $("body").bind('keydown', CloseCountOnEsc); } $(document).on('click', '.js-good2cart', function() { var $this = $(this), $inp = $this.closest('.js-good-order-block').find('.counter__field-input'), $block = $this.closest('.js-good-order-block').find('.js-good-counter'); if ($block.hasClass('hidden')) { $block.removeClass('hidden'); $inp.val($inp.attr('data-value')).trigger('change').trigger('focus'); } else { if ($('body').hasClass('goodlock')) AddItem($this.attr('data-id'), true, $inp.val(), true); else if ($inp.val()) AddItem($this.attr('data-id'), true, $inp.val()); $block.addClass('hidden'); } }); if ($('body').hasClass('goodlock')){ $(document).on('keydown', '.counter__btn--minus, .counter__btn--plus', function(e) { if (e.keyCode == 13){ e.preventDefault(); $(this).closest('.js-good-order-block').find('.js-good2cart').trigger('click'); return false; } }); } $(document).on('click', '.counter__btn--minus', function() { var $this = $(this), $inp = $this.closest('.counter').find('.counter__field-input'), val = parseInt($inp.val()), minVal = parseInt($inp.attr('min')); minVal = isNaN(minVal) || minVal < 2 ? 1 : minVal; if (val > minVal) $inp.val(--val); else if ($('body').hasClass('goodlock')) { $inp.val(--val); $this.closest('.js-good-order-block').find('.js-good2cart').trigger('click'); } else $this.closest('.js-good-order-block').find('.js-good-counter').addClass('hidden'); // if (val <= minVal) $this.prop('disabled', 'disabled'); }); $(document).on('click', '.counter__btn--plus', function() { var $this = $(this), $inp = $this.closest('.counter').find('.counter__field-input'), val = parseInt($inp.val()), minVal = parseInt($inp.attr('min')), $minus = $this.closest('.counter').find('.counter__btn--minus'); minVal = isNaN(minVal) || minVal < 2 ? 1 : minVal; $inp.val(isNaN(val) || val < minVal ? minVal : ++val); if (val > minVal) $minus.prop('disabled', false); }); $(document).on('input change', '.counter__field-input', function() { var $this = $(this), val = parseInt($this.val()), minVal = parseInt($this.attr('min')), $minus = $this.closest('.counter').find('.counter__btn--minus'); minVal = isNaN(minVal) || minVal < 2 ? 1 : minVal; if (isNaN(val) || val < minVal) { val = 0; $this.val(''); } $minus.prop('disabled', /*val > minVal*/1 ? false : 'disabled'); }); $(document).on('click', '.offers__order-btn', function() { var $this = $(this); if ($this.closest('.offers__order-wrap').length) return; AddItem($this.attr('data-id'), true, $this.closest('.offers').find('.counter__field-input').val()); }); function CloseCountOnEsc(event) { if(event.keyCode==27) { return CloseCount(); } } function CloseCount() { $('#count_to_buy,#count_to_buy_one_item').css('visibility','hidden'); // удаляем событие - закрытие окна по Escape $("body").unbind('keydown', CloseCountOnEsc); return false; } function UpdateCart(text) { UpdateCartLine(text, document); //обновление корзины в родительском окне try { if(window.opener != null) UpdateCartLine(text, window.opener.document); } catch(e) {} } function UpdateCartLine(text, doc) { var objDoc = $(doc), glCart = objDoc.find('#header .link-cart'); objDoc.find('.cart_image').remove(); if(text) { objDoc.find('span.cart_cont').before(''); if(objDoc.find('span.cart_cont a').size() == 0) { objDoc.find('span.cart-empty').remove(); objDoc.find('span.cart_cont').html('В корзине '+text.replace('
',' ')+'
        Оформить заказ'); } objDoc.find('span.cart_total').text(objDoc.find('span.cart_cont').length ? text.replace('
', ' ') : text); if (glCart.length) { var count = parseInt($.trim(text)); count = isNaN(count) || count < 1 ? false : count; glCart.addClass('filled').find('.link-text').text(count || 'Пусто'); glCart.find('.visually-hidden .cart_total').html(count ? text : 'нет товаров.'); } } else { objDoc.find('span.cart_cont').before(''); objDoc.find('span.cart_cont').empty().html('В корзине нет товаров.'); if (glCart.length) { glCart.removeClass('filled').find('.link-text').text('Пусто'); glCart.find('.visually-hidden .cart_total').text('нет товаров.'); } } }