

$(function () {

	// store the current value of each field 
	var fieldValues = {};
	
	// For all ajax-able form fields, add the feedback and message spans
	$('dd:has(.ajaxElement)')
		.addClass('ajaxInput')
		.append('<span class="ajaxFeedback"></span>')
		.append('<span class="ajaxMessage"></span>');
	$('dd#submit-element')
		.addClass('ajaxInput')
		.append('<span class="ajaxFeedback"></span>');

	// interval after typing stops to check a field
	interval = 1000;
	var lastKeypress = null;
	
	$('.ajaxElement').keydown(function ()
	{
		this.lastKeypress = new Date().getTime();
		var that = this;
		setTimeout(function()
		{
			var currentTime = new Date().getTime();
			if (currentTime - that.lastKeypress > interval)
			{
				// field hasn't changed since last time
				if (undefined != fieldValues[that.id] && fieldValues[that.id] == that.value) return;
				if (!that.value && undefined == fieldValues[that.id]) return;
				fieldValues[that.id] = that.value;
				validateAjax(that);
			}
		}, interval + 100);
	});

	$('form').ajaxForm(
	{ 
		url:       ajaxSubmitUrl,
		dataType:  'json',
		
		beforeSubmit : function()
		{
			$('#submit').attr("disabled", "true");
			$('dd#submit-element .ajaxFeedback').addClass('spinner');
			return true;
		},
		
		success: function(responseText, statusText)
		{
			$('dd#submit-element .ajaxFeedback').removeClass('spinner');
			var json = JSON.parse(responseText);

			if (json.status == 'OK')
			{
				if (ajaxCloseColorbox)
				{
					parent.$.fn.colorbox.close();
					
					var newComment = $(json.html).addClass('newComment');
	
					parent.$('.commentsHeader').show();
					parent.$('.ajaxTarget').append(newComment);
					parent.$.scrollTo(parent.$(newComment), {duration:1000});
	
// 					parent.$(newComment).pulse({
// 							opacityRange: [0.3, 1],
// 							runLength: 3,
// 							speed: 400
// 					});
					parent.$(newComment).pulse({
							opacity: [0.3, 1],
					}, 400, 3, 'swing');

					
					parent.$(newComment).removeClass('newComment');
				}
				else
				{
					$('#content').fadeOut('slow', function() {
						$(this).html(json.html).fadeIn()
					});
				}
			}
			else
			{
				var errors = JSON.parse(json.errors);

				$.each(errors, function(i, item) 
				{
					var element = 'captcha' == i ? $('#recaptcha_response_field').parent() : $('#' + i);
					
					var feedback = $(element).siblings('.ajaxFeedback');
					var message  = $(element).siblings('.ajaxMessage');

					$(feedback).addClass('error');
					message.html('<ul>');
					
					$.each(item, function(k, string) 
					{
						message.append('<li>' + string + '</li>');
					});
					
					message.append('</ul>');
					message.fadeIn();
				});
				
				$('#submit').removeAttr("disabled");
			}

			if (typeof Recaptcha != 'undefined') Recaptcha.reload('t');
		}
	}); 



});


function validateAjax(t)
{
	var feedback = $(t).parent().children('.ajaxFeedback');
	var message = $(t).parent().children('.ajaxMessage');

	$(feedback).removeClass('accept')
		.removeClass('error')
		.addClass('spinner');

	if (this.timer) clearTimeout(this.timer);

	this.timer = setTimeout(function ()
	{
		$.ajax(
		{
			url: ajaxValidateUrl,
			data: t.id + '=' + t.value,
			dataType: 'json',
			type: 'post',
			success: function (j) 
			{
				$(feedback).removeClass('spinner');
				if (j == 'true')
				{
					if (t.value)
					{
						$(feedback).addClass('accept');
					}
					message.html('');
				}
				else
				{
					var json = JSON.parse(j);

					$(feedback).addClass('error');
					message.html('<ul>');
					
					$.each(json, function(i, item) {
						$.each(item, function(k, string) {
							message.append('<li>' + string + '</li>');
						});
					});
					
					message.append('</ul>');
					message.fadeIn();
				}
			}
		});
	}, 200);
}

