/*!
 * Скрипты Est-a-tet
 * Иван Петропольский, <jscss.ru@gmail.com>
 **/
var we_on_object=false;

function unique(a) {
    var o = {}, i, l = a.length, r = [];
    for(i=0; i<l;i+=1) o[a[i]] = a[i];
    for(i in o) r.push(o[i]);
    return r;
};


$(function(){
	var
		W = window,
		D = document,
		$W = $(W),
		$L = $.Lang,
		g_map = null;

	// Короткое 'undefined' (для сжатия)
	W.UNDEF = 'undefined';
	var location_url=location.href.substr(29);
	if (sessvars.object_url === undefined) sessvars.object_url=new Array();
	if (location.href.substr(0, 29)=='http://www.estatet.ru/catalog'){
		var url_of_object_regexp=/(?:\w+)?[/]\w+[/]\w+/i;
		if(location_url.match(url_of_object_regexp)||location_url.substr(0, 5)=='_sec/'||location_url.substr(0, 11)=='_rentelite/'){
			window.we_on_object=true;
			sessvars.object_url.push(location.href);
			sessvars.object_url=unique(sessvars.object_url);
		}
	}
	if(sessvars.object_url.length >3)
		sessvars.object_url.shift();

	// Преобразование цены в тыс. и млн.
	W.pf = function(val, dec) {
		var
			v = parseFloat((val + '').replace(',', '.'), 10) || 0,
			a = (v >= 1000000)
				? [1000000, ' ' + $L.mln]
				: (v >= 1000)
					? [1000, ' ' + $L.tous]
					: [1, ''];
		v = (v / a[0])
			.toFixed(dec || 1)
			.toString()
			.replace('.0', '')
			.replace('.', ',');
		return v + a[1];
	}
	
	if (sessvars.cat_2 !== undefined){
		if (sessvars.cat_2.price_units == 1){
			$(".price_rub").hide();
			$(".price_usd").show();
		}
		else if (sessvars.cat_2.price_units == 2){
			$(".price_rub").hide();
			$(".price_eu").show();
		}
	}

	// Баг
	if ($.browser.msie) {
		$('.downloads .cframe').each(function(index, item) {
			var $this = $(this);
			$this.width($this.width());
		});
	}

	// Склонение
	W.sklon = function(val, s1, s2, s3) {
		var
			v = parseFloat((val + '').replace(',', '.'), 10) || 0;
		if (v != Math.floor(v)) {
			return s2;
		}
		if (Math.floor((v % 100) / 10) == 1) {
			return s3 || s2;
		}
		var
			l = v % 10;
		if (l==2 || l==3 || l==4) {
			return s2;
		}
		if (l==1) {
			return s1;
		}
		return s3 || s2;
	}

	// true, если объект пуст (добавлено в jQuery 1.4)
	$.isEmptyObject = function (obj) {
		for (var name in obj) {
			return false;
		}
		return true;
	}

	// Новости
	var
		items = $('#news:not(.object_news) > ul > li').each(function(i) {
			if (i) $(this).css({'opacity': 0, 'display': 'block', 'z-index': 0});
		});
	if (items.length) {
		var slider = $('<div class="slider"><b /><i /><span><a class="ui-slider-handle" /></span></div>'),
			fn = function(e, ui) {
				if (ui.value == n) return;
				items.eq(n).stop().css('z-index', 0).animate({'opacity': 0}, 300);
				items.eq(ui.value).stop().css('z-index', 1).animate({'opacity': 1}, 300);
				n = ui.value;
			},
			n = 0;
		$('#news ul').after(slider);
		$('#news .slider + div').css('margin-top', 3);
		slider.slider({
			value: 0,
			min: 0,
			max: items.length - 1,
			stepping: 1,
			slide: fn,
			change: fn
		});
		$('#news').mousewheel(function(e, offset) {
			if (W.opera) offset *= -1;
			slider.slider('value', slider.slider('value') + (offset > 0 ? -1 : 1));
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		});
	}

	// Спецпредложения
	var special = D.getElementById('special');
	if (special) {
		var specials = $('#special li');
		specials.parent = $('#special');
		$.extend(specials, {
			'cursor': ((specials.index(specials.parent.find('li.active')) + 1) || 1) - 1,
			'plink': specials.parent.find('a.prev'),
			'nlink': specials.parent.find('a.next'),
			'link': specials.parent.find('h2 a'),
			'bw_time': 2000,
			'ch_time': 500,
			'toNext': function(e) {
				if (this.cursor + 1 < this.length) {
					var source = this[this.cursor], target = this[this.cursor+++1];
					target.a.show();
					$(target).add(target.img).add(target.a).add(target.h3).stop().animate({'opacity': 1}, this.ch_time);
					$(source.a).add(source.h3).stop().animate({'opacity': 0}, this.ch_time, function(target) {
						return function() {
							$(target.bw).stop().animate({'opacity': 1}, 250);
							$(target.img).stop().animate({'opacity': 0}, specials.bw_time);
						}
					}(target));
					source.a.hide();
				}

				return this.process(e);
			},
			'toPrev': function(e) {
				if (this.cursor > 0) {
					var source = this[this.cursor], target = this[this.cursor---1];
					$(source).add(source.bw).add(source.img).add(source.a).add(source.h3).stop().animate({'opacity': 0}, this.ch_time);
					source.a.hide();
					target.a.show();
					$(target.a).add(target.img).add(target.h3).stop().animate({'opacity': 1}, this.ch_time, function(target) {
						return function() {
							$(target.bw).stop().animate({'opacity': 1}, 250);
							$(target.img).stop().animate({'opacity': 0}, specials.bw_time);
						}
					}(target));
				}
				return this.process(e);
			},
			'process': function(e) {
				this.link.attr({
					'href': this[this.cursor].a.attr('href'),
					'title': this.link.title = this[this.cursor].a.title
				});
				if (this.b) this.b.stop().animate({'height': $(specials[specials.cursor].h3).height()}, this.ch_time);
				this.plink[this.cursor == 0 ? 'addClass' : 'removeClass']('first');
				this.nlink[this.cursor == this.length - 1 ? 'addClass' : 'removeClass']('last');
				if (e.preventDefault) e.preventDefault();
				e.returnValue = false;
				return false;
			}
		});
		specials.plink.click(function(e) { return specials.toPrev(e); });
		specials.nlink.click(function(e) { return specials.toNext(e); });
		specials.parent.mousewheel(function(e, offset) {
			if (W.opera) offset *= -1;
			if (offset > 0) specials.toPrev(e);
			else specials.toNext(e);
		});
		specials.each(function(index, item) {
			item.zIndex = 3*index + 1;
			specials.parent.append(item.h3 = $(item).find('h3'));
			specials.parent.append(item.a = $(item).find('a'));
			if (index != specials.cursor) {
				$(item.h3).add($(item.a)).css('opacity', 0);
				$(item.a).hide();
				$(item).css({
					'z-index': item.zIndex,
					'opacity': 0
				}).show();
			}
			item.img = $(item).find('img').css('z-index', 3*index + 3);
			item.bw = $('<img class="bw" src="' + item.a.attr('rel') + '" />').insertBefore(item.img).css({'opacity': 0, 'z-index': 3*index + 2});
		});
		specials.parent.append(specials.b = $('<b></b>').css({
			'opacity': 0.5,
			'height': $(specials[specials.cursor].h3).height()
		}).show());
		specials.parent.addClass('nobg');
		$(specials[specials.cursor].bw).css('opacity', 1);
		$(specials[specials.cursor].img).animate({'opacity': 0}, specials.bw_time);
		specials.link.attr({
			'href': specials[specials.cursor].a.attr('href'),
			'title': specials.link.title = specials[specials.cursor].a.title
		});
	}

	// Календарь
	if ($('.monthes').length) {
		var w = 0,
			m = ($('.monthes .cbox li').index($('.monthes .cbox li.active')) || 0) + 1,
			$dec = $('.monthes .cbox li:last'),
			mslider = $('<div class="slider"><b /><i /><span><a class="ui-slider-handle" /></span></div>')
				.css('width', $dec[0].offsetLeft + $dec[0].offsetWidth - 60),
			fn = function(e, ui) {
				if (ui.value == m) return;
				$('.monthes .cbox li:nth-child(' + m + ')').removeClass('active');
				$('.monthes .cbox li:nth-child(' + ui.value + ')').addClass('active');
				m = ui.value;
			};
		$('.monthes .cbox ul').before(mslider).css({marginTop: 7, paddingTop: 0});
		mslider.slider({
			value: m,
			min: 1,
			max: 12,
			stepping: 1,
			slide: fn,
			stop: function(e, ui) {
				W.location = $('.monthes .cbox li:nth-child(' + ui.value + ') a').attr('href');
			}
		});
	}

	// Схема проезда
	$(".office_map").each(function(){
		var om_block = $('<div class="om_block"><h3>' + $(this).attr('title') + '</h3></div>').css('visibility', 'hidden');
		om_block.css('background-image', 'url('+$(this).attr('rel')+')');
		$(document.body).append(om_block.click(function() {$(this).css('visibility', 'hidden'); }));
		$(this).click(function(e) {
			$('.om_block').css('visibility', 'hidden');
			om_block.css('visibility', 'visible');
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		});
	});

	if ($('#office_map').length) {
		var om_block = $('<div id="om_block"><h3>' + $('#office_map').attr('title') + '</h3></div>').css('visibility', 'hidden');
		$(document.body).append(om_block.click(function() {$('#om_block').css('visibility', 'hidden'); }));
		$('#office_map').click(function(e) {
			$('#om_block2').css('visibility', 'hidden');
			$('#om_block').css('visibility', 'visible');
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		});
	}

	if ($('#office_map2').length) {
		var om_block = $('<div id="om_block2"><h3>' + $('#office_map2').attr('title') + '</h3></div>').css('visibility', 'hidden');
		$(document.body).append(om_block.click(function() {$('#om_block2').css('visibility', 'hidden'); }));
		$('#office_map2').click(function(e) {
			$('#om_block').css('visibility', 'hidden');
			$('#om_block2').css('visibility', 'visible');
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		});
	}

	// Добавить в закладки
	$('.bookmark').click(function(e) {
		var url = D.location,
			title = D.title,
			e = e || W.event;
		if ($.browser.msie) W.external.AddFavorite(url,title);
		else if ($.browser.opera) {
			this.href = url;
			this.rel = "sidebar";
			this.title = url+','+title;
			return true;
		}
		else if ($.browser.mozilla) W.sidebar.addPanel(title,url,"");
		else alert($L.fav);
		return false;
	});

	// Интерактивный блок на главной
	/**/
	var promo = D.getElementById('promo');
	if (promo) {
		(promo.images = $(promo).find('img')).not('.active').css({'opacity': 0, 'display': 'inline'});
		promo.active = ((promo.images.index($(promo).find('img.active')) + 1) || 1) - 1;
		promo.update = function(skip) {
			if (!skip) {
				var a = promo.images[promo.active],
					n = (promo.active + 1 < promo.images.length) ? promo.active + 1 : 0,
					b = promo.images[n];
				$(b).css({'z-index': 1}).animate({'opacity': 1}, 100);
				$(a).css('z-index', 2).animate({'opacity': 0}, 2000, function(el) {
					return function() {
						$(el).css('z-index', 0);
					}
				}(a));
				promo.active = n;
			}
			W.setTimeout(promo.update, 5500)
		}
		promo.update(true);
	}
	/**/

	// О компании на главной
	var about = D.getElementById('about');
	if (about) {
		about.ul = $(about).find('ul');
		about.items = about.ul.find('li').each(function(i) {
			if (i) $(this).css({'opacity': 0, 'display': 'block', 'z-index': 0});
		});
		if (about.items.length) {
			var fn = function(e, ui) {
				if (ui.value != about.n) {
					$(about.items[about.n]).stop().css('z-index', 0).animate({'opacity': 0}, 300);
					$(about.items[ui.value]).stop().css('z-index', 1).animate({'opacity': 1}, 300);
					about.n = ui.value;
				}
			};
			about.slider = $('<div class="slider"><b /><i /><span><a class="ui-slider-handle" /></span></div>');
			about.n = 0;
			about.ul.after(about.slider);
			about.slider.slider({
				value: 0,
				min: 0,
				max: about.items.length - 1,
				stepping: 1,
				slide: fn,
				change: fn
			});
			$(about).mousewheel(function(e, offset) {
				if (W.opera) offset *= -1;
				about.slider.slider('value', about.slider.slider('value') + (offset > 0 ? -1 : 1));
				if (e.preventDefault) e.preventDefault();
				e.returnValue = false;
				return false;
			});
		}
	}

	// Спецпредложения на главной
	var fly = document.getElementById('specials');
	if (fly) {
		fly.items = $(fly).find('li').not('.i5').each(function(index, item) { // для всех кроме кнопки "обновить"
			item.index = index;
			item.h3 = $(item).find('h3');
			item.a = $(item).find('a');
			item.obj = {
				'title': $(item.h3).text(),
				'href': $(item.a).attr('href')
			}
			item.img = $(item).find('img');
			if (!index) {
				fly.big = item;
				$(fly).append(fly.a = $('<a></a>').attr({'href': item.obj.href, 'title': item.obj.title}).addClass('clone'));
				item.obj.img = $(item.img).attr('src');
				item.obj.preview = $(item.a).attr('rel');
				item.strong = $(item).find('strong').addClass('clone').appendTo(fly.a);
				item.container = $(item.strong).find('span span');
				item.obj.descr = $(item.container).text();
				$(item).css('z-index', 1);
				item.img2 = $('<img>').attr('src', item.obj.preview).css({'position': 'absolute', 'top': -2000, 'visibility': 'hidden'}).insertAfter(item.img);
			}
			else {
				item.obj.img = $(item.a).attr('rel');
				item.obj.preview = $(item.img).attr('src');
				item.obj.descr = $(item.a).find('span').text();
				item.img2 = $('<img>').attr('src', item.obj.img).css({'position': 'absolute', 'top': -2000, 'visibility': 'hidden'}).insertBefore(item.img);
			}
		});
		fly.active = 0;
		fly.time_fly = 200;
		fly.time_fade = 500;
		fly.select = function(index) {
			if (fly.busy) return false;
			fly.busy = true;
			var item = this.items[index];
			var
				stealth = $(item.img).clone().appendTo(item).css('z-index', 3),
				p1 = $(item.img).offset(),
				p2 = $(fly.big.img).offset();
			item.img.attr({'src': fly.big.obj.preview, 'alt': fly.big.obj.descr});
			item.h3.html(fly.big.obj.title);
			$(item.a).attr({'href': fly.big.obj.href, 'title': fly.big.obj.descr});
			$(stealth).animate({
				'width': 281,
				'height': 281,
				'left': p2.left-p1.left+$(item.img).position().left,
				'top': p2.top-p1.top+$(item.img).position().top
			}, fly.time_fly, 'swing', function(item) {
				return function() {
					$(fly.big.h3).html(item.obj.title);
					$(fly.big.container).html(item.obj.descr);
					$(fly.big.img).attr({'src': item.obj.img, 'alt': item.obj.descr});
					$(fly.big.a).attr({'href': item.obj.href, 'title': item.obj.descr});
					$(fly.a).attr({'href': item.obj.href, 'title': item.obj.descr});
					$(this).animate({'opacity': 0}, fly.time_fade, function(item) {
						return function() {
							var tmp = item.obj;
							item.obj = fly.big.obj;
							fly.big.obj = tmp;
							$(this).remove();
							fly.busy = false;
						}
					}(item));
				}
			}(item));
		}
		$(fly.items).not('.i1').click(function(e) {
			fly.select(this.index);
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false;
			return false;
		});
		$('#specials li.i5 a').click(function(){
			$.getJSON('/specs-js.php?'+Math.random(), {cache: false}, function(json) {  // загрузку JSON данных 
				houses_list = json.houses; // список загруженный из JSON
				var houses_obj = document.getElementById('specials');
				if (houses_obj) {
					houses_obj.items = $(houses_obj).find('li').not('.i5').each(function(index, item) { // для всех кроме кнопки "обновить"
						item.index = index;
						item.obj.title = houses_list[index].n;
						item.obj.descr = houses_list[index].d;
						item.obj.href = houses_list[index].d1;
						$(item).find('h3').html(item.obj.title);
						if (typeof houses_list[index] !== UNDEF) {
							if (index == 0) {
								item.aclone = $(houses_obj).find('a.clone');
								$(item.aclone).attr ({'href': item.obj.href, 'title': item.obj.descr});
								$(item.aclone).find('strong.clone span span').text(item.obj.descr);
								item.obj.preview = '/showobject.php?id=' + houses_list[index].f2;
								item.obj.img = '/showobject.php?id=' + houses_list[index].f1;
								$(item.img).attr({'src': item.obj.img, 'alt': item.obj.descr});
								$(item.a).attr({'href': item.obj.href, 'rel': item.obj.preview, 'title': item.obj.descr});
								$(item.img2).attr({'src': item.obj.preview});
							} else {
								item.strong = $(item).find('strong');
								$(item.strong).find('span').html(item.obj.descr);
								item.obj.preview = '/showobject.php?id=' + houses_list[index].f2;
								item.obj.img = '/showobject.php?id=' + houses_list[index].f1;
								$(item.img).attr({'src': item.obj.preview, 'alt': item.obj.descr});
								$(item.a).attr({'href': item.obj.href, 'rel': item.obj.img, 'title': item.obj.descr})
								$(item.img2).attr({'src': item.obj.img});
							}
						}
					});
				}
			});
			return false;
		});
	}

	// Раскрывающийся список
	var $slide = $('.slide');
	if ($slide.length) {
		$slide.each(function(index, item) {
			var
				$this = $(this);
			if ($this.hasClass('slide-button')) {
				var
					$open = $('<span class="open">' + $L.slide.show + '</span>'),
					$close = $('<span class="close">' + $L.slide.hide + '</span>').hide(),
					$a = $('<a class="button" href=""/>')
						.append($open)
						.append($close),
					$button = $('<div class="button_box slide-button"/>')
						.append($a)
						.css('float', 'right')
						.data('closed', true)
						.data('$slide', $this)
						.insertBefore($this);
				$open.add($close).width(Math.max($open.width(), $close.width()));
				$button.click(function() {
					var
						$this = $(this),
						closed = $this.data('closed');
					$this.data('$slide').find('li').each(function(index, item) {
						var
							$this = $(this);
						if ($this.hasClass('active') != closed) {
							$('h3 a, h4 a', $this).click();
						}
					});
					$this.data('closed', !closed);
					$open.css('display', !closed ? 'block' : 'none');
					$close.css('display', closed ? 'block' : 'none');
					return false;
				});
			}
		});
		$('h3 a, h4 a', $slide).click(function(event) {
			var
				$li = $(this).parents('li');
			$('div:first', $li)
				.css({overflow: 'hidden', position: 'relative'})
				.slideToggle($li.hasClass('active'), function() {
					$(this).css({position: 'static'});
				});
				$li.toggleClass('active');
			return false;
		});
	}

	// Просмотр фотографий
	$('a[rel*=lightbox]').colorbox();
	$('a[rel*=single]').colorbox({
		replaceInTitle: [
			[(/^.+: /), ''],
			['; ', '<br />']
		]
	});

	// Кнопка запуска галереи
	/*
		TODO Облегчить и сделать универсальнее
	*/
	$('a[rel*=gallery]').click(function() {
		var
			$img = $('a[rel*=lightbox]:first');
		if ($img.length) {
			$img.click();
		}
		return false;
	});

	// Всплывающая карта
	/*
		TODO Добавить окно к маркеру
		TODO Объединить скрипты создания маркеров и привязать к коду
		TODO Сделать выборку координат и маштаба из ссылки
	*/
	var
		$relmap = $('a[rel*=map]');
	if ($relmap.length) {
		$relmap.each(function(index, item) {
			var
				$this = $(item),
				$gmap = $('<div></div>')
					.appendTo($('<div/>')
						.hide()
						.appendTo($('body')))
					.height('100%');
			$this
				.data('gmap', $gmap)
				.colorbox({
					href: $gmap,
					inline: true,
					fixedHeight: 480,
					fixedWidth: 640,
					className: 'form gmap'
				},
				function($this) {
					return function() {
						if (typeof GBrowserIsCompatible == UNDEF) {
							return false;
						}
						if (GBrowserIsCompatible()) {
							var
								$gmap = $this.data('gmap');
							if (!$gmap.length) {
								return false;
							}
							var
								g_map,
								lat = parseFloat($('.geo .latitude', $this).text()),
								lng = parseFloat($('.geo .longitude', $this).text()),
								pos = new GLatLng(lat, lng);
							g_map = new GMap2($gmap[0]);
							g_map.setUIToDefault();
							g_map.setCenter(pos, 11);
							g_map.addOverlay(new GMarker(pos, {icon: icon(cat_id) }));
						}
					}
				}($this));
		});
	}
	var req_sent = false;
	var $a = $('a.order'),
		$form = $('form#order');
	if ($a.length && $form.length) {
		$a.colorbox({
			inline: true,
			href: '#order',
			disableArrows: true,
			className: 'form order'
		}).click(function(event) {
			var $this = $(this);

			// попробуем определить id объекта из ссылки
			var id_regex = new RegExp('\\bid_(\\d+)\\b', 'i');
			var re_arr = id_regex.exec($this.attr('rel'));
			var rel_re_id = (re_arr && (typeof(re_arr[1]) != 'undefined')) ? re_arr[1] : 0;

			var reality_id = 0;
			var part_size_id = 0;
			var info = $('div#obj_info');
			if ($(info).length > 0) {
				part_size_id = $(info).attr('rel1');
				if (part_size_id == '') {
					part_size_id = 0;
				}
				if (rel_re_id > 0) {
					reality_id = rel_re_id;
				} else {
					reality_id = $(info).attr('rel2');
				}
				if (reality_id == '') {
					reality_id = 0;
				}
			}
			var form_rel = $(this).attr('rel');
			if (form_rel == 'mortgage') {
				$('form#order').find('[name="is_mortgage"]').val('1');
				$('form#order').find('p:first').html($L.order.head_mortgage);
			} else {
				$('form#order').find('[name="is_mortgage"]').val('0');
				$('form#order').find('p:first').html($L.order.head);
			}
			$('form#order').find('[name="name"]').val('');
			$('form#order').find('[name="email"]').val('');
			$('form#order').find('[name="tel"]').val('');
			$('form#order').find('[name="text"]').val('');
			$('form#order').find('[name="keystring"]').val('');
			if(window.we_on_object)
				$('form#order').find('[name="object_url"]').val(location.href);
			else{
				var object_url_string=sessvars.object_url.reverse().join(';');
				$('form#order').find('[name="object_url"]').val(object_url_string);
			}
			$('form#order #reality_id').val(reality_id);
			$('form#order #part_size_id').val(part_size_id);
			req_sent = false;
		});
	}
	
	var $a = $('.call_request'),
    $form = $('form#call_request');
    if ($a.length && $form.length) {
        $a.colorbox({
            inline: true,
            href: '#call_request',
            disableArrows: true,
            className: 'form call_request',
            fixedWidth: 550
        }).click(function(event){
        //  $('#capcha').parents('form').find('img').attr('src', '/kapcha/index.php?'+Math.random());

        if (!$('#call_request .js_select').size()) {
                $('#call_request select').js_select('\v'=='v' ? 'span.js' : null);
                $('#call_request .js_select').width(65);
                $('#call_request .js_select ul').width(55);
            }
        });
    }
    $('#call_request_send').click(function(){
        $('#error_name').remove();
        $('#error_phone').remove();
        $('#error_capcha').remove();
        $('#modalBackgroundOverlay').show();
        var strDataFrm = $('#call_request').serialize();
        $.getJSON('/request1.php?'+strDataFrm,{},function(jsonObj) {
            $('#capcha').parents('form').find('img').attr('src', '/kapcha/index.php?'+Math.random());
            var errors = jsonObj.error;
            if (errors.length != 0) {
                for (i in errors) {
                    switch (errors[i]) {
                        case 'ERR_CAPTCHA':
                            $('#capcha').append('<p id="error_capcha" style="float:right; font-size:8.5pt;" class="red">Код с картинки введен не правильно</p>');
                            break;
                        case 'ERR_FLD_NAME':
                            $('#fname').append('<p id="error_name" style="float:right; font-size:8.5pt;" class="red">Это поле дожно быть заполнено</p>')
                            break;
                        case 'ERR_FLD_PHONE':
                            $('#phone').append('<p id="error_phone" style="float:right; font-size:8.5pt;" class="red">Это поле дожно быть заполнено</p>')
                            break;
                        case 'ERR_FLD_PHONE_VAL':
                            $('#phone').append('<p id="error_phone" style="float:right; font-size:8.5pt;" class="red">Неправильно указан телефон</p>')
                            break;
                    }
                }
            }
                    
            if (errors.length == 0) {
                alert('Ваша заявка отправлена. В ближайшее время наши специалисты свяжутся с Вами. Спасибо, что обратились в инвестиционное агентство Est-a-Tet!');
                $('#modalClose').trigger('click');      
            }
        });
    });
	
	var $b = $('.mess_request'),
    $form = $('form#mess_request');
    if ($b.length && $form.length) {
        $b.colorbox({
            inline: true,
            href: '#mess_request',
            disableArrows: true,
            className: 'form mess_request',
            fixedWidth: 550
        }).click(function(event){
        });
    }
    $('#mess_request_send').click(function(){
        $('#error_name').remove();
        $('#error_phone').remove();
        $('#error_capcha').remove();
        $('#modalBackgroundOverlay').show();
        var strDataFrm = $('#mess_request').serialize();
        $.getJSON('/request1.php?'+strDataFrm,{},function(jsonObj) {
            $('#capcha2').parents('form').find('img').attr('src', '/kapcha/index.php?'+Math.random());
            var errors = jsonObj.error;
            if (errors.length != 0) {
                for (i in errors) {
                    switch (errors[i]) {
                        case 'ERR_CAPTCHA':
                            $('#capcha2').append('<p id="error_capcha" style="float:right; font-size:8.5pt;" class="red">Код с картинки введен не правильно</p>');
                            break;
                        case 'ERR_FLD_NAME':
                            $('#fname2').append('<p id="error_name" style="float:right; font-size:8.5pt;" class="red">Это поле дожно быть заполнено</p>')
                            break;
                        case 'ERR_FLD_PHONE':
                            $('#phone2').append('<p id="error_phone" style="float:right; font-size:8.5pt;" class="red">Это поле дожно быть заполнено</p>')
                            break;
                        case 'ERR_FLD_PHONE_VAL':
                            $('#phone2').append('<p id="error_phone" style="float:right; font-size:8.5pt;" class="red">Неправильно указан телефон</p>')
                            break;
                    }
                }
            }
                    
            if (errors.length == 0) {
                alert('Ваше сообщение отправлено. В ближайшее время наши специалисты свяжутся с Вами. Спасибо, что обратились в инвестиционное агентство Est-a-Tet!');
                $('#modalClose').trigger('click');      
            }
        });
    });
	
	// Позиция элемента относительно родителя либо окна
	$.fn.rel_offset = function(parent) {
		var p = this[0],
			ret = {
				left: 0,
				top: 0
			};
		while (p && (!parent || !$(p).is(parent))) {
			ret.left += p.offsetLeft;
			ret.top += p.offsetTop;
			p = p.offsetParent;
		};
		ret.parent = p;
		return ret;
	}

	// определим cat_id текущего раздела каталога
	var
		$page = $('#page'),
		cat_id = 1;
	if ($page.length) {
		var
			re = new RegExp('\\bcat_(\\d+)\\b', 'i'),
			arr = re.exec($page[0].className),
			cat_id = (arr && (typeof(arr[1]) != UNDEF)) ? arr[1] : 1;
	}


	// Google Maps
	var
		// Иконка маркера
		icon = function() {
			var
				icon = new GIcon();
			icon.image = "/img/map_arrow_" + (cat_id || 1) + ".png";
			icon.iconSize = new GSize(28, 51); // размеры значка
			icon.iconAnchor = new GPoint(14, 51);
			icon.infoWindowAnchor = new GPoint(8, 17);
			return icon;
		},

		/*
			Создание ИнфоОкна.
			У Гугля непонятный гемор с размерами окон,
			поэтому подгонять приходится через жопу
		*/
		create_window = function(map, marker, $item) {

			/*
				Добавляем на карту скрытом виде, чтобы
				применились специфичные стили
			*/
			$item.css({
				visibility: 'hidden'
			})
			.appendTo($(map.getContainer()));

			// Принудительно задаем размеры
			$item.css({
				width: 300,
				height: $item.height()
			});

			// Открываем окно
			map.openInfoWindowHtml(marker.getLatLng(), $item[0], {
				onOpenFn: function(){
					var
						w = map.getInfoWindow();

					// Подравниваем
					w.reset(w.getPoint(), null, new GSize($item.width(), $item.height()), null, null);

					//Выводим содержимое
					$item.css({
						display: 'none',
						visibility: 'visible'
					});
					$item.fadeIn();
				}
			});
		},

		// Создание маркера
		m_icon = null,
		create_marker = function(map, id, obj) {
			var
				marker = new GMarker(new GLatLng(obj[0], obj[1]), {
					title: obj[2] || 'ID ' + id,
					icon: m_icon || (m_icon = icon())
				});
			marker.object_id = id;

			// Обработка нажатия
			GEvent.addListener(marker, 'click', function() {
				var
					id = this.object_id,
					items = $W.data('compiled'),
					$item,
					marker = this;

				/*
					Если есть возможность, клонируем уже созданный
					элемент из списка результатов
				*/
				if (items && ($item = items[id]) && $item.length) {
					create_window(map, marker, $item.clone());
				}
				/*
					Иначе загружаем JSON с сервера и компилируем
				*/
				else {
					$.get('/hsi.php', {id: id}, function(data) {
						if (!data || !data[0] || !data[0].object_id) {
							return false;
						}
						var
							items = $W.data('compiled') || {},
							$item = build_item(tmpl_results, data[0]);
						items[data[0].object_id] = $item;
						$W.data('compiled', items);
						create_window(map, marker, $item.clone());
					}, 'json');
				}
			});

			map.addOverlay(marker);
			return marker;
		},

		// Добавление маркеров
		add_markers = function(map, coords) {

			// Очистка
			map.clearOverlays();

			// Создание
			for (var id in coords) {
				create_marker(map, id, coords[id]);
			}
		};

	var
		$gmap_box = $('#gmap_box');

	// Проверяем наличие блока для карты и загруженных скриптов
	if ($gmap_box.length && GBrowserIsCompatible) {

		// Блок карты
		var
			$gmap = $('#gmap');
		if ($gmap.length) {
			// Подхватываем координаты
			var
				$geo = $('.geo', $gmap_box),
				lat = $('.latitude', $geo).text(),
				lng = $('.longitude', $geo).text(),
				zoom = (/\bzoom-(\d+)\b/i).exec($geo[0].className);
			if (lat && lng) {
				$gmap
					.data('lat', parseFloat(lat, 10))
					.data('lng', parseFloat(lng, 10))
					.data('zoom', zoom ? +zoom[1] : 11);
			}
		}
		else {
			$gmap_box.append($('<div id="gmap"/>'));
		}

		// Уголки или тени
		/*
			TODO Проверить на сервере в IE
		*/
		$gmap_box.append($('<div id="gmi1"/><div id="gmi2"/><div id="gmi3"/><div id="gmi4"/>'));

		// Инициализация карт
		$W.load(function() {
			if (GBrowserIsCompatible()) {
				g_map = new GMap2($gmap[0]);
				g_map.setUIToDefault();

				// Объекты в коде
				if (typeof houses != UNDEF) {
					var
						i = houses.length - 1,
						items = {},
						coords = {};
					for (; i >= 0; i--) {
						items[houses[i].object_id] = build_item('tmpl_results_item', houses[i]);
						coords[houses[i].object_id] = [houses[i].lat, houses[i].lng];
						houses[i].rub_format = pf(houses[i].price);
						houses[i].rub_m2_format = pf(houses[i].price_m2);
					}
					$W
						.data('items', items)
						.data('coords', coords)
						.data('compiled', items);
					g_map.setCenter (new GLatLng(houses[0].lat, houses[0].lng), $gmap.data('zoom') || 11);
					add_markers(g_map, coords);
				}

				// Координаты, найденные в коде, или Москва по умолчанию
				if (!g_map.getCenter()) {
					var
						lat = $gmap.data('lat') || 55.758032,
						lng = $gmap.data('lng') || 37.617188,
						zoom = $gmap.data('zoom') || 9;
					g_map.setCenter(new GLatLng(lat, lng), zoom);
				}

				// Карта загружена
				$W.data('gmap', g_map);
				$W.trigger('gmap_load');
			}
		});
		$W.unload(GUnload);

		// Закрывающая кнопка
		if ($gmap_box.hasClass('closable')) {
			var
				$toggle = $('<div class="toggle_map closed"><span class="close">' + $L.map.hide + '</span><span class="open">' + $L.map.show + '</span></div>')
					.insertAfter($gmap_box);
				props = [
					{
						height: 0,
						marginBottom: -parseInt($toggle.css('marginTop'), 10)
					},
					{
						height: $gmap_box.height(),
						marginBottom: parseInt($gmap_box.css('marginBottom'))
					}
				];
			$gmap_box.css('visibility', 'hidden').css(props[0]);
			$toggle
				.click(function(event) {
					var
						$this = $(this).toggleClass('closed'),
						closed = $this.hasClass('closed'),
						fn = closed ? function() {
							$(this).css('visibility', 'hidden');
						} : function() {};
					$gmap_box
						.stop()
						.css('visibility', 'visible')
						.animate(props[+!closed], fn);
				});
		}
	}

	var
		// ID элемента с шаблоном
		tmpl_results = 'tmpl_results_item',
		
		usd = 0,
		eur = 0,
		
		/*
			Компиляция объекта
				data — объект;
				tmpl — строка шаблона или id элемента-шаблона.
		*/
		build_item = function(tmpl, data) {
			if (typeof tmpl != 'string') {
				return false;
			}
			var
				$el,
				$note;

			// Перевод в другие валюты
			data.usd = usd ? (data.price / usd) : 0;
			data.eur = eur ? (data.price / eur) : 0;
			if (data.price_m2) {
				data.usd_m2 = usd ? (data.price_m2 / usd) : 0;
				data.eur_m2 = eur ? (data.price_m2 / eur) : 0;
			}

			// Результат в виде объекта jQuery
			if (!($el = $.tmpl(tmpl, data))) {
				return false;
			}
			$el = $($el).data('sdata', data);

			// Кнопка блокнота
			$note = $('a.note', $el);
			if ($note.length) {
				$note.click(function() {
					var
						$this = $(this),
						added = $this.hasClass('added'),
						param = {
							a: 1,
							id: data.real_id,
							'do': added ? 'del' : 'add'
						};
					$.get('/note.php', param, function() {
						$this.toggleClass('added', !added);
					});
					return false;
				});
			}

			return $el;
		}


	// Поиск недвижимости
	var $filter = $('#filter');
	if ($filter.length) {

		var arr = (/\b(cat_\d+)\b/).exec($('#page').attr('class')),
			sess_part = (arr && arr[1]) || 'default',
			sess_loaded = !!sessvars[sess_part];
		if (!sess_loaded) sessvars[sess_part] = { counts: {} };

		// Расширенный поиск
		/*
			TODO Сделать плавное сворачивание/разворачивание (подглючивает в IE)
		*/
		if ($filter.hasClass('extended') && $filter.parents('#content').length) {
			var
				$extension = $('.extension', $filter);
			if ($extension.length) {
				(function() {
					var
						$open = $('<a href="#" class="open">' + $L.ext.show + '</a>'),
						$close = $('<a href="#" class="close">' + $L.ext.hide + '</a>').hide(),
						$input = $('<input type="checkbox" name="extended" value="1" />').hide(),
						$extend = $('<div class="extend"/>')
							.append($open)
							.append($close)
							.append($input)
							.data('opened', $extension.hasClass('opened'))
							.appendTo($filter);
					$open.click(function() {
						$open.hide();
						$close.show();
						$extend.data('opened', true);
						$extension
							.css({
								height: 'auto',
								visibility: 'visible'
							});
						$input[0].checked = true;
						return false;
					});
					$close.click(function() {
						$open.show();
						$close.hide();
						$extend.data('opened', false);
						$extension
							.css({
								height: 0,
								visibility: 'hidden'
							});
						$input[0].checked = false;
						return false;
					});
					if ($extend.data('opened')) {
						$open.triggerHandler('click');
					}
				}());
			}
		}

		// Спойлеры
		var sp_click = function($item, f) {
			$item.toggleClass('opened', f);
			$item.data('input')[0].checked = f;
			sessvars[sess_part][$item.data('input')[0].id] = f;
			$item.data('spoiler')['slide' + (f ? 'Down' : 'Up')]();
			if (load_list) load_list();
		};
		$('h5', $filter).each(function(index, item) {
			var $item = $(item), $input = $('input', $item);
			if (sess_loaded) $item.toggleClass('opened', sessvars[sess_part][$input[0].id]);
			else $input[0].checked = sessvars[sess_part][$input[0].id] = $item.hasClass('opened');
			$item
				.data('input', $input)
				.data('spoiler', $item.next('.spoiler'))
				.click(function(event) {
					sp_click($item, !$item.hasClass('opened'));
					return false;
				});
			sp_click($item, $item.hasClass('opened'));
		});

		// Схема метро
		var metro = $.Metro,
		moscow = {
			'200014064': ['Арбат',219,292,32,24,0,0],
			'200014524': ['Басманный',266,255,74,45,0,24],
			'200014107': ['Замоскворечье',255,302,32,43,0,69],
			'200014685': ['Красносельский',266,241,50,45,0,112],
			'200013955': ['Мещанский',255,237,23,49,0,157],
			'200014045': ['Пресненский',172,266,81,45,0,206],
			'200014529': ['Таганский',269,293,57,45,0,251],
			'200014125': ['Тверской',220,242,40,49,0,296],
			'200013944': ['Хамовники',190,303,61,56,0,345],
			'200014298': ['Якиманка',222,303,40,54,0,401],
			'200014143': ['Аэропорт',164,208,53,43,0,455],
			'200014654': ['Беговой',188,237,46,31,0,498],
			'200014655': ['Бескудниковский',181,116,36,42,0,529],
			'200014664': ['Войковский',128,171,44,38,0,571],
			'200014665': ['Восточное Дегунино',191,90,27,59,0,609],
			'200014669': ['Головинский',125,133,74,44,0,668],
			'200014672': ['Дмитровский',151,73,50,51,0,712],
			'200014674': ['Западное Дегунино',132,93,78,66,0,763],
			'200014682': ['Коптево',161,158,43,59,0,829],
			'200014690': ['Левобережный',98,111,53,54,0,888],
			'200014699': ['Молжаниновский',12,5,73,66,0,942],
			'200013915': ['Савёловский',198,215,29,28,0,1008],
			'200014725': ['Сокол',142,206,29,37,0,1036],
			'200014731': ['Тимирязевский',180,157,44,66,0,1073],
			'200014733': ['Ховрино',122,107,43,45,0,1139],
			'200014092': ['Хорошёвский',156,225,45,70,0,1184],
			'200014651': ['Алексеевский',272,182,29,61,0,1254],
			'200014652': ['Алтуфьевский',212,102,33,26,0,1315],
			'200014653': ['Бабушкинский',278,108,34,46,0,1341],
			'200014656': ['Бибирево',229,71,46,43,0,1387],
			'200014661': ['Бутырский',219,182,32,59,0,1430],
			'200014692': ['Лианозово',184,67,46,36,0,1489],
			'200014693': ['Лосиноостровский',306,92,39,44,0,1525],
			'200014695': ['Марфино',219,160,24,42,0,1569],
			'200014118': ['Марьина Роща',231,213,40,42,0,1611],
			'200014711': ['Останкинский',228,145,55,88,0,1653],
			'200014712': ['Отрадное',216,114,54,47,0,1741],
			'200014718': ['Ростокино',268,160,34,33,0,1788],
			'200014720': ['Свиблово',262,136,41,27,0,1821],
			'200014723': ['Северное Медведково',259,88,56,31,0,1848],
			'200014724': ['Северный',169,4,52,69,0,1879],
			'200014739': ['Южное Медведково',254,105,37,36,0,1948],
			'200014741': ['Ярославский',297,103,61,71,0,1984],
			'200014659': ['Богородское',301,175,68,54,0,2055],
			'200014662': ['Вешняки',389,301,68,59,0,2109],
			'200014666': ['Восточное Измайлово',413,223,39,24,0,2168],
			'200014667': ['Восточный',457,191,46,32,0,2192],
			'200014670': ['Гольяново',369,146,79,79,0,2224],
			'200014677': ['Ивановское',414,244,41,61,0,2303],
			'200014678': ['Измайлово',366,225,52,66,0,2364],
			'200014683': ['Косино-Ухтомский',449,326,90,54,0,2430],
			'200014698': ['Метрогородок',305,115,94,97,0,2484],
			'200014706': ['Новогиреево',392,287,49,35,0,2581],
			'200014707': ['Новокосино',453,302,43,27,0,2616],
			'200014714': ['Перово',345,276,79,48,0,2643],
			'200014716': ['Преображенское',326,217,44,34,0,2691],
			'200014722': ['Северное Измайлово',371,208,78,19,0,2725],
			'200014726': ['Соколиная Гора',327,238,41,60,0,2744],
			'200014727': ['Сокольники',284,201,48,53,0,2804],
			'200014668': ['Выхино-Жулебино',410,346,63,65,0,2857],
			'200014679': ['Капотня',402,436,50,49,0,2922],
			'200014688': ['Кузьминки',370,351,55,56,0,2971],
			'200014691': ['Лефортово',304,269,55,56,0,3027],
			'200014694': ['Люблино',348,388,104,49,0,3083],
			'200014696': ['Марьино',325,421,82,41,0,3132],
			'200014705': ['Нижегородский',310,309,77,36,0,3173],
			'200014715': ['Печатники',305,346,55,111,0,3209],
			'200014719': ['Рязанский',362,326,55,37,0,3320],
			'200014729': ['Текстильщики',329,337,49,56,0,3357],
			'200014740': ['Южнопортовый',295,327,31,49,0,3413],
			'200014657': ['Бирюлёво Восточное',278,490,71,73,0,3462],
			'200014658': ['Бирюлёво Западное',253,507,44,56,0,3535],
			'200014660': ['Братеево',352,449,59,45,0,3591],
			'200014671': ['Даниловский',246,334,54,66,0,3636],
			'200014673': ['Донской',226,342,41,48,0,3702],
			'200014676': ['Зябликово',352,475,41,28,0,3750],
			'200014700': ['Москворечье-Сабурово',261,439,93,41,0,3778],
			'200014701': ['Нагатино-Садовники',261,387,37,60,0,3819],
			'200014702': ['Нагатинский Затон',285,373,55,75,0,3879],
			'200014703': ['Нагорный',246,389,18,72,0,3954],
			'200014709': ['Орехово-Борисово Северное',305,469,51,44,0,4026],
			'200014710': ['Орехово-Борисово Южное',326,493,77,44,0,4070],
			'200014734': ['Царицыно',263,461,54,44,0,4114],
			'200014736': ['Чертаново Северное',222,457,43,37,0,4158],
			'200013921': ['Чертаново Центральное',217,476,60,39,0,4195],
			'200014737': ['Чертаново Южное',219,506,52,52,0,4234],
			'200013938': ['Гагаринский',180,355,48,47,0,4286],
			'200014650': ['Академический',199,368,41,46,0,4333],
			'200014684': ['Котловка',222,388,33,41,0,4379],
			'200014180': ['Ломоносовский',165,390,36,31,0,4420],
			'200014735': ['Черёмушки',188,402,40,47,0,4451],
			'200014675': ['Зюзино',211,427,39,32,0,4498],
			'200014742': ['Ясенево',146,450,83,95,0,4530],
			'200014681': ['Коньково',153,437,56,51,0,4625],
			'200013927': ['Обручевский',141,411,60,47,0,4676],
			'200014730': ['Тёплый Стан',117,448,51,59,0,4723],
			'200014721': ['Северное Бутово',190,542,52,50,0,4782],
			'200014738': ['Южное Бутово',134,578,119,92,0,4832],
			'200014128': ['Дорогомилово',144,297,75,44,0,4924],
			'200014686': ['Крылатское',41,263,80,46,0,4968],
			'200014689': ['Кунцево',36,274,71,62,0,5014],
			'200014133': ['Можайский',47,334,67,43,0,5076],
			'200014708': ['Ново-Переделкино',4,418,46,62,0,5119],
			'200014123': ['Очаково-Матвеевское',69,343,78,90,0,5181],
			'200014717': ['Проспект Вернадского',132,391,41,37,0,5271],
			'200014141': ['Раменки',124,321,78,83,0,5308],
			'200014728': ['Солнцево',41,403,50,77,0,5391],
			'270001903': ['Тропарёво-Никулино',96,399,63,67,0,5468],
			'200014732': ['Филёвский Парк',87,276,85,50,0,5535],
			'200014121': ['Фили-Давыдково',102,314,49,45,0,5585],
			'200014743': ['Куркино',35,68,51,60,0,5630],
			'200014746': ['Митино',12,130,53,72,0,5690],
			'200014094': ['Покровское-Стрешнево',61,172,80,48,0,5762],
			'200014747': ['Северное Тушино',63,115,55,45,0,5810],
			'200014744': ['Строгино',36,189,71,85,0,5855],
			'200014748': ['Хорошёво-Мнёвники',67,240,105,76,0,5940],
			'200014745': ['Щукино',104,206,51,42,0,6016],
			'200014749': ['Южное Тушино',59,154,68,29,0,6058]
		},
		moscow_center = {
			'200014064': ['Арбат',185,283,96,72,0,572],
			'200014524': ['Басманный',326,171,224,136,0,1244],
			'200014107': ['Замоскворечье',292,316,98,128,0,980],
			'200014685': ['Красносельский',324,128,154,136,0,0],
			'200013955': ['Мещанский',289,114,74,150,0,136],
			'200014045': ['Пресненский',41,203,246,138,0,434],
			'200014529': ['Таганский',335,286,172,136,0,1108],
			'200014125': ['Тверской',189,134,118,148,0,286],
			'200013944': ['Хамовники',96,316,186,170,0,644],
			'200014298': ['Якиманка',193,315,120,166,0,814],
			'0': ['Другие районы']
		},
		road = {
			reg_1: {
				'200015360': ['Волоколамское',19,127,148,74,0,2089],
				'200015351': ['Ильинское',129,194,40,17,0,2163],
				'200015350': ['Новорижское',0,180,163,66,0,2180],
				'200015359': ['Пятницкое',32,81,136,107,0,2246]
			},
			reg_2: {
				'200015361': ['Алтуфьевское',221,107,24,50,0,0],
				'200015354': ['Дмитровское',187,0,91,157,0,50],
				'200015362': ['Ленинградское',73,33,128,141,0,207],
				'200015363': ['Осташковское',234,57,68,103,0,348],
				'9': ['Ярославское',263,22,146,167,0,451]
			},
			reg_3: {
				'10': ['Щелковское',294,85,182,126,0,618],
				'11': ['Горьковское',302,164,182,107,0,744]
			},
			reg_4: {
				'12': ['Егорьевское',301,250,181,76,0,851],
				'13': ['Рязанское',299,255,178,139,0,927],
				'14': ['Новорязанское',292,263,161,175,0,1066]
			},
			reg_5: {
				'15': ['Варшавское',170,324,96,139,0,1241],
				'16': ['Каширское',260,300,124,163,0,1380]
			},
			reg_6: {
				'200015358': ['Боровское',92,274,96,57,0,1543],
				'200015352': ['Калужское',79,309,135,135,0,1600],
				'200015353': ['Киевское',36,295,158,110,0,1735]
			},
			reg_7: {
				'200015349': ['Рублево-Успенское',1,221,161,61,0,1845],
				'200015356': ['Минское',36,255,132,91,0,1906],
				'200015355': ['Можайское',26,241,139,65,0,1997],
				'200015357': ['Сколковское',146,261,30,27,0,2062]
			}
		},
		moscow2 = $.Moscow2;

		// Чекбоксы
		$('#filter .checkboxes label input').each(function(index, item) {
			var $item = $(item),
				$parent = $item.parent();
			$item.data('$parent', $parent);
			if (sess_loaded) $parent.toggleClass('active', item.checked = !!sessvars[sess_part][item.id]);
			else item.checked = sessvars[sess_part][item.id] = $parent.hasClass('active');
		}).click(function(e) {
			var $this = $(this);
			$this.blur()
				.data('$parent')
					.toggleClass('active', this.checked)
					.blur();
			sessvars[sess_part][this.id] = this.checked;
			setTimeout(function() { load_list(); }, 1);
		}).css('opacity', 0);

		// Селекты
		$('#filter select#mo_direction_id, #filter select#mo_road_id').each(function(index, item) {
			var $item = $(item);
			if (sess_loaded) {
				$item.val(sessvars[sess_part][item.id]);
			}
		}).change(function(e) {
			sessvars[sess_part][this.id] = this.value;
			setTimeout(function() { load_list(); }, 1);
		});

		// Поиск по ID
		var
			$input = $('.input_search input', $filter);
		if ($input.length) {
			var
				send_id = function() {
					if (!$.trim($input.val()).length) {
						alert($L.inputID);
						return false;
					}
					sessvars[sess_part]['search_by_id'] = true;
					sessvars[sess_part][$input[0].id] = $input.val();
				};
			$('.search_by_id *[type=submit]', $filter).click(send_id);
			$input.keypress(function(event) {
				if (event.keyCode == 13) {
					return send_id();
				}
			});
/*			$input
				.change(function() {
					sessvars[sess_part][this.id] = this.value;
					if (this.to) {
						clearTimeout(this.to);
						load_list();
					}
				})
				.keyup(function() {
					if (this.to) {
						clearTimeout(this.to);
					}
					this.to = setTimeout(function() { load_list(); }, 1000);
				});
*/
			if ($input[0].id && sessvars[sess_part][$input[0].id]){
				$input[0].value = sessvars[sess_part][$input[0].id];
				sessvars[sess_part][$input[0].id] = null;
			}

		}

		// Отправка формы
		if ($filter.hasClass('realtime')) {
			$filter.parents('form').submit(function() {
				load_list();
				return false;
			});
		}

		// Список результатов и разбивка на страницы
		var
			$results = $('#search_results'),
			tmpl_pages = 'tmpl_results_pages',
			$pages_1 = $($.tmpl(tmpl_pages, { id: 'pages_1' })),
			$pages_2 = $($.tmpl(tmpl_pages, { id: 'pages_2' })),
			$tmpl_prepage_banner = $.tmpl('tmpl_prepage_banner', {});
			;
		var
			$pages = $pages_1.add($pages_2),
			$pages_cont = $('.pages_cont', $pages),
			$currentPage = $('input[name=currentPage]', $pages),
			$paging = $('input[name=paging]', $pages),
			$pages_prev = $('a.prev', $pages),
			$pages_next = $('a.next', $pages),
			pages_mousemove = function() {
				var
					left = parseInt($pages_cont.css('left')),
					width = $pages_cont[0].scrollWidth,
					parent = $pages_cont[0].parentNode.offsetWidth,
					step = $pages_cont.data('scrollStep'),
					fullleft = (left >= 0),
					fullright = (width + left <= parent);
				if (((step < 0) && !fullright) || ((step > 0) && !fullleft)) {
					$pages_cont.css({left: left + step});
					$pages_cont.data('to', setTimeout(pages_mousemove, 10));
				}
				$pages_prev.toggleClass('disabled', fullleft);
				$pages_next.toggleClass('disabled', fullright);
				return false;
			},
			$monitor = $('#monitor'),
			$new_search = $('<div class="button"><input type="button" value="' + $L.newSearch + '" name="new_search"></div>')
				.click(function() {
					clear_filter();
				})
				.hide();

		// Создаем нужные блоки, если их нет
		($results.length || ($results = $('<div id="search_results" class="ill search"/>').appendTo($('#page'))));
		($monitor.length || ($monitor = $('<div id="monitor"/>').appendTo($('#sort'))));
		$pages_1
			.hide()
			.insertBefore($results);
		if ($tmpl_prepage_banner) { $($tmpl_prepage_banner).insertBefore($results); }
		$pages_2
			.hide()
			.insertAfter($results)
			.after($new_search);
		if (sessvars[sess_part]['page_num']) {
			$currentPage.val(sessvars[sess_part]['page_num']);
		}
		else {
			sessvars[sess_part]['page_num'] = $currentPage.val();
		}

		$pages_prev.data('scrollStep', 5);
		$pages_next.data('scrollStep', -5);
		$pages_prev.add($pages_next)
			.mouseover(function() {
				if ($pages_cont.data('scrollDisabled')) return false;
				var
					width = $pages_cont.width(),
					parent = $pages_cont.parent().width(),
					step = $(this).data('scrollStep'),
					left = parseInt($pages_cont.css('left')),
					targetLeft = (step > 0) ? 0 : (parent - width);
				$pages_cont.data('scrollStep', step);
				if (step > 0) $pages_next.removeClass('disabled');
				if (step < 0) $pages_prev.removeClass('disabled');
				$pages_cont.animate({left: targetLeft}, Math.abs(left - targetLeft) * 5, 'linear', function() {
					var
						step = $pages_cont.data('scrollStep');
					if (step < 0) $pages_next.addClass('disabled');
					if (step > 0) $pages_prev.addClass('disabled');
					$pages_cont.data('step', 0);
				});
				return false;
			})
			.mouseout(function() {
				if ($pages_cont.data('scrollDisabled')) return false;
				$pages_cont.stop();
				$pages_cont.data('scrollStep', 0);
			})
			.click(function() {
				$pages_cont.stop();
				var
					$this = $(this),
					width = parseInt($pages_cont.width()),
					parent = parseInt($pages_cont.parent().width()),
					step = $pages_cont.data('scrollStep'),
					left = parseInt($pages_cont.css('left')),
					targetLeft = (step > 0) ? 0 : (parent - width);
				$pages_cont.css({left: targetLeft});
				if (step < 0) $pages_next.addClass('disabled');
				if (step > 0) $pages_prev.addClass('disabled');
				$pages_cont.data('step', 0);
				return false;
			});

		// Постраничная навигация
		$('.pages_block a.page').live('click', function(event) {
			var
				$this = $('.pages_block a.page:nth-child(' + $(this).data('page') + ')');
			if ($this.hasClass('active')) return false;
			var $old = $('.pages_block a.page.active'),
				$new = $this.addClass('active');
			if ($old) {
				$old.removeClass('active')
			}
			$pages.data('active', $new);
			$(window).scrollTop($('#sort').offset().top - 10);
			$currentPage.val(sessvars[sess_part]['page_num'] = $this.data('page'));
			
			/*
				Перед отправкой формы устанавливаем флаг постраничной
				навигации, чтобы не перезагружать маркеры и карту.
				После отправки сбрасываем.
			*/
			$paging.val(1);
			load_list(true);
			$paging.val(0);

			return false;
		});


		var
			// Курсы валют
			$price_units = $('select#price_units'),
			$rub = $('option.rub', $price_units),
			$usd = $('option.usd', $price_units),
			$eur = $('option.eur', $price_units),
			onpage_def = 6,
			rub = $rub.length ? $rub.val() : 0,
			usd = ($usd.length && rub) ? $usd.val() / rub : 0,
			eur = ($eur.length && rub) ? $eur.val() / rub : 0,

			// Подготовка списка объектов
			build_list = function(data, textStatus) {
				var items = {},
					i = 0,
					len = data[1].length;
				for (; i < len; i++) {
					//items[data[1][i].object_id] = build_item(tmpl_results, data[1][i]);
					items[i] = build_item(tmpl_results, data[1][i]);
				}
				$results
					.data('total', data[0])
					.data('items', items)
					.data('loaded', true);
				$W.data('compiled', items);
				show_list();
				$results.data('no_changes', false);

				// Расстановка маркеров
				var
					f = function() {
						add_markers($W.data('gmap'), data[2]);
					};
				($W.data('gmap')
					? f()
					: $W.bind('gmap_load', f));

				return items;
			},

			// Вывод списка
			show_list = function() {
				if (!$results.data('loaded')) {
					return false;
				}
				var
					i,
					len = 0,
					page = 0,
					items = $results.data('items'),
					total = parseInt($results.data('total'), 10),
					num = $results.data('no_changes')
						? sessvars[sess_part]['page_num'] || 0
						: 0,
					$cache = $('</>'),
					onpage = parseInt($results.data('onpage') || onpage_def, 10);
				for (i in items) {
					$cache = $cache.add(items[i]);
					len++;
				}
				$results.html('');
				if (len) {
					$results.append($cache);
					$('#sort fieldset').css('visibility', 'visible');
					$new_search.hide();
				}
				else {
					$('#sort fieldset').css('visibility', 'hidden');
					$new_search.show();
				}
				monitor_text(Math.min(len, onpage), total);
				build_pages(num);
				return true;
			},

			// Подготовка страниц
			build_pages = function(num) {
				var
					total = parseInt($results.data('total'), 10),
					onpage = parseInt($results.data('onpage') || onpage_def, 10),
					i = 0,
					page = 0,
					$a;
				if (!num || !$pages.data('inited')) {
					$pages.hide();
					$('a.page', $pages_cont).remove();
					if (!total) return false;
					for (; i < total; i += onpage) {
						page++;
						$('<a class="page" href="?page_' + page + '">' + page + '</a>')
							.appendTo($pages_cont)
							.data('page', page);
						if (i + onpage < total) $pages_cont.append(' ');
					}
					$pages.data('inited', true);
				}
				$pages.show();

				var
					width = parseInt($pages_cont.width()),
					parent = parseInt($pages_cont.parent().width()),
					n = parseInt(sessvars[sess_part]['page_num'], 10) || 1,
					$page = $('a.page:nth-child(' + n + ')', $pages_cont);
				var offl = 0;
				if (typeof ($page[0].offsetLeft) != 'undefined') {
					offl = $page[0].offsetLeft;
				}
				$page.addClass('active');
				$pages_cont.css({left: Math.min(0, Math.max(-offl + Math.floor(parent / 2), parent - width))});
				$pages.data('active', $page);
				$pages_prev.add($pages_next).css('display', (width > parent) ? 'inline' : 'none');
				var
					left = parseInt($pages_cont.css('left'), 10);
				$pages_prev.toggleClass('disabled', (left == 0));
				$pages_next.toggleClass('disabled', (left <= parent - width));
			},

			// Вывод инфы о найденных объектах
			monitor_text = function(count, total) {
				total = $results.data('total') || total || 0;
				if (!total) {
					if (cat_id == 6) {
						$monitor.html($L.monitor.nothing + $L.monitor.all);
					} else {
						$monitor.text($L.monitor.nothing);
					}
				}
				else {
					$monitor.text($.tmpl($L.monitor.tmpl, {
						count: count,
						total: total,
						countText: sklon(count, $L.monitor.count['1'],  $L.monitor.count['234'], $L.monitor.count['many']),
						totalText: sklon(total, $L.monitor.total['1'],  $L.monitor.total['234'], $L.monitor.total['many'])
					}));
				}
			},

			// Источник данных
			load_url = (cat_id == 4)
				? '/hs2.php'
				: (cat_id == 5)
					? '/hs3.php'
				: ($('#stype').attr('rel') == 'resale')
					? '/hs4.php'
					: ((cat_id == 2) 
						? '/hs.php' 
						: ((cat_id == 6) 
						? '/hssec.php' 
						: '/hsnew.php')),
			
			/*
				Загрузка результатов
					no_changes — без изменения параметров поиска (то есть
					переключение страниц результатов либо возврат на страницу)
			*/
			load_list = function(no_changes) {
				$results.data('no_changes', no_changes);
				/*
					TODO Оптимизировать проверку наличия выделенных чекбоксов
				*/
				$('.ext').each(function(index, item) {
					var $item = $(item);
					$item.toggleClass('filled', !!$('input:checked', $item).length);
				});
				if ($filter.hasClass('realtime')) {
					if (!no_changes) {
						$currentPage.val(sessvars[sess_part]['page_num'] = 0);
						$W.data('compiled', {});
					}
					$results.data('loaded', false);
					$.post(load_url, (sessvars[sess_part]['search_by_id'] ? $('.search_by_id input').add('#sort select') : $filter.parents('form')).serialize(), function(data, textStatus) {
						$('.search_by_id input.text').val('');
						setTimeout(function() {
							build_list(data, textStatus);
						}, 1);
					}, 'json');
				}
				sessvars[sess_part]['search_by_id'] = null;
			},

			/*
				Сброс фильтра
			*/
			clear_filter = function() {
				sessvars[sess_part] = {};
				document.location += '';
			};

			// Сортировка
			var
				$sort = $('#sort_by')
					.one('change', function(event) {
						$(this).change(function(event) {
							var $this = $(this),
								val = $this.val();
							if ((this.options[0].value == 'priority') && (val != 'priority')) {
								$('option:first', this).remove();
								$('li:first', $this.data('jss')).remove();
							}
							$results.data('order', sessvars[sess_part].order = val);
							load_list();
						});
					});
			if (sess_loaded) {
				/* сброс сортировки, если нет такого поля, по которому сортируется */
				var hasOrder = false;
				$sort.find('option').each(function(){
					if ($sort.val() == $(this).val())
						hasOrder = true;
				});
				
				if (!hasOrder) {
					$sort.val($sort.find('option').eq(0).val());
				}
				else
				/* /сброс сортировки, если нет такого поля, по которому сортируется */
					$sort.val(sessvars[sess_part].order || $sort.val());
			}
			else sessvars[sess_part].order = $sort.val();

			// На странице
			var
				$onpage = $('#onpage')
					.one('change', function(event) {
						$(this).change(function(event) {
							var $this = $(this),
								val = parseInt($this.val(), 10);
							sessvars[sess_part].onpage = val;
							$results.data('onpage', (val <= 0) ? 1000000 : val);
							load_list();
						});
					});
			if (sess_loaded) $onpage.val(sessvars[sess_part].onpage || $onpage.val());
			else sessvars[sess_part].onpage = $onpage.val();
			$results.data('onpage', sessvars[sess_part].onpage);

		// Всплывающие окна
		var $exts_all = $('.ext', $filter);
		if ($exts_all.length) {
			var
				$exts = $exts_all.each(function(index, item) {
					$('<div class="clear" />').insertAfter(this);
				}).not('.metro, .moscow, .moscow_center, .moscow2, .road'),
				$metro_block = $('.ext.metro', $filter),
				$moscow_block = $('.ext.moscow', $filter),
				$moscow_center_block = $('.ext.moscow_center', $filter),
				$moscow2_block = $('.ext.moscow2', $filter),
				$road_block = $('.ext.road', $filter),
				$select_button = $('<div class="select_button"><span>' + $L.select + '</span></div>');
			if ($metro_block.length) {
				var $metromap_bg = $('<div id="metromap_bg" />')
						.css({opacity: 0.1}),
					$metromap_button = $select_button
						.clone()
						.click(function(e) {
							$('#modalClose').trigger('click');
						}),
					$metromap = $('<div id="metromap" />')
						.append($metromap_bg)
						.append($metromap_button),
					opacity = 1,
					metro_index = {};
				for (var i in metro) {
					for (var j in metro[i]) {
						if ((metro[i][j].id+"").length) {
							metro[i][j].line = parseInt(i, 10) + 1;
							metro_index[metro[i][j].id] = metro[i][j];
						}
					}
				}
				var $labels = $('label', $metro_block).each(function(index, item) {
					var $item = $(item),
						$cb = $('input', $item),
						id = $cb.val(),
						obj = metro_index[id];
					if (obj && $cb.length) {
						var
							$selected = $('<span class="selected line_' + obj.line + '"><i></i></span>')
								.css({
									left: obj.cx - 7,
									top: obj.cy - 7
								}),
							$circle = $('<span class="circle line_' + obj.line + '"><i></i></span>')
								.css({
									left: obj.cx,
									top: obj.cy
								}),
							$name = $('<span class="name"></span>')
								.css({
									width: obj.w,
									height: obj.h,
									left: obj.x,
									top: obj.y,
									backgroundPosition: '-' + obj.x + 'px -' + obj.y + 'px',
									opacity: opacity
								});
							$circle.add($name).add($selected)
								.attr('title', obj.name)
								.click(function(event) {
									$cb[0].checked = !$cb[0].checked;
									$item.add($item.parent()).add($selected).toggleClass('active', $cb[0].checked);
									sessvars[sess_part][$cb[0].id] = $cb[0].checked;
									$circle.toggleClass('active', $cb[0].checked);
								})
								.appendTo($metromap);
						$item.data('name', $name).data('circle', $circle).data('selected', $selected);
					}
				});
				$metro_block.append('<div>'+$L.map.info+'</div><br />');
				$metromap.appendTo($metro_block);
			}
			// Районы
			if ($moscow_block.length) {
				var $moscow_bg = $('<div id="moscow_bg" />'),
					$moscow_cover = $('<img id="moscow_cover" src="/img/spacer.gif" width="100%" heiht="100%" alt="" usemap="#moscow_map" />'),
					$moscow_button = $select_button
						.clone()
						.click(function(e) {
							$('#modalClose').trigger('click');
						}),
					$moscow = $('<div id="moscow" />')
						.append($moscow_bg)
						.append($moscow_cover)
						.append($moscow_button),
					moscow_index = {};
				for (var id in moscow) {
					if ((id+'').length) {
						moscow_index[id] = moscow[id];
					}
				}
				var $labels = $('label', $moscow_block).each(function(index, item) {
					var $item = $(item),
						$cb = $('input', $item),
						id = $cb.val(),
						arr = moscow_index[id];
					moscow[id].$cb = $cb;
					moscow[id].$label = $item;
					if (arr && $cb.length) {
						var
							$layer = $('<span class="layer"></span>')
								.css({
									left: arr[1],
									top: arr[2],
									width: arr[3],
									height: arr[4],
									backgroundPosition: '-' + arr[5] + 'px -' + arr[6] + 'px'
								})
								.attr('title', arr[0])
								.click(function(event) {
									$cb[0].checked = !$cb[0].checked;
									$item.add($item.parent()).add($layer).toggleClass('active', $cb[0].checked);
									sessvars[sess_part][$cb[0].id] = $cb[0].checked;
									return false;
								})
								.appendTo($moscow);
						$item.data('layer', $layer);
						moscow[id].$layer = $layer;
					}
				});
				$moscow.appendTo($moscow_block);
				var re = /id_(\w+)/;
				$('map[name=moscow_map] area')
					.each(function() {
						var $this = $(this),
							arr = re.exec(this.className),
							id = arr[1];
						if (moscow[id] && moscow[id].$cb) $this
							.data('id', id)
							.data('$cb', moscow[id].$cb)
							.data('$label', moscow[id].$label)
							.data('$layer', moscow[id].$layer)
							.attr('title', moscow[id][0]);
					})
					.click(function() {
						var $this = $(this),
							$cb = $this.data('$cb'),
							$label = $this.data('$label'),
							$layer = $this.data('$layer');
						if ($cb) {
							$cb[0].checked = !$cb[0].checked;
							$layer.add($label).add($label.parent()).toggleClass('active', $cb[0].checked);
							sessvars[sess_part][$cb[0].id] = $cb[0].checked;
						}
						return false;
					});
			}
			// Районы
			if ($moscow_center_block.length) {
				var $moscow_center_bg = $('<div id="moscow_center_bg" />'),
					$moscow_center_cover = $('<img id="moscow_center_cover" src="/img/spacer.gif" width="100%" heiht="100%" alt="" usemap="#moscow_center_map" />'),
					$moscow_center_other = $('<div id="moscow_center_other" />'),
					$moscow_center_button = $select_button
						.clone()
						.click(function(e) {
							$('#modalClose').trigger('click');
						}),
					$moscow_center = $('<div id="moscow_center" />')
						.append($moscow_center_bg)
						.append($moscow_center_cover)
						.append($moscow_center_other)
						.append($moscow_center_button),
					moscow_center_index = {};
				for (var id in moscow_center) {
					if ((id+'').length) {
						moscow_center_index[id] = moscow_center[id];
					}
				}
				var $labels = $('label', $moscow_center_block).each(function(index, item) {
					var $item = $(item),
						$cb = $('input', $item),
						id = $cb.val(),
						arr = moscow_center_index[id];
					if (typeof(moscow_center[id]) == UNDEF) return;
					moscow_center[id].$cb = $cb;
					moscow_center[id].$label = $item;
					if (arr && $cb.length) {
						var $layer;
						if (id == 0) $layer = $moscow_center_other;
						else $layer = $('<span class="layer"></span>')
								.css({
									left: arr[1],
									top: arr[2],
									width: arr[3],
									height: arr[4],
									backgroundPosition: '-' + arr[5] + 'px -' + arr[6] + 'px'
								});
						$layer.attr('title', arr[0])
							.click(function(event) {
								$cb[0].checked = !$cb[0].checked;
								$item.add($item.parent()).add($layer).toggleClass('active', $cb[0].checked);
								sessvars[sess_part][$cb[0].id] = $cb[0].checked;
								return false;
							})
							.appendTo($moscow_center);
						$item.data('layer', $layer);
						moscow_center[id].$layer = $layer;
					}
				});
				$moscow_center.appendTo($moscow_center_block);
				var re = /id_(\w+)/;
				$('map[name=moscow_center_map] area')
					.each(function() {
						var $this = $(this),
							arr = re.exec(this.className),
							id = arr[1];
						if (moscow_center[id] && moscow_center[id].$cb) $this
							.data('id', id)
							.data('$cb', moscow_center[id].$cb)
							.data('$label', moscow_center[id].$label)
							.data('$layer', moscow_center[id].$layer)
							.attr('title', moscow_center[id][0]);
					})
					.click(function() {
						var $this = $(this),
							$cb = $this.data('$cb'),
							$label = $this.data('$label'),
							$layer = $this.data('$layer');
						if ($cb) {
							$cb[0].checked = !$cb[0].checked;
							$layer.add($label).add($label.parent()).toggleClass('active', $cb[0].checked);
							sessvars[sess_part][$cb[0].id] = $cb[0].checked;
						}
						return false;
					});
			}
			// Районы
			if ($moscow2_block.length) {
				var $moscow2_bg = $('<div id="moscow2_bg" />'),
					$moscow2_cover = $('<img id="moscow2_cover" src="/img/spacer.gif" width="100%" heiht="100%" alt="" usemap="#moscow2_map" />'),
					$moscow2_other = $('<div id="moscow2_other" />'),
					$moscow2_button = $select_button
						.clone()
						.click(function(e) {
							$('#modalClose').trigger('click');
						}),
					$moscow2 = $('<div id="moscow2" />')
						.append($moscow2_bg)
						.append($moscow2_cover)
						.append($moscow2_other)
						.append($moscow2_button),
					moscow2_index = {};
				for (var id in moscow2) {
					if ((id+'').length) {
						moscow2_index[id] = moscow2[id];
					}
				}
				var $labels = $('label', $moscow2_block).each(function(index, item) {
					var $item = $(item),
						$cb = $('input', $item),
						id = $cb.val(),
						arr = moscow2_index[id];
					if (typeof(moscow2[id]) == UNDEF) return;
					moscow2[id].$cb = $cb;
					moscow2[id].$label = $item;
					if (arr && $cb.length) {
						var $layer;
						if (id == 0) $layer = $moscow2_other;
						else $layer = $('<span class="layer"></span>')
								.css({
									left: arr[1],
									top: arr[2],
									width: arr[3],
									height: arr[4],
									backgroundPosition: '-' + arr[5] + 'px -' + arr[6] + 'px'
								});
						$layer.attr('title', arr[0])
							.click(function(event) {
								$cb[0].checked = !$cb[0].checked;
								$item.add($item.parent()).add($layer).toggleClass('active', $cb[0].checked);
								sessvars[sess_part][$cb[0].id] = $cb[0].checked;
								return false;
							})
							.appendTo($moscow2);
						$item.data('layer', $layer);
						moscow2[id].$layer = $layer;
					}
				});
				$moscow2.appendTo($moscow2_block);
				var re = /id_(\w+)/;
				$('map[name=moscow2_map] area')
					.each(function() {
						var $this = $(this),
							arr = re.exec(this.className),
							id = arr[1];
						if (moscow2[id] && moscow2[id].$cb) $this
							.data('id', id)
							.data('$cb', moscow2[id].$cb)
							.data('$label', moscow2[id].$label)
							.data('$layer', moscow2[id].$layer)
							.attr('title', moscow2[id][0]);
					})
					.click(function() {
						var $this = $(this),
							$cb = $this.data('$cb'),
							$label = $this.data('$label'),
							$layer = $this.data('$layer');
						if ($cb) {
							$cb[0].checked = !$cb[0].checked;
							$layer.add($label).add($label.parent()).toggleClass('active', $cb[0].checked);
							sessvars[sess_part][$cb[0].id] = $cb[0].checked;
						}
						return false;
					});
			}
			if ($road_block.length) {
				var $roadmap_lines = $('<div id="roadmap_lines" />'),
					$roadmap_button = $select_button
						.clone()
						.click(function(e) {
							$('#modalClose').trigger('click');
						}),
					$clear_button = $('<span class="clear_ext">' + $L.clear + '</span>')
						.appendTo($road_block),
					$roadmap = $('<div id="roadmap" />')
						.append($roadmap_lines)
						.append($roadmap_button),
					road_index = {};
				for (var reg in road) {
					for (var id in road[reg]) {
						if ((id+'').length) {
							road[reg][id].reg = reg;
							road_index[id] = road[reg][id];
						}
					}
				}
				var $labels = $('li li label', $road_block).each(function(index, item) {
					var $item = $(item),
						$cb = $('input', $item),
						id = $cb.val(),
						arr = road_index[id];
					if (typeof(road_index[id]) == UNDEF) return;
					road_index[id].$cb = $cb;
					road_index[id].$label = $item;
					if (arr && $cb.length) {
						var
							$layer = $('<span class="layer"></span>')
								.css({
									left: arr[1],
									top: arr[2],
									width: arr[3],
									height: arr[4],
									backgroundPosition: '-' + arr[5] + 'px -' + arr[6] + 'px'
								})
								.attr('title', arr[0])
								.appendTo($roadmap);
						$item.data('layer', $layer);
						road_index[id].$layer = $layer;
					}
				});
				$roadmap.prependTo($road_block);
			}
			var page_class = $('#page').attr('class');
			$('h6', $exts).each(function(index, item) {
				var $item = $(item);
				$item.colorbox({
					href: $item.parent(),
					inline: true,
					className: 'form',
					fixedHeight: '75%',
					minInnerWidth: 200,
					className: page_class + ' form filter'
				}, function() {
					var
						$mlc = $('#modalLoadedContent'),
						$mc = $('#modalContent');
					$mlc.css({
						height: parseInt($mlc.css('height')) - 60
					});
					if (!$mc.data('button_added')) {
						$mc
							.append(
								$select_button
									.clone()
									.click(function(e) {
										$('#modalClose').trigger('click');
									})
							)
							.data('button_added', true);
					}
					$('#colorbox').one('close', function() { load_list(); });
				});
			});
			var
				ie6 = (!+"\v1") && (typeof XMLHttpRequest == UNDEF);
			$('h6', $metro_block).colorbox({
				href: $metro_block,
				inline: true,
				fixedHeight: ie6 ? 807 : 787,
				fixedWidth: 650,
				className: page_class + ' form ext'
			}, function() {
				$('#colorbox').one('close', function() { load_list(); });
			});
			$('h6', $moscow_block).colorbox({
				href: $moscow_block,
				inline: true,
				fixedHeight: ie6 ? 753 : 723,
				fixedWidth: 590,
				className: page_class + ' form ext'
			}, function() {
				$('#colorbox').one('close', function() { load_list(); });
			});
			$('h6', $moscow_center_block).colorbox({
				href: $moscow_center_block,
				inline: true,
				fixedHeight: ie6 ? 753 : 723,
				fixedWidth: 640,
				className: page_class + ' form ext'
			}, function() {
				$('#colorbox').one('close', function() { load_list(); });
			});
			$('h6', $moscow2_block).colorbox({
				href: $moscow2_block,
				inline: true,
				fixedHeight: ie6 ? 466 : 436,
				fixedWidth: 640,
				className: page_class + ' form ext'
			}, function() {
				$('#colorbox').one('close', function() { load_list(); });
			});
			$('h6', $road_block).colorbox({
				href: $road_block,
				inline: true,
				fixedHeight: 600,
				fixedWidth: 654,
				className: page_class + ' form ext road'
			}, function() {
				$('#colorbox').one('close', function() { load_list(); });
			});
			var f1 = function(index, item) {
				var $item = $(item),
					$li = $(item.parentNode.parentNode),
					$label = $(item.parentNode),
					$name = $label.data('name'),
					$circle = $label.data('circle'),
					$layer = $label.data('layer');
				if (sess_loaded) $li.toggleClass('active', item.checked = !!sessvars[sess_part][item.id]);
				else item.checked = (sessvars[sess_part][item.id] = $li.hasClass('active'));
				if ($name && $name.length) $name.toggleClass('active', item.checked).css({opacity: item.checked ? 1 : opacity});
				if ($circle && $circle.length) $circle.toggleClass('active', item.checked);
				if ($layer && $layer.length) $layer.toggleClass('active', item.checked);
			}
			var f2 = function(event) {
				var $this = $(this),
					$li = $(this.parentNode.parentNode),
					$label = $(this.parentNode),
					$name = $label.data('name'),
					$circle = $label.data('circle'),
					$layer = $label.data('layer');
				$li.add($label).toggleClass('active', sessvars[sess_part][this.id] = this.checked);
				if ($name && $name.length) $name.toggleClass('active', this.checked).css({opacity: this.checked ? 1 : opacity});;
				if ($circle && $circle.length) $circle.toggleClass('active', this.checked);
				if ($layer && $layer.length) $layer.toggleClass('active', this.checked);
			};
			$('.ext input', $filter).each(f1).click(f2).click(function() {
				if ($(this).parents('#filter').length && !this.checked) load_list();
			});
			$('li[class^=reg]>label input', $road_block).click(function() {
				var
					$this = $(this),
					checked = this.checked;
				if ($this.parents('#colorbox').length) {
					$('li input', $this.parents('li')).each(function() {
						this.checked = checked;
						$(this).triggerHandler('click');
					});
				}
			});
			$('.clear_ext').click(function(e) {
				$parent = $(this).parents('.ext');
				$('input:checked', $parent).each(function(index, item) {
					var $item = $(item),
						$li = $(item.parentNode.parentNode),
						$label = $(item.parentNode),
						$name = $label.data('name'),
						$circle = $label.data('circle'),
						$selected = $label.data('selected'),
						$layer = $label.data('layer');
					item.checked = false;
					$li.add($label).toggleClass('active', sessvars[sess_part][item.id] = item.checked);
					if ($name && $name.length) $name.toggleClass('active', item.checked).css({opacity: item.checked ? 1 : opacity});;
					if ($selected && $selected.length) $selected.toggleClass('active', item.checked);
					if ($layer && $layer.length) $layer.toggleClass('active', item.checked);
				});
				$parent.removeClass('filled');
				load_list();
			});
		}

		// Слайдеры
		/*
			TODO Исправить поведение при вводе в поле «От» числа большего, чем «До»
			TODO Исправить в IE6: ползунок выезжает вправо, деления ставятся не точно
		*/
		var $intervals = $('#filter fieldset.interval');
		if ($intervals.length) {
			var re_grid = new RegExp('\\bgrid((?:_[\\d\.]+)+)\\b', 'i'),
				re_w = new RegExp('\\bw_(\\d+)_(\\d+)\\b', 'i'),
				re_mod = new RegExp('\\bmod_(\\d+)\\b', 'i'),
				re_valute = new RegExp('\\b(rub|usd|eur)\\b', 'i'),
				Control = function($slider, $units) {
					this.$slider = $slider;
					this.grid = [];
					this.mod = 1;
					this.convert = 1;
					this.from = 0;
					this.to = 0;
					if ($units) {
						this.$units = $units;
						this.id = $units.parent().attr('id');
						this.convert = parseFloat($units.attr('value'), 10) || this.convert;
						this.label = $.trim($units.attr('title') || $units.text()) || '';
						var arr = re_grid.exec(this.$units.attr('class')),
							i = 0, len, k;
						if (arr && (arr.length > 1)) {
							arr = arr[1].replace(/^_/, '').split('_');
							if (arr && (len = arr.length)) {
								for (; i < len; i++) if (!isNaN(k = parseFloat(arr[i], 10))) this.grid.push(k);
							}
						}
						arr = re_mod.exec(this.$units.attr('class'));
						if (arr && (arr.length > 1)) this.mod = parseFloat(arr[1], 10) || this.mod;
						arr = re_valute.exec(this.$units.attr('class'));
						if (arr && (arr.length > 1)) this.valute = arr[1] || 'rub';
						if (this.label.length) {
							this.$label = $('<span class="label" />')
								.text(this.label)
								.prependTo(this.$slider.parent());
						}
					}
				};
			Control.prototype.make_grid = function() {
				if (!this.grid.length) return this;
				if (!this.$grid) {
					var i = 0,
						len = this.grid.length,
						min = this.$slider.slider('option', 'min'),
						max = this.$slider.slider('option', 'max'),
						w = max - min,
						left;
					if (w > 0) {
						this.$grid = $('<ul class="grid" />')
							.prependTo(this.$slider);
						for (; i < len; i++) {
							left = (this.grid[i] * this.mod * this.convert - min) * 100 / w;
							// Ограничение справа убрано для возможной установки валюты, округленной в большую сторону
							if (left >=0 /*&& left <= 100*/) $('<li />')
								.append($('<span />').html(((i == len - 1)/* && (this.grid[i] * this.mod * this.convert == max)*/ ? '<small>&gt;</small>' : '') + this.grid[i]))
								.css('left', left + '%')
								.appendTo(this.$grid);
						}
					}
				}
				return this;
			};
			Control.prototype.show = function() {
				this.make_grid();
				if (this.$grid) this.$grid.show();
				if (this.$label) this.$label.show();
				if (this.id && this.valute) {
					$('#search_results, #gmap')
						.removeClass(this.id + '_rub')
						.removeClass(this.id + '_usd')
						.removeClass(this.id + '_eur')
						.addClass(this.id + '_' + this.valute);
				}
				return this;
			};
			Control.prototype.hide = function() {
				if (this.$grid) this.$grid.hide();
				if (this.$label) this.$label.hide();
				return this;
			}
			Control.prototype.grid_min = function() {
				return this.grid.length ? this.grid[0] : 0;
			};
			Control.prototype.grid_max = function() {
				return this.grid.length ? this.grid[this.grid.length - 1] : 100;
			};
			$intervals.each(function(index, item) {
				var $item = $(item),
					$slider = $('<div />').appendTo($('<div class="slider2" />').prependTo($item)).append('<div class="end" />'),
					$from = $('.from input', $item).data('index', 0),
					$from_p = $('<input />')
						.attr('name', $from.attr('name').replace('from', 'from_p'))
						.hide()
						.insertAfter($from),
					$to = $('.to input', $item).data('index', 1),
					$to_p = $('<input />')
						.attr('name', $to.attr('name').replace('to', 'to_p'))
						.hide()
						.insertAfter($to),
					$select = $('.units select:first', $item),
					$units = $('.units select:first option', $item),
					control = null,
					arr = re_w.exec($item.attr('class')),
					sliders = [];
				if (!$units.length) $units = $('.units', $item);
				if (sess_loaded) {
					$from.val(sessvars[sess_part][$from[0].id] || $from.val());
					$to.val(sessvars[sess_part][$to[0].id] || $to.val());
					if ($select.length) $select[0].selectedIndex = parseInt(sessvars[sess_part][$select[0].id], 10) || 0;
				}
				else {
					sessvars[sess_part][$from[0].id] = $from.val();
					sessvars[sess_part][$to[0].id] = $to.val();
					if ($select.length) sessvars[sess_part][$select[0].id] = $select[0].selectedIndex;
				}
				$slider.slider({
					range: true,
					min: parseInt(arr ? arr[1] : $from.val(), 10),
					max: parseInt(arr ? arr[2] : $to.val(), 10),
					values: [$from.val(), $to.val()],
					slide: function(event, ui) {
						var s = control.grid_max() * control.mod > 100 ? 0 : 1,
							v1 = (ui.values[0] / control.convert).toFixed(s),
							v2 = (ui.values[1] / control.convert).toFixed(s);
						$from.val(sessvars[sess_part][$from[0].id] = v1);
						$to.val(sessvars[sess_part][$to[0].id] = v2);
					}
				});
				$slider
					.data('$from_p', $from_p)
					.data('$to_p', $to_p)
					.data('$range', $('.ui-slider-range', $slider));
				sliders.push($slider);
				$units.each(function(u_index, u_item) {
					var $unit = $(u_item),
						obj = new Control($slider, $unit);
					$unit.data('control', obj);
					if (($units.length == 1) || $unit.is(':selected') || $unit.hasClass('active')) control = obj;
				});
				$select.change(function(event, norec) {
					$units.each(function(u_index, u_item) {
						$(u_item).data('control').hide();
					});
					var obj = $($select[0].options[$select[0].selectedIndex]).data('control').show(),
						s = obj.grid_max() * obj.mod > 100 ? 0 : 1,
						v1 = ($from.val() * control.convert / obj.convert).toFixed(s),
						v2 = ($to.val() * control.convert / obj.convert).toFixed(s);
					$from.val(sessvars[sess_part][$from[0].id] = v1);
					$to.val(sessvars[sess_part][$to[0].id] = v2);
					sessvars[sess_part][$select[0].id] = $select[0].selectedIndex;
					control = obj;
					if (!norec) {
						var
							$other = $('.units select[id^=price]').not($select).eq(0);
						if ($other.length) {
							$other[0].selectedIndex = $select[0].selectedIndex;
							$other.trigger('change', [true]);
							$($other[0].options[$other[0].selectedIndex]).trigger('jss_select');
						}
					}
				}).change();
				if (control == null) control = new Control($slider, $units.eq(0));
				control.show();
				$to.add($from).change(function(event) {
					var 
						$this = $(this),
						val = parseFloat($this.val(), 10) || 0,
						ind = $this.data('index'),
						min = $slider.slider('option', 'min'),
						max = $slider.slider('option', 'max'),
						real = val * control.convert;
					sessvars[sess_part][this.id] = val;
					$slider.slider('values', ind, Math.min(max, Math.max(min, real)));
				}).change()
				for (var i in sliders) {
					sliders[i].bind('update_percents', function() {
							var
								$this = $(this),
								$range = $this.data('$range'),
								$from_p = $this.data('$from_p'),
								$to_p = $this.data('$to_p');
							if ($range.length) {
								var
									l = parseFloat($range.css('left')),
									w = parseFloat($range.css('width'));
								$from_p.val(l);
								$to_p.val(l + w);
							}
						});
					sliders[i].trigger('update_percents')
					sliders[i].bind('slidechange', function(event, ui) {
							$(this).trigger('update_percents');
							load_list();
					});
				}
			});
		}
		load_list(true);
	}

	// Стилизованные списки
	/*
		TODO При первом открытии списка не показывается рамка в IE6 (??)
	*/
	$.fn.js_select = function(parent) {
		return this.each(function(index, item) {
			if (item.nodeName.toLowerCase() != 'select') return;
			var $select = $(item),
				$opts = $('option', $select),
				$jss = $('<div class="js_select" />'),
				$ul = $('<ul />').appendTo($jss.click(function(event) {
					$ul.toggle();
					return false;
				})),
				$active = $('<span />').appendTo($('<div />').prependTo($jss));
			if ($select.hasClass('big')) $jss.addClass('js_select_big');
			$select
				.data('jss', $jss)
				.width($select.width() + (/*$.browser.msie || */$.browser.opera ? 10 : 0));

			$opts.each(function(index, item) {
				var
					$item = $(item),
					$li = $('<li ' + ($item.is(':selected') ? 'class="active"' : '') + '/>').append(
						$('<a href="#" />')
							.html($item.html())
							.data('value', $item.val())
							.click(function(event) {
								var $this = $(this);
								$item.trigger('jss_select');
								$select.val($this.data('value')).change();
								return false;
							})
					).appendTo($ul);
				$item
					.data('jss_li', $li)
					.bind('jss_select', function() {
						var
							$this = $(this),
							$li = $this.data('jss_li');
						$('.active', $ul).removeClass('active');
						$li.addClass('active');
						$ul.hide();
					});
			});
			$select.change(function(event) {
				$active.html($(':selected', $select).html());
			})/*.change()*/;  // не делать change при первичной отрисовке select
			$active.html($(':selected', $select).html()); 
			if (parent) {
				var pos = $select.rel_offset(parent);
				if (pos && pos.parent) $(pos.parent).append($jss.css({
					left: pos.left,
					top: pos.top
				}));
				else $jss.insertAfter($select);
			}
			else $jss.insertAfter($select);
			$W.resize(function(event) {
				$jss.css('width', $select.width());
				$ul.css('width', $jss.width()-12);
			}).resize();
			$select.css('visibility', 'hidden');

			$jss.css({'zIndex': 1000 - index});
			if ($jss.parents('.column').size()) {
				$jss.parents('.column').css({'zIndex': 10 - index});
			}
			if ($jss.parents('fieldset').size()) {
				$jss.parents('fieldset').css({'zIndex': 10 - index});
			}
		});
	};
	$('#content select').js_select('\v'=='v' ? 'form' : null);
	$('#panel select').js_select('\v'=='v' ? 'fieldset' : null);

	// подписка на новости
	var $sub_link = $('a.subscribe_news'),
		$sub_form = $('form#subscribe_news');
	if ($sub_link.length && $sub_form.length) {
		$sub_link.colorbox({
			inline: true,
			href: '#subscribe_news',
			disableArrows: true
		});
	}

	// Сортировка таблицы
	$.tablesorter.addParser({
		id: 'estatet', 
		is: function(s) { return true; },
		format: function(s) { return parseFloat(s);	},
		type: 'numeric'
	});
	$.tablesorter.addParser({
		id: 'estatet_sum', 
		is: function(s) { return true; },
		format: function(s) {
			var s_split = s.split(' ');
			var res = '';
			for (var i=0; i<s_split.length; i++) {
				res += '' + s_split[i];
			}
			return parseFloat(res);
		},
		type: 'numeric'
	});
	$('.ctable.empty table').tablesorter({
		cssAsc: 'headerSortDown',
		cssDesc: 'headerSortUp',
		widgets: ['zebra'],
		textExtraction: 'complex',
		headers: {6: {sorter: 'estatet_sum'}}
	});

	function Paste() {
		var objDoc=document.createElement("TextArea");
		document.body.appendChild(objDoc);
		objDoc.focus();
		document.execCommand('paste');
		ret = objDoc.value;
		document.remove(objDoc);
		return ret;
	}
	$('#dishiderbtn').click(function(){
		$('#dishider').show().css('display', 'inline');
		$(this).hide();
		return false;
	});
	$('#methiderbtn').click(function(){
		$('#methider').show().css('display', 'inline');
		$(this).hide();
		return false;
	});

	// Обновление капчи
	$('#reality_req_result').parents('form').find('img').each(function(){
		$(this).css('cursor', 'pointer');
		$(this).click(function(){
			$(this).attr('src', '/kapcha/index.php?'+Math.random());
		});
	});

	// Отправка заявки
	$('#reality_request').bind('click', function () {
		if (req_sent == false) {
			var form = $(this).parents('form');
			var url = $(form).attr('action');
			$.post(url, $(form).serialize(), function (data) {
				$('#reality_req_result').parents('form').find('img').attr('src', '/kapcha/index.php?'+Math.random());
				var res = '<b>' + $L.order.success + '</b>';
				if (data == 'ERR_CAPTCHA') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.code + '</b></span>';
				} else if (data == 'ERR_FLD') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.fields + '</b></span>';
				} else if (data == 'ERR_PHONE') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.phone + '</b></span>';
				} else if (data == 'ERR_EMAIL') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.email + '</b></span>';
				} else {
					req_sent = true;
					_gaq.push(['_trackPageview', '/ArtPage/CorSendForm']);
					alert($(res).text());
					$('#modalClose').trigger('click');
					return true;
				}
				$('#reality_req_result').html(res);
			});
		}
		return false;
	});

	// Плейсхолдеры
	var $placeholder = $('input.placeholder');
	if ($placeholder.length) {
		$placeholder
			.focus(function (event) {
				var $this = $(this);
				if ($this.val() == $this.attr('title')) $this.val('');
			})
			.blur(function (event) {
				var $this = $(this);
				if ($.trim($this.val()) == '') $this.val($this.attr('title'));
			});
	}

	// Похожие предложения
	if ($('.similar_title').length) {
		var similar_objID = $('#obj_info').attr('rel2');
		var similar_res_items = {};
		for (var i=0; i<$('.similar_links a').length; i++) {
			similar_res_items[$('.similar_links a').eq(i).attr('rel')] = [];
		}
		var similar_type = $('.similar_links a').eq(0).attr('rel');
		$('.similar_links a').eq(0).addClass('similar_link_a');

		similar_show_table = function() {
			$('.arr_sort').addClass('arr_unsort').removeClass('arr_sort');
			
			$('.notes.similar tbody').html('');
			$('.notes.similar').trigger('update');
	
			$('.notes.similar').css('display', 'none');
			$('.similar_notfound').hide();
			
			if(typeof(similar_res_items[similar_type]) != 'undefined' && similar_res_items[similar_type].length) {
				$('.similar_notfound').hide();
				$('.notes.similar').css('display', 'table');
				
				for (var i=0; i<similar_res_items[similar_type].length; i++) {
					$('.notes.similar tbody').append($.tmpl("tmpl_similar_item", similar_res_items[similar_type][i]));
					$('.notes.similar').trigger('update');
				}
			}
			else {
				$.getJSON('/sp.php?', {id: similar_objID, type: similar_type}, function(similar_res) {
					if(similar_res.length) {
						$('.similar_notfound').hide();
						$('.notes.similar').css('display', 'table');
						
						for (var i=0; i<similar_res.length; i++) {
							similar_res_items[similar_type][i] = similar_res[i];
							$('.notes.similar tbody').append($.tmpl("tmpl_similar_item", similar_res_items[similar_type][i]));
							$('.notes.similar').trigger('update');
						}
					}
					else {
						$('.notes.similar').css('display', 'none');
						$('.similar_notfound').show();
					}
				});
			}
		}

		similar_show_table();
		
		$('.notes.similar').tablesorter({
			headers: {0: {sorter: false}, 1: {sorter: false}, 2: {sorter: 'text'}, 3: {sorter: 'text'}, 6: {sorter: 'text'}},
			textExtraction: 'complex'
		});

		$('.similar_links a[class!=similar_link_a]').live('click', function(){
			$('.similar_links a').removeClass('similar_link_a');
			$(this).addClass('similar_link_a');
			
			similar_type = $(this).attr('rel');
			similar_show_table();
		});
		
		$('.notes.similar th').click(function(){
			if ($(this).children('span').length) {
				$('.arr_sort').addClass('arr_unsort').removeClass('arr_sort');
				$(this).children('span').addClass('arr_sort').removeClass('arr_unsort');
			}
		});
	}
	
	// Голосование
	if ($('.vote').size()) {
		$('.vote').bind('click', function(){
			vote_ID = $(this).attr('rel');
			$.get('/addvote.php', {id: vote_ID});
			$(this).removeClass('vote');
			$(this).addClass('vote_a');
		});
	}

	// Radiobuttons
	$('.radiobuttons label input').each(function(index, item) {
		if ($(item).attr('checked')) {
			$(item).parent().addClass('active');
		} else {
			$(item).parent().removeClass('active');
		}
	}).click(function(e) {
		var name = $(this).attr('name');
		$(this).parents('fieldset').find('input[name="' + name + '"]').each (function (i, item) { 
			$(item).parent().removeClass('active');
		});
		if ($(this).attr('checked')) {
			$(this).parent().addClass('active');
		} 
	}).css('opacity', 0);

	$('table.free_flat_table td').hover(
		function () {
			var rel = $(this).attr('rel');
			if ((typeof (rel) != 'undefined') && (rel != '.')) {
				$(this).addClass('active');
				var items = rel.split(".");
				$(this).html(items[1] + 'м<sup>2</sup>');
			}
		}, 
		function () {
			var rel = $(this).attr('rel');
			if ((typeof (rel) != 'undefined') && (rel != '.')) {
				$(this).removeClass('active');
				var items = rel.split(".");
				$(this).html(items[0]);
			}
		}
	);

	// Для застройщика - свернуть/развернуть блоки
	$('.dash_h h4 a').click(function() {
		var dash_c = $('.dash_c#' + $(this).attr('rel'));
		var dash_li = $(this).parents('li').eq(0);
		if (dash_c.css('display') == 'block') {
			dash_c.hide();
			dash_li.removeClass('active');
		}
		else {
			dash_c.show();
			dash_li.addClass('active');
		}
	});
	$('.dash_h .dash_h .cframe').click(function() {
		var dash_c = $('.dash_c#' + $(this).attr('rel'));
		if (dash_c.css('display') == 'block') {
			dash_c.hide();
		}
		else {
			dash_c.show();
		}
	});
	
	// Для застройщика - всплывающая форма
	var req_sent2 = false;
	var $a = $('a.order2'),
		$form = $('form#order2');
	if ($a.length && $form.length) {
		$a.colorbox({
			inline: true,
			href: '#order2',
			disableArrows: true,
			className: 'form order'
		}).click(function(event) {
			var $this = $(this);

			$form.find('[name="cname"]').val('');
			$form.find('[name="text"]').val('');
			$form.find('[name="lname"]').val('');
			$form.find('[name="fname"]').val('');
			$form.find('[name="dol"]').val('');
			$form.find('[name="tel"]').val('');
			$form.find('[name="email"]').val('');
			req_sent2 = false;
		});
	}

	// "Для застройщика" - отправка формы
	$('#uslugi_request').bind('click', function () {
		$('#service_req_result').html('&nbsp;');
		if (req_sent2 == false) {
			var form = $(this).parents('form');
			var url = $(form).attr('action');
			$.post(url, $(form).serialize(), function (data) {
				var res = '<b>' + $L.order.success + '</b>';
				if (data == 'ERR_CAPTCHA') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.code + '</b></span>';
				} else if (data == 'ERR_FLD') {
					res = '<span style="color: #DC1921;"><b>' + $L.order.fields + '</b></span>';
				} 
				$('#service_req_result').html(res);
			}, 'text');
		}
		return false;
	});

	// Для каталога - переключение вкладок
	if ($('#page').hasClass('cat_1')) {
		function set_elite_tab(mode) {
			if (mode == 'sale') {
				$('#elite_type').css({'visibility': 'hidden', 'height': 0});
				$('#elite_sale_tab').addClass('active');
				$('#elite_resale_tab').removeClass('active');
				if (!$('input#st_1')[0].checked) {
					$('input#st_1')[0].click();
				}
				if ($('input#st_2')[0].checked) {
					$('input#st_2')[0].click();
				}
			}
			else if (mode == 'resale') {
				$('#elite_type').css({'visibility': 'hidden', 'height': 0});
				$('#elite_sale_tab').removeClass('active');
				$('#elite_resale_tab').addClass('active');
				if ($('input#st_1')[0].checked) {
					$('input#st_1')[0].click();
				}
				if (!$('input#st_2')[0].checked) {
					$('input#st_2')[0].click();
				}
			}
			else if (mode == '') {
				$('#elite_type').css({'visibility': 'visible', 'height': 'auto'});
				$('#elite_sale_tab').removeClass('active');
				$('#elite_resale_tab').removeClass('active');
				if ($('input#st_1')[0].checked) {
					$('input#st_1')[0].click();
				}
				if ($('input#st_2')[0].checked) {
					$('input#st_2')[0].click();
				}
			}
		}
		
		set_elite_tab($('#stype').attr('rel'));

		$('h1.h2 span a[rel=elite]').click(function() { set_elite_tab(''); });
		$('#elite_sale_tab').click(function() { set_elite_tab('sale'); });
		$('#elite_resale_tab').click(function() { set_elite_tab('resale'); });
	}
	
	// Ипотечный калькулятор - слайдеры
	if ($('.calc_slider').size()) {
		// hide currency
		$('#cost_usd').hide();
		$('#cost_eur').hide();

		$('.calc_slider').each(function() {
			var grid = $(this).find('.grid li'),
				len = grid.size(),
				val_min = grid.eq(0).attr('val'),
				val_max = grid.eq(len-1).attr('val'),
				w = val_max - val_min;
			for (var i=0; i < len; i++) {
				left = (grid.eq(i).attr('val') - val_min) * 100 / w;
				if (left >=0) grid.eq(i).css('left', left.toFixed(2) + '%');
			}
			$(this).find('.grid').show();
			$('#' + $(this).attr('id') + '_out').html(val_min + ' ' + $(this).attr('units'));
			step = 1;
			if ($(this).attr('id') == 'calc_slider_price_rub') {
				step = 0.1;
			} else if ($(this).attr('id') == 'calc_slider_percent') {
				step = 0.25;
			}
			$(this).slider({
				range: false,
				min: val_min,
				max: val_max,
				value: val_min,
				step: step,
				slide: function(event, ui) {
					$('#' + $(this).attr('id') + '_out').html(ui.value + ' ' + $(this).attr('units'));
					switch ($(this).attr('id')) {
						case 'calc_slider_price_rub':
							mort_cost_total = ui.value * mort_multipl;
							mort_cost_rub = mort_cost_total;
							break;
						case 'calc_slider_price_usd':
							mort_cost_total = ui.value * mort_multipl;
							mort_cost_usd = mort_cost_total;
							break;
						case 'calc_slider_price_eur':
							mort_cost_total = ui.value * mort_multipl;
							mort_cost_eur = mort_cost_total;
							break;
						case 'calc_slider_first':
							mort_first = ui.value;
							break;
						case 'calc_slider_percent':
							mort_perc = ui.value;
							break;
						case 'calc_slider_period':
							mort_period = ui.value;
							break;
					}
				},
				change: function(event, ui) {
					// расчет суммы ежемесячного платежа
					var months = mort_period * 12 - 1;
					var credit = mort_cost_total - ((mort_cost_total * mort_first) / 100);
					var month_perc = (mort_perc / 1200);
					var itog = Math.round((credit * month_perc ) / (1 - Math.pow(1 + month_perc, -months))); 
					var curr_head = '';
					switch (mort_curr) {
						case 'rub':
							curr_head = 'руб.';
							break;
						case 'usd':
							curr_head = '$';
							break;
						case 'eur':
							curr_head = '&euro;';
							break;
					}
					$('#calc_itog').val(itog + ' ' + curr_head);
				}
			});
		});
	}

	$('#content #path li, #achtung li').css({'behavior': 'url("/scripts/list.htc")'});
	$('.frame, .cframe, .sframe, .mframe').css({'behavior': 'url("/scripts/corners.htc")'});
	$('th span.shy').css({'behavior': 'url("/scripts/shy.htc")'});

	// Вторичка, поиск, скрытие неактивных элементов
	if ($('#mos_1:checked').length < 1) {
		$('#moscow_location').css({'display': 'none'});
	}
	if ($('#mos_2:checked').length < 1) {
		$('#region_location').css({'display': 'none'});
	}

	// Ограничение на количество символов в заявке
	//$('form#order textarea#form_text').maxlength({ maxChars: 200 });
});

function detectIE7() {
	var browser = navigator.appName;
	if (browser == "Microsoft Internet Explorer") {
		var b_version = navigator.appVersion;
		var re = /\MSIE\s+(\d\.\d\b)/;
		var res = b_version.match(re);
		if (res[1] <= 7){
			return true;
		}
	}
	return false;
}

function htmlspecialchars(text) {
    var chars = Array("&", "<", ">", '"', "'");
    var replacements = Array("&amp;", "&lt;", "&gt;", "&quot;", "'");
    for (var i=0; i<chars.length; i++)
    {
        var re = new RegExp(chars[i], "gi");
        if(re.test(text))
        {
            text = text.replace(re, replacements[i]);
        }
    }
    return text;
}

var mort_cost_total = 0;
var mort_cost_rub = 0;
var mort_cost_usd = 0;
var mort_cost_eur = 0;
var mort_first = 10;
var mort_perc = 10;
var mort_period = 5;
var mort_curr = 'rub';
var mort_multipl = '1000000';
function mort_curr_change (obj) {
	var params = obj.value.split(".");
	mort_curr = params[0];
	mort_multipl = params[1];
	switch (mort_curr) {
		case 'rub':
			mort_cost_total = mort_cost_rub;
			$('#cost_rub').show();
			$('#cost_usd').hide();
			$('#cost_eur').hide();
			break;
		case 'usd':
			mort_cost_total = mort_cost_usd;
			$('#cost_rub').hide();
			$('#cost_usd').show();
			$('#cost_eur').hide();
			break;
		case 'eur':
			mort_cost_total = mort_cost_eur;
			$('#cost_rub').hide();
			$('#cost_usd').hide();
			$('#cost_eur').show();
			break;
	}
}

$(window).scroll(function(){
	if($('#new_ban2').size()) {
		$('#new_ban2').css({'top': $(document).scrollTop() + 'px'});
	}
});
// создаём плагин maxlength
jQuery.fn.maxlength = function(options) {
	// определяем параметры по умолчанию и прописываем указанные при обращении
	var settings = jQuery.extend ({
		maxChars: 10, // максимальное колличество символов
		leftChars: "character left" // текст в конце строки информера
	}, options);
	// выполняем плагин для каждого объекта
	return this.each(function() {
		// определяем объект
		var me = $(this);
		// определяем динамическую переменную колличества оставшихся для ввода символов
		var l = settings.maxChars;
		// определяем события на которые нужно реагировать
		me.bind('keydown keypress keyup',function(e) {
			// если строка больше maxChars урезаем её
			if(me.val().length>settings.maxChars) me.val(me.val().substr(0,settings.maxChars));
			// определяем колличество оставшихся для ввода сиволов
			l = settings.maxChars - me.val().length;
			// отображаем значение в информере
			// me.next('div').html(l + ' ' + settings.leftChars);
		});
		// вставка информера после объекта
		// me.after('<div class="maxlen">' + settings.maxChars + ' ' + settings.leftChars + '</div>');
	});
};
