$(document).ready(function () {
	var form = $('#add-comment');
	
	function validate() {
		var message = $('#message'),
			name = $('#name'),
			website = $('#website'),
			parse_url = /^http:\/\/([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/,
			error_message = '',
			valid = true;

		if (!message[0].value) {
			message.parent().addClass('error');
			error_message = 'You forgot to enter a comment'
			valid = false;
		} else {
			message.parent().removeClass('error');
		}

		if (!name[0].value) {
			name.parent().addClass('error');
			error_message += error_message.length ? ' and your name' : 'You forgot to enter your name';
			valid = false;
		} else {
			name.parent().removeClass('error');
		}

		if (website[0].value) {
			var url = parse_url.test(website[0].value);
			if (!url) {
				// did they just forget the scheme?
				var fixed = 'http://' + website[0].value;
				url = parse_url.test(fixed);

				if (!url) {
					website.parent().addClass('error');
					error_message += error_message.length ? ', and your website address is malformed' : 'Your website address is malformed';
					valid = false;
				} else {
					website[0].value = fixed;
					website.parent().removeClass('error');
				}
			} else {
				website.parent().removeClass('error');
			}
		} else {
			website.parent().removeClass('error');
		}

		$('#error-message').text(error_message);

		return valid;
	}

	function postComment(e) {
		var params;

		e.preventDefault();

		if (validate()) {
			params = form.serialize();
			form.addClass('working');

			jQuery.ajax({
				type: 'POST',
				url: '/api/developers_blog_comment.json',
				data: params,
				dataType: 'json',
				success: function (data) {
					form.removeClass('working');
					form[0].reset();
					resetOverLabels(form[0]);
					tok.r();
					updateCommentList(data);
				}
			});
		}
	}

	function updateCommentList(data) {
		var none, comment;

		// clear out potential 'no comments' item
		none = $('#no-comments');
		if (none) none.remove();

		// add new comment
		comment = $('<li style="display:none;">' + data.body + '<div class="meta">Posted by <a href="' + data.website + '">' + data.name + '</a> | just posted</li>');
		$('#comments ul').prepend(comment);
		comment.fadeIn();
	}

	if (form && _entry_id) {
		// inject the comment form
		$('#add-comment .no-js').remove();
		form.find('h4').after(
			'<div>' +
			'	<label id="lbl-message" class="overlabel" for="message">Type Comment Here</label>' +
			'	<textarea id="message" class="required" name="developers_blog_comment[body]" rows="4" cols="80"></textarea>' +
			'</div>' +
			'<div class="name">' +
			'	<label class="overlabel" for="name">Your Name</label>' +
			'	<input type="text" class="required text" id="name" name="developers_blog_comment[name]" />' +
			'</div>' +
			'<div class="website">' +
			'	<label class="overlabel" for="website">Your Website (optional)</label>' +
			'	<input type="text" id="website" class="text" name="developers_blog_comment[website]" />' +
			'</div>' +
			'<div class="button"><button type="submit"><img src="/img/btn-submit.png" alt="Submit" /></button></div>' +
			'<input type="hidden" value="' + _entry_id + '" name="developers_blog_comment[developers_blog_entry_id]" />' +
			'<div id="error-message"></div><img id="working" src="/img/ajax-loader.gif" />'
		);

		// attach the submit handler
		form.submit(postComment);
	}
});
