

function replaceChars(inputStr, inChar, outChar) {
	out = outChar; // replace this
	add = inChar; // with this
	temp = "" + inputStr; // temporary holder

	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));
	}
	return temp;
}

function changeReadOnly() {
	if(document.calcform.useOtherInterests.checked) {
		document.calcform.otherInterests.disabled = false;
	} else {
		document.calcform.otherInterests.disabled = true;
		document.calcform.otherInterests.value = "";
	}
}

function formatCurrency(money) {
	var s = new String(Math.round(money).toString());
	var ns = '';
	for(i=0; i<s.length; i++) {
	    ns = s.charAt(s.length-i-1) + ns;
    	if( (i%3 == 2) && (i<s.length-1))
	    	ns = '.' + ns;
    }
	return ns;
}

function unFormatCurrency(money) {
	var ns = '';
	for(var i=0; i<money.length; i++) {
		var c = money.charAt(i);
		switch(c) {
			case "," :
				ns += ".";
				break;
			case "." :
				break;
			default :
				ns += c;
		}
	}
	var num = parseInt(ns,10);
	if(isNaN(num)) {
		num = 0;
	}
	return num;
}

function reformatCurrency(field) {

	var currency;
	currency = unFormatCurrency(field.value);
	field.value = formatCurrency(currency);
}

function formatPercentage(percentage) {
	return replaceChars(((Math.round(percentage * 10000)/100) + "%"), ",", ".");
}

function validateNumber(number) {
	var valid = "0123456789,"
	var ok = "yes";
	var temp;
	for (var i=0; i<number.length; i++) {
		temp = "" + number.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no") {
		return true;
	} else {
		return false;
	}
}

function calculateMonthAmount(totalAmount, period, intr) {
	var total = totalAmount-0 * 1.0;
	var minMonthAmount = 0.0*0.0;
	var maxMonthAmount = 0.0*0.0;
	var lowTotal = 0.0*0.0;
	var highTotal = 0.0*0.0;
	var newTotal = 0.0*0.0;
	var percentage = 0.0535;
	var newMonthAmount = 0.0*0.0;

	minMonthAmount = 0;
	maxMonthAmount = totalAmount/(period/30);

	if(totalAmount == 0) return true;

	newMonthAmount = (maxMonthAmount - minMonthAmount) / 2;
	for(i=0;;i++) {
		if(1 > Math.abs(totalAmount - calculateTotal(newMonthAmount, period, intr))) {
			return newMonthAmount;
		}
		if(totalAmount > calculateTotal(newMonthAmount, period, intr)) {
			minMonthAmount = newMonthAmount;
		} else if(totalAmount < calculateTotal(newMonthAmount, period, intr)) {
			maxMonthAmount = newMonthAmount;
		}
		newMonthAmount = ((maxMonthAmount - minMonthAmount) / 2) + minMonthAmount;
	}
}

function calculateTotal(monthlyAmount, period, intr) {
	var mAmount = monthlyAmount-0 * 1.0;
	var amount = mAmount * 1.0;
	var percentage = 0.0*0.0;
	var interestSum = 0.0*0.0;
	var day = 0;

	//document.write('Mánaðarleg greiðsla:' + monthlyAmount + '<br>');
	//document.write('Tímabil í dögum:' + period + '<br><br>');

	for(i=0;i<period;i++) {
		day = (i+1-0)*1

		if(intr != "x") {
			percentage = intr;
		} else {
			percentage = calculateInterestRate(amount);
		}

		if(i != 0) {
			interestSum = interestSum + (amount * (percentage/360));
		}
		//document.write('Dagur nr:' + day + '<br>')
		//document.write('Vextir:' + percentage + '<br>')
		//document.write('Vaxtateljari:' + interestSum + '<br>')
		//document.write('Upphæðarteljari:' + amount + '<br>')
		if((i%360 == 0) && (i != 0)) {
			amount+= interestSum;
			interestSum = 0;
			//document.write('Upphæðarteljari:' + amount + '<br>')
			//document.write('Dagur nr:' + day + '<br>')
			//document.write('Vaxtateljari Núllast<br>')
		}
		if((i%30 == 0) && (i != 0)) {
			amount+= mAmount;
			//document.write('Upphæðarteljari:' + amount + '<br>')
			//document.write('Dagur nr:' + day + '<br>')
		}
		//document.write('*****<br>')
	}
	if(interestSum > 0) {
		amount+= interestSum;
		//document.write('Upphæðarteljari:' + amount + '<br>')

	}
	//document.write('Upphæðarteljari:' + amount + '<br>')
	//document.write('Dagur nr:' + day + '<br>')
	return amount;
}

function calculateTotal2(startAmount, period, intr) {
	var amount = startAmount-0 * 1.0;
	var percentage = 0.0*0.0;
	var interestSum = 0;

	for(i=0;i<period;i++) {
		if(intr != "x") {
			percentage = intr;
		} else {
			percentage = calculateInterestRate(amount);
		}
		interestSum = interestSum + (amount * (percentage/360));
		if((i%360 == 0) && (i != 0)) {
			amount += interestSum;
			interestSum = 0;
		}
	}
	if(interestSum > 0) {
		amount+= interestSum;
	}
	return amount;
}

function calculatePeriod(startAmount, endAmount, intr) {
	var sAmount = startAmount-0;
	var eAmount = endAmount-0;
	var percentage = 0;
	var interestSum = 0;

	if(sAmount == eAmount) {
		return 0;
	}

	if((intr == "") && (intr == 0)) {
		return 0;
	}

	for(i=0;;i++) {
		if(intr != "x") {
			percentage = intr;
		} else {
			percentage = calculateInterestRate(sAmount);
		}
		interestSum = interestSum + (sAmount * (percentage/360));
		if((Math.round(sAmount + interestSum)) >= eAmount) {
			if(i < 360) {
				return i+1;
			} else {
				return i;
			}
		}
		if((i%360 == 0) && (i != 0)) {
			sAmount += interestSum;
			interestSum = 0;
		}
		if((sAmount + interestSum) >= eAmount) {
			if(i < 360) {
				return i+1;
			} else {
				return i;
			}
		}
	}
}

function calculateInterestRate(amount) {
	var interestRate1 = 0.0535;
	var highestAmount1 = 999999;
	var interestRate2 = 0.0535;
	var lowestAmount2 = 1000000;
	var highestAmount2 = 4999999;
	var interestRate3 = 0.0535;
	var lowestAmount3 = 5000000;

	if(amount <= highestAmount1) {
		return interestRate1;
	} else if((lowestAmount2 <= amount) && (amount <= highestAmount2)) {
		return interestRate2;
	} else {
		return interestRate3;
	}

}

function calculateDays(period, timeunit) {
	var month = 30;
	var year = 360;

	if(timeunit == 'days') {
		return period;
	} else if(timeunit == 'months') {
		return period * month;
	} else {
		return period * year;
	}
}

function calculateMonthMultiplier(period, timeunit) {
	if(timeunit == 'days') {
		return 1;
	} else if(timeunit == 'months') {
		return period;
	} else {
		return period * 12;
	}
}

function calcSavingsGoal(f) {
	var totalAmount = 0;
	var totalInterests = 0;
	var interestRate = 0;
	var totalDays = 0;


	if (validateNumber(unFormatCurrency(f.totalAmount.value)) || validateNumber(f.period.value) || validateNumber(f.otherInterests.value)) {
		alert("Eingöngu tölur má nota í útreikninga");
		return;
	}

	totalDays = calculateDays(f.period.value, f.timeunits.options[f.timeunits.options.selectedIndex].value);

	if(f.useOtherInterests.checked == true) {
		if(f.otherInterests.value == '') {
			alert("Þú verður að skrá inn vexti!");
			return;
		}
		monthAmount = calculateMonthAmount(unFormatCurrency(f.totalAmount.value), totalDays, replaceChars((f.otherInterests.value), ".", ",")/100);
		interestRate = replaceChars((f.otherInterests.value), ".", ",")/100;
	} else {
		monthAmount = calculateMonthAmount(unFormatCurrency(f.totalAmount.value), totalDays, "x");
		interestRate = calculateInterestRate(unFormatCurrency(f.totalAmount.value));
	}

	f.interests.value = formatPercentage(interestRate);
	if(unFormatCurrency(f.totalAmount.value) == 0) {
		f.monthlyAmount.value = 0;
		f.totalInterests.value = 0;
	} else {
		f.monthlyAmount.value = formatCurrency(monthAmount);
		f.totalInterests.value = formatCurrency(unFormatCurrency(f.totalAmount.value) - (calculateMonthMultiplier(f.period.value, f.timeunits.options[f.timeunits.options.selectedIndex].value)*unFormatCurrency(f.monthlyAmount.value)) - totalAmount);
	}
}

function calcRegularSavings(f) {
	var totalAmount = 0;
	var totalInterests = 0;
	var interestRate = 0;
	var totalDays = 0;

	if (validateNumber(unFormatCurrency(f.monthlyAmount.value)) || validateNumber(f.period.value) || validateNumber(f.otherInterests.value)) {
		alert("Eingöngu tölur má nota í útreikninga");
		return;
	}

	totalDays = calculateDays(f.period.value, f.timeunits.options[f.timeunits.options.selectedIndex].value);

	if(f.useOtherInterests.checked == true) {
		totalAmount = calculateTotal(unFormatCurrency(f.monthlyAmount.value), totalDays, replaceChars((f.otherInterests.value), ".", ",")/100);
		interestRate = replaceChars((f.otherInterests.value), ".", ",")/100;
	} else {
		totalAmount = calculateTotal(unFormatCurrency(f.monthlyAmount.value), totalDays, "x");
		interestRate = calculateInterestRate(totalAmount);
	}

	f.totalAmount.value = formatCurrency(totalAmount);
	f.interests.value = formatPercentage(interestRate);

	f.totalInterests.value = formatCurrency(totalAmount - (calculateMonthMultiplier(f.period.value, f.timeunits.options[f.timeunits.options.selectedIndex].value)*unFormatCurrency(f.monthlyAmount.value)));
}

function calcFuture(f) {
	var totalAmount = 0;
	var totalInterests = 0;
	var interestRate = 0;
	var totalDays = 0;

	if (validateNumber(unFormatCurrency(f.startAmount.value)) || validateNumber(f.period.value) || validateNumber(f.otherInterests.value)) {
		alert("Eingöngu tölur má nota í útreikninga");
		return false;
	}

	totalDays = calculateDays(f.period.value, f.timeunits.options[f.timeunits.options.selectedIndex].value);

	if(f.useOtherInterests.checked == true) {
		//totalAmount = calculateTotal(unFormatCurrency(f.monthlyAmount.value), totalDays, replaceChars((f.otherInterests.value), ".", ",")/100);
		totalAmount = calculateTotal2(unFormatCurrency(f.startAmount.value), totalDays, replaceChars((f.otherInterests.value), ".", ",")/100);
		interestRate = replaceChars((f.otherInterests.value), ".", ",")/100;
	} else {
		//totalAmount = calculateTotal(unFormatCurrency(f.monthlyAmount.value), totalDays, "x");
		totalAmount = calculateTotal2(unFormatCurrency(f.startAmount.value), totalDays, "x");
		interestRate = calculateInterestRate(totalAmount);
	}

	f.totalAmount.value = formatCurrency(totalAmount);
	f.interests.value = formatPercentage(interestRate);
	f.totalInterests.value = formatCurrency(totalAmount - (unFormatCurrency(f.startAmount.value)));
}

function calcHowLong(f) {
	var period = 0;
	var totalInterests = 0;
	var interestRate = 0;	
	
	if (validateNumber(unFormatCurrency(f.startAmount.value)) || validateNumber(unFormatCurrency(f.endAmount.value)) || validateNumber(f.otherInterests.value)) {
		alert("Eingöngu tölur má nota í útreikninga");
		return false;
	}	

	if(f.useOtherInterests.checked == true) {						
		period = calculatePeriod(unFormatCurrency(f.startAmount.value), unFormatCurrency(f.endAmount.value), replaceChars((f.otherInterests.value), ".", ",")/100);		
		interestRate = replaceChars((f.otherInterests.value), ".", ",")/100;
	} else {		
		period = calculatePeriod(unFormatCurrency(f.startAmount.value), unFormatCurrency(f.endAmount.value), "x");				
		interestRate = calculateInterestRate(unFormatCurrency(f.endAmount.value));
	}	
	
	f.period.value = period;
	f.interests.value = formatPercentage(interestRate);
	f.totalInterests.value = formatCurrency(unFormatCurrency(f.endAmount.value) - (unFormatCurrency(f.startAmount.value)));
}

function reikna(formid) {
	// les breytur úr formi
	var aldur = parseInt(formid.aldur.value);
	var starfslok = parseInt(formid.starfslok.value);
	var lifeyristimi = parseInt(formid.lifeyristimi.value);

	// les vexti úr formi
	var va = lesaTolu(formid.va.value) || 0;
	var vb = lesaTolu(formid.vb.value) || 0;
	var vc = lesaTolu(formid.vc.value) || 0;

	// sæki laun og launaprósentu
	var laun = lesaTolu(formid.laun.value);
	var prosenta = (lesaTolu(formid.prosenta.value) / 100 );
	var upphaed = laun * prosenta;

	// reikna og skrifa úr niðurstöður
	formid.alls1.value = skrifaTolu(Math.round((upphaed *
	(Math.pow((Math.pow(va/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(va/100+1,1/12)-1))*100)/100);

	formid.aman1.value = skrifaTolu(Math.round(((upphaed *(Math.pow((Math.pow(va/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(va/100+1,1/12)-1)) * (Math.pow(va/100+1,1/12)-1) / ( 1-Math.pow(1+(Math.pow(va/100+1,1/12)-1),(-lifeyristimi*12))))*100)/100);

	formid.alls2.value = skrifaTolu(Math.round((upphaed *(Math.pow((Math.pow(vb/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(vb/100+1,1/12)-1))*100)/100);

	formid.aman2.value = skrifaTolu(Math.round(((upphaed *(Math.pow((Math.pow(vb/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(vb/100+1,1/12)-1)) * (Math.pow(vb/100+1,1/12)-1) / ( 1-Math.pow(1+(Math.pow(vb/100+1,1/12)-1),(-lifeyristimi*12))))*100)/100);

	formid.alls3.value = skrifaTolu(Math.round((upphaed *(Math.pow((Math.pow(vc/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(vc/100+1,1/12)-1))*100)/100);
	formid.aman3.value = skrifaTolu(Math.round(((upphaed *(Math.pow((Math.pow(vc/100+1,1/12)-1) + 1,(starfslok-aldur)*12) - 1) /(Math.pow(vc/100+1,1/12)-1)) * (Math.pow(vc/100+1,1/12)-1) / ( 1-Math.pow(1+(Math.pow(vc/100+1,1/12)-1),(-lifeyristimi*12))))*100)/100);
}

function lesaTolu(tala) {
	var lengd = tala.length;

	var punktur = tala.indexOf('.');
	if (punktur > -1) {
		tala = tala.substring(0, punktur) + tala.substring(punktur +1, lengd);
	}

	lengd = tala.length;
	var komma = tala.indexOf(',');
	if (komma > -1) {
		tala = tala.substring(0, komma) + "." + tala.substring(komma+ 1, lengd);
	}

	return parseFloat(tala);
}

function skrifaTolu(tala) {
	tala += '';
	var skilatala;
	var talan = parseInt(tala) + '';
	var lengd = talan.length;
	var komma = tala.indexOf('.');

	if (lengd < 4) { // ef talan er undir þúsund
		skilatala = talan;
	}
	else if (lengd > 3 && lengd < 7) { // ef talan er yfir þúsund en undir milljón
		skilatala = tala.substring(0, lengd - 3) + '.' +
		tala.substring(lengd - 3, lengd);
	}
	else if (lengd > 6 && lengd < 10) { // ef talan er yfir milljón en undir milljarði
		skilatala = tala.substring(0, lengd - 6) + '.' +
		tala.substring(lengd - 6, lengd - 3) + '.' +  tala.substring(lengd - 3,lengd);
	}
	else if (lengd > 9 && lengd < 13) { // ef talan er yfir milljarði en undir billjón
		skilatala = tala.substring(0, lengd - 9) + '.' +tala.substring(lengd - 9, lengd - 6) + '.' +  tala.substring(lengd - 6,lengd - 3) + '.' +  tala.substring(lengd - 3, lengd);
	}

	// bæti við aukastöfum með kommu
	if (komma > -1) {
		if ((tala.length -1) - komma < 2) {
			skilatala += ',' + tala.substring(tala.indexOf('.')+ 1, tala.length) + '0';
		}
		else {
			skilatala += ',' + tala.substring(tala.indexOf('.')+ 1, tala.length);
		}
	}
	else {
		skilatala += ',00';
	}
	return skilatala;
}