VillageFilter = {
	'map':null,
	'form':null,
	'icon':null,
	'data':{
		't':'<div class="villageOnMap">%image%<div class="title"><a href="%url%">%title%</a></div>%distance%%price%<p><a href="%url%">подробнее...</a></p></div>',
		'image':'<div class="houseIcon"><a href="%url%"><img src="%src%" width="25" height="25" alt=""/></a></div>',
		'distance':'<p><b>Расстояние до КАД</b>: %u км</p>',
		'p':'<p><b>Стоимость коттеджей</b>: %s руб</p>',
		'pi':'<p><b>Стоимость коттеджей</b>: <span class="price">%s1% &mdash; %s2% руб</span></p>'
	},
	'markers':[],
	'conf':function(map,form_id)
	{
		this.form = document.getElementById(form_id);
		jQuery(this.form).submit(function(o){ return function(){ o.redirect(); return false; } }(this));
		this['map'] = map;
		this.data.center = map.getCenter();
	},
	'q':function()
	{
		this.map.clearOverlays();
		jQuery.ajax({
			'url':'/ajax/filter/',
			'data':jQuery(this.form).serialize(),
			'dataType':'json',
			'success':(function(o){ return function(data) { o.success(data); } }(this)),
			'error':(function(o){ return function(XMLHttpRequest, textStatus, errorThrown) { o.error(XMLHttpRequest, textStatus, errorThrown); } }(this)),
			'type':'POST'
		});
	},
	'success':function(data)
	{
		if(!data.result || !data.result.length)
		{
			this.map.setCenter(this.data.center);
			return;
		}
		this.markers = [];
		for(var i=0; i<data.result.length; i++)
		{
			this.add(data.result[i]);
		}
		this.render();
	},
	'error':function(XMLHttpRequest, textStatus, errorThrown)
	{
		alert('Ошибка передачи данных! Повторите попытку позже!');
	},
	'avg':function(v)
	{
		if(!v.length)
			return false;
		return eval(v.join('+'))/v.length;
	},
	'add':function(d)
	{
		var o = {};
		if(this.icon)
			o['icon'] = this.icon;
		var m = new GMarker(new GLatLng(d[5],d[6]),o);
		var h = this.data.t;
		var p = '';
		if(d[7] && d[8] && d[7]!='0')
		{
			p = (d[7] == d[8] || d[8] == '0')
				? this.data.p.replace('%s',d[7])
				: this.data.pi.replace('%s1%',d[7]).replace('%s2%',d[8]);
		}
		h = h.replace('%title%',d[1]);
		h = h.replace(/%url%/g,d[2]);
		h = h.replace('%image%', (d[3].length ? this.data.image.replace('%url%',d[2]).replace('%src%',d[3]) : ''));
		h = h.replace('%distance%',(d[4] ? this.data.distance.replace('%u',d[4]) : '')); 
		h = h.replace('%price%', p);
		m.bindInfoWindowHtml(h);
		this.markers.push(m);
	},
	'render':function()
	{
		var lat = [];
		var lon = [];
		var coords = [];
		this.map.clearOverlays();
		for(var i=0;i<this.markers.length;i++)
		{
			var g = this.markers[i].getLatLng();
			lat.push(g.lat());
			lon.push(g.lng());
			coords.push(g);
		}
		var lav = this.avg(lat);
		var lov = this.avg(lon);
		if(lav && lov)
		{
			var center = new GLatLng(lav,lov);
			var d = {};
			var dd = [];
			for(var i=0;i<coords.length;i++) {
				var di = coords[i].distanceFrom(center);
				d[(di+'')]=coords[i];
				dd.push(di);
			}
			var max = (eval('Math.max('+dd.join(',')+')'))+'';
			if(d[max])
			{
				this.map.setCenter(center);
				var bounds = this.map.getBounds()
				bounds.extend(d[max]);
				var err = 0;
				if(bounds.getSouthWest().distanceFrom(center)<max)
					err = -1;
				this.map.setZoom(this.map.getCurrentMapType().getBoundsZoomLevel(bounds,this.map.getSize())+err);
			}
			else
				this.map.setCenter(center,7);
		}
		for(var i=0;i<this.markers.length;i++)
			this.map.addOverlay(this.markers[i]);
	},
	'redirect':function()
	{
		var u = [];
		var i = this.form.elements['direction_id'].value*1;
		u.push((!isNaN(i)) ? i : 0);
		i = this.form.elements['distance_min'].value*1;
		u.push((!isNaN(i)) ? i : 0);
		i = this.form.elements['distance_max'].value*1;
		u.push((!isNaN(i)) ? i : 0);
		i = this.form.elements['price_min'].value*1;
		u.push((!isNaN(i)) ? i : 0);
		i = this.form.elements['price_max'].value*1;
		u.push((!isNaN(i)) ? i : 0);
		var c = jQuery('label input', this.form).get();
		var d = [];
		var b = [];
		for(var i=0;i<c.length;i++)
		{
			if(!c[i].type || !c[i].name || c[i].type!='checkbox' || !c[i].checked)
				continue;
			if(c[i].name == 'details[]')
				d.push(c[i].value);
			else if(c[i].name == 'btypes[]')
				b.push(c[i].value);
		}
		u.push(b.length ? b.join(',') : '');
		u.push(d.length ? d.join(',') : '');
		document.location.href = '/village/4-'+u.join('-')+'/0/';
	}
};
