﻿$loan_1 = {
	validator : null,
	defaultPerYear : 12,
	defaultFormat : true,
	cal : function(params){
		params=params||{};
		var format=params.format||this.defaultFormat;
		var payments_per_year=params.perYear||this.defaultPerYear;
		var number_of_periods=(params.periodYear||1)*payments_per_year;
		var annual_interest_rate=params.interestRate||1;
		var loan_amount=params.loanAmount||1;
		var payment_interest_rate = 1 / (1 + (annual_interest_rate/payments_per_year));
		var result = ((1 - payment_interest_rate) * loan_amount) / (payment_interest_rate * (1 - Math.pow(payment_interest_rate,number_of_periods)));
		result=(params.calIncome)?result/0.33:result;
		return (format)?this.format(result):result;
	},
	format : function(num){
		num = num.toString().replace(/\$|\,/g,'');
		if(isNaN(num))
		num = "0";
		sign = (num == (num = Math.abs(num)));
		num = Math.floor(num*100+0.50000000001);
		cents = num%100;
		num = Math.floor(num/100).toString();
		if(cents<10)
		cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
		num.substring(num.length-(4*i+3));
		return (((sign)?'':'-') + '' + num + '.' + cents);
	},
	getParams : function(){
		var form = $("#loanForm");
		var amountEl = $("input[name=loanAmount]",form);
		var rateEl = $("input[name=loanInterestRate]",form);
		var loanAmount=parseFloat(amountEl.val().replace(/,/gi,"")||"1");
		var interestRate=parseFloat(rateEl.val()||"1")/100;
		amountEl.val(this.format(loanAmount));
		return {
			loanAmount:loanAmount,
			interestRate:interestRate
		};
	},
	init : function(){
		var form = $("#loanForm");
		var amountEl = $("input[name=loanAmount]",form);
		var rateEl = $("input[name=loanInterestRate]",form);
		var loanButtonEl = $(".loanButton");
		var _this = this;
		if(!this.validator){
			this.validator=$("#loanForm").validate({
				rules : {
					loanAmount : {
						required: true,
						number:true
					},
					loanInterestRate : {
						required: true,
						number:true
					}
				},
				messages: {
					loanAmount:"*",
					loanInterestRate:"*"
				},
				//showErrors : function(){},
				event : 'keyup'
			});
			amountEl.val("1000000").change(function(){
				//_this.showData();
			});
			rateEl.val("7.75").change(function(){
				//_this.showData();
			});
			loanButtonEl.click(function(){
				_this.showData();
			});
			amountEl.keypress(function(event){
				if(event.keyCode==13){
					loanButtonEl.click();
					return false;
				};
			});
			rateEl.keypress(function(event){
				if(event.keyCode==13){
					loanButtonEl.click();
					return false;
				};
			});
			this.showData();
		}
	},
	showData : function(){
		this.init();
		if(this.validator.form()){
			var params=this.getParams();
			var _this=this;
			var cal = function(i){
				var o=$(this);
				var data={
					periodYear:(i+1)*5,
					calIncome:o.is(".loanMask-income")
				};
				data.loanAmount=params.loanAmount;
				data.interestRate=params.interestRate;
				o.html(_this.cal(data));
			};
			$(".loanMask").each(cal);
			$(".loanMask-income").each(cal);
			$(".loan-next").show();
		}else{
			$(".loan-next").hide();
		}
	}
};
$(function(){
	$loan_1.init();
});