   	function round2(n)
	{
		/*
		var str = ''+n;
		var nDot = str.lastIndexOf('.');
		var nLen = str.length;
				
		if (nLen > nDot+3 && nDot > -1)
		{
			return str.substring(0, nDot+3);
		}	
		else
		{
			return str;
		}		
		*/
		return ''+ Math.round(n*100)/100
	}	

   	function round3(n)
	{
		/*
		var str = ''+n;
		var nDot = str.lastIndexOf('.');
		var nLen = str.length;
				
		if (nLen > nDot+4 && nDot > -1)
		{
			return str.substring(0, nDot+4);
		}	
		else
		{
			return str;
		}	
		*/
		return ''+ Math.round(n*1000)/1000
	}	
	
   	function round4(n)
	{
		/*
		var str = ''+n;
		var nDot = str.lastIndexOf('.');
		var nLen = str.length;
				
		if (nLen > nDot+6 && nDot > -1)
		{
			return str.substring(0, nDot+6);
		}	
		else
		{
			return str;
		}	
		*/
		return ''+ Math.round(n*10000)/10000
	}		
	
	function repl(source, a, b)
	{
		var dest = source;
		var nFound = dest.indexOf(a);
		var temp1, temp2;

		while (nFound > 0)
		{			
			temp1 = dest.substring(0, nFound);
			temp2 = '';
			if (dest.length > nFound+1)
			{
				temp2 = dest.substring(nFound+1, dest.length);
			}
			dest = temp1 + b + temp2;
			nFound = dest.indexOf(a);
		}
		return dest;
	}		
	
	function replace(i)
	{
		var sProduct, sPrice;
		sProduct = eval('CalcForm.Product' + i + '.value;');
		sPrice = eval('CalcForm.Price' + i + '.value;');			
		sProduct = repl(sProduct, ',', '.');
		sPrice = repl(sPrice, ',', '.');		
		if (eval('CalcForm.Product' + i + '.value != sProduct;'))				
			eval('CalcForm.Product' + i + '.value = sProduct;');
		if (eval('CalcForm.Price' + i + '.value != sPrice;'))	
			eval('CalcForm.Price' + i + '.value = sPrice;');										
	}
		
	function calc(i, n)
	{
		replace(i);
	
		var nAmount = eval('CalcForm.Product' + i + '.value;');
		var nPrice = eval('CalcForm.Price' + i + '.value;');
		var nDiv = eval('CalcForm.Divider' + i + '.value;');
		var nResult;

		if (isNaN(nAmount) || isNaN(nPrice) || isNaN(nDiv))
		{
			eval('CalcForm.Sum' + i + '.value = "?";')
		}
		else
		{
			nResult = parseFloat(nAmount) * parseFloat(nPrice) * parseFloat(nDiv);
			if (isNaN(nResult))
				eval('CalcForm.Sum' + i + '.value = "?";')
			else
				eval('CalcForm.Sum' + i + '.value = round2(nResult);')
		}		
		sum(n);
	}	
	
	function change(i, n)
	{
		replace(i);
	
		var nAmount  = eval('CalcForm.Amount' + i + '.value;');
		var nProduct = eval('CalcForm.Product' + i + '.value;');
		var nOthProduct, nOthSzt, nOthKg;
		
		if (!(isNaN(nAmount) || isNaN(nProduct)))
		{
			if (!CalcForm.Proportion.checked)
			{
				for (var j=1; j<n+1; j++)
				{				
					if (j != i)
					{				
						nOthProduct = eval('CalcForm.Amount' + j + '.value;')	
						if (!isNaN(nOthProduct))
						{
							nOthProduct = nOthProduct * parseFloat(nProduct) / parseFloat(nAmount);
							if (isNaN(nOthProduct) || parseFloat(nAmount) == 0)
								eval('CalcForm.Product' + j + '.value = "?";')	
							else
								eval('CalcForm.Product' + j + '.value = round2(nOthProduct);')	
						}
						calc(j, n);
					}
				}		
			}
			calcMass3(n);
		}
		calc(i, n);
	}		
	
	function calcMass3(nAll)
	{
		var nAct = 0;
		var nDiv = 1;
		var nActPart = 0;
		var nSum = 0;
		var nSumPart = 0;
		var bNone = false;
		var bNonePart = false;
		
		for (var j=1; j<nAll+1; j++)
		{				
			nAct = eval('CalcForm.Product' + j + '.value;');	
			nDiv = eval('CalcForm.Divider' + j + '.value;');
			
			if (isNaN(nAct))
				bNone = true;
			else
				nSum = nSum + (parseFloat(nAct) * parseFloat(nDiv));
				
			nActPart = eval('CalcForm.DoughPart' + j + '.value;');	
			if (isNaN(nAct))
				bNonePart = true;
			else
			{
				if (nActPart == '1') 
					nSumPart = nSumPart + (parseFloat(nAct) * parseFloat(nDiv));
			}
		}	
		
		if (bNone)
			eval('CalcForm.KgSum.value = "?";');
		else
		{
			//nSum = round2(nSum/1000);
			nSum = round2(nSum);
			if (isNaN(nSum))
				eval('CalcForm.KgSum.value = "?";');
			else
				eval('CalcForm.KgSum.value = nSum;');
		}
		
		if (bNonePart)
			eval('CalcForm.KgSumPart.value = "?";');
		else
		{
			//nSum = round2(nSum/1000);
			nSumPart = round2(nSumPart);
			if (isNaN(nSumPart))
				eval('CalcForm.KgSumPart.value = "?";');
			else
				eval('CalcForm.KgSumPart.value = nSumPart;');
		}
		
		calcSzt();
		calcLoss();
	}
	
	
	function sum(n)
	{
		var nEl, bChk;
		var nSum = 0;
		
		for (var i=1; i<n+1; i++)
		{				
			nEl = eval('CalcForm.Sum' + i + '.value;');
			//bChk = eval('CalcForm.Chk' + i + '.checked;');
			if (nEl == '') //|| !bChk)
				nEl = 0;
			nSum = nSum + parseFloat(nEl);
		}
		if (isNaN(nSum))
		{
			eval('CalcForm.Sum.value = "?";')
		}
		else
		{				
			eval('CalcForm.Sum.value = round2(nSum);')
		}
		doCalc();
	}		
	
	function recount(n)
	{
		sSzt = CalcForm.Szt.value;
		// #
		sSztOrg = CalcForm.KgSumOrg.value / CalcForm.KgSzt.value;
		
		for (var j=1; j<n+1; j++)
		{				
			if (isNaN(sSzt))
			{
				eval('CalcForm.Product' + j + '.value = "?";')	
			}
			else
			{
				nOthProduct = eval('CalcForm.Amount' + j + '.value;')	
				if (!isNaN(nOthProduct))
				{
					nOthProduct = nOthProduct * parseFloat(sSzt) / parseFloat(sSztOrg);
					if (isNaN(nOthProduct) || parseFloat(sSztOrg) == 0)
						eval('CalcForm.Product' + j + '.value = "?";')	
					else
						eval('CalcForm.Product' + j + '.value = round2(nOthProduct);')	
				}				
			}
			calc(j, n);
		}		
		
		//doCalc();
	}	

	function recount2(n)
	{
		sKg = CalcForm.KgSum.value;
		// #
		sKgOrg = CalcForm.KgSumOrg.value;
		
		for (var j=1; j<n+1; j++)
		{				
			if (isNaN(sKg))
			{
				eval('CalcForm.Product' + j + '.value = "?";')	
			}
			else
			{
				nOthProduct = eval('CalcForm.Amount' + j + '.value;')	
				if (!isNaN(nOthProduct))
				{
					nOthProduct = nOthProduct * parseFloat(sKg) / parseFloat(sKgOrg);
					if (isNaN(nOthProduct) || parseFloat(sKgOrg) == 0)
						eval('CalcForm.Product' + j + '.value = "?";')	
					else
						eval('CalcForm.Product' + j + '.value = round2(nOthProduct);')	
				}				
			}
			calc(j, n);
		}		
		
		//doCalc();
	}	
	
	function calcMass(nBase)
	{
		var nAmount, nProduct
		var nOthProduct, nOthSzt, nOthKg;
		
		if (nBase > 0)
		{
			nAmount  = eval('CalcForm.Amount' + nBase + '.value;');
			nProduct = eval('CalcForm.Product' + nBase + '.value;');

			nOthProduct = eval('CalcForm.KgSumOrg.value;')	
			if (!isNaN(nOthProduct))
			{
				nOthProduct = nOthProduct * parseFloat(nProduct) / parseFloat(nAmount);
				if (isNaN(nOthProduct) || parseFloat(nAmount) == 0)
					eval('CalcForm.KgSum.value = "?";')	
				else
					eval('CalcForm.KgSum.value = round2(nOthProduct);')	
			}	
		}	
		
		calcSzt();				
		calcLoss();
		calcCosts();
	}
	
	function calcSzt()
	{
		//nMass = CalcForm.KgSum.value;	
		nMass = CalcForm.KgSumPart.value;	
		nSzt = CalcForm.KgSzt.value;
		if (isNaN(nMass) || isNaN(nSzt))
		{
			CalcForm.Szt.value = "?";
		}
		else
		{
			if (nMass == 0 || nSzt == 0)
				CalcForm.Szt.value = "?";
			else
				CalcForm.Szt.value = round2(parseFloat(nMass) / parseFloat(nSzt));
		}	
	}	
	
	function calcLoss()
	{
		CalcForm.Loss.value = repl(CalcForm.Loss.value, ',', '.');
	
		nLoss = CalcForm.Loss.value;
		nMass = CalcForm.KgSum.value;
		nSingle = CalcForm.KgSzt.value;
		
		if (isNaN(nLoss) || isNaN(nMass))
		{
			CalcForm.KgSum2.value = "?";
		}
		else
		{
			if (nMass == 0 || nLoss == '')
				CalcForm.KgSum2.value = "?";
			else
				CalcForm.KgSum2.value = round2(parseFloat(nMass) * (100 - parseFloat(nLoss)) / 100);
		}			

		if (isNaN(nSingle) || isNaN(nLoss))
		{
			CalcForm.KgSzt2.value = "?";
		}
		else
		{
			if (nSingle == 0 || nLoss == '')
				CalcForm.KgSzt2.value = "?";
			else
				CalcForm.KgSzt2.value = round2(parseFloat(nSingle) * (100 - parseFloat(nLoss)) / 100);
		}			
		
		calcCosts();
	}
	
	function calcSingle()
	{
		CalcForm.KgSzt.value = repl(CalcForm.KgSzt.value, ',', '.');
		calcSzt();
		calcLoss();
		calcCosts();
	}
	
	function calcCosts()
	{
		nCost = CalcForm.Sum.value;
		nMass = CalcForm.KgSum2.value;
		nSzt = CalcForm.Szt.value;
		
		if (isNaN(nCost) || isNaN(nMass))
		{
			CalcForm.SumKg.value = "?";
		}
		else
		{
			if (nCost == 0 || nMass == 0)
				CalcForm.SumKg.value = "?";
			else
				CalcForm.SumKg.value = round2(parseFloat(nCost) / parseFloat(nMass));
		}		
		
		if (isNaN(nCost) || isNaN(nSzt))
		{
			CalcForm.SumSzt.value = "?";
		}
		else
		{
			if (nCost == 0 || nSzt == 0)
				CalcForm.SumSzt.value = "?";
			else
				CalcForm.SumSzt.value = round3(parseFloat(nCost) / parseFloat(nSzt));
		}							
	}
	
	function calcSzt2(n)
	{
		CalcForm.Szt.value = repl(CalcForm.Szt.value, ',', '.');

		// #
		nSztOrg = CalcForm.KgSumOrg.value / CalcForm.KgSzt.value;
		nSzt = CalcForm.Szt.value;	
		nMass = CalcForm.KgSumOrg.value
		if (!isNaN(nSzt) & !isNaN(nMass))
		{
			// #
			nMass = parseFloat(nMass) * parseFloat(nSzt) / parseFloat(nSztOrg);
			if (isNaN(nMass) || parseFloat(nSzt) == 0)
				eval('CalcForm.KgSum.value = "?";')	
			else
				eval('CalcForm.KgSum.value = round2(nMass);')	
		}	
		
		nLoss = CalcForm.Loss.value;
		nMass = CalcForm.KgSum.value;
		
		if (isNaN(nLoss) || isNaN(nMass))
		{
			CalcForm.KgSum2.value = "?";
		}
		else
		{
			if (nMass == 0 || nLoss == '')
				CalcForm.KgSum2.value = "?";
			else
				CalcForm.KgSum2.value = round2(parseFloat(nMass) * (100 - parseFloat(nLoss)) / 100);
		}
		
		recount(n);
	}

	function calcMass2(n)
	{
		CalcForm.KgSum2.value = repl(CalcForm.KgSum2.value, ',', '.');
		// #
		CalcForm.KgSum.value = parseFloat(CalcForm.KgSum2.value) * (100 + parseFloat(CalcForm.Loss.value)) / 100;
		
		nSzt2 = CalcForm.KgSzt2.value;
		nMass2 = CalcForm.KgSum2.value;
		
		if (isNaN(nSzt2) || isNaN(nMass2))
		{
			CalcForm.Szt.value = "?";
		}
		else
		{
			if (nSzt2 == 0 || nMass2 == 0)
				CalcForm.Szt.value = "?";
			else
				CalcForm.Szt.value = round2(parseFloat(nMass2) / parseFloat(nSzt2));
		}
		
		recount2(n);
	}
	
	function calcSingle2()
	{
		CalcForm.KgSzt2.value = repl(CalcForm.KgSzt2.value, ',', '.');
		nLoss = CalcForm.Loss.value;
		nSingle = CalcForm.KgSzt2.value;
		
		if (isNaN(nSingle) || isNaN(nLoss))
		{
			CalcForm.KgSzt.value = "?";
		}
		else
		{
			if (nSingle == 0 || nLoss == '')
				CalcForm.KgSzt.value = "?";
			else
				CalcForm.KgSzt.value = round2(parseFloat(nSingle) * (100 + parseFloat(nLoss)) / 100);
		}			
		calcSzt();
		calcCosts();
	}
		
	function doCalc()
	{
		calcCosts();
	}

