var Calculators = Calculators || {};
Calculators.loan = Calculators.loan || {};

Calculators.loan.PointsOnMortgage = function PointsOnMortgage(loanAmount, points, loanTerm, pointsRate, noPointsRate) {
	this.loanAmount = new Calculators.type.Money(loanAmount);
	this.points = new Number(points);
	this.loanTerm = new Number(loanTerm);
	this.pointsRate = new Calculators.type.Rate(pointsRate);
	this.noPointsRate = new Calculators.type.Rate(noPointsRate);
	
	this.getLoanAmount = function() {
		return this.loanAmount;
	}
	
	this.getPoints = function() {
		return this.points;
	}
	
	this.getLoanTerm = function() {
		return this.loanTerm;
	}
	
	this.getPointsRate = function() {
		return this.pointsRate;
	}
	
	this.getNoPointsRate = function() {
		return this.noPointsRate;
	}	
	
	this.getPointsAmount = function() {
		return new Calculators.type.Money(this.loanAmount.getAmount() * this.points * .01);
	}
	
	this.getNoPointsLoanAmount = function() {
		return new Calculators.type.Money(this.loanAmount.getAmount());
	}
	
	this.pointsLoan = new Calculators.loan.Loan(this.pointsRate, 12 * this.loanTerm, this.loanAmount);
	this.noPointsLoan = new Calculators.loan.Loan(this.noPointsRate, 12 * this.loanTerm, this.getNoPointsLoanAmount());
	
	this.getPointsMonthlyPayment = function() {
		return this.pointsLoan.getMonthlyPayment();
	}
	
	this.getNoPointsMonthlyPayment = function() {
		return this.noPointsLoan.getMonthlyPayment();
	}
	
	this.getMonthlySavings = function() {
		return this.getNoPointsMonthlyPayment().subtract(this.getPointsMonthlyPayment());
	}
	
	this.getTimeToRecoverCost = function() {
		return Math.ceil(this.getPointsAmount().getAmount() / this.getMonthlySavings().getAmount());
	}
	
	this.getPointsLoan = function() {
		return this.pointsLoan;
	}
	
	this.getNoPointsLoan = function() {
		return this.noPointsLoan;
	}
	
	this.getPointsTotalExpense = function() {
		var expense = this.pointsLoan.getTotalStatement().getInterest().add(this.getPointsAmount());
		return expense;		
	}
	
	this.getNoPointsTotalExpense = function() {
		return this.noPointsLoan.getTotalStatement().getInterest();
	}	
}
