var map = {};
map.Base = function (/*GLatLng*/ center) {
    map.Base.center = center;
    var gmap = new GMap2(document.getElementById('map'));
    gmap.setCenter(center, 12, G_NORMAL_MAP);
    gmap.addControl(new GLargeMapControl());
    gmap.addControl(new GMapTypeControl());
    gmap.disableDoubleClickZoom();
    gmap.enableContinuousZoom();

    var geocoder = new GClientGeocoder();

    var defaultIcon = new GIcon(G_DEFAULT_ICON);
    defaultIcon.image = "/i/icon/icon.png";
    defaultIcon.shadow = "/i/icon/shadow-icon.png";
    defaultIcon.iconSize = new GSize(25, 35);
    defaultIcon.shadowSize = new GSize(43, 35);
    defaultIcon.iconAnchor = new GPoint(13, 35);
    defaultIcon.infoWindowAnchor = new GPoint(13, 0);
    defaultIcon.imageMap = [0, 0, 24, 0, 24, 34, 0, 34];

    var defaultMarkerOptions = {
        customIconOffset: 2,
        icon: defaultIcon,
        bouncy: true
    };

    function addBoundsMargin(/*GLatLngBounds*/ bounds, /*Number*/ margin) {
        var sw = bounds.getSouthWest();
        var ne = bounds.getNorthEast();

        sw = new GLatLng(sw.lat() - margin, sw.lng() - margin);
        ne = new GLatLng(ne.lat() + margin, ne.lng() + margin);

        bounds.extend(sw);
        bounds.extend(ne);
    }

    map.Base = {
        setCenter: function() {
            gmap.setCenter(center, 12, G_NORMAL_MAP)
        },
        clear: function () {
            gmap.clearOverlays();
        },
        getGMap: function () {
            return gmap;
        },
        createMarker: function (/*GLatLng*/ latlng, /*bool*/ draggable, /*optional String*/iconSrc, /*optional String*/backSrc) {
            var m;
            if (draggable) {
                m = new GMarker(latlng, $.extend({}, defaultMarkerOptions, { draggable: draggable }));
            } else {
                var options = $.extend({}, defaultMarkerOptions, { customIconSrc: iconSrc || '/i/icon/default-custom.png' });
                if (backSrc) {
                    options.icon = $.extend({}, options.icon, { image: backSrc });
                }

                m = new IconedMarker(latlng, options);
            }
            gmap.addOverlay(m);
            return m;
        },
        removeMarker: function (/*GMarker*/ m) {
            gmap.removeOverlay(m);
        },
        zoomToMarker: function (/*GMarker*/ m) {
            // gmap.setCenter(new GLatLng(m.getLatLng().lat() + 0.001, m.getLatLng().lng()), 16);
            gmap.setCenter(m.getLatLng(), 16);
        },
        setBounds: function (/*GLatLngBounds*/ bounds) {
            addBoundsMargin(bounds, 0.01)
            gmap.setCenter(bounds.getCenter(), gmap.getBoundsZoomLevel(bounds));
        },
        search: function (/*String*/ address) {
            city_title = 'Самара';
            $('#city_menu>select>option').each(function () {
                // this.selected = ids[this.value];
                if (this.selected)
                {
                    city_title = this.innerHTML;
                }
            });

            geocoder.getLatLng(city_title + ', ' + address, function(point) {
                if (!point) {
                    alert("Введенный адрес не найден. Попробуйте изменить запрос.");
                    return;
                }

                gmap.setCenter(point, 16);

                map.Base.createMarker(point, false);
            });
        }
    }
};