var ThemeOfDay = function(container, config) {

	this._container = $(container);

	this._config = $.extend({
		links: 'li.ui-tabs-nav-item',
		timeout: 8000
	}, config || {});

	this._links = this._container.find(this._config.links);
	this._current_link = 0;
	this._rotationTimer = null;

	this._tabs = this._container.find('.ui-tabs-panel')

	this._initEvents();

	this._start();

}


ThemeOfDay.prototype = {

	_container: null,
	_config: null,
	_links: [],
	_tabs: [],

	_rotationTimer: null,
	_current_link: 0,

	_initEvents: function() {
		var self = this;

		this._tabs.mouseover(function(){
			self._suspend();
		});

		this._tabs.mouseout(function(){
			self._start();
		});

		this._links.find('a').mouseover(function(){
			self._suspend();
			self._toggleLink($(this).parent());
		});


		this._links.find('a').mouseout(function(){
			self._start();
		});
	},

	_start: function() {

		if (this._rotationTimer) {
			return;
		}

		var self = this;

		this._rotationTimer = setInterval(function() {
			self._toggle();
		}, this._config.timeout);

	},

	_suspend: function() {

		if (!this._animationActive()) {
			return;
		}

		clearInterval(this._rotationTimer);
		this._rotationTimer = null;
		
	},

	_toggle: function() {
		this._links.removeClass('ui-state-active').removeClass('ui-tabs-selected');

		var currentTab = this._getCurrentTab();

		var self = this;
		
		currentTab.fadeOut('slow', function() {

			if (!self._animationActive()) {
				return;
			}

			currentTab.addClass('ui-tabs-hide');
			self._nextLink().addClass('ui-state-active').addClass('ui-tabs-selected');
			self._getCurrentTab().fadeIn('fast').removeClass('ui-tabs-hide');
		});
		
	},

	_animationActive: function() {
		return this._rotationTimer;
	},

	_toggleLink: function(link) {

		this._hideAllTabs();
		this._getTabForlink(link).show().removeClass('ui-tabs-hide');
		this._links.removeClass('ui-state-active').removeClass('ui-tabs-selected');
		
		link.addClass('ui-state-active').addClass('ui-tabs-selected');

		this._current_link = this._getNumberOfLink(link);

	},

	_getNumberOfLink: function(link) {
		for (var i = 0; i < this._links.length; i++) {
			if (this._links[i] == link[0]) {
				return i;
			}
		}
		return 0;
	},

	_getCurrentLink: function() {
		return $(this._links[this._current_link]);
	},

	_nextLink: function() {
		++this._current_link;
		this._current_link = this._current_link % this._links.length;

		return this._getCurrentLink();
	},

	_hideAllTabs: function() {
		this._tabs.hide();
	},

	_getCurrentTab: function() {
		return this._getTabForlink(this._getCurrentLink());
	},

	_getTabForlink: function(link) {
		return this._container.find('#' + link.find('a').attr('rel'));
	}

}
