


function ShoppingCart()
{
	SystemRequest.gateway	= SystemCore.MODULES_GATEWAY;
	var context = this;
	this.paymentId;
	this.paymentMethod;
	this.deliveryId;
	this.deliveryMethod;
	
	this.moneda = '';
	
	this.init = function()
	{	
		SystemRequest.load("ProductsCatalog", "getSettings", [], context.productSettingsLoaded, context);
	}
	
	this.productSettingsLoaded = function(response)
	{
		this.moneda = response.data.moneda;		
	}
	
	this.enableLive = function()
	{
		var paymentId = $(".ShoppingCartPaymentDelivery select[name=paymentMethod]").children(":selected").attr("value");
		var deliveryId = $(".ShoppingCartPaymentDelivery select[name=deliveryMethod]").children(":selected").attr("value");
		
			
		SystemRequest.load("ShoppingCart", "getPaymentMethod", [paymentId], context.paymentMethodLoaded, context);
		SystemRequest.load("ShoppingCart", "getDeliveryMethod", [deliveryId], context.deliveryMethodLoaded, context);
		
		$(".ShoppingCartPaymentDelivery select[name=paymentMethod]").change(context.paymentChangeHandler);
		$(".ShoppingCartPaymentDelivery select[name=deliveryMethod]").change(context.deliveryChangeHandler);
		
		$(".ShoppingCartButtons input[name=updateShoppingCart]").click(context.submitUpdateForm);
	}
	
	this.submitUpdateForm = function(event)
	{		
		$(".ShoppingCartBasket form").submit();
	}
	
	this.paymentChangeHandler = function(event)
	{	
		var select = $(event.currentTarget);
		var paymentId = select.children(":selected").attr("value");
			context.paymentId = paymentId;
		
		context.requestPayment();		
		context.setSessionPaymentDelivery();
	}
		
	this.paymentMethodLoaded = function(response)
	{
		context.paymentMethod = response.data;		
		context.calculateTotalFinal();
	}
	
	
	this.deliveryChangeHandler = function(event)
	{	
		var select = $(event.currentTarget);
		var deliveryId = select.children(":selected").attr("value");
			context.deliveryId = deliveryId;
		
		context.requestDelivery();
		context.setSessionPaymentDelivery();
	}
		
	this.deliveryMethodLoaded = function(response)
	{
		context.deliveryMethod = response.data;		
		context.calculateTotalFinal();
	}
	
	this.paymentDeliverySeted = function(response)
	{
	}
	
	this.setPaymentId = function(id)
	{
		context.paymentId = id;	
		context.requestPayment();
	}
	
	this.setDeliveryId = function(id)
	{
		context.deliveryId = id;	
		context.requestDelivery();
	}
	
	this.requestPayment = function()
	{
		SystemRequest.load("ShoppingCart", "getPaymentMethod", [context.paymentId], context.paymentMethodLoaded, context);
	}
	
	this.requestDelivery = function()
	{
		SystemRequest.load("ShoppingCart", "getDeliveryMethod", [context.deliveryId], context.deliveryMethodLoaded, context);
	}
	
	this.setSessionPaymentDelivery = function()
	{
		SystemRequest.load("ShoppingCart", "setPaymentAndDelivery", [context.paymentId,context.deliveryId], context.paymentDeliverySeted, context);
	}
	
	this.calculateTotalFinal = function()
	{
		var totalCos = parseFloat($(".ShoppingCartDetails #totalBascketSum").html());
		var totalFinal = totalCos;
		var okForCheckout = true;
		
		if(context.paymentMethod && context.paymentMethod.id)
		{
			totalFinal = context.paymentMethod.percent==1 ? (totalFinal + (totalCos*context.paymentMethod.extraPrice)/100) : (totalFinal + parseFloat(context.paymentMethod.extraPrice)) ;
						
		}
		else
		{
			okForCheckout = false;
		}
		
		if(context.deliveryMethod && context.deliveryMethod.id)
		{
			totalFinal = context.deliveryMethod.percent==1 ? (totalFinal + (totalCos*context.deliveryMethod.extraPrice)/100) : (totalFinal + parseFloat(context.deliveryMethod.extraPrice)) ;
		}
		else
		{
			okForCheckout = false;
		}

		totalFinal = parseInt(totalFinal*100)/100;
			
		$(".ShoppingCartDetails #totalDePlata").html(totalFinal+" "+this.moneda);
		
		
		if(okForCheckout)
		{
			$(".ShoppingCartButtons input[name=checkout]").attr("disabled",false)
		}
		else
		{
			$(".ShoppingCartButtons input[name=checkout]").attr("disabled",true)
		}
		
		
		if($(".ShoppingCartDetails"))
		{
			$(".ShoppingCartDetails #paymentMethodName").html(context.paymentMethod && context.paymentMethod.name ? context.paymentMethod.name : '');
			$(".ShoppingCartDetails #paymentMethodDescription").html(context.paymentMethod && context.paymentMethod.description ? context.paymentMethod.description : '');
			$(".ShoppingCartDetails #paymentMethodPrice").html(context.paymentMethod && context.paymentMethod.extraPrice ? context.paymentMethod.extraPrice : '');
			if(context.paymentMethod && context.paymentMethod.percent==1)
			{
				$(".ShoppingCartDetails #paymentMethodPrice").append("%");
			}
			else if(context.paymentMethod && context.paymentMethod.extraPrice)
			{
				$(".ShoppingCartDetails #paymentMethodPrice").append(" "+this.moneda);
			}
			
			$(".ShoppingCartDetails #deliveryMethodName").html(context.deliveryMethod && context.deliveryMethod.name ? context.deliveryMethod.name : '');
			$(".ShoppingCartDetails #deliveryMethodDescription").html(context.deliveryMethod && context.deliveryMethod.description ? context.deliveryMethod.description : '');
			$(".ShoppingCartDetails #deliveryMethodPrice").html(context.deliveryMethod && context.deliveryMethod.extraPrice ? context.deliveryMethod.extraPrice : '');
			if(context.deliveryMethod && context.deliveryMethod.percent==1)
			{
				$(".ShoppingCartDetails #deliveryMethodPrice").append("%");
			}
			else if(context.deliveryMethod && context.deliveryMethod.extraPrice)
			{
				$(".ShoppingCartDetails #deliveryMethodPrice").append(" "+this.moneda);
			}
			
		}
		
	}
	
	this.addProduct = function(productId,quantity,charDet,monstra)
	{
		SystemRequest.load("ShoppingCart", "addProduct", [productId,quantity,charDet,monstra], context.productAdded, context);
	}
	
	this.productAdded = function(response)
	{
		$(".ShoppingCartLite .nrProds").html(response.data);
		var e	= new Event("ShoppingCart.ProductToBasket",{},this);
		SystemCore.dispatchEvent(e);
	}
	
	var basketUpdateListeners = [];	
	this.registerProductBasketUpdate = function(container)
	{
		basketUpdateListeners.push(container);
		SystemCore.addEventListener(this,"ShoppingCart.ProductToBasket")
	}
		
	this.listenToAddProduct	= function()
	{
		SystemCore.addEventListener(this,"shoppingCartAddProductRequest");
	}
	
	this.listen	= function(event)
	{
		switch (event.type)
		{
			case 'shoppingCartAddProductRequest':

					context.addProduct(event.data.productId,event.data.quantity,event.data.charDet,event.data.monstra);
				
			break;
			
			case 'ShoppingCart.ProductToBasket':
				
					for(var i in basketUpdateListeners)
					{
						$(basketUpdateListeners[i]).show()
						$(basketUpdateListeners[i]).html("Produs adugat in cos");
						$(basketUpdateListeners[i]).delay(2000).fadeOut(2000);
					}
				
				break;
			
		}
	}
	
	this.init();
}


