
host = 'http://ipocredit.ru/';

// detect browser version
isDOM=document.getElementById //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
isOpera=isOpera5=window.opera && isDOM //Opera 5+
isOpera6=isOpera && window.print //Opera 6+
isOpera7=isOpera && document.readyState //Opera 7+
isMSIE=document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
isMSIE5=isDOM && isMSIE //MSIE 5+
isNetscape4=document.layers //Netscape 4.*
isMozilla=isDOM && navigator.appName=="Netscape" //Mozilla или Netscape 6.*

// init AJAX
var req;
var reqAbortTime = 10000;
var reqTimeout;

function initRequest() {
	req = null;
	if (window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch (e) { }
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			try {
				req = new ActiveXObject('Microsoft.XMLHTTP');
			} catch (e){}
		}
	}
}

/** Открытие popup-окна **/
function openWin( uri, w, h ) {
	win = window.open( uri, 'popup_win', 'top=100,left=100,width='+w+',height='+h+',toolbar=yes,location=no,scrollbars=yes,status=no,menubar=yes,directories=no' );
	return false;
}

/** Форма подписки - потеря/принятие фокуса **/
function subs_focus_lost( el ) {
	if ( el.value == 'Ваш E-Mail' )
		el.value = '';
	else if ( isEmpty(el.value) )
		el.value = 'Ваш E-Mail';
	return ;
}

/** Проверка формы подписки **/
function check_subscribe_form( elem ) {
	el = document.getElementById( elem );
	if ( ( !el ) || ( isEmpty(el.value) ) || ( el.value == 'Ваш E-Mail' ) ) return false;
	if ( !check_email(el.value) ) return false;
	return true;
}

/** Если поле для подписки проверено - подписываем пользователя на рассылку **/
function subscribeSubmit( frm_name, field_name ) {
	if ( check_subscribe_form( field_name ) ) submit_form( frm_name );
}

/** Отправка формы **/
function submit_form( f ) {
	frm = document.forms[ f ];
	if ( frm ) frm.submit();
}

/** Сброс формы **/
function reset_form( f ) {
	frm = document.forms[ f ];
	if ( frm ) frm.reset();
}

/** Версия для печати **/
function print_version() {
	var uri = new String('');
	uri = window.location.toString();
	var pv = new String('');
	pv = ( uri.indexOf( '?' ) > 0 ) ? '&print=1' : '?print=1';
	uri = uri + pv;
	win = window.open( uri, 'print_ver', 'top=100,left=100,width=900,height=600,toolbar=yes,location=no,scrollbars=yes,status=no,menubar=yes,directories=no' );
}

/** Проверка E-Mail **/
function check_email( email ) {
	patt = '^[A-Za-z0-9](([_.-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)*)\.([A-Za-z]+)$';
	re = new RegExp( patt );
	return re.test( email );
}

/** Проверка логина **/
function check_login( login ) {
	patt = '^([A-Za-z0-9_]+)$';
	re = new RegExp( patt );
	return re.test( login );
}

/** Проверка на пустую строку **/
function isEmpty( str ) {
	l_str = str.length;
	if ( l_str == 0 ) return true;
	for ( var i = 0; i < l_str ; i++ ) {
		if ( ' ' != str.charAt(i) ) return false;
	}
	return true;
}

/** Показать/спрятать слой **/
function open_close( el ) {
	elem = document.getElementById( el );
	if ( elem ) {
		if ( elem.className == 'unvis' ) {
			elem.className = 'vis';
		} else {
			elem.className = 'unvis';
		}
	}
}

/** Выбран другой год/месяц календаря **/
function change_calendar() {
	y_el = document.getElementById( 'id_sel_year' );
	m_el = document.getElementById( 'id_sel_month' );
	temp_date = new Date();
	y = ( y_el ) ? y_el.value : temp_date.getFullYear();
	m = ( m_el ) ? m_el.value : temp_date.getMonth();

	initRequest();
	if ( req ) {
		req.onreadystatechange = back_change_calendar;
		req.open( "GET", host + 'ajax/calendar/' + m + '/' + y, true );
		req.send( null );
		reqTimeout = setTimeout( "req.abort();", reqAbortTime );
	}
}

function back_change_calendar() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			y_el = document.getElementById( 'id_sel_year' );
			m_el = document.getElementById( 'id_sel_month' );
			temp_date = new Date();
			y = ( y_el ) ? y_el.value : temp_date.getFullYear();
			m = ( m_el ) ? m_el.value : temp_date.getMonth();
			if ( m < 10 ) m = '0' + m;
			d = temp_date.getDate();
			if ( d < 10 ) d = '0' + d;
			def_date_el = document.getElementById( 'id_curr_date' );
			def_date = ( def_date_el ) ? def_date_el.value : (d + '/' + m + '/' + y);

			eval( 'var response = ('+req.responseText+')' );
			meta = response.meta;
			month_title = meta.month_title;
			start_wday = meta.start_wday;
			info = response.info;
			last_day = info.length-1;
			el = document.getElementById( 'calendar_table' );
			if ( !el ) return ;

			// delete table
			while ( el.childNodes.length > 0 ) el.removeChild( el.lastChild );

			// create table
			tbl = document.createElement( 'table' );
			tbl.cellPadding = "0";
			tbl.cellSpacing = "0";
			tbl.setAttribute( "border", "1" );
			tbl.setAttribute( "cellpadding", "0" );
			tbl.setAttribute( "cellspacing", "0" );
			tbl.setAttribute( "rules", "all" );
			tr = tbl.insertRow(0);
			dow = new Array( 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс' );
			for ( i = 0; i < dow.length; i++ ) {
				th = tr.insertCell( i );
				th.className = 'head';
				th.innerHTML = dow[i];
			}
			k = 0;
			txt_null = document.createElement( 'span' );
			while ( k < last_day ) {
				tr = tbl.insertRow( -1 );
				for ( j = 0; j < 7; j++ ) {
					td = tr.insertCell( j );
					if ( ( (k == 0) && (j < start_wday) ) || (k > last_day) ) {
						td.appendChild( txt_null );
					} else {
						k++;
						z = k;
						if ( z < 10 ) z = '0' + z;
						cur_date = z + '_' + m + '_' + y;
						if ( cur_date == def_date ) { td.className = 'today'; }
						if ( k <= last_day ) {
							if ( info[k].arts == 1 ) {
								anchor = document.createElement( 'a' );
								anchor.appendChild( document.createTextNode( (k) ) );
								anchor.href = host + 'news/' + cur_date + '/';
								td.appendChild( anchor );
							} else {
								txt = document.createTextNode( (k) );
								td.appendChild( txt );
							}
						}
					}
				}
			}
			el.appendChild( tbl );
			cal_txt = document.getElementById( 'id_calendar_text' );
			cal_txt.innerHTML = month_title + ' ' + y;
		}
	}
}/** Создание куки **/
function createCookie( name, value, days ) {
	if (days) {
	var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else var expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}

/** Чтение куки **/
function readCookie( name ) {
	var nameEQ = name + "=";
	var ca = document.cookie.split( ';' );
	for ( var i=0; i < ca.length; i++ ) {
		var c = ca[i];
		while ( c.charAt(0) == ' ' ) c = c.substring( 1, c.length );
		if ( c.indexOf( nameEQ ) == 0 ) return c.substring( nameEQ.length, c.length );
	}
	return null;
}

/** Удаление куки **/
function eraseCookie( name ) {
	createCookie( name, '', -1 );
}/** Проверяем, если в корзине больше 2 вариантов кредита - отображаем ссылку на страницу сравнения. **/
function check_compare_visibility( items ) {
	elem = document.getElementById( 'compare_for_all' );
	if ( elem ) {
		if ( items.length >= 2 ) {
			elem.className = 'compare';
			elem.innerHTML = 'Сравнить выбранные варианты (' + items.length + ')';
		} else {
			elem.className = 'unvis';
		}
	}
}

/** Удаление варианта кредита из корзины **/
function delFromBasket( id ) {
	var c = readCookie( 'FormsBasket' );
	document.status = c;
	if ( c ) {
		items = c.split( ',' );
		l_items = items.length;
		items2 = new Array();
		for ( i = 0; i < l_items; i++ ) { 
			if ( items[i] != id ) items2.push( items[i] );
		}
		check_compare_visibility( items2 );
		str = items2.join( ',' );
		createCookie( 'FormsBasket', str, 100 );
	}
}

/** Добавление/удалене варианта кредита из корзины **/
function addToBasket( id ) {
	var c = readCookie( 'FormsBasket' );
	document.status = c;
	alink = document.getElementById( 'basket_' + id );
	aimg = document.getElementById( 'img_basket_' + id );
	if ( c ) {
		items = c.split( ',' );
		l_items = items.length;
		for ( i = 0; i < l_items; i++ ) {
			if ( items[i] == id ) {
				delFromBasket( id );
				alink.title = 'Добавить в корзину';
				aimg.src = '/file/blob11547601212151243999903916992281';
				return ;
			}
		}
		items.push(id);
	} else {
		items = new Array();
		items.push(id);
	}
	check_compare_visibility( items );
	str = items.join( ',' );
	createCookie( 'FormsBasket', str,  100 );
	alink.title = 'Удалить из корзины';
	aimg.src = '/file/blob115476112121518847165191827262190';
}

/** Формирует куку сравнения из выбранных вариантов и переправляет на страницу сравнения **/
function do_compare( str ) {
	eraseCookie( 'CompareBasket' );
	var c = readCookie( 'FormsBasket' );
	if ( c ) {
		items = c.split(',');
		if ( items.length >= 2 ) {
			createCookie( 'CompareBasket', c,  100 );
			window.location = host + 'ipoteca/compare/' + str;
		}
	}
}/** По выбранному городу отображает банки/брокеров и меняет заголовок страницы **/
function filterCity( osel, t ) {
	var o, i, l_osel;
	l_osel = osel.options.length;
	for ( i = 0; i < l_osel; i++ ) {
		o = document.getElementById( osel.options[i].value );
		if ( o ) o.style.display = (osel.selectedIndex == 0) || (osel.selectedIndex == i) ? '' : 'none';
	}
	if ( t ) {
		o = document.getElementById('MainTitle');
		o.innerHTML = ( osel.selectedIndex == 0 ) ? 'Ипотечные банки' : 'Ипотека в г. ' + osel.options[osel.selectedIndex].text;
		document.title = o.innerHTML;
	}
}/** Опция "искать только в банках" при поиске кредита **/
function find_in_banks( el ) {
	k = 1;
	while ( z = document.getElementById('bank_' + k) ) {
		z.disabled = !el.checked;
		k++;
	}
}

/** Формирует список банков по заданному городу. Используется в форме поиска кредитов. **/
function selectCities( el ) {
	city_id = el.value;
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_selectCities;
		req.open("GET", host + 'ajax/load_banks/?c='+city_id, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_selectCities() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info;
			l_info = info.length;
			el = document.getElementById( 'listBanks' );
			if ( el ) {
				is_checked = document.getElementById( 'sb_only' ).checked;
				while ( el.childNodes.length > 0 ) el.removeChild( el.lastChild );
				for (i = 0; i < l_info; i++) {
					if ( info[i] != null ) {
						chk = document.createElement( 'input' );
						chk.type = 'checkbox';
						chk.name = 'banks_only';
						chk.value = info[i].id;
						chk.id = 'bank_' + (i+1);
						chk.disabled = !is_checked;
						lbl = document.createElement( 'label' );
						lbl.innerHTML = info[i].title;
						lbl.setAttribute( 'for', 'bank_' + (i+1) );
						br = document.createElement('br');
						el.appendChild( chk );
						el.appendChild( lbl );
						el.appendChild( br );
					}
				}
			}
		}
	}
}

/** Краткая/полная форма поиска по базе анкет **/
function fs_form( frm, s ) {
	elem = document.getElementById( frm );
	el = document.getElementById( s );
	if ( elem ) {
		if ( elem.className == 'unvis' ) {
			elem.className = 'vis';
			el.innerHTML = 'Краткая форма поиска';
		} else {
			elem.className = 'unvis';
			el.innerHTML = 'Полная форма поиска';
		}
	}
}function sortTable(id, col, rev) {
	var tblEl = document.getElementById(id);
	if (tblEl.reverseSort == null) {
		tblEl.reverseSort = new Array();
		tblEl.lastColumn = -1;
	}
	if (tblEl.reverseSort[col] == null) tblEl.reverseSort[col] = rev;
	if (col == tblEl.lastColumn) tblEl.reverseSort[col] = !tblEl.reverseSort[col];
	tblEl.lastColumn = col;
	var oldDsply = tblEl.style.display;
	tblEl.style.display = "none";
	var tmpEl;
	var i, j;
	var minVal, minIdx;
	var testVal;
	var cmp;
	for (i = 0; i < tblEl.rows.length - 1; i++) {
		minIdx = i;
		minVal = getTextValue(tblEl.rows[i].cells[col]);
		for (j = i + 1; j < tblEl.rows.length; j++) {
			testVal = getTextValue(tblEl.rows[j].cells[col]);
			cmp = compareValues(minVal, testVal);
			if (tblEl.reverseSort[col]) cmp = -cmp;
			if (cmp == 0 && col != 1) cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]), getTextValue(tblEl.rows[j].cells[1]));
			if (cmp > 0) {
				minIdx = j;
				minVal = testVal;
			}
		}
		if (minIdx > i) {
			tmpEl = tblEl.removeChild(tblEl.rows[minIdx]);
			tblEl.insertBefore(tmpEl, tblEl.rows[i]);
		}
	}
	makePretty(tblEl, col);
	tblEl.style.display = oldDsply;
	return false;
}

if (document.ELEMENT_NODE == null) {
	document.ELEMENT_NODE = 1;
	document.TEXT_NODE = 3;
}

function getTextValue(el) {
	var i, s;
	s = "";
	for (i = 0; i < el.childNodes.length; i++) {
		if (el.childNodes[i].nodeType == document.TEXT_NODE)
			s += el.childNodes[i].nodeValue;
		else if (el.childNodes[i].nodeType == document.ELEMENT_NODE && el.childNodes[i].tagName == "BR")
			s += " ";
		else
			s += getTextValue(el.childNodes[i]);
	}
	return s;
}

var regexpFloat = /^[0-9]+(.[0-9]+)?$/;

function compareValues(v1, v2) {
	var f1, f2;
	f1 = parseFloat(v1);
	f2 = parseFloat(v2);
	if (!isNaN(f1) && !isNaN(f2) && v1.match(regexpFloat) && v2.match(regexpFloat)) {
		v1 = f1;
		v2 = f2;
	}
	if (v1 == v2) return 0;
	if (v1 > v2) return 1;
	return -1;
}

var whtSpEnds = new RegExp("^\s*|\s*$", "g");
var whtSpMult = new RegExp("\s\s+", "g");

//-----------------------------------------------------------------------------
// Functions to update the table appearance after a sort.
//-----------------------------------------------------------------------------
// Style class names.
var rowClsNm = "alternateRow";
var colClsNm = "sortedColumn";

// Regular expressions for setting class names.
var rowTest = new RegExp(rowClsNm, "gi");
var colTest = new RegExp(colClsNm, "gi");

function makePretty(tblEl, col) {
	var i, j;
	var rowEl, cellEl;
	// Set style classes on each row to alternate their appearance.
	for (i = 0; i < tblEl.rows.length; i++) {
		rowEl = tblEl.rows[i];
		rowEl.className = rowEl.className.replace(rowTest, "");
		if (i % 2 != 0) rowEl.className += " " + rowClsNm;
		// Set style classes on each column (other than the name column) to
		// highlight the one that was sorted.
		for (j = 2; j < tblEl.rows[i].cells.length; j++) {
			cellEl = rowEl.cells[j];
			cellEl.className = cellEl.className.replace(colTest, "");
			if (j == col) cellEl.className += " " + colClsNm;
		}
	}
	// Find the table header and highlight the column that was sorted.
	var el = tblEl.parentNode.tHead;
	rowEl = el.rows[el.rows.length - 1];
	// Set style classes for each column as above.
	for (i = 0; i < rowEl.cells.length; i++) {
		cellEl = rowEl.cells[i];
		cellEl.className = cellEl.className.replace(colTest, "");
		// Highlight the header of the sorted column.
		if (i == col) cellEl.className += " " + colClsNm;
	}
}

function sortIt(objHandle, id, col, rev) {
	objHandle.blur();
	sortTable(id, col, rev);
}/** Возвращает координаты элемента **/
function getElementPosition( elemID ) {
	var offsetTrail = document.getElementById( elemID );
	var offsetLeft = 0;
	var offsetTop = 0;
	while ( offsetTrail ) {
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if (navigator.userAgent.indexOf("Mac") != -1 && 
		typeof document.body.leftMargin != "undefined") {
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	return {left:offsetLeft, top:offsetTop};
}

/** Всплывающие формы входа в разделе база заемщиков **/
function form_enter( el ) {
	pos = getElementPosition( 'z_in' );
	fe = document.getElementById(el);
	el2 = ( el == 'id_z_in' ) ? 'id_b_in' : 'id_z_in';
	document.getElementById(el2).className = 'unvis';
	fe.className = ( fe.className == 'form_enter' ) ? 'unvis' : 'form_enter';
	fe.style.left = pos.left - 70 + 'px';
	fe.style.top = pos.top + 20 +  'px';
}

// Принимает несколько аргументов-идентификаторов. Объект с первым идентификатором отображает, остальные прячет.
function switchTab() {
	var el;
	el = document.getElementById(arguments[0]);
	if ( el ) el.className = 'vis';
	for ( i = 1; i < arguments.length; i++ ) {
		el = document.getElementById( arguments[i] );
		if ( el ) el.className = 'unvis';
	}
}

function switchTabTR() {
	var el;
	el = document.getElementById(arguments[0]);
	if ( el ) {
		el.className = ( isMSIE ) ? 'vis' : 'vistr';
	}
	for ( i = 1; i < arguments.length; i++ ) {
		el = document.getElementById( arguments[i] );
		if ( el ) el.className = 'unvis';
	}
}

// Проверять существование пользователя?
var check_user_exist = true;
var user_exists = false;

// Проверять ли общедоступны это email или нет?
var check_email_is_bad = true;
var email_is_bad = false;

// Проверять есть ли такой банк в системе или нет?
var check_bank_exist = true;
var bank_exist = false;

// Проверять есть ли такой банк в БИКе?
var check_bank_bic = true;
var bank_bic = false;

// Шаг регистрации. 
var register_step = 1;

/** Проверка на существование банка в БИКе **/
function bb_checkBankBic( regn ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_bb_checkBankBic;
		req.open("GET", 'http://ipocredit.ru/ajax/bank_bic_exist/?regn='+regn, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_bb_checkBankBic() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info[0];
			if ( info.id > 0 ) {
				bank_bic = true;
				check_bank_bic = false;
			} else {
				bank_bic = false;
				check_bank_bic = false;
			}
			if ( checkBbRegister() ) return document.forms['frmRegister'].submit();
		}
	}
}

/** Проверка на существование банка в системе **/
function bb_checkBankExist( regn ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_bb_checkBankExist;
		req.open("GET", 'http://ipocredit.ru/ajax/bank_exist/?regn='+regn, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_bb_checkBankExist() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info[0];
			if ( info.id > 0 ) {
				bank_exist = true;
				check_bank_exist = false;
			} else {
				bank_exist = false;
				check_bank_exist = false;
			}
			if ( checkBbRegister() ) return document.forms['frmRegister'].submit();
		}
	}
}


/** Проверка на существование пользователя **/
function my_checkUserExist( uname ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_my_checkUserExist;
		req.open("GET", 'http://ipocredit.ru/ajax/user_exist/?uname='+uname, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_my_checkUserExist() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info[0];
			if ( info.uid > 0 ) {
				user_exists = true;
				check_user_exist = false;
			} else {
				user_exists = false;
				check_user_exist = false;
			}
			if ( checkMyRegister() ) return document.forms['frmRegister'].submit();
		}
	}
}

function bb_checkUserExist( uname ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_bb_checkUserExist;
		req.open("GET", 'http://ipocredit.ru/ajax/user_exist/?uname='+uname, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_bb_checkUserExist() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info[0];
			if ( info.uid > 0 ) {
				user_exists = true;
				check_user_exist = false;
			} else {
				user_exists = false;
				check_user_exist = false;
			}
			if ( checkBbRegister() ) return document.forms['frmRegister'].submit();
		}
	}
}

/** Проверка, является ли E-Mail одним из списка общедоступных **/
function bb_check_email( email ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = back_bb_check_email;
		req.open("GET", 'http://ipocredit.ru/ajax/pub_email/?email='+email, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

function back_bb_check_email() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info[0];
			if ( info.is_bad > 0 ) {
				email_is_bad = true;
				check_email_is_bad = false;
			} else {
				email_is_bad = false;
				check_email_is_bad = false;
			}
			if ( checkBbRegister() ) return document.forms['frmRegister'].submit();
		}
	}
}

/** Проверка введенных данных при регистрации в разделе "Моя анкета" **/
function checkMyRegister() {
	var e = false;
	// Берем данные с формы.
	d_family = document.getElementById('id_family').value;
	d_name = document.getElementById('id_name').value;
	d_father = document.getElementById('id_father').value;
	d_email = document.getElementById('id_email').value;
	d_login = document.getElementById('id_login').value;
	d_pass = document.getElementById('id_pass').value;
	d_pass2 = document.getElementById('id_pass2').value;
	d_captcha = document.getElementById('id_captcha').value;
	// Берем поля для ошибок.
	e_family = document.getElementById('err_family');
	e_name = document.getElementById('err_name');
	e_father = document.getElementById('err_father');
	e_email = document.getElementById('err_email');
	e_login = document.getElementById('err_login');
	e_pass = document.getElementById('err_pass');
	e_pass2 = document.getElementById('err_pass2');
	e_captcha = document.getElementById('err_captcha');
	// Очищаем поля с ошибками.
	e_family.innerHTML = '';
	e_name.innerHTML = '';
	e_father.innerHTML = '';
	e_email.innerHTML = '';
	e_login.innerHTML = '';
	e_pass.innerHTML = '';
	e_pass2.innerHTML = '';
	e_captcha.innerHTML = '';
	// Проверяем данные.
	if ( isEmpty(d_family) ) {e = true; e_family.innerHTML = 'Введите фамилию!';}
	if ( isEmpty(d_name) ) {e = true; e_name.innerHTML = 'Введите имя!';}
	if ( isEmpty(d_father) ) {e = true; e_father.innerHTML = 'Введите отчество!';}
	if ( isEmpty(d_email) ) {
		e = true;
		e_email.innerHTML = 'Введите E-Mail!';
	} else if ( !check_email(d_email) ) {
		e = true;
		e_email.innerHTML = 'Неверный E-Mail!';
	}
	if ( isEmpty(d_login) ) {
		e = true;
		e_login.innerHTML = 'Введите логин!';
	} else if ( !check_login(d_login) ) {
		e = true;
		e_login.innerHTML = 'Неверный логин!';
	}
	
	// Если надо - проверяем существование пользователя.
	if ( (check_user_exist) && ( !isEmpty(d_login) ) ) {
		my_checkUserExist( d_login );
		return false;
	}
	if ( user_exists ) {e_login.innerHTML = 'Такой пользователь уже существует.'; e = true;}
	// В следующий раз тоже проверить существование логина - вдруг пользователь его поменял?
	check_user_exist = true;
	user_exists = false;

	if ( isEmpty(d_pass) ) {e = true; e_pass.innerHTML = 'Не указан пароль!';}
	if ( isEmpty(d_pass2) ) {e = true; e_pass2.innerHTML = 'Не указано подтверждение пароля!';}
	if ( !isEmpty(d_pass) && !isEmpty(d_pass2) && d_pass != d_pass2 ) {e = true; e_pass2.innerHTML = 'Пароль и подтверждение не совпадают!';}
	if ( isEmpty(d_captcha) ) {e = true; e_captcha.innerHTML = 'Введите цифры с картинки!';}

	if ( e ) return false;
	return true;
}

function checkBbRegister() {
	var e = false;
	// Берем все данные с формы.
	d_type = document.getElementById('id_type').value;
	d_regn = document.getElementById('id_regn').value;
	d_broker = document.getElementById('id_broker').value;
	d_family = document.getElementById('id_family').value;
	d_name = document.getElementById('id_name').value;
	d_father = document.getElementById('id_father').value;
	d_work = document.getElementById('id_work').value;
	d_email = document.getElementById('id_email').value;
	d_login = document.getElementById('id_login').value;
	d_pass = document.getElementById('id_pass').value;
	d_pass2 = document.getElementById('id_pass2').value;
	d_captcha = document.getElementById('id_captcha').value;
	d_broker_title = document.getElementById('id_broker_title').value;
	// Берем все поля для ошибок.
	e_regn = document.getElementById('err_regn');
	e_family = document.getElementById('err_family');
	e_name = document.getElementById('err_name');
	e_father = document.getElementById('err_father');
	e_work = document.getElementById('err_work');
	e_email = document.getElementById('err_email');
	e_login = document.getElementById('err_login');
	e_pass = document.getElementById('err_pass');
	e_pass2 = document.getElementById('err_pass2');
	e_captcha = document.getElementById('err_captcha');
	e_broker_title = document.getElementById('err_broker_title');
	// Очищаем все поля с ошибками.
	e_regn.innerHTML = '';
	e_family.innerHTML = '';
	e_name.innerHTML = '';
	e_father.innerHTML = '';
	e_work.innerHTML = '';
	e_email.innerHTML = '';
	e_login.innerHTML = '';
	e_pass.innerHTML = '';
	e_pass2.innerHTML = '';
	e_captcha.innerHTML = '';
	e_broker_title.innerHTML = '';

	// Проверяем данные - шаг 1.
	if ( register_step == 1 ) {
		if (( d_type == 0 ) && ( isEmpty(d_regn) )) {e = true; e_regn.innerHTML = 'Введите рег. номер!';}
		if ( isEmpty(d_work) ) {e = true; e_work.innerHTML = 'Введите должность!';}
		if ( isEmpty(d_family) ) {e = true; e_family.innerHTML = 'Введите фамилию!';}
		if ( isEmpty(d_name) ) {e = true; e_name.innerHTML = 'Введите имя!';}
		if ( isEmpty(d_father) ) {e = true; e_father.innerHTML = 'Введите отчество!';}
		if ( isEmpty(d_email) ) {e = true; e_email.innerHTML = 'Введите E-Mail!';} else if ( !check_email(d_email) ) {e = true; e_email.innerHTML = 'Неверный E-Mail!';}
		if ( isEmpty(d_login) ) {e = true; e_login.innerHTML = 'Введите логин!';} else if ( !check_login(d_login) ) {e = true; e_login.innerHTML = 'Неверный логин!';}
		if ( isEmpty(d_pass) ) {e = true; e_pass.innerHTML = 'Не указан пароль!';}
		if ( isEmpty(d_pass2) ) {e = true; e_pass2.innerHTML = 'Не указано подтверждение пароля!';}
		if ( !isEmpty(d_pass) && !isEmpty(d_pass2) && d_pass != d_pass2 ) {e = true; e_pass2.innerHTML = 'Пароль и подтверждение не совпадают!';}
		if ( isEmpty(d_captcha) ) {e = true; e_captcha.innerHTML = 'Введите цифры с картинки!';}

		// Если надо - проверяем существование пользователя.
		if ( (check_user_exist) && ( !isEmpty(d_login) ) ) {
			bb_checkUserExist( d_login );
			return false;
		}
		if ( user_exists ) {e_login.innerHTML = 'Такой пользователь уже существует.'; e = true;}
		// В следующий раз тоже проверить существование логина - вдруг пользователь его поменял?
		check_user_exist = true;
		user_exists = false;

		// Если надо - проверяем E-Mail.
		if ( (check_email_is_bad) && ( !isEmpty(d_email) ) ) {
			bb_check_email( d_email );
			return false;
		}
		if ( email_is_bad ) {e_email.innerHTML = 'Разрешена регистрация только с корпоративных ящиков.'; e = true;}
		// В следующий раз тоже проверить E-Mail - вдруг пользователь его поменял?
		check_email_is_bad = true;
		email_is_bad = false;
		
		// Если надо - проверяем существование банка в системе.
		if ( (check_bank_bic) && (!isEmpty(d_regn)) && (d_type == 0) ) {
			bb_checkBankBic( d_regn );
			return false;
		}
		if ( (d_type == 0) && (!bank_bic) ) {e_regn.innerHTML = 'Такого банка не существует.'; e = true;}
		// В следующий раз тоже проверить рег. номер банка - вдруг пользователь его поменял?
		check_bank_bic = true;
		bank_bic = false;

		var have_bank = false;
		// Если надо - проверяем существование банка в системе.
		if ( (check_bank_exist) && (!isEmpty(d_regn)) && (d_type == 0) ) {
			bb_checkBankExist( d_regn );
			return false;
		}
		if ( bank_exist ) {have_bank = true;}
		// В следующий раз тоже проверить рег. номер банка - вдруг пользователь его поменял?
		check_bank_exist = true;
		bank_exist = false;

		if ( e ) {
			switchTab( 'stage_1', 'stage_2_0', 'stage_2_1' );
		} else {
			// Если новый брокер не создается или банк уже есть в системе - передаем данные серверу.
			if (( d_type == 1 && d_broker > 0 ) || ( d_type == 0 && have_bank == true )) {
				return true;
			} else {
				( d_type == 0 ) ? switchTab( 'stage_2_0', 'stage_1', 'stage_2_1' ) : switchTab( 'stage_2_1', 'stage_1', 'stage_2_0' );
				register_step++;
				return false;
			}
		}
	}
	// Проверяем данные - шаг 2.
	if ( register_step == 2 ) {
		if (( d_type == 1 ) && ( isEmpty(d_broker_title) )) {e = true; e_broker_title.innerHTML = 'Введите название!';}
		if ( e ) {
			( d_type == 0 ) ? switchTab( 'stage_2_0', 'stage_1', 'stage_2_1' ) : switchTab( 'stage_2_1', 'stage_1', 'stage_2_0' );
		}
	}

	if ( e ) return false;
	return true;
}

/** Проверка введенных данных при регистрации **/
function checkRegister() {
	d_family = document.getElementById('id_family').value;
	d_name = document.getElementById('id_name').value;
	d_father = document.getElementById('id_father').value;
	d_email = document.getElementById('id_email').value;
	d_login = document.getElementById('id_login').value;
	d_pass = document.getElementById('id_pass').value;
	d_pass2 = document.getElementById('id_pass2').value;
	d_mobile = document.getElementById('id_mobile').value;
	d_workphone = document.getElementById('id_workphone').value;
	d_homephone = document.getElementById('id_homephone').value;
	res = '';
	if ( !check_email(d_email) ) res = res + "- Не указан или неверный E-Mail\n";
	if ( !check_login(d_login) ) res = res + "- Не указан или неверный логин\n";
	if ( isEmpty(d_family) ) res += "- Не указана фамилия\n";
	if ( isEmpty(d_name) ) res += "- Не указано имя\n";
	if ( isEmpty(d_father) ) res += "- Не указано отчество\n";
	if ( isEmpty(d_pass) ) res += "- Не указан пароль\n";
	if ( isEmpty(d_pass2) ) res += "- Не указано подтверждение пароля\n";
	if ( (d_pass && d_pass2) && (d_pass != d_pass2) ) res += "- Пароль и подтверждение не совпадают\n";
	if ( (isEmpty(d_mobile) ) && ( isEmpty(d_workphone) ) && ( isEmpty(d_homephone) ) ) res += "- Не указан ни один телефон\n";
	if (res != '') {
		res = "При заполнении формы регистрации возникли следующие проблемы:\n"  +res;
		alert (res);
		return false;
	}
	return true;
}

/** Переключение между банками и брокерами при регистрации **/
function switchBrokerBank( el ) {
	(el.value == 0) ? switchTabTR( 'item_bank', 'item_broker' ) : switchTabTR( 'item_broker',  'item_bank' );
}

/** По региону загружает города **/
function loadCityByRegion( reg ) {
	initRequest();
	if ( req ) {
		req.onreadystatechange = ajaxloadCityByRegion;
		req.open("GET", 'http://ipocredit.ru/ajax/loadcitybyregion/?region='+reg, true);
		req.send(null);
		reqTimeout = setTimeout("req.abort();", reqAbortTime);
	}
}

/** Получает с сервера список городов и выводит их **/
function ajaxloadCityByRegion() {
	if (req.readyState == 4) {
		clearTimeout(reqTimeout);
		if (req.status == 200) {
			eval('var response = ('+req.responseText+')');
			info = response.info;
			l_info = info.length;
			el = document.getElementById( 'id_city' );
			if ( el ) {
				while ( el.childNodes.length > 0 ) el.removeChild( el.lastChild );
				for (i = 0; i < l_info; i++) {
					opt = document.createElement( 'option' );
					if ( info[i] != null ) {
						opt.value = info[i].id;
						opt.innerHTML = info[i].title;
						el.appendChild( opt );
					}
				}
			}
		}
	}
}function trim( str ) {
	var trimmed;
	trimmed = str.toString().replace( /^ */g, '' );
	trimmed = trimmed.toString().replace( / *$/g, '' );
	return( trimmed );
}

function isDigit( num ) {
	if ( num.length > 1 ) { return false; }
	var string = "1234567890";
	if ( string.indexOf(num) != -1 ) { return true; }
	return false;
}

function isBlank( val ) {
	if ( val == null ) { return true; }
	for ( var i = 0; i < val.length; i++ ) {
		if ( (val.charAt(i)!='') && (val.charAt(i)!="\t") && (val.charAt(i)!="\n") && (val.charAt(i)!="\r") ) return false;
	}
	return true;
}

function isInt( val ) {
	if ( isBlank( val ) ) { return false; }
	for ( var i=0; i < val.length; i++ ) {
		if ( !isDigit( val.charAt(i) ) ) { return false; }
	}
	return true;
}

function isFloat( val ) {
	var val_repl = val.toString().replace( /,/gi, '.' );
	return ( parseFloat( val_repl, 10 ) == ( val_repl * 1 ) );
}

function getFloat( val ) {
	return Number(val.replace(/,/gi, "."));
}

function Round( num, signs ) {
	var base = Math.pow(10, signs);
	return Math.round( num / base ) * base;
}

/****************************************/

// Таблица вывода результатов.
var calc_result;
// Тип калькулятора - что надо считать.
var calc_type = 1;
// Признак остановки.
var is_stop = 0;
// Используемые данные.
var income, procent, other, srokmin, srokmax, firstpay, monthly_pay, flat_cost, credit_sum;
// Значения по умолчанию.
var def_srokmin = 1;
var def_srokmax = 30;

/** Меняем опцию расчета **/
function change_calc_type( t ) {
	for( i = 1; i <= 3; i++ ) {
		el = document.getElementById( 'calc_params_' + i );
		if ( el ) el.className = 'unvis';
		el = document.getElementById( 'calc_help_' + i );
		if ( el ) el.className = 'unvis';
	}
	el = document.getElementById( 'calculator_result' );
	if ( el ) { while ( el.childNodes.length > 0 ) el.removeChild( el.lastChild ); }
	el = document.getElementById( 'calc_result_top' );
	if ( el ) el.className = 'unvis';

	el = document.getElementById( 'calc_params_' + t );
	if ( el ) {
		el.className = 'calc_params';
		calc_type = t;
		init_calculator();
	}
}

function showError( field, msg ) {
	el = document.getElementById( field );
	if ( el ) {
		el.className =  'field_error';
		el2 = document.getElementById( field + '_warn' );
		if ( el2 ) el2.innerHTML = msg;
	}
}

function showNotice( field, msg, new_value) {
	el = document.getElementById( field );
	if ( el ) {
		el.className =  'field_error';
		el.value = new_value;
		el2 = document.getElementById( field + '_warn' );
		if ( el2 ) el2.innerHTML = msg;
	}
}

/** Проверяем заполнены ли обязательные поля **/
function checkObligatory() {
	if ( ( !isFloat( procent ) ) || ( procent < 0 ) || ( procent > 100 ) ) {
		showError( 'id_txt_proc_' + calc_type, 'Введите, пожалуйста, число от 0 до 100' );
		is_stop = 1;
	}
	str = '';
	switch ( calc_type ) {
		case 1:
			if ( !isInt( monthly_pay ) || ( monthly_pay <= 0 ) ) str = 'id_txt_deposit';
			break;
		case 2:
			if ( !isInt( flat_cost ) || ( flat_cost <= 0 ) ) str = 'id_txt_cost';
			break;
		case 3:
			if ( !isInt( credit_sum ) || ( credit_sum <= 0 ) ) str = 'id_txt_sum';
			break;
	}
	if ( str != '' ) {
		showError( str, 'Введите, пожалуйста, целое положительное число' );
		is_stop = 1;
	}
	return ;
}

/** Очищаем поля ошибок **/
function clear_errors() {
	is_stop = 0;
	income = 0; procent = 0; other = 0; srokmin = 0; srokmax = 0; firstpay = 0; monthly_pay = 0; flat_cost = 0; credit_sum = 0;

	arr = Array( 'id_txt_income', 'id_txt_firstpay', 'id_txt_proc', 'id_txt_other', 'id_txt_srokmin', 'id_txt_srokmax' );
	for ( i = 0; i < arr.length; i++ ) {
		for ( j = 1; j <= 3; j++ ) {
			el = document.getElementById( arr[i] + '_' + j );
			if ( el ) el.className = 'long';
			el = document.getElementById( arr[i] + '_' + j + '_warn' );
			if ( el ) el.innerHTML = '';
		}
	}
	arr2 = new Array( 'id_txt_cost', 'id_txt_sum', 'id_txt_deposit' );
	for ( i = 0; i < arr2.length; i++ ) {
		el = document.getElementById( arr2[i] );
		if ( el ) el.className = 'long';
		el = document.getElementById( arr2[i] + '_warn' );
		if ( el ) el.innerHTML = '';
	}
}

function init_calculator() {
	if ( ( calc_type > 3 ) || ( calc_type < 0 ) ) { calc_type = 1; }
	arr = Array( 'id_txt_income', 'id_txt_firstpay', 'id_txt_proc', 'id_txt_other', 'id_txt_srokmin', 'id_txt_srokmax' );
	for ( i = 0; i < arr.length; i++ ) {
		for ( j = 1; j <= 3; j++ ) {
			el = document.getElementById( arr[i] + '_' + j );
			if ( el ) el.value = '';
		}
	}
	arr2 = new Array( 'id_txt_cost', 'id_txt_sum', 'id_txt_deposit' );
	for ( i = 0; i < arr2.length; i++ ) {
		el = document.getElementById( arr2[i] );
		if ( el ) el.value = '';
	}
	clear_errors();
}

/** Дополнительные проверки **/
function addOptional() {
	switch ( calc_type ) {
		case 1:
			// Доход должен быть в 2 раза больше взноса.
			if ( isBlank(income) ) income = 0;
			if ( (2*monthly_pay)  > income) {
				if ( income == 0 ) {
					showNotice( 'id_txt_income_' + calc_type, 'Доход должен быть в 2 раза больше взноса', (2*monthly_pay) );
				} else {
					showNotice( 'id_txt_deposit', 'Взнос не может состовлять более 50 процентов от дохода', (income/2) );
				}
			}
			break;
	}
	if ( isBlank(srokmin) ) srokmin = 0;
	if ( isBlank(srokmax) ) srokmax = 0;
	if ( ( srokmin < def_srokmin ) || (srokmin > def_srokmax) ) {
		srokmin = def_srokmin;
		el = document.getElementById( 'id_txt_srokmin_' + calc_type );
		if ( el ) {
			el.className =  'field_error';
			el.value = srokmin;
		}
	}
	if ( (srokmax < def_srokmin) || (srokmax > def_srokmax) ) {
		srokmax = def_srokmax;
		el = document.getElementById( 'id_txt_srokmax_' + calc_type );
		if ( el ) {
			el.className =  'field_error';
			el.value = srokmax;
		}
	}
}

/** Начинаем считать **/
function countCredit() {
	clear_errors();
	// Берем введенные данные.
	income = trim( document.getElementById( 'id_txt_income_' + calc_type ).value );
	procent = trim( document.getElementById( 'id_txt_proc_' + calc_type ).value );
	other = trim( document.getElementById( 'id_txt_other_' + calc_type ).value );
	srokmin = trim( document.getElementById( 'id_txt_srokmin_' + calc_type ).value );
	srokmax = trim( document.getElementById( 'id_txt_srokmax_' + calc_type ).value );
	firstpay = ( calc_type < 3 ) ? trim( document.getElementById( 'id_txt_firstpay_' + calc_type ).value ) : 0;
	switch ( calc_type ) {
		case 1:
			monthly_pay = trim( document.getElementById( 'id_txt_deposit' ).value );
			break;
		case 2:
			flat_cost = trim( document.getElementById( 'id_txt_cost' ).value );
			break;
		case 3:
			credit_sum = trim( document.getElementById( 'id_txt_sum' ).value );
			break;
	}
	checkObligatory();
	if ( is_stop > 0 ) return ;
	addOptional();
	switch ( calc_type ) {
		case 1:
			show_flat_cost();
			break ;
		case 2:
			show_monthly_pay();
			break ;
		case 3:
			show_monthly_by_credit();
			break ;
	}
}

function create_calc_result_table() {
	calc_result = document.createElement( 'table' );
	calc_result.cellPadding = "0";
	calc_result.cellSpacing = "0";
	calc_result.setAttribute( "cellpadding", "0" );
	calc_result.setAttribute( "cellspacing", "0" );
	calc_result.setAttribute( "rules", "all" );
	calc_result.className = "calc_results";
	tr = calc_result.insertRow( 0 );
	switch( calc_type ) {
		case 1:
			arr = new Array( 'Срок кредита (лет)', 'Стоимость квартиры', 'Первый взнос', 'Кредит', '"Переплата" за кредит' );
			break;
		case 2:
			arr = new Array( 'Срок кредита (лет)', 'Ежемесячный взнос', 'Минимальный доход', '"Переплата" за кредит' );
			break;
		case 3:
			arr = new Array( 'Срок кредита (лет)', 'Ежемесячный взнос', 'Минимальный доход', '"Переплата" за кредит' );
			break;
		default:
			arr = new Array();
			break;
	}
	for ( i = 0; i < arr.length; i++ ) {
		td = tr.insertCell( i );
		td.className = "head";
		td.setAttribute( "valign", "top" );
		td.innerHTML = arr[i];
		if ( i == arr.length-1 ) {
			td.setAttribute( "colspan", "2" );
		}
	}
}

function show_flat_cost() {
	var flat_cost_value = 0;
	var first_fee_value_entered = Number( firstpay );
	var credit_value = 0;
	var overpay = 0;
	var overpay_percent = 0;

	z = 1;
	err = 0;
	create_calc_result_table();
	for ( var i = Number(srokmin); i <= Number(srokmax); i++ ) {
		flat_cost_value = CountFlatCost(i, first_fee_value_entered );
		if ( first_fee_value_entered && ( (C2=Round(0.3*flat_cost_value, 2) ) > first_fee_value_entered) ) {
			first_fee_value = C2;
			flat_cost_value = CountFlatCost( i, first_fee_value );
			err = 1;
		} else {
			first_fee_value = first_fee_value_entered;
			err = 0;
		}
		credit_value = Round( flat_cost_value - first_fee_value, 2 );
		overpay = Round(12*i*Number(monthly_pay) - credit_value, 2);
		overpay_percent = Math.round(overpay/credit_value*100);

		tr = calc_result.insertRow( z );
		td = tr.insertCell( 0 );
		td.innerHTML = i;
		td = tr.insertCell( 1 );
		td.innerHTML = formatNumber( flat_cost_value );
		td = tr.insertCell( 2 );
		td.innerHTML = formatNumber( first_fee_value );
		if ( err == 1 ) {
			td.className = 'error';
			td.title = 'Минимально допустимая сумма первого взноса больше введенной Вами';
		}
		td = tr.insertCell( 3 );
		td.innerHTML = formatNumber( credit_value );
		td = tr.insertCell( 4 );
		td.innerHTML = formatNumber( overpay );
		td = tr.insertCell( 5 );
		td.innerHTML = overpay_percent + '%';
		z++;
	}
	
	show_result();
}

function show_monthly_pay() {
	var monthly_fee_value = 0;
	var income_value = 0;
	var credit_value = Round((Number(flat_cost) - Number(firstpay)), 2);
	var overpay = 0;
	var overpay_percent = 0;
	z = 1;
	err = 0;
	
	create_calc_result_table();
	for ( var i = Number(srokmax); i >= Number(srokmin); i-- ) {
		monthly_fee_value = CountMonthlyFee( i );
		income_value = Round( monthly_fee_value*2, 2 );
		overpay = Round( 12 * i * Number( monthly_fee_value ) - credit_value, 2 );
		overpay_percent = Math.round( overpay / credit_value * 100 );
		incorrect = income_value > income;
		err = ( income_value > income ) ? 1 : 0;
		tr = calc_result.insertRow( z );
		td = tr.insertCell( 0 );
		td.innerHTML = i;
		td = tr.insertCell( 1 );
		td.innerHTML = formatNumber( monthly_fee_value );
		td = tr.insertCell( 2 );
		td.innerHTML = formatNumber( income_value );
		if ( err == 1 ) {
			td.className = 'error';
			td.title = 'Расчетный минимальный доход больше введенного Вами';
		}
		td = tr.insertCell( 3 );
		td.innerHTML = formatNumber( overpay );
		td = tr.insertCell( 4 );
		td.innerHTML = overpay_percent + '%';
		z++;

	}

	show_result();
}

function show_monthly_by_credit() {
	var monthly_fee_value = 0;
	var income_value = 0;
	var credit_value = Round( Number(credit_sum), 2 );
	var overpay = 0;
	var overpay_percent = 0;
	z = 1;
	err = 0;

	create_calc_result_table();

	for ( var i = Number(srokmax); i >= Number(srokmin); i-- ) {
		monthly_fee_value = CountMonthlyFeeByCredit( i );
		income_value = Round( monthly_fee_value*2, 2 );
		overpay = Round( 12 * i * Number( monthly_fee_value ) - credit_value, 2 );
		overpay_percent = Math.round( overpay / credit_value * 100 );
		incorrect = income_value > income;
		err = ( income_value > income ) ? 1 : 0;

		tr = calc_result.insertRow( z );
		td = tr.insertCell( 0 );
		td.innerHTML = i;
		td = tr.insertCell( 1 );
		td.innerHTML = formatNumber( monthly_fee_value );
		td = tr.insertCell( 2 );
		td.innerHTML = formatNumber( income_value );
		if ( err == 1 ) {
			td.className = 'error';
			td.title = 'Расчетный минимальный доход больше введенного Вами';
		}
		td = tr.insertCell( 3 );
		td.innerHTML = formatNumber( overpay );
		td = tr.insertCell( 4 );
		td.innerHTML = overpay_percent + '%';
		z++;
	}

	show_result();
}

function show_result() {
	el = document.getElementById( 'calculator_result' );
	if ( el ) {
		while ( el.childNodes.length > 0 ) el.removeChild( el.lastChild );
		el.appendChild( calc_result );
	}
	el = document.getElementById( 'calc_help_' + calc_type );
	if ( el ) el.className = 'calc_help';
	el = document.getElementById( 'calc_result_top' );
	if ( el ) el.className = 'vis';
}

function CountFlatCost( N, fst_fee_ent ) {
	var C = Number( monthly_pay );
	var P = getFloat( other ) * 0.01;
	var R = getFloat( procent ) * 0.01;
	var C1 = fst_fee_ent;
	var S = 0;
	for ( var i=1; i <= 12*N; i++ ) {
		S += 1/Math.pow( (1+(R+P)/12), i );
	}
	S = Round( S * C + C1, 3 );
	return S;
}

function CountMonthlyFee( N ) {
	var C1 = Number( firstpay );
	var P = getFloat( other ) * 0.01;
	var R = getFloat( procent ) * 0.01;
	var S = Number( flat_cost );
	var C = 0;
	for (var i=1; i <= 12*N; i++) {
		C += 1 / Math.pow( (1+(R+P)/12), i );
	}
	C = Round( (S-C1)/C, 1 );
	return C;
}

function CountMonthlyFeeByCredit( N ) {
	var P = getFloat( other ) * 0.01;
	var R = getFloat( procent ) * 0.01;
	var cred = Number( credit_sum );
	var C = 0;
	for ( var i=1; i <= 12*N; i++ ) {
		C += 1 / Math.pow( (1+(R+P)/12), i );
	}
	C = Round( cred/C, 1 );
	return C;
}

function formatNumber( value ) {
	stringValue = new String( value );
	returnValue = '';
	for ( var i = stringValue.length, j=0; i >= 0; i--, j++) {
		returnValue = stringValue.charAt(i)+returnValue;
		if (j%3==0&&j!=0) returnValue = ' '+returnValue;
	}
	return returnValue;
}