(function($){
  var options;

  $.fn.validation = function(opt) {
    // Extend local options.
    options = $.extend($.fn.validation.defaults, opt);

    return this.each(function() {
      var form = $(this); // Set form.
      
      // Add submit event to validate form.
     form.submit(function(event) {
        return $.fn.validation.validate(form);
      });
    });
  };

  /**
   * Function that validates the form.
   */
  $.fn.validation.validate = function(form) {
    var fields = form.find("input[type!=submit], textarea, select");  // Get all fields of form.
    var formOk = true;

    // Check every field.
    for(var i = 0; i < fields.length; i++) {
      var field = $(fields[i]); // Get jQuery wrapper of field.

      // Required field validation.
      if(field.hasClass("required")) {
        if(field.val() == "") {
          field.addClass(options.errorClass);
          field.next("span").fadeIn(200);
          formOk &= false;
        }
        else {
          field.removeClass(options.errorClass);
          field.next("span").fadeOut(200);
          formOk &= true;
        }
      }
      // Email field validation.
      if(field.hasClass("email")) {
        if(!$.fn.validation.defaults.regexEmail.test(field.val())) {
          field.addClass(options.errorClass);
          field.next("span").fadeIn(200);
          formOk &= false;
        }
        else {
          field.removeClass(options.errorClass);
          field.next("span").fadeOut(200);
          formOk &= true;
        }
      }
    }

		if(formOk == 0) {
			$("#errormessage").show();
			$("#okmessage").hide();
		}
		else {
			$("#errormessage").hide();
			$("#okmessage").show();
		}

    return (formOk == 0 ? false : 1);
  }

  $.fn.validation.defaults = {
    errorClass: "error",
		onError: null,
    regexEmail: /^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/
  };
  
})(jQuery);
