﻿$(function(){
	var commentsList = $('.news-comments');
	
	// Боримся с live-событиями
	if( commentsList.length == 0 )
		commentsList = $('.last-comments');
	
	var firstLevelComments = $('> li', commentsList),
		commentForm = $('#newsCommentsForm'),
		commentFormParent = $('#f_parent', commentForm),
		commentFormNewsId = $('#f_news_id', commentForm),
		commentFormText = $('#f_comment', commentForm),
		hiddenCommentLinks = $('.comment-hidden a', commentsList),
		showCommentLinks = $('.show', commentsList),
		hideCommentLinks = $('.hide', commentsList),
		editCommentLinks = $('.edit', commentsList),
		deleteCommentLinks = $('.delete', commentsList),
		commentsHeader = $('#comments'),
		commentsHeaderCounter = $('em', commentsHeader);
	
	// Изначально все беседы скрыты
	$('> ul:not(.my-comments)', firstLevelComments).hide();
	
	// Показываем беседы по клику на соответствующую ссылку
	$('.show-thread', firstLevelComments).click(function(){
		var thisLink = $(this),
			thisThread = thisLink.parents('li').eq(0).children('ul');
		
		if( thisThread.css('display') == 'none' ){
			thisThread.show();
			thisLink.text('Скрыть беседу');
		}
		else{
			thisThread.hide();
			thisLink.text('Посмотреть беседу');
		}
		
		return false;
	});
	
	// Изначально форма комментариев скрыта
	commentForm.hide();
	
	// Toggle формы комментариев
	$('.left-news-comment a').click(function(){
		var thisLink = $(this),
			commentFormHere = $(this).parent().next('#newsCommentsForm').length
		
		if( commentFormHere )
			commentForm.toggle();
		else
			commentForm.insertAfter( $(this).parent() ).show();
		
		commentFormParent.val(0);
		
		thisLink.parent().hide();
		
		return false;
	});
	
	// Ответ на комментарий
	$('a.answer', commentsList).live('click', function( eventData ){
		if(eventData.button == 0){
			var thisLink = $(this);
			
			commentForm.insertAfter( $(this).parent().parent() ).show();
			commentFormParent.val( thisLink.attr('id').substr(6) );
			
			$('.left-news-comment').show();
			
			return false;
		}
	});
	
	// Показываем беседу, которая содержит переданный в ссылке комментарий
	if(location.hash){
		var firstLevelComment = firstLevelComments.filter(
			function(position){
				return $(this).find(location.hash).length;
			}
		);
		$('a.show-thread', firstLevelComment).click();
	}
	
	// Ajax-отправка комментария
	commentForm.submit(function(){
		$.post(
			'/news/addComment.html',
			{
				news_id: commentFormNewsId.val(),
				comment: commentFormText.val(),
				parent: commentFormParent.val(),
				level: commentForm.parents('ul').length + 1
			},
			function( response )
			{
				var newComment = $(response);
				
				switch( parseInt(response) ){
					case 0:
						commentFormText.val('');
					break;
					case 1:
						alert('Слишком быстро! Подождите 33,5 секунды');
					break;
					case 2:
						alert('Комментарий, на который вы отвечаете, был удалён');
						location.reload();
					break;
					default:
						if( commentFormParent.val() == '0' ){
							commentsList.append( newComment );
							$('.zero-comments').hide();
						}
						else{
							if( commentForm.next('ul').length ){
								commentForm.next().children('.last').removeClass('last');
								commentForm.next().append( newComment ).show();
							}
							else{
								commentForm.after( '<ul>' + response + '</ul>' );
							}
						}
						
						commentFormText.val('');
						
						if( commentFormParent.val() != '0' ){
							commentForm.hide();
						}
						commentFormParent.val(0);
						
						location.hash = newComment.attr('id');
						
						updateCommentsCounter();
					break;
				}
			}
		);
		return false;
	});
	
	// Toggle скрытого комментария
	hiddenCommentLinks.live('click', function(eventData){
		if(!eventData.originalEvent || eventData.button == 0){
			$(this).parent().next('.speech').toggle();
			return false;
		}
	});
	
	// Показ комментария
	showCommentLinks.live('click', function(eventData){
		if(eventData.button == 0){
			var thisLink = $(this),
				thisListItem = thisLink.parents('li:first');
			
			$.post(
				thisLink.attr('href') + '&live=1',
				{},
				function(){
					$('.comment-hidden', thisListItem).eq(0).remove();
					$('.speech', thisListItem).eq(0).show();
					
					thisLink.hide();
					thisLink.prevAll('.hide').show();
					
					$('.answer', thisListItem).show();
				}
			);
			
			return false;
		}
	});
	
	// Скрытие комментария
	hideCommentLinks.live('click', function(eventData){
		if(eventData.button == 0){
			var thisLink = $(this),
				thisListItem = thisLink.parents('li:first');
			
			$.post(
				thisLink.attr('href') + '&live=1',
				{},
				function(){
					$('.speech', thisListItem).eq(0).hide().before('<p class="comment-hidden"><a href="#">Текст комментария скрыт</a></p>');
					
					thisLink.hide();
					thisLink.nextAll('.show').show();
					
					$('.answer', thisListItem).hide();
					commentForm.hide();
				}
			);
			
			return false;
		}
	});
	
	// Удаление комментария
	deleteCommentLinks.live('click', function(eventData){
		if(eventData.button == 0){
			var thisLink = $(this),
				thisListItem = thisLink.parents('li:first'),
				thisList = thisListItem.parent();
			
			if( confirm('Удалить ветку комментариев') ){
				$.post(
					thisLink.attr('href') + '&live=1',
					{},
					function(){
						thisListItem.remove();
						
						updateCommentsCounter(1);
					}
				);
			}
			return false;
		}
	});
	
	function updateCommentsCounter( _decrement ){
		var counter = commentsHeaderCounter.text();
		counter = parseInt(counter.substring(1, counter.length - 1));
		
		if( typeof _decrement == 'undefined' )
			counter++;
		else
			counter--;
		
		if( counter < 0 )
			counter = 0;
		
		commentsHeaderCounter.text( '(' + counter + ')' );
	};

	// Редактирование комментария
	editCommentLinks.live('click', function(eventData){
		if(eventData.button == 0){
			var thisLink = $(this),
				thisListItem = thisLink.parents('li:first');
				thisSpeech = thisListItem.children('.speech');
			
			if(thisSpeech.children('textarea').length == 0){
				thisSpeech.html('<textarea>' + thisSpeech.html().replace(/(<br>\s)+/gi,"\n").replace(/\s+$/,'') + '</textarea><input type="button" value="Сохранить" class="save-comment"/>');
			}
			
			return false;
		}
	});
	
	$('.save-comment', commentsList).live('click', function(eventData){
		if(eventData.button == 0){
			var thisButton = $(this),
				thisListItem = thisButton.parents('li:first'),
				thisSpeech = thisListItem.children('.speech'),
				commentId = thisListItem.attr('id').substring(7),
				commentText = thisButton.prev().val();
			
			if(commentText.length > 0){
				$.post(
					'/news/addComment.html',
					{
						news_id: commentFormNewsId.val(),
						edit_id: commentId,
						comment: commentText
					},
					function( response )
					{
						var newComment = $(response);
						
						switch( response ){
							case '0':
								alert('Произошла ошибка, для корректной работы обновите страницу.');
								top.location.reload();
							break;
							case '1':
								alert('Слишком быстро! Подождите 33,5 секунды');
							break;
							default:
								thisSpeech.replaceWith(newComment.find('.speech'));
							break;
						}
					}
				);
			}
		}
	});

	$(".comment-vote > a").click(function() {
		var link = $(this);
		var linkParent = link.parent();

		if(linkParent.hasClass('voted')) {
			return false;
		}

		var id = link.parents('li:first').attr('id').substring(7);

		var vote = "positive";
        
		if(link.hasClass('vote-negative')) {
			vote = "negative";
			var counter = linkParent.children('b');
			counter.text(parseInt(counter.text()) + 1);
			
			linkParent.addClass('voted-negative');
			linkParent.addClass('voted');
		} else {
			var counter = linkParent.children('i');
			counter.text(parseInt(counter.text()) + 1);

			linkParent.addClass('voted-positive');
			linkParent.addClass('voted');
		}

		linkParent.children('a').attr('title', 'Вы проголосовали');

		$.post(
			'/news/?action=vote&comment_id=' + id + '&vote=' + vote,
			{},
			function(){
			}
		);

        	return false;
	});

});

