var ajaxCart = {

	overrideButtonsInThePage : function(){
		$('#add_cart_btn').unbind('click').click(function(){
			ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#qty').val(), null);
			return false;
		});
		
	},
	
	refresh : function(){
		$.ajax({
			type: 'GET',
			url: baseDir + 'cart.php',
			async: true,
			cache: false,
			dataType : "json",
			data: 'ajax=true&token=' + static_token,
			success: function(jsonData)
			{
				ajaxCart.updateCart(jsonData);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				//alert("TECHNICAL ERROR: unable to refresh the cart.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
			}
		});
	},

	add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){
		if (addedFromProductPage && !checkCustomizations())
		{
			alert(fieldRequired);
			return ;
		}
		if (addedFromProductPage)
		{
			$('#add_cart_btn').attr('disabled', 'disabled').removeClass('exclusive').addClass('exclusive_disabled');
			$('.filled').removeClass('filled');
		}
		else
			$(callerElement).attr('disabled', 'disabled');

		//if ($('#cart_block #cart_block_list').hasClass('collapsed'))
		//	this.expand();
		//send the ajax request to the server
		$.ajax({
			type: 'POST',
			url: baseDir + 'cart.php',
			async: true,
			cache: false,
			dataType : "json",
			data: 'add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
			success: function(jsonData,textStatus,jqXHR)
			{
				// add appliance to whishlist module
				if (whishlist && !jsonData.errors)
					WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]);

				// add the picture to the cart
				var $element = $(callerElement).parent().parent().find('a.product_image img,a.product_img_link img');
				if (!$element.length)
					$element = $('#bigpic');
				var $picture = $element.clone();
				var pictureOffsetOriginal = $element.offset();
				$picture.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left});
				var pictureOffset = $picture.offset();
				var cartBlockOffset = $('a[rel=checkcart]').offset();
				$picture.appendTo('body');
				$picture.css({ 'position': 'absolute', 'top': $picture.css('top'), 'left': $picture.css('left') })
				.animate({ 'width': $element.attr('width')*0.66, 'height': $element.attr('height')*0.66, 'opacity': 0.2, 'top': cartBlockOffset.top - 50, 'left': cartBlockOffset.left - 45 }, 1000)
				.fadeOut(100, function() {
					ajaxCart.updateCart(jsonData);
					if (addedFromProductPage)
						$('#add_cart_btn').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
					else
						$('#add_cart_btn').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)
					$('#add_cart_btn').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
				else
					$(callerElement).removeAttr('disabled');
			}
		});
	},

	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);
		}
		else
		{
			$('#cart_block').slideUp('slow');
			var cartFoot = $('#cart-footer').clone();
			$('#cart_block').html('');
			var productDatas = '';
			$(jsonData.products).each(function(i, item) {
				productDatas += 
						'<div>' +
						'<span class="quantity-formated"><span class="quantity">'+item.quantity+'</span>x</span>' +
						'<a href="'+item.link+'" title="'+item.name+'">' + item.name + '</a>' + 
						'<span class="price">' + item.price + '</span>' +
						'<br clear="all" />' + 
					'</div>';
			});
			$('#cart_block').html(productDatas);
			$('#cart_block').append(cartFoot);
			$('#cart-shipping span').html(jsonData.shippingCost);
			$('#cart-total span').html(jsonData.total);
			$('#cart-staticprice').html(jsonData.total);
			$('#cart_block').css({
				'left': $('#cart-button-activate').offset().left + $('#cart-button-activate').width() - $('#cart_block').width() - 4 + 'px'
			});
			$('#cart_block').slideDown('fast').fadeTo(300, 0.1).fadeTo(300, 1.0);
			ajaxCart.overrideButtonsInThePage();
		}
	}
};

//when document is loaded...
$(document).ready(function(){
	$('a[rel=checkcart]').mouseover(function() {
		$('#cart_block').slideDown(300).css({
			'left': $('#cart-button-activate').offset().left + $('#cart-button-activate').width() - $('#cart_block').width() - 4 + 'px'
		});
		$('#cart_block').slideDown(100);
	});
	ajaxCart.overrideButtonsInThePage();
});


