var bounds;
bounds = null;
var map;
var geoResult
var geocoder;

function init_sizes()
{
	var w_width = $(window).width();
	var w_height = $(window).height();
	var offset = $("#YMapsID").offset();
	var m_top = offset.top;
	var m_left = offset.left;
	
	var r_width = $("#right_col").width();
	var m_width = w_width - r_width - 10;
	if(m_width < 400) m_width  = 400;
	var m_height = w_height - m_top - 5;
	if(m_height < 300) m_height = 300;
	
	var img_height = $("#img").height();
	
	$("#YMapsID").height(m_height);
	$("#YMapsID").width(m_width);
	$("#right_box").height(m_height);
	
	$("#scroll_box").height(m_height - img_height - 30);
}

function str_replace(search, replace, subject) 
{
	return subject.split(search).join(replace);
}
		
function showAddressArr (values) {
	if(values != null)
	{
		map.removeAllOverlays();
		
		bounds = null;
		
		var geocoder = new YMaps.Geocoder("Уфа, " + values[1], {results: 1, boundedBy: map.getBounds()});
	
		search_count = values.length;
		search_index = 0;
		
		for (var key in values) {

			var value = values[key];
			geocoder = new YMaps.Geocoder("Уфа, " + value, {results: 1, boundedBy: map.getBounds()});

			YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
				if (this.length()) {
					geoResult = this.get(0);
										
					var point = geoResult.getGeoPoint();
					var placemark = new YMaps.Placemark(point);
					placemark.name = "";

					street = geoResult.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
					street = str_replace("улица ", "", street);
					house = geoResult.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise.PremiseNumber;

					placemark.description = street + ", " + house;
					map.addOverlay(placemark);
					placemark.openBalloon();
					bound = geoResult.getBounds();
					if(bounds == null) bounds = new YMaps.GeoCollectionBounds(bound.getLeftTop());
					bounds.add(bound.getLeftTop());
					bounds.add(bound.getRightBottom());
					search_index ++;
					if(search_index == search_count) 
					{
						map.setBounds(bounds);
						pos = value.indexOf(",", 0);
						street = value.substr(0, pos);
						house = value.substr(pos+2);
						$("#img").load("ajax.php", {task: "image", street: street, house: house}, function(){ setTimeout("init_sizes()", 1000 );});
					}
				}
			});
		}
	}
}				

function showAddress (value) {
	map.removeOverlay(geoResult);

	var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

	YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
		if (this.length()) {
			geoResult = this.get(0);
								
			var point = geoResult.getGeoPoint();
			var placemark = new YMaps.Placemark(point);

		//	street = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
		//	street = str_replace("улица ", "", street);
						
		//	house = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise.PremiseNumber;
		//	$("#street").val(street);
		//	$("#house").val(house);
			
		//	placemark.text = street + ", " + house;
			map.addOverlay(placemark);

		//	$("#img").load("ajax.php", {task: "image", street: street, house: house} );

			placemark.openBalloon();								
			YMaps.Events.observe(placemark, 
			placemark.Events.BalloonOpen, 
			function (){				
				//window.alert("eeee");
				street = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
				street = str_replace("улица ", "", street);
				house = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise.PremiseNumber;
				$("#img").load("ajax.php", {task: "image", street: street, house: house} );
			});		
									
		//	map.panTo(this.get(0).getGeoPoint());
		//	name = "";								
		//	$.post("ajax.php", { name: name, street: street, house: house}, function(data)
		//	{
		//			$("#result").html(data);
		//	});
			
		}else {
			alert("Ничего не найдено: " + value)
		}
	});

	YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
		alert("Произошла ошибка: " + error);
	})
}



function search_on_map(addr)
{
	showAddress("г. Уфа, " + addr);
}

$(document).ready(function(){

	init_sizes();
	
	$("#submit").click(function()
	{
		name = $("#name").attr("value");
		street = $("#street").attr("value");
		house = $("#house").attr("value");
		$.post("ajax.php", { name: name, street: street, house: house}, function(data)
		{
				$("#result").html(data);
		});
		return false;
	});



	map = new YMaps.Map(document.getElementById("YMapsID"));

	// Создание объекта геокодера
	geocoder = new YMaps.Geocoder("Уфа");

	map.addControl(new YMaps.TypeControl());
	map.addControl(new YMaps.ToolBar());
	map.addControl(new YMaps.Zoom());
	map.addControl(new YMaps.ScaleLine());
	map.enableScrollZoom();

	// По завершению геокодирования инициализируем карту первым результатом
	YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) 
	{
		if (geocoder.length()) {
			map.setBounds(geocoder.get(0).getBounds());
			map.zoomBy(4);
		}
	});
					
	YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) 
	{
		var geocoder = new YMaps.Geocoder(mEvent.getGeoPoint(), {results: 1});
	
		YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
			if (this.length()) {
				var placemark = this.get(0);
				if(placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare != null)
				{
					if(placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise != null)
					{
					
						map.removeAllOverlays();
					
						street = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
						street = str_replace("улица ", "", street);
						
													
						house = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise.PremiseNumber;

						placemark.text = street + ", " + house;
						map.addOverlay(placemark);

						$("#img").load("ajax.php", {task: "image", street: street, house: house} );

						placemark.openBalloon();								
						YMaps.Events.observe(placemark, 
						 placemark.Events.BalloonOpen, 
						 function (){				
								//window.alert("eeee");
								street = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
								street = str_replace("улица ", "", street);
								house = placemark.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.Premise.PremiseNumber;
								$("#img").load("ajax.php", {task: "image", street: street, house: house} );
						 });		
												
						map.panTo(this.get(0).getGeoPoint());
						name = "";								
						$.post("ajax.php", { name: name, street: street, house: house}, function(data)
						{
								$("#result").html(data);
						});
					}
				}
			}else {
				alert("не найдено")
			}
		});
		
	});

	var search_count = 0;
	var search_index = 0;
});

