/*
Этот скрипт содержит классы, предназначенные для создания
подсказок в стиле темы Wp-coda.

Автор: Стаценко Владимир
site: http://www.simplecoding.org
*/

/*
Класс подсказки
*/
function Popup(target, popup) {
	var showBegin = false;
	var visible = false;
	var nextAction = 'none';
	
	var target = target;
	var popup = popup;
	
	var curObj = this;
	
	this.show = function() {
		if (!visible && !showBegin) {
			//сбрасываем предыдущее значение nextAction
			nextAction = 'show';
			showBegin = true;
			//рассчитываем координаты всплывающей подсказки
			var pWidth = popup.innerWidth();
			var tHieght = target.innerHeight();
			var tWidth = target.innerWidth();
			var tOffset = target.offset();
			var popupLeft = tWidth/2 + tOffset.left - pWidth/2;
			var popupTop = tHieght/2 + tOffset.top;
			
			//показываем подсказку
			popup.removeClass("hide");
			popup.css("top", popupTop);
			popup.css("left", popupLeft);
			popup.css("opacity", 0);
			//запускаем анимацию (изменение прозрачности и положения)
			popup.animate({
				opacity: 1,
				top: '+=' + 10 + 'px'
			}, 600, 'swing', function() {
				//выполняется после завершения анимации
				visible = true;
				showBegin = false;
				if (nextAction == 'hide') {
					curObj.hide();
				}
			});
		}
		else {
			//если подсказка уже показана или начата анимация
			//сохраняем следующую операцию
			nextAction = 'show';
			return;
		}
	}
	
	this.hide = function() {
		if (!showBegin && visible) {
			//сбрасываем предыдущее значение nextAction
			nextAction = 'hide';
			showBegin = true;
			//убираем подсказку (изменяем прозрачность и смещаем)
			popup.animate({
				opacity: 0,
				top: '-=' + 10 + 'px'
			}, 400, 'swing', function() {
				//выполняется после завершения анимации
				visible = false;
				showBegin = false;
				popup.addClass("hide");
				if (nextAction == 'show') {
					curObj.show();
				}
			});
		}
		else {
			//если подсказка невидимая или идет анимация
			//сохраняем следующую операцию и выходим
			nextAction = 'hide';
			return;
		}
	}
	
	this.setEventHandlers = function() {
		target.bind('mouseenter', this.show)
			.bind('mouseleave', this.hide);
	}
}

/*
Контейнер для подсказок.
Выполняет установку обработчиков событий, возникающих при перемещении мышки.
*/
function PopupContainer() {
	var popups = [];
	
	this.addPopup = function(target, popup) {
		var newPopup = new Popup(target, popup);
		newPopup.setEventHandlers();
		popups.push(newPopup);
	}
}
