/*
 * @todo Переделать. Отправить в говнокод.ru, т.к. автор опуса сам туда цитирует 
 */
function comments() {
	return new class_Comments();
}
function class_Comments() {
	var _formAddShablon;
	var _formDeleteShablon;
	var _MAX_COMMENT_LENGTH = 20000;
	_instance();

	this.add = function() {
		_makeDefaultAllComments();

		var obj = $('._tempAddNewComment');
		obj.html(_formAddShablon.html());
		obj.find('input[name=commentId]').val('0');
		obj.find('input[name=action]').val('add');
		obj.find('form').attr('name', 'replyCommentForm');
		obj.find('._replyLink').text('Добавить');

		return false;
	}

	this.reply = function(id) {
		_makeDefaultAllComments();

		var obj = $('#_comment_' + id);
		obj.find('._reply').hide();
		obj.find('._admin').hide();
		obj.find('._admin2').show();

		var frm = obj.find('._tempReply');
		frm.html(_formAddShablon.html());
		frm.find('input[name=commentId]').val(id);
		frm.find('input[name=action]').val('add');
		frm.find('form').attr('name', 'replyCommentForm');

		return false;
	}

	this.remove = function(id) {
		_makeDefaultAllComments();

		if (window.confirm(html('_del_comment_confirm_txt'))) {
			var frm = _formDeleteShablon.find('form');
			frm.find('input[name=commentId]').val(id);
			frm.submit();
		}
		return false;
	}

	this.edit = function(id) {
		_makeDefaultAllComments();

		var obj = $('#_comment_' + id);
		obj.find('._reply').hide();
		obj.find('._admin').hide();
		obj.find('._admin2').show();

		var tempCommentHTML = obj.find('p span');
		tempCommentHTML.hide();

		var frm = obj.find('._tempReply');
		frm.html(_formEditShablon.html());
		frm.find('input[name=commentId]').val(id);
		frm.find('input[name=action]').val('edit');
		frm.find('form').attr('name', 'replyCommentForm');

		var txt = _prepareText(tempCommentHTML.html());
		frm.find('form textarea').val(txt);
		frm.find('._replyLink').text('Сохранить');

		return false;
	}

	this.cancelEdit = function() {
		_makeDefaultAllComments();
		$('.pl_0').show();
		return false;
	}

	this.vote = function(commId, vote) {
		return ajaxPost('/comments/votecomment', 'commentId=' + commId
				+ '&vote=' + vote, '_comment_vote_response_' + commId);
	}

	this.showHidden = function(commId) {
		show('_negative_comment_' + commId);
		hide('_negative_comment_show_' + commId);
		return false;
	}

	this.saveSettings = function() {
		var callback = function() {
			var msg = $('#_comments_setting_saved').html();
			$('#_comments_settings').html(msg);
		};
		ajaxPost('/comments/savecfgcomment', '', '', callback);
		return false;
	}

	this.validateComment = function(el) {
		var fld = $(el);
		_validateLength(fld, _MAX_COMMENT_LENGTH);
	}

	this.submit = function() {
		var frm = $('form[name=replyCommentForm]');
		var txt = frm.find('textarea').val();
		if (txt == '')
			return false;
		if (!/\S+/i.test(txt))
			return false;

		_disableSubmitButtons();
		frm.submit();
		return false;
	}

	function _disableSubmitButtons() {
		var addButNew = $('._tempAddNewComment ._replyLink');
		var addButReply = $('._tempReply ._replyLink');
		addButNew.removeAttr('onclick').removeAttr('href').css('color', '#888')
				.css('text-decoration', 'none');
		addButReply.removeAttr('onclick').removeAttr('href').css('color',
				'#888').css('border-bottom', '0px');
	}

	function _instance() {
		if (_instance.set)
			return;

		_formAddShablon = $('#form_add_template');
		_formEditShablon = $('#form_edit_template');
		_formDeleteShablon = $('#form_delete_template');
	}

	function _makeDefaultAllComments() {
		$('._commentsAllBlocks p').show();
		$('._tempReply').html('');
		$('._tempAddNewComment').html('');
		$('._reply').show();
		$('._admin').show();
		$('._admin2').hide();
	}

	function _prepareText(txt) {
		txt = $.trim(txt);
		txt = txt.replace(/<br>/gi, '');
		return txt;
	}

	function _validateLength(fld, allowedLength) {
		var txt = fld.val();
		if (txt.length > allowedLength) {
			fld.val(txt.substring(0, allowedLength));
			fld.addClass('error_field').addClass('error');
		} else {
			fld.removeClass('error_field').removeClass('error');
		}
	}
}