
function isLReserve(code)
{
	return String("[lrusd][lreur]").indexOf("[" + String(code).toLowerCase() + "]") != -1;
}

function isMoneyMail(code)
{
	return String("[moneymail rur][moneymail usd][moneymail eur]").indexOf("[" + String(code).toLowerCase() + "]") != -1;
}

function getFindersFee(currency, value) {
	result = 0.00;

	switch(currency) {
		case "WMR":
		case "WME":
		case "WMZ":
		case "WMU":
		case "WMY":
		case "WMB":
		case "WMG":
			result = getFindersFeeWM(currency, value);
			break;
		case "USD e-gold":
			result = getFindersFeeEgold(value);
			break;
		case "USD e-port":
			result = getFindersFeeEport(value);
			break;
		case "RUR Yandex":
			result = getFindersFeeYandex(value);
			break;
		case "E-dram":
			result = getFindersFeeEdram(value);
			break;
		case "MoneyMail RUR":
		case "MoneyMail EUR":
		case "MoneyMail USD":
			result = getFindersFeeMoneyMail(value);
			break;
		case "LRUSD":
		case "LREUR":
			result = getFindersFeeLReserve(currency, value);
			break;
                case "NalILS":
                case "ILS":
                case "ILS.card":
	                result = getFindersFeeILS(currency, value);
                        break;
        }
	return result;
}

function getFindersFeeWM(code, value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * wm_fee * div) / div;
	finders_fee = finders_fee >= 0.01 ? finders_fee : 0.01;
		
	if(code == "WMR" && finders_fee > wm_max_WMR) { finders_fee = wm_max_WMR; }
	if(code == "WMZ" && finders_fee > wm_max_WMZ) { finders_fee = wm_max_WMZ; }
	if(code == "WME" && finders_fee > wm_max_WME) { finders_fee = wm_max_WME; }

	if(code == "WMU" && finders_fee > wm_max_WMU) { finders_fee = wm_max_WMU; }
	if(code == "WMY" && finders_fee > wm_max_WMY) { finders_fee = wm_max_WMY; }
	if(code == "WMB" && finders_fee > wm_max_WMB) { finders_fee = wm_max_WMB; }
	if(code == "WMG" && finders_fee > wm_max_WMG) { finders_fee = wm_max_WMG; }

	return finders_fee;
}

function getFindersFeeEgold(value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * egold_fee * div) / div;
		
	if(finders_fee < 0.01) { finders_fee = 0.01; }
	finders_fee = finders_fee > egold_max ? egold_max : finders_fee;
	return finders_fee;
}

function getFindersFeeEport(value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * eport_fee * div) / div + 0.01;
	return finders_fee;
}

function getFindersFeeYandex(value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * yandex_fee * div) / div;
	return finders_fee;
}

function getFindersFeeEdram(value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * edram_fee * div) / div;
	return finders_fee;
}

function getFindersFeeMoneyMail(value) {
	var div = Math.pow(10, 2);
	var findersFee = 0.00;
	findersFee = Math.ceil(value * mm_fee * div) / div;

	return findersFee;
}

function getFindersFeeLReserve(currency, value)
{
	var div = Math.pow(10, 2);
	var findersFee = 0.00;
	switch (String(currency).toLowerCase())
	{
		case "lrusd":
			findersFee = Math.ceil(value * lrusd_fee * div) / div;
			if (findersFee < lrusd_fee_min) findersFee = lrusd_fee_min;
			if (findersFee > lrusd_fee_max) findersFee = lrusd_fee_max;
			break;
		case "lreur":
			findersFee = Math.ceil(value * lreur_fee * div) / div;
			if (findersFee < lreur_fee_min) findersFee = lreur_fee_min;
			if (findersFee > lreur_fee_max) findersFee = lreur_fee_max;
			break;
	}
	return findersFee;
}

function getFindersFeeILS(currency, value)
{
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	
	if (currency == "ILS.card")
	{
		finders_fee = ils_fee_card * value;
		finders_fee = Math.ceil(finders_fee * div) / div;
	}
	else
	{	
		try
		{
			var i = 0;
			while (value > parseFloat(ils_fee[i].max) && i < ils_fee.length)
			{
				finders_fee = ils_fee[i].value;
				i++;
			}
		}
		catch(e){}
		finders_fee = Math.ceil(finders_fee * div) / div;
	}
        finders_fee = finders_fee >= 0.01 ? finders_fee : 0.00;

        return finders_fee;

}

function howMuchToSendToPartner(currency, value) {
	var result = 0.00;
	
	if(currency == "WMR" || currency == "WMZ" || currency == "WME" || currency == "WMU" || currency == "WMY" || currency == "WMB" || currency == "WMG") {
		result = howMuchToSendToPartnerWM(currency, value);
	} else if(currency == "USD e-gold") {
		result = howMuchToSendToPartnerEGold(value);
	} else if(currency == "RUR Yandex") {
		result = howMuchToSendToPartnerYandex(value);
	} else if(currency == "E-dram") {
		result = howMuchToSendToPartnerEdram(value);
	} else if(currency == "USD e-port") {
		result = howMuchToSendToPartnerEport(value);
	} else if(isMoneyMail(currency)) {
		result = howMuchToSendToPartnerMoneyMail(value);
	} else if(isLReserve(currency)) {
		result = howMuchToSendToPartnerLReserve(currency, value);
	}
	return result;
}

function howMuchToSendToPartnerWM(code, value) {
	var howMuch = 0;
	var maxvalue = 0.00;
	var div = Math.pow(10, 2);
	
	if(code == "WMR") {
		maxvalue = wm_max_WMR * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMR) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else if(code == "WME") {
		maxvalue = wm_max_WME * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WME) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else  if(code == "WMZ") {
		maxvalue = wm_max_WMZ * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMZ) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else  if(code == "WMU") {
		maxvalue = wm_max_WMU * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMU) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else  if(code == "WMY") {
		maxvalue = wm_max_WMY * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMY) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else  if(code == "WMB") {
		maxvalue = wm_max_WMB * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMB) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	} else  if(code == "WMG") {
		maxvalue = wm_max_WMG * ((1 + wm_fee) / wm_fee);
		
		if(value > maxvalue) {
			howMuch = Math.floor((value - wm_max_WMG) * div) / div;
		} else {
			howMuch = Math.floor((value - value * (wm_fee / (1 + wm_fee))) * div) / div;
		}
	}
	return howMuch;
}

function howMuchToSendToPartnerEGold(value) { return value; }

function howMuchToSendToPartnerYandex(value) { return value; }

function howMuchToSendToPartnerEdram(value) { return value; }

function howMuchToSendToPartnerEport(value) {
	var howMuch = 0;
	var div = Math.pow(10, 2);
	howMuch = Math.floor((value - value * (eport_fee / (1 + eport_fee)) - 0.01) * div) / div;
	return howMuch;
}

function howMuchToSendToPartnerMoneyMail(value) {
	var howMuch = 0;
	var maxvalue = 0.00;
	var div = Math.pow(10, 2);
	
	howMuch = Math.floor((value - value * (mm_fee / (1 + mm_fee))) * div) / div;

	return howMuch;
}

function howMuchToSendToPartnerLReserve(currency, value)
{
	return value;
}

function howMuchToSend(code, value) {
	var howMuch = 0.00;
	
	if(code == "WMR" || code == "WMZ" || code == "WME" || code == "WMU" || code == "WMY" || code == "WMB" || code == "WMG") {
		howMuch = howMuchToSendWM(value);
	}
	
	if(code == "USD e-gold") {
		howMuch = howMuchToSendEGold(value);
	}

	if(code == "RUR Yandex") {
		howMuch = howMuchToSendYandex(value);
	}

	if(code == "E-dram") {
		howMuch = howMuchToSendEdram(value);
	}
	
	if(code == "USD e-port") {
		howMuch = howMuchToSendEport(value);
	}
	
	if(code == "USD" || code == "EUR") {
		howMuch = value;
	}
	
	if(isMoneyMail(code)) {
		howMuch = howMuchToSendMoneyMail(value);
	}

	if(isLReserve(code)) {
		howMuch = howMuchToSendLReserve(code, value);
	}

	return howMuch;
}

function howMuchToSendEGold(value) {
	var div = Math.pow(10, 2);
	var howMuch = 0.00;
	var maxValue = egold_max * ((1 - egold_fee) / egold_fee);
	
	if(value >= maxValue) { howMuch = value - 0 + egold_max; }
	else { howMuch = Math.ceil(value / (1 - egold_fee) * div) / div; }

	return howMuch;
}

function howMuchToSendEport(value) {
	return value;
}

function howMuchToSendYandex(value) {
	var div = Math.pow(10, 2);
	var howMuch = 0.00;
	howMuch = Math.ceil(value / (1 - yandex_client_fee) * div) / div;
	return howMuch;
}

function howMuchToSendEdram(value) {
	var div = Math.pow(10, 2);
	var howMuch = 0.00;
	howMuch = Math.ceil(value / (1 - edram_fee) * div) / div;
	return howMuch;
}

function howMuchToSendWM(value) {
	return value;
}

function howMuchToSendMoneyMail(value) {
	return value;
}

function howMuchToSendLReserve(currency, value)
{
	var div = Math.pow(10, 2);
	var howMuch = 0.00;
	switch (currency)
	{
		case "LRUSD":
			howMuch = Math.ceil(value / (1 - lrusd_fee) * div) / div;
			break;
		case "LREUR":
			howMuch = Math.ceil(value / (1 - lreur_fee) * div) / div;
			break;
	}
	return howMuch;
}

function realAmount(source_currency, value) {
	var result = 0;

	if(source_currency == "WME" || source_currency == "WMR" || source_currency == "WMZ" || source_currency == "WMU" || source_currency == "WMY" || source_currency == "WMB" || source_currency == "WMG") {
		result = value;
	} else if(source_currency == "USD e-gold") {
		result = value - getFindersFee(source_currency, value);
	} else if(source_currency == "USD e-port") {
		result = value;
	} else if(source_currency == "RUR Yandex") {
		result = value - getClientAsRecipientFindersFee(source_currency, value);
	} else if(source_currency == "E-dram") {
		result = value - getFindersFee(source_currency, value);
	} else if(isMoneyMail(source_currency)) {
		result = value;
	} else if(isLReserve(source_currency)) {
		result = value - getFindersFee(source_currency, value);
	}

	return result;
}

function getClientAsRecipientFindersFee(currency, value) {
	var findersFee = 0.0;

	switch(currency) {
		case "RUR Yandex":
			findersFee = getClientAsRecipientFindersFeeYandex(value);
			break;
	}

	return findersFee;
}

function getClientAsRecipientFindersFeeYandex(value) {
	var div = Math.pow(10, 2);
	var finders_fee = 0.00;
	finders_fee = Math.ceil(value * yandex_client_fee * div) / div;

	return finders_fee;
}

/*
Ф-и для расчета сумм и проверки вводимых значений при оформлении заявок
на покупку/продажк
*/
function checkInput(e)
{
	var ie = (document.all) ? true : false;
	//
	var e = e || window.event;
	var checkObj = getEventTarget(e);
	//
	if (processUnitsStr.indexOf(checkObj.name) == -1)
	{
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();	
		return true;
	}
	//
	
	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;
}
function moneyCount(e/*, from*/)
{
	//var sourceValue = document.getElementById("source_value");
	//var sourceFull = document.getElementById("source_full");
	//var targetValue = document.getElementById("target_value");
	//var targetFull = document.getElementById("target_full");
	//
	var e = e || window.event;
	var target = getEventTarget(e);
	var from = String(target.id).toLowerCase();
	//
	if(processUnitsStr.indexOf(from) == -1)
	{
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		return true;		
	}	
	//	
	switch(from)
	{
		case "source_value":			
			if(target.value.charAt(target.value.length - 4) == ".") {
				target.value = Math.floor(target.value * 100) / 100;
			}
			if(target.value == ".") { target.value = ""; }

			sourceChange();
			break;
		case "source_full":
			if(target.value.charAt(target.value.length - 4) == ".") {
				target.value = Math.floor(target.value * 100) / 100;
			}
			if(target.value == ".") { target.value = ""; }

			sourceFullChange();
			break;
		case "target_value":			
			if(target.value.charAt(target.value.length - 4) == ".") {
				target.value = Math.floor(target.value * 100) / 100;
			}
			if(target.value == ".") { target.value = ""; }

			targetChange();
			break;
		case "target_full":
			if(target.value.charAt(target.value.length - 4) == ".") {
				target.value = Math.floor(target.value * 100) / 100;
			}
			if(target.value == ".") { target.value = ""; }

			targetFullChange();
			break;
	}
	//
	return;
}

function sourceChange() {
	if(payer) { sourceFullFromSourceCalc(); }
	targetFromSourceCalc();
	if(recipient) { targetFullFromTargetCalc(); }
	return;
}

function sourceFullChange() {
	sourceFromSourceFullCalc();
	targetFromSourceCalc();
	if(recipient) { targetFullFromTargetCalc(); }
	return;
}

function targetChange() {
	if(recipient) { targetFullFromTargetCalc(); }
	sourceFromTargetCalc();
	if(payer) { sourceFullFromSourceCalc(); }
	return;
}

function targetFullChange() {
	targetFromTargetFullCalc();
	sourceFromTargetCalc();
	if(payer) { sourceFullFromSourceCalc(); }
	return;
}
//--------------------------
function targetFromSourceCalc() {
	var sourceValue = document.getElementById("source_value");
	var targetValue = document.getElementById("target_value");
	if (sourceMaster == 1) {
		targetValue.value = Math.floor(sourceValue.value * rate * 100) / 100;
	} else {
		targetValue.value = Math.floor(sourceValue.value / rate * 100) / 100;
	}
	return;
}

function sourceFromTargetCalc()
{
	var sourceValue = document.getElementById("source_value");
	var targetValue = document.getElementById("target_value");
	if (sourceMaster == 1) {
		sourceValue.value = Math.ceil(targetValue.value / rate * 100) / 100;
	} else {
		sourceValue.value = Math.ceil(targetValue.value * rate * 100) / 100;
	}
	return;
}

function sourceFullFromSourceCalc()
{
	var sourceValue = document.getElementById("source_value");
	var sourceFull = document.getElementById("source_full");
	
	var transferFee = getTransferFee();
	transferFee = Math.round((sourceMaster == 1 ? transferFee / rate : transferFee * rate) * 100) / 100;
	
	sourceFull.value = Math.round((sourceValue.value - 0 + transferFee + (typeof getFindersFee == "function"? getFindersFee(sourceCurrency, sourceValue.value) : 0) ) * 100) / 100;
	sourceFull.value = sourceValue.value == 0 ? 0 : sourceFull.value;
	return;
}

function sourceFromSourceFullCalc()
{

	var sourceValue = document.getElementById("source_value");
	var sourceFull = document.getElementById("source_full");

	var transferFee = getTransferFee();
	transferFee = Math.round((sourceMaster == 1 ? transferFee / rate : transferFee * rate) * 100) / 100;

//		if(typeof howMuchToSendToPartner == "function") sourceValue.value = Math.round(howMuchToSendToPartner(sourceCurrency, sourceFull.value) * 100) / 100;
			
	sourceValue.value = Math.ceil((sourceFull.value - transferFee - (typeof getFindersFee == "function" ? getFindersFee(sourceCurrency, sourceValue.value) : 0) ) * 100) / 100;
	sourceValue.value = sourceValue.value > 0 ? sourceValue.value : 0;
	return;
}

function targetFullFromTargetCalc() { 
	var targetValue = document.getElementById("target_value");
	var targetFull = document.getElementById("target_full");
//	targetFull.value = Math.round(realAmount(targetCurrency, targetValue.value) * 100) / 100;
	targetFull.value = targetFull.value < 0 ? 0 : targetFull.value;
	return;
}

function targetFromTargetFullCalc() {
	var targetValue = document.getElementById("target_value");
	var targetFull = document.getElementById("target_full");
	targetValue.value = Math.round(howMuchToSend(targetCurrency, targetFull.value) * 100) / 100;
	return;
}


function resetZero(field)
{
	var form_field;
	if (field == 'source_value')
		form_field = document.getElementById("source_value");
	if (field == 'target_value')
		form_field = document.getElementById("target_value");
	if (field == 'source_full')
		form_field = document.getElementById("source_full");
	if (field == 'target_full')
		form_field = document.getElementById("target_full");
	if (form_field.value == 0)
		form_field.value = "";
}
function checkSourceValueField()
{
	var field = document.getElementById("source_value").value;
	var regExp = /[^\d\.]/g ;
	var str = trim(field);
	if (str == "" || str.match(regExp))
	  document.getElementById("source_value").value = "";        
}
/*

*/
function initHandlers(e)
{
	//
	var processArr = processUnitsStr.split(";");	
	for (var i = 0; i < processArr.length; i++)
	{
		var _obj = document.getElementById(processArr[i]);
		if (_obj)
		{
			addHandler(_obj, "keypress", checkInput);
			addHandler(_obj, "keyup", moneyCount);
			addHandler(_obj, "keydown", moneyCount);
			addHandler(_obj, "focus", moneyCount);
			addHandler(_obj, "blur", moneyCount);
			addHandler(_obj, "focus", hideLetter);
			addHandler(_obj, "blur", showLetter);
		}
	}
	//
	var target = document.getElementById("source_value");
	if (target.value.charAt(target.value.length - 4) == ".") {
		target.value = Math.floor(target.value * 100) / 100;
	}
	if(target.value == ".") { target.value = ""; }	
	//
	addHandler(document.getElementById("currency"), "change", changeCurrency);
	addHandler(document.getElementById("payment_method"), "change", changePMethodInfo);
	//
	_method_id = $("#payment_method option:selected").val();
	var _curr = $("#currency option:selected").val();
	rate = _rates[_method_id][_curr].rate;
	sourceMaster = _rates[_method_id][_curr].sm;
	//
	$("#sys_fee").text(getSysFee());
	//
	sourceChange();
	//alert("Finished initialisation");
}

function changePMethodInfo(e)
{
	var e = e || window.event;
	var target = getEventTarget(e);
	var _method_id = target.options[target.selectedIndex].value;
	//	
	$("#sys_fee").text(getSysFee());	
	var _curr = $("#currency option:selected").val();
	rate = _rates[_method_id][_curr].rate;
	sourceMaster = _rates[_method_id][_curr].sm;
	//
	sourceChange();
	//payment_desc_
	$("p[id^=payment_desc]").hide();//css("display","none");
	$("#payment_desc_"+_method_id).show();//css("display","block");
}

function initHandlersCl(e)
{
	//	
	var processArr = processUnitsStr.split(";");	
	for (var i = 0; i < processArr.length; i++)
	{
		var _obj = document.getElementById(processArr[i]);
		if (_obj)
		{
			addHandler(_obj, "keypress", checkInput);
			addHandler(_obj, "keyup", moneyCount);
			addHandler(_obj, "keydown", moneyCount);
			addHandler(_obj, "focus", moneyCount);
			addHandler(_obj, "blur", moneyCount);
			addHandler(_obj, "focus", hideLetter);
			addHandler(_obj, "blur", showLetter);
		}
	}
	//
	if (isWMTarget)
	{
		var taccount = document.getElementById("target_account");
		taccount.onfocus = hideLetter;
		taccount.onblur = showLetter;
	}	
	//	
	var target = document.getElementById("source_value");	
	if (target.value.charAt(target.value.length - 4) == ".") {
		target.value = Math.floor(target.value * 100) / 100;
	}	
	if(target.value == ".") { target.value = ""; }
	//
	sourceChange();
	//alert("Finished initialisation");
}
