function ipo_calc(f,type) {
	check_insumeric(f);
	eval('count_' + type);
}

function count_income() {
    var income = parse_numeric(document.forms["ipocalc"].elements["income"].value);
    if (income > 0) {
	document.forms["ipocalc"].elements["maxsum"].value = income * 30;
	document.forms["ipocalc"].elements["maxpay"].value = (income * 4) / 10;
    }
    else {
	document.forms["ipocalc"].elements["maxsum"].value = "";
	document.forms["ipocalc"].elements["maxpay"].value = "";
    }
    count_minpay();
    count_sum();
}

function count_sum() {
    var sum_inp = document.forms["ipocalc"].elements["sum"];
    var income = parse_numeric(document.forms["ipocalc"].elements["income"].value);
    var maxsum = parse_numeric(document.forms["ipocalc"].elements["maxsum"].value);
    if (income > 0 && parse_numeric(sum_inp.value) > maxsum)
	sum_inp.style.color = "red";
    else
	sum_inp.style.color = "black";
}

function count_minpay() {
    var minpay_inp = document.forms["ipocalc"].elements["minpay"];
    var minpay = parse_numeric(minpay_inp.value);
    var maxpay = parse_numeric(document.forms["ipocalc"].elements["maxpay"].value);
    if (minpay > 0 && maxpay > 0 && maxpay < minpay)
	minpay_inp.style.color = "red";
    else
	minpay_inp.style.color = "black";
}

function count_source() {
    var sum = parse_numeric(document.forms["ipocalc"].elements["sum"].value);
    var monthly_percent = parse_numeric(document.forms["ipocalc"].elements["percent"].value) / 1200;
    var minpay = Math.round(sum * monthly_percent);
    if (minpay > 0) minpay++;
    if (minpay < 1)
	document.forms["ipocalc"].elements["minpay"].value = "";
    else
	document.forms["ipocalc"].elements["minpay"].value = minpay;
    count_minpay();
    count_sum();
}

function count_loan(ltype) {

    if(ltype == 1 && document.forms["ipocalc"].elements["period"].value == '') {
	document.forms["ipocalc"].elements["payment"].value = '';
	document.forms["ipocalc"].elements["overpay"].value = '';
	return true;
    }
    if(ltype == 2 && document.forms["ipocalc"].elements["payment"].value == '') {
	document.forms["ipocalc"].elements["period"].value = '';
	document.forms["ipocalc"].elements["overpay"].value = '';
	return true;
    }

    var sum = parse_numeric(document.forms["ipocalc"].elements["sum"].value);
    var monthly_percent = parse_numeric(document.forms["ipocalc"].elements["percent"].value) / 1200;
    if (sum < 1 || monthly_percent <= 0) return(false);

    var payment_inp = document.forms["ipocalc"].elements["payment"];
    var period_inp = document.forms["ipocalc"].elements["period"];

    if (ltype == 1) {
	period_inp.style.color = "black";
	var totalmonths = document.forms["ipocalc"].elements["period"].value * 12;
	if (totalmonths < 1) return(false);
	document.forms["ipocalc"].elements["payment"].value = "";

	var payment = sum * monthly_percent / (1 - 1 / Math.pow((1 + monthly_percent), totalmonths - 1));
	payment_inp.value = Math.round(payment * 100) / 100;
	var maxpay = parse_numeric(document.forms["ipocalc"].elements["maxpay"].value);
	if (maxpay > 0 && parse_numeric(payment_inp.value) > maxpay)
	    payment_inp.style.color = "red";
	else
	    payment_inp.style.color = "black";
	document.forms["ipocalc"].elements["overpay"].value = Math.round(payment * totalmonths / sum * 100) / 100;
	document.forms["ipocalc"].elements["overpay"].style.color = "black";
    }
    else if (ltype == 2) {
	payment_inp.style.color = "black";
	var payment = parse_numeric(document.forms["ipocalc"].elements["payment"].value);
	if (payment < 1) return(false);
	document.forms["ipocalc"].elements["period"].value = "";

	if (payment > sum * monthly_percent) {
	    var totalmonths = 1 - Math.log(1 - sum * monthly_percent / payment) / Math.log(1 + monthly_percent);
	    document.forms["ipocalc"].elements["overpay"].value = Math.round(payment * totalmonths / sum * 100) / 100;
	    document.forms["ipocalc"].elements["overpay"].style.color = "black";
	    period_inp.value = Math.round(totalmonths / 12 * 10) / 10;
	    period_inp.style.color = "black";
	    if (parse_numeric(period_inp.value) > 20)
		period_inp.style.color = "red";
	    else
		period_inp.style.color = "black";
	}
	else {
	    period_inp.value = '???';
	    document.forms["ipocalc"].elements["overpay"].value = '???';
	    period_inp.style.color = "red";
	    document.forms["ipocalc"].elements["overpay"].style.color = "red";
	}
    }
    return(false);
}

function parse_numeric(str) {
    if (str.length == 0 || isNaN(str) || str == 0) return(0);
    str = str.replace(/^0+/, '');
    return(parseInt(str));
}

function check_isnumeric(f) {
   var re = /^[\d,.]*$/;
   var re1 = /,/;
   if(re.test(f.value)) {
	if(re1.test(f.value))
	   	f.value = f.value.replace(/,/g, '.');
   	return true;
   }
   else {
   	f.value = f.value.substr(0,f.value.length-1);
   	return false;
   }
}

