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 = [];
if (objJQcheckbox === 'all') {
list['g'] = 'all'; // удаляем все товары
$('#order_table tbody input.del_checkbox').each(function() {
rows_to_del.push($(this).parents('tr')); // объекты-строки для удаления
});
}
else {
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;
if (data.cart) {
// устанавливаем цену каждого товара и вычисляем сумму за товар
$.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('all');
}
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('нет товаров.');
}
}
}
$('#order_table tbody input.del_checkbox').change(function() {
if (this.checked && $('#order_table tbody input.del_checkbox:checked').length > 100) {
alert('Пожалуйста, не выбирайте более 100 товаров для удаления');
this.checked = false;
}
});