/***********************************************************************/
// Кредитный калькулятор
// Версия 3
// Обновление 17.01.2011
/***********************************************************************/


var _Регионы     = new Array();
var _ИндексРегиона;
var _Программы   = new Array();
var _ИндексПрограммы;
var _Валюта      = "RUR";
var _Данные      = null;
var _SRSData = Array();
var _NPList = Array();
var _OfficeList = Array();
var _Region = "";
var _NP = "";
var _Office = "";
var _ФормаЗаявкиЗаполнена = false;
var _ОтладкаЗаявки = false;
var _ОтправлятьНаТестовыйСервер = false;
var _КаналПоступленияЗаявки = "I";
var time1, time2;


/***********************************************************************/
// ЗАГРУЗКА КАЛЬКУЛЯТОРА
/***********************************************************************/

function ЗагрузитьКалькулятор()
{
//	_КаналПоступленияЗаявки = $.cookie("ccuser")=="o" ? "CC" : "I",
	OpenModalWait("Пожалуйста подождите, идет загрузка калькулятора.");
	time1 = new Date().getTime();
	$.get(data_url, {}, function(data){ПрограммыКредитованияЗагружены(data);});
}

function ПрограммыКредитованияЗагружены(data)
{
	ОбработатьДанныеПрограммКредитования(data);
	$.get(srs_url, {}, function(data){КредитующиеОтделенияЗагружены(data);});
}

function КредитующиеОтделенияЗагружены(data)
{
	ОбработатьДанныеКредитующихОтделений(data);
	time2 = new Date().getTime();
	if (_ЗамерСкоростиЗагрузки) alert("delta="+(time2-time1));
	ЗагрузитьГорода();
	ЗагрузитьКонтролы();
	CloseModalWait();
}

function ОбработатьДанныеПрограммКредитования(data)
{
	var found = false;

// Регионы
	$("city[value]:has(packet[type='" + _Калькулятор + "'])",data).each(
		function(i)
		{
			var item = $(this);
			var reg =
			{
				Код      : item.attr("code"),
				Название : item.attr("name"),
				ПМ       : new Деньги("RUR", item.attr("value")),
				Пакет    : $("packet[type='" + _Калькулятор + "']",this).attr("code")
			};
			if (reg.ПМ.get("RUR")>0 && reg.Пакет!="")
			{
				_Регионы[_Регионы.length] = reg;
				if (reg.Код == region_id_code)
				{
					found = true;
					_ИндексРегиона = _Регионы.length-1;
				}
			}
		}
	);
	if (!found && _Регионы.length>0) _ИндексРегиона = 0;

// Пакеты и программы
	var rates = new Array;
	$("packet[id='" + _Регионы[_ИндексРегиона].Пакет + "'] > rates",data).each(
		function(i)
		{
			var rate = $("rate[id='" + this.getAttribute("id") + "']",data);
			_Программы[_Программы.length] = new ДанныеПрограммы(rate);
		}
	);
}

function ДанныеПрограммы(item)
{
	var items;

// Параметры
	this.Код         = item.attr("id");
	this.Группа      = item.attr("group");
	this.Название    = item.attr("name");
	this.КодCRIF     = item.attr("crif") ? item.attr("crif") : "";
	this.К           = parseFloat(item.attr("k"));
	this.Режим       = $("setup",item).attr("mode");
	this.Отсрочка    = $("setup",item).attr("delay");
	this.Срок        = $("setup",item).attr("term");

// Комментарии
	this.Комментарии = new Array;
	items = $("comment > text",item);
	for (var i=0; i<items.length; i++) this.Комментарии[i] = $(items[i]).text();

// Валюты
	this.Валюты = new Array;
	items = $("curr",item);
	for (var i=0; i<items.length; i++) this.Валюты[i] =
	{
		Код      : $(items[i]).attr("id"),
		Название : $(items[i]).text()
	};

// Требования к заёмщику
	this.Требования = new Array;
	items = $("requirement",item);
	for (var i=0; i<items.length; i++)
	{
		var req = $(items[i]);
		this.Требования[this.Требования.length] =
		{
			Код      : req.attr("id"),
			Текст    : req.attr("text"),
			Описание : req.text()
		}
	}

// Модификаторы тарифа
	this.Модификаторы = new Array;
	items = $("mod",item);
	for (var i=0; i<items.length; i++)
	{
		var mod = $(items[i]);
		this.Модификаторы[this.Модификаторы.length] =
		{
			Код      : mod.attr("id"),
			Тип      : mod.attr("type"),
			Группа   : mod.attr("group"),
			Включен  : (mod.attr("checked")=="y" ? true : false),
			Текст    : mod.attr("label"),
			Описание : mod.text()
		}
	}

// Тарифы
	this.Тарифы = new Array;
	items = $("ps",item);
	for (var i=0; i<items.length; i++)
	{
		var rate = $(items[i]);
		this.Тарифы[i] =
		{
			Валюта        : rate.attr("curr"),
			СрокМин       : toInt(rate.attr("term_low")),
			СрокМакс      : toInt(rate.attr("term_high")),
			ВзносМин      : toFloat(rate.attr("payment_low")),
			ВзносМакс     : toFloat(rate.attr("payment_high")),
			КредитМин     : new Деньги(rate.attr("curr"), rate.attr("credit_low")),
			КредитМакс    : new Деньги(rate.attr("curr"), rate.attr("credit_high")),
			СтавкаБазовая : toFloat(rate.attr("ps")),
			Ставка        : toFloat(rate.attr("ps")),
			ЕжемесячнаяКомиссия : toFloat(rate.attr("com")),
			Комиссия      : toFloat(rate.attr("tax")),
			КомиссияМин   : new Деньги(rate.attr("curr"), rate.attr("tax_low")),
			КомиссияМакс  : new Деньги(rate.attr("curr"), rate.attr("tax_high")),
			Скидка        : toFloat(rate.attr("grant")),
			Модификаторы  : new Array
		}
		for (var mi=0; mi<this.Модификаторы.length; mi++)
		{
			this.Тарифы[i].Модификаторы[mi] =
			{
				Код   : this.Модификаторы[mi].Код,
				Тариф : toFloat(rate.attr(this.Модификаторы[mi].Код))
			};
		}
	}

// Лимиты
	this.Лимиты = new Array;
	for (var c=0; c<this.Валюты.length; c++)
	{
		this.Лимиты[c] = 
		{
			Валюта     : this.Валюты[c].Код,
			СрокМин    : 0,
			СрокМакс   : 0,
			ВзносМин   : 0,
			ВзносМакс  : 0,
			КредитМин  : new Деньги("RUR",0),
			КредитМакс : new Деньги("RUR",0)
		}
		var firsttime = true;
		var curr = this.Валюты[c].Код;
		for (var i=0; i<this.Тарифы.length; i++)
		{
			if (this.Тарифы[i].Валюта == curr)
			{
				if (firsttime)
				{
					this.Лимиты[c].СрокМин    = this.Тарифы[i].СрокМин;
					this.Лимиты[c].СрокМакс   = this.Тарифы[i].СрокМакс;
					this.Лимиты[c].ВзносМин   = this.Тарифы[i].ВзносМин;
					this.Лимиты[c].ВзносМакс  = this.Тарифы[i].ВзносМакс;
					this.Лимиты[c].КредитМин.set(curr, this.Тарифы[i].КредитМин.get(curr));
					this.Лимиты[c].КредитМакс.set(curr, this.Тарифы[i].КредитМакс.get(curr));
					firsttime = false;
				}
				else
				{
					this.Лимиты[c].СрокМин    = Мин(this.Лимиты[c].СрокМин, this.Тарифы[i].СрокМин);
					this.Лимиты[c].СрокМакс   = Макс(this.Лимиты[c].СрокМакс, this.Тарифы[i].СрокМакс);
					this.Лимиты[c].ВзносМин   = Мин(this.Лимиты[c].ВзносМин, this.Тарифы[i].ВзносМин);
					this.Лимиты[c].ВзносМакс  = Макс(this.Лимиты[c].ВзносМакс, this.Тарифы[i].ВзносМакс);
					this.Лимиты[c].КредитМин.set(curr, Мин(this.Лимиты[c].КредитМин.get(curr), this.Тарифы[i].КредитМин.get(curr)));
					this.Лимиты[c].КредитМакс.set(curr, Макс(this.Лимиты[c].КредитМакс.get(curr), this.Тарифы[i].КредитМакс.get(curr)));
				}
			}
		}
	}

// Программируемые предупреждения
	this.Предупреждения = new Array;
	items = $("alert",item);
	for (var i=0; i<items.length; i++)
	{
		var a = $(items[i]);
		this.Предупреждения[this.Предупреждения.length] =
		{
			Валюта     : a.attr("curr"),
			СрокМин    : toInt(a.attr("term_low")),
			СрокМакс   : toInt(a.attr("term_high")),
			ВзносМин   : toFloat(a.attr("payment_low")),
			ВзносМакс  : toFloat(a.attr("payment_high")),
			КредитМин  : new Деньги(a.attr("curr"), a.attr("credit_low")),
			КредитМакс : new Деньги(a.attr("curr"), a.attr("credit_high")),
			Текст      : a.text()
		}
	}

}

function ЗагрузитьКонтролы()
{
	ЗагрузитьПрограммы();
	if (_ФормаЗаявки) {
		$("#noappform").hide();
		$("#appform").show();
	} else {
		$("#noappform").show();
		$("#appform").hide();
	}
}

function ЗагрузитьПрограммы() // Загрузка перечня программ в селект
{
	var text = "";
	$("#rate").empty();
	for (var i=0; i<_Программы.length; i++)
	{
		text += "<option value=\"" + i + "\"> " + _Программы[i].Название + " </option>";
	}
	$("#rate").append(text);
	rate_onchange();
}

function ЗагрузитьВалюты() // Загрузка перечня валют в селект
{
	var text = "";
	$("#currency").empty();
	for (var i=0; i<_Программы[_ИндексПрограммы].Валюты.length; i++)
	{
		text += "<option value=\"" + _Программы[_ИндексПрограммы].Валюты[i].Код + "\"> " + _Программы[_ИндексПрограммы].Валюты[i].Название + " </option>";
	}
	$("#currency").append(text);
	currency_onchange();
}

function ЗагрузитьУсловия() // Загрузка чекбоксов модификаторов и требований к заёмщику
{
	var type = "";
	var mod, req;

	var text = "";
	$("#special").empty();
	if (_Программы[_ИндексПрограммы].Модификаторы.length > 0) $("#special_container").show(); else $("#special_container").hide();
	for (var i=0; i<_Программы[_ИндексПрограммы].Модификаторы.length; i++)
	{
		mod = _Программы[_ИндексПрограммы].Модификаторы[i];
		type = "checkbox";
//		if (mod.Тип == "cb") type = "checkbox";
		if (mod.Тип == "rb") type = "radio";
		text += "<input type=\"" + type + "\" id=\"modid_" + mod.Код + "\" name=\"modname_" + mod.Группа + "\" value=\"" + mod.Код + "\"" + (mod.Включен ? " checked=\"true\"" : "") + ">&nbsp;&nbsp;<label for=\"modid_" + mod.Код +"\" style=\"cursor:pointer\">" + mod.Текст + "</label><div class=\"hint\">" + ReplaceString(mod.Описание,"\n","<br />\n") + "</div><br/>\n";
	}
	$("#special").append(text);

	text = "";
	$("#requirements").empty();
	if (_Программы[_ИндексПрограммы].Требования.length > 0) $("#requirements_container").show(); else $("#requirements_container").hide();
	for (var i=0; i<_Программы[_ИндексПрограммы].Требования.length; i++)
	{
		req = _Программы[_ИндексПрограммы].Требования[i];
		text += "<input type=\"checkbox\" id=\"reqid_" + req.Код + "\" value=\"checked\">&nbsp;&nbsp;<label for=\"reqid_" + req.Код +"\" style=\"cursor:pointer\">" + req.Текст + "</label><div class=\"hint\">" + ReplaceString(req.Описание,"\n","<br />\n") + "</div><br />\n";
	}
	$("#requirements").append(text);
}


function УсловияКредитаРазмер() // Условия кредита - Размер кредита
{
	var Лимит = _Программы[_ИндексПрограммы].Лимиты[0];
	for (var i=0; i<_Программы[_ИндексПрограммы].Лимиты.length; i++) if (_Программы[_ИндексПрограммы].Лимиты[i].Валюта == _Валюта) Лимит=_Программы[_ИндексПрограммы].Лимиты[i];
	return "<li>Размер кредита: от " + Лимит.КредитМин.text(_Валюта) + " до " + Лимит.КредитМакс.text(_Валюта) + ".</li>\n";
}


function УсловияКредитаСрок() // Условия кредита - Срок кредита
{
	var Лимит = _Программы[_ИндексПрограммы].Лимиты[0];
	for (var i=0; i<_Программы[_ИндексПрограммы].Лимиты.length; i++) if (_Программы[_ИндексПрограммы].Лимиты[i].Валюта == _Валюта) Лимит=_Программы[_ИндексПрограммы].Лимиты[i];
	return "<li>Срок кредита: от " + Лимит.СрокМин + " до " + Лимит.СрокМакс + " мес.</li>\n";
}


function УсловияКредитаПервоначальныйВзнос(s) // Условия кредита - Первоначальный взнос
{
	var Лимит = _Программы[_ИндексПрограммы].Лимиты[0];
	for (var i=0; i<_Программы[_ИндексПрограммы].Лимиты.length; i++) if (_Программы[_ИндексПрограммы].Лимиты[i].Валюта == _Валюта) Лимит=_Программы[_ИндексПрограммы].Лимиты[i];
	return "<li>Минимальный первоначальный взнос: " + Лимит.ВзносМин + "%" + s + ".</li>\n";
}


function УсловияКредитаКомментарии() // Условия кредита - Комментарии
{
	var text = "";
	for (var i=0; i<_Программы[_ИндексПрограммы].Комментарии.length; i++) {
		text += "<li>" + ReplaceString(_Программы[_ИндексПрограммы].Комментарии[i],"\n","<br />\n") + "</li>\n";
	}
	return text
}


function _Значение(field, title, type)
{
	var text    = "";
	var open    = "";
	var close   = "";
	var newline = "";
	var value;

	if (type == "li") {
		open    = "<li>";
		close   = "</li>\n";
		newline = "<br/>\n";
	}

	if (type == "text") {
		open  = "";
		close = " | ";
		newline = " ";
	}

	if (field == "Программа") {
		if (title == "") title = "Программа кредитования";
		return open + title + ": " + this.Программа.Название + "." + close;
	}

	if (field == "Валюта") {
		if (title == "") title = "Валюта";
		return open + title + ": " + this.ВалютаТекст + "." + close;
	}

	if (field == "Срок") {
		if (title == "") title = "Срок";
		return open + title + ": " + this.Срок + " мес." + close;
	}

	if (field == "РазмерКредита") {
		if (title == "") title = "Размер кредита";
		return open + title + ": " + this.Кредит.text(this.Валюта) + "." + close;
	}

	if (field == "Стоимость") {
		if (title == "") title = "Стоимость";
		return open + title + ": " + this.Стоимость.text(this.Валюта) + "." + close;
	}

	if (field == "Взнос") {
		if (title == "") title = "Первоначальный взнос";
		return open + title + ": " + this.Взнос.text(this.Валюта) + "." + close;
	}

	if (field == "Модификаторы") {
		for (var i=0; i<this.Модификаторы.length; i++) {
			text += open + this.Модификаторы[i].Текст;
			if (type != "text") text += "<div class=\"hint\">" + ReplaceString(this.Модификаторы[i].Описание,"\n",newline) + "</div>";
			text += close;
		}
		return text;
	}

	if (field == "Предупреждения") {
		for (var i=0; i<this.Программа.Предупреждения.length; i++) {
			if (this.Программа.Предупреждения[i].Валюта == this.Валюта) {
				if (
					(this.Программа.Предупреждения[i].СрокМин==0   || this.Программа.Предупреждения[i].СрокМин <= this.Срок) &&
					(this.Программа.Предупреждения[i].СрокМакс==0  || this.Срок <= this.Программа.Предупреждения[i].СрокМакс) &&
					(this.Программа.Предупреждения[i].ВзносМин==0  || this.Программа.Предупреждения[i].ВзносМин <= this.РазмерВзноса) &&
					(this.Программа.Предупреждения[i].ВзносМакс==0 || this.РазмерВзноса <= this.Программа.Предупреждения[i].ВзносМакс) &&
					(this.Программа.Предупреждения[i].КредитМин.get(this.Валюта)==0 || this.Программа.Предупреждения[i].КредитМин.get(this.Валюта) <= this.Кредит.get(this.Валюта)) &&
					(this.Программа.Предупреждения[i].КредитМакс.get(this.Валюта)==0 || this.Кредит.get(this.Валюта) <= this.Программа.Предупреждения[i].КредитМакс.get(this.Валюта))
				) text += open + ReplaceString(this.Программа.Предупреждения[i].Текст,"\n",newline) + close;
			}
		}
		return text;
	}

	if (field == "Ставка") {
		if (title == "") title = "Процентная ставка по кредиту";
		return open + title + ": " + this.Тариф.Ставка + "% годовых." + close;
	}

	if (field == "КомиссияЕжемесячная") {
		if (title == "") title = "Ежемесячная комиссия";
		if (this.Тариф.ЕжемесячнаяКомиссия > 0) {
			return open + title + ": " + this.Тариф.ЕжемесячнаяКомиссия + "% от суммы кредита." + close;
		}
	}

	if (field == "РасчетКредита") {
		if (this.Тариф.Скидка > 0) {
			return open + "Размер кредита со скидкой: " + this.РасчетКредита.Кредит.text(this.Валюта) + ". При оформлении кредита будет предоставлена скидка по программе льготного кредитования в размере " + this.РасчетКредита.Скидка.text(this.Валюта) + "." + close;
		} else {
			return open + "Размер кредита: " + this.РасчетКредита.Кредит.text(this.Валюта) + "." + close;
		}
	}

	if (field == "Лимит") {
		if (title == "") title = "Ваш лимит кредитования составляет";
		return open + title + ": " + this.Лимит.text(this.Валюта) + "." + close;
	}
	
	if (field == "Платеж") {
		if (title == "") title = "Размер ежемесячного платежа по кредиту";
		return open + title + ": " + this.РасчетКредита.Платеж.text(this.Валюта) + "." + close;
	}

	if (field == "КомиссияЗаОформление") {
		if (this.РасчетКредита.Комиссия.get(this.Валюта) > 0) {
			return open + "Размер комиссии за оформление кредита: " + this.РасчетКредита.Комиссия.text(this.Валюта) + "." + close;
		} else {
			return open + "Комиссия за оформление кредита не взимается." + close;
		}
	}

	if (field == "Страховка") {
		if (this.СтраховкаВключена) {
			return open + "Включить страховой взнос за первый год кредитования в сумму кредита, тариф страхования: " + this.СтраховкаТариф + "%" + close;
		}
	}

	if (field == "РасчетСтраховки") {
		if (this.СтраховкаВключена) {
			value = new Деньги(this.Валюта, this.Стоимость.get(this.Валюта) * this.СтраховкаТариф / 100);
			return open + "Страховой взнос за первый год страхования включен в сумму кредита и составляет " + value.text(this.Валюта) + "." + close;
		}
	}

	if (field == "СуммаПлатежей") {
		value = new Деньги(this.Валюта, this.РасчетКредита.Платеж.get(this.Валюта) * this.Срок + this.РасчетКредита.Комиссия.get(this.Валюта));
		return open + "Ориентировочная сумма всех платежей в погашение кредита и комиссий: " + value.text(this.Валюта) + "." + close;
	}

	if (field == "Отделение") {
		return open + _NPList[$("#city").val()].np + ", " + _OfficeList[$("input[name='office']:checked").val()].name + "." + close;
	}

	return "";
}



/***********************************************************************/
// ОБРАБОТЧИКИ СОБЫТИЙ
/***********************************************************************/

function rate_onchange() // Смена программы кредитования
{
	_ИндексПрограммы = toInt($("#rate").attr("value"));
	ЗагрузитьВалюты();
	ЗагрузитьУсловия();
	ИзменитьФорму();
}

function currency_onchange() // Смена валюты кредитования
{
	_Валюта = $("#currency").attr("value");
	ЗагрузитьЛимиты();
}

function city_onchange() // Смена города в заявке
{
	ЗагрузитьОфисы();
	checkappform();
}

//	var evt = (evt) ? evt : (window.event) ? event : null
//	var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);

function onlynumbers_onkeypress(e)
{
	var key = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which ? e.which : void 0;
	if (e.ctrlKey || e.altKey || key < 32) return true;
	key = String.fromCharCode(key);
	return /\d/.test(key);
}

function onlyfloatnumbers_onkeypress(e)
{
	var key = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which ? e.which : void 0;
	if (e.ctrlKey || e.altKey || key < 32) return true;
	key = String.fromCharCode(key);
	return /\d|\.|,/.test(key);
}

function checkappform()
{
	var valid  = true;
	var ok  = true;
	var fields = [
	{ id: "f",     mandatory: true,  max: 50, re: /^[ёа-я- ]+$/i },
	{ id: "i",     mandatory: true,  max: 50, re: /^[ёа-я- ]+$/i },
	{ id: "o",     mandatory: true,  max: 50, re: /^[ёа-я- ]+$/i },
	{ id: "phone", mandatory: true,  max: 10, re: /^\d{5,10}$/i },
	{ id: "email", mandatory: false, max: 50, re: /^([\w\-]+\.)*[\w\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,}$/i }
	];

	var value;
	for (var f=0; f<fields.length; f++)
	{
		ok = true;
		value = $("#"+fields[f].id).val();
		if (fields[f].mandatory || value!="")
		{
			if (value.length > fields[f].max) {
				value = value.substr(value.length-fields[f].max,value.length);
				$("#"+fields[f].id).val(value);
			}
			ok = fields[f].re.test(value);
		}
		if (ok) {
			$("#"+fields[f].id).removeClass("border2red");
		} else {
			$("#"+fields[f].id).addClass("border2red");
			valid = false;
		}
	}
	if ($("input[name='office']:checked").length==0) {
		$("#offices_container").addClass("border2red");
		valid = false;
	} else {
		$("#offices_container").removeClass("border2red");
	}
	_ФормаЗаявкиЗаполнена = valid;
}

function Рассчитать() // Кнопка Рассчитать
{
	var ЕстьОшибка = false;
	var text = "";
	ОтметитьЦели("calculate");
	try {
		$("#error").empty();
		$("#brief").empty();
		$("#result").empty();
		_Данные = new ПолучитьОсновныеДанныеФормы();
		ПолучитьДополнительныеДанныеФормы();
		ПроверитьОсновныеДанныеФормы();
		ОпределитьТариф();
		РассчитатьКредит();
	}
	catch(e) {
		ОбработчикОшибок(e);
	}
	return false;
}

function НовыйРасчет() // Кнопка Новый Расчет
{
	$("#error").empty();
	$("#notification").hide();
	$("#application").hide();
	$("#calculator").show();
	$("#brief").empty();
	$("#result").empty();
	$("html").scrollTop(0);
	return false;
}


/***********************************************************************/
// ОБЩИЕ ФУНКЦИИ
/***********************************************************************/


function ПолучитьОсновныеДанныеФормы() // Конструктор объекта для всех типов калькулятора
{
	this.Регион       = _Регионы[_ИндексРегиона];
	this.Программа    = _Программы[_ИндексПрограммы];
	this.Валюта       = _Валюта;
	this.ВалютаТекст  = "";
	for (i=0; i<this.Программа.Валюты.length; i++) if (this.Программа.Валюты[i].Код == _Валюта) this.ВалютаТекст = this.Программа.Валюты[i].Название;
	this.Доход        = getInt("#income");
	this.Семья        = getInt("#family");
	this.Модификаторы = new Array;
	for (i=0; i<this.Программа.Модификаторы.length; i++) if ($("#modid_"+this.Программа.Модификаторы[i].Код).attr("checked")) this.Модификаторы[this.Модификаторы.length] = this.Программа.Модификаторы[i];
	this.Требования   = true;
	for (i=0; i<this.Программа.Требования.length; i++) this.Требования &= ($("#reqid_"+this.Программа.Требования[i].Код).attr("checked") ? true : false );
	this.Срок         = this.Программа.Срок;
	this.Стоимость    = new Деньги(this.Валюта, 0);
	this.Взнос        = new Деньги(this.Валюта, 0);
	this.РазмерВзноса = 0;
	this.Кредит       = new Деньги(this.Валюта, 0);
	this.Тариф        = null;
	this.Лимиты       = null;
	for (i=0; i<this.Программа.Лимиты.length; i++) if (this.Программа.Лимиты[i].Валюта == this.Валюта) this.Лимиты = this.Программа.Лимиты[i];
	this.Лимит        = 0;
	this.РасчетКредита = null;
	this.Экономия      = null;
	this.ИсходныеДанныеКакТекст    = _ИсходныеДанныеКакТекст;
	this.РезультатыРасчетаКакТекст = _РезультатыРасчетаКакТекст;
	this.ТекстДляОнлайнЗаявки      = _ТекстДляОнлайнЗаявки;
	this.Значение     = _Значение;
}


function ПроверитьОсновныеДанныеФормы()
{
	var НетОшибки = true;
	var ТекстОшибки = "";

// Первичные проверки
	if (_Данные.Доход < 1 || _Данные.Доход > 100000000)
	{
		НетОшибки = false;
		ТекстОшибки += "Неверно указан доход.\n";
	}
	if (_Данные.Семья < 1 || _Данные.Семья > 99)
	{
		НетОшибки = false;
		ТекстОшибки += "Неверно указано количество членов семьи.\n";
	}
	if (!_Данные.Требования)
	{
		НетОшибки = false;
		ТекстОшибки += "Вы не удовлетворяете всем требованиям банка. Проверьте раздел \"Требования к заемщику\".\n";
	}
	if (_Данные.Срок < 1 || _Данные.Срок > 600)
	{
		НетОшибки = false;
		ТекстОшибки += "Неверно указан срок кредитования.\n";
	}

	var ДополнительнаяПроверка = ПроверитьДополнительныеДанныеФормы();

	if (НетОшибки && ДополнительнаяПроверка.НетОшибки) {
		return true;
	} else {
		throw new Error(ТекстОшибки + ДополнительнаяПроверка.ТекстОшибки);
	}
	return false;
}


function РассчитатьКредит() // AJAX запрос на расчет лимита
{
	OpenModalWait("Пожалуйста подождите, идет расчет параметров кредита.");
	$.get(limit_url,
	{
		mode     : _Данные.Программа.Режим,
		family   : _Данные.Семья,
		income   : _Данные.Доход,
		payments : 0,
		term     : _Данные.Срок,
		credit   : _Данные.Кредит.get(_Данные.Валюта),
		pm       : _Данные.Регион.ПМ.get(_Данные.Валюта),
		ps       : _Данные.Тариф.Ставка,
		com      : _Данные.Тариф.ЕжемесячнаяКомиссия,
		k        : _Данные.Программа.К
	}, function(data){ЛимитРассчитан(data);});
}


function ЛимитРассчитан(data) // Оболочка обработчика результата расчета лимита
{
	CloseModalWait();
	try
	{
		var limit = ReplaceString(""+$("response",data).attr("limit"),",",".");
//alert(limit);
		if (isNaN(limit)) {
			throw new Error("Не удалось рассчитать лимит кредитования.\n");
		} else {
			$("html").scrollTop(0);
			_Данные.Лимит = new Деньги(_Данные.Валюта, toFloat(limit));
			РассчитатьПараметрыКредита();
			ОтметитьЦели("appshow");
			checkappform();
		}
	}
	catch (e) {
		ОбработчикОшибок(e);
	}
}


function РазмерПлатежа(mode, credit, term, delay, ps, com) // Размер платежа по исходным параметрам
{
	var payment = 0;
	switch (mode)
	{
		case "rp":
			payment = credit/term+credit*com/100;
			break;
		case "ap":
			payment = credit*(ps/1200)/(1-Math.pow(1+ps/1200,delay-term))+credit*com/100;
			break;
	}
	if (payment < 0) payment = 0;
	return payment;
}


function ПараметрыКредита(d,grant) // Конструктор объекта с расчетом кредита
{
	var gs = 0;
	if (grant) {
		gs = _Данные.Тариф.Скидка / 100;
		this.Скидка = new Деньги(d.Валюта, d.Стоимость.get(d.Валюта) * gs);
	} else {
		this.Скидка = new Деньги(d.Валюта, 0);
	}
	this.Кредит = new Деньги(d.Валюта, d.Кредит.get(d.Валюта) - this.Скидка.get(d.Валюта));
	this.Платеж = new Деньги(d.Валюта, РазмерПлатежа(d.Программа.Режим, this.Кредит.get(d.Валюта), d.Срок, d.Программа.Отсрочка, d.Тариф.Ставка, d.Тариф.ЕжемесячнаяКомиссия));
	this.Комиссия = new Деньги(d.Валюта, this.Кредит.get(d.Валюта) * d.Тариф.Комиссия / 100);
	if(this.Комиссия.get(d.Валюта) < d.Тариф.КомиссияМин.get(d.Валюта)) this.Комиссия = d.Тариф.КомиссияМин;
	if(this.Комиссия.get(d.Валюта) > d.Тариф.КомиссияМакс.get(d.Валюта)) this.Комиссия = d.Тариф.КомиссияМакс;
}


function ОбработчикОшибок(e) // Вывод popup с сообщением об ошибке
{
	var text = "<h3>Обнаружены ошибки</h3><br/>\n<ul>\n";
	var errlist = e.message.split("\n");
	for (var i=0; i<errlist.length; i++) if (errlist[i]!="") text += "<li>" + errlist[i] + "</li>\n";
	text += "</ul>\n";
	OpenModalError(text);
}

// Валюта кредита
// "810" Рубль РФ
// "840" Доллар США
// "978" Евро
function Заявка()
{
	checkappform();
	if (_ФормаЗаявкиЗаполнена)
	{
		OpenModalWait('Пожалуйста подождите, Ваша заявка на кредит отправляется в банк.');
		var phone = $("#phone").val();
		for (var i=phone.length; i<10; i++) phone = "0" + phone;

// Обработка меток

		var СписокМеток = [
			{ key : "_openstat",    cookie : "openstat"    },
			{ key : "utm_source",   cookie : "utm_source"   },
			{ key : "utm_medium",   cookie : "utm_medium"   },
			{ key : "utm_campaign", cookie : "utm_campaign" },
			{ key : "utm_content",  cookie : "utm_content"  },
			{ key : "utm_term",     cookie : "utm_term"     }
		];
		var cookie = new Cookie("/", "");
		var qs = location.href.split("?")[1];
		var qsp = [];
		if (qs) qsp = qs.split("&");
		var re = /^[\wа-я\.:;%-]+$/i;
		var s = "";
		var glue = "";
		var Метка = "";

		for (var l=0; l<СписокМеток.length; l++)
		{
			s="";
			for(var p=0; p<qsp.length; p++) {
				var kv=qsp[p].split("=");
				if (kv[0]==СписокМеток[l].key) s=kv[1];
			}
			if (!re.test(s)) s="";
			if (s=="") {
				s=cookie.Read(СписокМеток[l].cookie);
				if (s==null) s="";
			}
			glue = "";
			if (Метка!="" && s!="") glue = "&";
			if (s!="") s = СписокМеток[l].key + "=" + s;
			Метка = Метка + glue + s;
		}

// Конец обработки меток

		var appdata =
		{
			Type         : _ТипЗаявки,
			Product      : _Данные.Программа.КодCRIF,
			Currency     : (_Данные.Валюта=="RUR" ? "810" : _Данные.Валюта=="USD" ? "840" : "978"),
			Income       : Math.round(new Деньги(_Данные.Валюта, _Данные.Доход).get("RUR")),
			Family       : _Данные.Семья,
			Term         : _Данные.Срок,
			Price        : Math.round(_Данные.Стоимость.get(_Данные.Валюта)),
			FirstPayment : Math.round(_Данные.Взнос.get(_Данные.Валюта)),
			Credit       : Math.round(_Данные.РасчетКредита.Кредит.get(_Данные.Валюта)),
			Insurance    : _Данные.СтраховкаВключена ? _Данные.СтраховкаТариф : "0",
			F            : trim($("#f").val()),
			I            : trim($("#i").val()),
			O            : trim($("#o").val()),
			Phone        : phone,
			Email        : trim($("#email").val()),
			SubBranch    : _OfficeList[$("input[name='office']:checked").val()].id,
			Info         : _Данные.ТекстДляОнлайнЗаявки(),
			Channel      : _КаналПоступленияЗаявки,
			Label        : Метка,
			ElementID    : element_id
		}
		if (_ОтладкаЗаявки) appdata.debug = 1;
		if (_ОтправлятьНаТестовыйСервер) appdata.IsTest = 1;
		$.post(application_url, appdata, function(data){АнкетаОтправлена(data);});
	}
	else
	{
		OpenModalError("<h3>Обнаружены ошибки</h3><br/>\nПожалуйста заполните отмеченные поля заявки. Необходимо указать фамилию, имя, отчество, контактный телефон и выбрать удобный для Вас офис банка.");
	}
	return false;
}

function АнкетаОтправлена(d)
{
	CloseModalWait();
	var response = $("data",d).attr("action");
	if (response != "Success")
	{
		OpenModalError("<h3>Ошибка</h3><br/>\nЗаявка не может быть отправлена по техническим причинам. Попробуйте еще раз позднее.\n");
	}
	else
	{
		var id = $("data",d).attr("applicationID");
		var text = "";
		var dt = new Date();
		text += "<tr><th colspan=\"2\">Параметры Вашей заявки</th></tr>\n";
		text += "<tr><td class=\"input\"><b>Заявке присвоен номер</b></td><td class=\"input\">" + id + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Заявитель:</b></td><td class=\"input\">" + $("#f").val() + " " + $("#i").val() + " " + $("#o").val() + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Телефон:</b></td><td class=\"input\">" + $("#phone").val() + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>email:</b></td><td class=\"input\">" + $("#email").val() + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Офис банка:</b></td><td class=\"input\">" + _NPList[$("#city").val()].np + ", " + _OfficeList[$("input[name='office']:checked").val()].name + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Дата оформления:</b></td><td class=\"input\">" + dt.toLocaleString() + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Исходные данные:</b></td><td class=\"input\">" + _Данные.ИсходныеДанныеКакТекст() + "</td></tr>\n";
		text += "<tr><td class=\"input\"><b>Результаты расчета:</b></td><td class=\"input\">" + _Данные.РезультатыРасчетаКакТекст() + "</td></tr>\n";
		$("#appdata").empty().append(text);
		$("#calculator").hide();
		$("#application").hide();
		$("#notification").show();
		ОтметитьЦели("appform");
//		ОбработатьСтатистику();
	}
}


function ОтметитьЦели(prefix)
{
	try
	{
		if (yaCounter78187) yaCounter78187.reachGoal(prefix + "_" + _Данные.Программа.Группа);
		if (_gat) _gat._getTracker("UA-19860564-1")._trackPageview(prefix + "_" + _Данные.Программа.Группа);
	}
	catch (e)
	{
//		alert("Статистика не учитывается")
	}

}

function ОбработатьСтатистику()
{
	try
	{
		if (yaCounter78187) yaCounter78187.reachGoal("appform_" + _Данные.Программа.Группа);
		var pageTracker = _gat._getTracker("UA-19860564-1"); 
		pageTracker._trackPageview("appform_" + _Данные.Программа.Группа);
	}
	catch (e)
	{
//		alert("Статистика не учитывается")
	}

}


/***********************************************************************/
// МОДУЛИ РАБОТЫ СО СПИСКОМ КРЕДИТУЮЩИХ ОТДЕЛЕНИЙ
/***********************************************************************/

function ОбработатьДанныеКредитующихОтделений(data)
{
	$("item",data).each(function(i) {
			var obj = new ДанныеОбъектаСРС(this);
			if (obj.service[_Калькулятор]) _SRSData[_SRSData.length] = obj;
		});
}

function ДанныеОбъектаСРС(item, ref) // Конструктор объекта СРС
{
	this.id      = item.getAttribute("orgid");
	this.region  = item.getAttribute("region");
	this.name    = item.getAttribute("name");
	this.post    = trim(item.getAttribute("post"));
	this.np      = trim(item.getAttribute("city"));
	this.address = trim(item.getAttribute("address"));
	this.phone   = trim(item.getAttribute("phone"));
	this.fax     = trim(item.getAttribute("fax"));
	this.service = new Array();
	this.service["ac"] = (item.getAttribute("ac")=="1");
	this.service["cc"] = (item.getAttribute("cc")=="1");
	this.service["ic"] = (item.getAttribute("ic")=="1");
	this.service["od"] = (item.getAttribute("od")=="1");
	this.service["pc"] = (item.getAttribute("pc")=="1");
}

function ЗагрузитьГорода() // Создает список уникальных городов
{
	var found = false;
	var reg = _Регионы[_ИндексРегиона].Код;
	_NPList.length = 0;
	for (var i=0; i<_SRSData.length; i++) if (_SRSData[i].region == reg)
	{
		found = false;
		for (var j=0; j<_NPList.length; j++) if (_NPList[j].np == _SRSData[i].np) found = true;
		if (!found) _NPList[_NPList.length] = _SRSData[i];
	}
	if (_NPList.length>0)
	{
		_NPList.sort(СравнитьГорода);
		ПоказатьСписокГородов();
	}
	else
	{
		_ФормаЗаявки = false;
	}
}

function СравнитьГорода(a,b)
{
	if ((a.np)<(b.np)) return -1;
	if ((a.np)>(b.np)) return 1;
	return 0;
}

function ПоказатьСписокГородов() // Загружает список городов в контрол
{
	var s = "";
	for (var i=0; i<_NPList.length; i++) s += "<option value=\"" + i + "\">" + _NPList[i].np + "</option>\n";
	$("#city").empty().append(s);
	ЗагрузитьОфисы();
}

function ЗагрузитьОфисы() // Создает список офисов для указанного города
{
	_OfficeList.length = 0;
	var np = _NPList[$("#city").val()].np;
	for (var i=0; i<_SRSData.length; i++) if (_SRSData[i].np == np) _OfficeList[_OfficeList.length] = _SRSData[i];
	_OfficeList.sort(СравнитьОфисы);
	ПоказатьСписокОфисов();
}

function СравнитьОфисы(a,b)
{
	if ((a.name)<(b.name)) return -1;
	if ((a.name)>(b.name)) return 1;
	return 0;
}

function ПоказатьСписокОфисов() // Загружает список офисов в контрол
{
	var s = "<table>\n";
	for (var i=0; i<_OfficeList.length; i++)
	{
		s += "<tr>";
		s += "<td style=\"margin-right:10px;\"><input type=\"radio\" name=\"office\" value=\"" + i + "\" id=\"office_" + i + "\" onclick=\"checkappform();\"/></td>";
		s += "<td><label for=\"office_" + i + "\" style=\"cursor:pointer;font-weight:bold\">" + _OfficeList[i].name + "</label><br/>";
		s += "<span style=\"font-size:10px;color:#666\">" + _OfficeList[i].address + "</span></td>";
		s += "</tr>\n";
	}
	s += "</table>";
	$("#offices_container").empty().append(s);
	if (i==1) $("#office_0").click();
}
