//Om gRantaLocked är true kan kunden inte ändra räntan
var gRantaLocked = true;
//Förinställt värde på räntan
var gRanta = "6,45";

function updateKalkyl( ){
	var f = document.kalkyl;
	var ranta;
	if( gRantaLocked ){
		ranta = document.getElementById("ranta").innerHTML;
	} else {
		ranta = f.ranta.value;
	}
	ranta = readNumber( ranta );
	if( isNaN(ranta) ){ return; }
	var pris = readNumber( f.pris.value );
	if( isNaN(pris) ){ return; }
	var insats = readNumber( f.insats.value );
	if( isNaN(insats) ){ return; }
	var antalPerioder = readNumber( f.laneperiod.options[f.laneperiod.selectedIndex].value );
	if( isNaN(antalPerioder) ){ return; }
	var upplagAvgift = readNumber( document.getElementById("upplagavgift").innerHTML );	
	if( isNaN(upplagAvgift) ){ return; }
	var adminAvgift = readNumber( document.getElementById("adminavgift").innerHTML	 );
	if( isNaN(adminAvgift) ){ return; }
	
	if( insats < 0.2*pris ){
		document.getElementById("kontantinsats").className = "kontantinsatsAlert";
	} else {
		document.getElementById("kontantinsats").className = "kontantinsats";
	}
	
	var lanebelopp = pris - insats;
	document.getElementById("lanebelopp").innerHTML = writeNumber( lanebelopp );
	
	var effRanta = beraknaEffektivRanta( lanebelopp, upplagAvgift, adminAvgift, ranta, antalPerioder );
	if( !isFinite(effRanta) ){
		effRanta = 0;
	}
	var printedEffRanta = writeNumber( effRanta );
	if( effRanta > 500 ){
		printedEffRanta = "> 500";
	}
	document.getElementById("effranta").innerHTML = writeNumber( printedEffRanta );
	
	var manadskostnad = beraknaManadsBelopp( lanebelopp, 0, ranta, antalPerioder, 0 );	
	document.getElementById("manadskostnad").innerHTML = writeNumber( Math.ceil(manadskostnad) );
	return;
}

function beraknaManadsBelopp( belopp, restskuld, ranta, antalPerioder, forskott ){
	var i = ranta/1200;
	var sppv = Math.pow((1+i), -antalPerioder);
	var uspv = (1-(sppv))/i;
	var manadskostnad = (belopp - restskuld*sppv)/((1 + (i*forskott))*uspv);
	
    return manadskostnad;
}

function beraknaEffektivRanta( belopp, upplagAvgift, adminAvgift, ranta, antalPerioder ){
	var calcRanta = ranta / 1200;
	var ar = antalPerioder / 12;
	
	var manadskostnad = (belopp * Math.pow((1+calcRanta),antalPerioder)*calcRanta) / (Math.pow((1+calcRanta),antalPerioder)-1);
	manadskostnad = Math.round(manadskostnad + adminAvgift);
	
	var kreditkostnad = (antalPerioder * adminAvgift) + upplagAvgift;
	var kredPerAr = kreditkostnad / ar;
	var kreditkonstnadProc = (100*kredPerAr)/(belopp/2);
	
	calcRanta = calcRanta + kreditkonstnadProc/1200;
	
	var effektivranta = Math.ceil(100*100*(Math.pow(1+calcRanta,12)-1))/100;
	return effektivranta;
}

function updateKontantinsats(){
	var f = document.kalkyl;
	var pris = readNumber( f.pris.value );
	if( isNaN(pris) ){ return; }
	var insats = readNumber( f.insats.value );
	if( isNaN(insats) ){ return; }
	
	if( insats === 0 ){
		f.insats.value = writeNumber( 0.2*pris );
	}
	
	return;
}

function writeNumber( wIn ){
	var wString = String( wIn ).replace( /\./g, "," );
	
	var regExp = new RegExp( "([0-9]+)([0-9]{3})" );
	while( regExp.test(wString) ){
		wString = wString.replace( regExp, "$1 $2" );
	}
	
	return wString;
}

function readNumber( wIn ){
	wIn = wIn.replace( / /g, "" );
	var wString = String( wIn ).replace( /\,/g, ".");
	var wNumber = Number( wString );
	return wNumber;
}

function initKalkyl(){
	if( gRantaLocked ){
		document.getElementById("rantaTD").innerHTML = "<span id='ranta'>" + writeNumber(gRanta) + "<\/span>&nbsp;%";
	} else {
		document.kalkyl.ranta.value = writeNumber( gRanta );
	}
}
