	function redeemWithBPChanged(orderItemId, redeemFlag) {
		var value;

		if(redeemFlag) {
			value = '1';
		}
		else {
		    value = '0';
		}
		
		var item = ORDER_ITEMS.getItemById(orderItemId);
		var matchedItem = ORDER_ITEMS.getMatchingItem(item);

		if( item.getQuantity() == 1 && matchedItem == null ) {
			item.redeem = value;
		}
		else {
			if( matchedItem != null ) {
				item.setQuantity( item.getQuantity()-1 );
				matchedItem.setQuantity( matchedItem.getQuantity()+1 );
			}
			else {
				item.setQuantity( item.getQuantity()-1 );
				ORDER_ITEMS.createItem(1, value, item.getProductId(), item.isFree());
			}
		}
			
		orderItemUpdate();
	}
	
	
	function adjustQuantity(FormElementQuantity,availableInventory, backOrder) 
	{
		if (FormElementQuantity.value > availableInventory && backOrder != 'Y')
		{
			FormElementQuantity.value = availableInventory;
			alert('This item is not available in the quantity you have requested. The quantity has been automatically adjusted.');
			return;
		}
		else if( availableInventory <= 0 && backOrder == 'Y')
		{
			alert("This title is due into the warehouse soon, but please be aware it may delay your order");
		}
	}
	
	
	function changeQuantity(orderItemId, quantityOptions) {
		var quantity = 1;
		
		for( var i=0 ; i < quantityOptions.length ; i++ ) {
			if( quantityOptions[i].selected ) {
				updateQuantity(orderItemId, quantityOptions[i].value);
				break;
			}	
		}
	}

	function changeDelete(orderItemId, isDelete) {
		if( isDelete ) {
			deleteOrderItem(orderItemId); // no action supplied so this is a client side only delete
		}
		else {
			undeleteOrderItem(orderItemId);
		}
	}
				
	function orderItemUpdate() {
		recalculateOrder(updateURL);
	}
	
	
				
	/*
		All validation before allowing checkout should be carry out in this function. 
			- Checking total book points. If less then 0, stop checkout.
	*/			
	function gotoCheckout() {
		checkout();
	}