	// {{{ блок обмена
	
	var _targetCurrCache = {};
	var _rates = null;
	var _balances = null;
	var exchangeCoursesLoaded = sellbuyCoursesLoaded = false;
	
	// событие нажатия кнопки next для блока обменв
	function nextButton1_OnClick()
	{
		var _from = $("#source_curr").val();
		var _to = $("#target_curr").val();
		var _type = $radio("exchange-type");
		if (null == _type)
		{
			$("#m1").show();//alert("Выберите тип обмена!");
			return false;
		}
		else
		{
			$("#m1").hide();
		}
		window.location = "/exchange/request.asp?from={0}&to={1}&type={2}".format(getSCName(currencyNames[_from]), getSCName(currencyNames[_to]), _type);
		return false;
	}
	/*
	function getFullCurrencyName(curr)
	{
		var res = curr;
		if (curr == "MME") res = "MoneyMail EUR";
		if (curr == "MMR") res = "MoneyMail RUR";
		if (curr == "MMD") res = "MoneyMail USD";
		return res;
	}
	*/
	function getShortCurrencyName(curr)
	{
		var res = curr;
		if (curr == "MoneyMail EUR") res = "MME";
		if (curr == "MoneyMail RUR") res = "MMR";
		if (curr == "MoneyMail USD") res = "MMD";
		if (curr == "Liberty Reserve USD") res = "LRUSD";
		if (curr == "Liberty Reserve EUR") res = "LREUR";
		if (curr == "Perfect Money USD") res = "PM USD";
		if (curr == "Perfect Money EUR") res = "PM EUR";
		if (curr == "Perfect Money GOLD") res = "PM GOLD";
		if (curr == "RUR Yandex") res = "Яндекс.Деньги";
		return res;
	}
	
	function getSCName(curr)
	{
		var res = curr;		
		if (curr == "Liberty Reserve USD") res = "LRUSD";
		if (curr == "Liberty Reserve EUR") res = "LREUR";
		if (curr == "Perfect Money USD") res = "PM USD";
		if (curr == "Perfect Money EUR") res = "PM EUR";
		if (curr == "Perfect Money GOLD") res = "PM GOLD";
		return res;
	}
	// событие смены исходной валюты
	function sourceCurrency_OnChange()
	{
		var _source_curr = $("#source_curr").val();
		if (_source_curr in _targetCurrCache) // если уже запрашивали, берем из кеша
		{
			renderExchangeBlock(_targetCurrCache[_source_curr]);
		}
		else // заправшиваем через ajax
		
		{
			if(_source_curr != "another")
			{
				if (String(location.href).indexOf("member") == -1)
				{
					$.getJSON('/service-routine/_services/get_target_currs.asp?nocache=' + new Date().valueOf(),
						  { id: _source_curr },
						  function(data) {
							  _targetCurrCache[_source_curr] = data;
							  renderExchangeBlock(data);
							  exchangeCoursesLoaded = true;
						  }
					);
				}
				else {
					$.getJSON('/service-routine/_services/get_target_currs_member.asp?nocache=' + new Date().valueOf(),
						  { id: _source_curr },
						  function(data) {
							  _targetCurrCache[_source_curr] = data;
							  renderExchangeBlock(data);
							  exchangeCoursesLoaded = true;
						  }
					);
				}
			}
			else
			{
				//alert(app_URL + "members/default.asp?action=another&type=operation_exchage&guid=" + member_guid + "&check_field=" + member_id_hash);
				window.location = app_URL_another + "members/default.asp?action=another&type=operation_exchange&mguid=" + member_guid + "&check_field=" + member_id_hash;
			}
		}
	}

	// событие смены результирующей валюты
	function targetCurrency_OnChange()
	{
		var _curr = $("#target_curr").val();
		if(_curr != "another")
		{
			renderExchangeInfoBlock(_curr);
		}
		else
		{
			window.location = app_URL_another + "members/default.asp?action=another&type=operation_exchange&mguid=" + member_guid + "&check_field=" + member_id_hash;
		}
	}
	
	// отрисовка выпадающего списка результирующих валют
	function redrawTargetCurrDropDown(data, rates)
	{
		var _type = $radio("exchange-type");
		if (null == _type)
		{
			_type = "UT";
		}
		var _html = ["<select name='target_curr' id='target_curr' class='styled'>"];
		for (var i = 0, l = data.length; i < l; i++)
		{
			if (typeof(rates[_type][data[i].id]) != "undefined" /*&& !rates[_type][data[i].id].d*/)
			{
				_html[_html.length] = "<option value='" + data[i].id + "'>" + (currencyNames[data[i].id] != "RUR Yandex" ? currencyNames[data[i].id] : "Яндекс.Деньги");
			}
		}
		//if(memberCabinet)
		if (String(location.href).indexOf("member") == -1)
			_html[_html.length] = "<option value='another'>...другие валюты</option>";
		_html[_html.length] = "</select>";
		$("#target_curr").parent().html(_html.join(""));
	}
	
	// перерисовка блока обмена
	function renderExchangeBlock(data)
	{
		_rates = data.rates;
		_balances = data.balances;
		
		// меняем блок результир валюты
		redrawTargetCurrDropDown(data.order, _rates);
		
		$("#target_curr").change(targetCurrency_OnChange);
		
		if (customFormInitComplete)
		{
			Custom.renderSelect($("#target_curr")[0]);
		}

		var _curr = $("#target_curr").val();
		renderExchangeInfoBlock(_curr);
	}
	
	// перерисовка переключателя типов обмена и информации об обмене
	var isFirstRender = true;
	function renderExchangeInfoBlock(target_curr)
	{
		// {{{ проверяем тип обмена
		$("#ut_access").html("");
		$("#st_access").html("");
		if ((_rates["UT"][target_curr] && _rates["UT"][target_curr].d) || (_rates["ST"][target_curr] && _rates["ST"][target_curr].d))
		{
			if (_rates["UT"][target_curr].d) // UT disabled?
			{
				$("#exchange-type1").attr("disabled", "disabled");
				$("#ut_access").html("(недоступен)");
				
				$("#exchange-type2").attr("disabled", "");
				if (!isFirstRender)
				{
					$("#exchange-type1").attr("checked", "");
					$("#exchange-type2").attr("checked", "checked");
				}
			}
			if (_rates["ST"][target_curr].d) // maybe ST disabled?
			{
				$("#exchange-type2").attr("disabled", "disabled");
				$("#st_access").html("(недоступен)");
				
				$("#exchange-type1").attr("disabled", "");
				if (!isFirstRender)
				{
					$("#exchange-type2").attr("checked", "");
					$("#exchange-type1").attr("checked", "checked");
				}
			}
		}
		else
		{
			$("#exchange-type1").attr("disabled", "");
			$("#exchange-type2").attr("disabled", "");
			$("#exchange-type2").attr("checked", "");
			if (!isFirstRender)
			{
				$("#exchange-type1").attr("checked", "checked");
			}
		}
		// }}}
		
		// {{{ rates, min, max
		var _source_curr = $("#source_curr").val();
		$("#ut_rate").html(_getRateString(_source_curr, target_curr, "UT"));
		$("#st_rate").html(_getRateString(_source_curr, target_curr, "ST"));
		$("#ut_reserve").html(_getReserveString(target_curr, "UT"));
		$("#st_reserve").html(_getReserveString(target_curr, "ST"));
		// }}}
		
		
	}
	
	// формирует отформатированную строку с курсом
	function _getRateString(source_curr, target_curr, type)
	{

		//alert(currencyNames[source_curr] + " " + currencyNames[target_curr] + " " + type);
		var res = "";
		if (typeof(_rates[type][target_curr]) != "undefined")
		{
		if (_rates[type][target_curr].m)
		{
			res = "1 {0} : {1} {2}".format(getShortCurrencyName(currencyNames[source_curr]), _rates[type][target_curr].r, getShortCurrencyName(currencyNames[target_curr]));
		}
		else
		{
			res = "{1} {0} : 1 {2}".format(getShortCurrencyName(currencyNames[source_curr]), _rates[type][target_curr].r, getShortCurrencyName(currencyNames[target_curr]));
		}
		}
		return res;
	}
	
	// формирует отформатированную строку с резервом
	function _getReserveString(target_curr, type)
	{
		var res = "";
		res = "{0} {1}".format(_balances[type][target_curr], getShortCurrencyName(currencyNames[target_curr]));
		return res;
	}

	// }}}

	
	// {{{ блок пополнения и вывода
	
	var _sellRates = {}, _sellOrder = [], _buyRates = {}, _buyOrder = [];
	
	// событие нажатия кнопки next для блока пополнения-вывода
	function nextButton2_OnClick()
	{
		var _curr = $("#sellbuy-currency").val();
		var _type = $radio("sellbuy-type");
		if (null == _type)
		{
			$("#m2").show();//alert("Выберите тип обмена!");
			return false;
		}
		else
		{
			$("#m2").hide();
		}
		if ("buy" == _type)
		{
			window.location = "/exchange/clearing_request.asp?from=RUR&to={0}&type=ST".format(getSCName(currencyNames[_curr]));
		}
		else
		{
			window.location = "/exchange/clearing_request.asp?from={0}&to=RUR&type=ST".format(getSCName(currencyNames[_curr]));
		}
		return false;
	}

	// отрисовка блока пополнения-вывода
	function renderSellBuyBlock(type)
	{
		if ("sell" == type)
		{
			redrawSellBuyCurrDropDown(_sellOrder);
		}
		else //if ("buy" == type)
		{
			redrawSellBuyCurrDropDown(_buyOrder);
		}

		//if ("buy" == type || "sell" == type)
		{
			$("#sellbuy-currency").change(sellbuyCurrency_OnChange);
			//if (customFormInitComplete)
			{
				Custom.renderSelect($("#sellbuy-currency")[0]);
			}
	
			sellbuyCurrency_OnChange();
		}
	}
	
	// событие смены валюты в блоке пополнения/вывода
	function sellbuyCurrency_OnChange()
	{
		$("#sellbuy_rate").html(_getSellBuyRateString($radio("sellbuy-type")));
		try
		{
		$("#sellbuy_max_value").html(_getBuyMaxString($radio("sellbuy-type")));
		}
		catch(e){}
	}
	
	// событие выбора пополнения
	function selectSell_OnChange()
	{
		renderSellBuyBlock('sell');
		if (customFormInitComplete)
		{
			Custom.clear();
		}
	}
	
	// событие выбора вывода
	function selectBuy_OnChange()
	{
		renderSellBuyBlock('buy');
		if (customFormInitComplete)
		{
			Custom.clear();
		}
	}

	// отрисовка выпадающего списка результирующих валют
	// data - массив id валют
	function redrawSellBuyCurrDropDown(data)
	{
		var _html = ["<select name='sellbuy-currency' id='sellbuy-currency'>"];
		for (var i = 0, l = data.length; i < l; i++)
		{
			_html[_html.length] = "<option value='" + data[i] + "'>" + (currencyNames[data[i]] != "RUR Yandex" ? currencyNames[data[i]] : "Яндекс.Деньги");
		}
		//if(memberCabinet)
		if (String(location.href).indexOf("member") == -1)
					_html[_html.length] = "<option value='another'>...другие валюты</option>";
		_html[_html.length] = "</select>";
		$("#sellbuy-currency").parent().html(_html.join(""));
	}
	
	// формирует отформатированную строку с курсом
	function _getSellBuyRateString(type)
	{
		var res = "";
		var _curr = $("#sellbuy-currency").val();

		if ("sell" == type)
		{
			if(_curr != "another")
			{
				if (_sellRates[_curr].m)
				{
					res = "1 {0} : {1} RUR".format((currencyNames[_curr] != "RUR Yandex" ? currencyNames[_curr] : "Яндекс.Деньги"), _sellRates[_curr].r);
				}
				else
				{
					res = "{1} {0} : 1 RUR".format((currencyNames[_curr] != "RUR Yandex" ? currencyNames[_curr] : "Яндекс.Деньги"), _sellRates[_curr].r);
				}
			}
			else
			{
				if (member_guid == "") window.location = app_URL_another;
				else window.location = app_URL_another + "members/default.asp?action=another&type=operation_sell&mguid=" + member_guid + "&check_field=" + member_id_hash;
			}
		}
		else
		{
			if(_curr != "another")
			{
				if (_buyRates[_curr].m)
				{
					res = "1 RUR : {1} {0}".format(currencyNames[_curr], _buyRates[_curr].r);
				}
				else
				{
					res = "{1} RUR : 1 {0}".format(currencyNames[_curr], _buyRates[_curr].r);
				}
			}
			else
			{
				window.location = app_URL_another + "members/default.asp?action=another&type=operation_buy&mguid=" + member_guid + "&check_field=" + member_id_hash;
			}
		}
		return res;
	}
	
	function _getBuyMaxString(type)
	{
	    var _curr = $("#sellbuy-currency").val();
	    var res = _buyRates[_curr].v;
	    return res;   
	
	}
	
	// формирует отформатированную строку с резервом
	function _getSellBuyReserveString(target_curr, type)
	{
		var res = "";
		res = "{0} {1}".format(_balances[target_curr], currencyNames[target_curr]);
		return res;
	}
	
	// }}}
	
	// запуск инициализации форм обмена на главной
	function initMainPageExchangeForms()
	{
		// exchange block
		sourceCurrency_OnChange();
		
		// sell-buy block
		if (String(location.href).indexOf("member") == -1)
		{
		$.getJSON('/service-routine/_services/get_clear_rates.asp?nocache=' + new Date().valueOf(),
			null,
			function(data) {
				_sellRates = data.sellRates;
				_sellOrder = data.sellOrder;
				_buyRates = data.buyRates;
				_buyOrder = data.buyOrder;
				_clBalances = data.balances;
				renderSellBuyBlock($radio("sellbuy-type"));

				$("#btn-next2").click(nextButton2_OnClick);
				
				$("#sellbuy-type2").change(selectSell_OnChange);
				$("#sellbuy-type1").change(selectBuy_OnChange);
				$("#sellbuy-currency").change(sellbuyCurrency_OnChange);
				$("#source_curr").change(sourceCurrency_OnChange);
				$("#btn-next1").click(nextButton1_OnClick);
				sellbuyCoursesLoaded = true;
			}
		);
		}
		else
		{
		$.getJSON('/service-routine/_services/get_clear_rates_member.asp?nocache=' + new Date().valueOf(),
			null,
			function(data) {
				_sellRates = data.sellRates;
				_sellOrder = data.sellOrder;
				_buyRates = data.buyRates;
				_buyOrder = data.buyOrder;
				_clBalances = data.balances;
				renderSellBuyBlock($radio("sellbuy-type"));

				$("#btn-next2").click(nextButton2_OnClick);
				
				$("#sellbuy-type2").change(selectSell_OnChange);
				$("#sellbuy-type1").change(selectBuy_OnChange);
				$("#sellbuy-currency").change(sellbuyCurrency_OnChange);
				$("#source_curr").change(sourceCurrency_OnChange);
				$("#btn-next1").click(nextButton1_OnClick);
				sellbuyCoursesLoaded = true;
			}
		);
		}
	}
	
	// отрисовка custom контролов только после прихода данных
	function doCustomInit()
	{
		if (exchangeCoursesLoaded && sellbuyCoursesLoaded)
		{
			Custom.init();
			clearInterval(_doCustomInit);
		}
	}
	
	var _doCustomInit = setInterval(doCustomInit, 100);

