- ### allow for some browsers to not receive the validation
- if ($ENV{HTTP_USER_AGENT}) {
- foreach (@UNSUPPORTED_BROWSERS) {
- next if $ENV{HTTP_USER_AGENT} !~ $_;
- return "<!-- JS Validation not supported in this browser $_ -->"
- }
- }
-
- my $self = shift;
- my $val_hash = shift || die "Missing validation";
- my $form_name = shift || die "Missing form name";
- my $js_uri_path = shift || $JS_URI_PATH;
- $val_hash = $self->get_validation($val_hash);
- require YAML;
+ ### allow for some browsers to not receive the validation js
+ return "<!-- JS validation not supported in this browser $_ -->"
+ if $ENV{'HTTP_USER_AGENT'} && grep {$ENV{'HTTP_USER_AGENT'} =~ $_} @UNSUPPORTED_BROWSERS;
+
+ my $self = shift;
+ my $val_hash = shift || die "Missing validation";
+ my $form_name = shift || die "Missing form name";
+ my $js_uri_path = shift || $JS_URI_PATH;
+ $val_hash = $self->get_validation($val_hash);
+
+ ### store any extra items from self
+ my %EXTRA = ();
+ $EXTRA{"general $_"} = $self->{$_} for grep {/$QR_EXTRA/o} keys %$self; # add 'general' to be used in javascript
+
+ my $js_uri_path_validate = $JS_URI_PATH_VALIDATE || do {
+ die "Missing \$js_uri_path" if ! $js_uri_path;
+ "$js_uri_path/CGI/Ex/validate.js";
+ };
+
+ if (eval { require JSON }) {
+ my $json = JSON->new(pretty => 1)->objToJson($val_hash);
+
+ return qq{<script src="$js_uri_path_validate"></script>
+<script>
+document.validation = $json;
+if (document.check_form) document.check_form("$form_name");
+</script>
+};