/*
 * Hypotecni kalkulacka
 */

function set_event_handler(obj, event_name, handler)
{
	obj['on'+event_name] = handler;
}

function set_evs_handler(obj, events, handler)
{
	var i;

	for (i=0; i<events.length; i++) {
		set_event_handler(obj, events[i], handler);
	}
}

function hkal_update()
{
	hkal_spocitej();
}

function hkal_hu_change()
{
	var num, str;
	var form;

	form = document.getElementById('hkal_form');

	num = scan_number(form['hu'].value);
	str = format_number(num);

	/*if (str.length >= form['hu'].value.length)*/
		form['hu'].value = str;

	hkal_update();
}

function hkal_set_handlers()
{
	var events;
	var fields;
	var i;
	var form;

	events = Array('change', 'keyup', 'keydown');
	fields = Array('hu','n','ipa');

	form = document.getElementById('hkal_form');

	for (i=0; i<fields.length; i++) {
		set_evs_handler(form[fields[i]], events, hkal_update);
	}

	set_event_handler(form['hu'], 'change', hkal_hu_change);
}

/*
 * r = mesicni urok (zlomek)
 * N = delka splaceni v mesicich
 * P = celkova castka
 *
 * vraci: mesicni splatka
 */
function hkal_PMT(r, N, P)
{
	if (r == 0) return P / N;

	return (r / (1 - Math.pow(1 + r, -N))) * P;
}

function scan_number(str)
{
	var tmp;

	tmp = str.replace(/ /g, '');
	return tmp.replace(/,/g, '.');
}

function fmt_fix_width(int_num, width)
{
	var s;

	s = int_num.toString();
	while (s.length < width) s = '0' + s;

	return s;
}

function format_number(number)
{
	var frac;
	var str;
	var i;

	if (number < 0) return null;

	number = Math.round(number);

	str = ''; i = 0;

	while (number >= 1000 && i < 3) {
		rest = number % 1000;
		str = ' ' + fmt_fix_width(rest, 3) + str;
		number = Math.floor(number / 1000);
		++i;
	}

	if (number >= 1000) return null;

	str = number.toString() + str;

	return str;
}

function hkal_spocitej()
{
	var f;
	var splatka;
	var ipa, n, hu;

	var fsplatka, fcelkem;

	f = document.getElementById('hkal_form');

	ipa = scan_number(f.ipa.value);
	n = scan_number(f.n.value);
	hu = scan_number(f.hu.value);

	splatka = hkal_PMT((ipa / 12.0) / 100.0, n*12.0, hu);

	fsplatka = format_number(splatka);
	fcelkem = format_number(splatka * n * 12.0);

	if (fsplatka == null || fcelkem == null) {
		fsplatka = '';
		fcelkem = '';
	}

	f.splatka.value = fsplatka;
	f.celkem.value = fcelkem;
}

hkal_set_handlers();

