function wrong(str) {	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) {	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 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 = parseFloat(e.value);			if (isNaN(S) || wrong(e.value)) {				error = true;				errorMessage.push("Wprowadź poprawną kwotę kredytu!");			}			break;		case "R":			var R = parseFloat(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 = parseFloat(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 = parseFloat(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 = parseFloat(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;		}	}	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 </b></td>';	out += '    <td width = "80" class = "t2"><b> rata </b></td>';	out += '    <td width = "80" class = "t2"><b> odsetki </b></td>';	out += '    <td width = "80" class = "t2"><b> kapitał </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>';		return out;}