/*
 * Переключатель панелей для Musicdepo типа аккордион
 * by PsychodelEKS [psychodeleks@gmail.com]
 */

$(function(){ initAccordion(); });

function initAccordion()
{
	var $player = $('#player');
	var $next_btn = $('#next', $player);
	var $prev_btn = $('#prev', $player);

	var narrow = 0;
	var wide = 0;
	var animation_running = 0;

	/* Переключение на следующий месяц */
	function playerNext()
	{
		var $active = $('ul li.active', $player);
		var $prev = $active.prev('li');
		var $next = $active.next('li');
		var $next_next = $next.next('li');

		if($next.length)
		{
			/*
			$active.removeClass('active');
			$next.addClass('active');
			*/

			unbindEvents();
			
			$('a.player_button,span.name', $next).hide();
            $('a.player_button,span.name', $active).fadeOut('fast');
            
			$next.width(narrow).addClass('active').animate({width:wide}, 300, function(){ var $next = $(this); $next.width('').css('display', ''); $('a.player_button,span.name', $next).fadeIn('fast').css('display', 'block'); animation_running += 1; bindEvents(); });
			$active.animate({width:narrow}, 300, function(){ var $active = $(this); $active.removeClass('active').width('').css('display', ''); $('a.player_button,span.name', $active).css('display', ''); animation_running += 1; bindEvents(); });

			$next_next.show();
			$prev.hide();
		}
	}
	
	/* Переключение на предыдущий */
	function playerPrev()
	{
		var $active = $('ul li.active', $player);
		var $prev = $active.prev('li');
		var $prev_prev = $prev.prev('li');
		var $next = $active.next('li');

		if($prev.length)
		{
			/*
			$active.removeClass('active');
			$prev.addClass('active');
			*/

            unbindEvents();

			$('a.player_button,span.name', $prev).hide();
            $('a.player_button,span.name', $active).fadeOut('fast');

			$prev.width(narrow).addClass('active').animate({width:wide}, 300, function(){ var $prev = $(this); $prev.width('').css('display', ''); $('a.player_button,span.name', $prev).fadeIn('fast').css('display', 'block'); animation_running += 1; bindEvents(); });
			$active.animate({width:narrow}, 300, function(){ var $active = $(this); $active.removeClass('active').width('').css('display', ''); $('a.player_button,span.name', $active).css('display', ''); animation_running += 1; bindEvents(); });

			$prev_prev.show();
			$next.hide();
			
			rebindEvents();
		}
	}
	
	/* Перебиндит обработчики кликов на кнопки */
	function rebindEvents()
	{
        if(narrow == 0 || wide == 0)
        {
        	var $active = $('ul li.active', $player);
			var $prev = $active.prev('li');
			var $next = $active.next('li');

            narrow = $next.length ? $next.width() : $prev.width();
            wide = $active.width();
		}

		unbindEvents();
		bindEvents();
	}
	
	/* Биндит обработчики нажатий на кнопки */
	function bindEvents()
	{
		if(animation_running == 2)
		{
			var $active = $('ul li.active', $player);
			var $prev = $active.prev('li');
			var $next = $active.next('li');

			$prev.bind('click.player', function(){ playerPrev(); });
			$next.bind('click.player', function(){ playerNext(); });
			$next_btn.bind('click.player', function(){ playerNext(); });
			$prev_btn.bind('click.player', function(){ playerPrev(); });

            animation_running = 0;
		}
	}
	
	/* Анбиндит обработчики нажатий */
	function unbindEvents()
	{
		$('ul li', $player).unbind('click.player');
		$next_btn.unbind('click.player');
		$prev_btn.unbind('click.player');
	}
	
	/* Плей/пауза кнопки в плеере */
	function playerPlay(button)
	{
		var $button = $(button);

		$('ul li:not(.active) a.player_button', $player).removeClass('active');

		if($button.is('.active'))
		    $button.removeClass('active');
		else
			$button.addClass('active');
	}
	
	/* *********************************************************** */

	/* Биндим обработчик нажатия кнопки плей */
	$('a.player_button', $player).bind('click', function(){ playerPlay(this); });
	
	animation_running = 2;
	rebindEvents();
}
