<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
?>

<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=e52a5ae9-1a86-4302-a647-20c51faffe5e&amp;&suggest_apikey=598acc34-507d-4baa-b852-a5ec66b16691"
        type="text/javascript"></script>

<script>
    function updateMap() {
        if (typeof ymaps !== 'undefined') { // Убедитесь, что Yandex Maps API загружен

            ymaps.ready(init);

            function init() {
                // Свое поле поиска
                var suggestView1 = new ymaps.SuggestView('ATT_ADRESS');

                // Слушаем событие выбора элемента из списка
                suggestView1.events.add("select", function (e) {
                    // Проверяем, что событие содержит item и value
                    if (e && e.get('item') && e.get('item').value) {
                        // Получаем координаты выбранного элемента
                        var selectPlace = e.get('item').value;
                        ymaps.geocode(selectPlace, {
                            results: 1
                        }).then(function (res) {
                            // Проверяем, что результат содержит геообъекты
                            if (res.geoObjects.get(0)) {
                                // Выбираем первый результат геокодирования.
                                var firstGeoObject = res.geoObjects.get(0),
                                    // Координаты геообъекта.
                                    coords = firstGeoObject.geometry.getCoordinates(),
                                    // Область видимости геообъекта.
                                    bounds = firstGeoObject.properties.get('boundedBy');

                                // Добавляем первый найденный геообъект на карту.
                                // myMap.geoObjects.add(firstGeoObject);

                                // Масштабируем карту на область видимости геообъекта.
                                myMap.setBounds(bounds, {
                                    // Проверяем наличие тайлов на данном масштабе.
                                    checkZoomRange: true
                                });
                            } else {
                                console.error("Геообъект не найден.");
                            }
                        }).catch(function (err) {
                            console.error("Ошибка геокодирования:", err);
                        });
                    } else {
                        console.error("Неверный формат события или отсутствует значение.");
                    }
                });

                var inputAddress = document.getElementById("ATT_ADRESS"),
                    inputCoords = document.getElementById("ATT_COORDS"),
                    myPlacemark,
                    myMap = new ymaps.Map('map', {
                        center: [
                            <?if (empty($arResult['EDIT_VALUES']['ATT_COORDS'])) {?>
                            55.753994,
                            37.622093
                            <?}else{?>
                            <?= $arResult['EDIT_VALUES']['ATT_COORDS'] ?>
                            <?}?>
                        ],
                        zoom: 6,
                        controls: ['searchControl']
                    });
                <?if (empty($arResult['EDIT_VALUES']['ATT_COORDS'])) {?>
                ymaps.geocode('<?=$arResult['USER']['PERSONAL_CITY']?>', {
                    results: 1
                }).then(function (res) {
                    var firstGeoObject = res.geoObjects.get(0),
                        coords = firstGeoObject.geometry.getCoordinates(),
                        bounds = firstGeoObject.properties.get('boundedBy');
                    myMap.setBounds(bounds, {
                        checkZoomRange: true
                    });
                });
                <?}else{?>
                myMap.geoObjects
                    .add(new ymaps.Placemark([<?=$arResult['EDIT_VALUES']['ATT_COORDS']?>], {
                        balloonContent: '<?= $arResult['EDIT_VALUES']['ATT_ADRESS'] ?>'
                    }, {
                        preset: 'islands#icon',
                        iconColor: '#0095b6'
                    }));
                <?}?>



                myMap.events.add('click', function (e) {
                    var coords = e.get('coords');
                    if (myPlacemark) {
                        myPlacemark.geometry.setCoordinates(coords);
                    } else {
                        myPlacemark = createPlacemark(coords);
                        myMap.geoObjects.add(myPlacemark);
                        myPlacemark.events.add('dragend', function () {
                            getAddress(myPlacemark.geometry.getCoordinates());
                        });
                    }
                    getAddress(coords);
                });

                function createPlacemark(coords) {
                    return new ymaps.Placemark(coords, {
                        iconCaption: 'поиск...'
                    }, {
                        preset: 'islands#violetDotIconWithCaption',
                        draggable: true
                    });
                }

                function getAddress(coords) {
                    myPlacemark.properties.set('iconCaption', 'поиск...');
                    ymaps.geocode(coords).then(function (res) {
                        var firstGeoObject = res.geoObjects.get(0),
                            address = firstGeoObject.getAddressLine();
                        coords = firstGeoObject.geometry.getCoordinates();

                        myPlacemark.properties.set({
                            iconCaption: [
                                firstGeoObject.getLocalities().length ? firstGeoObject.getLocalities() : firstGeoObject.getAdministrativeAreas(),
                                firstGeoObject.getThoroughfare() || firstGeoObject.getPremise()
                            ].filter(Boolean).join(', '),
                            balloonContent: address
                        });

                        inputAddress.value = address;
                        inputCoords.value = coords;
                    });
                }
            }
        }
    }

</script>
