var productUpdate = new Array();
$(document).ready(function() {

	$(".button.detailMinus").live('click', function() {
		item_minus($(this), false);
	});

	$(".button.detailPlus").live('click', function() {
		item_plus($(this), false);
	});

	$(".button.minus").click(function() {
		item_minus($(this));
	});

	$(".button.plus").click(function() {
		item_plus($(this));
	});

	$(".button.remove").live('click', function() {
		item_remove($(this));
	});

	$('input.basketItemAmount').change(function(e) {
		if (parseInt($(this).val()) < parseInt($(this).parent().find('.basketItemMinAmount').val())) {
			$(this).val($(this).parent().find('.basketItemMinAmount').val());
		}
		item_change($(this));
	});
	$('input.basketItemAmount').keydown(function(event){
		if(event.keyCode == 13){
			jQuery(this).blur();
		}
	});

	$('a.favorite').click(function() {
		var clickItem = jQuery(this);
		$.ajax({
			url: jQuery(clickItem).attr('href'),
			success: function(html) {
				if (jQuery(clickItem).hasClass('active')) {
					jQuery(clickItem).removeClass('active');
					jQuery(clickItem).attr({ title: "Toevoegen aan favorieten"});

				} else {
					jQuery(clickItem).addClass('active');
					jQuery(clickItem).attr({ title: "Verwijderen uit favorieten"});
				}
			}
		});
		return false;
	});

	$('input.basketItemAmount').keyup(function(e) {

		//check if the basket edit items step is displayed
		if ($('.basketItemList').length) {
			if ($(this).val() != '' && e.keyCode != 13) {

				var currentAmountElement = $(this);
				var productId = $(currentAmountElement).closest('li.tableRow').find('input[name="product_id"]').val();
				var productNewAmount = parseInt($(currentAmountElement).val());

				if (productNewAmount > 4) {
					updateProduct(productId, productNewAmount, currentAmountElement);
				} else if (productNewAmount == 0) {
					removeProduct(productId, productNewAmount, currentAmountElement);
				}
			}
		}
	});

	$('input.basketItemAmount').blur(function() {
		//check if the basket edit items step is displayed
		if ($('.basketItemList').length) {
			if ($(this).val() == '') {
				var currentAmountElement = $(this);
				var productId = $(currentAmountElement).closest('li.tableRow').find('input[name="product_id"]').val();
				removeProduct(productId, '0', currentAmountElement);
			}
		}
	});

	$('#colorPicker').live('click', function() {
		//		if ($('.ulColorPicker').length) {
		//			$('.ulColorPicker').remove();
		//		} else {
		//			var ulColorpicer = $('<ul class="ulColorPicker">').html($(this).find('ul').html());
		//			$(ulColorpicer).css('position', 'absolute');
		//			$(ulColorpicer).css('top', ($(this).offset().top - $('#holder').offset().top + 29) + 'px');
		//			$(ulColorpicer).css('left', ($(this).offset().left - $('#holder').offset().left) + 'px');
		//			$(ulColorpicer).css('z-index', '1000');
		//			$(ulColorpicer).appendTo('#holder');
		//		$(this).find('ul').toggle();
		//		}
	});

	//	$('ul.ulColorPicker li a').live('click', function() {
	//		var clickItem = this;
	//
	//		$.ajax({
	//			url: $(clickItem).attr('href') + '&amount=' + $('.basketItemAmount').val(),
	//			success: function(html) {
	//				$('.productDetail').html(html);
	//
	//			},
	//			complete: function() {
	//				$(".ulColorPicker li").show();
	//				$('#colorPicker').find('.selected.option').html($(clickItem).parent().html());
	//				$('#colorPicker').find('.selected.option a').attr('href', 'javascript:void(null)');
	//				$(clickItem).parent().hide();
	//				$("#colorPicker ul").html($('.ulColorPicker').html());
	//				$('.ulColorPicker').remove();
	//			}
	//		});
	//
	//		return false;
	//
	//	});

	$('ul li.collapsible > ul').toggle();
	$('ul li.selected').children('ul').toggle(true);
	$('ul li.selected').parent('ul').toggle(true);

	/*
	$('ul li.collapsible > a').live('click', function() {
		$(this).closest('li').children('ul').toggle();
		return false;
	});
	*/
});

var jsonFormOptions = {
	// target : '#output1', // target element(s) to be updated with server
	// pre-submit callback
	beforeSerialize: processJsonForm,
	beforeSubmit: processJsonFormData,

	// other available options:
	// url: url, // override for form's 'action' attribute
	// type: type, // 'get' or 'post', override for form's 'method'
	// attribute
	dataType: 'json', // 'xml', 'script', or 'json' (expected server type)
	// clearForm: true, // clear all form fields after successful submit
	// resetForm: true, // reset the form after successful submit

	// $.ajax options can be used here too, for example:
	// timeout: 3000,

	// post-submit callback
	success: processJsonFormResponse,
	complete: processJsonFormComplete

};

function item_minus(itemButtonObj, update) {
	var inputObj = $(itemButtonObj).next();
	if (parseInt($(inputObj).val()) > parseInt($(inputObj).parent().find('.basketItemMinAmount').val())) {
		var productId = $(itemButtonObj).closest('li.tableRow').find('input[name="product_id"]').val();
		var productNewAmount = parseInt($(inputObj).val()) - 1;

		$(inputObj).val(parseInt($(inputObj).val()) - 1);
		if (update != false) {
			updateProduct(productId, productNewAmount, $(inputObj));
		}
	}
}

function item_plus(itemButtonObj, update) {
	var inputObj = $(itemButtonObj).prev();

	var productId = $(itemButtonObj).closest('li.tableRow').find('input[name="product_id"]').val();
	var productNewAmount = parseInt($(inputObj).val()) + 1;

	$(inputObj).val(parseInt($(inputObj).val()) + 1);
	if (update != false) {
		updateProduct(productId, productNewAmount, $(inputObj));
	}
}

function item_change(itemObj, update) {
	var productId = $(itemObj).closest('li.tableRow').find('input[name="product_id"]').val();
	var productNewAmount = parseInt($(itemObj).val());
	if (update != false) {
		updateProduct(productId, productNewAmount, $(itemObj));
	}
}

function item_remove(itemButtonObj) {
	var inputObj = $(itemButtonObj).closest('li.tableRow').find('input.basketItemAmount');
	if (parseInt($(inputObj).val()) != undefined) {
		var productId = $(inputObj).closest('li.tableRow').find('input[name="product_id"]').val();

		var productNewAmount = parseInt($(inputObj).val());

		removeProduct(productId, productNewAmount, $(inputObj));
	}
}

function updateProduct(productId, productNewAmount, updateElement) {
	if (productId != undefined && productNewAmount != undefined && updateElement != undefined) {
		var UListElement = jQuery(updateElement).closest('ul');
		if (productUpdate[productId] != undefined) {
			productUpdate[productId].abort();
		}

		productUpdate[productId] = $.ajax({
			url: '/basket/update-item',
			type: 'POST',
			dataType: 'json',
			data: {
				'id': productId,
				'amount': productNewAmount,
				'json': true
			},
			beforeSend: function() {
				addUpdateMessageToBasketOverview($(UListElement));
			},
			success: function(updateItemResponse) {
				$(UListElement).find('li.basketItemPrice').html('<span>&euro;&nbsp;' + updateItemResponse.productPrice + '</span>');
				$(UListElement).find('li.basketItemTotal').html('<span>&euro;&nbsp;' + updateItemResponse.productTotalPrice + '</span>');
				updateTotalCostShoppingBasket(updateItemResponse);
			},
			complete: function() {
				refreshProducts($(UListElement));
				removeUpdateMessageFromBasketOverview($(UListElement));
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
			}
		});
	}
}

function addUpdateMessageToBasketOverview(objUlElement) {
	if (jQuery(objUlElement).find('basketUpdatePricesOverview').length == 0) {
		var htmlBasketUpdatePrices = '<div class="basketUpdatePricesOverview">';
		htmlBasketUpdatePrices += '<img class="loadDiscountPricesLoader" src="/skins/default/pics/smallLoaderBgWhite.gif" />';
		htmlBasketUpdatePrices += '<span class="loadDiscountPrices">Bezig met het bijwerken van het product...</span>';
		htmlBasketUpdatePrices += '</div>';

		if (jQuery(objUlElement).length) {
			jQuery(objUlElement).find('.basketItemDescription').append(htmlBasketUpdatePrices);
		}
	}
}

function refreshProducts(objUlElementSkip) {
	if (jQuery('.basketItemList').find('ul.table li.tableRow').length) {
		jQuery.each(jQuery('.basketItemList').find('ul.table li.tableRow'), function(index, item) {
			if ((objUlElementSkip == undefined) || (jQuery(item).find('input[name="product_id"]').length != 0 && jQuery(objUlElementSkip).closest('form').find('input[name="product_id"]').length != 0 && jQuery(item).find('input[name="product_id"]').val() != jQuery(objUlElementSkip).closest('form').find('input[name="product_id"]').val())) {
				$.ajax({
					url: '/basket/get-item',
					type: 'POST',
					dataType: 'json',
					data: {
						'id': jQuery(item).find('input[name="product_id"]').val(),
						'json': true
					},
					beforeSend: function() {
						addUpdateMessageToBasketOverview(jQuery(item).find('li.basketItemPrice').closest('ul'));
					},
					success: function(getItemResponse) {
						jQuery(item).find('li.basketItemPrice').html('<span>&euro;&nbsp;' + getItemResponse.productPrice + '</span>');
						jQuery(item).find('li.basketItemTotal').html('<span>&euro;&nbsp;' + getItemResponse.productTotalPrice + '</span>');
					},
					complete: function() {
						removeUpdateMessageFromBasketOverview(jQuery(item).find('li.basketItemPrice').closest('ul'));
					}
				});
			}
		});
		refreshTotalCostShoppingBasket();
	}
}

function refreshTotalCostShoppingBasket() {
	$.ajax({
		url: '/basket/get-total',
		type: 'POST',
		dataType: 'json',
		data: {
			'json': true
		},
		success: function(getTotalCostShoppingBasket) {
			updateTotalCostShoppingBasket(getTotalCostShoppingBasket);
		}
	});
}

function removeUpdateMessageFromBasketOverview(objUlElement) {
	jQuery(objUlElement).find('.basketUpdatePricesOverview').remove();
}

function updateTotalCostShoppingBasket(jsonItemResponse) {
	if (jsonItemResponse != undefined) {
		if ($('div.basketTotal').find('.tableData.basketTotalPrice').length) {
			$('div.basketTotal').find('.tableData.basketTotalPrice').html('&euro;&nbsp;' + jsonItemResponse.basketTotalPrice);
		}
		if ($('div.basketTotal').find('.tableData.basketShippingCost').length) {
			$('div.basketTotal').find('.tableData.basketShippingCost').html('&euro;&nbsp;' + jsonItemResponse.basketShippingCost);
		}
		if ($('div.basketTotal').find('.tableData.basketTotalTax').length) {
			$('div.basketTotal').find('.tableData.basketTotalTax').html('&euro;&nbsp;' + jsonItemResponse.basketTotalTax);
		}
		if ($('div.basketTotal').find('.tableData.basketTotal').length) {
			$('div.basketTotal').find('.tableData.basketTotal').html('&euro;&nbsp;' + jsonItemResponse.basketTotal);
		}
	}
}

function removeProduct(productId, productNewAmount, updateElement) {
	if (productId != undefined && productNewAmount != undefined && updateElement != undefined) {
		var UListElement = jQuery(updateElement).closest('ul');
		$.ajax({
			url: '/basket/remove-item',
			type: 'POST',
			dataType: 'json',
			data: {
				'id': productId,
				'amount': productNewAmount,
				'json': true
			},
			beforeSend: function() {
				if (jQuery('.basketOverview').length) {
					addUpdateMessageToBasket();
				}
				if (jQuery(UListElement).length != 0 && jQuery('.basketEditItems').length != 0) {
					addUpdateMessageToBasketOverview($(UListElement));
				}
			},
			success: function(removeItemResponse) {
				$(updateElement).closest('li.tableRow').remove();
				//remove the amount and list object because the shopping basket is empty
				if (removeItemResponse.basketTotalProducts != undefined && parseInt(removeItemResponse.basketTotalProducts) == 0) {
					if ($('div.basketEditItems').find('div.basketItemList').length) {
						$('div.basketEditItems').find('div.basketItemList').remove();
						$('div.basketEditItems').prepend('<div class="basketEmpty">Het winkelmandje is leeg</div>');
					}
					if ($('div.basketEditItems').find('div.basketTotal').length) {
						$('div.basketEditItems').find('div.basketTotal').remove();
					}
					if ($('div.basketEditItems').find('div.basketNavigation input.next').length) {
						$('div.basketEditItems').find('div.basketNavigation input.next').remove();
					}
					updateBasketOverview();
				}
				//update the shopping basket because there are stil products in the basket
				else {
					updateBasketOverview();
					updateTotalCostShoppingBasket(removeItemResponse);
				}
			},
			complete: function() {
				if (jQuery('.basketOverview').length) {
					removeUpdateMessageFromBasket();
				}
				if (jQuery(UListElement).length != 0 && jQuery('.basketEditItems').length != 0) {
					refreshProducts();
					removeUpdateMessageFromBasketOverview(jQuery(UListElement));
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
			}
		});
	}
}

function updateBasketOverview() {
	$.ajax({
		url: '/AJAXcall/basket/show-overview/?ajax=true',
		success: function(html) {
			var newOverview = $(html);
			$('.basketOverview').html($(newOverview).html());
		}
	});
}

function tagRequiredFields(formId, requiredFields) {
	if ($.isArray(requiredFields) && requiredFields.length > 0) {
		$("#" + formId + " fieldset *:input:enabled").each(function() {
			var indexArray = $.inArray($(this).attr("name"), requiredFields);
			if (indexArray >= 0) {
				var labelId = "#lbl" + $(this).attr("id").substring(3, $(this).attr("id").length);
				if (labelId.indexOf('-') >= 0) {
					labelId = labelId.substring(0, labelId.indexOf('-'));
				}
				//var labelDOM = $(this).prev("label");
				var labelDOM = $(this).closest("form").find("label[for=\"" + $(this).attr("id") + "\"]");

				if ($(this).closest("form").find(labelId).length > 0) {
					var labelDOM = $(this).closest("form").find(labelId);
				}

				$(labelDOM).each(function() {
					if ($(this).find('span.required').length == 0) {
						if ($(this).find(".infoPopup").length) {
							$(this).find(".infoPopup").before("<span class=\"required\">*<\/span>");
						} else {
							$(this).append("<span class=\"required\">*<\/span>");
						}
					}
				});

				requiredFields.splice(indexArray, 1);
			}
		});
	} else {
		$("#" + formId + " li.required").hide();
	}
}

function submitJsonForm(objForm) {
	jQuery(objForm).ajaxSubmit(jsonFormOptions);
}

function addUpdateMessageToBasket() {
	if (jQuery('.basketOverview .basketUpdatePrices').length == 0) {
		var htmlBasketUpdatePrices = '<div class="basketUpdatePrices">';
		htmlBasketUpdatePrices += '<img class="loadDiscountPricesLoader" src="/skins/default/pics/smallLoaderBgGrey.gif" />';
		htmlBasketUpdatePrices += '<span class="loadDiscountPrices">Bezig met het bijwerken van het winkelmandje...</span>';
		htmlBasketUpdatePrices += '</div>';

		if (jQuery('.basketOverview .basketPayment').length) {
			jQuery('.basketOverview .basketPayment').prepend(htmlBasketUpdatePrices);
		} else if (jQuery('.basketOverview .basketEmpty').length) {
			jQuery('.basketOverview .basketEmpty').prepend(htmlBasketUpdatePrices);
		}
	}
}

function removeUpdateMessageFromBasket() {
	jQuery('.basketOverview .basketUpdatePrices').remove();
}

function processJsonForm(form, options) {
	addUpdateMessageToBasket();
	return true;
}

function processJsonFormData(formData, jqForm, options) {
	return true;
}

function processJsonFormResponse(responseJson, statusText, xmlHttpRequest, form) {
	/** Update the basketoverview when we updated the basket */
	updateBasketOverview();

	if (responseJson != undefined && responseJson != null && responseJson != '') {
		if (responseJson.contents != undefined && responseJson.contents != null) {
			var contents = responseJson.contents;

			$.each(contents, function(element, content) {
				if ($(element).length > 0) {
					$(element).html(content);
				}
			});
		}
		if (responseJson.alerts != undefined && responseJson.alerts != null) {
			var alerts = responseJson.alerts;

			if (alerts.messages != undefined && alerts.messages != null) {
				var messages = alerts.messages;

				var text = "";
				$.each(messages, function(index, message) {
					text = text + message + "\n";
				});
				openDialog(text);
			}
			if (alerts.errors != undefined && alerts.errors != null) {
				var errors = alerts.errors;

				var text = "";
				//$.each(errors, function(index, error) {
				//   text = text + error + "\n";

				openDialog(text);
			}
		}
	}
}

function processJsonFormComplete() {
	removeUpdateMessageFromBasket();
	return true;
}
