/// <summary>
		/// Used in EqualizePayments. Recursive Method
		/// </summary>
		private decimal AllocateToCharge(List<PP_LedgerItem> dliChargeRefundList,PP_LedgerItem dliPaymentItem) {
			////////////-----------> Recursive Method !!!
			if(dliPaymentItem.AmtUnallocated == 0)
				return 0;
			decimal AmtAllocated = 0;
			PP_LedgerItem dliNext = NextUnallocatedItem(dliChargeRefundList);
			if(dliNext != null) {
				AmtAllocated = dliNext.AddAllocation(dliPaymentItem.ITEMNUM,dliPaymentItem.AmtUnallocated);
				if(AmtAllocated != 0) {
					//    dliPaymentItem.PROVNUM = dliNext.PROVNUM;
					dliPaymentItem.AddAllocation(dliNext.ITEMNUM,AmtAllocated,dliNext.PROVNUM);
				}
				else
					dliNext.IsAllocated_OLD = true;  // if nothing to allocate
				if(dliNext.IsAllocated_OLD == true)
					dliChargeRefundList.Remove(dliNext);
				if(dliPaymentItem.AmtUnallocated != 0) // will loop infinately if no allocation occurs and Chargeitems are still left
				{
					AmtAllocated += AllocateToCharge(dliChargeRefundList,dliPaymentItem); //recursion
				}
			}
			return AmtAllocated;

		}