﻿var map;
var GeographyInfoRoot;
var coWorkerCompleted = false;
var MansionsScale = 13;
var Markers;
var activeMarker;

function LoadMapPage(uri, uriXml, divId, mansionId, divMap, scale) {
	var div = document.getElementById(divId);
	if (div) {
		var eventXml = 
			function (result) {
				GeographyInfoRoot = XmlRootByText(result);
				if (coWorkerCompleted) LoadMap(mansionId, divMap, scale);
				else coWorkerCompleted = true;
			};
		var event = 
			function (result) {
				div.innerHTML = result;
				PopupOpen();
				ReplaceSelects(document);
				if (coWorkerCompleted) LoadMap(mansionId, divMap, scale);
				else coWorkerCompleted = true;
			} // end event
		HttpRequest(SitePath + AddPageId(uriXml), null, null, eventXml);		
		HttpRequest(SitePath + AddPageId(uri), null, divId, event);		
	} // end if
	return false;
} // end function

function LoadMap(mansionId, divMap, scale){
	var CurrentMansion = GetNodeById(GeographyInfoRoot, mansionId, true);
	MansionsScale = scale;
	/* Проверка на совместимость с используемым браузером*/
	if (GBrowserIsCompatible()) {
		/* Создание объекта карты, googlemap - имя, по которому находится объект карты, 	описываемый ниже*/
		map = new GMap2(document.getElementById(divMap));
		/* Создать элементы навигации, масштабную линейку */
		var map_ctrl=new GLargeMapControl();
		var map_type_ctrl=new GMapTypeControl();
		var map_scale_ctrl=new GScaleControl();
		/* Добавить элементы навигации */
		map.addControl(map_ctrl);
		/* Кнопки выбора типа карты*/
		map.addControl(map_type_ctrl);
		/* Добавить масштабную линейку */
		map.addControl(map_scale_ctrl);

		/*Центрирование карты*/
		if (CurrentMansion) {
			var point = new GLatLng(CurrentMansion.getAttribute("coordX"), CurrentMansion.getAttribute("coordY"));
			map.setCenter(point, scale);
		};
		PlacementMarkers(mansionId);
	};
	if (CurrentMansion) {
		var CurrentRegion = CurrentMansion.parentNode;
		FillSelect(CurrentRegion, 'GoogleMansionsSelect', 'Mansion', 'Mansion', CurrentMansion.getAttribute("id"), OnMansionChange);
		var CurrentCity = CurrentRegion.parentNode;
		FillSelect(CurrentCity, 'GoogleRegionsSelect', 'Region', 'Region', CurrentRegion.getAttribute("id"), OnRegionChange);
		var div = document.getElementById('CityName');
		div.innerHTML = CurrentCity.getAttribute("name");
	};
}

function PlacementMarkers(mansionId) {
	/* Создание иконки */
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(27,27);
	baseIcon.iconAnchor=new GPoint(13,27);
	baseIcon.infoWindowAnchor=new GPoint(13,0);

	/*Расстановка фишек*/
	var Mansions = GetXmlNodesByTagName(GeographyInfoRoot, 'house');
	Markers = new Array();
	for (i=0; i < Mansions.length; i++){
		var point = new GLatLng(Mansions[i].getAttribute("coordX"), Mansions[i].getAttribute("coordY"));
		var newIcon = new GIcon(baseIcon);
		if (Mansions[i].getAttribute("id") == mansionId)
			newIcon.image = SitePath + 'sevgorod/img/ball_active.png';
		else 
			newIcon.image = SitePath + 'sevgorod/img/ball.png';
		var building = new GMarker(point, {icon: newIcon, title: Mansions[i].getAttribute("name")});
		if (Mansions[i].getAttribute("id") == mansionId)
			activeMarker = building;		
		building.caption = "<b>"+ Mansions[i].getAttribute("name") + "</b><br>" + Mansions[i].getAttribute("message");
		building.id = Mansions[i].getAttribute("id");
		GEvent.addListener(building, "click", function() {this.openInfoWindowHtml(this.caption); OnMarkerClick(this);});
		map.addOverlay(building);
		Markers.push(building);
	}
}

function OnMarkerClick(marker){
	var CurrentMansion = GetNodeById(GeographyInfoRoot, marker.id, true);
	var CurrentRegion = CurrentMansion.parentNode;
	FillSelect(CurrentRegion, 'GoogleMansionsSelect', 'Mansion', 'Mansion', CurrentMansion.getAttribute("id"), OnMansionChange);
	var CurrentCity = CurrentRegion.parentNode;
	FillSelect(CurrentCity, 'GoogleRegionsSelect', 'Region', 'Region', CurrentRegion.getAttribute("id"), OnRegionChange);
	SetActiveMarker(marker);
}

function ChangeMapCenter(GObject){
	if (GBrowserIsCompatible()){
		var coordX = GObject.getAttribute("coordX");
		var coordY = GObject.getAttribute("coordY");
		try {
			var scale = GOBject.getAttribute("scale");
		} catch (e) {
			scale = MansionsScale;
		}
		var point = new GLatLng(coordX, coordY);
		map.setCenter(point, scale);
	}
}

function SetCity(cityId) {
	var city = GetNodeById(GeographyInfoRoot, cityId);
	FillSelect(city, 'GoogleRegionsSelect', 'Region', 'Region', 0, OnRegionChange);
	var div = document.getElementById('CityName');
	div.innerHTML = city.getAttribute("name");
//	var region = GetNodeById(GeographyInfoRoot, document.getElementById('Region').value, true);
	FillSelect(city, 'GoogleMansionsSelect', 'Mansion', 'Mansion', 0, OnMansionChange, 'house');
	ChangeMapCenter(city);
}

function OnRegionChange(){
	var region = GetNodeById(GeographyInfoRoot, this.value, true);
	if (region != null) {
		FillSelect(region, 'GoogleMansionsSelect', 'Mansion', 'Mansion', 0, OnMansionChange);
		ChangeMapCenter(region);
	}
	else {
		var city = GetNodeById(GeographyInfoRoot, document.getElementById('PopupCity').value, true);
		FillSelect(city, 'GoogleMansionsSelect', 'Mansion', 'Mansion', 0, OnMansionChange, 'house');
	}
}

function OnMansionChange(){
	var mansionId = this.value;
	var mansion = GetNodeById(GeographyInfoRoot, mansionId, true);
	if (mansion != null) {
		ChangeMapCenter(mansion);
		//PlacementMarkers(mansion.getAttribute("id"));
		var i = 0;
		while ((i < Markers.length) && (Markers[i].id != mansionId)) i++;
		if (i < Markers.length) SetActiveMarker(Markers[i]);
		LoadPage('AJAX/GetEstateConclusion.aspx?MansionId=' + this.value + '&SimilarEstateId=' + document.getElementById('CurrentEstateId').value, 'EstateConclusion');
	}
	var input = document.getElementById("SaveAndClose");
	input.disabled = false;
}

function FillSelect(parent, divId, selectId, selectName, selectedId, onChange, tagName) {
	var select = document.createElement('select');
	select.id=selectId; select.name=selectName;
	select.className = "select"; select.onchange = onChange;
	var defaultOption = document.createElement('option');
	defaultOption.value = 1;
	defaultOption.innerHTML = "Любой";
	select.appendChild(defaultOption);
	if (parent != null) {
		var children;
		if (tagName == null)
			children = parent.childNodes;
		else
			children = parent.getElementsByTagName(tagName);
		for (var j = 0; j < children.length; j++) {
			if (children[j].nodeType == 1){
				var option = document.createElement('option');
				option.value = children[j].getAttribute("id");
				option.innerHTML = children[j].getAttribute("name");
				if (children[j].getAttribute("id") == selectedId) option.selected = 'selected';
				select.appendChild(option);
			}
		}
	}
	var div = document.getElementById(divId);
	div.innerHTML = '';
	div.appendChild(select);
	ReplaceSelects(div);
}

function GetNodeById(parent, id, deep) {
	if (!parent.childNodes) return;
	var children = parent.childNodes;
	for (var i = 0; i < children.length; i++) {
		if (children[i].nodeType == 1) {
			if (children[i].getAttribute("id") == id) return children[i];
			var result;
			if (deep) result = GetNodeById(children[i], id, true);
			if (result) return result;
		}
	}
	return;
}

function SetActiveMarker(marker){
	if ((marker != activeMarker) && GBrowserIsCompatible()) {
		marker.setImage(SitePath + 'sevgorod/img/ball_active.png');
		activeMarker.setImage(SitePath + 'sevgorod/img/ball.png');
		activeMarker = marker;
	}
	var input = document.getElementById("SaveAndClose");
	input.disabled = false;
}