var percRate;
var inputAmout;
     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();
jQuery(document).ready(function($) {
  
var $aNavigated = jQuery("a.navigated");
$aNavigated.each(function() { // js breadcrumbs
  var navigatedItemName = jQuery(this).text();
  var navigatedItemUrl = jQuery(this).attr("href");
  jQuery("#nav_breadcrumbs ol").append("<li><a href='"+navigatedItemUrl+"'>"+navigatedItemName+"</a></li>");
});

jQuery("#nav_breadcrumbs ol li:last-child").find("a").addClass("last");

   // Searchform interaction
   var $searchForm = $("#search_form"), //CACHE
       $query = $searchForm.find(".query"),
       $label = $searchForm.find("label");
   if ($query.val() !== "") {$label.hide()}
   $searchForm.submit(function(){
   if ($query.val() === "") {return false}
   });
   $query.focus(function(){$label.hide()}).blur(function(){
     if ($(this).val() === "") {$label.show()}
   });
   $searchForm.find("label").click(function(){
    $query.focus();
   }); 
   // END SEARCHFORM

  // Loan calculator start

    paymentsPerYear = $("#antallTerminerPerAar").val();
    
    $("#nominalInterestRate").bind("keyup",function() {
      var userInput = $(this).val();
      percRate = userInput.replace(",",".").split(' ').join(''); //remove spaces and replace comma with dot
      var interestRate = percRate / 100;
      var effRate =  Math.pow((1 + interestRate / paymentsPerYear),paymentsPerYear) -1; // effective interest rate formula for monthly payments
      var displayedEffectiveRate = Math.round(effRate * 10000)/100; // we want something like 3.25
      //$("#effectiveInterestRateDisplayed").text(displayedEffectiveRate+"%");
    });

  $("#calculate").bind("click",function() {
    var startFee = parseInt($(".startFee").val().replace(new RegExp("[^0-9]","g"),""));
    avdragsFrihet =  /\d/.test($(".avdragsFrihet").val()) ? parseInt($(".avdragsFrihet").val().replace(/[^0-9]/g,"")) : 0 ;
    var numberOfRows = 10;
    var numberOfColumns = 6;
    var loanAmountInterval = 50000;
    var percentageInterval = 0.25;

    inputAmount = jQuery("#amountInput").val().replace(/[^0-9]/g,"");
    var startAmout = inputAmount - ((Math.round(numberOfRows/2)) * loanAmountInterval);
    var amoutToIncrement = startAmout;

    var startPercentage = percRate - ((Math.round(numberOfColumns/2)) * percentageInterval);
    var percentageToIncrement = startPercentage;


    jQuery("#results tr:first td:not(:first)").each(function() {
      var length = percentageToIncrement.toString().length;
      if(length==3) {
      jQuery(this).text(percentageToIncrement.toString()+'0');
      }
      else if(length==1){
        jQuery(this).text(percentageToIncrement.toString()+'.00');
      }
      else {
        jQuery(this).text(percentageToIncrement);
      }
      if(percentageToIncrement == percRate) {
        jQuery(this).addClass("currentperc");
      }
      percentageToIncrement += percentageInterval;  
    });


     // now echo the payment plan
    resetParameters();
    var loanType = ($("#annuity").attr("src").indexOf("checked") === -1) ? 0 : 1 ;
    paymentsPerYear = $("#antallTerminerPerAar").val();
    var interestOnlyTime = avdragsFrihet ; //parseInt($("#interestOnlyTime").val().replace(/[^0-9]/g,""));
    var termFee = parseInt($("#termFee").val().replace(/[^0-9]/g,""));
    //console.log(loanType,inputAmount,interestOnlyTime,paymentsPerYear,startFee);
    setParams(loanType,inputAmount,percRate,jQuery("#repayment").val(),interestOnlyTime,paymentsPerYear,termFee,startFee);
    $("#results2").html(""); // clear it just in case
    calculate();
    printInfo();
    printPlan();
    jQuery("#results tr:not(:first)").each(function() {
      jQuery(this).children("td:first").text(numberToReadableString(amoutToIncrement)).addClass("loanAmout");
      if(amoutToIncrement == inputAmount) 
        jQuery(this).addClass("inputAmoutTr");
      jQuery(this).children("td:not(:first)").each(function() { 
        downPayment= "0";
        currentPosition = jQuery(this).index();
        oPercRate = jQuery("#results tr:first td:eq("+(currentPosition)+")").text();
        if(parseFloat(oPercRate)==parseFloat(percRate)) jQuery(this).addClass("currentperc");
        annualInterestRate = oPercRate/100
        years= jQuery("#repayment").val();
        numPayments=years*paymentsPerYear;
        if($("#annuity").attr("src").indexOf("checked") === -1 || (avdragsFrihet > 0)) {
          resetParameters();
          p_terms = paymentsPerYear;
          p_termtax = termFee;
          //console.log(termFee);
          var termStartAvgift = p_terms * p_delay;
          var daysInTerm = (12 / p_terms) * 30.0;
          var fastavdrag = Math.ceil(amoutToIncrement / (numPayments - termStartAvgift));
          var rest = amoutToIncrement;
          var term = 1;
          avdrag = (1 > termStartAvgift)? Math.min(fastavdrag, rest) : 0.0;
          var interest = Math.ceil((rest * annualInterestRate) * (daysInTerm / 360.0));
          termfee = (avdragsFrihet > 0) ? interest + p_termtax : avdrag + interest + p_termtax;
          rest = rest - avdrag;
          jQuery(this)
            .text(numberToReadableString(Math.round((termfee/(12/paymentsPerYear)))))
            .attr("axis",(termfee/(1/paymentsPerYear)).toString())
            .attr("title",sum_total);
        }
        else {
          monthRate=annualInterestRate/paymentsPerYear;
          prin=amoutToIncrement-downPayment;
          monthPayment=(prin*monthRate)/(1-Math.pow((1+monthRate),(-1*numPayments)));
          jQuery(this)
            .text(numberToReadableString(Math.ceil((monthPayment+termFee)/(12/paymentsPerYear))))
            .attr("axis",(monthPayment+termFee)/(1/paymentsPerYear));
          sum_numberOfTerms = paymentsPerYear * years;
          }
       });
      amoutToIncrement += loanAmountInterval;
    }).filter(":even").addClass("even"); 
    $("#results tr:first td:not(:first)").each(function(){
      $(this).text($(this).text()+"%"); // add percentage sign 
     });
     jQuery(".results3").remove();
     jQuery("#results").clone().attr("id","results3").addClass("results3").appendTo(".results");
     jQuery(".results3").find("td:not(.loanAmout)").each(function() {
       if(isInt($(this).closest("tr").find("td:first").text().replace(/\ /g,"")) && $(this).closest("tr").find("td:first").text().replace(/\ /g,"").length != 0) {
         var theAmount = $(this).attr("axis");
         jQuery(this).text(numberToReadableString(Math.round(theAmount)));
       }
     });
     if($("#paytable").hasClass("selected") || $("#payplan").hasClass("selected")) { 
       $(".results3").hide();
     }
     else {
       $(".results3").show();
       $("#results").hide();
     }
     $("#effectiveInterestRateDisplayed").text(CommaFormatted(CalculateEffectiveInterestRate().toString().substr(0,4)) + '%');
  });	
function CommaFormatted(amount_)
{
  if(amount_.indexOf(".") == -1) {
    amount_ = amount_+'.00';
  }
  else if (amount_.indexOf(".") == amount_.length-2) {
    amount_ = amount_ +'0';
  }
	var delimiter = " "; // replace comma if desired
	var a = amount_.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if(d.length < 1) { amount_ = n; }
	else { amount_ = n + '.' + d; }
	amount_ = minus + amount_;
	return amount_.replace(/\./g,",");
}

jQuery("#yearTable").click(function(e) {
  e.preventDefault();
  jQuery("#results2,#results").fadeOut(function(){setTimeout(function() {$(".results3").fadeIn();},500)});
  jQuery("#payplan,#paytable").removeClass("selected");
  $(this).addClass("selected");
});
jQuery("#paytable").click(function(e) {
  e.preventDefault();
  jQuery("#results2,.results3").fadeOut(function(){setTimeout(function() {$("#results").fadeIn();},500)});
  jQuery("#payplan,#yearTable").removeClass("selected");
  $(this).addClass("selected");
});
jQuery("#payplan").click(function(e) {
  e.preventDefault();
  jQuery("#results,.results3").fadeOut(function(){setTimeout(function() {$("#results2").fadeIn();},500)});
  jQuery("#paytable,#yearTable").removeClass("selected");
  $(this).addClass("selected");
});


jQuery("#annuity,#serial").click(function() {
  jQuery("#annuity,#serial").attr("src",jQuery(this).attr("src").replace("checkbox-checked.png","checkbox.png"));
  newSrc = jQuery(this).attr("src").replace("checkbox.png","checkbox-checked.png");
  jQuery(this).attr("src",newSrc);
});

// ### put default values into form and run one calculation so that users get how the calculator works 

jQuery("#calculatorInput #annuity").click();
//jQuery("#calculatorInput #amountInput").val("2 000 000");

//jQuery("#calculatorInput #repayment").val("25");
//jQuery("#calculatorInput #interestOnlyTime").val("0");
//jQuery("#calculatorInput #nominalInterestRate").val("3.1");
//jQuery("#calculatorInput #nominalInterestRate").val(jQuery("#calculatorInput #nominalInterestRate").val());

jQuery("#nominalInterestRate").trigger("keyup");
jQuery("#calculatorInput #calculate").click();
    //$("#results").hide();
   // jQuery(".results3").show();

jQuery("#amountInput").bind("keyup",function() {
  var oldVal = jQuery(this).val().replace(/[^0-9]/g,'');
  if(oldVal.length>3) {
    var newVal = numberToReadableString(oldVal);
    jQuery(this).val(newVal);
  }
});

}); // #### END OF CODE RUN ON DOCUMENT READY ###

function isInt (i) {
return (i % 1) == 0;
}

function numberToReadableString(nr){
  var str=nr.toString();
  switch(str.length){
  case 4:
  str=str.substr(0,1)+" "+str.substr(1,3);
  break;

  case 5:
  str=str.substr(0,2)+" "+str.substr(2,3);
  break;

  case 6:
  str=str.substr(0,3)+" "+str.substr(3,3);
  break;

  case 7:
  str=str.substr(0,1)+" "+str.substr(1,3)+" "+str.substr(4,3);
  break;

  case 8:
  str=str.substr(0,2)+" "+str.substr(2,3)+" "+str.substr(4,3);
  break;
  
  case 9:
  str=str.substr(0,3)+" "+str.substr(3,3)+" "+str.substr(4,3);
  }
  return str;
}





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();
        }
}

var PaymentsArray, DaysArray;

function calculateAnnuitet() {
	sum_numberOfTerms = p_terms * p_time;
  	var termStartAvgift = p_terms * p_delay;
	var daysInTerm = (12 / 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;
  PaymentsArray = [-rest];
  DaysArray = [0];
	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;
    PaymentsArray.push(termfee);
    DaysArray.push(DaysArray[DaysArray.length-1] + daysInTerm);
		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 / p_terms) * 30.0;

	var fastavdrag = Math.ceil(p_sum / (sum_numberOfTerms - termStartAvgift));
	rest = p_sum;
  PaymentsArray = [-rest];
  DaysArray = [0];
	plan = []; // clear array when recalculating
	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;
    PaymentsArray.push(termfee);
    DaysArray.push(DaysArray[DaysArray.length-1] + daysInTerm);
		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() {
	$('#results2').prepend('<h2>Oversikt</h2><table class="info"></table>');
	$('#results2 table.info ').append('<tr class="laan"><td class="laan" colspan="3">L\u00E5netype:</td><td colspan="3">' + ((p_type == '1') ? 'Annuitetsl\u00E5n' : 'Seriel\u00E5n') + '</td></tr>');
	$('#results2 table.info').append('<tr class="sum"><td class="sum" colspan="3">L\u00E5nebel\u00F8p:</td><td colspan="3">' + prettyPrint('' + p_sum) + '</td></tr>');
	$('#results2 table.info').append('<tr class="paytime"><td class="paytime" colspan="3">Nedbetalingstid:</td><td colspan="3">' + p_time + '</td></tr>');
	$('#results2 table.info').append('<tr class="numberOfTermins"><td class="numberOfTermins" colspan="3">Antall terminer pr. \u00E5r:</td><td colspan="3">' + p_terms + '</td></tr>');
	$('#results2 table.info').append('<tr class="avdragsfrie"><td class="avdragsfrie" colspan="3">Avdragsfrie terminer:</td><td colspan="3">' + p_delay + '</td></tr>');
	$('#results2 table.info').append('<tr class="termingebyr"><td class="termingebyr" colspan="3">Termingebyr:</td><td colspan="3">' + prettyPrint('' + p_termtax) + '</td></tr>');
	$('#results2 table.info').append('<tr class="etableringsgebyr"><td class="etableringsgebyr" colspan="3">Etableringsgebyr:</td><td colspan="3">' + prettyPrint('' + p_starttax) + '</td></tr>');
	$('#results2 table.info').append('<tr class="nominellRente"><td class="nominellRente" colspan="3">Nominell rente:</td><td colspan="3">' + (Math.round((p_interest * 100)*100)/100) + '%</td></tr>');
	//$('#results2').append('<tr><td colspan="3">&#160;</td></tr>');
	$('#results2 table.info').append('<tr class="sumAvdrag"><td class="sumAvdrag" colspan="3">Sum avdrag:</td><td colspan="3">' + prettyPrint('' + sum_avdrag) + '</td></tr>');
	$('#results2 table.info').append('<tr class="sumTermingebyr"><td class="sumTermingebyr" colspan="3">Sum termingebyr:</td><td colspan="3">' + prettyPrint('' + sum_termtax) + '</td></tr>');
	$('#results2 table.info').append('<tr class="sumRenter"><td class="sumRenter" colspan="3">Sum renter:</td><td colspan="3">' + prettyPrint('' + sum_interest) + '</td></tr>');
	$('#results2 table.info').append('<tr class="samletKostnad"><td class="samletKostnad" colspan="3">Samlet kostnad:</td><td colspan="3">' + prettyPrint('' + sum_total) + '</td></tr>');
}

function printPlan() {
   $('#results2').append('<table class="plan"></table>');
   $('#results2 table.plan').append("<tr><th class='termin'>Termin</th><th class='terminBel'>Termin bel\u00F8p</th><th class='avdrag'>Avdrag</th><th class='renter'>Renter</th><th class='gebyr'>Gebyr</th><th class='restgjeld'>Restgjeld</th></tr>");
	for(i=0;i<sum_numberOfTerms;i++){
		var arr = plan[i];
		$('#results2 table.plan').append("<tr class='payPlan'><td class='col1'>" + arr[0] + "</td><td class='col11'>" + 
											 prettyPrint('' + arr[1]) + "</td><td class='col2'>" + 
											 prettyPrint('' + arr[2]) + "</td><td class='col3'>" +
							             prettyPrint('' + arr[3]) + "</td><td class='col4'>" + 
							             prettyPrint('' + arr[4]) + "</td><td class='col5'>" + 
							             prettyPrint('' + arr[5]) + "</td></tr>");
	}
	//$('#results2').prepend("");
}

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;
  }
}
function resetParameters() {
    // parameters
     p_type = 0;
     p_sum = 0;
     p_interest = 0;
     p_time = 0;
     p_delay = 0;
     p_terms = 0;
     p_termtax = 0;
     p_starttax = 0;

     // calculations
     sum_avdrag = 0;
     sum_termtax = 0;
     sum_interest = 0;
     sum_total = 0;
     sum_numberOfTerms = 0;

     // payment plan
     plan = new Array();
}

function CalculateEffectiveInterestRate() {
  var _start = 0.0; // float
  var _status = 0; // smallint = 0 out
  var _yield = 0.0; // float    = 0 out
  var _debug = 0; // bit      = 0
  var corr; // float
  var inc; // smallint
  var balance = 0.0; // float
  var direction = ''; // char(1)
  var i;

  inc = 0;
  corr = 1.0;

  if (_start == 0) _start = 0.5;
  else _start = _start / 100.0;

  _yield = _start;

  while (inc < 500) {
    if (_yield != -1) {
      i = 0;
      balance = 0.0;
      while (i < PaymentsArray.length) {
        balance = balance + PaymentsArray[i] / Math.pow(1 + _yield, DaysArray[i] / 365.0);
        i = i + 1;
      }
    } else balance = 0;

    inc = inc + 1;

    if (balance >= -0.1 && balance <= 0.1) break;

    if (balance < 0) {

      if (direction == 'M' && corr != 0.00001) {
        _yield = _yield - corr * 0.66;
        corr = corr / 2;
      } else _yield = _yield - corr;
      direction = 'S';
    } else {
      if (direction == 'S' && corr != 0.00001) {
        _yield = _yield + corr * 0.66;
        corr = corr / 2;
      } else _yield = _yield + corr;
      direction = 'M';
    }

    if (corr == 0) corr = 0.00001;
    if (_yield < -1.0 || _yield > 100.0) {
      _yield = 0;
      _status = -1;
      // goto error_exit
    }
  }

  if (inc == 500) {
    _yield = -1;
    _status = -1;
  } else {
    _yield = _yield * 100.0;
    _status = inc;
  }
  
  return _yield;
}

jQuery(window).load(function() {       
  jQuery('.sitemap_one').load(ips.system.base+'?module=Articles;action=ArticleFolder.getMenu;objectid=1;startlevel=0;levels=5&template=ajaxsitemap'); 
});
