// FUNCTION TO NUM
function tonum(str) 
{
	ret = "";
	str = "" + str;
	
	for(i = 0; i < str.length; i++){
		ch = str.substring(i,i+1);
		if ((ch >= "0" && ch <= "9") || ch == '.')
			ret += ch;
	}
	
	if(ret == "") ret = "0";
	return parseFloat(ret);
}

//FUNCTION VALUE OR DEFAULT
function valueOrDefault(obj, defval) 
{
	val = tonum(obj.value);
	
	if(val == 0) return defval;
	return val;
}

//FUNCTION FORMAT
function format(val, decimal)
{
	scale = 1;
	
	if(decimal == null) decimal = 2;
	
	for(i = 0;i < decimal;i++) scale*=10;
	
	str = "" + Math.round(parseFloat(val) * scale);
	while(str.length <= decimal) str = "0" + str;
	
	point = str.length - decimal;
	num = "";
	i = point-3;
	while(i >= 0){
		num1 = str.substring(i,i+3);
		if(i != point-3) num1 += "," + num;
		num = num1;
		i-=3;
	}
	if(i != -3){
		num1 = str.substring(0,i+3);
		if(point > 3) num1 += "," + num;
		num = num1;
	}
	return "$" + num + "." + str.substring(point, str.length);
}

//FUNCTION CONTRIBUTION
function contribution(form) 
{
	rate = parseFloat(form.rate.value)/100;
	years = parseInt(form.years.value);
	finalval = valueOrDefault(form.annualcost,0);
	inflation = parseFloat(form.inflation.value)/100;
	payout = parseInt(form.payout.value);
	
	answer = 0;
	for(i = 1;i <= payout;i++){
		answer = answer + (1/Math.pow(1+(rate-inflation),i));
	}
	answer = answer*finalval;
	
	fanswer = 0;
	for(i = 1;i <= years;i++){
		fanswer = fanswer + Math.pow(1+(rate-inflation),i);
	}
	
	fanswer = answer/fanswer;
	form.contrib.value = format(fanswer,2);
}

//FUNCTION ANNCOST
function anncost(form)
{
	rate = parseFloat(form.rate.value)/100;
	years = parseInt(form.years.value);
	contrib = valueOrDefault(form.contrib,0);
	inflation = parseFloat(form.inflation.value)/100;
	payout = parseInt(form.payout.value);
	
	answer = 0;
	for(i = 0;i < years;i++){
		answer = answer + contrib;
		answer = answer + answer*(rate-inflation);
	}
	
	fanswer = 0;
	for(i = 1;i <= payout;i++){
		fanswer = fanswer + (1/Math.pow(1+(rate-inflation),i));
	}
	
	fanswer = answer/fanswer;
	form.annualcost.value = format(fanswer,2);
}

//FUNCTION BALANCE
function balance(form) 
{
	rate = tonum(form.rate.value)/100;
	years = tonum(form.years.value);
	contrib = tonum(form.contrib.value);
	ans = 0;
	for(j = 0;j < years;j++){
		ans = ans + contrib;
		ans = ans + ans*rate;
	}
	form.finalval.value = format(ans);
}

//FUNCTION INVESTMENT CONTRIBUTION
function investment_contribution(form) 
{
	rate = tonum(form.rate.value)/100;
	years = tonum(form.years.value);
	finalval = tonum(form.finalval.value);
	
	answer = 0;
	for(i = 1;i <= years;i++){
		answer = answer + Math.pow(1+rate,i);
	}
	if(answer == 0)
		answer = 0;
	else
		answer = finalval/answer;
	
	form.contrib.value = format(answer);
}

//FUNCTION PRINCIPAL
function principal(form) 
{
	rate = tonum(form.rate.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.months.value);j++)
		pow = pow * (1 + rate);
	if(pow != 0 && rate != 0)
		form.prin.value = format((tonum(form.pay.value)-.009) / pow / rate * (pow - 1));
	else
		form.prin.value = format(tonum(form.pay.value) * tonum(form.months.value));
}

//FUNCTION PAYMENT
function payment(form) 
{
	rate = tonum(form.rate.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.months.value);j++)
		pow = pow * (1 + rate);
	if(pow != 1)
		form.pay.value = format(tonum(form.prin.value) * pow * rate / (pow - 1) +.009);
	else
		form.pay.value = format(tonum(form.prin.value) / tonum(form.payments.value));
}

