// JavaScript Document

//Future Value Annuity Calculator Draw Graph
function drawGraph(range)
{
	var principal = eval(document.anncalc.init_principal.value);
	var amount = eval(document.anncalc.annual_amount.value);
	var years = eval(document.anncalc.years.value);
	var rate = eval(document.anncalc.rate.value);
	
	rate = rate/100;
	
	value = [];
	
	for(k=1; k <= years; k++)
	{
		value[k-1] = getFVa(amount, rate, k, 12) + getFV(principal, rate, k, 12);
	}
	
	var g = new Bluff.Line('example', 498);
    g.theme_37signals();
    g.title = 'Future Value Of Annuity Graph';
	g.x_axis_label = 'Year';
	
	//g.marker_count = 6;
	//g.y_axis_increment = 2000;
        
	g.data("Annuity Value", value, "#990033");
	
	g.maximum_value = (value[years-1].toFixed().toString().charAt(0) * 1 + 1) * Math.pow(10,value[years-1].toFixed().length*1-1);
	//g.minimum_value = ((value[0].toFixed().toString().length * 1) - 1) * 10000;
	g.minimum_value = (value[0].toFixed().toString().charAt(0) * 1) * Math.pow(10,value[0].toFixed().length*1-1);
    
	if(years <= 20)
	{
    	g.labels = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20};
	}
	else
	{
		g.labels = {0: 2, 2: 4, 4: 6, 6: 8, 8: 10, 10: 12, 12: 14, 14: 16, 16: 18, 18: 20, 20: 22, 22: 24, 24: 26, 26: 28, 28: 30, 30: 32, 32: 34, 34: 36, 36: 38, 38: 40 };
	}
	
    g.draw();
	
	j = 1;
	
	var finalbalance = getFVa(amount, rate, years, 12) + getFV(principal, rate, years, 12);
	
	outPut('finalbalance', 'Balance: $'+addCommas(finalbalance.toFixed(2)));
	
	for(i=range; i <= years; i++)
	{
		outPut('year'+j+'a', i);
		outPut('year'+j+'b', '$'+addCommas(value[i-1].toFixed(2)));
		j++;
	}
	
	n = i;
	
	for(i=j; i <= 10; i++)
	{
		outPut('year'+j+'a', n);
		outPut('year'+j+'b', 'n/a');
		n++;
		j++;
	}
}

//Future Value Annuity Calculator
/*function futureValueCalc(range)
{
	var amount = eval(document.anncalc.annual_amount.value);
	var years = eval(document.anncalc.years.value);
	var rate = eval(document.anncalc.rate.value);
	
	rate = rate/100;
	
	j = 1;
	
	for(var i=range; i <= years; i++)
	{
		outPut('finalbalance', 'Balance: '+addCommas(getFVa(amount, rate, years, 12)));
		outPut('year'+j+'a', i);
		outPut('year'+j+'b', addCommas(getFVa(amount, rate, i, 12)));
		j++;
	}
	
	//clear unused space
	if(years > 10)
	{
		years = years - 10;	
	}
	
	j = years+1;
	
	for(var i=years; i <= 10; i++)
	{
		outPut('year'+j+'a', '&nbsp;');
		outPut('year'+j+'b', '&nbsp;');
		j++;
	}
	drawGraph();
}*/

// Future Value Formula
function getFVa(pmt, i, Y, m)
{
	v = Math.pow((1+(i/m)), m*Y);
	fv = pmt * (v-1)/(i/m);
	
	return fv;
}

function getFV(p, i, Y, m)
{
	fv = p * Math.pow((1 + i/m),Y*m);
	
	return fv;
}

// Immediate Annuity Calculator
function immediateAnnuityCalc()
{
	var principal = eval(document.anncalc.principal.value);
	var years = eval(document.anncalc.years.value);
	var rate = eval(document.anncalc.rate.value);
	var frequency = eval(document.anncalc.frequency.value);
	
	rate = rate/100;
	//document.write(rate);
	outPut('finalbalance', 'Payout Amount: '+addCommas(getImmediateAnnuity(principal, rate, years, frequency)));
}

// Immediate Annuity Formula
function getImmediateAnnuity(P, i, Y, m)
{
	var payment = (P*Math.pow(1 + i/m, Y*m)*i/m) / (Math.pow(1 + i/m, Y*m) - 1);
	
	return payment.toFixed(2);
}

// Present Value Annuity Formula
function getPresentValue(fv, i, Y)
{
	var pv = fv/Math.pow(1+i, Y);
	
	return pv.toFixed(2);
}

// Present Value Annuity Calculator
function presentValueAnnuityCalc()
{
	var fv = eval(document.anncalc.fv.value);
	var years = eval(document.anncalc.years.value);
	var rate = eval(document.anncalc.rate.value);
	
	rate = rate/100;
	
	outPut('finalbalance', 'Payment Amount: '+addCommas(getPresentValue(fv, rate, years)))
}

function updateWithCommas()
{
	var amount = eval(document.anncalc.annual_amount.value);
	
	document.anncalc.annual_amount.value = addCommas(amount);
}

function outPut(idElement, out)
{	
	output = document.getElementById(idElement);
	output.innerHTML = out;
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}


