﻿$(function(){
	var commentsList = $('.news-comments');
	
	// Боримся с live-событиями
	if( commentsList.length == 0 ){
		commentsList = $('.last-comments');
	}
	
	var firstLevelComments = $('> li', commentsList),
		leftCommentContainers = $('.left-news-comment'),
		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);
	
	// Изначально все беседы скрыты
	$('> 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 формы комментариев
	$('a', leftCommentContainers).click(function(){
		var thisLink = $(this),
			commentFormHere = $(this).parent().next('#newsCommentsForm').length
		
		if( commentFormHere )
			commentForm.toggle();
		else
			commentForm.insertAfter( $(this).parent() ).show();
		
		commentFormParent.val(0);
		
		leftCommentContainers.show();
		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) );
			
			leftCommentContainers.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('');
						commentFormParent.val(0);
						
						leftCommentContainers.show();
						commentForm.hide();
						
						location.hash = newComment.attr('id');
					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();
					}
				);
			}
			return false;
		}
	});
	
	// Редактирование комментария
	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('<span class="textarea-container"><textarea>' + thisSpeech.html().replace(/(<br>\s)+/gi,"\n").replace(/\s+$/,'') + '</textarea><input type="button" value="Сохранить" class="save-comment"/></span>');
			}
			
			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;
						}
					}
				);
			}
		}
	});
});
