/* 
loancalc.js  version 1.2.1

		require: dbcore.js.
						 calculatortoolbox.js
						 dbtoolboxes.js

*/

LoanCalc = {
	jsversion: '1.2.1',
	
  init: function() {
	  	var Toolbox = CalculatorToolbox;
  		var CoreCompliance=DBcore.getJSversion(DBcore,'1.4.0');
		var ToolCompliant=DBcore.getJSversion(CalculatorToolbox,'1.9.2');
		var ErrorCompliant=DBcore.getJSversion(ErrorHandler,'1.5.0');
  		if (CoreCompliance.compliant && ToolCompliant.compliant && ErrorCompliant.compliant) {
			 Toolbox.calculatorObj=LoanCalc;
			 Toolbox.listOfTriggers=['calculate'];
			 Toolbox.setJShides();
			 Toolbox.setClickListeners();
			 Toolbox.setChangeListeners();
			 Toolbox.setButtonActivation();
			 Toolbox.setKeydownListeners();
			 Toolbox.miscInitiations();
			}
  },
	
	handleCalculate: function(button) {
	  var self=LoanCalc;
		var Toolbox=CalculatorToolbox;
		if (Toolbox.fieldsAreValid(button.form)) {
			
			// Language-text vars
			
			var yeartxtEN = "Year";
			var yeartxtFI = "vuosi";
			var yeartxtSE = "&#x00C5;r";
			var yearstxtEN = "Years";
			var yearstxtFI = "vuotta";
			var yearstxtSE = "&#x00C5;r";
			var monthstxtEN = "Months";
			var monthstxtFI = "kuukautta";
			var monthstxtSE = "M&#x00E5;nader";
			var monthtxtEN = "Month";
			var monthtxtFI = "kuukausi";
			var monthtxtSE = "M&#x00E5;nad";
			var monthlyrepaymenttxtEN = "Monthly repayment";
			var monthlyrepaymenttxtFI = "Lyhennys kuukaudessa";
			var monthlyrepaymenttxtSE = "Amortering per m&#x00E5;nad";
			var monthlypaymenttxtEN = "Monthly payment";
			var monthlypaymenttxtFI = "Maksuer&#x00E4;";
			var monthlypaymenttxtSE = "Betalnigsrat";
			var totalfirstpaymenttxtEN = "Total first payment";
			var totalfirstpaymenttxtFI = "Ensimm&#x00E4;inen maksuer&#x00E4; yhteens&#x00E4;";
			var totalfirstpaymenttxtSE = "Den f&#x00F6;rsta betalningen sammanlagt";
			var periodabove30yearstxtEN = "Period above 30 years";
			var periodabove30yearstxtFI = "Aika yli 30 vuotta";
			var periodabove30yearstxtSE = "Tid &#x00F6;ver 30 &#x00E5;r";
			var yearsandtxtEN = "Years and";
			var yearsandtxtFI = "vuotta ja";
			var yearsandtxtSE = "&#x00C5;r och";
			var firstrepaymenttxtEN = "First repayment";
			var firstrepaymenttxtFI = "Ensimm&#x00E4;inen maksuer&#x00E4;";
			var firstrepaymenttxtSE = "F&#x00F6;rsta betalning";
			var basiccoverfeetxtEN = "Basic cover fee";
			var basiccoverfeetxtFI = "Perusturvamaksu";
			var basiccoverfeetxtSE = "f&#x00F6;r Grundskydd";
			var extendedcoverfeetxtEN = "Extended cover fee";
			var extendedcoverfeetxtFI = "Laajan lainaturvan maksu";
			var extendedcoverfeetxtSE = "f&#x00F6;r Omfattande skydd";
			var noinsurancetxtEN = "No insurance";
			var noinsurancetxtFI = "Ei vakuutusta";
			var noinsurancetxtSE = "Ingen f&#x00F6;rs&#x00E4;kring";
			var paymenttxtEN = "Payment";
			var paymenttxtFI = "Maksu";
			var paymenttxtSE = "Betalning";
			var principaltxtEN = "Principal";
			var principaltxtFI = "Lyhennys";
			var principaltxtSE = "Amortering";
			var interesttxtEN = "Interest";
			var interesttxtFI = "Korko";
			var interesttxtSE = "R&#x00E4;nta";
			var balancetxtEN = "Balance";
			var balancetxtFI = "P&#x00E4;&#x00E4;oma";
			var balancetxtSE = "Kapital";
			var amortsheduletxtEN = "Amortization Schedule when interestrate is";
			var amortsheduletxtFI = "Maksuohjelma kun korkoprosentti on";
			var amortsheduletxtSE = "Betalningsprogram n&#x00E4;r r&#x00E4;nteprosent &#x00E4;r";
			var totalcosttxtEN = "At (@ydelse) &#128; a month, it will take (@termin) months to pay off this loan and will cost you a total of";
			var totalcosttxtFI = "(@ydelse) &#128; kuukausier&#x00E4;ll&#x00E4; t&#x00E4;m&#x00E4;n lainan maksaminen kest&#x00E4;&#x00E4; (@termin) kuukautta ja kokonaiskustannuksesi on";
			var totalcosttxtSE = "Med (@ydelse) &#128; m&#x00E5;nadsrat tar det (@termin) m&#x00E5;nader att betala l&#x00E5;net och din totalkosnad &#x00E4;r";



			
						
			if(ErrorHandler.languagecode == 'en'){
				LoanCalc.yearstxt = yearstxtEN;
				LoanCalc.monthlyrepaymenttxt = monthlyrepaymenttxtEN;
				LoanCalc.monthlypaymenttxt = monthlypaymenttxtEN;
				LoanCalc.totalfirstpaymenttxt = totalfirstpaymenttxtEN;
				LoanCalc.periodabove30yearstxt = periodabove30yearstxtEN;
				LoanCalc.yearsandtxt = yearsandtxtEN;
				LoanCalc.monthstxt = monthstxtEN;
				LoanCalc.monthtxt = monthtxtEN;
				LoanCalc.yeartxt = yeartxtEN;
				LoanCalc.firstrepaymenttxt = firstrepaymenttxtEN;
				LoanCalc.basiccoverfeetxt = basiccoverfeetxtEN;
				LoanCalc.extendedcoverfeetxt = extendedcoverfeetxtEN;
				LoanCalc.noinsurancetxt = noinsurancetxtEN;
				LoanCalc.paymenttxt = paymenttxtEN;
				LoanCalc.principaltxt = principaltxtEN;
				LoanCalc.interesttxt = interesttxtEN;
				LoanCalc.balancetxt = balancetxtEN;
				LoanCalc.amortsheduletxt = amortsheduletxtEN;
				LoanCalc.totalcosttxt = totalcosttxtEN;
			}
			
			if(ErrorHandler.languagecode == 'fi'){
				LoanCalc.yearstxt = yearstxtFI;
				LoanCalc.monthlypaymenttxt = monthlypaymenttxtFI;
				LoanCalc.monthlyrepaymenttxt = monthlyrepaymenttxtFI;
				LoanCalc.totalfirstpaymenttxt = totalfirstpaymenttxtFI;
				LoanCalc.periodabove30yearstxt = periodabove30yearstxtFI;
				LoanCalc.yearsandtxt = yearsandtxtFI;
				LoanCalc.monthstxt = monthstxtFI;
				LoanCalc.monthtxt = monthtxtFI;
				LoanCalc.yeartxt = yeartxtFI;
				LoanCalc.firstrepaymenttxt = firstrepaymenttxtFI;
				LoanCalc.basiccoverfeetxt = basiccoverfeetxtFI;
				LoanCalc.extendedcoverfeetxt = extendedcoverfeetxtFI;
				LoanCalc.noinsurancetxt = noinsurancetxtFI;
				LoanCalc.paymenttxt = paymenttxtFI;
				LoanCalc.principaltxt = principaltxtFI;
				LoanCalc.interesttxt = interesttxtFI;
				LoanCalc.balancetxt = balancetxtFI;
				LoanCalc.amortsheduletxt = amortsheduletxtFI;
				LoanCalc.totalcosttxt = totalcosttxtFI;
			}
			
			if(ErrorHandler.languagecode == 'sv'){
				LoanCalc.yearstxt = yearstxtSE;
				LoanCalc.monthlypaymenttxt = monthlypaymenttxtSE;
				LoanCalc.monthlyrepaymenttxt = monthlyrepaymenttxtSE;
				LoanCalc.totalfirstpaymenttxt = totalfirstpaymenttxtSE;
				LoanCalc.periodabove30yearstxt = periodabove30yearstxtSE;
				LoanCalc.yearsandtxt = yearsandtxtSE;
				LoanCalc.monthstxt = monthstxtSE;
				LoanCalc.monthtxt = monthtxtSE;
				LoanCalc.yeartxt = yeartxtSE;
				LoanCalc.firstrepaymenttxt = firstrepaymenttxtSE;
				LoanCalc.basiccoverfeetxt = basiccoverfeetxtSE;
				LoanCalc.extendedcoverfeetxt = extendedcoverfeetxtSE;
				LoanCalc.noinsurancetxt = noinsurancetxtSE;
				LoanCalc.paymenttxt = paymenttxtSE;
				LoanCalc.principaltxt = principaltxtSE;
				LoanCalc.interesttxt = interesttxtSE;
				LoanCalc.balancetxt = balancetxtSE;
				LoanCalc.amortsheduletxt = amortsheduletxtSE;
				LoanCalc.totalcosttxt = totalcosttxtSE;
			}
			
			
			//self._autohideresults();
			
			var insurancedisclaimersection2 = document.getElementById('loaninsurancedisclaimer2');
			insurancedisclaimersection2.style.display = 'none';
			document.getElementById('insuranceends').style.display = 'none';
						
						// Error reset
						//self._errorreset('loanamount')
						//self._errorreset('repaymentrate')
//						self._errorreset('loaninsurancecoverselect')
//						self._errorreset('loaninsuranceinsureddetailsonegender')
//						self._errorreset('loaninsuranceinsureddetailsdatebirth')
//						self._errorreset('loaninsuranceinsureddetailstwogender')
//						self._errorreset('loaninsuranceinsureddetailstwodatebirth')
						
						//document.getElementById('paymenterrormessage').innerHTML = ''
//						document.getElementById('paymenterror').style.display = 'none'
//						document.getElementById('genderoneerrormessage').innerHTML = ''
//						document.getElementById('genderoneerror').style.display = 'none'
//						document.getElementById('gendertwoerrormessage').innerHTML = ''
//						document.getElementById('gendertwoerror').style.display = 'none'
//						document.getElementById('loanamounterrormessage').innerHTML = ''
//						document.getElementById('loanamounterror').style.display = 'none'
			
			
			var calculationchoice;
			var calculationchoiceloanperiod = document.getElementById('calculationchoiceloanperiod').checked;
			if (calculationchoiceloanperiod){
				calculationchoice = document.getElementById('calculationchoiceloanperiod').value;
			}
			var calculationchoicerepaymentrate = document.getElementById('calculationchoicerepaymentrate').checked;
			if (calculationchoicerepaymentrate){
				calculationchoice = document.getElementById('calculationchoicerepaymentrate').value;
			}
			var calculationchoiceloanamount = document.getElementById('calculationchoiceloanamount').checked;
			if (calculationchoiceloanamount){
				calculationchoice = document.getElementById('calculationchoiceloanamount').value;
			}



			var loaninsurancecheck = document.getElementById('loaninsurancecheck').checked;
			var loanamount = document.getElementById('loanamount').value;
			if(calculationchoice =='2' || calculationchoice =='1'){
				if(!self._characterCheck(loanamount,"n")){
					LoanCalc.showErrorInline('N10','loanamount');
					
					//document.getElementById('loanamounterrormessage').innerHTML = ErrorHandler.getErrormessage("N10")
//					document.getElementById('loanamounterror').style.display = ''
					return;
				}
				if(parseInt(loanamount) < 200){
					var Values = {minimum:'200'};
					LoanCalc.showErrorInline('N14','loanamount',Values);
					
					return;
				}				
			}
			
			var repaymentrate = document.getElementById('repaymentrate').value;
			if(calculationchoice =='3' || calculationchoice =='1'){
				if(!self._characterCheck(repaymentrate,"n")){
					LoanCalc.showErrorInline('N10','repaymentrate');
					//document.getElementById('paymenterrormessage').innerHTML = ErrorHandler.getErrormessage("N10")
//					document.getElementById('paymenterror').style.display = ''
					return;
				}
				if(parseInt(repaymentrate) < 10){
					var Values = {minimum:'10'};
					LoanCalc.showErrorInline('N14','repaymentrate',Values);
					//document.getElementById('paymenterrormessage').innerHTML = ErrorHandler.getErrormessage("N14")
//					document.getElementById('paymenterror').style.display = ''
					return;
				}
				
			}
			repaymentrate = parseInt(repaymentrate);
			
			
			var loanperiod = DBcore.selectedValueOf(document.getElementById('loanperiod'));
			var rateselect = DBcore.selectedValueOf(document.getElementById('rateselect'));
			rateselect = self._parse2decimaler(rateselect, true);
			var altrate = self._parse2decimaler("2,0", true);
			var rateselect2 = rateselect + altrate;

			
			
			var repaymenttypeselectserial = document.getElementById('repaymenttypeselectserial').checked;
			
			var loaninsuranceselected = document.getElementById('loaninsurancecheck').checked;
			
			var loaninsurancetypeextendedcoverselect = false; //document.getElementById('loaninsurancetypeextendedcoverselect').checked;
			

			var loaninsurancetypeinsuredtwoselect = document.getElementById('loaninsurancetypeinsuredtwoselect').checked;

			var loaninsurancecoverselect = document.getElementById('loaninsurancecoverselect').value;
			
			if(loaninsuranceselected && loaninsurancecoverselect == "Select"){
				LoanCalc.showErrorInline('N16','loaninsurancecoverselect');
				//CalculatorToolbox.errorId='N16';
//				ErrorHandler.setErrorMark("loaninsurancecoverselect");
//				ErrorHandler.showErrorInline('N16','loaninsurancecoverselect');
//				ErrorHandler.selectInputContent("loaninsurancecoverselect")
				return;
			}
			
			var loaninsuranceinsureddetailsonegender = DBcore.selectedValueOf(document.getElementById('loaninsuranceinsureddetailsonegender'));
			/*var loaninsuranceinsureddetailsonegendermale = document.getElementById('loaninsuranceinsureddetailsonegendermale').checked
			if (loaninsuranceinsureddetailsonegendermale){
				loaninsuranceinsureddetailsonegender = document.getElementById('loaninsuranceinsureddetailsonegendermale').value
			}
			var loaninsuranceinsureddetailsonegenderfemale = document.getElementById('loaninsuranceinsureddetailsonegenderfemale').checked
			if (loaninsuranceinsureddetailsonegenderfemale){
				loaninsuranceinsureddetailsonegender = document.getElementById('loaninsuranceinsureddetailsonegenderfemale').value
			}*/
			
			if(loaninsuranceselected && loaninsuranceinsureddetailsonegender == 'Select'){
				LoanCalc.showErrorInline('N17','loaninsuranceinsureddetailsonegender');
				//document.getElementById('genderoneerrormessage').innerHTML = ErrorHandler.getErrormessage("N17")
//				document.getElementById('genderoneerror').style.display = ''
				return;
				//CalculatorToolbox.errorId='N17';
//				ErrorHandler.setErrorMark("loaninsuranceinsureddetailsonegendermale");
//				ErrorHandler.showErrorInline('N17','loaninsuranceinsureddetailsonegendermale');
//				ErrorHandler.selectInputContent("loaninsuranceinsureddetailsonegendermale")
//				return	
			}

			var loaninsuranceinsureddetailsdatebirth = document.getElementById('loaninsuranceinsureddetailsdatebirth').value;
			var loaninsuranceinsureddetailsage = DateToolbox.getAgeInYears(loaninsuranceinsureddetailsdatebirth);
			
			
			var loaninsuranceinsureddetailstwogender = DBcore.selectedValueOf(document.getElementById('loaninsuranceinsureddetailstwogender'));
			//var loaninsuranceinsureddetailstwogendermale = document.getElementById('loaninsuranceinsureddetailstwogendermale').checked
//			if (loaninsuranceinsureddetailstwogendermale){
//				loaninsuranceinsureddetailstwogender = document.getElementById('loaninsuranceinsureddetailstwogendermale').value
//			}
//			var loaninsuranceinsureddetailstwogenderfemale = document.getElementById('loaninsuranceinsureddetailstwogenderfemale').checked
//			if (loaninsuranceinsureddetailstwogenderfemale){
//				loaninsuranceinsureddetailstwogender = document.getElementById('loaninsuranceinsureddetailstwogenderfemale').value
//			}
			
			if(loaninsuranceselected && loaninsurancetypeinsuredtwoselect && loaninsuranceinsureddetailstwogender == 'Select'){
				LoanCalc.showErrorInline('N17','loaninsuranceinsureddetailstwogender');
				//document.getElementById('gendertwoerrormessage').innerHTML = ErrorHandler.getErrormessage("N17")
//				document.getElementById('gendertwoerror').style.display = ''
				return;
				
				//CalculatorToolbox.errorId='N17';
//				ErrorHandler.setErrorMark("loaninsuranceinsureddetailstwogendermale");
//				ErrorHandler.showErrorInline('N17','loaninsuranceinsureddetailstwogendermale');
//				ErrorHandler.selectInputContent("loaninsuranceinsureddetailstwogendermale")
//				return	
			}

			var loaninsuranceinsureddetailstwodatebirth = document.getElementById('loaninsuranceinsureddetailstwodatebirth').value;
			var loaninsuranceinsureddetailstwoage = DateToolbox.getAgeInYears(loaninsuranceinsureddetailstwodatebirth);
			
		
			document.getElementById('resultinterest').innerHTML = rateselect + "%";
			document.getElementById('resultinterest2').innerHTML = rateselect2 + "%";





			// Serial loan calculations
			if(repaymenttypeselectserial){
				document.getElementById('resultmonthlyrepaymenttext').innerHTML = LoanCalc.monthlyrepaymenttxt;
				document.getElementById('resultprincipalpaymenttext').innerHTML = LoanCalc.totalfirstpaymenttxt;
			
				// Calculate loan period
				if(calculationchoice =='1'){
					resultLoanPeriod = loanamount/repaymentrate;
					resultLoanPeriod = Math.round(resultLoanPeriod);
					resultLoanPeriodYears = parseInt(resultLoanPeriod/12);
					resultLoanPeriodMonths = parseInt(resultLoanPeriod - (resultLoanPeriodYears*12));
					resultLoanPeriod2 = loanamount/repaymentrate;
					resultLoanPeriod2 = Math.round(resultLoanPeriod2);
					resultLoanPeriodYears2 = parseInt(resultLoanPeriod2/12);
					resultLoanPeriodMonths2 = parseInt(resultLoanPeriod2 - (resultLoanPeriodYears2*12));
					
					loanperiodtest = resultLoanPeriod;
					
					loanamount2 = loanamount;
					repaymentrate2 = repaymentrate;

					//Paymenvalidation
					if(parseInt(resultLoanPeriod) > 360){
					
					var minPaymentValue = parseInt(loanamount/360);
					var minPaymentValue = parseInt(minPaymentValue+1);
					var Values = {minimum:minPaymentValue};
					LoanCalc.showErrorInline('N14','repaymentrate',Values);
					//document.getElementById('paymenterrormessage').innerHTML = ErrorHandler.getErrormessage("N14")
//					document.getElementById('paymenterror').style.display = ''
					return;
					//CalculatorToolbox.errorId='N14';
//					ErrorHandler.setErrorMark("repaymentrate");
//					var minPaymentValue = parseInt(minPaymentValue+1)
//					var Values = {minimum:minPaymentValue};
//					ErrorHandler.showErrorInline('N14','repaymentrate',Values);
//					//ErrorHandler.showErrorInline('N14',"repaymentrate")
//					ErrorHandler.selectInputContent("repaymentrate")
//					return
					}
					if(resultLoanPeriod2 > 360){
						
						loanperiod2 = LoanCalc.periodabove30yearstxt;
					}
					
					
					resultAPR = self._AOP((rateselect/100),(parseInt(resultLoanPeriod/12)),(parseInt(loanamount)),repaymentrate,0,true,true);
					if(resultLoanPeriod2 < 361){
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(resultLoanPeriod2/12)),(parseInt(loanamount)),repaymentrate,0,false,true);
					}
		

					loanperiod = resultLoanPeriodYears + " " + LoanCalc.yearsandtxt + " " + resultLoanPeriodMonths + " " + LoanCalc.monthstxt;
					loanperiod2 = resultLoanPeriodYears2 + " " + LoanCalc.yearsandtxt + " " + resultLoanPeriodMonths2 + " " + LoanCalc.monthstxt;
				}

				//Calculate monthly payment
				if(calculationchoice =='2'){
					resultMonthlyRepayment = loanamount/(loanperiod*12);
					resultMonthlyRepayment2 = loanamount/(loanperiod*12);
		
					resultAPR = self._AOP((rateselect/100),(parseInt(loanperiod)),(parseInt(loanamount)),resultMonthlyRepayment,0,true,true);
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(loanperiod)),(parseInt(loanamount)),resultMonthlyRepayment2,0,false,true);
		
					loanamount2 = loanamount;
					repaymentrate = resultMonthlyRepayment;
					repaymentrate2 = resultMonthlyRepayment2;
					loanperiodtest = loanperiod*12;
					loanperiod2 = loanperiod + " " + LoanCalc.yearstxt;
					loanperiod = loanperiod + " " + LoanCalc.yearstxt;
				}
	
				//Calculate loan amount
				if(calculationchoice =='3'){
					loanamount = repaymentrate*(loanperiod*12);
					loanamount2 = repaymentrate*(loanperiod*12);
		
					resultAPR = self._AOP((rateselect/100),(parseInt(loanperiod)),(parseInt(loanamount)),(parseInt(repaymentrate)),0,true,true);
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(loanperiod)),(parseInt(loanamount2)),(parseInt(repaymentrate)),0,false,true);
					
					repaymentrate2 = repaymentrate;
					loanperiodtest = loanperiod*12;
					loanperiod2 = loanperiod + " " + LoanCalc.yearstxt;
					loanperiod = loanperiod + " " + LoanCalc.yearstxt;
				}
			}
			
			
			// Annual loan calculations
			if(!repaymenttypeselectserial){
				document.getElementById('resultmonthlyrepaymenttext').innerHTML = LoanCalc.monthlypaymenttxt;
				document.getElementById('resultprincipalpaymenttext').innerHTML = LoanCalc.firstrepaymenttxt;
			
				// Calculate loan period
				if(calculationchoice =='1'){

					loanamount2 = loanamount;
					repaymentrate2 = repaymentrate;


					//Paymenvalidation
					var minPaymentByMonths = self._calcpayment(loanamount, (parseInt(30)), (rateselect/100));
					var minPaymentByMonths2 = self._calcpayment(loanamount, (parseInt(30)), (rateselect2/100));
					if(parseFloat(minPaymentByMonths) > repaymentrate){
						var minPaymentValue = parseInt(minPaymentByMonths+1);
						var Values = {minimum:minPaymentValue};
					LoanCalc.showErrorInline('N14','repaymentrate',Values);
					
					//CalculatorToolbox.errorId='N14';
//					ErrorHandler.setErrorMark("repaymentrate");
//					var minPaymentValue = parseInt(minPaymentByMonths+1)
//					var Values = {minimum:minPaymentValue};
//					ErrorHandler.showErrorInline('N14','repaymentrate',Values);
//					//ErrorHandler.showErrorInline('N14',"repaymentrate")
//					ErrorHandler.selectInputContent("repaymentrate")
					return;
					}


					resultLoanPeriod = self._calcloanperiod((parseInt(repaymentrate)), (parseInt(loanamount)), (rateselect/100), true);
					resultLoanPeriodYears = parseInt(resultLoanPeriod/12);
					resultLoanPeriodMonths = parseInt(resultLoanPeriod - (resultLoanPeriodYears*12));
					if(parseInt(minPaymentByMonths2) < repaymentrate2){
					resultLoanPeriod2 = self._calcloanperiod((parseInt(repaymentrate)), (parseInt(loanamount)), (rateselect2/100), false);
					resultLoanPeriodYears2 = parseInt(resultLoanPeriod2/12);
					resultLoanPeriodMonths2 = parseInt(resultLoanPeriod2 - (resultLoanPeriodYears2*12));
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(resultLoanPeriod2/12)),(parseInt(loanamount)),repaymentrate,0,false,false);
					}
					loanperiodtest = resultLoanPeriod;




					resultAPR = self._AOP((rateselect/100),(parseInt(resultLoanPeriod/12)),(parseInt(loanamount)),repaymentrate,0,true,false);
		
					loanperiod = resultLoanPeriodYears + " " + LoanCalc.yearsandtxt + " " + resultLoanPeriodMonths + " " + LoanCalc.monthstxt;	
					if(parseInt(minPaymentByMonths2) < repaymentrate2){loanperiod2 = resultLoanPeriodYears2 + " " + LoanCalc.yearsandtxt + " " + resultLoanPeriodMonths2 + " " + LoanCalc.monthstxt;}
					if(parseInt(minPaymentByMonths2) >= repaymentrate2){
						loanperiod2 = LoanCalc.periodabove30yearstxt;
						
					}
				}
				
				//Calculate monthly payment
				if(calculationchoice =='2'){
					resultMonthlyRepayment = self._calcpayment(loanamount, (parseInt(loanperiod)), (rateselect/100));
					resultMonthlyRepayment2 = self._calcpayment(loanamount, (parseInt(loanperiod)), (rateselect2/100));
		
					resultAPR = self._AOP((rateselect/100),(parseInt(loanperiod)),(parseInt(loanamount)),resultMonthlyRepayment,0,true,false);
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(loanperiod)),(parseInt(loanamount)),resultMonthlyRepayment2,0,false,false);
		
					loanamount2 = loanamount;
					repaymentrate = resultMonthlyRepayment;
					repaymentrate2 = resultMonthlyRepayment2;
					loanperiodtest = loanperiod*12;
					loanperiod2 = loanperiod + " " + LoanCalc.yearstxt;
					loanperiod = loanperiod + " " + LoanCalc.yearstxt;
				}
				
				//Calculate loan amount
				if(calculationchoice =='3'){
					loanamount = self._calcloanamount((parseInt(repaymentrate)),(parseInt(loanperiod)),(rateselect/100));
					loanamount2 = self._calcloanamount((parseInt(repaymentrate)),(parseInt(loanperiod)),(rateselect2/100));
		
					resultAPR = self._AOP((rateselect/100),(parseInt(loanperiod)),(parseInt(loanamount)),(parseInt(repaymentrate)),0,true,false);
					resultAPR2 = self._AOP((rateselect2/100),(parseInt(loanperiod)),(parseInt(loanamount2)),(parseInt(repaymentrate)),0,false,false);
					
					repaymentrate2 = repaymentrate;
					loanperiodtest = loanperiod*12;
					loanperiod2 = loanperiod + " " + LoanCalc.yearstxt;
					loanperiod = loanperiod + " " + LoanCalc.yearstxt;
				}			
			}
			
			
			//Calculate loaninsurance - The IPRS for the insurance calculation formula is owned by Sampo Life! 
			if(loaninsurancecheck){
				document.getElementById('loaninsurancedisclaimer2').style.display = '';   
						
				var maleArray = new Array(0.003114, 0.003205, 0.003376, 0.003697, 0.004303, 0.005445, 0.007596, 0.011647, 0.019277, 0.033650);
				var femaleArray = new Array(0.003054, 0.003091, 0.003161, 0.003294, 0.003544, 0.004014, 0.004901, 0.006570, 0.009714, 0.015638);
				var coupleArray = new Array(0.004645, 0.004774, 0.004997, 0.005436, 0.006206, 0.007713, 0.010551, 0.015569, 0.025350, 0.042747);

				if(loaninsurancetypeinsuredtwoselect){
					if(loaninsuranceinsureddetailsonegender == "Male" && loaninsuranceinsureddetailstwogender == "Female"){
						if(loaninsuranceinsureddetailsage < 18 || loaninsuranceinsureddetailsage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailsdatebirth');
												
							return;
						}
						if(loaninsuranceinsureddetailstwoage < 18 || loaninsuranceinsureddetailstwoage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailstwodatebirth');

							return;
						}
						
						
						agegroup = self._calcagegroup(loaninsuranceinsureddetailsage,loanperiodtest);
						//agegroup2 = self._calcagegroup(loaninsuranceinsureddetailstwoage,loanperiodtest);
						field = "loaninsuranceinsureddetailsdatebirth";
						field2 = "loaninsuranceinsureddetailstwodatebirth";
						if(agegroup == 11){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailsdatebirth');
							//CalculatorToolbox.errorId='N15';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N15',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						
						if(loaninsurancetypeextendedcoverselect && agegroup == 9){
							LoanCalc.showErrorInline('N18','loaninsuranceinsureddetailsdatebirth');
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						if(loaninsurancetypeextendedcoverselect){
							if(loaninsuranceinsureddetailstwoage > 59){
							
							LoanCalc.showErrorInline('N18','loaninsuranceinsureddetailstwodatebirth');
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
							}
						}
						
					}
			
					if(loaninsuranceinsureddetailsonegender == "Female" && loaninsuranceinsureddetailstwogender == "Male"){
						agegroup = self._calcagegroup(loaninsuranceinsureddetailstwoage,loanperiodtest);
						//agegroup2 = self._calcagegroup(loaninsuranceinsureddetailsage,loanperiodtest);
						field = "loaninsuranceinsureddetailstwodatebirth";
						if(loaninsuranceinsureddetailsage < 18 || loaninsuranceinsureddetailsage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailsdatebirth');
												
							return;
						}
						if(loaninsuranceinsureddetailstwoage < 18 || loaninsuranceinsureddetailstwoage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailstwodatebirth');

							return;
						}

						if(loaninsurancetypeextendedcoverselect && agegroup == 9){
							LoanCalc.showErrorInline('N18','loaninsuranceinsureddetailstwodatebirth');
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						if(loaninsurancetypeextendedcoverselect){
							if(loaninsuranceinsureddetailsage > 59){
							
							LoanCalc.showErrorInline('N18','loaninsuranceinsureddetailsdatebirth');
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
							}
						}
					}

					if(loaninsuranceinsureddetailsonegender == "Male" && loaninsuranceinsureddetailstwogender == "Male"){
						
						if(loaninsuranceinsureddetailsage < 18 || loaninsuranceinsureddetailsage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailsdatebirth');
												
							return;
						}
						if(loaninsuranceinsureddetailstwoage < 18 || loaninsuranceinsureddetailstwoage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailstwodatebirth');

							return;
						}
						
						agegroup = self._calcagegroup(Math.max(loaninsuranceinsureddetailsage,loaninsuranceinsureddetailstwoage),loanperiodtest);
						//agegroup2 = self._calcagegroup(Math.min(loaninsuranceinsureddetailsage,loaninsuranceinsureddetailstwoage),loanperiodtest);
						if(loaninsuranceinsureddetailsage > loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailsdatebirth";}
						if(loaninsuranceinsureddetailsage < loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailstwodatebirth";}
						if(loaninsuranceinsureddetailsage == loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailsdatebirth";}
						
						if(agegroup == 11){
							LoanCalc.showErrorInline('N15',field);
							
							//CalculatorToolbox.errorId='N15';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N15',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						
						if(loaninsurancetypeextendedcoverselect && agegroup == 9){
							LoanCalc.showErrorInline('N18',field);
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						if(loaninsurancetypeextendedcoverselect){
							if(loaninsuranceinsureddetailsage > loaninsuranceinsureddetailstwoage){field2 = "loaninsuranceinsureddetailstwodatebirth";age2 = loaninsuranceinsureddetailstwoage}
							if(loaninsuranceinsureddetailsage < loaninsuranceinsureddetailstwoage){field2 = "loaninsuranceinsureddetailsdatebirth";age2 = loaninsuranceinsureddetailsage}
							
							if(age2 > 59){
							LoanCalc.showErrorInline('N18',field2);
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
							}
						}
						
						//if(loaninsurancetypeextendedcoverselect){
							//if(loaninsuranceinsureddetailstwoage > 59){
							
							//LoanCalc.showErrorInline('N18','loaninsuranceinsureddetailstwodatebirth');
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							//return;
							//}
						//}

					}

					if(loaninsuranceinsureddetailsonegender == "Female" && loaninsuranceinsureddetailstwogender == "Female"){
						
						if(loaninsuranceinsureddetailsage < 18 || loaninsuranceinsureddetailsage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailsdatebirth');
												
							return;
						}
						if(loaninsuranceinsureddetailstwoage < 18 || loaninsuranceinsureddetailstwoage > 64){
							LoanCalc.showErrorInline('N15','loaninsuranceinsureddetailstwodatebirth');

							return;
						}
						
						agegroup = self._calcagegroup(Math.max(loaninsuranceinsureddetailsage,loaninsuranceinsureddetailstwoage),loanperiodtest);
						//agegroup2 = self._calcagegroup(Math.min(loaninsuranceinsureddetailsage,loaninsuranceinsureddetailstwoage),loanperiodtest);
						
						if(loaninsuranceinsureddetailsage > loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailsdatebirth";}
						if(loaninsuranceinsureddetailsage < loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailstwodatebirth";}
						if(loaninsuranceinsureddetailsage == loaninsuranceinsureddetailstwoage){field = "loaninsuranceinsureddetailsdatebirth";}
						
						
						if(agegroup == 11){
							LoanCalc.showErrorInline('N15',field);
							//CalculatorToolbox.errorId='N15';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N15',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						
						if(loaninsurancetypeextendedcoverselect && agegroup == 9){
							LoanCalc.showErrorInline('N18',field);
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
						}
						if(loaninsurancetypeextendedcoverselect){
							if(loaninsuranceinsureddetailsage > loaninsuranceinsureddetailstwoage){field2 = "loaninsuranceinsureddetailstwodatebirth";age2 = loaninsuranceinsureddetailstwoage}
							if(loaninsuranceinsureddetailsage < loaninsuranceinsureddetailstwoage){field2 = "loaninsuranceinsureddetailsdatebirth";age2 = loaninsuranceinsureddetailsage}
							
							if(age2 > 59){
							LoanCalc.showErrorInline('N18',field2);
							//CalculatorToolbox.errorId='N18';
//							ErrorHandler.setErrorMark(field);
//							ErrorHandler.showErrorInline('N18',field);
//							ErrorHandler.selectInputContent(field)
							return;
							}
						}				
					}
					
					
						
					factor = coupleArray[agegroup];
				}
			
				if(!loaninsurancetypeinsuredtwoselect){
					agegroup = self._calcagegroup(loaninsuranceinsureddetailsage,loanperiodtest);
					field = "loaninsuranceinsureddetailsdatebirth";
					if(agegroup == 11){
						LoanCalc.showErrorInline('N15',field);
						//CalculatorToolbox.errorId='N15';
//						ErrorHandler.setErrorMark(field);
//						ErrorHandler.showErrorInline('N15',field);
//						ErrorHandler.selectInputContent(field)
						return;
					
					}
					if(loaninsurancetypeextendedcoverselect && agegroup == 9){
						LoanCalc.showErrorInline('N18',field);
						//CalculatorToolbox.errorId='N18';
//						ErrorHandler.setErrorMark(field);
//						ErrorHandler.showErrorInline('N18',field);
//						ErrorHandler.selectInputContent(field)
						return;
					}
				
					
					if(loaninsuranceinsureddetailsonegender == "Male"){factor = maleArray[agegroup];}			
					if(loaninsuranceinsureddetailsonegender == "Female"){factor = femaleArray[agegroup];}			
				}
			
				
				var resultinsurancefee = self._calcloaninsurance(loanamount, (loaninsurancecoverselect/100), factor);
				var resultinsurancefee2 = self._calcloaninsurance(loanamount2, (loaninsurancecoverselect/100), factor);
			
				//Calculate extended cover
				if(loaninsurancetypeextendedcoverselect){
					var insamount = 0;
					var insamount2 = 0;
					if(repaymenttypeselectserial){
						
					var paymentplusrate = document.getElementById('resultprincipalpayment').innerHTML;
					var paymentplusrate2 = document.getElementById('resultprincipalpayment2').innerHTML;
					paymentplusrate = parseInt(paymentplusrate);
					paymentplusrate2 = parseInt(paymentplusrate2);
					if((resultinsurancefee+paymentplusrate) > 1350){
						insamount = 1350;
						document.getElementById('loaninsurancedisclaimer').style.display = '';											
						}
					if((resultinsurancefee+paymentplusrate) <= 1350){
					insamount = (resultinsurancefee+paymentplusrate);
					document.getElementById('loaninsurancedisclaimer').style.display = 'none';
					
					}
					extendedfee = 0.056*insamount
					if((resultinsurancefee2+paymentplusrate2) > 1350){insamount2 = 1350;}
					if((resultinsurancefee2+paymentplusrate2) <= 1350){insamount2 = (resultinsurancefee2+paymentplusrate2);}
					extendedfee2 = 0.056*insamount2;
					
					if(loaninsurancetypeinsuredtwoselect){
						extendedfee = extendedfee*2;
						extendedfee2 = extendedfee2*2;
					}
			
					}
					if(!repaymenttypeselectserial){
						repaymentrate = parseFloat(repaymentrate);
						repaymentrate2 = parseFloat(repaymentrate2);
						if((resultinsurancefee+repaymentrate) > 1350){
						insamount = 1350;
						document.getElementById('loaninsurancedisclaimer').style.display = '';						
						}
					if((resultinsurancefee+repaymentrate) <= 1350){
						insamount = (resultinsurancefee+repaymentrate);
						document.getElementById('loaninsurancedisclaimer').style.display = 'none';
						
						}
					extendedfee = 0.056*insamount
					if((resultinsurancefee2+repaymentrate2) > 1350){insamount2 = 1350;}
					if((resultinsurancefee2+repaymentrate2) <= 1350){insamount2 = (resultinsurancefee2+repaymentrate2);}
					extendedfee2 = 0.056*insamount2;
					
					if(loaninsurancetypeinsuredtwoselect){
						extendedfee = extendedfee*2;
						extendedfee2 = extendedfee2*2;
					}
					
					}
					resultinsurancefee = self._formatter(resultinsurancefee,0)+ " &#128; " + LoanCalc.basiccoverfeetxt + "+<br>" + self._formatter(extendedfee,0) + " &#128; " + LoanCalc.extendedcoverfeetxt;
					resultinsurancefee2 = self._formatter(resultinsurancefee2,0) + " &#128; " + LoanCalc.basiccoverfeetxt + "+<br>" + self._formatter(extendedfee2,0) + " &#128; " + LoanCalc.extendedcoverfeetxt;
				}
			
				if(!loaninsurancetypeextendedcoverselect){
					resultinsurancefee = self._formatter(resultinsurancefee,0) + " &#128;";
					resultinsurancefee2 = self._formatter(resultinsurancefee2,0) + " &#128;";
				}
			}

			if(!loaninsurancecheck){
				resultinsurancefee = LoanCalc.noinsurancetxt;
				resultinsurancefee2 = LoanCalc.noinsurancetxt;
			}
	
	
			//Fill in results in table
			document.getElementById('resultloanamount').innerHTML = self._formatter(loanamount,0) + " &#128;";
			document.getElementById('resultloanamount2').innerHTML = self._formatter(loanamount2,0) + " &#128;";
			document.getElementById('resultmonthlyrepayment').innerHTML = self._formatter(repaymentrate,0) + " &#128;";
			document.getElementById('resultmonthlyrepayment2').innerHTML = self._formatter(repaymentrate2,0) + " &#128;";
			document.getElementById('resultloanperiod').innerHTML = loanperiod;
			document.getElementById('resultloanperiod2').innerHTML = loanperiod2;
			document.getElementById('resultapr').innerHTML = self._formatter(resultAPR,1) + "%";
			if(loanperiod2 != LoanCalc.periodabove30yearstxt){
			document.getElementById('resultapr2').innerHTML = self._formatter(resultAPR2,1) + "%";
			}
			if(loanperiod2 == LoanCalc.periodabove30yearstxt){
			document.getElementById('resultapr2').innerHTML = LoanCalc.periodabove30yearstxt;
			}
			document.getElementById('resultloaninsurancefee').innerHTML = resultinsurancefee;
			document.getElementById('resultloaninsurancefee2').innerHTML = resultinsurancefee2;
			
			var valuetemp = document.getElementById('resultprincipalpayment').innerHTML;
			document.getElementById('resultprincipalpayment').innerHTML = self._formatter(valuetemp,0) + " &#128;";
			valuetemp = document.getElementById('resultprincipalpayment2').innerHTML;
			document.getElementById('resultprincipalpayment2').innerHTML = self._formatter(valuetemp,0) + " &#128;";
			
			var resultsection = document.getElementById('resultsection');
			DisplayToolbox.showElement(resultsection);
			DBcore.removeClass(resultsection,'jshide');
			window.setTimeout(function() {document.getElementById('resultsection').style.display="block";},100);
		}
	},
	

// Calculation functions

	_ydelsesforloeb: function(rente,loebetid,beloeb,ydelse,realrate,serial) { 
	//årlig rente decimaltal, løbetid i år, samlet lånebeløb
	var self=LoanCalc;
	
	var amort='';
  		//var n = loebetid*12; //månedlige afdrag
  		

		//ComInt = (Math.pow((1+rente/4 ),(1/3))) - 1
  		//ComInt = rente/12
		//ydelse = (beloeb*ComInt*(Math.pow((1+ComInt),(loebetid*12))))/((Math.pow((1+ComInt),(loebetid*12)))- 1)
		
		var ydelser = new Array();
  		m_rente = rente/12; //månedlig rente til tilskrivning af rente
  		var a_rente=0;  		//akkumuleret rente
  		var pris = 0;
  		var rest = beloeb+150+1.5;
  		var termin = 0;
		var realydelse = 0;
		var ydelse = parseFloat(ydelse);

if(realrate){
amort='<table class=ms-rteTable-1 style="WIDTH: 100%"><TBODY><tr class=ms-rteTableHeaderRow-1><td class=ms-rteTableHeaderFirstCol-1>' + LoanCalc.monthtxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.paymenttxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.principaltxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.interesttxt + '</td><td class=ms-rteTableHeaderLastCol-1>' + LoanCalc.balancetxt + '</td></tr>';
}

  		while(rest > realydelse) {
    		//a_rente = a_rente + rest*(m_rente);
    		//if( (termin + 1) % 3 == 0) {
      			//tilskriv rente
				a_rente = rest*(m_rente);
      			if(serial){realydelse = ydelse+a_rente;}
				if(!serial){realydelse = ydelse;}
				rest = rest - realydelse + a_rente;
				ydelser[termin] = realydelse;
				
				
			

if(realrate){
	nettoydelse = parseFloat(realydelse-a_rente);
	
	amort+='<tr class=ms-rteTableOddRow-1><td class=ms-rteTableFirstCol-1>' + (termin+1) + '</td><td class=ms-rteTableOddCol-1>' + LoanCalc._formatter(realydelse,0) + ' &#128;</td><td class=ms-rteTableOddCol-1>' + LoanCalc._formatter(nettoydelse,0) + ' &#128;</td><td class=ms-rteTableOddCol-1>' + LoanCalc._formatter(a_rente,0) + ' &#128;</td><td class=ms-rteTableLastCol-1>' + LoanCalc._formatter(rest,0) + ' &#128;</td></tr>';

}

	if(termin == 0 && realrate){
		
		resultFirstPayment = parseFloat(realydelse);
		
		resultFirstInterest = LoanCalc._formatter(a_rente,0);
		
			
		document.getElementById('resultprincipalpayment').innerHTML = resultFirstPayment;
		document.getElementById('resultfirstinterest').innerHTML = resultFirstInterest + " &#128;";
	}
	if(termin == 0 && !realrate){
		resultFirstPayment = parseFloat(realydelse);
		resultFirstInterest = LoanCalc._formatter(a_rente,0);
		document.getElementById('resultprincipalpayment2').innerHTML = resultFirstPayment;
		document.getElementById('resultfirstinterest2').innerHTML = resultFirstInterest + " &#128;";
	}	



				a_rente = 0;


    		//}
			
    		//else {
      			//ydelser[termin] = ydelse;
      			//rest = rest - ydelse;
    		//}
    		termin = termin + 1;
  		}
		if(rest > 0){
  		a_rente = a_rente + rest*(m_rente);
  		rest = rest + a_rente + 1.5;
  		ydelser[termin] = rest;
		}
if(realrate && rest > 0){
	endrestnorate = rest-a_rente;
	endrestnorate = LoanCalc._formatter(endrestnorate,0);
	endrest = LoanCalc._formatter((rest-rest),0);
	restvar = LoanCalc._formatter(rest,0);
	arentevar = LoanCalc._formatter(a_rente,0);
	amort+='<tr class=ms-rteTableOddRow-1><td class=ms-rteTableFirstCol-1>' + (termin+1) + '</td><td class=ms-rteTableOddCol-1>' + restvar + ' &#128;</td><td class=ms-rteTableOddCol-1>' + endrestnorate + ' &#128;</td><td class=ms-rteTableOddCol-1>' + arentevar + ' &#128;</td><td class=ms-rteTableLastCol-1>' + endrest + ' &#128;</td></tr>';
}


if(realrate){
document.getElementById('resultlastinterest').innerHTML = Number(a_rente).toFixed(0) + " &#128;";
if(!serial){
	var ydelsejoin = LoanCalc._formatter(ydelse,0);
	var terminjoin = (termin+1);
	var temptotalcosttxt = LoanCalc.totalcosttxt.split('(@ydelse)');
	newtotalcosttxt = temptotalcosttxt.join(ydelsejoin);
	temptotalcosttxt = newtotalcosttxt.split('(@termin)');
	newtotalcosttxt = temptotalcosttxt.join(terminjoin);
		
	amortResult = newtotalcosttxt + " " + LoanCalc._formatter(((termin+1)*ydelse),0) + " &#128;";
		   }
if(serial){amortResult = ''}
	amortResult+='<BR><BR><B>' + LoanCalc.amortsheduletxt + ' ' + Number(rente*100).toFixed(2) + '%</B><BR><div>' + amort + '</table></div>';
 
document.getElementById('amorttable').innerHTML = amortResult;
}
if(!realrate){
document.getElementById('resultlastinterest2').innerHTML = Number(a_rente).toFixed(0) + " &#128;"
}


return ydelser;
	},





	//Calculate APR
	_AOP: function(rente,loebetid,beloeb,ydelse,omkostninger,realrate,serial) {		
		//årlig rente decimaltal, loebetid i år, det lånte beløb, ydelse pr. måned, evt. ekstra gebyr/omkostninger (engangs)
		var self=LoanCalc;
  		var y = self._ydelsesforloeb(rente,loebetid,beloeb,ydelse,realrate,serial);
  
  		//binær søgning efter rente,r, så tilbagedisk(y,r,loebetid) = hovedstol
 		var r1 = rente;
  		var r2 = rente*2;
  		var p1 = self._tilbagedisk(y,r1,loebetid);
  		var p2 = self._tilbagedisk(y,r2,loebetid);

  		while(p1 < (beloeb-omkostninger)) {
    		r1 = r1/2;
    		p1 = self._tilbagedisk(y,r1,loebetid);
  		}
		
  		while(p2 > (beloeb-omkostninger)) {
    		r2 = r2*2;
    		p2 = self._tilbagedisk(y,r2,loebetid);
  		}
  
  		var r = (r1 + r2)/2;
  		var cont = true;
  
  		while(cont) {
    		r = (r1 + r2)/2;
    		if(Math.round(self._tilbagedisk(y,r,loebetid)*1000000) == Math.round((beloeb-omkostninger)*1000000)){
      			cont = false;
			}
    		else {    
      			if(self._tilbagedisk(y,r,loebetid) < (beloeb-omkostninger)){
        			r2 = r;
				}
      				else {
        			r1 = r;
				}
			}
  		}
  		return r*100;
	},


	_tilbagedisk: function(ydelsesforloeb, rente, loebetid) {
  		//ydelsesforloeb = Array, årlig rente decimaltal, loebetid i år
		var self=LoanCalc;
  		var n = 12*loebetid; 
  		m_rente = (Math.pow((rente+1),(1/12)))-1;
  		var result = 0;
  
  		for(i = 0; i < ydelsesforloeb.length; i++) {
    		result = result + ydelsesforloeb[i]*Math.pow((1+m_rente),-(i+1));
  		}
  		return result;
	},


	_calcpayment: function(beloeb, loebetid, rente){
		// beloeb = det lånte beløb, loebetid = løbetid i år, rente = rente pr. år decimaltal.
		var self=LoanCalc;
		var	a = beloeb;
		var	n = loebetid;
		var	p = rente;
		//ComInt = (Math.pow((1+p/12 ),(1/12))) - 1
		//alert(p/12)
		ComInt = p/12;
		
		repay = (a*ComInt*(Math.pow((1+ComInt),(n*12))))/((Math.pow((1+ComInt),(n*12)))- 1);
		
		return repay;
	},

	_calcloanamount: function(ydelse, loebetid, rente){
		// beloeb = det lånte beløb, loebetid = løbetid i år, rente = rente pr. år decimaltal.
		var self=LoanCalc;
		var	y = ydelse;
		var	n = loebetid;
		var	p = rente;
		//ComInt = (Math.pow((1+p/4 ),(1/3))) - 1
		ComInt = p/12;
		amount = (y*((Math.pow((1+ComInt),(n*12)))- 1))/(ComInt*(Math.pow((1+ComInt),(n*12))));
		
		return amount;
	},
	
	//_generateamorttable: function(ydelse, beloeb, rente, realrate){
//		var self=LoanCalc;		
//
//var remainingBalance = beloeb
//var mRate = rente/12
//
//var months=0;
//
//if(realrate){
//var amort='<table class=ms-rteTable-1 style="WIDTH: 100%"><TBODY><tr class=ms-rteTableHeaderRow-1><td class=ms-rteTableHeaderFirstCol-1>Month</td><td class=ms-rteTableHeaderOddCol-1>Principal</td><td class=ms-rteTableHeaderOddCol-1>Interest</td><td class=ms-rteTableHeaderLastCol-1>Balance</td></tr>';
//}
//var totalPaid=0.1-0.1;
//
//while (remainingBalance>0)
//{
//	months++;
//	var interest=remainingBalance*mRate;
//	var principal=ydelse-interest;
//	if (principal>remainingBalance) principal=remainingBalance;
//	totalPaid=totalPaid + principal + interest;
//
//	remainingBalance = remainingBalance - principal;
//
//	if(months == 1 && realrate){
//		resultFirstPayment = Number(principal).toFixed(0)
//		resultFirstInterest = Number(interest).toFixed(0)
//		document.getElementById('resultprincipalpayment').innerHTML = "&#128;"+resultFirstPayment
//		document.getElementById('resultfirstinterest').innerHTML = "&#128;"+resultFirstInterest
//	}
//	if(months == 1 && !realrate){
//		resultFirstPayment = Number(principal).toFixed(0)
//		resultFirstInterest = Number(interest).toFixed(0)
//		document.getElementById('resultprincipalpayment2').innerHTML = "&#128;"+resultFirstPayment
//		document.getElementById('resultfirstinterest2').innerHTML = "&#128;"+resultFirstInterest
//	}	
//	
//if(realrate){
//	amort+='<tr class=ms-rteTableOddRow-1><td class=ms-rteTableFirstCol-1>' + months + '</td><td class=ms-rteTableOddCol-1>&#128;' + Number(principal).toFixed(0) + '</td><td class=ms-rteTableOddCol-1>&#128;' + Number(interest).toFixed(0) + '</td><td class=ms-rteTableLastCol-1>&#128;' + Number(remainingBalance).toFixed(0) + '</td></tr>';
//}
//}
//if(realrate){
//document.getElementById('resultlastinterest').innerHTML = "&#128;"+Number(interest).toFixed(0)
//amortResult="At &#128;" + Number(ydelse).toFixed(0) + " a month, it will take " + months + " months to pay off this loan and will cost you a total of &#128;" + Number(totalPaid).toFixed(0) + ".";
//
//	amortResult+='<BR><BR><B>Amortization Schedule when interestrate is ' + Number(rente*100).toFixed(2) + '%</B><BR><div>' + amort + '</table></div>';
// 
//document.getElementById('amorttable').innerHTML = amortResult
//}
//if(!realrate){
//document.getElementById('resultlastinterest2').innerHTML = "&#128;"+Number(interest).toFixed(0)
//}
//
//
//    
//
//
//		
//		
//		return;
//
//
//	},
	
	_calcloanperiod: function(ydelse, beloeb, rente, realrate){
		// ydelse = pr. md, beloeb = Det lånte beløb, rente = rente pr. år decimaltal, realrate = True/False 1. eller andet gennemløb.
		var self=LoanCalc;


var remainingBalance = beloeb;
var mRate = rente/12;
var minPayment=(rente/12)*beloeb;
var months=0;




if(realrate){
var amort='<table class=ms-rteTable-1 style="WIDTH: 100%"><TBODY><tr class=ms-rteTableHeaderRow-1><td class=ms-rteTableHeaderFirstCol-1>' + LoanCalc.monthtxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.paymenttxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.principaltxt + '</td><td class=ms-rteTableHeaderOddCol-1>' + LoanCalc.interesttxt + '</td><td class=ms-rteTableHeaderLastCol-1>' + LoanCalc.balancetxt + '</td></tr>';
}
var totalPaid=0.1-0.1;

while (remainingBalance>0 && months < 362)
{
	months++;
	var interest=remainingBalance*mRate;
	var principal=ydelse-interest;
	if (principal>remainingBalance) principal=remainingBalance;
	totalPaid=totalPaid + principal + interest;

	remainingBalance = remainingBalance - principal;

	if(months == 1 && realrate){
		resultFirstPayment = parseFloat(principal);
		resultFirstInterest = Number(interest).toFixed(0);
		document.getElementById('resultprincipalpayment').innerHTML = resultFirstPayment;
		document.getElementById('resultfirstinterest').innerHTML = resultFirstInterest + " &#128;";
	}
	if(months == 1 && !realrate){
		resultFirstPayment = parseFloat(principal);
		resultFirstInterest = Number(interest).toFixed(0);
		document.getElementById('resultprincipalpayment2').innerHTML = resultFirstPayment;
		document.getElementById('resultfirstinterest2').innerHTML = resultFirstInterest + " &#128;";
	}	
	
if(realrate){
	amort+='<tr class=ms-rteTableOddRow-1><td class=ms-rteTableFirstCol-1>' + months + '</td><td class=ms-rteTableOddCol-1>' + LoanCalc._formatter(principal,0) + ' &#128;</td><td class=ms-rteTableOddCol-1>' + Number(interest).toFixed(0) + ' &#128;</td><td class=ms-rteTableLastCol-1>' + LoanCalc._formatter(remainingBalance,0) + ' &#128;</td></tr>';
}
}



if(realrate){
document.getElementById('resultlastinterest').innerHTML = Number(interest).toFixed(0) + " &#128;"
var ydelsejoin = LoanCalc._formatter(ydelse,0);
	var terminjoin = months;
	var temptotalcosttxt = LoanCalc.totalcosttxt.split('(@ydelse)');
	newtotalcosttxt = temptotalcosttxt.join(ydelsejoin);
	temptotalcosttxt = newtotalcosttxt.split('(@termin)');
	newtotalcosttxt = temptotalcosttxt.join(terminjoin);
		
	
amortResult = newtotalcosttxt + " " + LoanCalc._formatter(totalPaid,0) + " &#128;";

	amortResult+='<BR><BR><B>' + LoanCalc.amortsheduletxt + Number(rente*100).toFixed(2) + '%</B><BR><div>' + amort + '</table></div>';
 
document.getElementById('amorttable').innerHTML = amortResult;
}
if(!realrate){
document.getElementById('resultlastinterest2').innerHTML = Number(interest).toFixed(0) + " &#128;";
}


    


		
		
		return months;
	},


	_calcloaninsurance: function(loanamount, loaninsurancecoverselect, factor){
		var self=LoanCalc;
  		
		
		insfee = loanamount * loaninsurancecoverselect * factor/12;
		
  		return insfee;
	},

	_calcagegroup: function(age,loanperiodcheck){
	var self=LoanCalc;	
	if(age > 17 && age < 20){agegroup = 0;}		
	if(age > 19 && age < 25){agegroup = 1;}
	if(age > 24 && age < 30){agegroup = 2;}
	if(age > 29 && age < 35){agegroup = 3;}
	if(age > 34 && age < 40){agegroup = 4;}
	if(age > 39 && age < 45){agegroup = 5;}
	if(age > 44 && age < 50){agegroup = 6;}
	if(age > 49 && age < 55){agegroup = 7;}
	if(age > 54 && age < 60){agegroup = 8;}
	if(age > 59 && age < 65){agegroup = 9;}
	if(age > 64 || age < 18){agegroup = 11;}
	
	if(((65-age)*12) < loanperiodcheck && (65-age) > 0){
		document.getElementById('insuranceends').style.display = '';
	}
	
	return agegroup;
	},

	_fjerntegn: function(tal, fjern){
		var self=LoanCalc;
  		var retval = "";
  		for (i=0; i<tal.length; i++) {
    		var tegn = tal.substring(i,i+1);
    		if (tegn != fjern) {
	    		retval += tegn;
    		}
  		}
  		return retval;
	},

	_trimws: function(str){
		var self=LoanCalc;
  		var firstnonws = 0;
  		var tegn = str.substring(firstnonws,firstnonws+1);  
  
  		while ((tegn == " ") && (firstnonws < str.length)) {
			firstnonws++;
    		tegn = str.substring(firstnonws,firstnonws+1);
  		}

  		var lastnonws = str.length-1;
  		tegn = str.substring(lastnonws,lastnonws+1);
  		while ((tegn == " ") && (lastnonws >= 0)) {
			lastnonws--;
    		tegn = str.substring(lastnonws,lastnonws+1);
  		}

  		if (firstnonws > lastnonws) 
    		return "";
  		else
    		return str.substring(firstnonws,lastnonws+1);
},

	_characterCheck: function(str,type){
		var self=LoanCalc;
  		if((str == "") || (str == null)){
    		return false;
  		}

  		var validchars;
  		if (type == "n"){
    		validchars = "0123456789";
  		} 
		else if(type == "a") {
    		validchars = "abcdefghijklmnopqrstuvwxyzæøå";
  		}
  		for(j = 0; j < str.length; j++){
    		var ch = str.substring(j,j+1);
    		if (validchars.indexOf(ch) == -1){
      			return false;
    		}
  		}
  		return true;
	},     
	
	_parse2decimaler: function(tal, punktumok){
		var self=LoanCalc;
  		tal = self._trimws(tal);

  		if (!punktumok && (tal.indexOf(".") != -1))
    		return null;

  		tal = self._fjerntegn(tal, ".");
  		var pos = tal.lastIndexOf(","); 
  		if (pos == -1) {
    		if (self._characterCheck(tal, "n")) {
	  			return parseInt(tal,10);
			}
			else
	  		return null;
  		}

  		if (tal.indexOf(",") != tal.lastIndexOf(","))
    		return null;
 
  		var cifreEfterKomma = tal.length - pos - 1;
  		if (cifreEfterKomma > 2) {
    		return null;
  		}
  		tal = self._fjerntegn(tal, ",");

  		if (self._characterCheck(tal, "n")) {
    		return (parseInt(tal,10) / Math.pow(10, cifreEfterKomma));
  		}
  		else
    		return null;
	},
	
	//Age validation
	_checkAgeGroup: function(agegroup,field){
		var self=LoanCalc;
		if(agegroup == 11){
			CalculatorToolbox.errorId='N15';
			ErrorHandler.setErrorMark(field);
			ErrorHandler.showErrorInline('N15',field);
			ErrorHandler.selectInputContent(field)
			return false
		}
	},
	
	_formatter: function(tal, decimaler){
		var self=LoanCalc;
		
		var fudge = 0.0001;
		
		tal = parseFloat(tal+"");
		  
		tal = tal * Math.pow(10,decimaler);
		tal = Math.round(tal);
		tal = tal / Math.pow(10,decimaler);
		
		tal = tal+fudge;
		
		var result = "";
		var slutPotens = 0-decimaler;
		
		var potens = Math.floor(Math.log(tal) / Math.log(10));
		if (potens < 0){potens = 0;}
		  
		while (potens >= slutPotens) {
			ciffer = Math.floor(tal / Math.pow(10,potens));
			result = result + ciffer;
			if ((potens == 0) && (decimaler > 0)){result = result + ",";}
			else if ((potens/3 == Math.floor(potens/3)) && (potens > 0)){result = result + ".";}
			tal = tal - ciffer*Math.pow(10,potens);
			potens = potens-1;
		}
		
		return result;
	},
	
	_autohideresults: function(){
		var self=LoanCalc;
		var resultsection = document.getElementById('resultsection');
						resultsection.style.display = 'none';	
	},
	
	_errors: function(errornumber,labeltxt,errorid,value){
		var self=LoanCalc;
		 message = ErrorHandler.getErrormessage(errornumber);
		
		if (message.indexOf('(@label)')>-1) {
			var labeltxt= "'"+labeltxt+"'";
			var messageAr=message.split('(@label)');
			message=messageAr.join(labeltxt);
		}
		
		if (message.indexOf('(@minimum)')>-1) {
			var numbertxt= value;
			var messageAr=message.split('(@minimum)');
			message=messageAr.join(numbertxt);
		}
		
		if (message.indexOf('(@maximum)')>-1) {
			var numbertxt= value;
			var messageAr=message.split('(@maximum)');
			message=messageAr.join(numbertxt);
		}
		document.getElementById(errorid+'message').innerHTML = message;
		document.getElementById(errorid).style.display = ''
		
	},
	
	showErrorInline: function(errorId,formfieldId,Values) {   
		var self=LoanCalc;
		var labeltxt='';
		var specs= new Array();
		if (ErrorHandler._coreCompliant && ErrorHandler.errordoc!=null) {
  	  	var message = ErrorHandler.getErrormessage(errorId);
  		var element= document.getElementById(formfieldId);
  		var value=element.value;
			if (arguments.length==2) {
    			specs[0]=element._specmin;
    			specs[1]=element._specmax;
    			specs[2]=element._speclist;
    			specs[3]=element._specbrandname;
			} else {
					specs[0]= (Values.minimum) ? Values.minimum:element._specmin;
					specs[1]= (Values.maximum) ? Values.maximum:element._specmax;
					specs[3]= (Values.list) ? Values.list:element._speclist;
					specs[4]= (Values.brandname) ? Values.brandname:element._specbrandname;
			}
  		while (element.parentNode) {
  		   if (element.parentNode.tagName=='LI') {
  			 		var li=element.parentNode;
  					var labelspec=DBcore.getLabelFor(element);
  					if (labelspec.found) {
    					var label=labelspec.label;
    					 labeltxt=ErrorHandler._getLabeltxt(label);
  					} else { // for sake of IE:
							 labelspec=DBcore.getNearestLabel(element);
							 if (labelspec.found) {
      					 label=labelspec.label;
      					 labeltxt=ErrorHandler._getLabeltxt(label);
  						 }
						}
						var mestext = self._createMesbox1(message,labeltxt,value,specs);
						var errorelement = formfieldId+'error';
						document.getElementById(errorelement+'message').innerHTML = mestext;
						document.getElementById(errorelement).style.display = '';
						ErrorHandler.errorboxActive=true;
						self.selectInputContent(formfieldId);
  					
  					//li.insertBefore(mesbox,li.firstChild);
//  					self.errorboxActive=true;
//  					self.errorfieldId=formfieldId;
						// IE/CMS fix:
			 			//window.setTimeout(function() {mesbox.style.display="block";},100);
  					break;
  			 } else {
  			 	  element=element.parentNode;
  			 }
  		}
		}
	},
	
		
	selectInputContent: function(formfieldId) {
	  var field=document.getElementById(formfieldId);
		if (field.tagName != 'SELECT' && (field.type=='text' || field.type=='textarea')) {
	  	 field.select();
		}
	},
	
	removeErrorMark: function() {
		var self=ErrorHandler;
		var fieldId=self.errorfieldId;
		var field=document.getElementById(fieldId);
		DBcore.removeClass(field,'errormark');
	},
	
	_createMesbox1: function(message,labeltxt,value,specs) {
		if (message.indexOf('(@label)')>-1) {
			 var labeltxt= "'"+labeltxt+"'";
			 var messageAr=message.split('(@label)');
			 message=messageAr.join(labeltxt);
		}
		if (message.indexOf('(@value)')>-1) {
			 var valuetxt= "'"+value+"'";
			 var messageAr=message.split('(@value)');
			 message=messageAr.join(valuetxt);
		}
		if (message.indexOf('(@minimum)')>-1) {
			 var numbertxt= specs[0];
			 var messageAr=message.split('(@minimum)');
			 message=messageAr.join(numbertxt);
		}
		if (message.indexOf('(@maximum)')>-1) {
			 var numbertxt= specs[1];
			 var messageAr=message.split('(@maximum)');
			 message=messageAr.join(numbertxt);
		}
		if (message.indexOf('(@list)')>-1) {
			 var numbertxt= "'"+specs[3]+"'";
			 var messageAr=message.split('(@list)');
			 message=messageAr.join(numbertxt);
		}
		if (message.indexOf('(@brandname)')>-1) {
			 var numbertxt= "'"+specs[4]+"'";
			 var messageAr=message.split('(@brandname)');
			 message=messageAr.join(numbertxt);
		}
		var messagesnips=message.split('.');
		var messagePart1=messagesnips[0]+'. ';
		messagesnips.shift();
		var messagePart2=messagesnips.join('. ');
		
		var mesbox = messagePart1+'<br />'+messagePart2;
		
		return mesbox;
	},
	
	_errorreset: function(elementId){
		document.getElementById(elementId+'errormessage').innerHTML = '';
		document.getElementById(elementId+'error').style.display = 'none';
		return;
	}
	
}
DBcore.start(LoanCalc);


