$(document).ready(function () {
	$(ajaxCart.setting.linkSelector).live('click', function(){
		var link = $(this);
		
		if ($(this).attr('disabled') != 'disabled') {
			ajaxCart.addLink(link);
		}
		
		return false;
	});
	$(ajaxCart.setting.linkAnimateSelector).live('click', function(){
		var link = $(this);
		
		if ($(this).attr('disabled') != 'disabled') {
			ajaxCart.addLinkAnimate(link);
		}
		
		return false;
	});
	$(ajaxCart.setting.formSelector).live('submit' ,function(){
		var form = $(this);
		
		if ($(this).attr('disabled') != 'disabled') {
			ajaxCart.addForm(form);
		}
		
		return false;
	});
	$(ajaxCart.setting.formAnimateSelector).live('submit' ,function(){
		var form = $(this);
		
		if ($(this).attr('disabled') != 'disabled') {
			ajaxCart.addFormAnimate(form);
		}
		
		return false;
	});
});

var ajaxCart = {
		setting : {
			topCartSelector: '#cart-top',
			formSelector: '.ajax_add_to_cart_form',
			linkSelector: '.ajax_add_to_cart_button',
			formAnimateSelector: '.ajax_add_to_cart_animate_form',
			linkAnimateSelector: '.ajax_add_to_cart_animate_button',
			clearCartSelector: '.clear_cart'
		},
			
		addForm : function (form) {
			$(ajaxCart.setting.formSelector).attr('disabled', 'disabled');
			
			var formData = $(form).serialize();
			formData = formData + '&ajax=true';
			
			$.ajax({
				type: 'POST',
				url: baseDir + 'modules/cardiostore/ajax/cart.php',
				async: true,
				cache: false,
				dataType : "json",
				data: formData,
				success: function(jsonData) {					
					ajaxCart.successAction(jsonData);
					
					// reactive the form when adding has finished
					$(ajaxCart.setting.formSelector).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 form when adding has finished
					$(ajaxCart.setting.formSelector).removeAttr('disabled');
				}
			});
		},
		addFormAnimate : function (form) {
			$(ajaxCart.setting.formAnimateSelector).attr('disabled', 'disabled');
			
			var idProduct = $(form).find('input[name="id_product"]').val();
			
			var formData = $(form).serialize();
			formData = formData + '&ajax=true';
			
			$.ajax({
				type: 'POST',
				url: baseDir + 'modules/cardiostore/ajax/cart.php',
				async: true,
				cache: false,
				dataType : "json",
				data: formData,
				success: function(jsonData) {
					var element = $('body').find('.ajax_add_to_cart_animate_object[rel="ajax_id_product_' + idProduct + '"], .ajax_add_to_cart_animate_object[data-id-product="' + idProduct + '"]');
					
					if (element.length == 1) {
						var pictureOffsetOriginal = element.offset();
						
						var element = element.clone();
						element.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left, 'z-index': 999});

						var cartBlockOffset = $(ajaxCart.setting.topCartSelector).offset();

						element.appendTo('body')
							   .css({ 'position': 'absolute', 'top': element.css('top'), 'left': element.css('left') })
							   .animate({ 'width': element.attr('width')*0.33, 'height': element.attr('height')*0.33, 'opacity': 0.2, 'top': cartBlockOffset.top + 30, 'left': cartBlockOffset.left + 15 }, 1000)
							   .fadeOut(100, function() {
								   $(this).remove();
									
								   ajaxCart.successAction(jsonData);
							   });
					} else {
						ajaxCart.successAction(jsonData);
					}
						
					//reactive the button when adding has finished
					$(ajaxCart.setting.formAnimateSelector).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
					$(ajaxCart.setting.formAnimateSelector).removeAttr('disabled');
				}
			});
		},
		addLink : function (link) {
			$(ajaxCart.setting.linkSelector).attr('disabled', 'disabled');
			
			var idProduct = 0;
			if ($(link).attr('rel')) {
				idProduct = parseInt($(link).attr('rel').replace('ajax_id_product_', ''));
			}
			if ($(link).attr('data-id-product')) {
				idProduct = parseInt($(link).attr('data-id-product'));
			}
			
			var qty = 1;
			if ($(link).attr('data-qty')) {
				qty = parseInt($(link).attr('data-qty'));
			}
			var idCombination = null;
			if ($(link).attr('data-ipa')) {
				idCombination = parseInt($(link).attr('data-ipa'));
			}
			
			$.ajax({
				type: 'POST',
				url: baseDir + 'modules/cardiostore/ajax/cart.php',
				async: true,
				cache: false,
				dataType : "json",
				data: 'add=1&ajax=true&qty=' + qty + '&id_product=' + idProduct + '&token=' + static_token + ( (idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
				success: function(jsonData) {
					ajaxCart.successAction(jsonData);
					
					//reactive the button when adding has finished
					$(ajaxCart.setting.linkSelector).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
					$(ajaxCart.setting.linkSelector).removeAttr('disabled');
				}
			});
		},
		addLinkAnimate : function (link) {
			$(ajaxCart.setting.linkAnimateSelector).attr('disabled', 'disabled');
			
			var idProduct = 0;
			if ($(link).attr('rel')) {
				idProduct = parseInt($(link).attr('rel').replace('ajax_id_product_', ''));
			}
			if ($(link).attr('data-id-product')) {
				idProduct = parseInt($(link).attr('data-id-product'));
			}
			
			var qty = 1;
			if ($(link).attr('data-qty')) {
				qty = parseInt($(link).attr('data-qty'));
			}
			var idCombination = null;
			if ($(link).attr('data-ipa')) {
				idCombination = parseInt($(link).attr('data-ipa'));
			}
			
			$.ajax({
				type: 'POST',
				url: baseDir + 'modules/cardiostore/ajax/cart.php',
				async: true,
				cache: false,
				dataType : "json",
				data: 'add=1&ajax=true&qty=' + qty + '&id_product=' + idProduct + '&token=' + static_token + ( (idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
				success: function(jsonData) {
					var element = $('body').find('.ajax_add_to_cart_animate_object[rel="ajax_id_product_' + idProduct + '"], .ajax_add_to_cart_animate_object[data-id-product="' + idProduct + '"]');
					
					if (element.length == 1) {
						var pictureOffsetOriginal = element.offset();
						
						var element = element.clone();
						element.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left, 'z-index': 999});

						var cartBlockOffset = $(ajaxCart.setting.topCartSelector).offset();

						element.appendTo('body')
								.css({ 'position': 'absolute', 'top': element.css('top'), 'left': element.css('left') })
								.animate({ 'width': element.attr('width')*0.66, 'height': element.attr('height')*0.66, 'opacity': 0.2, 'top': cartBlockOffset.top + 30, 'left': cartBlockOffset.left + 15 }, 1000)
								.fadeOut(100, function() {
									$(this).remove();
									
									ajaxCart.successAction(jsonData);
								});
					} else {
						ajaxCart.successAction(jsonData);
					}
					
					//reactive the button when adding has finished
					$(ajaxCart.setting.linkAnimateSelector).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
					$(ajaxCart.setting.linkAnimateSelector).removeAttr('disabled');
				}
			});
		},
		clearCart : function (link) {
			$(ajaxCart.setting.clearCartSelector).attr('disabled', 'disabled');
			
			$.ajax({
				type: 'POST',
				url: baseDir + 'cart.php',
				async: true,
				cache: false,
				dataType : "json",
				data: 'clear=1&ajax=true&token=' + static_token,
				success: function(jsonData) {
					ajaxCart.successAction(jsonData);
					
					// reactive the button when adding has finished
					$(ajaxCart.setting.clearCartSelector).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
					$(ajaxCart.setting.clearCartSelector).removeAttr('disabled');
				}
			});
		},
		
		successAction : function (jsonData) {
			if (jsonData.success == 'true' || jsonData.success == true) {
				if (jsonData.cartTop) {
					$(ajaxCart.setting.topCartSelector).replaceWith(jsonData.cartTop);
					anylinkcssmenu.init("anchorclass");
				}
				
				if ($('#redirect_to_cart').is('input') && $('#redirect_to_cart').val() == 1) {
					document.location.href = baseDir + 'commande?controller=order&quotation_blink=1';
				}
				else {
					if (jsonData.cartPopup) {
						$('#after_add_product').html(jsonData.cartPopup);
						$('.after_add_product_link').click();
					}
					
					if ($('#customizationForm').is('form')) {
						$('#customizationForm').find('input[type=text]').val('');
					}
					if ($('#customizationForm1').is('form')) {
						$('#customizationForm1').find('input[type=text]').val('');
					}
					if ($('#customizationForm2').is('form')) {
						$('#customizationForm2').find('input[type=text]').val('');
					}
				}
			}
			if (jsonData.success == 'false' || jsonData.success == false) {
				if (jsonData.redirect) {
					document.location.href = jsonData.redirect;
				}
				else {
					var errors = '';
					for(error in jsonData.errors) {
						// IE6 bug fix
						if(error != 'indexOf') { 
							errors += jsonData.errors[error] + "\n";
						}
					}
					alert(errors);
				}
			}
		},
		
		
		
		
		
		
		
		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 {
				if (jsonData.html) {
					$(ajaxCart.setting.topCartSelector).replaceWith(jsonData.html);
				}
			}
		},
		
		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);
				}
			});
		}
}
