      function zHCIncome(vEvent)
      {
        //if (vEvent.propertyName != "value") return;
				var nIncome = zStrToInt(document.forms["calc"].elements["Income"].value);
				if (nIncome > 0)
				{
        	document.forms["calc"].elements["MaxSum"].value = nIncome * 30;
        	document.forms["calc"].elements["MaxPay"].value = (nIncome * 4) / 10;
        }
				else
				{
        	document.forms["calc"].elements["MaxSum"].value = "";
        	document.forms["calc"].elements["MaxPay"].value = "";
				}
				zHCMinPay();
			} //zHCIncome
      /* -------------------------------------------------------------------------------- */
      function zHCSum(vEvent)
      {
        //if (vEvent.propertyName != "value") return;
        var vSum = document.forms["calc"].elements["Sum"];
        var nIncome = zStrToInt(document.forms["calc"].elements["Income"].value);
        var nMaxSum = zStrToInt(document.forms["calc"].elements["MaxSum"].value);
				if (nIncome > 0 && zStrToInt(vSum.value) > nMaxSum)
					vSum.style.color = "red";
				else
					vSum.style.color = "#336633";
			} //zHCSum
      /* -------------------------------------------------------------------------------- */
      function zHCMinPay()
      {
				var vMinPay = document.forms["calc"].elements["MinPay"];
				var nMinPay = zStrToInt(vMinPay.value);
				var nMaxPay = zStrToInt(document.forms["calc"].elements["MaxPay"].value);
				if (nMinPay > 0 && nMaxPay > 0 && nMaxPay < nMinPay)
					vMinPay.style.color = "red";
				else
					vMinPay.style.color = "gray";
      } //zHCMinPay
      /* -------------------------------------------------------------------------------- */
      function zHCPeriod(obj)
      {
        //if (event.propertyName != "value") return;
        //if (zStrToInt(obj.value) < 1) obj.value = "";
        document.forms["calc"].elements["Res1"].value = "";
        document.forms["calc"].elements["OverPay"].value = "";
			} //zHCPeriod
      /* -------------------------------------------------------------------------------- */
      function zHCPayment(obj)
      {
        //if (event.propertyName != "value") return;
        //if (zStrToInt(obj.value) < 1) obj.value = "";
        document.forms["calc"].elements["Res2"].value = "";
        document.forms["calc"].elements["OverPay"].value = "";
			} //zHCPayment
      /* -------------------------------------------------------------------------------- */
      function zHCSource(vEvent)
      {
        //if (vEvent.propertyName != "value") return;
        var nSum = zStrToInt(document.forms["calc"].elements["Sum"].value);
        var nMonthly = zStrToInt(document.forms["calc"].elements["Percent"].value) / 1200;
        document.forms["calc"].elements["Res1"].value = "";
        document.forms["calc"].elements["Res2"].value = "";
        document.forms["calc"].elements["OverPay"].value = "";
				var nMinPay = Math.round(nSum * nMonthly);
				if (nMinPay > 0) nMinPay++;
				if (nMinPay < 1)
          document.forms["calc"].elements["MinPay"].value = "";
				else
          document.forms["calc"].elements["MinPay"].value = nMinPay;
        /*
        var vMaxPeriod = document.forms["calc"].elements["MaxPeriod"];
        if (nSum < 1 || nMonthly <= 0)
          vMaxPeriod.value = "";
				else
				{
					var nMaxPeriod = 1 - Math.log(1 - nSum * nMonthly / nMinPay) / Math.log(1 + nMonthly);
					nMaxPeriod = Math.round(nMaxPeriod / 12 * 10) / 10;
        	vMaxPeriod.value = nMaxPeriod;
          if (nMaxPeriod > 20)
            vMaxPeriod.style.color = "red";
					else
            vMaxPeriod.style.color = "gray";
				}
        */
				zHCMinPay();
      } //zHCSource
      /* -------------------------------------------------------------------------------- */
      function zHCLoan(nFlag)
      {
        var nSum = zStrToInt(document.forms["calc"].elements["Sum"].value);
        var nMonthly = zStrToInt(document.forms["calc"].elements["Percent"].value) / 1200;
        if (nSum < 1 || nMonthly <= 0) return(false);
				if (nFlag == 1)
        {
          var nMonthes = document.forms["calc"].elements["Period"].value * 12;
          if (nMonthes < 1) return(false);
          document.forms["calc"].elements["Payment"].value = "";
          document.forms["calc"].elements["Res2"].value = "";
          var vRes1 = document.forms["calc"].elements["Res1"];
          var nPayment = nSum * nMonthly / (1 - 1 / Math.pow((1 + nMonthly), nMonthes - 1));
          vRes1.value = Math.round(nPayment * 100) / 100;
          var nMaxPay = zStrToInt(document.forms["calc"].elements["MaxPay"].value);
          if (nMaxPay > 0 && zStrToInt(vRes1.value) > nMaxPay)
            vRes1.style.color = "red";
          else
            vRes1.style.color = "gray";
          document.forms["calc"].elements["OverPay"].value = Math.round(nPayment * nMonthes / nSum * 100) / 100;
          document.forms["calc"].elements["OverPay"].style.color = "gray";
        }
        else if (nFlag == 2)
        {
          var nPayment = zStrToInt(document.forms["calc"].elements["Payment"].value);
          if (nPayment < 1) return(false);
          document.forms["calc"].elements["Period"].value = "";
          document.forms["calc"].elements["Res1"].value = "";
          var vRes2 = document.forms["calc"].elements["Res2"];
          if (nPayment > nSum * nMonthly)
          {
            var nMonthes = 1 - Math.log(1 - nSum * nMonthly / nPayment) / Math.log(1 + nMonthly);
            document.forms["calc"].elements["OverPay"].value = Math.round(nPayment * nMonthes / nSum * 100) / 100;
            document.forms["calc"].elements["OverPay"].style.color = "gray";
            vRes2.value = Math.round(nMonthes / 12 * 10) / 10;
            vRes2.style.color = "gray";
            if (zStrToInt(vRes2.value) > 20)
              vRes2.style.color = "red";
            else
              vRes2.style.color = "gray";
          }
          else
          {
            vRes2.value = document.getElementById("infin").innerText;
            document.forms["calc"].elements["OverPay"].value = document.getElementById("infin").innerText;
            vRes2.style.color = "red";
						document.forms["calc"].elements["OverPay"].style.color = "red";
          }
        }
        return(false);
      } //zHCLoan
      /* -------------------------------------------------------------------------------- */
      function zStrToInt(sPar, bFloat)
      {
        if (sPar.length == 0 || isNaN(sPar) || sPar == 0) return(0);
        while (sPar.substring(0, 1) == "0")
          sPar = sPar.substring(1, sPar.length);
        if (bFloat == true)
          return(parseFloat(sPar));
        else
          return(parseInt(sPar));
      } //zStrToInt
      /* -------------------------------------------------------------------------------- */
      function zNumericField(obj, bFloat)
      {
        //if (event.propertyName != "value") return;
        if (bFloat == true)
          var nValue = parseFloat(obj.value);
        else
          var nValue = parseInt(obj.value);

				if (obj.value.toString() == nValue.toString() || obj.value.length == 0)
          ; //do nothing
        else if (isNaN(nValue))
          obj.value = "";
				else if (bFloat && obj.value.toString() == nValue.toString() + ".")
          ; //do nothing
        else if (obj.value != nValue)
          obj.value = nValue;
      } //zNumericField
      /* -------------------------------------------------------------------------------- */
