function get_number(obj) {
	return parse_number(obj.value);
}

function parse_number(val) {
	val = val.replace(',', '.');
	if (isNaN(val) || val == "") {
		return -1;
	}
	return parseFloat(val);
}

function format_int(num) {
	num = Math.round(num);
	return num;
}

function calc_loan_sum(obj_price, obj_own_fin_per, obj_own_fin, obj_loan_sum) {
	var price = get_number(obj_price);
	if (price == -1) { return -1; }

	var own_fin_per = get_number(obj_own_fin_per);
	if (own_fin_per == -1) { return -1;	}

	var own_fin = (price * own_fin_per / 100);
	if (own_fin == -1) { return -1;	}

	var loan_sum = (price - own_fin);
	if (loan_sum == -1) { return -1; }

	obj_own_fin.value = format_int(own_fin);
	obj_loan_sum.value = format_int(loan_sum);

	return loan_sum;
}

function calc_monthly_payment(obj_loan_sum, obj_rate, obj_period, obj_month_paym) {
	var loan_sum = get_number(obj_loan_sum);
	if (loan_sum == -1) { return -1; }

	var rate = get_number(obj_rate);
	if (rate == -1) { return -1; }

	var period = parse_number(obj_period.options[obj_period.selectedIndex].value);
	if (period == -1) { return -1; }

	//region: formula from www.hanza.net
	var periodMonths = period * 12;
	var interest = rate;
	var price = loan_sum;
	var advanceSum = 0;
	var residualValue = 0;

	var month_paym = (((interest / 100 / 12) * ((price - advanceSum)-((price * residualValue / 100) / (Math.pow((interest / 100 / 12) + 1, periodMonths)))) / (1 - (1 / Math.pow((interest / 100 / 12) + 1, periodMonths)))));
	//enregion

	obj_month_paym.value = format_int(month_paym);

	return month_paym;
}

function format_input(obj_price, obj_own_fin_per, obj_rate) {
	var price = get_number(obj_price);
	obj_price.value = (price == -1) ? "" : format_int(price);
	var own_fin_per = get_number(obj_own_fin_per);
	obj_own_fin_per.value = (own_fin_per == -1) ? "" : own_fin_per;
	var rate = get_number(obj_rate);
	obj_rate.value = (rate == -1) ? "" : rate;
	return;
}

function empty_output(obj_own_fin, obj_loan_sum, obj_month_paym) {
	obj_own_fin.value = "";
	obj_loan_sum.value = "";
	obj_month_paym.value = "";
	return;
}

function calculate() {
	obj_calcf = findObj('calcf', document);
	if (obj_calcf == null) {
		return;
	}
	var obj_price = obj_calcf.price;
	var obj_own_fin_per = obj_calcf.own_fin_per;
	var obj_own_fin = obj_calcf.own_fin;
	var obj_loan_sum = obj_calcf.loan_sum;
	var obj_rate = obj_calcf.rate;
	var obj_period = obj_calcf.period;
	var obj_month_paym = obj_calcf.month_paym;

	format_input(obj_price, obj_own_fin_per, obj_rate);
	empty_output(obj_own_fin, obj_loan_sum, obj_month_paym);

	var loan_sum = calc_loan_sum(obj_price, obj_own_fin_per, obj_own_fin, obj_loan_sum);
	if (loan_sum >= 0) {
		calc_monthly_payment(obj_loan_sum, obj_rate, obj_period, obj_month_paym);
	}
	return;
}

function reset_calc(frm) {
	frm.reset();
	calculate();
	return;
}


function findObj(n, d) { //v1.0, eivinas@helmes.ee, 17.04.2003
	var i,x;  
	if(!d) d=document; 
	if(!(x=d[n]) && d.all) 
		x=d.all[n];
	for (i=0; !x && i<d.forms.length; i++) 
		x=d.forms[i][n];
	for(i=0; !x && d.layers && i<d.layers.length; i++)
		x=findObj(n,d.layers[i].document);
	if(!x && d.getElementById) 
		x=d.getElementById(n); 
	return x;
}