if (Calculators == undefined) {
	var Calculators = {};
}
if (Calculators.loan == undefined) {
	Calculators.loan = {};
}
Calculators.loan.QualifyForHomePurchase = function QualifyForHomePurchase(monthlyIncome, annualRate, mortgageYears, homePrice, downPayment, closingCosts, taxesPerYear, hazardInsPerYear, mortgageInsPerYear, otherMonthlyFees, monthlyDebt) {
	this.FRONT_END_RATIO = 0.28;
	this.BACK_END_RATIO = 0.36;
	this.monthlyIncome = new Calculators.type.Money(monthlyIncome);
	this.annualRate = new Calculators.type.Rate(annualRate);
	this.mortgageYears = new Number(mortgageYears);
	this.homePrice = new Calculators.type.Money(homePrice);
	this.downPayment = new Calculators.type.Money(downPayment);
	this.closingCosts = new Calculators.type.Money(closingCosts);
	this.taxesPerYear = new Calculators.type.Money(taxesPerYear);
	this.hazardInsPerYear = new Calculators.type.Money(hazardInsPerYear);
	this.mortgageInsPerYear = new Calculators.type.Money(mortgageInsPerYear);
	this.otherMonthlyFees = new Calculators.type.Money(otherMonthlyFees);
	this.monthlyDebt = new Calculators.type.Money(monthlyDebt);
	
	this.getMortgage = function () {
		return this.homePrice.add(this.closingCosts).subtract(this.downPayment);
	}

	this.loan = new Calculators.loan.Loan(this.annualRate, 12 * this.mortgageYears, this.getMortgage());

	this.getRate = function () {
		return this.rate;
	}

	this.getMortgageYears = function () {
		return this.mortgageYears;
	}
	
	this.getHomePrice = function () {
		return this.homePrice;
	}
	
	this.getDownPayment = function () {
		return this.downPayment;
	}	
	
	this.getLoan = function () {
		return this.loan;
	}
	
	this.getOtherMonthlyFees = function () {
		return this.otherMonthlyFees;
	}
	
	this.getMonthlyTaxes = function () {
		return new Calculators.type.Money(this.taxesPerYear.getAmount() / 12);
	}
	
	this.getMonthlyHazardInsurance = function () {
		return new Calculators.type.Money(this.hazardInsPerYear.getAmount() / 12);
	}
	
	this.getMonthlyMortgageInsurance = function () {
		return new Calculators.type.Money(this.mortgageInsPerYear.getAmount() / 12);
	}
	
	this.getTotalMonthlyMortgagePayment = function () {
		var mortgageOnly = this.loan.getMonthlyPayment();
		return mortgageOnly.add(this.getMonthlyTaxes()).add(this.getMonthlyHazardInsurance()).add(this.getMonthlyMortgageInsurance()).add(this.otherMonthlyFees);
	}
	
	this.getMaximumHousingExpense = function () {
		return new Calculators.type.Money(this.monthlyIncome.getAmount() * this.FRONT_END_RATIO);
	}
	
	this.getMaximumDTI = function () {
		return new Calculators.type.Money(this.monthlyIncome.getAmount() * this.BACK_END_RATIO).subtract(this.monthlyDebt);
	}	
	
	this.getMaximumMortgagePayment = function () {
		var frontEnd = this.getMaximumHousingExpense();
		var backEnd = this.getMaximumDTI();	
		return (frontEnd.getAmount() < backEnd.getAmount() ? frontEnd : backEnd);
	}
	
	this.qualifies = function () {
		return (this.getMaximumMortgagePayment().getAmount() > this.getTotalMonthlyMortgagePayment().getAmount());		
	}
}
