function annuity_calculate() 
{
	/*
	if (document.getElementById('monthly').checked) var c = 12*document.getElementById('fixed_payment_amount').value;
	else var c = +document.getElementById('fixed_payment_amount').value;
	var r = +document.getElementById('interest_rate').value;
	*/
	var c = +document.getElementById('fixed_payment_amount').value;
	if (document.getElementById('monthly').checked) var r = document.getElementById('interest_rate').value/12;
	else var r = +document.getElementById('interest_rate').value;
	
	
	r = r*0.01;
	var t = +document.getElementById('number_payments').value;
	var pv = +document.getElementById('present_value').value;
	
	if(c == '' && r != '' && t != '' && pv != '')
	{
		c = pv / (1/r - 1/(r*Math.pow(1+r,t)));
		if (document.getElementById('monthly').checked) c = c/12;
		c = Math.round(c*100)/100;
		document.getElementById('fixed_payment_amount').value = c;
		document.getElementById('interest_rate').style.color = "black";
		document.getElementById('fixed_payment_amount').style.color = "red";
		document.getElementById('present_value').style.color = "black";
		document.getElementById('number_payments').style.color = "black";
	}
	
	else if(c != '' && r == '' && t != '' && pv != '')
	{
		r = 0.045;
		pv = Math.round(pv*100)/100;
		//richtung der annaeherung
		var direction
		// number of overshoots
		var os = 0;
		var pvEstimate = 0;
		while(pvEstimate != pv)
		{
			pvEstimate = c*(1/r - 1/(r*Math.pow(1+r, t)));
			pvEstimate = Math.round(pvEstimate*100)/100;
			//alert(pvEstimate);
			if (pvEstimate > pv) 
			{
				if (direction == "down")
				{
					os += 1;	
				}
				direction = "up";
				r += 1/Math.pow(10, os);
			}
			if (pvEstimate < pv) 
			{
				if (direction == "up")
				{
					os += 1;	
				}
				direction = "down";
				r -= 1/Math.pow(10, os);
			}
		}
		document.getElementById('interest_rate').value = Math.round(r*1000000)/10000;
		document.getElementById('interest_rate').style.color = "red";
		document.getElementById('fixed_payment_amount').style.color = "black";
		document.getElementById('present_value').style.color = "black";
		document.getElementById('number_payments').style.color = "black";
	}
	else if(c != '' && r != '' && t == '' && pv != '')
	{
		t = Math.log(1/(1 - r*pv/c)) / Math.log(1+r);
		if (document.getElementById('monthly').checked) t = 12*t;
		document.getElementById('number_payments').value = Math.round(t);
		document.getElementById('interest_rate').style.color = "black";
		document.getElementById('fixed_payment_amount').style.color = "black";
		document.getElementById('present_value').style.color = "black";
		document.getElementById('number_payments').style.color = "red";
	}
	else if((c != '' && r != '' && t != '' && pv == '') || (c != '' && r != '' && t != '' && pv != ''))
	{
		pv = c*(1/r - 1/(r*Math.pow(1+r, t)));
		document.getElementById('present_value').value = Math.round(pv*100)/100;
		document.getElementById('interest_rate').style.color = "black";
		document.getElementById('fixed_payment_amount').style.color = "black";
		document.getElementById('present_value').style.color = "red";
		document.getElementById('number_payments').style.color = "black";
	}
}

//**************************************************************************//
function getI(number)
{
	return Math.floor(number*10);
}
function getM(number)
{
	return Math.floor((number - Math.floor(number*10)/10)*100);
}



function black_scholes_calculate() 
{
	var s = +document.getElementById('current_price').value;
	var t = +document.getElementById('time_remaining').value;
	var k = +document.getElementById('strike_price').value;
	var r = +document.getElementById('interest_rate').value/100;
	var stDev = +document.getElementById('standard_deviation').value/100;
	//r = Math.log(1-r);
	var d = (Math.log(s/k) + (r+ Math.pow(stDev, 2)/2) * t) / (stDev*Math.sqrt(t));
	var z2 = d-stDev*Math.sqrt(t);
	
	
	
	
	if(d<0)
	{
		var i = getI(d*(-1));
		var m = getM(d*(-1));
		var i2 = getI((d*(-1)+0.01));
		var m2 = getM((d*(-1)+0.01));
		//alert('i='+i);
		//alert('m='+m);
		//alert('i2='+i2);
		//alert('m2='+m2);
		n1 = 1.0 - (normDistProb[i][m] + (normDistProb[i2][m2] - normDistProb[i][m])   *  ((d*(-1) - normDistZ[i][m]) / (normDistZ[i2][m2] - normDistZ[i][m])));
	}
	else
	{
		var i = getI(d);
		var m = getM(d);
		var i2 = getI(d+0.01);
		var m2 = getM(d+0.01);
		n1 = normDistProb[i][m] + (normDistProb[i2][m2] - normDistProb[i][m])   *  ((d - normDistZ[i][m]) / (normDistZ[i2][m2] - normDistZ[i][m]));
	}
	
	
	
	
	
	if(z2<0)
	{
		var i = getI(z2*(-1));
		var m = getM(z2*(-1));
		var i2 = getI(z2*(-1)+0.01);
		var m2 = getM(z2*(-1)+0.01);
		n2 = 1.0 - (normDistProb[i][m] + (normDistProb[i2][m2] - normDistProb[i][m])   *  ((z2*(-1) - normDistZ[i][m]) / (normDistZ[i2][m2] - normDistZ[i][m])));
	}
	else
	{
		var i = getI(z2);
		var m = getM(z2);
		var i2 = getI(z2+0.01);
		var m2 = getM(z2+0.01);
		n2 = normDistProb[i][m] + (normDistProb[i2][m2] - normDistProb[i][m])   *  ((z2 - normDistZ[i][m]) / (normDistZ[i2][m2] - normDistZ[i][m]));
	}
	
	//alert('n1='+n1);
	//alert('n2='+n2);
	
	
	var c = s*n1 - Math.exp(-r*t)*k*n2;
	//alert('c='+c);
	
	document.getElementById('option_price').value = Math.round(c*100)/100;
	document.getElementById('option_price').style.color = "red";
	
}

//*************************************************************************//