public static Money CalculateDefaultPriceReduction(Money originalPrice, int itemQuantity, IPromotionData data) {

			Money priceReduction = null;
			Money promotionPrice = new Money(originalPrice, 0);
			promotionPrice.Amount = data.PromotionAmount;
			promotionPrice.Multiply(itemQuantity);

			switch (data.PromotionAmountType) {
				case PromotionAmountType.PercentReduction:
					if (data.PromotionAmount <= 100 && data.PromotionAmount > 0) {
						priceReduction = new Money(originalPrice);
						priceReduction.RoundingMode = RoundingMode.AlwaysRoundUp;
						priceReduction.Multiply(data.PromotionAmount / 100);
					} else {
						priceReduction = originalPrice;
					}
					break;
				case PromotionAmountType.AbsolutePrice:
					priceReduction = new Money(originalPrice);
					priceReduction.Subtract(promotionPrice);
					break;
				case PromotionAmountType.AbsoluteReduction:
					priceReduction = promotionPrice;
					break;
				default:
					LogManager.GetLogger(typeof(GenericPromotion)).Error("Unknown PromotionAmountType");
					break;
			}

			return priceReduction;
		}
        protected string RenderSubTotal() {
            Money SubTotal = new Money();
            SubTotal.Add(CurrentBasket.SubTotal);

            SubTotal.Subtract(CurrentBasket.DeliveryPrice);
            return HtmlFormatUtils.FormatMoney(SubTotal);

        }
		public void TestSubtract() {

			Money money1 = new Money(2.23M);
			Money money2 = new Money(1.11M);

			money1.Subtract(money2);
			Assert.IsTrue(money1.Amount == 1.12M, "Subtraction failed (" + money2.ToString() + " != 1.12");
		}