basket.js 5.44 KB
(function($){

    $.fn.basket = function(callerSettings) {

	var basket_id = this;

		var find_products = function(){
         $("a[rel~='product']").each(function (i) {
                $(this).bind('click',function(){
                var rel = $(this).attr('rel');
                var id = $('#product_id').val();
                var count = $('#count').val();
				$("#pic_notvisible").css('top','200px').css('left','110px');
				$('#pic_notvisible').show();
				var div2Pos = $(basket_id).position();
				$("#pic_notvisible").animate({left:div2Pos.left, top:div2Pos.top, opacity: 0.25, height: 'toggle'}, 1000);
                go_product({mod_id : id,count:count});
                return false;
                })
         });
        };

		var go_product = function(data){
		    var product_id = data.product_id;
			$.post("/basket/add/",  data ,
			function(data){
				//alert_msg("Товар добавлен<br /> в корзину",product_id);
				start_basket();
			});
		};

        var start_basket = function(){
			$.post("/basket/info/",
			function(data){
				$(basket_id).html(data);
			});

        };

		var alert_msg = function(msg,product_id){
			winW = document.body.offsetWidth;
			winH = document.body.offsetHeight
			$('.modal_box').remove();
			$('#data_box').remove();
			$('body').append('<div class="modal_box"></div>');
			$('body').append('<div id="data_box"></div>');
			$('#data_box').append('<div class="data_wrp"></div>');
					$('#data_box').css( "left", ((winW-400)/2)+'px' );

			var scrollTop = document.documentElement.scrollTop
			if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1 || navigator.userAgent.toLowerCase().indexOf('safari') > -1) {
				scrollTop = document.body.scrollTop;
			}
			$('#data_box').css( "top", (scrollTop+150)+'px' );

			app = '<center>';
			app +='<h1>'+msg+'</h1>';
			app += '<br /><input type="submit" class="submit4" style="text-transform:none;" value="Перейти в корзину" onClick="document.location=\'/yii2/basket/\'" />&nbsp;';
			app += '<input type="submit" class="submit4" style="text-transform:none;" id="p_close" value="Продолжить покупки" />';
			app += '</center>';
			$('#data_box .data_wrp').append(app);


			$(".modal_box, #modal_close, #p_close").click(function() {
				$('.modal_box').remove();
				$('#data_box').remove();
			});
		};

		find_products();
		start_basket();

		// frontend calculator
        var Model = {
            init : function() {
				this.data = [];
				this.setModel();
            },

            setModel : function() {
                Model.data = [];
				$(".basket_item").each(function(index, el) {
					var objItem = {};
					objItem.cost = parseFloat(
						$(el).find("[name $= '[cost]']").val()
					);
					objItem.count = parseInt(
                        $(el).find("[name $= '[count]']").val()
					);
					Model.data.push(objItem);
                });
            },

			getData : function() {
				return this.data;
            }
        };

        var Controll = {
            init : function() {
                Model.init();
                View.init();
            },

			getData : function() {
				return Model.getData();
            },

			setData : function() {
				Model.setModel();
            },

			countSumCost : function(elementIndex) {
				var obj = this.getData()[elementIndex];
				var sumCost = obj.cost * obj.count;
				if ( isNaN(sumCost) ){
					return 0;
				}
				return parseFloat(sumCost.toFixed(2));
            },

			countTotalCost : function() {
				var totalCost = 0;
				this.getData().forEach(function(obj, index) {
					totalCost += Controll.countSumCost(index);
				});
				return parseFloat(totalCost.toFixed(2));
            }
        };

        var View = {
            init : function() {

            	this.xhr = null;

				$(document).on( "keyup", "[name $= '[count]']", function(e) {
					var form = $(this).parents("form");
					Controll.setData();
//					console.log(Controll.getData());
					$("[name $= '[sum_cost]']").each(function(index, el) {
						var sumCost = Controll.countSumCost(index);
						$(el).val(sumCost);
						$($(".t_sum_cost")[index]).text(sumCost);
                    });

					var total_cost = Controll.countTotalCost();
					$("#order-total").val(total_cost);
					$(".t_total_cost").text(total_cost);
//					console.log(total_cost);

					if (View.xhr !== null){
                        View.xhr.abort();
					}

                    View.xhr = $.ajax(
                        "/basket/update",
                        {
                            'data' : form.serializeArray(),
                            'method' : "POST"
                        }
                    )
                                .done(function(data) {
//                                    console.log("done");
                                    $(basket_id).html(data);
                                })
                                .fail(function() {
//                                    console.error("ERROR");
                                })
                                .always(function() {
//                                	console.log("xhr to null");
                                    View.xhr = null;
                                });

                } );
            }

        };

        Controll.init();
		// frontend calculator
	}

})(jQuery);