function addToBasket(bvin, format) {
	var cartItem = [];
	cartItem[0] = bvin;
	cartItem[1] = format;

	products.push(cartItem);

	var productBvins = new Array();
	for (index in products) {
		productBvins.push(products[index][0]);
	}

	$("#addSomeToCart").val(productBvins);
}

function deleteFromBasket(type, value) {
	var itemIndex;
	switch (type) {
		case "bvin":
			{
				itemIndex = 0;
				break;
			}
		case "format":
			{
				itemIndex = 1;
				break;
			}
	}

	var index = 0;
	for (index = 0; index < products.length; index = index + 1) {
		if (products[index][itemIndex] == value) {
			products.splice(index, 1);
			index = index - 1;
		}
	}

	var productBvins = new Array();
	for (index in products) {
		productBvins.push(products[index][0]);
	}

	$("#addSomeToCart").val(productBvins);
}

function getCounter(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');

	var currentCounterId = "counter_" + product + "_" + format;
	var currentCunterValue = 0;

	if ($("#" + currentCounterId).val() != null) {
		currentCunterValue = Number($("#" + currentCounterId).val());
	}

	return currentCunterValue;
}

function resetState() {
	$("#addSomeToCart").val("");
	$("#displayTotalCost").html("0.00");
	$("#availableAudioTracks :checkbox:checked").attr("checked", false);
	$("#availableAudioTracks :checkbox:disabled").removeAttr("disabled");
}

function updateBasket(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');
	var bvin = object.value;
	var isAddToCart = object.checked;

	switch (product) {
		case "album":
			{
				if (isAddToCart) {
					deleteFromBasket("format", format);
					addToBasket(bvin, format);
				}
				else {
					deleteFromBasket("bvin", bvin);
				}
				break;
			}
		case "track":
			{
				if (isAddToCart) {
					addToBasket(bvin, format);
				}
				else {
					deleteFromBasket("bvin", bvin);
				}
				break;
			}
	}
}

function updateCounter(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');
	var isAddToCart = object.checked;

	var albumCounterId = "counter_album_" + format;
	var trackCounterId = "counter_track_" + format;
	var currentCounterId = "counter_" + product + "_" + format;

	if ($("#" + currentCounterId).val() == null) {
		$("#purchasing").append('<input id="' + currentCounterId + '" type="hidden" value="0"/>');
	}

	var currentCounterValue = getCounter(object);
	var newCounterValue = isAddToCart ? currentCounterValue + 1 : currentCounterValue - 1;

	switch (currentCounterId) {
		case albumCounterId:
			{
				$("#" + albumCounterId).val(newCounterValue);
				$("#" + trackCounterId).val(0);
				break;
			}
		case trackCounterId:
			{
				$("#" + trackCounterId).val(newCounterValue);
				break;
			}
	}
}

function updatePurchasing(object) {
	updateSelection(object);
	updateCounter(object);
	updateToolTip(object);
	updateTotalCost(object);
	updateBasket(object);
}

function updateSelection(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');
	var isAddToCart = object.checked;

	switch (product) {
		case "album":
			{
				if (isAddToCart) {
					$("#availableAudioTracks [format='" + format + "']:[product='track']").attr("checked", true);
					$("#availableAudioTracks [format='" + format + "']:[product='track']").attr("disabled", "disabled");
				}
				else {
					$("#availableAudioTracks [format='" + format + "']:[product='track']").attr("checked", false);
					$("#availableAudioTracks [format='" + format + "']:[product='track']").removeAttr("disabled");

				}
				break;
			}
	}
}

function updateToolTip(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');
	var isAddToCart = object.checked;

	var albumToolTipId = "tooltip_album_" + format;
	var trackToolTipId = "tooltip_track_" + format;
	var currentToolTipId = "tooltip_" + product + "_" + format;

	var oneProductPattern = "%counter% x %product% (.%format% format)";
	var someProductsPattern = "%counter% x %product%s (.%format% format)";

	var currentCounterValue = getCounter(object);

	if (currentCounterValue > 0) {
		var newToolTipValue;
		if (currentCounterValue == 1) {
			newToolTipValue = oneProductPattern;
		}
		else {
			newToolTipValue = someProductsPattern;
		}
		newToolTipValue = newToolTipValue.replace("%counter%", currentCounterValue);
		newToolTipValue = newToolTipValue.replace("%format%", format);
		newToolTipValue = newToolTipValue.replace("%product%", product);

		if ($("#" + currentToolTipId).val() == null) {
			$("#purchasing").append('<p id="' + currentToolTipId + '" class="purchasingdigital">You are purchasing <strong></strong></p>');
		}

		switch (currentToolTipId) {
			case albumToolTipId:
				{
					$("#" + albumToolTipId + " strong").html(newToolTipValue)
					$("#" + trackToolTipId).remove();
					break;
				}
			case trackToolTipId:
				{
					$("#" + trackToolTipId + " strong").html(newToolTipValue)
					break;
				}
		}
	}
	else {
		$("#" + currentToolTipId).remove();
	}
}

function updateTotalCost(object) {
	var product = object.getAttribute('product');
	var format = object.getAttribute('format');
	var price = object.getAttribute('price');
	var isAddToCart = object.checked;

	var albumTotalCostId = "total_cost_album_" + format;
	var trackTotalCostId = "total_cost_track_" + format;
	var currentTotalCostId = "total_cost_" + product + "_" + format;

	if ($("#" + currentTotalCostId).val() == null) {
		$("#purchasing").append('<input id="' + currentTotalCostId + '" type="hidden" value="0"/>');
	}

	var currentTotalCost = $("#" + currentTotalCostId).val();
	var newTotalCost = isAddToCart ? Number(currentTotalCost) + Number(price) : Number(currentTotalCost) - Number(price);

	switch (currentTotalCostId) {
		case albumTotalCostId:
			{
				$("#" + albumTotalCostId).val(newTotalCost);
				$("#" + trackTotalCostId).val(0);
				break;
			}
		case trackTotalCostId:
			{
				$("#" + trackTotalCostId).val(newTotalCost);
				break;
			}
	}

	var grandTotalCost = 0;

	$("#purchasing input[id^='total_cost_']").each(
											function() {
												if ($(this).val() != null) {
													grandTotalCost += Number($(this).val());
												}
											}
										);

	$("#displayTotalCost").html(grandTotalCost.toFixed(2));
}

