var lat;
var lon;
var name;

var restname = new Array();
var restcity = new Array();
var restlat = new Array();
var restlon = new Array();
var cityname = new Array();
var citylat = new Array();
var citylon = new Array();

var point = new YMaps.Style();
point.iconStyle = new YMaps.IconStyle();
point.iconStyle.offset = new YMaps.Point(-6, -6);
point.iconStyle.href = "/images/point.png";
point.iconStyle.size = new YMaps.Point(18, 18);
point.iconStyle.shadow = new YMaps.IconShadowStyle();

window.onload = function () {
	if (!document.getElementById("map")) {
		return 0;
	}

	var map = new YMaps.Map(document.getElementById("map"));
	map.addControl(new YMaps.SmallZoom(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(0, 10)));
	map.enableDblClickZoom();

	if (lat && lon) {

		map.setCenter(new YMaps.GeoPoint(lon, lat), 16);

		var mark = new YMaps.Placemark(new YMaps.GeoPoint(lon, lat), {style : point, hasBalloon : false, hasHint : true})
		mark.setHintContent(name);
		map.addOverlay(mark);
	}
	else {

		if (cityname.length) {
			reset(map);
		}
		else {
			document.getElementById("map").style.display = 'none';
		}
	}

}

function reset(map)
{
			map.setCenter(new YMaps.GeoPoint(83.0, 58.0), 3);

			for (var i = 0; i < cityname.length; i ++) {
				var mark = new YMaps.Placemark(new YMaps.GeoPoint(citylon[i], citylat[i]), {style : point, hasBalloon : false, hasHint : true});
				mark.setHintContent(cityname[i]);
				mark.name = i;

				YMaps.Events.observe(mark, mark.Events.Click, function (mark) {
					map.removeAllOverlays();
					var minlat = citylat[mark.name];
					var maxlat = citylat[mark.name];
					var minlon = citylon[mark.name];
					var maxlon = citylon[mark.name];
					for (var j = 0; j < restname.length; j ++) {
						if (restcity[j] == mark.name) {
							if (restlat[j] < minlat) minlat = restlat[j];
							if (restlat[j] > maxlat) maxlat = restlat[j];
							if (restlon[j] < minlon) minlon = restlon[j];
							if (restlon[j] > maxlon) maxlon = restlon[j];

							var rest = new YMaps.Placemark(new YMaps.GeoPoint(restlon[j], restlat[j]), {style : point, hasBalloon : false, hasHint : true});
							rest.setHintContent(restname[j]);
							YMaps.Events.observe(rest, rest.Events.Click, function (rest) {
								map.setCenter(rest.getGeoPoint(), 16)
							});
							map.addOverlay(rest);
						}
					}
					var bounds = new YMaps.GeoBounds(new YMaps.GeoPoint(minlon-0.001, minlat-0.001), new YMaps.GeoPoint(maxlon+0.001, maxlat+0.001));
					map.setBounds(bounds);

					map.addControl(new FullMapControl());

				});
				map.addOverlay(mark);

			}

}

function FullMapControl () {
    this.element = document.createElement("DIV");
    this.element.style.position = 'absolute';
    this.element.style.zIndex = '1000';
}

FullMapControl.prototype = {
    onAddToMap: function (map, position) {
        this.map = map;
        this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(10, 10));
        this._init();
    },

    onRemoveFromMap: function () {
        if (this.element.parentNode) {
            this.map.getContainer().removeChild(this.element);
        }
        this.map = null;
    },

   _init: function (map) {
        var fullMapDiv = document.createElement("div"),
            _this = this;

        fullMapDiv.className = "button";
		this.element.appendChild(fullMapDiv);
        fullMapDiv.appendChild(document.createTextNode("Все города"));

        fullMapDiv.onclick  = function () {
            _this.map.removeAllOverlays();
			reset(_this.map);
			_this.map.removeControl(_this);
        };

        this.position.apply(this.element);
        this.map.getContainer().appendChild(this.element);
    }

}

