var MiniBasket = {

	/**
	 * Init parses all basketLinks and sets Click Handler or deactivates it
	 * wether more than MAX_ITEMS in cart or not.
	 */
	init: function() {
		var self = this;
		$('.basketLink').each(function(index, item) {
			if(item.id) {
				var data = self.extractData(item.id);
				var cartItem = CartManager.getItemBySlug(data.slug);
				if(cartItem == null || cartItem.quantity < shop.MAX_ITEMS_IN_CART) {
					self.addCartClickHandler($(item));
				} else {
					self.lockCartClickHandler($(item));
				}
				self.updateQuantitiySelect(data);
			}
		});
	},

	extractData: function(idString) {
		var data = idString.split('__');
		var dataObject = {};
		dataObject.slug = ''+data[0]+'';
		dataObject.productId = ''+data[1]+'';
		return dataObject;
	},

	serializeData: function(dataObject) {
		return ""+dataObject.slug+"__"+dataObject.productId;
	},

	addToCart: function(dataObject) {
		var quantity = 1;
		if($('#quantity_'+dataObject.productId).size()) {
			quantity = $('#quantity_'+dataObject.productId).val();
		}
		// Debug.log("Quantity is " + quantity);
		var isValidAddition = false;
		var cartItem = CartManager.getItemBySlug(dataObject.slug);
		if(cartItem != null) {
//			Debug.log("cartItem.quantity: "  +  parseInt(cartItem.quantity));
//			Debug.log("quantity: "  +  parseInt(quantity));
//			Debug.log("shop.MAX_ITEMS_IN_CART: "  +  shop.MAX_ITEMS_IN_CART);
//			Debug.log("cartItem.quantity + quantity = "  +  (parseInt(cartItem.quantity) + parseInt(quantity)));
			if(parseInt(cartItem.quantity) + parseInt(quantity) <= shop.MAX_ITEMS_IN_CART) {
				isValidAddition = true;
			}
		} else {
			isValidAddition = true;
		}
		if(isValidAddition) {
			this.ajaxAddProduct(dataObject, quantity);
		} else {
		}
	},

	ajaxAddProduct: function(dataObject, quantity) {
		quantity = quantity !== undefined ? quantity : 1;
		var url = shop.addToCarAjaxUrl;
		var self = this;
		var callBack = function(response) {
			if(response.results && response.results == "Erfolgreich") {
				MiniBasket.updateMiniBasket(response.cart_count, response.discount_cart_total);
				CartManager.addOrIncrementItemQuantity(dataObject, quantity, response.available);
				var cartItem = CartManager.getItemBySlug(dataObject.slug);
				if(cartItem.quantity >= shop.MAX_ITEMS_IN_CART || cartItem.available == 0) {
					self.lockCartClickHandler($('#' + self.serializeData(dataObject)));
				}
				self.updateQuantitiySelect(dataObject);
				var options = {
				    width: 220,
				    height: 0,
                    resizable: false
                };
				$('#cartAddSuccessDialog').dialog('open');
			} else {
				Dialog.simpleDialog(shop.i18n.ADD_TO_CART_ERROR, shop.i18n.ADD_TO_CART_ERROR_LONG, 0);
			}
		};
		var data = {productname: dataObject.slug, quantity: quantity};
		$.post(url, data, callBack, 'json');
	},

	updateMiniBasket: function(newCount, newTotal) {
	    $( '.basket' ).addClass('full');
	    $( '.icon_basket' ).fadeOut('');
	    $( '.icon_basket' ).fadeIn('');
	    $('#number_entries').html(newCount);
	    $('#cart_total').html(newTotal);
	},

	lockCartClickHandler: function(anchor) {
		$(anchor).unbind('click');
		$(anchor).click( function() {
			$('#cartMaxItemsReachedDialog > p').html($('#cartMaxItemsReachedDialog > p').html().replace(/%s/, shop.MAX_ITEMS_IN_CART));
			$('#cartMaxItemsReachedDialog').dialog('open');
			return false;
		});
		$(anchor).attr('title', shop.i18n.MAX_ITEMS_REACHED);
		// $(anchor).attr('href', shop.cartPageUrl);
		$(anchor).html(shop.i18n.MAX_ITEMS_REACHED);
	},

	addCartClickHandler: function(anchor) {
		var idString = $(anchor).attr('id');
		// Debug.log(idString);
		var data = this.extractData(idString);
		$(anchor).click(function() {
			MiniBasket.addToCart(data);
		});
		$(anchor).attr('title', shop.i18n.ADD_TO_CART_ANCHOR_LABEL);
		$(anchor).attr('href', 'javascript:void(0);');
		$(anchor).html(shop.i18n.ADD_TO_CART_ANCHOR);
	},

	updateQuantitiySelect: function(dataObject) {
		if($('#quantity_'+dataObject.productId).size()) {
			var cartItem = CartManager.getItemBySlug(dataObject.slug);
			if(cartItem != null) {
				var rest = parseInt(cartItem.available);
				// Debug.log("updateQuantitiySelect rest: " + rest);
				if(rest > 0) {
					$('#quantity_'+dataObject.productId).show();
					$('#quantity_'+dataObject.productId).empty();
					for(var i = 1; i <=rest; i++) {
						var newDom = $('<option value="'+i+'">'+i+'</option>');
						$('#quantity_'+dataObject.productId).append(newDom);
					}
					$('.removeMeQuantity').remove();
				} else if(rest == 0) {
					$('#quantity_'+dataObject.productId).hide();
					$('#quantity_'+dataObject.productId).after('<span class="removeMe">Mengenlimit erreicht</span>')

				}
			}
		}
	},

	end:0
};

var CartManager = {

	getItemBySlug: function(slug) {
		return shop.cart[slug] == undefined ? null : shop.cart[slug];
	},

	addOrIncrementItemQuantity: function(data, quantity, available) {
		quantity = quantity !== undefined ? quantity : 1;
		if(null == this.getItemBySlug(data.slug)) {
			data.quantity = quantity;
			data.available = parseInt(available);
			shop.cart[data.slug] = data;
		} else {
			shop.cart[data.slug].quantity = parseInt(shop.cart[data.slug].quantity) + parseInt(quantity);
			shop.cart[data.slug].available = parseInt(available);
		}
	},

	end:0
};
