(function($){ $.AjaxComment = function(s) {

	var
	    isSended = false, // 押下フラグ
		settings = $.extend({}, { // 設定
			schema    : '',
			target_id : null,
			reply_id  : 0
		}, s);

	/**
	 * 共通リセット関数
	 */
	function reset(callback)
	{
		settings.reply_id = 0;
		$('#bbs-input-reply-zone').hide();
		$('#bbs-input-comment').val('').blur();
		$('#bbs-input-reply').html('');

		if (typeof callback === 'function')
		{
			callback();
		}
	}

	/**
	 * リバインドしなければならないイベントリバインド関数
	 */
	function bind()
	{
		/**
		 * 返信ボタンをクリック
		 */
		$('.bbs-reply')
			.unbind('click').bind('click', function()
			{
				var $comment = $(this).parents('.bbs-box');

				reset(function()
				{
					var reply_nickname;

					with ($comment.find('.bbs-nickname'))
					{
						settings.reply_id = attr('data-id');
						reply_nickname    = $.trim(text());
					}

					$('#bbs-input-reply').html('<b>' + reply_nickname + '</b>さんへの返信コメントです。');
					$('#bbs-input-comment').focus().val('＞' + reply_nickname + 'さん\n').css('color', '#000');
					$('#bbs-input-reply-zone').show();
				});
			});

		/**
		 * 返信キャンセルボタンをクリック
		 */
		$('#bbs-input-reply-cancel')
			.unbind('click').bind('click', function(){reset()});

		/**
		 * 削除ボタンをクリック
		 */
		$('.bbs-delete')
			.unbind('click').bind('click', function()
			{
				if ( ! $(this).attr('data-id')) {
					alert('このコメントは削除できません。');
					return false;
				}

				if (confirm('このコメントを削除しますか？'))
				{
					var success = false;
					var container = $(this).parents('.bbs-box');

					$.ajax({
						url      : settings.schema + 'delete',
						type     : 'POST',
						dataType : 'json',
						data     : {id: $(this).attr('data-id')},
						success  : function(response, status)
						{
							if (response && response.success)
							{
								container.fadeOut(function(){$(this).remove()});
								success = true;
							}
						},
						error : function()
						{
							if ( ! success) {
								alert('何らかの理由でコメントを削除できませんでした。時間をおいて再度お試しください。');
							}
						}
					});

					return false;
				}
			});

		/**
		 * 投稿ボタンをクリック
		 */
		$('#bbs-input-submit')
			.unbind('click').bind('click', function()
			{
				try
				{
					// 投稿処理中だったら
					if (isSended) throw 'ただいま投稿処理中です。連続でクリックしないでください。';

					with ($('#bbs-input-comment'))
					{
						var posts = {
							id       : settings.target_id,
							reply_id : settings.reply_id,
							comment  : is('.placeholder') ? '' : $.trim(val())
						};
					}

					if ( ! posts.comment.length) {
						$('#bbs-input-comment').focus();
						throw 'コメントを入力してください';
					}

					isSended = true;

					var success = false;

					$.ajax({
						url      : settings.schema + 'post',
						type     : 'POST',
						dataType : 'json',
						data     : posts,
						success  : function(response, status)
						{
							if (response && response.success)
							{
								var template = $('#curationCommentTemplate').tmpl(response.data);
								$('.bbs-result').prepend(template);
								template.slideDown();
								reset();
								bind();
								success = true;
							}
						},
						complete : function()
						{
							if ( ! success) {
								alert('何らかの理由でコメントできませんでした。時間をおいて再度お試しください。');
							}
							isSended = false;
						}
					});
				}
				catch (e) {
					alert(e);
				}

				return false;
			});

	} // end bind

	$(document).ready(function()
	{
		reset();
		bind();
	});

};
})(jQuery);
