/**
 * Mouseover teaser for news/topstories/specials
 *
 * @created  Fri Jun 19 17:15:03 CEST 2009
 * @reviewer TODO
 */

var NewsTeaser = Class.create({
	canRotate : true,
	openedElement : null,
	teaserElements : [],
	parentElement : null,
	isMouseOvered : false,
	mouseOutTimeout : null,
	mouseOverTimeout : null,

	initialize : function(parentElement) {
		this.parentElement = parentElement;
	},

	mouseOut : function(event) {
		var self = this;

		Event.stop(event);

		this.mouseOutTimeout = setTimeout(function() {
			if (!this.isMouseOvered) {
				self.hideOpenedElement();
			}
		}, 30);
	},

	addTeaserElement : function(elementId, element) {
		this.teaserElements[elementId] = element;
	},

	hideOpenedElement : function() {
		if (this.openedElement != null) {
			this.teaserElements[this.openedElement].hideTeaser();
		}
	}
});

var NewsTeaserItem = Class.create({
	initialize : function(teaserContainer, elementId, mouseOverContent, mouseOutContent, newsUrl) {
		this.teaserContainer = teaserContainer;
		this.element = $(elementId);
		this.elementId = elementId;
		this.mouseOverContent = mouseOverContent;
		this.mouseOutContent = mouseOutContent;
		this.newsUrl = newsUrl;

		this.teaserContainer.addTeaserElement(elementId, this);
		Event.observe(this.element, 'mouseover', this.mouseOver.bindAsEventListener(this));
		Event.observe(this.element, 'mouseout', this.mouseOut.bindAsEventListener(this));
	},

	mouseOver : function(event) {
		var self = this;
		Event.stop(event);

		try {
			clearTimeout(this.teaserContainer.mouseOutTimeout);
			clearTimeout(this.teaserContainer.mouseOverTimeout);
		}catch (e) {}

		if (this.teaserContainer.openedElement == self.elementId) {
			return true;
		}

		this.teaserContainer.mouseOverTimeout = setTimeout(function() {
			self.teaserContainer.hideOpenedElement();

			self.element.innerHTML = self.mouseOverContent;
			self.teaserContainer.openedElement = self.elementId;
			self.teaserContainer.isMouseOvered = true;
		}, 10);
	},

	mouseOut : function(event) {
		var self = this;

		try {
			clearTimeout(this.teaserContainer.mouseOutTimeout);
			clearTimeout(this.teaserContainer.mouseOverTimeout);
		}catch (e) {}

		this.teaserContainer.mouseOutTimeout = setTimeout(function() {
			self.teaserContainer.isMouseOvered = false;
		}, 30);
	},

	hideTeaser : function() {
		this.element.innerHTML = this.mouseOutContent;
	}
});
