// Copyright 2007 Christian Davén

function clearMessages()
{
	document.getElementById("resultsp").style.display = "none";
	document.getElementById("label_ranta").style.display = "none";
	document.getElementById("msg_interest").firstChild.nodeValue = "";
	document.getElementById("msg_permonth").firstChild.nodeValue = "";
	document.getElementById("msg_years").firstChild.nodeValue = "";
	document.getElementById("msg_end").firstChild.nodeValue = "";
}

function calculate()
{
	function doOneMonth()
	{
		accInterest += sum * interest / 12.0;
		sum += sum * interest / 12.0;
		sum -= permonth;
		numMonths += 1;
	}

	var ok = 1;
	var today = new Date();

	clearMessages();

	var interest = getAndParseString("interest");
	if(interest == -999) ok = 0;
	var permonth = getAndParseString("permonth");
	if(permonth == -999) ok = 0;
	var years = getAndParseString("years");
	if(years == -999) ok = 0;
	var sum = getAndParseString("end");
	if(sum == -999) ok = 0;

	if(!ok) return;

	interest /= 100.0;

	if(permonth == 0 && years == 0)
	{
		showMessage("Fyll i avbetalning eller tidsperiod", "msg_years")
		showMessage("Fyll i avbetalning eller tidsperiod", "msg_permonth")
		return;
	}
	if(permonth != 0 && years != 0)
	{
		showMessage("Bägge kan inte vara ifyllda", "msg_years")
		showMessage("Bägge kan inte vara ifyllda", "msg_permonth")
		return;
	}
	if(sum == 0)
	{
		showMessage("Fyll i lånets storlek", "msg_end")
		return;
	}

	var numMonths = years * 12.0;
	var accInterest = 0;

	if(years == 0)
	{
		if(sum * interest > permonth * 12.0)
		{
			showResults("Lånet ökar hela tiden i storlek eftersom räntan är större än inbetalningarna!");
			return;
		}

		while(sum > 0 && sum != Infinity && !isNaN(sum))
			doOneMonth();

		if(sum == Infinity || sum > 999999999999999999999)
			showResults("Beloppet blir för stort");
		else if(isNaN(sum))
			showResults("Kunde inte räkna ut resultatet");
		else
		{
			showResults(numberOfMonthsToNiceYears(numMonths) + " kommer du att ha betalat av lånet!");
			document.getElementById("results_ranta").firstChild.nodeValue = FormatNumberBy3(accInterest.toFixed(0), ".", " ") + " kr";
			document.getElementById("label_ranta").style.display = "inline";
		}
	}
	else
	{
		interest = 1 + interest / 12.0;
		permonth = sum * Math.pow(interest, numMonths) * (interest - 1) / (Math.pow(interest, numMonths) - 1);
		accInterest = permonth * numMonths - sum;

		if(permonth == Infinity || permonth > 999999999999999999999)
			showResults("Beloppet blir för stort");
		else if(isNaN(permonth))
			showResults("Kunde inte räkna ut resultatet");
		else
		{
			showResults("Med " + FormatNumberBy3(permonth.toFixed(0), ".", " ") + " kr/månad kommer du kunna betala av lånet " + numberOfMonthsToNiceYears(numMonths).toLowerCase() + "!");
			document.getElementById("results_ranta").firstChild.nodeValue = FormatNumberBy3(accInterest.toFixed(0), ".", " ") + " kr";
			document.getElementById("label_ranta").style.display = "inline";
		}
	}
}

