function wrong(str) {
	return (pFloat(str) <= 0)? true : false;
	var i = str.length;
	var dot = false;
	while (i > 1) {
		if (str.charAt(i - 1) >= '0' && str.charAt(i - 1) <= '9')
			i--;
		else if ((str.charAt(i - 1) == '.') && i > 1 && (str.charAt(i - 1) == ',')) {
			i--;
			dot = true;
			while (i > 1) {
				dot = false;
				if (str.charAt(i - 1) >= '0' && str.charAt(i - 1) <= '9')
					i--;
				else
					return true;
			}
		}
		else
			return true;
	}
	if (str.charAt(i - 1) >= '0' && str.charAt(i - 1) <= '9' && dot == true)
		i--;
	else if (str.charAt(i - 1) >= '1' && str.charAt(i - 1) <= '9')
		i--;
	else
		return true
	return false;
}

function wrongint(str) {
	return (pFloat(str) <= 0)? true : false;
	var i = str.length;
	while (i > 1) {
		if (str.charAt(i - 1) >= '0' && str.charAt(i - 1) <= '9')
			i--;
		else
			return true;
	}
	if (str.charAt(i - 1) >= '1' && str.charAt(i - 1) <= '9')
		i--;
	else
		return true;
	return false;
}

function round(num) {
	var result = "";
	var tmp = "" + Math.round(100 * num);
	var len = tmp.length ;
	var i = 0;
	var j = len % 3;
	var dot = false;
	result += tmp.charAt(i);
	i++;
	while (i < len - 2) {
		if (j == 0) {
			result += " " + tmp.charAt(i);
			j = 3;
		}
		else
			result += tmp.charAt(i);
		i++;
		j--;
	}
	if (i == len - 2) {
		result += ".";
		dot = true;
	}
	while (i < len) {
		result += tmp.charAt(i);
		i++;
	}
	if (dot == false && len < 3)
		if (len == 1)
			result = "0.0" + result;
		else if (len == 2)
			result = "0." + result;
	return result;
}

function pFloat(v) {
	e = '' + v;
	e = e.replace(/,/, '.');
	return parseFloat(e);
}

function calculate(form) {
	var error = false;
	var errorMessage = new Array();
	var FV = 0;
	var i = 0;
	var ref = 0;
	for (var c = 0; c < form.length; c++) {
		var e = form.elements[c];
		switch(e.name) {
		case "S":
			var S = pFloat(e.value);
			if (isNaN(S) || wrong(e.value)) {
				error = true;
				errorMessage.push("Wprowadź poprawną kwotę kredytu!");
			}
			break;
		case "R":
			var R = pFloat(e.value);
			if (isNaN(R) || wrong(e.value)) {
				error = true;
				errorMessage.push("Wprowadź poprawne oprocentowanie nominalne!");
			}
			R /= 100; // w %
			break;
		case "p": // credit period
			var p = pFloat(e.value);
			if (isNaN(p) || wrongint(e.value)) {
				error = true;
				errorMessage.push("Wprowadź poprawną liczbę okresu kredytowego!");
			}
			break;
		case "u1": // unit of credit period
			var u1;
/*
			if (form.u1[0].checked)
				u1 = 52;
			else if (form.u1[1].checked)
				u1 = 12;
			else if (form.u1[2].checked)
				u1 = 1;
			else {
				error = true;
				errorMessage.push("Wprowadź poprawną jednostkę okresu kredytowego!");
			}
*/
			break;
		case "m": // capitalization
			var m = pFloat(e.value);
			if (isNaN(m) || wrongint(e.value)) {
				error = true;
				errorMessage.push("Wprowadź poprawną liczbę kapitalizacji!");
			}
			break;
		case "u2": // unit of capitalization
			var u2;
/*
			if (form.u2[0].checked)
				u2 = 52;
			else if (form.u2[1].checked)
				u2 = 12;
			else {
				error = true;
				errorMessage.push("Wprowadź poprawną jednostkę okresu kredytowego!");
			}
*/
			break;
		case "f": // instalment fraquancy
			var f = pFloat(e.value);
			if (isNaN(f) || wrongint(e.value)) {
				error = true;
				errorMessage.push("Wprowadź poprawną liczbę okresu płatności!");
			}
			break;
		case "u3": // unit of fraquncy
			var u3;
/*			if (form.u3[0].checked)
				u3 = 52;
			else if (form.u3[1].checked)
				u3 = 12;
			else {
				error = true;
				errorMessage.push("Wprowadź poprawną jednostkę okresu płatności raty!");
			}
*/
			break;
		case "t": // type
			var t;
			if (form.t[0].checked)
				t = 0;
			else if (form.t[1].checked)
				t = 1;
			else {
				error = true;
				errorMessage.push("Wprowadź poprawny rodzaj raty!");
			}
			break;
		case "cc": // cost of credit
			var cc = c;
			break;
		case "i": // interest
			var i = c;
			break
		case "ref": // efficient rate
			var ref = c;
			break
		default:
			break;
		}
	}
	u1=1; u2=u3=12;
	if ((p * u3) % (f * u1) != 0) {
		errorMessage.push("Podany okres kredytowania nie pasuje do okresu płatności rat!");
		error = true;
	}
	if (error) {
		alert(errorMessage.join("\n"));
		form.elements[cc].value = "";
		form.elements[i].value = "";
		form.elements[ref].value = "";
		return false;
	}
	var n = p * u3 / (f * u1); // number of instalment
	var r = Math.pow(1 + R * m / u2, u2 * f / (m * u3)) - 1; // real rate
	var CC;
	var I;
	if (t == 0) {
		CC = n * r * S / (1 - 1 / Math.pow(1 + r, n));
		I = CC - S;
		form.elements[cc].value = round(CC);
		form.elements[i].value = round(I);
	} else if (t == 1) {
		I = r * S * (n + 1) / 2;
		CC = S + I;
		form.elements[cc].value = round(CC);
		form.elements[i].value = round(I);
	}
	form.elements[ref].value = round(100 * (Math.pow(1 + R * m / u2, u2 / m) - 1));
	
	var plan;
	plan  = head();
	plan += main(S, r, n, t);
	plan += tail(CC, I, S);
	
	document.getElementById('plan').innerHTML = plan;

	return false;	//zmień na true jeżeli chcesz przesłać na serwer
}

function head() {
	var out;
	out  = '<br><table border = "0" cellpadding = "0" align = "center" style="text-align: center; ">';
	out += '<tr><td colspan="4"><b> Plan spłaty kredytu: </b></td></tr>';
	out += '  </table>';
	out += '<table border = "0" cellpadding = "0" align = "center" style="text-align: center; font-size: 11px; ">';
	out += '  <thead>';
	out += '    <td width = "60" class = "t2"><b> nr. raty </b></td>';
	out += '    <td width = "80" class = "t2"><b> rata </b></td>';
	out += '    <td width = "80" class = "t2"><b> rata odsetkowa </b></td>';
	out += '    <td width = "80" class = "t2"><b> rata kapitałowa </b></td>';
	out += '  </thead>';
	return out;
}

function main(S, r, n, t) {
	var j;
	var Rk;
	var Zk;
	var Ak;
	var design;
	var out = "";
	if (t == 0) {
		Rk = r * S / (1 - 1 / Math.pow(1 + r, n));
		for (j = 1; j <= n; j++)
		{
			Ak = (Rk - S * r) * Math.pow(1 + r, j - 1);
			Zk = Rk - (Rk - S * r) * Math.pow(1 + r, j - 1);
		
			design = ((j + 1) % 2 + 1);
			out += '<tr>';
			out += '  <td class = "r' + design + '"> ' + j + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Rk) + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Zk) + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Ak) + ' </td>';
			out += '</tr>';
		}
	} else if (t == 1) {
		Ak = S / n;
		for (j = 1; j <= n; j++)
		{
			Rk = S / n + S * (1 - (j - 1) / n) * r;
			Zk = S * (1 - (j - 1) / n) * r;
		
			design = ((j + 1) % 2 + 1);
			out += '<tr>';
			out += '  <td class = "r' + design + '"> ' + j + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Rk) + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Zk) + ' </td>';
			out += '  <td class = "r' + design + '"> ' + round(Ak) + ' </td>';
			out += '</tr>';
		}
	}
	return out;
}

function tail(CC, I, S) {
	var out;
	out  = '<tfoot>';
	out += '  <td class = "t1"><b> w sumie </b></td>';
	out += '  <td class = "t1"><b> ' + round(CC) + ' </b></td>';
	out += '  <td class = "t1"><b> ' + round(I) + ' </b></td>';
	out += '  <td class = "t1"><b> ' + round(S) + ' </b></td>';
	out += '</tfoot>';
	out += '</table>';	
	out += '<table style="background: transparent url(../../analizy/images/line.png) 0px 0px no-repeat">';
	out += '<thead>';
	out += '<tr><td>rata</td><td>rata odsetkowa</td><td>rata kapitałowa</td></tr>';
	out += '</thead>';
	out += '<tr><td>' + round(CC) + '</td><td>' + round(I) + '</td><td>' + round(S) + '</td><td></tr>';
	out += '</table>';
	return out;
}

