/**
 * @projectDescription
 * Переключалка табов.
 * @author Vlad Yakovlev (scorpix@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @version 0.1 (19.11.2008)
 * @requires jQuery 1.2
 * @requires jTweener 0.2
 */
$(function() {
	var blocks = {
		filters: $('#content .filters li'),
		sectionsBlock: $('#content .sections'),
		sections: $('#content .sections .section'),
		fader: $('#content .sections .section_fader')
	};

	/**
	 * @type {String}
	 */
	var curType;

	var isAnimate = false;

	var prefix = 'type_';

	blocks.filters.click(onChangeSection);

	init();

	function init() {
		curType = getType(blocks.filters.filter('.selected').attr('class'));
		blocks.sections.filter('.' + prefix + curType).removeClass('jhidden');
	}

	/**
	 * Событие при выборе секции.
	 * @param {Event} event Событие мыши
	 */
	function onChangeSection(event) {
		if (isAnimate || !$(event.target).hasClass('pseudo_link')) {
			return;
		}

		/** @type {String} */
		var type = getType($(this).attr('class'));

		if (type == curType) {
			return;
		}

		isAnimate = true;

		blocks.filters.filter('.selected').removeClass('selected');
		blocks.filters.filter('.' + prefix + type).addClass('selected');
		setFaderHeight();

		blocks.fader.removeClass('hidden');

		blocks.fader.css('opacity', 0).removeClass('hidden');
		jTweener.addTween(blocks.fader, {
			opacity: 1,
			time: 0.5,
			onComplete: function() {
				blocks.sections.filter('.' + prefix + curType).addClass('jhidden');
				curType = type;

				/** @type {jQuery} */
				var curSection = blocks.sections.filter('.' + prefix + curType);

				curSection.css('visibility', 'hidden').removeClass('jhidden');
				setFaderHeight();
				curSection.css('visibility', '');

				jTweener.addTween(blocks.fader, {
					opacity: 0,
					time: 0.5,
					onComplete: function() {
						blocks.fader.addClass('hidden').css('opacity', '');

						isAnimate = false;
					}
				});
			}
		});
	}

	/**
	 * Возвращает тип секции по html классу.
	 * @param {String} classesPlain Атрибут <code>class</code>.
	 * @return {String} Тип секции.
	 */
	function getType(classesPlain) {
		/** @type {Array} */
		var classes = classesPlain.split(' ');
		var result = '';

		for (var i = 0; i < classes.length; i++) {
			if (prefix == classes[i].substr(0, prefix.length)) {
				result = classes[i].substr(prefix.length);
			}
		}

		return result;
	}

	function setFaderHeight() {
		if (!($.browser.msie && 6 >= parseInt($.browser.version))) {
			return;
		}

		blocks.fader.css('height', blocks.sectionsBlock.outerHeight());
	}
});
