// JavaScript Document

YMaps.jQuery(function () {
	// Создание экземпляра карты и его привязка к созданному контейнеру
	var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
	// Установка для карты ее центра и масштаба
	map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
	map.enableScrollZoom();
	map.enableHotKeys();
	map.addControl(new YMaps.ToolBar());
	map.addControl(new YMaps.Zoom());
	map.addControl(new YMaps.ScaleLine());

	// Создает группу меток, обозначающих положение магазинов на карте
	var group = new YMaps.GeoObjectCollection();
	$('.stores li').each(function() {
		var geopoint = $(this).attr('id').split('c');
		group.add(createPlacemark(new YMaps.GeoPoint(geopoint[0].split('d').join('.'), geopoint[1].split('d').join('.')), $(this).children('h1').html(), $(this).children('p').html()));
	});

	// Добавляет группу меток на карту
	map.addOverlay(group);
	
	// Создает элемент управления "Путеводитель по магазинам"
	map.addControl(new StoreNavigator(group));
});

// Создает метку
function createPlacemark (geoPoint, name, description) {
	var placemark = new YMaps.Placemark(geoPoint, {style: "default#shopIcon"});
	placemark.name = name;
	placemark.description = description;

	return placemark;
}

// Управляющий элемент "Путеводитель по магазинам"
function StoreNavigator (stores) {
	// Обработчик добавления элемента на карту
	this.onAddToMap = function (map, position) {
		//this.container = $('.stores');
		this.map = map;
		//this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(10, 10));

		// CSS-свойства, определяющие внешний вид элемента
		/*this.container.css({
			position: 'absolute',
			zIndex: YMaps.ZIndex.CONTROL,
			background: '#fff',
			listStyle: 'none',
			padding: '10px',
			margin: 0
		});*/
		
		// Формирует список магазинов
		this._generateList();
		
		// Располагает элемент управления в верхнем правом углу карты
		//this.position.apply(this.container);
		
		// Добавляет элемент управления на карту
		//this.container.appendTo(this.map.getContainer());
	}
	// Обработчик удаления элемента с карты
	this.onRemoveFromMap = function () {
		/*if (this.container.parent()) {
			this.container.remove();
			this.container = null;
		}
		this.map = null;*/
	}
	
	// Пока "летим" игнорируем клики по ссылкам
	this.isFlying = 0;

	// Формирует выпадающий список магазинов
	this._generateList = function () {
		var _this = this;
		
		// Вызывает функцию-обработчик для каждого объекта
		stores.forEach(function (obj) {
			// Создает ссылку на объект
			//var li = $('<li><a href="#">' + obj.name + '</li>'),
			//	a = li.find('a');
			
			var id = obj.getGeoPoint().toString().split(',').join('c').split('.').join('d');
			var li = $('#' + id);
			
			// Создает обработчик щелчка мыши по ссылке
			li.bind('click', function () {
				if (!_this.isFlying) {
					_this.isFlying = 1;
					_this.map.panTo(obj.getGeoPoint(), {
						flying: 1,
						callback: function () {
							obj.openBalloon();
							_this.isFlying = 0;
						}
					});
				}
				return false;
			});
			
			// Создает слушатели событий открытия и закрытия балуна объекта
			YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
				li.addClass('active');
			});
			
			YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
				li.removeClass('active');
			});
			
			// Добавляет ссылку на объект в общий список
			//li.appendTo(_this.container);
		});
	}
}
