	function checkInput(checkObj, e) {
		var ie = (document.all) ? true : false;

		if (!ie) {
			if (((e.keyCode >= 33) && (e.keyCode <= 40)) || (e.keyCode == 45)
				|| (e.keyCode == 46) || (e.keyCode == 8) ||
				(e.keyCode == 9) || (e.keyCode == 13) || (e.keyCode == 27)) {
				return true;
			}

			if (((e.which < 48) || (e.which > 57)) && (e.which != 46)) {
				return false;
			}

			if ((e.which == 46) && (checkObj.value.indexOf('.') >= 0)) {
				return false;
			}

			if ((e.which == 46) && (checkObj.value == "")) { return false; }
		}
		else {
			if (((e.keyCode < 48) || (e.keyCode > 57)) && (e.keyCode != 46)) {
				return false;
			}
	
			if ((e.keyCode == 46) && (checkObj.value.indexOf('.') >= 0)) {
				return false;
			}

			if ((e.keyCode == 46) && (checkObj.value == "")) { return false; }
		}
		return true;
	}

	//	Основная функция. По переданному параметру определяем в каком поле были сделаны
	//	изменения и соответсвено расчитываем все остальные. Всего 4 варианта параметра "from":
	//	1. "source" - изменили начальную сумму
	//	2. "target" - изменили итоговую сумму
	//	3. "sourceFull" - изменили начальную сумму с комиссией
	//	4. "targetFull" - изменили итоговую сумму с комиссией
	function moneyCount(from, suffix) {
		var sourceValue = document.getElementById("source_value" + (suffix ? suffix : ""));
		var sourceFull = document.getElementById("source_full" + (suffix ? suffix : ""));
		var targetValue = document.getElementById("target_value" + (suffix ? suffix : ""));
		var targetFull = document.getElementById("target_full" + (suffix ? suffix : ""));
		switch(from) {
			case "source":
				//	Два след. оператора if() нужны для того, чтобы пользоветель не смог ввести больше 2
				//	цифр после десятичной точки и не мог ввести точку в совсем пустое поле.
				if(sourceValue.value.charAt(sourceValue.value.length - 4) == ".") {
					sourceValue.value = (Math.floor(sourceValue.value * div) / div).toFixed(precision);
				}
				if(sourceValue.value == ".") { sourceValue.value = ""; }

				sourceChange(suffix);
				break;
			case "sourceFull":
				if(sourceFull.value.charAt(sourceFull.value.length - 4) == ".") {
					sourceFull.value = (Math.floor(sourceFull.value * div) / div).toFixed(precision);
				}
				if(sourceFull.value == ".") { sourceFull.value = ""; }
				
				sourceFullChange(suffix);
				break;
			case "target":
				if(targetValue.value.charAt(targetValue.value.length - 4) == ".") {
					targetValue.value = (Math.floor(targetValue.value * div) / div).toFixed(precision);
				}
				if(targetValue.value == ".") { targetValue.value = ""; }

				targetChange(suffix);
				break;
			case "targetFull":
				if(targetFull.value.charAt(targetFull.value.length - 4) == ".") {
					targetFull.value = (Math.floor(targetFull.value * div) / div).toFixed(precision);
				}
				if(targetFull.value == ".") { targetFull.value = ""; }

				targetFullChange(suffix);
				break;
		}
		
		return;
	}

	function sourceChange(suffix)
	{
		if (payer || 1==1) { sourceFullFromSourceCalc(suffix); }
		targetFromSourceCalc(suffix);
		if (recipient) { targetFullFromTargetCalc(suffix); }
		return;
	}
	
	function sourceFullChange(suffix)
	{
		sourceFromSourceFullCalc(suffix);
		targetFromSourceCalc(suffix);
		if (recipient) { targetFullFromTargetCalc(suffix); }
		return;
	}

	function targetChange(suffix)
	{
		if (recipient) { targetFullFromTargetCalc(suffix); }
		sourceFromTargetCalc(suffix);
		if (payer) { sourceFullFromSourceCalc(suffix); }
		return;
	}
	
	function targetFullChange(suffix)
	{
		targetFromTargetFullCalc(suffix);
		sourceFromTargetCalc(suffix);
		if (payer) { sourceFullFromSourceCalc(suffix); }
		return;
	}
	
	//	Дальше чистая математика.
	function targetFromSourceCalc(suffix)
	{
		var sourceValue = document.getElementById("source_value" + (suffix ? suffix : ""));
		var targetValue = document.getElementById("target_value" + (suffix ? suffix : ""));
		targetValue.value = (Math.floor(sourceValue.value * (sourceMaster == 1 ? rate : 1/rate) * div) / div).toFixed(precision);
		return;
	}
	
	function sourceFromTargetCalc(suffix) {
		var sourceValue = document.getElementById("source_value" + (suffix ? suffix : ""));
		var targetValue = document.getElementById("target_value" + (suffix ? suffix : ""));
		sourceValue.value = (Math.ceil(targetValue.value * (sourceMaster == 1 ? 1/rate : rate) * div) / div).toFixed(precision);
		return;
	}
	
	function sourceFullFromSourceCalc(suffix) {
		var sourceValue = document.getElementById("source_value" + (suffix ? suffix : ""));
		var sourceFull = document.getElementById("source_full" + (suffix ? suffix : ""));
		sourceFull.value = Math.round((sourceValue.value - 0 + getFindersFee(sourceCurrency, sourceValue.value)) * div) / div;
		sourceFull.value = sourceValue.value == 0 ? 0 : Number(sourceFull.value).toFixed(precision);
		return;
	}
	
	function sourceFromSourceFullCalc(suffix) {
		var sourceValue = document.getElementById("source_value" + (suffix ? suffix : ""));
		var sourceFull = document.getElementById("source_full" + (suffix ? suffix : ""));
		sourceValue.value = (Math.round(howMuchToSendToPartner(sourceCurrency, sourceFull.value) * div) / div).toFixed(precision);
		return;
	}
	
	function targetFullFromTargetCalc(suffix) {
		var targetValue = document.getElementById("target_value" + (suffix ? suffix : ""));
		var targetFull = document.getElementById("target_full" + (suffix ? suffix : ""));
		targetFull.value = Math.round(realAmount(targetCurrency, targetValue.value) * div) / div;
		targetFull.value = targetFull.value < 0 ? 0 : Number(targetFull.value).toFixed(precision);
		return;
	}
	
	function targetFromTargetFullCalc(suffix) {
		var targetValue = document.getElementById("target_value" + (suffix ? suffix : ""));
		var targetFull = document.getElementById("target_full" + (suffix ? suffix : ""));
		targetValue.value = (Math.round(howMuchToSend(targetCurrency, targetFull.value) * div) / div).toFixed(precision);
		return;
	}


	function calculateEconomy()
	{
		var sourceValue = document.getElementById("source_value").value;

		// {{{ вычисление суммы для UT
		var utAmount = 0;
		if (_rates.UT.m)
		{
			utAmount = Math.floor(sourceValue * _rates.UT.r * div) / div;
		}
		else
		{
			utAmount = Math.floor(sourceValue / _rates.UT.r * div) / div;
		}
		// }}}
		
		// {{{ вычисление суммы для ST
		var stAmount = 0;
		if (_rates.ST.m)
		{
			stAmount = Math.floor(sourceValue * _rates.ST.r * div) / div;
		}
		else
		{
			stAmount = Math.floor(sourceValue / _rates.ST.r * div) / div;
		}
		// }}}
		
		document.getElementById("economy").innerHTML = (stAmount - utAmount).toFixed(2) + " " + targetCurrency;
	}
