/** jquery ajax cart
**	@date 02-12-2009 
**
**
**/
jQuery.fn.extend({
	cartMa: function(settings,vars){
		var obj=$(this);
		function showCart(){
			var set=$("#cartMa").data('sets');
			
			if(!$('#cartMa').hasClass('over')){
				set.beforeShow(obj);
				set.show(obj);
				set.afterShow(obj);
			};
			$('#cartMa').addClass('over').stopTime("hide");
			
		}
		function hideCart(){
			var set=$("#cartMa").data('sets');
			
			$('#cartMa').oneTime(set.showTime,"hide",function(){
				if($('#cartMa').hasClass('over')){
					$('#cartMa').removeClass('over');
					set.beforeHide(obj);
					set.hide(obj);
					$('#cartMa').stopTime('hide');
					set.afterHide(obj);
				};
			});
		}
		function update(data,toshow){
			var set=$("#cartMa").data('sets');
			var pSet=$("#cartMa").data('pSets');
			
			$('#cartMa .cartBottom a').attr('href',data.cart.url);
			$('#cartMa .cartBottom span').text(new Number(data.cart.cart_summary.sc_price_total).toFixed(2).replace('.',',')+' zł');
			obj.find(set.countRef).text(data.cart.cart_summary.sc_item_quantity+" ");
			obj.find(set.priceRef).text(new Number(data.cart.cart_summary.sc_price_total).toFixed(2).replace('.',',')+' zł');
			
			$('#cartMa .cartContent').empty();
			if(data.cart.cart_item_list.length>0){
			var cartList='<ul>';
			for(var j=0;j<data.cart.cart_item_list.length;j++)cartList+='<li>'+set.rowGenerator(data.cart.cart_item_list[j])+'</li>';		
			cartList+='</ul>';
			} else var cartList='<p>koszyk jest pusty</p>'
			$('#cartMa .cartContent').append(cartList);
			$('#cartMa .cartTop p').remove();
			var type="";
			if(data.messages!=null)for(var i=0;i<data.messages.length;i++){
				switch(data.messages[i].type){
					case "ERROR":type="error";break;
					case "WARNING":type="warning";break;
					case "MESSAGE":type="info";break;				
				};
				
				$('#cartMa .cartTop').append('<p class="'+type+'">'+data.messages[i].content+'</p>');
			 };
			 
			if(toshow){
				showCart();
				hideCart();
				if(set.scrollTop)$(document).scrollTop(0);
			};
			pSet.lock=false;
			$("#cartMa").data('pSets',pSet);
		};
		function send(obj, vars, toShow){
			var set=$("#cartMa").data('sets');
			var pSet=$("#cartMa").data('pSets');
			if(pSet.lock==true)return;
			pSet.lock=true;
			$("#cartMa").data('pSets',pSet);
			$.ajax ({
					type: set.sendMethod,
					url: set.cartServer,
					data: vars,
					cache: false,
					success: function(data){
						update(data,toShow);
					},
					error:function(XMLHttpRequest, textStatus, errorThrown){
						$('#cartMa .cartTop p').remove();
						$('#cartMa .cartTop').append('<p class="error">Wystąpił błąd('+textStatus+')</p>');
						showCart();
						hideCart();
						if(set.scrollTop)$(document).scrollTop(0);
						pSet.lock= false;
						$("#cartMa").data('pSets',pSet);
					},
					dataType: "json"
			});
			
		}
		function destroy(obj){
			var set=$("#cartMa").data('sets');
			if(set==null)return;
			
			$("#cartMa").removeData().remove();
		}
		function init(obj, settings){
			var set={
				appendTo:'#content',
				sendMethod: "POST", //GET, POST
 				countRef:'',
				priceRef:'',
				cartServer:'',
				offsetX:0,
				offsetY:0,
				showTime:2000,
				scrollTop:true,
				rowGenerator:function(data){
					var elem='<div class="clearfix"><div class="left"><h4>'+data.sci_variation_display_name+'</h4>';
						elem+='<h5>'+data.sci_attribute_value_list+'</h5></div><div class="right"><dl><dt>x'+data.sci_quantity+'</dt>';
						elem+='<dd>'+(new Number(data.sci_total_sold_price)).toFixed(2).replace('.',',')+' zł</dd></dl></div></div>';
					return elem;
				},
				afterInit:function(obj){},
				beforeShow:function(obj){},
				show:function(obj){
					var settings=obj.data('settings');
					$('#cartMa').show(0);
					$('#cartMaMovingArea').css('top',(-1)*$('#cartMaMovingArea').height()).stop().animate({top:0},300);			
				},
				afterShow:function(obj){},
				beforeHide:function(obj){},
				hide:function(obj){
					$('#cartMaMovingArea').stop().animate({top:(-1)*$('#cartMaMovingArea').height()-10},300,function(){
						$('#cartMa').hide(0);
						$('#cartMa .cartTop p').remove();
					});
				},
				afterHide:function(obj){}
			};
			set=jQuery.extend(set,settings);
			
			var off=obj.offset();
			
			$('<div id="cartMa"><div id="cartMaMovingArea"><div id="cartMaMovingAreaWrap"><div class="cartHead">Zawartość koszyka</div><div class="cartTop"><p class="warning">Trwa aktualizacja koszyka</p></div><div class="cartContent"><p>koszyk jest pusty</p></div><div class="cartBottom clearfix"><em>RAZEM:</em><span>0.00 zł</span><a href="#">Pokaż koszyk</a></div></div></div></div>').appendTo(set.appendTo).css({
				top: '-63px',
				right: '-65px'
			}).hover(showCart,hideCart).data('sets',set).data("pSets",{lock:true});
			
			
			obj.hover(showCart,hideCart);
			
			set.afterInit(obj);	
			if(settings.initData==null)send(obj,{},false); else update(settings.initData,false);
		}
		
		switch(settings){
			case "send": send(obj,vars,true);break;
			case "destroy": destroy(obj);break;
			default: init(obj,settings);break;			
		};
	}
});
