var PITICalculator = {
	
	init:function(){
	
			PITICalculator.LoanAmount 			= document.getElementById('LoanAmount');	
			PITICalculator.NoteRate 			= document.getElementById('NoteRate');	
			PITICalculator.Term 				= document.getElementById('Term');	
			PITICalculator.IsInterestOnly		= document.getElementById('IsInterestOnly');	
			PITICalculator.CondoFee 			= document.getElementById('CondoFee');	
			PITICalculator.CondoFeeMonths 		= document.getElementById('CondoFeeMonths');	
			PITICalculator.HomeownerDues		= document.getElementById('HomeownerDues');
			PITICalculator.HomeownerDuesMonths	= document.getElementById('HomeownerDuesMonths');	
			PITICalculator.MI 					= document.getElementById('MI');
			PITICalculator.MIMonths				= document.getElementById('MIMonths');
			PITICalculator.HazInsurance 		= document.getElementById('HazInsurance');
			PITICalculator.HazInsuranceMonths	= document.getElementById('HazInsuranceMonths');	
			PITICalculator.PropInsurance 		= document.getElementById('PropInsurance');
			PITICalculator.PropInsuranceMonths	= document.getElementById('PropInsuranceMonths');	
			PITICalculator.PropTax 				= document.getElementById('PropTax');
			PITICalculator.PropTaxMonths		= document.getElementById('PropTaxMonths');				
			PITICalculator.MonthlyPayment		= document.getElementById('MonthlyPayment');	
			PITICalculator.TotalInterest		= document.getElementById('TotalInterest');
			PITICalculator.HomeOwnerDues		= document.getElementById('HomeOwnerDues');			
			PITICalculator.PITI					= document.getElementById('PITI');		
			PITICalculator.AmortizeLink			= document.getElementById('AmortizeLink');			
			
			PITICalculator.addListeners();
			PITICalculator.setFields();
	},

	addListeners: function(e){
	
			PITICalculator.addEvent(this.LoanAmount, 			'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.NoteRate, 				'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.Term, 					'change', 	this.setFields, false);
			PITICalculator.addEvent(this.IsInterestOnly,		'click', 	this.setFields, false);
			PITICalculator.addEvent(this.CondoFee, 				'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.CondoFeeMonths,		'change', 	this.setFields, false);
			PITICalculator.addEvent(this.HomeownerDues, 		'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.HomeownerDuesMonths, 	'change', this.setFields, false);
			PITICalculator.addEvent(this.MI, 					'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.MIMonths, 				'change', 	this.setFields, false);
			PITICalculator.addEvent(this.HazInsurance, 			'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.HazInsuranceMonths, 	'change', 	this.setFields, false);
			PITICalculator.addEvent(this.PropInsurance, 		'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.PropInsuranceMonths, 	'change', 	this.setFields, false);
			PITICalculator.addEvent(this.PropTax, 				'blur', 	this.setFields, false);
			PITICalculator.addEvent(this.PropTaxMonths, 		'change', 	this.setFields, false);
			PITICalculator.addEvent(this.AmortizeLink, 			'click', 	this.displayAmortizationPage, false);

	},
	
	displayAmortizationPage: function(){
		var LoanAmount 		= Number(StripCurrency(PITICalculator.LoanAmount.value));
		var NoteRate 		= Number(StripPercent(PITICalculator.NoteRate.value));
		var Term 			= Number(PITICalculator.Term.value);	
		
		var IsValid			= PITICalculator.validateAmortization(LoanAmount, NoteRate, Term);
			
		if (IsValid){
			window.location = "/calculator/amortization/?LoanAmount=" + LoanAmount + "&NoteRate=" + NoteRate + "&Term=" + Term;
		}
	},
	
	validateAmortization: function(LoanAmount, NoteRate, Term){
	
		var returnVal = true;
		var errorList = "";
		
		if (LoanAmount <= 0){
			errorList += "Loan Amount must be greater than 0\n";
		}
		
		if (NoteRate <= 0){
			errorList += "Note Rate must be greater than 0\n";
		}
		
		if (NoteRate > 20){
			errorList += "Note Rate must be less than 20\n";
		}
		
		if (Term <= 0){
			errorList += "Term must be greater than 0\n";
		}
		
		if (errorList.length > 0){
			alert(errorList);
			returnVal = false;
		}
		
		return returnVal;
	},
	
	setFields: function(){
		
		var LoanAmount 			= Number(StripCurrency(PITICalculator.LoanAmount.value));
		var NoteRate 			= Number(StripPercent(PITICalculator.NoteRate.value));
		var Term 				= Number(PITICalculator.Term.value);
		var IsInterestOnly		= PITICalculator.IsInterestOnly.checked;
		var CondoFee 			= Number(StripCurrency(PITICalculator.CondoFee.value));
		var CondoFeeMonths		= Number(PITICalculator.CondoFeeMonths.value);
		var HomeownerDues 		= Number(StripCurrency(PITICalculator.HomeownerDues.value));
		var HomeownerDuesMonths	= Number(PITICalculator.HomeownerDuesMonths.value);
		var MI					= Number(StripCurrency(PITICalculator.MI.value));
		var MIMonths			= Number(PITICalculator.MIMonths.value);
		var HazInsurance 		= Number(StripCurrency(PITICalculator.HazInsurance.value));
		var HazInsuranceMonths	= Number(PITICalculator.HazInsuranceMonths.value);
		var PropInsurance 		= Number(StripCurrency(PITICalculator.PropInsurance.value));
		var PropInsuranceMonths	= Number(PITICalculator.PropInsuranceMonths.value);
		var PropTax 			= Number(StripCurrency(PITICalculator.PropTax.value));
		var PropTaxMonths		= Number(PITICalculator.PropTaxMonths.value);
		
		var	MonthlyPayment	= PITICalculator.calcMonthlyPayment(LoanAmount, NoteRate, Term, IsInterestOnly);
		var	HomeOwnerDues	= PITICalculator.calcHomeOwnerDues(CondoFee, CondoFeeMonths, HomeownerDues, HomeownerDuesMonths);
		var TotalInterest	= PITICalculator.calcInterest(MonthlyPayment, Term, LoanAmount);
		var PITI			= MonthlyPayment + HomeOwnerDues + (MI / MIMonths) + (HazInsurance / HazInsuranceMonths) + (PropInsurance / PropInsuranceMonths) + (PropTax / PropTaxMonths);
		
		if (isNaN(NoteRate)){
			NoteRate = 0;
		}
		
		PITICalculator.LoanAmount.value 	= DollarFormat(LoanAmount);
		PITICalculator.NoteRate.value 		= PercentFormat(NoteRate,4);
		PITICalculator.CondoFee.value 		= DollarFormat(CondoFee);
		PITICalculator.HomeownerDues.value 	= DollarFormat(HomeownerDues);
		PITICalculator.MI.value 			= DollarFormat(MI);
		PITICalculator.HazInsurance.value 	= DollarFormat(HazInsurance);
		PITICalculator.PropInsurance.value 	= DollarFormat(PropInsurance);
		PITICalculator.PropTax.value 		= DollarFormat(PropTax);
		PITICalculator.MonthlyPayment.value = DollarFormat(MonthlyPayment);
		PITICalculator.HomeOwnerDues.value 	= DollarFormat(HomeOwnerDues);
		PITICalculator.TotalInterest.value	= DollarFormat(TotalInterest);
		PITICalculator.PITI.value 			= DollarFormat(PITI);

	},		

	addEvent: function(elm, evType, fn, useCapture){
		if (elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent){
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},	
	
	calcHomeOwnerDues: function(CondoFee,CondoFeeMonths,HomeownerDues,HomeownerDuesMonths){
		return (CondoFee / CondoFeeMonths) + (HomeownerDues / HomeownerDuesMonths);
	},
	
	calcInterest: function(MonthlyPayment, Term, LoanAmount) {
   		return ((MonthlyPayment * Term) - LoanAmount);
	},

	calcMonthlyInterestOnly: function(LoanAmount, NoteRate){
		return (LoanAmount * (NoteRate / 100)) / 12;
	},

	calcMonthlyPayment: function(LoanAmount, NoteRate, Term, IsInterestOnly){
		if (IsInterestOnly) {
			return PITICalculator.calcMonthlyInterestOnly(LoanAmount,NoteRate);
		} else {
			return PITICalculator.calcMonthlyPrincipalInterest(LoanAmount,NoteRate,Term);
		}
	},
	
	calcMonthlyPrincipalInterest: function(LoanAmount, NoteRate, Term){
		return (LoanAmount * ((NoteRate / (1200)) / (1 - (Math.pow( 1 + (NoteRate / (1200)), ((Term) * -1))))));
	}
			
};

PITICalculator.addEvent(window, 'load', PITICalculator.init, false);	