function kontrollerahandpenning(f) {

  f.kontantpris_calc.value = getfieldandcheck(f.kontantpris, true);
  if (f.kontantpris_calc.value == 'false') { return 'Kontantpris måste specificeras och vara numeriskt.'; }
  
  f.utrustningtillbehor_calc.value = getfieldandcheck(f.utrustningtillbehor, false);
  if (f.utrustningtillbehor_calc.value == 'false') {  return 'Pris för extrautrustning måste vara numeriskt.'; }
  
  f.inbytesprisbrutto_calc.value = getfieldandcheck(f.inbytesprisbrutto, false);
  if (f.inbytesprisbrutto_calc.value == 'false') { return 'Inbytespris måste vara numeriskt.'; }
  
  f.avgarrestskuld_calc.value = getfieldandcheck(f.avgarrestskuld, false);
  if (f.avgarrestskuld_calc.value == 'false') { return 'Avgår restskuld måste vara numeriskt.'; }
  
  f.kontanterlagt_calc.value = getfieldandcheck(f.kontanterlagt, false);
  if (f.kontanterlagt_calc.value == 'false') {  return 'Kontant erlagt måste vara numeriskt.'; }
   
  f.forstaarspremie_calc.value = getfieldandcheck(f.forstaarspremie, false);
  if (f.forstaarspremie_calc.value == 'false') { return 'Förstaårspremien vara numeriskt.'; }
  
  f.restskuldprocent_calc.value = getfieldandcheck(f.restskuldprocent, false);
  if (f.restskuldprocent_calc.value == 'false') { return 'Restskuld måste nara numeriskt.'; }
   
  return 'NO_ERROR';
}

function kontrolleraresten(f) {
 
  f.betalningsperiod_calc.value = getfieldandcheck(f.betalningsperiod, true);
  if (f.betalningsperiod_calc.value == 'false') { return 'Betalningsperiod måste specificeras och vara numeriskt.'; }
  
  f.upplaggningsavgift_calc.value = getfieldandcheck(f.upplaggningsavgift, true);
  if (f.upplaggningsavgift_calc.value == 'false') { return 'Uppläggningsavgift måste specificeras och vara numeriskt.'; }
  
  f.admavgift_calc.value = getfieldandcheck(f.admavgift, true);
  if (f.admavgift_calc.value == 'false') { return 'Administrativ avgift måste specificeras och vara numeriskt.'; }
  
  f.rantesats_calc.value = getfieldandcheck(f.rantesats, true)
  if (f.rantesats_calc.value == 'false') { return 'Ränta måste specificeras och vara numeriskt.'; }
  
  f.betalningsperiodmedkampanjranta_calc.value = getfieldandcheck(f.betalningsperiodmedkampanjranta, false);
  if (f.betalningsperiodmedkampanjranta_calc.value == 'false') { return 'Betalningsperiod med kampanjränta måste specificeras och vara numeriskt.'; }
  
  f.kampanjranta_calc.value = getfieldandcheck(f.kampanjranta, false);
  if (f.kampanjranta_calc.value == 'false') { return 'Kampanjränta måste specificeras och vara numeriskt.'; }
  
  return 'NO_ERROR';
}

function rakna_om2(f, doalert, uppdaterakontanterlagt) {
  var bruttobelopp;
  var handpenning;
  var betalningsperiod;
  var betalningsperiodmedkampanjranta;
  var ranta;
  var tempranta;
  var kampanjranta;
  var rantamedpunkt;
  var upplaggningsavgift;
  var admavgift;
  var rantegarantitimeout;
  var betalningsmodell;

  test = kontrollerahandpenning(f);
  if (!(test=='NO_ERROR')) {
  	if (doalert) {
  		alert(test);
  	}
  	return false;
  }
  
  kreditbelopp = parseFloat(getfieldvalue(f.kontantpris_calc)) + parseFloat(getfieldvalue(f.utrustningtillbehor_calc));
  
  //alert('kreditbelopp=' + kreditbelopp);
  // Gör sista rimlighetskontroller
  // Kontrollera så att handpenning är minst 20%
  inbytenetto = parseFloat(getfieldvalue(f.inbytesprisbrutto_calc)) - parseFloat(getfieldvalue(f.avgarrestskuld_calc));
  
  nyttkontanterlagt = 0;
  if (inbytenetto < (kreditbelopp * 0.2)) {
  	nyttkontanterlagt = (kreditbelopp * 0.2) - inbytenetto;
  }
  
  //if (nyttkontanterlagt > f.kontanterlagt_calc.value) {
  if (uppdaterakontanterlagt) {
	f.kontanterlagt_calc.value = nyttkontanterlagt;
	f.kontanterlagt.value = nyttkontanterlagt;
	if (doalert) { alert('Värdet för kontant erlagt måste vara minst 20% av kreditbeloppet. Värdet sätts om till ' + nyttkontanterlagt); }
  }

  
  bruttobelopp = kreditbelopp - inbytenetto - parseFloat(getfieldvalue(f.kontanterlagt_calc));
  f.kreditbelopp.value = bruttobelopp;
  
  forstaarspremie = getfieldvalue(f.forstaarspremie_calc);
  bruttobeloppinkforstaarspremie = parseFloat(bruttobelopp) + parseFloat(forstaarspremie);
  f.kreditbeloppinkforstaarspremie.value = bruttobeloppinkforstaarspremie;
  
  restskuldkronor = kreditbelopp * getfieldvalue(f.restskuldprocent_calc) / 100;
  f.restskuldkronor.value = restskuldkronor;
  
  test = kontrolleraresten(f);
  if (!(test=='NO_ERROR')) {
  	if (doalert) {
  		alert(test);
  	}
  	return false;
  }

  upplaggningsavgift = getfieldvalue(f.upplaggningsavgift_calc);
  admavgift = getfieldvalue(f.admavgift_calc);
  ranta = fixnum(getfieldvalue(f.rantesats_calc));
  betalningsperiod = getfieldvalue(f.betalningsperiod);
  betalningsmodell = getfieldvalue(f.betalningsmodell);
  betalningsperiodmedkampanjranta = getfieldvalue(f.betalningsperiodmedkampanjranta_calc);
  kampanjranta = fixnum(getfieldvalue(f.kampanjranta_calc));
  
  if (f.restskuldprocent_calc.value == 0) {
  	if (f.formular_status.value == "ny") {
  		f.ovriginformation.value = "";
  	}
  	else {
  		f.ovriginformation.value = f.ovriginformation_status.value;
  	}
  }
  else {
  	f.ovriginformation.value = "Kontraktet löper på " + f.betalningsperiod.value + " månader med en restskuld på " + f.restskuldkronor.value + " kr.";
  }
  
  rantamedpunkt = fixnum(ranta);

  f.effektivranta.value = fixnum(Math.round(EffektivRanta(bruttobeloppinkforstaarspremie, upplaggningsavgift, admavgift, ranta * 100, betalningsperiod, betalningsmodell) * 10)/10);

  if (betalningsmodell == 0) {
  	// Annuitet
	  if ((betalningsperiod == betalningsperiodmedkampanjranta) || (betalningsperiodmedkampanjranta == 0)) {
	  	if (betalningsperiodmedkampanjranta == 0) {
	  		tempranta = ranta;
	  	}
	  	else {
	  		tempranta = kampanjranta;
		}
		
		manadskostnad1 = Berakna(bruttobeloppinkforstaarspremie, restskuldkronor, tempranta, betalningsperiod, 0, 0);
	  		
		f.belopp1.value = Math.round(manadskostnad1);
		
		if (restskuldkronor == 0) {
			f.antalbet1.value = betalningsperiod;
			
			f.antalbet2.value = 0;
			f.belopp2.value = 0;
		}
		else {
			f.antalbet1.value = betalningsperiod - 1;
			
			f.antalbet2.value = 1;
			f.belopp2.value = Math.round(manadskostnad1 + restskuldkronor);
		}
		
		f.rantekostnad.value = Math.round((betalningsperiod * manadskostnad1) + restskuldkronor - bruttobeloppinkforstaarspremie);
	  }
	  else {
		manadskostnad1 = Berakna(bruttobeloppinkforstaarspremie, restskuldkronor, kampanjranta, betalningsperiod, 0, 0);
	  	//alert("manadskostnad=" + manadskostnad1);
	  
		f.antalbet1.value = betalningsperiodmedkampanjranta;
		f.belopp1.value = Math.round(manadskostnad1);
		  
		rest = fixnum(Restvarde(bruttobeloppinkforstaarspremie, manadskostnad1, kampanjranta, betalningsperiodmedkampanjranta, ranta, betalningsperiod, 0));
		//alert("rest=" + rest);
		  
		manadskostnad2 = Berakna(rest, restskuldkronor, ranta, betalningsperiod - betalningsperiodmedkampanjranta, 0, 0);
		//alert("manadskostnad=" + manadskostnad2);
		
		f.belopp2.value = Math.round(manadskostnad2);  
		f.antalbet2.value = betalningsperiod - betalningsperiodmedkampanjranta;
		
		if (restskuldkronor != 0) {
			f.antalbet2.value = f.antalbet2.value - 1;
		}
		
		f.rantekostnad.value = Math.round(((betalningsperiodmedkampanjranta * manadskostnad1) + ((betalningsperiod - betalningsperiodmedkampanjranta) * manadskostnad2)) + restskuldkronor - bruttobeloppinkforstaarspremie);
	  }
  }
  else {
  	// Rak amortering
  	manadskostnad1 = (bruttobeloppinkforstaarspremie - restskuldkronor)/betalningsperiod;
  	f.antalbet1.value = betalningsperiod - 1;
  	f.belopp1.value = Math.round(manadskostnad1);
  	
  	f.antalbet2.value = 1;
  	manadskostnad2 = bruttobeloppinkforstaarspremie - (f.belopp1.value * (betalningsperiod - 1));
	f.belopp2.value = Math.round(manadskostnad2);
	

  	if ((betalningsperiod == betalningsperiodmedkampanjranta) || (betalningsperiodmedkampanjranta == 0) || (ranta == kampanjranta)) {
	  	if (betalningsperiodmedkampanjranta == 0) {
	  		tempranta = ranta;
	  	}
	  	else {
	  		tempranta = kampanjranta;
		}
		
		rantaforstaperiod = bruttobeloppinkforstaarspremie * tempranta/1200;
		rantanastsistaperiod = (manadskostnad2 + parseFloat(manadskostnad1)) * tempranta / 1200;
		f.rantekostnad.value = Math.round(((rantaforstaperiod + parseFloat(rantanastsistaperiod))/2) * (betalningsperiod - 1) + ((manadskostnad2) * tempranta / 1200));
	}
	else {
		rantaforstaperiod = bruttobeloppinkforstaarspremie * kampanjranta/1200;
		rantanastsistaperiod = (manadskostnad2 + (parseFloat(manadskostnad1) * (betalningsperiod - betalningsperiodmedkampanjranta + 1))) * kampanjranta / 1200;
		
		rantekostnad = ((rantaforstaperiod + rantanastsistaperiod)/2) * betalningsperiodmedkampanjranta;
		rest = bruttobeloppinkforstaarspremie - (betalningsperiodmedkampanjranta * manadskostnad1);
		
		rantaforstaperiod = rest * ranta/1200;
		rantanastsistaperiod = (manadskostnad2 + parseFloat(manadskostnad1)) * ranta / 1200;
		
		rantekostnad = rantekostnad + (((rantaforstaperiod + rantanastsistaperiod)/2) * betalningsperiod);

		f.rantekostnad.value = Math.round(((((bruttobeloppinkforstaarspremie * kampanjranta/1200) + (rest * kampanjranta/1200))/2) * betalningsperiodmedkampanjranta) + ((((rest * ranta/1200) + (restskuldkronor * ranta/1200))/2) * (betalningsperiod - betalningsperiodmedkampanjranta)));
	}
  }	

  f.summaadmavgift.value = (betalningsperiod * admavgift);
  f.upplaggningsavgift2.value = upplaggningsavgift;

  f.beraknadkreditkostnad.value = parseFloat(f.rantekostnad.value) + parseFloat(f.summaadmavgift.value) + parseFloat(upplaggningsavgift);
  f.beraknadkreditfordran.value = parseFloat(f.beraknadkreditkostnad.value) + parseFloat(bruttobeloppinkforstaarspremie);

  f.inbytesprisnetto.value = f.inbytesprisbrutto.value - f.avgarrestskuld.value;
  
  return true;
}


