﻿var map;
var geoResult;
var curScale;

var curScaleID;

function setCurScaleID(id) {
    curScaleID = id;
}


resultPoints = new Array();
var selectedLabel = "";

function init(scale) {
    var mapDiv = document.getElementById("YMapsID");
    if (mapDiv != null) {        
        map = new YMaps.Map(mapDiv);
        // Позиционируем карту точкой примерно в центре Москвы
        var MoscowCenterPoint = new YMaps.GeoPoint(37.64, 55.76);
        map.setCenter(MoscowCenterPoint, scale);
        map.addControl(new YMaps.Zoom());
    }    
};

function limitScale(maxScale) {
    if (map != null) {
        curScale = document.getElementById(curScaleID);
        if (curScale != null)
            curScale.value = map.getZoom();        
        YMaps.Events.observe(map, map.Events.Update, function() {
            if (map.getZoom() > maxScale) map.setZoom(maxScale);

            if (curScale != null)
                curScale.value = map.getZoom();
        }
	);
    }
}

function placePoint(longitude, latitude, number, label, description, balloonContent) {
    var point = new YMaps.GeoPoint(longitude, latitude);
    var placemark = new YMaps.Placemark(point);
    placemark.setIconContent(description);
    placemark.setBalloonContent(balloonContent);
    placemark.setBalloonOptions({ maxWidth: 300 });
    map.addOverlay(placemark);
    resultPoints[number] = new Array(placemark, label);

    YMaps.Events.observe(placemark, placemark.Events.Click, function() {
        changeSelectedLabel(label);
    });
}

function changeSelectedLabel(newLabel) {
    var curLabel;
    if (selectedLabel != "") {
        curLabel = document.getElementById(selectedLabel);
        if (curLabel != null)
            curLabel.className = "";
    }

    selectedLabel = newLabel;
    if (curLabel != null) {
        curLabel = document.getElementById(selectedLabel);
        curLabel.className = "resultSelected";
    }
}


// Функция поиска адреса через Яндекс Геокодер
function searchAddress(addressBoxID) {
    var addressBox = document.getElementById(addressBoxID);
    var textAddr = addressBox.value;

    registerGeocoderRequest();
    var geocoder = new YMaps.Geocoder(textAddr, { results: 1 });

    YMaps.Events.observe(geocoder, geocoder.Events.Load, function() {
        if (this.length()) {
            geoResult = this.get(0);
            var newSearchPoint = geoResult.getGeoPoint();

            var QueryString = new Array();
            QueryString["_"] = "";

            if (location.search.length > 1) {
                var qs_query = location.search.substring(1, location.search.length);
                var qs_pairs = qs_query.split('&');

                for (var qs_index = 0; qs_index < qs_pairs.length; qs_index++) {
                    var qs_element = qs_pairs[qs_index].split('=');
                    QueryString[qs_element[0]] = unspace(unescape(qs_element[1]));
                }
            }

            var qs = location.href;

            if (typeof (QueryString["lng"]) != 'undefined') {
                qs = qs.replace("lng=" + QueryString["lng"], "lng=" + newSearchPoint.getLng());
            }
            else {
                if (qs.indexOf('?') == -1) {
                    qs = qs + "?";
                }
                else {
                    qs = qs + "&";
                }
                qs = qs + "lng=" + newSearchPoint.getLng();
            }

            if (typeof (QueryString["lat"]) != 'undefined') {
                qs = qs.replace("lat=" + QueryString["lat"], "lat=" + newSearchPoint.getLat());
            }
            else {
                qs = qs + "&lat=" + newSearchPoint.getLat();
            }

            if (typeof (QueryString["scale"]) != 'undefined') {
                qs = qs.replace("scale=" + QueryString["scale"], "scale=" + map.getZoom());
            }
            else {
                qs = qs + "&scale=" + map.getZoom();
            }

            if (typeof (QueryString["pi"]) != 'undefined') {
                qs = qs.replace("&pi=" + QueryString["pi"], "");
                qs = qs.replace("pi=" + QueryString["pi"] + "&", "");
            }

            window.location = qs;

            //map.setBounds(geoResult.getBounds());
            //map.openBalloon(geoResult.getGeoPoint(), "Вы искали: " + geoResult.text, { hasCloseButton: false, mapAutoPan: 1 });
        }
        else {
            alert("Введённый адрес не найден!")
        }
    });
}

function unspace(qs_element) {
    return qs_element.split('+').join(' ');
}

function moveMapToLocation(longitude, latitude, scale, description) {
    if (map != null) {
        locationPoint = new YMaps.GeoPoint(longitude, latitude);
        map.setCenter(locationPoint, scale);
    }
    //map.openBalloon(locationPoint, "Вы искали: " + description, { hasCloseButton: false, mapAutoPan: 1 });
}

function selectPoint(number) {
    changeSelectedLabel(resultPoints[number][1]);
    var selectedPoint = resultPoints[number][0].getGeoPoint();
    map.panTo(selectedPoint);
    resultPoints[number][0].openBalloon();
}

function registerGeocoderRequest() {
    var xmlDoc;

    if (typeof window.ActiveXObject != 'undefined') {
        xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else {
        xmlDoc = new XMLHttpRequest();
    }

    try {
        xmlDoc.open("GET", "/register_geocoder_request.aspx", true);
        xmlDoc.send(null);
    }
    catch (ex) {
    }

}