﻿

$(document).ready(function() {
	$('input[type=submit]').addClass('submit');
	$('#amortcalc form').submit(calcMortgage);
	$('#results').hide();
	$('#amortreport').hide();
	$('#calculating').hide();
	var loanNumPayments=parseInt($('#loanPeriod').val())*12;
	$('#scheduledpayments').html(loanNumPayments);
	$('#amortinput em').hide();

	function formatCurrency(num,nocents) {
		num = num.toString().replace(/\$|\,/g,'');
		num=parseInt(num*1000)/1000;
		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));
		if (nocents==1) {
			return (((sign)?'':'-') + '$' + num);
		} else {
				return (((sign)?'':'-') + '$' + num + '.' + cents);
		}
	}

	$('#loanPeriod').change(function() {
		loanNumPayments=parseInt($('#loanPeriod').val())*12;
		$('#scheduledpayments').html(loanNumPayments);

	});


	function calcMortgage() {
		$('#calculating').show();
		$('#amortinput em').show();
		var loanPrincipal=$('#loanValue').val();
  		var loanRate=$('#loanAPR').val();
   	loanNumPayments=parseInt($('#loanPeriod').val())*12;
		var extraPayments=$('#loanExtraPayments').val();
		
		
		
		
		loanPrincipal=loanPrincipal.replace("$","");
		loanPrincipal=loanPrincipal.replace(/,/gi,"");
		loanRate=loanRate.replace("%","");
		loanRate=loanRate.replace(",","");
		loanRate=loanRate/100;	
		extraPayments=extraPayments.replace("$","");
		extraPayments=extraPayments.replace(",","");
		extraPayments=parseFloat(extraPayments);
		
		if (extraPayments<=0 || isNaN(extraPayments)) {
			extraPayments=0;
		} else {
			var calcCompare=1;
		}

		var loanMoRate=loanRate/12;
 		var loanPayment=loanPrincipal * loanMoRate/(1-(1/ Math.pow(1 + loanMoRate, loanNumPayments)));
 		loanPayment=(Math.round((Math.round(loanPayment*1000))/10))/100;
 		
		var totalInterest=0;
		var totalPrinciple=0;
		var totalPayments=0;
		var loanBalance=loanPrincipal;
		var amorttable;		
		var plotTotalInterest=[];
		var plotPercInterest=[];
		var plotPercPrincipal=[];
		var percInterest;
		var percPrincipal;
		var loanComplete=0;

		var totalInterestB=0;
		var totalPrincipleB=0;
		var totalPaymentsB=0;
		var loanBalanceB=loanBalance;
		var plotTotalInterestB=[];
		var plotPercInterestB=[];
		var plotPercPrincipalB=[];
		var percInterestB;
		var percPrincipalB;
		
		var loanfill=0;
		var loanActualPayments=loanNumPayments;
		var yearsSaved=0;
		
		amorttable="<tr><th>Payment #</th><th>Monthly Payment towards Interest</th><th>Monthly Payment towards Principal Reduction</th><th>Extra Monthly Payment towards Principal Reduction</th><th>Loan Balance</th><th>Cumulative Interest</th><th>Total Cumulative Mortgage Payment</th><th>Monthly Payment towards Interest (%)</th><th>Monthly Payment towards Principal Reduction (%)</th><th>Interest to Principal Ratio</th></tr>";

		for(i = 1; i <= loanNumPayments; i++) {
		
			if (calcCompare==1) {
	
				interestPaymentB=loanBalanceB*loanMoRate;
				interestPaymentB=(Math.round((Math.floor(interestPaymentB*1000))/10))/100;
				totalInterestB=totalInterestB+interestPaymentB;
				plotTotalInterestB.push([i,totalInterestB]);
				principalPaymentB=loanPayment-interestPaymentB;
				principalPaymentB=(Math.round((Math.floor(principalPaymentB*1000))/10))/100;
				totalPrincipleB=totalPrincipleB+principalPaymentB;
				loanBalanceB=loanBalanceB-principalPaymentB;
				loanBalanceB=(Math.round((Math.floor(loanBalanceB*1000))/10))/100;
				totalPaymentsB=totalPaymentsB+loanPayment;
				
				percInterestB=(interestPaymentB/loanPayment)*100;
				percPrincipalB=(principalPaymentB/loanPayment)*100;
				plotPercInterestB.push([i,percInterestB]);
				plotPercPrincipalB.push([i,percPrincipalB]);
				
				if (i==loanNumPayments) {
					principalPaymentB=loanBalanceB;
					totalPaymentsB=totalPaymentsB+loanBalanceB;
								
				}
			}
				
			interestPayment=loanBalance*loanMoRate;
			
			if (interestPayment>0) {
				interestPayment=(Math.round((Math.floor(interestPayment*1000))/10))/100;
				totalInterest=totalInterest+interestPayment;
				plotTotalInterest.push([i,totalInterest]);
				principalPayment=loanPayment-interestPayment;
				principalPayment=(Math.round((Math.floor(principalPayment*1000))/10))/100;
				totalPrinciple=totalPrinciple+principalPayment;
			} else {
				interestPayment=0;
				principalPayment=0;
				extraPayments=0;
			}
			
			if (loanComplete!=1){
				if (i==loanNumPayments) {
					principalPayment=loanBalance;
					loanBalance=loanBalance-loanBalance;
					totalPayments=totalPayments+principalPayment+interestPayment;
				} else {
					loanBalance=loanBalance-principalPayment-extraPayments;
					loanBalance=(Math.round((Math.floor(loanBalance*1000))/10))/100;
					totalPayments=totalPayments+loanPayment+extraPayments;
				}
			}
			
		
			if (loanBalance<0) {
				principalPayment=principalPayment+loanBalance;
				totalPayments=totalPayments+loanBalance;
				loanBalance=loanBalance-loanBalance;
				loanActualPayments=i;
				yearsSaved=loanNumPayments-loanActualPayments;
 				yearsSaved=yearsSaved/12;
				loanComplete=1;
			}
			
			percInterest=(interestPayment/(loanPayment+extraPayments))*100;
			percPrincipal=((principalPayment+extraPayments)/(loanPayment+extraPayments))*100;
			
			if (loanBalance<=0) {
				percPrincipal=100;
			}
			
			plotPercInterest.push([i,percInterest]);
			plotPercPrincipal.push([i,percPrincipal]);
			
			if (interestPayment!=0) {
				amorttable=amorttable + "<tr";
			
				if ((loanBalance==0 && loanfill!=1) || i==loanNumPayments && loanfill!=1) {
					loanfill=1;
					amorttable=amorttable + " class='loanfill'";
				}
						
				amorttable=amorttable + "><td>" + i + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(interestPayment) + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(principalPayment) + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(extraPayments) + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(loanBalance) + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(totalInterest) + "</td>";
				amorttable=amorttable + "<td>" + formatCurrency(totalPayments) + "</td>";
				amorttable=amorttable + "<td class='percInt'>" + (Math.round((Math.floor(percInterest*1000))/10))/100 + "%</td>";
				amorttable=amorttable + "<td class='percPrinc'>" + (Math.round((Math.floor(percPrincipal*1000))/10))/100 + "%</td>";
				amorttable=amorttable + "<td>" + (Math.round((Math.floor((percInterest/percPrincipal)*1000))/10))/100 + "</td>";
				amorttable=amorttable + "</tr>";
			}


				
		
 		}
 		

		
 		if (totalInterestB>0) {
 			var interestSaved=totalInterestB-totalInterest;
 		} else {
 			var interestSaved=0;
 		}

 		if (totalPaymentsB>0) {
 			var paymentsSaved=totalPaymentsB-totalPayments;
 		} else {
 			var paymentsSaved=0;
 		}
 		
 		$('#rMonthlyPayment span').html(formatCurrency(loanPayment));
		$('#rPayments1 span').html(loanNumPayments);
		$('#rPayments2 span').html(loanActualPayments);
		$('#rTotalInterest span').html(formatCurrency(totalInterest));
		$('#rTotalPayments span').html(formatCurrency(totalPayments));
		$('#rYearsSaved span').html((Math.round(yearsSaved*10))/10);
		$('#rInterestSaved span').html(formatCurrency(interestSaved));
 		
				amorttable=amorttable + "<tr><th>Payment #</th><th>Monthly Payment towards Interest</th><th>Monthly Payment towards Principal Reduction</th><th>Extra Monthly Payment towards Principal Reduction</th><th>Loan Balance</th><th>Cumulative Interest</th><th>Total Cumulative Mortgage Payment</th><th>Monthly Payment towards Interest (%)</th><th>Monthly Payment towards Principal Reduction (%)</th><th>Interest to Principal Ratio</th></tr>";

 		
		$("#amorttable").html(amorttable);
		
		function yFormatter(val, axis) {
        return val.toFixed(axis.tickDecimals) +"%";
    	}

    	function xFormatter(val, axis) {
        return val.toFixed(axis.tickDecimals) +"";
    	}
		
    	var options={
    		legend: { show: true, position: "nw", margin: [-10,325] },
    		grid: { hoverable: true, clickable: true },
    		xaxis: { tickSize: 60, tickFormatter: xFormatter}, 
        	yaxis: { min: 0, max: 100, tickFormatter: yFormatter}
    	};

    	
    	

    //	if (calcCompare==1) {
	//		$(function() {
   	//		$.plot($("#chart"), [{data: plotPercInterestB, label: "% Interest - No Extra Payments"},{data: plotPercPrincipalB, label: "% Principal - No Extra Payments"},{data: plotPercInterest, label: "% Interest"},{data: plotPercPrincipal, label: "% Principal"}],options);
	//		});
	//	} else {
		//	$(function() {
   	//		$.plot($("#chart"), [{color: "#db5115", data: plotPercInterest, label: "% Interest"},{color: "#8dc63f", data: plotPercPrincipal, label: "% Principal"}],options);
		//	});
		//}
		
		$(function() {
   			$.plot($("#chart"), [{color: "#db5115", data: plotPercInterest, label: "Monthly payment towards Interest (%)"},{color: "#8dc63f", data: plotPercPrincipal, label: "Monthly payment towards Principal reduction (%)"}],options);
			});
				
		function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 15,
            left: x + 15,
            padding: '5px 12px',
            'background-color': '#fefed3',
				'font': '12px Verdana',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }

    var previousPoint = null;
    
    $("#chart").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));

        
            if (item) {
                if (previousPoint != item.dataIndex) {
                    previousPoint = item.dataIndex;
                    
                    $("#tooltip").remove();
                    var x = item.datapoint[0].toFixed(0),
                        y = item.datapoint[1].toFixed(0);
                    
                    showTooltip(item.pageX, item.pageY,
                                item.series.label + " for Payment #" + x + " is " + y + "%");
                }
            }
            else {
                $("#tooltip").remove();
                previousPoint = null;            
            }

    });
    	$('#calculating').hide();
    	$('#results').show();
		$('#amortreport').show();
		$('#loanValue').val(formatCurrency(loanPrincipal,1));
    	$('#loanAPR').val((loanRate*100)+"%");
		extraPayments=$('#loanExtraPayments').val();
    	$('#loanExtraPayments').val(formatCurrency(extraPayments,1));
    	
		//alert("Monthly Payment: " + formatCurrency(loanPayment) + " Total Interest: " + formatCurrency(totalInterest) + " Total Payments: " + formatCurrency(totalPayments));
		return false;
	}	
});
