$(function(){
	$.fn.jq_z_calculate=function(options){
		var settings={
			q_overall:null,
			b_overall:'.overall span',
			b_hidden:'input:hidden',
			b_current:'.products_quantity',
			cartTable:'table.list-table',
			prodParent:'tr.product',
			totalPrice:null,
			totalCart:'tr.total_price td.total span',
			singlePrice:'td.total_price span',
			sendQuerry:'no_ajax',
			add_to_cost:'td.shipping span'
		};
		if(options){$.extend(settings, options);}
		$.fn.extend({
			calculateAndFill:function(this_,settings){
				if((Number($(this_).find(settings.b_hidden).val())>settings.q_overall)&&settings.q_overall) $(this_).find(settings.b_hidden).val(settings.q_overall);
				var cur=Number($(this_).find(settings.b_hidden).val());
				if(cur==1){$(this_).find('.less:visible').hide();}else{$(this_).find('.less:hidden').show();}
				if(cur==settings.q_overall){$(this_).find('.more:visible').hide();}else{$(this_).find('.more:hidden').show();}
				$(this_).find(settings.b_current).text(cur);
				$(this_).find(settings.b_overall).text(settings.q_overall-cur);
			},
			cartCalculation:function(settings){
				var total = 0;
				$(settings.cartTable+' '+settings.singlePrice).each(function () {
					var unitPrice = Number($(this).html().replace(',', '.'));
					var input = $(this).parents(settings.prodParent).find(settings.b_hidden);
					var numOfUnits = Number(input.val());
					//if (isNaN(numOfUnits)) numOfUnits = 1;
					//if (numOfUnits < 1) numOfUnits = 1;
					input.val(numOfUnits);
					var price = unitPrice * numOfUnits;
					if(settings.totalPrice) $(this).parents(settings.prodParent).find(settings.totalPrice).text(price.toFixed(2).toString().replace('.', ','));
					total += price;
				});
				if(settings.add_to_cost&&total) total+=Number($(settings.cartTable+' '+settings.add_to_cost).text().replace(',', '.'));
				$(settings.cartTable+' '+settings.totalCart).text(total.toFixed(2).toString().replace('.',','));
			},
			updateCartCount:function(reply){
				$('#bag_amount').text(reply.count);
			}
		});
		$(this).find(settings.b_current).before('<a class="less" href="#"><span><!--less--></span>&larr;</a>').after('<a class="more" href="#"><span><!--more--></span>&rarr;</a>');
		if(!settings.q_overall) $(settings.b_overall).parent().hide();
		$.fn.calculateAndFill(this,settings);
		if(settings.sendQuerry) $.fn.cartCalculation(settings);
		var currentElement=this;
		$(this).find('a.more').click(function(event){
			event.preventDefault();
			$(currentElement).find(settings.b_hidden).val(Number($(currentElement).find(settings.b_hidden).val())+1);
			$.fn.calculateAndFill(currentElement,settings);
			if(settings.sendQuerry){
				$.fn.cartCalculation(settings);
				if(settings.sendQuerry!='no_ajax') $.getJSON(
					settings.sendQuerry,
					{id_sku: $(currentElement).find(settings.b_hidden).attr('name').split('-')[1], count: $(currentElement).find(settings.b_hidden).val()},
					$.fn.updateCartCount()
				);
			}
		});
		$(this).find('a.less').click(function(event){
			event.preventDefault();
			$(currentElement).find(settings.b_hidden).val(Number($(currentElement).find(settings.b_hidden).val())-1);
			$.fn.calculateAndFill(currentElement,settings);
			if(settings.sendQuerry){
				$.fn.cartCalculation(settings);
				if(settings.sendQuerry!='no_ajax') $.getJSON(
					settings.sendQuerry,
					{id_sku: $(currentElement).find(settings.b_hidden).attr('name').split('-')[1], count: $(currentElement).find(settings.b_hidden).val()},
					$.fn.updateCartCount()
				);
			}
		});
		
	}
});

