// parameters
var p_type = 0;
var p_sum = 0;
var p_interest = 0;
var p_time = 0;
var p_delay = 0;
var p_terms = 0;
var p_termtax = 0;
var p_starttax = 0;

// calculations
var sum_avdrag = 0;
var sum_termtax = 0;
var sum_interest = 0;
var sum_total = 0;

var sum_numberOfTerms = 0;

// payment plan
var plan = new Array();

function setParams(type, sum, interest, time, delay, terms, tax, starttax)  {
	p_type = type;
	p_sum = sum;        
   p_interest = interest / 100.0;
	p_time = time;
	p_delay = delay;
	p_terms = terms;
	p_termtax = tax;
	p_starttax = starttax;
}

function calculate() {
	if (p_type == '1') {
		calculateAnnuitet();
	} else {
		calculateSerie();
	}
}

function calculateAnnuitet() {
	sum_numberOfTerms = p_terms * p_time;
  	var termStartAvgift = p_terms * p_delay;
	var daysInTerm = (12.0 / p_terms) * 30.0;

	var E = ((p_interest / p_terms) * 360.0) / 360.0;
	var EKS = Math.pow(1.0 + E, (sum_numberOfTerms - termStartAvgift));
	var B = (p_sum * E * EKS) / (EKS - 1.0);
	B = Math.ceil(B);

	var rest = p_sum;
	for (i=1;i<=sum_numberOfTerms;i++) {
		var term = i;
		var interest = Math.round((rest * p_interest) * (daysInTerm / 360.0));
		var avdrag = (i > termStartAvgift)? Math.min(B - interest, rest) : 0.0;
		var termfee = (i > termStartAvgift)? B + p_termtax : interest + p_termtax;
		rest = rest - avdrag;
		var arr = [i, termfee, avdrag, interest, p_termtax, rest];
		plan.push(arr);

		sum_avdrag += avdrag;
		sum_interest += interest;
	}
	sum_termtax = p_termtax * sum_numberOfTerms;
	sum_total = sum_avdrag + sum_interest + sum_termtax + p_starttax;
}

function calculateSerie() {
	sum_numberOfTerms = p_terms * p_time;
	var termStartAvgift = p_terms * p_delay;
	var daysInTerm = (12.0 / p_terms) * 30.0;

	var fastavdrag = Math.ceil(p_sum / (sum_numberOfTerms - termStartAvgift));
	var rest = p_sum;
	for (i=1;i<=sum_numberOfTerms;i++) {
		var term = i;
		var avdrag = (i > termStartAvgift)? Math.min(fastavdrag, rest) : 0.0;
		var interest = Math.ceil((rest * p_interest) * (daysInTerm / 360.0));
	   var termfee = avdrag + interest + p_termtax;
		rest = rest - avdrag;
		var arr = [i, termfee, avdrag, interest, p_termtax, rest];
		plan.push(arr);

		sum_avdrag += avdrag;
		sum_interest += interest;
	}
	sum_termtax = p_termtax * sum_numberOfTerms;
	sum_total = sum_avdrag + sum_interest + sum_termtax + p_starttax;
}


function printInfo() {
	document.write('<h2>Oversikt:</h2><table class="info">');
	document.write('<tr><td>Lånetype:</td><td>' + ((p_type == '1') ? 'Annuitetslån' : 'Serielån') + '</td></tr>');
	document.write('<tr><td>Lånebeløp:</td><td>' + prettyPrint('' + p_sum) + '</td></tr>');
	document.write('<tr><td>Nedbetalingstid:</td><td>' + p_time + '</td></tr>');
	document.write('<tr><td>Antall terminer pr. år:</td><td>' + p_terms + '</td></tr>');
	document.write('<tr><td>Avdragsfrie gebyrer:</td><td>' + p_delay + '</td></tr>');
	document.write('<tr><td>Termingebyr:</td><td>' + prettyPrint('' + p_termtax) + '</td></tr>');
	document.write('<tr><td>Etableringsgebyr:</td><td>' + prettyPrint('' + p_starttax) + '</td></tr>');
	document.write('<tr><td>Nominell rente:</td><td>' + (Math.round((p_interest * 100)*100)/100) + '%</td></tr>');
	document.write('<tr><td colspan="2">&#160;</td></tr>');
	document.write('<tr><td>Sum avdrag:</td><td>' + prettyPrint('' + sum_avdrag) + '</td></tr>');
	document.write('<tr><td>Sum termingebyr:</td><td>' + prettyPrint('' + sum_termtax) + '</td></tr>');
	document.write('<tr><td>Sum renter:</td><td>' + prettyPrint('' + sum_interest) + '</td></tr>');
	document.write('<tr><td>Samlet kostnad:</td><td>' + prettyPrint('' + sum_total) + '</td></tr>');
	document.write('</table>');
}

function printPlan() {
	document.write('<h2>Betalingsplan:</h2><table class="plan">');
   document.write("<tr><th>Termin</th><th>Termin beløp</th><th>Avdrag</th><th>Renter</th><th>Gebyr</th><th>Restgjeld</th></tr>");
	for(i=0;i<sum_numberOfTerms;i++){
		var arr = plan[i];
		document.write("<tr><td>" + arr[0] + "</td><td>" + 
											 prettyPrint('' + arr[1]) + "</td><td>" + 
											 prettyPrint('' + arr[2]) + "</td><td>" +
							             prettyPrint('' + arr[3]) + "</td><td>" + 
							             prettyPrint('' + arr[4]) + "</td><td>" + 
							             prettyPrint('' + arr[5]) + "</td></tr>");
	}
	document.write("</table>");
}

function prettyPrint(bignumber) {
   	if (bignumber.length > 3) {
			return prettyPrint(bignumber.substring(0, bignumber.length - 3)) + ' ' + bignumber.substring(bignumber.length - 3);
      } else {
			return bignumber;
		}
}


// Validation

function validate() {
   var f = document.forms['calc'];
   var err = '';
   if (f.elements['sum'].value == '') {
         err += "\n- Lånebeløp må fylles ut";
   }

   if (f.elements['interest'].value == '') {
         err += "\n- Rentesats må fylles ut";
   }

   if (f.elements['time'].value == '') {
         err += "\n- Nedbetalingsperiode må fylles ut";
   }
    
   if (f.elements['tax'].value == '') {
         err += "\n- Termingebyr må fylles ut";
   }

   if (err.length > 0) {
          alert('Du må fylle ut alle feltene. Følgende feilmeldinger ble returnert:' + err);
          return false;
  } else {
          return true;
  }
}
