function update_number(input)
{
	var temp;

	if (input.value != null && input.value.length != 0)
		temp = "" + eval(input.value);
	else
		input.value = "0.00";
}

function binomial(a, n)
{
	var i;
	var sum, pow, term, cof;

	if(n < 0)
		return 1.0 / binomial(a, -n);

	sum = 1.0;
	pow = n;
	term = 1;
	cof = 1.0
	for(i = 1; i < 10; i++) {
		cof = cof * pow / i;
		pow = pow - 1.0;
		term = term * a;
		sum = sum + cof * term;
	}

	return sum;
}

function error(P, I, N, Y, M)
{
	var value;

	value = P - M * (1.0 - binomial(I / Y, -N)) / (I / Y);
	return value;
}

function compute_loan(form)
{
	var P, I, N, Y, M;

	if((form.rate.value.length == 0) ||
		(form.num.value.length == 0) ||
		(form.num_annum.value.length == 0) ||
		(form.amount.value.length == 0))
		form.loan.value = "0.00";
	else {
		I = eval(form.rate.value) / 100.0;
		N = eval(form.num.value);
		Y = eval(form.num_annum.value);
		M = eval(form.amount.value);

		if(Y == 0.0)
			P = 0.0;
		else {
			P = M * (1.0 - binomial(I / Y, -N)) / (I / Y);
			P = P * 100;
			P = Math.round(P)
			P = P / 100;
		}
		form.loan.value = "" + P;
	}
}

function compute_rate(form)
{
	var P, I, N, Y, M;

	if((form.loan.value.length == 0) ||
		(form.num.value.length == 0) ||
		(form.num_annum.value.length == 0) ||
		(form.amount.value.length == 0))
		form.rate.value = "0.00";
	else {
		P = eval(form.loan.value);
		N = eval(form.num.value);
		Y = eval(form.num_annum.value);
		M = eval(form.amount.value);

		if(Y == 0) 
			I = 0.0;
		else {
			var low, high, mid, err_mid;
			var count;

			low	= 0.001;
			high = 10.0;

			count = 0;
			while(count < 30) {
				count = count + 1;
				mid = (high + low) / 2.0;
				err_mid = error(P, mid, N, Y, M);
				if(err_mid == 0.0)
					break;
				if(err_mid < 0.0) {
					low = mid;
					continue;
				}
				if(0.0 < err_mid) {
					high = mid;
					continue;
				}
			}
			mid = mid * 1000;
			mid = Math.round(mid);
			mid = mid / 1000;
			I = mid * 100.0;
		}

		form.rate.value = "" + I;
	}
}

function compute_num(form)
{
	var P, I, N, Y, M;

	if((form.loan.value.length == 0) ||
		(form.rate.value.length == 0) ||
		(form.num_annum.value.length == 0) ||
		(form.amount.value.length == 0))
		form.num.value = "0.00";
	else {
		P = eval(form.loan.value);
		I = eval(form.rate.value) / 100.0;
		Y = eval(form.num_annum.value);
		M = eval(form.amount.value);

		if(Y == 0) 
			I = 0.0;
		else {
			var low, high, mid, err_mid;
			var count;

			low	= 0;
			high = 1024;

			count = 0;
			while(count < 10) {
				count = count + 1;
				mid = (high + low) / 2.0;
				err_mid = error(P, I, mid, Y, M);
				if(err_mid == 0.0)
					break;
				if(0.0 < err_mid) {
					low = mid;
					continue;
				}
				if(err_mid < 0.0) {
					high = mid;
					continue;
				}
			}
			N = mid;
		}

		form.num.value = "" + N;
	}
}

function compute_numann(form)
{
	var P, I, N, Y, M;

	if((form.loan.value.length == 0) ||
		(form.rate.value.length == 0) ||
		(form.num.value.length == 0) ||
		(form.amount.value.length == 0))
		form.num_annum.value = "0.00";
	else {
		P = eval(form.loan.value);
		I = eval(form.rate.value) / 100.0;
		N = eval(form.num.value);
		M = eval(form.amount.value);

		var low, high, mid, err_mid;
		var count;

		low	= 0;
		high = 1024;

		count = 0;
		while(count < 10) {
			count = count + 1;
			mid = (high + low) / 2.0;
			err_mid = error(P, I, N, mid, M);
			if(err_mid == 0.0)
				break;
			if(0.0 < err_mid) {
				low = mid;
				continue;
			}
			if(err_mid < 0.0) {
				high = mid;
				continue;
			}
		}
		Y = mid;

		form.num_annum.value = "" + Y;
	}
}

function compute_amount(form)
{
	var P, I, N, Y, M;

	if((form.loan.value.length == 0) ||
		(form.rate.value.length == 0) ||
		(form.num.value.length == 0) ||
		(form.num_annum.value.length == 0))
		form.amount.value = "0.00";
	else {
		P = eval(form.loan.value);
		I = eval(form.rate.value) / 100.0;
		N = eval(form.num.value);
		Y = eval(form.num_annum.value);

		if(Y == 0.0)
			M = 0.0;
		else {
			M = P * I / Y / (1.0 - binomial(I / Y, -N));
			M = M * 100;
			M = Math.round(M);
			M = M / 100;
		} 

		form.amount.value = "" + M;
	}
}
