(function($){

	$(document).ready(function(){

		/* APPLY "LAST" CLASS TO LAST FIELDSET */
		$('form.default div.section:last-child, form.default fieldset.section:last-child').addClass('section-last');

		/* HIGHLIGHT FIELDS WHEN FOCUSED */
		$('form.default input.text, form.default select, form.default textarea').addClass('off').focus(function(){
			$(this).removeClass('off');
		}).blur(function(){
			$(this).addClass('off');
		});

		/* FOCUS ON FIRST FORM FIELD */
		/* IE 7 THROWS AN ERROR WHEN THE MATCHING ELEMENT IS NOT VISIBLE... SO, I'M DISABLING THIS UNTIL I FIND
		   A BETTER SOLUTION.  :VISIBLE SELECTOR DOESN'T WORK IN THIS CASE... TRY/CATCH DIDN'T SEEM TO WORK EITHER */
		/* $(":input:text:enabled:first").focus(); */

	});

	/* PLUGIN TO PREPARE FORM FOR AJAX */
	$.fn.prepareAjaxForm = function(settings) {

		/* SETTINGS */
		settings = $.extend({
			ajaxEvent:null,
			message:'Saving...',
			target:null,
			dataType:null
		}, settings);

		var jForm = $(this);
		var buttons = $('.submit input[@type=submit]', this);
		var messageElem = $('<span></span>').addClass('msg');
		var hideMessageTimeout;

		/* CHANGE THE EVENT TO THE AJAX EVENT */
		if (settings.ajaxEvent.length) {
			$('input#' + jForm.attr('id') + '_event').val(settings.ajaxEvent);
		}

		/* INSERT MESSAGE ELEM AFTER BUTTONS */
		buttons.after(messageElem);

		var showErrors = function(errors, htm) {

			/* SHAKE EFFECT... ALERTING A PROBLEM
			jForm.parents('.tabsFormContainer').Shake(2); */

			/* DISPLAY THE ERRORS */
			jForm.parents('.page').before(htm).addClass('errors');
			$('#content').ScrollTo('medium');

			/* HIGHLIGHT THE PROBLEM FIELDS
			$.each(errors, function(i,n) {
				$('#field_' + n).addClass('error');
			}); */

			/* SCROLL TO THE FIELD WHEN A LINK IS CLICKED IN THE ERROR BOX
			$('div#' + formID + '_errors a').click(function(){
				var hash = this.href.substring(this.href.indexOf('#')+1);
				ajaxForm_focusOnField(hash);
				return false;
			}); */

		}

		jForm.ajaxForm({
			dataType:settings.dataType,
			target:settings.target,
			beforeSubmit:function() {

				ajax_response = null;
				ajax_response_text = null;

				try { clearTimeout(hideMessageTimeout); } catch(e) {}

				/* DISABLE SUBMIT BUTTONS */
				buttons.attr('disabled',true);

				/* UPDATE MESSAGE */
				messageElem.html(settings.message).removeClass().addClass('msg loading');
			},
			success:function(r) {

				/* IF AJAX RESPONSE IS TEXT, THEN REPLACE CONTENT WITH RESPONSE TEXT */
				if (settings.dataType == null) {
					$(settings.target).html(r);
				}

				/* IF AJAX RESPONSE IS SCRIPT, WORK WITH THE RESPONSE */
				if (settings.dataType == 'script') {

					/* UPDATE MESSAGE */
					$('#' + jForm.attr('id') + 'Response div').html(ajax_response.message).removeClass().addClass(ajax_response.type);

					/* IF THERE ARE ERRORS */
					if (ajax_response.errors.length) {
						/* ADD ERROR CLASS TO EACH FIELD */
						$(ajax_response.errors).each(function() {
							$('#field_' + jForm.attr('id') + '_' + this.field).addClass('error');
						});
					/* IF THERE ARE NO ERRORS */
					} else {
						/* REMOVE ANY ERROR CLASSES */
						$('li.field', jForm).removeClass('error');
					}

					messageElem.html('').removeClass();
					// messageElem.html(ajax_response.message).removeClass().addClass('msg ' + ajax_response.status);

					/* ENABLE SUBMIT BUTTONS */
					buttons.attr('disabled',false);

					/* TIMEOUT TO HIDE MESSAGE */
					// hideMessageTimeout = setTimeout(function() { messageElem.removeClass().addClass('msg').html(''); }, 2500);

				}

				/* SCROLL TO TOP */
				$('#content').ScrollTo('normal');

			}
		});

		return this;
	}

})(jQuery);
