/*
* jQuery validation plug-in 1.5.1
*
*
* Copyright (c) 2009 Jen Wendling
*
* $Id: jquery.validate.js 1 2009-01-26 14:12:04Z jen.wendling $
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function($) {

$.fn.validateForm = $.fn.validateform = function(options) {
	var defaults = {
		errorBodyClass: 'errors',
		errorTextClass: 'error_text',
		errorLabelClass: 'error_label',
		errorFieldText: 'Required.',
		errorFieldClass: 'error_field',
		requiredFieldClass: 'required',
		requiredLabelPrepend: '',
		requiredLabelAdditionalClass: '',
		requiredLabelAppend: '',
		showErrorMessages: 1,
		header: '<h4>Please fix the following errors and try submitting the form again:</h4>',
		callback: ''
	};
	var errors = '';
	var opts = $.extend(defaults, options);
	
	this.each(function() {
		$this = $(this);
		var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
		
		// do labels
		$('.'+o.requiredFieldClass).each(function(i,n) {
		  prepareLabels(n, o);
		});
		
		$this.submit(function(e) {
		  errors = '';
		  resetPage(o);
			$required = $(e.target).find('.'+o.requiredFieldClass);
			$required.each(function(i, elem) {
				if($(elem).val()=='') {
					$label = $('label[for='+elem.id+']');
					$label.addClass(o.errorLabelClass);
					errors += $label.text() + " is required.<br />";
					$(elem).addClass(o.errorFieldClass);
					$(elem).after($("<span>"+o.errorFieldText+"</span>").addClass(o.errorTextClass));
				}
			});
			if(errors != '') {
				if(o.showErrorMessages) {
					errors = o.header + errors;
				} else {
					errors = o.header;
				}
				$errorDiv = $('<div/>').addClass(o.errorBodyClass).html(errors).prependTo($this);
				window.scrollTo(0,$errorDiv.scrollTop());
				return false;
			}
		});
	});
	
};

function prepareLabels(elem, o) {
  $label = $this.find('label[for='+elem.id+']');
  $label.prepend(o.requiredLabelPrepend);
  $label.addClass('required_label');
  $label.addClass(o.requiredLabelAdditionalClass);
  $label.append(o.requiredLabelAppend);
}

function resetPage(o) {
  $('.'+o.errorBodyClass).remove();
	$('.'+o.errorTextClass).remove();
	$('.'+o.errorFieldClass).removeClass(o.errorFieldClass);
	$('label.'+o.errorLabelClass).removeClass(o.errorLabelClass);
}

})(jQuery);