var replyhref='<a href="#" class="reply replyhref" onClick="return putreplyform(this);">Ответить</a>';
var modhref='<a href="#" class="reply modhref" onClick="return modcomment(this);">Удалить комментарий</a>';
var delhref='<a href="#" class="reply delhref" onClick="return delcomment(this);">Удалить ветку</a>';
var edithref='<a href="#" class="reply edithref" onClick="return editcomment(this);">Редактировать</a>';
var oldcomment='';

$(document).ready(function(){
	makecomments();
	makecdots();
});

//// Листаем с контролом
document.onkeydown = NavigateThrough;
function NavigateThrough (event)
    {
    if (!document.getElementById) return;
    if (window.event) event = window.event;
	if (event.ctrlKey)
	    {
		var link = null;
		var href = null;
		switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
		    {
			case 0x25:
				link = document.getElementById ('ppage');
				break;
			case 0x27:
				link = document.getElementById ('npage');
				break;
		    }
        if (link) document.location = link.href;
	    }
    }

//// Нарисуем дерево комментариев
function makecdots()
{
	$('.comment').bind('mouseover', function(e){
		$('.cdot').remove();
		e.cancelBubble = true;
		e.stopPropagation();
		
		if ($(this).parent('.comment').length)
			drawcdot(this);
			
	});
	$('.comment').bind('mouseout', function(){
		$('.cdot').remove();
	});
}

//// Рекурсивно нарисуем
function drawcdot(t)
{
	// Нарисуем горизонтальную линию
	elm=$('<div style="border-bottom: 1px dotted #313131;" class="cdot"></div>');
	$(elm).css('top', parseInt($(t).offset().top)+23);
	$(elm).css('left', parseInt($(t).offset().left)-10);
	$(elm).css('width', $(t).offset().left-$(t).parent().offset().left);
	$(t).append(elm);
	
	// Погнали наверх
	elm2=$('<div style="border-left: 1px dotted #313131;" class="cdot"></div>');
	$(elm2).css('left', $(elm).offset().left);
	$(elm2).css('top', $(t).parent().offset().top+23);
	$(elm2).css('height', $(t).offset().top-$(t).parent().offset().top);
	$(t).append(elm2);
	
	if ($(t).parent('.comment').parent('.comment').length)
		drawcdot($(t).parent('.comment'));
}

//// Проверим наличие куков. Это не проверяет реальную залогиненность, но, если куков нет, то точно не залогинен.
function logged()
{
	cookies=document.cookie.split(';');
	e_id=false;
	e_key=false;
	for(v in cookies)
	{
		tmp=cookies[v].split('=')[0];
		tmp=tmp.replace(/\s*((\S+\s*)*)/, "$1");
		tmp=tmp.replace(/((\s*\S+)*)\s*/, "$1");
		
		val=cookies[v].split('=')[1];
		val=val.replace(/\s*((\S+\s*)*)/, "$1");
		val=val.replace(/((\s*\S+)*)\s*/, "$1");
		
		if (tmp=='key' && val.length>0) e_key=true;
		if (tmp=='id' && val.length>0) e_id=true;
		if (e_key && e_id) return true;
	}
	
	return false;
}

//// Поставим ссылки для ответа, удаления, ответа и редактирования
function makecomments()
{
	$('.comment > .username').append(replyhref);
	$('.commentstop > .username >  .replyhref').remove();
		
	if (logged())
	{
		$('.comment > .username').append(edithref);
		$('.comment > .username').append(modhref);
		$('.comment > .username').append(delhref);
	}
}

//// Редактирование комментария
function editcomment(elm)
{
	if ($('#editcomment').length)
	{
		uneditcomment();
	}
	oldcomment=$(elm).parent().next('.commenttext').html().replace(/<br[^>]*>/g, '');
	$(elm).parent().next('.commenttext').html('<textarea id="editcomment" style="width: 100%; height: 100px; font-size: 12px;">'+oldcomment+'</textarea><br /><button onclick="doeditcomment();" id="savecommentbutton">Сохранить</button><button onclick="uneditcomment();">Отменить</button>');
	oldcomment=$('#editcomment').val();
	
	return false;
}

//// Пометка комментария как удалённого
function modcomment(elm)
{
	if (!confirm('Вы уверены, что хотите удалить комментарий?')) return false;

	id=$(elm).parent().parent().attr('id').replace('comm', '')
	
	rt=$.ajax({
		type: "POST",
		async: false,
		url: '/ajax/blog/editcomment.php',
		data: {id: id, comment: 'Комментарий удален администратором'}
	}).responseText;
	
	$(elm).parent().parent().find('.commenttext').text('Комментарий удален администратором');
	
	return false;
}

//// Отменим редактирование
function uneditcomment()
{
	$('#editcomment').replaceWith(hsc(oldcomment).replace(/([^>])\n/g, '$1<br />\n'));
	$('.commenttext > button').remove();
}

//// Сохраним комментарий
function doeditcomment()
{
	$('#savecommentbutton').html('Сохраняю...');
	$('#savecommentbutton').attr('disabled', 'disabled');
	id=$('#editcomment').parent().parent().attr('id').replace('comm', '');

	rt=$.ajax({
		type: "POST",
		async: false,
		url: '/ajax/blog/editcomment.php',
		data: {id: id, comment: $('#editcomment').val()}
	}).responseText;
	
	if (rt.length>0)
	{
		alert(rt);
		$('#savecommentbutton').html('Сохранить');
		$('#savecommentbutton').removeAttr('disabled');
		return false;
	}
	
	
	$('#editcomment').replaceWith(hsc($('#editcomment').val()).replace(/([^>])\n/g, '$1<br />\n'));
	$('.commenttext > button').remove();
}

//// Удалим комментарий
function delcomment(elm)
{
	if (!confirm('Вы уверены, что хотите удалить ветку?')) return false;

	id=$(elm).parent().parent().attr('id').replace('comm', '');
	$(elm).replaceWith('Удаляю...');
	rt=$.ajax({
		type: "POST",
		async: false,
		url: '/ajax/blog/delcomment.php',
		data: {id: id}
	}).responseText;
	
	if (rt.length>0) 
		alert(rt);
	else
		$('#comm'+id).remove();
	
	return false;
}

//// Поставим форму ответа куда нам надо
function putreplyform(elm)
{
	$('#parent').val($(elm).parent().parent().attr('id').replace('comm', ''));
	rf=$('#newcomment').clone();
	$('#newcomment').remove();
	$(elm).parent().parent().append(rf);
	location.href=location.href.replace(/#.*$/, '')+'#newcomment';
	return false;
}

//// Уберём форму ответа по нажатию кнопки «Отмена»
function unputreplyform()
{
	$('#username').val('');
	$('#parent').val('0');
	$('#comment').val('');
	rf=$('#newcomment').clone();
	//$('#newcomment').replaceWith(replyhref);
	$('#newcomment').remove();
	$('.comments').append(rf);
}

//// Что-то похожее на htmlspecialchars
function hsc(s)
{
	return s.replace(/\&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;');
}

//// Добавляем комментарий
function addcomment()
{
	if ($('#comment').val()=='')
	{
		alert('А что, собственно, отправлять? Надо сперва ввести текст.');
		$('#comment').focus();
		return false;
	}
	
	if ($('#username').val()=='')
	{
		alert('Не забывайте представиться!');
		$('#username').focus();
		return false;
	}
	
	$('#newcomment').hide();
	
	rt=eval('('+$.ajax({
		type: "POST",
		async: false,
		url: '/ajax/blog/addcomment.php',
		data: {comment: $('#comment').val(), post: $('#post').val(), parent: $('#parent').val(), name: $('#username').val()}
	}).responseText+')');
	
	
	if (rt.error)
	{
		alert(rt.error);
		return false;
	}
	
	rf=$('#newcomment').clone();
	commentstop=(rt.level==9)?' commentstop':'';
	if (logged())
		$('#newcomment').replaceWith('<div class="comment'+commentstop+'" id="comm'+rt.id+'"><a name="comment'+rt.id+'"></a><div class="username admin">'+$('#username').val()+' <span class="datetime">'+rt.date+'</span></div><div class="commenttext">'+hsc($('#comment').val()).replace(/([^>])\n/g, '$1<br />')+'</div></div>');
	else
		$('#newcomment').replaceWith('<div class="comment'+commentstop+'" id="comm'+rt.id+'"><a name="comment'+rt.id+'"></a><div class="username">'+$('#username').val()+' <span class="datetime">'+rt.date+'</span></div><div class="commenttext">'+hsc($('#comment').val()).replace(/([^>])\n/g, '$1<br />')+'</div></div>');
		
	$('.reply').remove();
	makecomments();	
	$('.comments').append(rf);
	$('#username').val('');
	$('#parent').val('0');
	$('#comment').val('');
	$('#newcomment').show();
	makecdots();
}

//// Проверим событие Ctrl+Enter в комментариях
function kbReply(e)
{
	if((e.ctrlKey) && ((e.keyCode == 0xA)||(e.keyCode == 0xD)))
		addcomment();
}
