
//JS Object : update the cart by ajax actions
var ajaxCart = {
	
	//override every button in the page in relation to the cart
	overrideButtonsInThePage : function(){
		//for every 'add' buttons...
		$('.ajax_add_to_cart_button').unbind('click').click(function(){
			var idProduct =  $(this).attr('rel').replace('ajax_id_product_', '');
			ajaxCart.add(idProduct, null, false, this);
			return false;
		});
		//for product page 'add' button...
		$('body#product div#add_to_cart input').unbind('click').click(function(){
			ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
			return false;
		});
	
		//for 'delete' buttons in the cart block...
		$('#cart_block_list .ajax_cart_block_remove_link').unbind('click').click(function(){
			// Customized product management
			var customizationId = 0;
			var productId = 0;
			var productAttributeId = 0;
			if ($($(this).parent().parent()).attr('name') == 'customization')
				// Reverse two levels: a >> div >> li
				var customizableProductDiv = $($(this).parent().parent()).find("div[@id^=deleteCustomizableProduct_]");
			else
				var customizableProductDiv = $($(this).parent()).find("div[@id^=deleteCustomizableProduct_]");
			if (customizableProductDiv && $(customizableProductDiv).length)
			{
				$(customizableProductDiv).each(function(){
					var ids = $(this).attr('id').split('_');
					if (typeof(ids[1]) != 'undefined')
					{
						customizationId = parseInt(ids[1]);
						productId = parseInt(ids[2]);
						if (typeof(ids[3]) != 'undefined')
							productAttributeId = parseInt(ids[3]);
						return false;
					}
				});
			}

			// Common product management
			if (!customizationId)
			{
				//retrieve idProduct and idCombination from the displayed product in the block cart
				var firstCut = $(this).parent().parent().attr('id').replace('cart_block_product_', '');
				firstCut = firstCut.replace('deleteCustomizableProduct_', '');
				ids = firstCut.split('_');		
				productId = parseInt(ids[0]);
				if (typeof(ids[1]) != 'undefined')
					productAttributeId = parseInt(ids[1]);
			}

			// Removing product from the cart
			ajaxCart.remove(productId, productAttributeId, customizationId);
			return false;
		});
	},
	
	// try to collapse the cart
		
	// add a product in the cart via ajax
	add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){
		if (addedFromProductPage && !checkCustomizations())
		{
			alert(fieldRequired);
			return ;
		}
		
		//disabled the button when adding to do not double add if user double click
		if (addedFromProductPage)
		{
			$('body#product p#add_to_cart input').attr('disabled', 'disabled');
		}
		else
			$('.ajax_add_to_cart_button').attr('disabled', 'disabled');
		
		//send the ajax request to the server
		$.ajax({
			type: 'GET',
			url: baseDir + 'cart.php',
			async: true,
			cache: false,
			dataType : "json",
			data: 'add&ajax=true&qty=' + ( (quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
			success: function(jsonData)
			{
				// add appliance to whishlist module
				if (whishlist && !jsonData.errors)
					WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]);
				//apply 'transfert' effect
				var elementToTransfert = null;
				if (callerElement && callerElement != null)
					$(callerElement).parents().each( function() {
						if ($(this).is('.ajax_block_product')) elementToTransfert = $(this);
					});
				else
					elementToTransfert = $(addedFromProductPage ? 'div#image-block' : ('.ajax_block_product_id_' + idProduct) );
				
				
				var $element = $('#image-block>img');
				var $picture = $element.clone();
				var pictureOffsetOriginal = $element.offset();
				
				
				$picture.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left});
				var pictureOffset = $picture.offset();
				
				
				var wishlistBlockOffset = $('#shopping_cart').offset();

				$picture.appendTo('body');
				$picture.css({ 'position': 'absolute', 'top': $picture.css('top'), 'left': $picture.css('left') })
				.animate({ 'width': $element.attr('width')*0.01, 'height': $element.attr('height')*0.01, 'opacity': 0.2, 'top': wishlistBlockOffset.top, 'left': wishlistBlockOffset.left }, 1000)
				.fadeOut(800);
				ajaxCart.updateCartEverywhere(jsonData);
				if (addedFromProductPage)
				{
					$('body#product p#add_to_cart input').removeAttr('disabled');
				}
				else
					$('.ajax_add_to_cart_button').removeAttr('disabled');
				
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				alert("TECHNICAL ERROR: unable to add the product.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
				//reactive the button when adding has finished
				if (addedFromProductPage)
					$('body#product p#add_to_cart input').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
				else
					$('.ajax_add_to_cart_button').removeAttr('disabled');
			}
		});
	},

	//genarally update the display of the cart
	updateCart : function(jsonData) {
		//user errors display
		if (jsonData.hasError)
		{
			var errors = '';
			for(error in jsonData.errors)
				//IE6 bug fix
				if(error != 'indexOf')
					errors += jsonData.errors[error] + "\n";
			alert(errors);
		}
		ajaxCart.updateCartEverywhere(jsonData);
		//update 'first' and 'last' item classes
		$('#cart_block dl.products dt').removeClass('first_item').removeClass('last_item').removeClass('item');
		$('#cart_block dl.products dt:first').addClass('first_item');
		$('#cart_block dl.products dt:not(:first,:last)').addClass('item');
		$('#cart_block dl.products dt:last').addClass('last_item');
		
		//reset the onlick events in relation to the cart block (it allow to bind the onclick event to the new 'delete' buttons added)
		ajaxCart.overrideButtonsInThePage();
	},
	
	//update general cart informations everywere in the page
	updateCartEverywhere : function(jsonData) {
		$('.ajax_cart_total').text(jsonData.productTotal);
		$('.ajax_cart_shipping_cost').text(jsonData.shippingCost);
		$('.cart_block_wrapping_cost').text(jsonData.wrappingCost);
		
		$('#shopping_cart').find('.ajax_cart_total').html(jsonData.total);
		
		if(jsonData.nbTotalProducts > 0)
		{
			$('#shopping_cart').find('.ajax_cart_no_product:visible').hide();
			$('#shopping_cart').find('.ajax_cart_quantity').text(jsonData.nbTotalProducts);

			$('#shopping_cart').find('.ajax_cart_quantity:hidden').fadeIn('slow');
			$('#shopping_cart').find('.ajax_cart_total:hidden').fadeIn('slow');
			$('#shopping_cart').find('.ajax_cart_checkout:hidden').fadeIn('slow');
			
			if(jsonData.nbTotalProducts > 1)
			{				
				$('#shopping_cart').find('.ajax_cart_product_txt:visible').hide();
				$('#shopping_cart').find('.ajax_cart_product_txt_s:hidden').show();
			}
			else
			{
				$('#shopping_cart').find('.ajax_cart_product_txt:hidden').fadeIn('slow');
				$('#shopping_cart').find('.ajax_cart_product_txt_s:visible').fadeOut('slow');
			}
		}
		else if(jsonData.nbTotalProducts == 1)
			$('#shopping_cart').find('a').append('| Checkout');
		else
		{
			$('.ajax_cart_quantity:visible, .ajax_cart_product_txt_s:visible, .ajax_cart_product_txt:visible, .ajax_cart_total:visible, .ajax_cart_checkout:visible').fadeOut('slow', function(){
				$('.ajax_cart_no_product:hidden').fadeIn('slow');
			});
		}
	}
};

//when document is loaded...
$(document).ready(function(){
	ajaxCart.overrideButtonsInThePage();
});

