// Функция для создания оверлея и ссылки на него
function createOverlay (station)  {
	var link = YMaps.jQuery("<a href=\"#\">" + station.name + "</a>"), // Создание ссылки
		newOverlay = new SimpleOverlay(station.point, station.name, link); // Создание оверлея

	// Установка обработчика кликов по ссылке
	link.bind("click", function () {
			if (link.hasClass("active")) return;
			newOverlay.openBalloon();
			return false;
		})
		.appendTo(YMaps.jQuery("#links"))

	return newOverlay;
}
// Класс пользовательского оверлея, реализующего класс YMaps.IOverlay
function SimpleOverlay (geoPoint, name, link) {
	var map, _this = this, offset = new YMaps.Point(-10, -29);

	// Вызывается при добавления оверлея на карту 
	this.onAddToMap = function (pMap, parentContainer) {
		map = pMap;
		getElement().appendTo(parentContainer);
		this.onMapUpdate();
	};

	// Вызывается при удаление оверлея с карты
	this.onRemoveFromMap = function () {
		if (getElement().parent()) {
			getElement().remove();
		}
	};

	// Вызывается при обновлении карты
	this.onMapUpdate = function () {
		// Смена позиции оверлея
		var position = map.converter.coordinatesToMapPixels(geoPoint).moveBy(offset);
		getElement().css({
			left : position.x,
			top :  position.y
		})
	};

	// Метод для открытия балуна
	this.openBalloon = function () {
		// Делаем ссылку, связанную с оверлеем, активной
		link.addClass("active");

		// Скрываем оверлей
		//getElement().css("display", "none");

		// Открываем балун и по закрытию балуна возвраем в первоначальный вид
		map.openBalloon(geoPoint, name, {onClose: function () {
			link.removeClass("active");
			//getElement().css("display", "");
		}});
	};

	// Получить ссылку на DOM-ноду оверлея
	function getElement () {
		var element = YMaps.jQuery("<div class=\"overlay\"/>");

		// Устанавливаем z-index как у метки
		element.css("z-index", YMaps.ZIndex.Overlay);

		// При щелчке на оверлеи открывается балун
		element.bind("click", function () {
			_this.openBalloon();
		});
				
		function st(){
			map.closeBalloon()
		}

		// После первого вызова метода, он переопределяется, 
		// чтобы дважды не создавать DOM-ноду
		return (getElement = function () {return element})();
	}
}
