/*jslint browser:true white:false devel:true onevar:true nomen:false forin:true undef:true */
/*global jQuery,window,acp_path,acp_lang */

// Ajax Comment Posting
// WordPress plugin
// version 2.0
var ACP = {};

ACP.setup = function()
{
	/* acp_lang[]:
	 [0]: 'Loading...'
	 [1]: 'Please enter your name.'
	 [2]: 'Please enter your email address.'
	 [3]: 'Please enter a valid email address.'
	 [4]: 'Please enter your comment'
	 [5]: 'Your comment has been added.'
	 [6]: 'ACP error!'
	 */

	// initialise
	var form, err, reply;

	function acp_initialise()
	{
		jQuery('#post-comment form').after('<div id="error"></div>');
		jQuery('#post-comment .form_submit').after('<img src="' + acp_path + 'loading.gif" id="loading" alt="' + acp_lang[0] + '" />');
		jQuery('#loading').hide();
		form = jQuery('#post-comment form');
		err = jQuery('#error');
		reply = false;
	}
	acp_initialise();

	jQuery('.comment-reply-link').live('click', function()
	{
		// checks if it's a reply to a comment
		reply = jQuery(this).parents('.depth-1').attr('id');
		err.empty();
	});

	jQuery('#cancel-comment-reply-link').live('click', function()
	{
		reply = false;
	});

	jQuery('#post-comment form').live('submit', function(evt)
	{
		err.empty();

		if (form.find('#post-comment .author')[0])
		{
			// if not logged in, validate name and email
			if (form.find('#post-comment .author').val() === '')
			{
				err.html('<span class="error">' + acp_lang[1] + '</span>');
				return false;
			}
			if (form.find('#post-comment .email').val() === '')
			{
				err.html('<span class="error">' + acp_lang[2] + '</span>');
				return false;
			}
			var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			if (!filter.test(form.find('#post-comment .email').val()))
			{
				err.html('<span class="error">' + acp_lang[3] + '</span>');
				if (evt.preventDefault)
				{
					evt.preventDefault();
				}
				return false;
			}
		} // end if
		if (form.find('#post-comment .comment').val() === '')
		{
			err.html('<span class="error">' + acp_lang[4] + '</span>');
			return false;
		}

		jQuery(this).ajaxSubmit(
		{

			beforeSubmit: function()
			{
				jQuery('#loading').show();
				jQuery('#post-comment .form_submit').attr('disabled', 'disabled');
			},
			// end beforeSubmit
			error: function(request)
			{
				err.empty();
				var data = request.responseText.match(/<p>(.*)<\/p>/);
				err.html('<span class="error">' + data[1] + '</span>');
				jQuery('#loading').hide();
				jQuery('#post-comment .form_submit').removeAttr("disabled");
				return false;
			},
			// end error()
			success: function(data)
			{
				try
				{
					var np = jQuery('<li class="comment even thread-even depth-1"><div id="comment"><div class="comment-author"><cite class="fn"></cite><span class="date"></span></div><span class="mod">Your comment is awaiting moderation.</span><div class="comment-body"></div></div></li>');

					np.find('cite').text(form.find('.author').val());
					np.find('.date').text('Just now');
					np.find('.comment-body').append('<p>' + form.find('.comment').val().replace(/\n\n/, '</p><p>') + '</p>');

					jQuery('#comment-list ul').append(np);

					form.find('.comment').val('');
					err.html('<span class="success">' + acp_lang[5] + '</span>');
					jQuery('#post-comment .form_submit').removeAttr("disabled");
					jQuery('#loading').hide();

				}
				catch (e)
				{
					jQuery('#loading').hide();
					jQuery('#post-comment .form_submit').removeAttr("disabled");
					alert(acp_lang[6] + '\n\n' + e);
				} // end try
			} // end success()
		}); // end ajaxSubmit()
		return false;

	}); // end form.submit()
};

