(function($){
	
	var productBaskets = [];
	
    $.extend({ productBasket: function(conf){
	
		var basketSelector = conf.basketSelector,
			basketName = conf.basketName,
			basketScript = conf.basketScript,
			basketContent = conf.basketContent,
			basketOnAdd = conf.basketOnAdd,
			basketOnRemove = conf.basketOnRemove,
			basketOnError = conf.basketOnError;
		
		if (typeof productBaskets[basketName] == "undefined") {
			productBaskets[basketName] = [];
		};
		
		var BasketList = productBaskets[basketName];
		
		basketContent.find('a[product-basket-id]').each(function(i){
			BasketList[$(this).attr("product-basket-id")] = $.parseJSON($(this).attr("product-basket-data").replace(/'/g, '"'));
		});
		
		$(basketSelector).live("click", function(e){
			var BasketId = $(this).attr("product-basket-id"),
				BasketData = $.parseJSON($(this).attr("product-basket-data").replace(/'/g, '"'));
			e.preventDefault();
			toggle(BasketId, BasketData, $(this));
		});
		
		var toggle = function(BasketId, BasketData, eventItem){
			if (typeof BasketList[BasketId] == "undefined") {
				com("add", BasketId, BasketData, eventItem);
			} else {
				com("remove", BasketId, BasketData, eventItem);
			} 
		};
		
		var com = function(method, BasketId, BasketData, eventItem){
		
			var dataString = {
				productBasket: 1,
				productMethod: method,
				productData: BasketData
			};
			
			$.ajax({
				type: "POST",
				url: basketScript,
				data: dataString,
				success: function(data, textStatus){
					if (method == "add") {
						BasketList[BasketId] = BasketData;
						basketOnAdd(eventItem, dataString, data);
					} else if (method == "remove") {
						BasketList.splice(BasketId, 1,undefined);
						basketOnRemove(eventItem, dataString, data);
					}
				},
				error: function(err){
					basketOnError(eventItem, dataString, err);
				}
			});
		};
		
	}});
	
})(jQuery);

