function showFieldChecking(fieldId) {
	 $(fieldId).css('border-color', '#ccc');
	 $(fieldId+'-status').hide().removeClass('fieldError fieldOk').addClass('fieldChecking').html('&nbsp;').fadeIn('slow');
}

function showFieldError(fieldId, error) {
	 if((!$(fieldId+"-status").hasClass('fieldError')) || $(fieldId+'-status').text() != error) {
		  $(fieldId).css('border-color', '#af0000');
		  $(fieldId+'-status').hide().removeClass('fieldChecking fieldOk').addClass('fieldError').text(error).fadeIn('slow');
	 }
}

function showFieldOk(fieldId) {
	 $(fieldId).css('border-color', '#8cac5b');
	 $(fieldId+'-status').hide().removeClass('fieldError fieldChecking').addClass('fieldOk').html('&nbsp;').fadeIn('slow');
}

function resetError(fieldId) {
	 $(fieldId).css('border-color', '#ccc');
	 $(fieldId+'-status').hide().removeClass('fieldChecking fieldOk fieldError').text('');	
}

function ajaxifyForm(formId, getPostVars, onSuccess) {
	 $(formId).submit(function(){
		  var action = $(this).attr('action') + '-ajax';
		  $(formId+' .submit').attr('disabled','disabled').after('<img src="img/ajax/loader.gif" class="loader" />');
		  $('.fieldStatus').fadeOut('fast');
		  $(formId+' input').css('border-color', '#ccc');

		  $('#message').slideUp('fast', function() {
				$('#message').hide();
				$.post(action, getPostVars(),
						 function(formResult) {
							  $(formId+' img.loader').fadeOut('fast',function(){$(this).remove()});
							  $(formId+' .submit').attr('disabled', '');
							  if(formResult.result == 'success')
									onSuccess();
							  else {
									// Show our general error
									if(formResult.result != null) {
										 $('#message').hide().html('<p><span class="formGenError">'+formResult.result+'</span></p>').slideDown('slow');
									}
									// Show our field errors
									var firstErrorEl = null;
									for(var i=0;i<formResult.fieldErrors.length;i++) {
										 var fieldError = formResult.fieldErrors[i];
										 showFieldError('#'+fieldError.fieldName, fieldError.error);
										 if(firstErrorEl == null)
											  firstErrorEl = $('#'+fieldError.fieldName);
									}
									// Focus and select the first error
									if(firstErrorEl != null) {
										 firstErrorEl.focus();
										 firstErrorEl.select();
									}
							  }
						 }
						);
		  }); 
		  return false;
	 }).ajaxError(function() {
		 $('#message').hide().html('<p><span class="formGenError">A website error occurred! Engineers have been notified. If the problem persists, please leave a message using the feedback form.</span></p>').slideDown('slow');
		});
}
