var aTermijnen = new Array();
// MAIN FUNCTION
function recalculate(nTermijnen, oTermijn, nId, fAchterstand){
	//var init
	var nTermijnenUsed = 0;
	var nTotalUser = 0;
	fAchterstand = stringToFloat(fAchterstand);
	//clear error message
	showError('');

	var bLastTermijn = true;	
	for (i=nId+2;i<nTermijnen;i++){
		name = "termijn["+i+"]";
		nValue = getValueOfId(name);
		if (nValue > 0){ 
			bLastTermijn = false;
		}
	}

	//read value add to aTermijnen
	// P.S.: zoder de conditie "(oTermijn)" JavaScript genereert een fout "oTermijn is undefined".
	if ((oTermijn) && checkValue(oTermijn.value, bLastTermijn))
	{
		aTermijnen[nId] = roundValue(stringToFloat(oTermijn.value));
	}
	else
	{
		aTermijnen[nId] = 50;
	}
	
	//check for already changed inputs
	for (nValue in aTermijnen){
		nTotalUser += aTermijnen[nValue];
		nTermijnenUsed++;
	}
	
	//calculations
	var calcTermijnen = nTermijnen - nTermijnenUsed; 
	var calcValue = roundValue((fAchterstand-nTotalUser)  / calcTermijnen);
	if (calcValue < 50){
		calcValue = 50;
	}
	
	//assign inputs
    countTermijnen = 0;	
	for (i=0;i<nTermijnen;i++){
		 if (aTermijnen[i] == undefined){
		 	countTermijnen++;
		 	if (countTermijnen < calcTermijnen){
	    		name = "termijn["+i+"]";
				var termijn=document.getElementById(name);
			 	termijn.value = formatPrice(calcValue);
			 }else{
	    		name = "termijn["+i+"]";
				var termijn=document.getElementById(name);
				var lastTermijnValue = roundValue(fAchterstand - roundValue((((countTermijnen - 1) * calcValue)+ nTotalUser)));
				if (nTermijnen != i && lastTermijnValue < 50){
					termijn.value = 50;				
				}else if (nTermijnen == i && lastTermijnValue < 0){
					termijn.value = 0;
				}else{
					termijn.value = formatPrice(lastTermijnValue);
				}
			 }
		 }else{
		 	name = "termijn["+i+"]";
			var termijn=document.getElementById(name);
		 	termijn.value = formatPrice(aTermijnen[i]);
		 }
		 
	}
	
	//calculate rest - check
	buttonCheck(nTermijnen, fAchterstand);
}

function buttonCheck(nTermijnen, fAchterstand){
	var button=document.getElementById("indienen");
	
	if (calculateTotal(nTermijnen, fAchterstand)){
		//button.disabled = false;
	}else{
		//button.disabled = true;	
	}
}
function stringToFloat(vValue){
	vValue = String(vValue);
	vValue = vValue.replace(/,/, '.');
	vValue = parseFloat(vValue);
	return vValue;
}

function roundValue(vValue){
	vValue = vValue * 100;
	vValue = Math.round(vValue);
	return vValue / 100;
	
}

function isFloat(vValue){
	floatValue=stringToFloat(vValue)
	if (isNaN(floatValue)) {
	   return false;
	} else {
	   return true;
	} 
}

function formatPrice(vValue){
	vValue = stringToFloat(vValue);
	return vValue.toFixed(2);
}

function checkValue(vValue, bLaatsteTermijn){
	if (!isFloat(vValue)){
		showError("Fout : Dit is geen geldig bedrag");
		return false;
	}else if(vValue < 0){
		showError("Fout : Een negatief bedrag is niet mogelijk.");
		return false;
	}else if(!bLaatsteTermijn && vValue < 50){
		showError("Fout : Alleen de laatste termijn mag lager dan 50 euro zijn.")
		return false;
	}else{
		return true;
	}
}

function showError(errorMsg){
	var foutmelding=document.getElementById("foutmelding");
	var foutWindow=document.getElementById("foutWindow");
	if (errorMsg == ''){
		foutWindow.style.display = 'none';
		foutmelding.innerHTML = '';
		
		var reCalculate=document.getElementById("btnRecalculate");
		reCalculate.style.display = 'none';
		
		var reCalculate=document.getElementById("btnSave");
		reCalculate.style.display = 'block';
	}else{
		foutWindow.style.display = 'block';
		foutmelding.innerHTML = errorMsg;	
		
		var reCalculate=document.getElementById("btnRecalculate");
		reCalculate.style.display = 'inline';
		
		var reCalculate=document.getElementById("btnSave");
		reCalculate.style.display = 'none';
	}
	return;
}

function calculateTotal(nTermijnen, fAchterstand){
	nTotal = 0;
	for (i=0;i<nTermijnen;i++){
	    name = "termijn["+i+"]";
		var termijn=document.getElementById(name);
		nTotal += stringToFloat(termijn.value);
	}
	//var termijn=document.getElementById("totaal");
	
	total = roundValue((fAchterstand - roundValue(nTotal)));
	if (total == 0){
		showError('');
		
		
	}else if (total < 0){
		total = 0 - total; //negative number inverter
		showError("U heeft &euro;"+formatPrice(total)+" teveel opgegeven.");
		
	}else if (total > 0){
		showError("U moet nog &euro;"+formatPrice(total)+" meer opgegeven.");
		
	}
}

function getMonth(nMonth){
	var monthTxt = new Array();
	monthTxt[0] = "jan";
	monthTxt[1] = "feb";
	monthTxt[2] = "mrt";
	monthTxt[3] = "apr";
	monthTxt[4] = "mei";
	monthTxt[5] = "jun";
	monthTxt[6] = "jul";
	monthTxt[7] = "aug";
	monthTxt[8] = "sep";
	monthTxt[9] = "okt";
	monthTxt[10] = "nov";
	monthTxt[11] = "dec";
	return monthTxt[nMonth];
}

function getValueOfId(sId){;
	var oItem=document.getElementById(sId);
	return oItem.value;
}

function readDate(){
	var nDay = 1;
	var nMonth = parseInt(getValueOfId("month")-1);
	var nYear = parseInt(getValueOfId("year"));
	$oReadDate = new Date();
	$oReadDate.setFullYear(nYear, nMonth, nDay);
	return $oReadDate;
}
function calculateDays()
{
	var nTermijnen = getValueOfId("totalTermijn");
	var oUserDate = readDate();
	var oCalcDate = new Date();

	//diverse checks om te kijken of de betalingsregeling niet in het verleden begint, of verder in de toekomst dan 3 maanden.  	
	
	 //meer dan 3 maanden
	 if ( (oUserDate.getFullYear() * 12 + oUserDate.getMonth()) - (oCalcDate.getFullYear() * 12 + oCalcDate.getMonth()) > 3 )
	 {
	 showError("Uw betalingsregeling moet binnen 3 maanden starten.");
	 return false;
	 }
	 
	 if(oCalcDate.getDate() < 15)
	 {
	  	 //minder dan 3 maanden
	  	 if ( (oUserDate.getFullYear() * 12 + oUserDate.getMonth()) - (oCalcDate.getFullYear() * 12 + oCalcDate.getMonth()) < 0 )
		 {
			showError("U kunt geen betalingsregeling in het verleden starten.");
			return false;
		 }
	 }
	 else
	 {
	 	 //minder dan 3 maanden
	  	 if ( (oUserDate.getFullYear() * 12 + oUserDate.getMonth()) - (oCalcDate.getFullYear() * 12 + oCalcDate.getMonth()) < 1 )
		 {
			showError("U kunt geen betalingsregeling in deze maand meer starten.");
			return false;
		 }
	 }
	 
		
	
	 //valt binnen scope
	 if ( (oUserDate.getFullYear() * 12 + oUserDate.getMonth()) - (oCalcDate.getFullYear() * 12 + oCalcDate.getMonth()) < 3 && (oUserDate.getFullYear() * 12 + oUserDate.getMonth()) - (oCalcDate.getFullYear() * 12 + oCalcDate.getMonth()) >= 0 )
	 {
	 showError("");
	 }
	
	if (oCalcDate.getDate() > 15)
	{
		nMonth = oCalcDate.getMonth();
		if (nMonth < 10)
		{
			oCalcDate.setFullYear(oCalcDate.getFullYear(), (nMonth + 2),1);
		}
		else if(nMonth < 11)
		{
			oCalcDate.setFullYear((oCalcDate.getFullYear() + 1), 0,1);
		}
		else
		{
			oCalcDate.setFullYear((oCalcDate.getFullYear() + 1), 1,1);
		}
	}
	else
	{
		nMonth = oCalcDate.getMonth();
		if (nMonth < 11)
		{
			oCalcDate.setFullYear(oCalcDate.getFullYear(), (nMonth + 1),1);
		}
		else
		{
			oCalcDate.setFullYear((oCalcDate.getFullYear() + 1), 0,1);
		}
	}
	
	if (oCalcDate < oUserDate)
	{
		oCalcDate = oUserDate;
	}
	
	var	nMonth = (oCalcDate.getMonth());
	var nYear = oCalcDate.getFullYear();
	for (i=0;i<nTermijnen;i++)
	{
		name = "kop"+i;
		var kop=document.getElementById(name);
		kop.innerHTML = getMonth(nMonth) +" "+nYear;
		nMonth++;
		if (nMonth > 11)
		{
			nYear++;
			nMonth = 0;
		}
	}
}

function floatFormat(getal, dec) 
{
    var sValue = String(getal);
    sValue = sValue.replace(",", ".");
    f = parseFloat(sValue);
    if(!f)
    {
    	f = 0;
    }
    u = String(f);
    n = u.split(".");
    n[1] == undefined ? n[1] = "" : n[1];
    n[1].length < dec ? n[1] += "000000".substring(0,dec - n[1].length) : n[1] = n[1].substring(0,dec)
    uit = dec > 0 ? n[0] + "." + n[1] : n[0];
    return uit;
}

function transformValue(obj, termijnTotal, termijnEdit)
{	
	if(termijnTotal == (termijnEdit+1))
	{
		obj.value = floatFormat(obj.value ,2);
	}
	else
	{
		var value = obj.value;
		n = value.split(".");
		if(n[1] != undefined)
		{
			document.getElementById("btnRecalculate").style.display = "inline";
			document.getElementById("btnSave").style.display = "none";
			showError("Alleen in de laatste termijn mag het bedrag centen bevatten.");
			return false;
		}
		
		obj.value = floatFormat(obj.value);
	}

	var nTermijnen = getValueOfId("totalTermijn");
	calculateTotal(nTermijnen, floatFormat(getValueOfId("huurstand"), 2));

	return true;
}

function showRegeling(){
  		var returnArray = new Array();
  		returnArray["action"] = 'HUURREGELING';
  		return tab_reload(returnArray);
}
 
function saveRegeling(){
	var returnArray = new Array();
  	returnArray["action"] = 'SAVEREGELING';
  	var nTermijnen = getValueOfId("totalTermijn");
	returnArray["termijnen"] = nTermijnen;
	var nDay = 1;
	
	//parseint verwijderd bij month door Ronald
	//reden: er werd 0 van gemaakt.
	
	var nMonth = getValueOfId("month");
	var nYear = parseInt(getValueOfId("year"));
	returnArray["aanvraagDatum"] = nYear+"-"+nMonth+"-"+nDay;
	
	
  	for (i=0;i<nTermijnen;i++)
  	{
		name = "termijn["+i+"]";
		returnArray[name] = getValueOfId(name);
	}
	tab_reload(returnArray);
}

function showDefault()
{
	var returnArray = new Array();
	returnArray["action"] = 'SHOWDEFAULT';
	return tab_reload(returnArray);
}