var map, geoManager;

function createMap()
{
    map = new YMaps.Map($("#YMapsID")[0]),
    geoManager = new GeocoderManager(map);

    map.setCenter(new YMaps.GeoPoint(34.36, 61.80), 7);

    var typeControl = new YMaps.TypeControl();
    typeControl.removeType(YMaps.MapType.MAP);
    typeControl.removeType(YMaps.MapType.SATELLITE);
    typeControl.removeType(YMaps.MapType.HYBRID);
    var myMap = new YMaps.MapType(YMaps.MapType.MAP.getLayers(), 'Карта');
    //  var myHyb = new YMaps.MapType(YMaps.MapType.HYBRID.getLayers(), 'Спутник', {minZoom:9,maxZoom:14});
    typeControl.addType(myMap);
    //  typeControl.addType(myHyb);
    map.setType(myMap);
    map.setMinZoom(6);

    // настраиваем расположение навигации на карте
    //  map.addControl(typeControl, new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(2, 5)));
    map.addControl(new YMaps.Zoom({noTips:true}), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(5, 5)));
    map.addControl(new YMaps.ToolBar(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(5, 5)));
    map.addControl(new YMaps.ScaleLine(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(50, 15)));

    map.addControl(new YMaps.MiniMap(3));
    //  map.addControl(new YMaps.SmallZoom());
    //  map.addControl(new YMaps.ToolBar());
    //  map.addControl(new YMaps.TypeControl());
    //  map.addControl(new YMaps.SearchControl());

    map.enableRightButtonMagnifier();
    map.enableScrollZoom();


            YMaps.jQuery("#YMapsLinkInput").attr("value", window.location.href );

            // Получаем параметры из URL'а
            var params = {
                geopoint : getParam("geopoint"),          // Название насёлнного пункта
                ll : getParam("ll"),                      // Центр карты
                zoom : getParam("zm"),                    // Масштаб
                layers : getParam("layers")               // Слои
            };

            if (params.geopoint) {
//            alert( rawurldecode(params.geopoint));
                 if (params.geopoint[0] == '%' )   {
                      $('#SearchKeywords').attr('value', rawurldecode(params.geopoint));
                 } else {
                      $('#SearchKeywords').attr('value', params.geopoint);
                 }
                 $('#SearchKeywordsButton').click();
                 $("body").scrollTop(240);
            }

            var layersArray = new Array();
            layersArray = params.layers.split(',');

            // Если в урле заданы необходимые параметры центрируем карту в нужном месте
            if (params.ll && params.zoom) {
                map.setCenter(new YMaps.GeoPoint.fromString(params.ll), params.zoom);
            }

            if (params.layers) {
                for (var i=0;i<layersArray.length;i++)
                   {
                     var theLayer = '#layer_' + layersArray[i];
//                     map.addOverlay(layer+layersArray[i]);
                     YMaps.jQuery(theLayer).attr("checked", 1);
                   }
            }
/*
            // Динамически формируем URL
            YMaps.Events.observe(map, [map.Events.BoundsChange, map.Events.Update],  function () {

                YMaps.jQuery("#YMapsLinkInput")
                    .attr("value", "http://ptzmap.box.interso.ru/?ll=" + map.getCenter().toString() +
                                  "&zm=" + map.getZoom() +
                                  "&layers=" + YMaps.jQuery("#layersActiveList").text() +
                                  "&bln=" + YMaps.jQuery("#baloonOpenedId").text()
                    );

                //URL для ссылки "версия для печати"
                YMaps.jQuery("#YMapsLinkPrint")
                    .attr("href", "http://ptzmap.box.interso.ru/map/?ll=" + map.getCenter().toString() +
                                  "&zm=" + map.getZoom() +
                                  "&layers=" + YMaps.jQuery("#layersActiveList").text() +
                                  "&bln=" + YMaps.jQuery("#baloonOpenedId").text()
                    );

            });
*/
            // Получение параметра из URL'а
            function getParam (name, location) {
                location = location || window.location.search;
                var res = location.match(new RegExp('[?&]' + name + '=([^&]*)', 'i'));
                return (res && res[1] ? res[1] : '');
            }



    YMaps.Events.observe(map, map.Events.BalloonOpen, function (map) {
        balloon = map.getBalloon();
//        $('#baloonOpenedId').text($('.objId').text());
        //map.update();
        $('.map_flash_container:visible').each(function() {
            var swf = $(this).attr('swf');
            if (swf)
            {
                $(this).attr('id', $(this).attr('flashid'));
                var so = new SWFObject(swf, $(this).attr('id'), "250", "150", "9.0.0", "#CCCCCC");
                so.addParam("quality", "high");
                so.write($(this).attr('id'));
                balloon.update();
            }
        });
    });

/*
    YMaps.Events.observe(map, map.Events.BalloonClose, function (map) {
        $('#baloonOpenedId').text('');
    });
*/

}

/*
 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);
             map.addOverlay(geoResult);
             map.setBounds(geoResult.getBounds());
         }else {
             alert("Ничего не найдено")
         }
     });
 }
 */

function GeocoderManager (map)
{
    var _this = this;

     $('#SearchMap').bind('keyup', function (e) {
         if (e.keyCode == 13) {

             if ($('#SearchKeywords').attr('value') != ''){
                  $('#SearchMapResults').html('<img src="/img/loading.gif" width="16" height="16" alt="" class="loading">')
                  _this.search();
             } else {
                  alert ("Поиск невозможен! Введите строку поиска.")
             }

         }
     });

    $('#SearchKeywordsButton').bind('click', function () {
        if ($('#SearchKeywords').attr('value') != ''){
            $('#SearchMapResults').html('<img src="/img/loading.gif" width="16" height="16" alt="" class="loading">')
            _this.search();
        } else {
            alert ("Поиск невозможен! Введите строку поиска.")
        }
    });

    this.search = function () {
        var searchString = "Россия, республика Карелия, " + $('#SearchKeywords').attr('value');

        //        alert (searchString);

        geocoder = new YMaps.Geocoder(searchString);
        YMaps.Events.observe(geocoder, geocoder.Events.Load, _this.geocodeLoad, this);
    };

    this.geocodeLoad = function (geo) {
        var searchMapResults = $('#SearchMapResults').html('');

        if (geo.suggest) {
            $('<div class="suggest">Быть может, Вы искали «<a id="geocoder-suggest" href="#">' + geo.suggest + '</a>»</div>')
            .find('#wizard-geocoder-suggest')
            .bind('click', function () {
                $('#SearchMap').attr('value', $(this).text());
                _this.search();
                return false;
            }).end()
            .appendTo(searchMapResults);
        }

        if (geo.length()) {

            var look_for_dummy = geo.get(0);
            if ( look_for_dummy.text == "Россия, республика Карелия" )
               {
                 searchMapResults.html('<span class="error">Искомая комбинация на карте Карелии не встречается</span>');
//                 startOverlaySearch();
               }
             else
               {

            searchMapResults
            .append('<ul id="SearchMapResultsList"><h5>Результаты поиска:</h5></ul>')

//            .append($('<a class="b-pseudo-link clear2" href="#">Очистить результаты поиска</a>')

            .append($('<button type="button" class="clear2">Очистить результаты</button>')
            .bind('click', function () {
                $('#SearchMapResults').html('');
                return false;
            }));

            for (var i = 0, l = geo.length(); i < l; i++) {

                var objjj = geo.get(i);
                if (objjj.precision != 'other')
                {
                    objjj.text = objjj.text.replace(/^Россия, республика Карелия, (.*)$/, "$1");
                }
                $("#SearchMapResultsList").append(this.createLi(objjj));


/*
                if (geo.length() == 1) {
                    $('#SearchMapResultsList li').click();
                }
*/
                $('#SearchMapResultsList li:first').click();

            }


                }


            }else {
                searchMapResults.html('<span class="error">Искомая комбинация на карте Карелии не встречается</span>');
//                startOverlaySearch();
            }
        }

        this.createLi = function (obj) {
            return $('<li><span class="maplink">' + obj.text + '</span></li>')
            .bind('click', function () {
                $('#SearchMapResultsList li').removeClass('current');
                $(this).addClass('current');

                map.setBounds(obj.getBounds());
                map.removeAllOverlays();
                map.addOverlay(obj);
                return false;
            })
        }
    }

