function showElement(ele) {
	ele.style.display = 'block';
}

function showElementById(id) {
	var ele = document.getElementById(id);
	if (ele) showElement(ele);
}

function hideElement(ele) {
	ele.style.display = 'none';
}

function hideElementById(id) {
	var ele = document.getElementById(id);
	if (ele) hideElement(ele);
}

function switchElement(ele) {
	if ('none' == ele.style.display) {
		showElement(ele);
	} else {
		hideElement(ele);
	}
}

function switchElementById(id) {
	var ele = document.getElementById(id);
	if (ele) switchElement(ele);
}


var commentForm = document.getElementById('comment');
var loadingEle = commentForm ? commentForm.getElementsByTagName('img')[0] : null;

var objectEle = document.getElementById('object-id');
var parentEle = document.getElementById('parent-id');
var messageEle = document.getElementById('message');
var submitEle = document.getElementById('submit-comment');

function placeCommentForm(forEleId, objectId, parentId, caller) {
	var form = $(commentForm);
	if (commentForm.style.display == 'block' && parentId == parentEle.value) {
		form.slideUp(500);
		return false;
	}

	var beforeEle;
	var forEle = document.getElementById(forEleId);

	if (forEle) {
		beforeEle = forEle.nextSibling;

		if (
			forEle.nextSibling &&
			parseInt(forEle.nextSibling.style.marginLeft) > parseInt(forEle.style.marginLeft)
		) {
			var last = forEle.nextSibling;

			while (
				last.nodeName.toLowerCase() == 'dl' &&
				parseInt(forEle.style.marginLeft) != parseInt(last.style.marginLeft)
			) {
				last = last.nextSibling;
			}

			beforeEle = last;
		}

	} else {
		beforeEle = caller;
	}

	if (beforeEle) {
		beforeEle.parentNode.insertBefore(commentForm, beforeEle);

		objectEle.value = objectId;
		parentEle.value = parentId;

		commentForm.style.display = 'block';
	}

	var correction = 230; // Не знаю почему, но положение формы определяется на столько неточно
	var w = $(window);
	var eleBottom = form.height() + (form.position().top + correction);
	var bottomLimit = w.height() + w.scrollTop();
	var offset = eleBottom - bottomLimit;

	if (offset > 0) {
		$.scrollTo('+=' + (offset + 20) + 'px', 500, {onAfter: function() {
			messageEle.focus();
		}});
	} else {
		messageEle.focus();
	}
}

function checkCommentForm() {
	if (messageEle && messageEle.value == '') {
		messageEle.className = 'error';
		messageEle.focus();
		return false;
	}

	return true;
}

function toggleComments(id) {
	$('#' + id).slideToggle(500);
}

function postComment() {
	loadingEle.style.display = 'inline';
	submitEle.disabled = true;

	$.post(
		'/ajax/comment/',
		$(commentForm).serializeArray(),

		function(data) {
			var newEle = document.createElement('div');
			newEle.style.display = 'none';
			newEle.innerHTML = data;
			commentForm.parentNode.insertBefore(newEle, commentForm);

			$(newEle).slideDown(500, function() {
				var comments = newEle.getElementsByTagName('dl');
				if (comments.length > 0) {
					newEle.parentNode.insertBefore(comments[0], newEle);
					newEle.parentNode.removeChild(newEle);
				}
			});

			messageEle.value = '';
			loadingEle.style.display = 'none';
			submitEle.disabled = false;
		}
	);
}

