function cancel_comment() {
	$('addcommentform').style.display = 'none';
	$('comment_link_id').value = '';
	$('comment_parent_id').value = '';
	$('comment_text').value = '';
	$('addcommentlog').empty().style.display = 'none';
}

function add_comment(e) {
	var e = new Event(e).stop();
	var target = e.target;
	if (target.tagName.toLowerCase() != 'a') {
		target = target.parentNode;
	}
	var params, rowid, parentid;
	if (target.id.indexOf('addcomment') > -1) {
		rowid = target.id.substr('addcomment'.length);
	}
	else {
		params = target.id.substr('replycomment'.length).split('_');
		rowid = params[0];
		if (params.length > 1) {
			parentid = params[1];
		}
	}
	$('comment_link_id').value = rowid;
	$('comment_parent_id').value = (parentid?parentid:'');

	var addcommentform = $('addcommentform');
	addcommentform.parentNode.removeChild(addcommentform);
	var linkblock = target.parentNode.parentNode;
	if (parentid) {
		linkblock.insertBefore(addcommentform, $('replycomment' + rowid + '_' + parentid).parentNode.nextSibling);
	}
	else {
		linkblock.insertBefore(addcommentform, $('addcomment' + rowid).parentNode.nextSibling);
	}
	addcommentform.style.display = 'block';
	
	$('comment_text').focus();
}

function attach_comment_click(links) {
	for (var i = 0; i < links.length; i++) {
		var link = links[i];
		
		if ($(link).hasClass('addcomment') || $(link).hasClass('replycomment')) {
			$(link).addEvent('click', add_comment);
		}
	}
}

function attach_togglecomments_click(links) {
	for (var i = 0; i < links.length; i++) {
		var link = links[i];
		
		if ($(link).hasClass('togglecomments')) {
			$(link).addEvent('click', function(e) {
				e = new Event(e).stop();
				var target = $(e.target);
				var container = $(target.parentNode);
				if (container.hasClass('hidden')) {
					container.removeClass('hidden');
					target.setAttribute('oldtext', target.innerHTML);
					target.innerHTML = 'скрыть комментарии';
				}
				else {
					container.addClass('hidden');
					target.innerHTML = target.getAttribute('oldtext');
				}
			});
		}
	}
}

window.addEvent('domready', function() {

	var links = document.getElementsByTagName('a');
	attach_comment_click(links);
	attach_togglecomments_click(links);

	$('cancelcomment').addEvent('click', function(e) {
		e = new Event(e).stop();
		cancel_comment();
	});

	$('addcomment').addEvent('submit', function(e) {
		new Event(e).stop();
		var comment = document.createElement('div');
		var log = $('addcommentlog').empty().addClass('ajax-loading');
		log.style.display = 'block';
		
		new Request.HTML({
			url: this.action
			, update: comment
			, onSuccess: function() {
				log.removeClass('ajax-loading');

				if (comment.innerHTML.indexOf('error') > -1) {
					log.innerHTML = comment.innerHTML;
					comment = null;
				}
				else {
					var rowid = $('comment_link_id').value;
					var parentid = $('comment_parent_id').value;

					var added = comment.firstChild;
					comment.removeChild(added);
					
					if (parentid) {
						var parentcomment = $('comment' + parentid);
						var container;
						if ($('answers' + parentid)) {
							container = $('answers' + parentid);
						}
						else {
							container = document.createElement('div');
							container.className = 'commentanswers';
							parentcomment.parentNode.insertBefore(container, parentcomment.nextSibling);
						}
						container.appendChild(added);
					}
					else {
						$('link' + rowid).appendChild(added);
					}

					var links = added.getElementsByTagName('a');
					attach_comment_click(links);
					if (typeof attach_vote_click == 'function') {
						attach_vote_click(links);
					}

					comment = null;
					cancel_comment();
				}
			}
		}).post(this);
	});
	
});
