function updateProductQuantity(elem)
{
	elem.value = (elem.value > 0) ? elem.value : 0;
	var productId = elem.name.sub('product-quantity-', '');
	var url = PbLib.getNewURI('l/webshop2/shoppingcart/quantity/' + productId + '/' + elem.value);
	new Ajax.Request(url, {
			'onSuccess': elem.setTotalPrice.bindAsEventListener(elem),
			'onFailure': elem.showFailureMessage.bindAsEventListener(elem)
		});
}

document.observe('dom:loaded', function (event) {
	$$('input.product-quantity').each( function(elem) {

		elem.setTotalPrice = function(transport) {

			// Check for removed product and reload the page
			if (!Object.isUndefined(transport.responseJSON.removedFromShoppingCart) && transport.responseJSON.removedFromShoppingCart == true) {
				window.top.document.location.reload();
				return;
			}

			// Check the outcome of the transport
			if (!transport.responseJSON.totalPrice) {
				this.showFailureMessage(transport);
				return false;
			}

			// For now: reload the entire page after changing the amount.
			// In the future we will set the new price immediately and update the (sub)totals as well
			window.top.document.location.reload();
		}

		elem.showFailureMessage = function(transport) {

			dialogElem = window.top.PbLib.createDialog(false, 400, 75);
			dialogElem.update("<div style='text-align: center;'>" +
				"<div>" + transport.responseJSON.msg + "</div>" +
				"<div><a href='#' onclick='Event.stop(event); window.top.document.location.reload(); window.top.PbLib.destroyDialog();'>" +
				PbLib.g('Close') + "</a></div>" + "</div>");

			if (transport.responseJSON.stockAmount && this.value > transport.responseJSON.stockAmount) {
				this.value = transport.responseJSON.stockAmount;
			}

			return false;
		}

		elem.observe('keydown', function(event) {
			if (event.keyCode == 13) {
				updateProductQuantity(this);
				Event.stop(event);
			}
		});

		elem.observe('change', function(event) {
			updateProductQuantity(this);
		});

	});
});
