/**
 * @fileOverview Голосовалка для musicdepo.ru
 * @author PsychodelEKS
 * @requires jquery.js 1.3+
 */

$(function(){ initVoter(); });

function initVoter()
{
	/* Таблица с голосовалкой */
	var $voter_table = $('#track table');

	/* Таймер отображения голосовалки */
	var voter_timer = false;
	
	/* Задержка отображения голосовалки в мс */
	var voter_delay = 250;

	/* Переключает отображение голосовалки */
	function toggleVoter($object)
	{
		if($('a', $object).length)
		{
			/* Голосовалка отображается - прячем */			
			$object.addClass('zal_novote').children('a').fadeOut('fast', function(){ var $object = $(this).parent('td'); var votes = $('span.orange', $object).html(); $object.empty().unbind('mouseleave.voter').html(votes); });
			/*
			var votes = $('span.orange', $object).html();
			$object.addClass('zal_novote').children('a').fadeOut('fast', function(){ $object.empty().unbind('mouseleave.voter').html(votes); });
		    */
		}
		else
		{
			/* Голосовалка не отображается - показываем */
			var votes = $object.html();

			var html_string = '';

			/* Если есть класс zal_no_minus - минус не рендерим */
			if(!$object.is('.zal_no_minus'))
			    html_string += '<a href="javascript:void(0);" class="vote_minus"><img src="/includes/templates_new/images/track_minus.gif" width="20" height="19" alt="минус" /></a>';
			else
				html_string += '<a href="javascript:void(0);" class="vote_minus"><img src="/includes/templates_new/images/track_minus_disabled.gif" width="20" height="19" alt="минус" /></a>';

			html_string += '<span class="hover"><span class="orange">'+votes+'</span></span>';

			/* Если есть класс zal_no_plus - плюс не рендерим */
			if(!$object.is('.zal_no_plus'))
				html_string += '<a href="javascript:void(0);" class="vote_plus"><img src="/includes/templates_new/images/track_plus.gif" width="21" height="19" alt="плюс" /></a>';
			else
				html_string += '<a href="javascript:void(0);" class="vote_plus"><img src="/includes/templates_new/images/track_plus_disabled.gif" width="21" height="19" alt="плюс" /></a>';

			$object.removeClass('zal_novote')
				.html(html_string)
				.children('a')
				.hide()
				.fadeIn('normal');
			
			/* Вешаем обработчик, прячущий голосовалку */
			$object.bind('mouseleave.voter',
				function(event)
				{
					toggleVoter($(this));
				});
		}
	}
	
	/* Функция парсинга ответов-голосования сервера */
    function parseVoteResponse( $voter_cell, data)
	{
	    $voter_cell.stop(true, true); 
	    //console.log("Cell animated: "+$voter_cell.is(':animated'));
	    
	    /* Ответ (data): {votes:11,voted:'plus'} */
        
        
		/* Меняем количество голосов */
		//if($voter_cell.is('zal_novote'))
        
        if (data.voted == 'novote')
        {
        	$voter_cell.removeClass('zal_no_plus').removeClass('zal_no_minus');    
            jQuery.noticeAdd({ text: 'Вы превысли лимит голосований.<br />Вы можете проголосовать не более '+data.vote_max+' раз в день.', stayTime: 4000 });
        	toggleVoter($voter_cell);
        	return true;	
        }
        
        if($('a', $voter_cell).length == 0)
            $voter_cell.html(data.votes); // если голосовалка не отображается
		else
			$('span.orange', $voter_cell).html(data.votes) // если голосовалка отображается

		/* Название трека*/
		var song_name = $voter_cell.parents('tr:first').children('td.first').children('span:head').html();
		//var song_name = $link.parents('tr:first').children('td.first').children('span:head').html();

		/* Запрещаем плюсование */
		if(data.voted == 'plus')
		{
			$voter_cell.addClass('zal_no_plus').removeClass('zal_no_minus');
			jQuery.noticeAdd({ text: 'Плюс треку <strong>'+song_name+'</strong>.<br> Рейтинг '+data.votes+'.', stayTime: 4000 });
		}

		/* Запрещаем минусование */
		if(data.voted == 'minus')
		{
			$voter_cell.addClass('zal_no_minus').removeClass('zal_no_plus');
			jQuery.noticeAdd({ text: 'Минус треку <strong>'+song_name+'</strong>.<br> Рейтинг '+data.votes+'.', stayTime: 4000 });
		}
		toggleVoter($voter_cell);
    }


	/* ===================================================== */


	$voter_table.each(
		function()
		{
			/* Вешаем событие на наведение курсора на объект внутри таблицы с голосовалкой (делегируем, чтобы не перегружать клиента) */
			/* Все обработчики вешаем на события из пространства имен 'voter', чтобы не поломать дополнительные внешние */
			$(this).bind('mouseover.voter', {handler: this},
				function(event)
				{
					var $target = $(event.target);
					
					/* Если цель срабатывания события - ячейка с классом 'zal' и предыдущая цель не является дочерним обхъектом этой ячейки - переключаем отображение голосовалки */
					if($target.is('td.zal:not(.zal_disabled)') && !$(event.relatedTarget).parents('td.zal').length)
					{
					    clearTimeout(voter_timer);
						voter_timer = setTimeout( function(){ toggleVoter($target); }, voter_delay);
					}
					else
						clearTimeout(voter_timer);
				});

			$(this).bind('click.voter',
				function(event)
				{
					/* Если клик по элементу у которого родитель - ссылка, найдем ее */
					var $link = $(event.target).parent('a');
					var $voter_cell = $link.parent('td.zal');

					/* Если это ссылка голосовалки */
					if(($link.is('.vote_minus') && !$voter_cell.is('.zal_no_minus')) || ($link.is('.vote_plus') && !$voter_cell.is('.zal_no_plus')))
					{
						/* Название трека из соответствующей ячейки */
						var song_name = $link.parents('tr:first').children('td.first').children('span:head').html();

						/* span с текущими пользовательскими голосами */
						//var $votes_span = $('span.orange', $link.parent('td'));

						/* Текущее количество голосов */
						//var votes = +$votes_span.html();
						
						/* Новое количество голосов, потом либо увеличим его, либо уменьшим */
						//var new_votes = votes;

						/* Если клик по ссылке-минусу (картинке в ней) */
						//$voter_cell.empty().unbind('mouseleave.voter');
						
						if($link.is('.vote_minus'))
						{
							//new_votes -= 1;
                            $voter_cell.addClass('zal_no_minus').removeClass('zal_no_plus');
                            
							//window.alert("AJAX на:\n"+"vote.php?vote=minus&trackid="+$voter_cell.attr('trackid'));
							/* AJAX запрос на скрипт-голосовалку */
							//$.getJSON("vote.php", {vote: 'minus', trackid: $voter_cell.attr('trackid')}, function(data){ parseVoteResponse($voter_cell, data); });
							$.getJSON("/pajax.php", {action: 'nvote', vote: 'minus', trackid: $voter_cell.attr('trackid')}, function(data){ parseVoteResponse($voter_cell, data); });
							
							/* Показываем нотиф */
							//jQuery.noticeAdd({ text: 'Минус треку <strong>'+song_name+'</strong>.<br> Рейтинг '+new_votes+'.', stayTime: 4000 });
	                	}
						
						/* Если клик по ссылке-плюсу (картинке в ней) */
						if($link.is('.vote_plus'))
						{
							//new_votes += 1;
							$voter_cell.addClass('zal_no_plus').removeClass('zal_no_minus');
							
							//window.alert("AJAX на:\n"+"vote.php?vote=plus&trackid="+$voter_cell.attr('trackid'));
							/* AJAX запрос на скрипт-голосовалку */
							//$.getJSON("vote.php", {vote: 'plus', trackid: $voter_cell.attr('trackid')}, function(data){ parseVoteResponse($voter_cell, data); });
							$.getJSON("/pajax.php", {action: 'nvote', vote: 'plus', trackid: $voter_cell.attr('trackid')}, function(data){ parseVoteResponse($voter_cell, data); });

							/* Показываем нотиф */
							//jQuery.noticeAdd({ text: 'Плюс треку <strong>'+song_name+'</strong>.<br> Рейтинг '+new_votes+'.', stayTime: 4000 });
	                	}
	                	
						/* Прописываем новое количество голосов */
						//$votes_span.html(new_votes);
						
						/* Прячем голосовалку */
						toggleVoter($voter_cell);
				 	}
				});
		});
}




$(function(){ initVoterSmall(); });

function initVoterSmall()
{
    $(".rate_pl_akt").click(function (e) {
        var id = $(this).attr('idtrack');
        if ( $(this).is('.rate_pl_akt') )
            $.getJSON("/pajax.php", {action: 'nvote', vote: 'plus', trackid: id}, function(data){ VoteResponse(id, data); });
    });
    
    $(".rate_min_akt").click(function (e) {
        var id = $(this).attr('idtrack');
        if ( $(this).is('.rate_min_akt') )
            $.getJSON("/pajax.php", {action: 'nvote', vote: 'minus', trackid: id}, function(data){ VoteResponse(id, data); });
    });
    
    $(".another_rate_pl_akt").click(function (e) {
        var id = $(this).attr('id_el');
	 var module = $(this).attr('module');
        if ( $(this).is('.another_rate_pl_akt') )
            $.getJSON("/pajax.php", {action: 'nvote', vote: 'plus', module: module, mid: id}, function(data){ VoteResponse(id, data); });    
    });
    
    $(".another_rate_min_akt").click(function (e) {
        var id = $(this).attr('id_el');
		var module = $(this).attr('module');
        if ( $(this).is('.another_rate_min_akt') )
            $.getJSON("/pajax.php", {action: 'nvote', vote: 'minus', module: module, mid: id}, function(data){ VoteResponse(id, data); });
    });
    
    function VoteResponse( id, data)
	 {
	    /* Ответ (data): {votes:11,voted:'plus', votetx:'комментариев'} */

		/* Меняем количество голосов */
      
        if (data.voted == 'novote')
        {
            jQuery.noticeAdd({ text: 'Вы превысли лимит голосований.<br />Вы можете проголосовать не более '+data.vote_max+' раз в день.', stayTime: 4000 });
        	return true;	
        }

		/* Название трека*/
		//var song_name = '';
		//for (var i in $("hd"+id))
		//    song_name += i;
		//alert(song_name+' '+$("hd"+id).text);    
		var el_name = $("#hd"+id).text();
		
		/* Запрещаем плюсование */
		if(data.voted == 'plus')
		{
			var lable = '';
			if (null == data.module || '' == data.module || !data.module || 'undefined' == data.module)
			{
				$("#p"+id).addClass('rate_pl').removeClass('rate_pl_akt');
				$("#m"+id).addClass('rate_min_akt').removeClass('rate_min');
				lable = 'Плюс треку';
				data.module = '';
			}
			else if ('news' == data.module || 'unews' == data.module)
				lable = 'Плюс новости';
			
			if (data.module)
			{
				$("#p"+data.module+id).addClass('another_rate_pl').removeClass('another_rate_pl_akt');
				$("#m"+data.module+id).addClass('another_rate_min_akt').removeClass('another_rate_min');	
			}
			jQuery.noticeAdd({ text: lable+' <strong>'+el_name+'</strong>.<br> Рейтинг '+data.votes+'.', stayTime: 4000 });
		    $("#vt"+id).html( data.votes + "&nbsp;" + data.votetx );
		}

		/* Запрещаем минусование */
		if(data.voted == 'minus')
		{
			var lable = '';
			if (null == data.module || '' == data.module || !data.module || 'undefined' == data.module)
			{
				$("#p"+id).addClass('rate_pl_akt').removeClass('rate_pl');
				$("#m"+id).addClass('rate_min').removeClass('rate_min_akt');
				lable = 'Минус треку';
				data.module = '';
			}
			else if ('news' == data.module || 'unews' == data.module)
				lable = 'Минус новости';
			
			if (data.module)
			{
				$("#p"+data.module+id).addClass('another_rate_pl_akt').removeClass('another_rate_pl');
				$("#m"+data.module+id).addClass('another_rate_min').removeClass('another_rate_min_akt');	
			}
			jQuery.noticeAdd({ text: lable+' <strong>'+el_name+'</strong>.<br> Рейтинг '+data.votes+'.', stayTime: 4000 });
		    $("#vt"+id).html( data.votes + "&nbsp;" + data.votetx );
		}
    }
}