function addCommentLinks()
{
	$('#comments li').each(function(){
										addCommentLink($(this));
										addShowLink($(this));
									 });
}

/**
 * если нужно добавляет к комментарнию ссылку,
 * позволяющюю его комеентировать
 * @param {jQuery} element - JQ объект, в который завернут блок комментария
 */
function addCommentLink(element)
{
	//alert('qwe');
	if(/*!element.hasClass('sub_comment') && */!element.hasClass('comment_replied'))
	{
		var insidePar = element.children('p:first');
		$('<a class="add_comment_link comment_this" href="#">ответить на комментарий</a>').appendTo(insidePar);		  
	}
}

/**
 * если нужно добавляет к комментарнию ссылку,
 * позволяющюю увидеть все субкомменты
 * @param {jQuery} element - JQ объект, в который завернут блок комментария
 */
function addShowLink(element)
{
	var toIndex = element.attr('to');
	var subNum = calculateSub(toIndex);
	var divWrapper = $('div.sub_comment_wrapper[to='+toIndex+']');
	
	//divWrapper.show().css('border','1px solid black');
	
	if(subNum > 1 && element.parent().is('ul'))
	{
		var insidePar = element.children('p:first');
		var showLink = insidePar.find('a.show_all_sub');
		
		if(showLink.length==0)
	 		$('<a class="show_all_sub" href="#">показать всю дискуссию ('+subNum+')</a>').appendTo(insidePar);
		else
		{
			if(showLink.text() != 'скрыть дискуссию')
				showlink.text('показать всю дискуссию ('+subNum+')');
		}
	}
}

/**
 * отображает все субкомментарии
 * @param {DOM-element} this - ссылка «показать всю дискуссию»
 */
function showDiscussion()
{
	var comment = $(this).closest('li');
	var commentId = comment.attr('comment_id');
	var subId = comment.attr('to');
	//var id = $(this).closest('li').attr('comment_id');
	
	$('div[to='+subId+']').slideToggle('slow', 
				function(){
							var showLink = $('li[comment_id='+commentId+'] a.show_all_sub');
							
							if($(this).is(':visible'))
								showLink.text('скрыть дискуссию');
							else
								showLink.text('показать всю дискуссию ('+calculateSub(subId)+')');
						  }
	  );
	
	return false;
}

/**
 * подсчитывает субкомментарии
 * @param {int} commentId - id коммента, для которого нужно подсчитать субы
 * @return возвращает количество субкомментов
 */
function calculateSub(commentId)
{
	return $('div.sub_comment_wrapper[to='+commentId+'] > li.sub_comment').length+1;
}

/**
 * отправляет AJAX запрос к скрипту добавления коммента в БД
 * если он ответил, вызывает appendComment() для встройки коммента
 * в необходимом месте
 * @param {DOM-element} this - кнопка button.submitComment
 * @return FALSE (гасит дефолтное поведение браузера)
 */
function addComment()
{
	//alert('addComment in action');
	
	var formId   = $(this).closest('form').attr('id');
	
	if(!formChecker(formId))
		return false;
	
	var artId    = $('#'+formId+' *[name=artId]').val();
	var catId    = $('#'+formId+' *[name=catId]').val();
	var auth     = $('#'+formId+' *[name=auth]').val();
	var auth_url = $('#'+formId+' *[name=url]').val();
	var comment  = $('#'+formId+' *[name=text]').val();
	var subId    = $('#'+formId+' *[name=subId]').val();
	var captcha  = $('#'+formId+' *[name=captcha]').val();
	
	//alert(captcha);
	
	$.ajax({
		   		type     : 'POST',
		   		url      : 'http://'+document.domain+'/adder.php',//'adder.php',//
				data     : 'artId='+artId+'&catId='+catId+'&auth='+auth+'&url='+auth_url+'&comment='+comment+'&subId='+subId+'&captcha='+captcha,
				success  : builtInComment,
				error    : function (data){alert(data.status);}
		   });
	
	return false;
}

function builtInComment(data)
{

//alert(data);

	var subFlag = data.split('|')[6];
	
	//alert(subFlag);
	
	if(subFlag == 0)
	{
		appendComment(data);
		clearForm('form_add-comment');
	}
	else
	{
		//alert('adding subcomment');
		//alert(data);
		
		$('#sub_comment_form').slideUp('slow');
		$('#sub_comment_form').prev().find('a.comment_this').text('ответить на комментарий');
			window.setTimeout(function(){
									   		$('#sub_comment_form').insertAfter('#block_comments');
									   		appendComment(data);
										},600);
	
		clearForm('sub_comment_form');
	}
}

/**
 * встроит коммент в необходимом месте 
 * предусмотренные случаи:
 * 		- обычный коммент к статье
 * 		- первый субкоммент
 * 		- второй субкомментcs
 * 		- N-ый субкоммент
 * @param {String} data - стока, полученная от adder.php
 */
function appendComment(data)
{
	//alert('appendComment in action');
	if(data != 'false')
	{
		var dataArr = data.split('|');
		
		var comment_id  = dataArr[0];
		var admin       = dataArr[5];
		var subId       = dataArr[6];
		
		var br              = navigator.userAgent.toLowerCase();
		var newCommentBlock = commentBuilder(data);
		var IE_flag         = 0;
	
		if(br.indexOf("msie 5") != -1 || br.indexOf("msie 6") != -1 || br.indexOf("msie 7") != -1)
			IE_flag = 1;
		
		if(subId != 0)
		{
			var parentCommentBlock = $('#comments li[comment_id='+subId+']');
			var actionBlock = $('#comments li.comment_replied[to='+subId+'] ul li:first');
			var container    = parentCommentBlock.next();
			
			//actionBlock.css('border','1px solid black');
			if(IE_flag == 0) // если НЕ ОСЛИК
			{		
				if(container.is('li.comment_replied'))
				{	
					if(container.find('li').length > 1)
					{
						var subWrapperDiv = container.find('div.sub_comment_wrapper[to='+subId+']');
						var showLink = actionBlock.find('a.show_all_sub');
						
						subWrapperDiv.append(newCommentBlock);
						
						if(showLink.text()!='скрыть дискуссию')
							showLink.text('показать всю дискуссию ('+calculateSub(subId)+')').trigger('click');
					}
					else
					{
						var divWrapper   = $('<div class="sub_comment_wrapper" to="'+subId+'" ></div>').append(newCommentBlock);
						
						container.find('ul').append(divWrapper);
						addShowLink(actionBlock);
						actionBlock.find('a.show_all_sub').trigger('click');
					}
				}
				else
				{
					$('<li class="comment_replied" to="'+subId+'" ><ul></ul></li>').insertAfter(parentCommentBlock);
					parentCommentBlock.next().find('ul').append(newCommentBlock);
					//addShowLink(parentCommentBlock);	
				}
			}
			else //если ОСЛИК
			{
				if(container.is('li.comment_replied'))
				{	
					container.find('ul').append(newCommentBlock);	
				}
				else
				{
					$('<li class="comment_replied" to="'+subId+'" ><ul></ul></li>').insertAfter(parentCommentBlock);
					parentCommentBlock.next().find('ul').append(newCommentBlock);	
				}
			}
		}
		else
		{
			if($('#comments > li').length > 0)
				newCommentBlock.insertAfter('#comments > li:last');
			else
				newCommentBlock.appendTo('#comments');
		}
		
		window.setTimeout(function(){	
								   		var orient = newCommentBlock.offset();
										scroll(orient.left,orient.top-200);
								   },600);
	}
	else
		alert('комментарий не добавлен');
}

/**
 * построит блок комментария
 * @param {String} data - строка, полученна от adder.php
 * @return newCommentBlock блок нового комментария
 */
function commentBuilder(data)
{
	//alert('data: '+data);
	var dataArr = data.split('|');
	
	var comment_id  = dataArr[0];
	var auth     = dataArr[1];
	var auth_url = dataArr[2];
	var date     = dataArr[3];
	var content  = dataArr[4];
	var admin    = dataArr[5];
	var subId    = dataArr[6];
	
	var newCommentBlock = $(document.createElement('li'));
	var newPar          = $(document.createElement('p'));
	
	// инициализация контента
	if(auth_url!='' && auth_url!='n/a')
		newPar.append('<strong class="comment_author" ><a class="author_url" href="'+auth_url+'" target="_blank" >'+auth+'</a> <span class="comment_date" >'+date+'</span></strong>');
	else
		newPar.append('<strong class="comment_author" >'+auth+' <span class="comment_date" >'+date+'</span></strong>');
		
	newPar.append(content);
	newPar.append('<a class="add_comment_link comment_this" href="#">ответить на комментарий</a>');
	
	//alert(newPar.html());
	
	// инициализация контейнера
	newCommentBlock.attr('comment_id',comment_id);
	
	if(admin==1)
		newCommentBlock.addClass('admin_comment').append('<img class="avatar" alt="" src="/images/content/avatar_admin.png" />');
	else
		newCommentBlock.append('<img class="avatar" alt="" src="/images/content/avatar_generic.png" />');
		
	if(subId!=0)
		newCommentBlock.addClass('sub_comment').attr('to',subId);
	//else
	//	newPar.append('<a class="add_comment_link comment_this" href="#">ответить на комментарий</a>');
		
	newCommentBlock.append(newPar);
	
	return newCommentBlock;
}

/**
 * вставляет форму #sub_comment_form под необходимый комментарий
 * @param {DOM-element} this - ссылка «ответить на комментарий»
 * @return FALSE (гасит дефолтное поведение браузера)
 */
function formBuilder()
{
	var comment      = $(this).closest('li');
	var newForm      = $('#sub_comment_form');
	var newFormBlock = $('#sub_comment_form');
	
	if(newFormBlock.is(':visible'))
	{	
		if(comment.attr('comment_id') != newForm.find('input[name=subId]').val())
		{
			newFormBlock.prev().find('a.comment_this').text('ответить на комментарий');
			
			$('#sub_comment_form').slideUp('slow');
			
			window.setTimeout(function(){
											$('#sub_comment_form').insertAfter(comment).slideDown('slow');
											newForm.find('input[name=subId]').val(comment.attr('comment_id'));
											
											$(this).text('скрыть форму комментария');
										},600);
		}
		else
		{
			$('#sub_comment_form').slideUp('slow');
			
			window.setTimeout(function(){
											$('#sub_comment_form').insertAfter('#block_comments');
										},600);
			
			$(this).text('ответить на комментарий');
		}
	}
	else
	{
		newFormBlock.insertAfter(comment).slideDown('slow');
		newForm.find('input[name=subId]').val(comment.attr('comment_id'));
		
		$(this).text('скрыть форму комментария');
	}
	
	return false;
}

function clearForm(formId)
{
	$('#'+formId+' input[name=url]').val('http://');
	$('#'+formId+' textarea[name=text]').val('');
	$('#'+formId+' input[name=auth]').val('');
	$('#'+formId+' input[name=captcha]').val('');
}

function formChecker(formId)
{
	var counter = 0;
	
	$('#'+formId+' input').each(function(){
										 	elt = $(this);
										 	if(elt.attr('name')=='auth' || elt.attr('name')=='captcha' || elt.attr('name')=='text')
											{
												if(elt.val()=='')
												{
													// do smth
													counter++;
												}
												// do smth
											}													
										  });
	
	if(counter!=0)
	{
		alert('заполните необходимые поля');
		return false;
	}
		
	return true;
}

/**
 * разворачивает суб-врапперы, чтобы было видно вновь добавленный элемент
 * @param {jQuery} comment - новый блок комментария
 */
function showHiddenSubs(comment)
{
	var wrappers  = comment.parents('div.sub_comment_wrapper');
		 
	wrappers.each(function(){
								if($(this).is(':hidden'))
									$(this).closest('li').prev().find('a.show_all_sub').trigger('click');
							 });
}