if(DN.Widgets)
{
  DN.Widgets.Validator ={
    init: function(selector, otherOptions) {
      $.tools.validator.messages["[required]"].en = "required";

      var errorHandler = function(errors, event) {
        var getErrorType = function(error) {
          return error.messages[0];
        };
        $.each(errors, function(index, error) {
          error.input.siblings(".errorMessage").remove();
          var message = error.input.attr('data-'+getErrorType(error)+'-message');

          $(document.createElement("div")).
            addClass("errorMessage").
            html(message).
            insertAfter(error.input);

          error.input.addClass('hasError');
        });
      };

      var noErrorHandler = function(inputs) {
        inputs.siblings(".errorMessage").remove();
        inputs.removeClass('hasError');
      };
      $.tools.validator.addEffect("DNeffect", errorHandler, noErrorHandler);

      $.tools.validator.fn("[email]", "email", function(input) {
        return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(input.val());
      });

      $.tools.validator.fn("[price]", "price", function(input) {
        return /^([1-9][0-9]*[.]?[0-9]*)?$/.test(input.val());
      });

      var options = {
        inputEvent: "blur",
        errorInputEvent:"blur",
        effect: "DNeffect",
        onBeforeValidate: function(event, elements){
          $.each(elements,function(index,inputElement) {
            var trimmedValue = jQuery.trim($(inputElement).val());
            $(inputElement).val(trimmedValue);
          });
        }
      };
      $(selector).validator(jQuery.extend(options,otherOptions));
    }
  };
}

