function clear_field(field) {
    field.parents('.form-group').removeClass('has-error has-success has-feedback');
    field.parent().find("span.help-block").remove();
    field.parent().find("span.glyphicon").remove();
}

function clear_form(form) {
    form.find(".alert").remove();
    form.find('.form-group').removeClass('has-error has-success has-feedback');
    form.find("span.help-block").remove();
    form.find("span.glyphicon").remove();
}

function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); }

function numeric_validation(div, val) {
    var error_msg = [];
    if ( !(isNumber(val)) ) {
        error_msg.push('Enter a valid number value.');
    } 
    if ( (div.hasClass('nonzero')) && (parseFloat(val) == 0.0) ) {
        error_msg.push('Enter a valid nonzero value.');
    } 
    if ( (div.hasClass('positive')) && (parseFloat(val) < 0.0) ) {
        error_msg.push('Enter a valid positive value.');
    } 
    if ( (div.hasClass('negative')) && (parseFloat(val) > 0.0) ) {
        error_msg.push('Enter a valid negative value.');
    } 
    if (  div.hasClass('min') || div.hasClass('max') ) {
        var classes = div.attr("class").split(' ');
        if (classes.indexOf('max')) {
            var val_max = parseFloat(classes[classes.indexOf('max')+1]);
            if (parseFloat(val) > val_max) {
                error_msg.push('Enter a valid value that is smaller than ' + val_max +'.');
            }
        }
        if (classes.indexOf('min')) {
            var val_min = parseFloat(classes[classes.indexOf('min')+1]);
            if (parseFloat(val) < val_min) {
                error_msg.push('Enter a valid value that is greater than ' + val_min +'.');
            }
        }
    }
    return error_msg
}

function field_validation(field) {
    field.prop('disabled', true);
    clear_field(field);

    var val = field.val();
    var div = field.parents('.form-group');
    var error_msg = [];

    if ( val == '' && field.hasClass('required') ) {
        error_msg.push('This field is required.');
    } else if (val != '') {
        if (field.hasClass('number')) {
            if (field.hasClass('list')) {
                val_list = val.split(',');
                for (var i=0; i<val_list.length; i++) {
                    if (val_list[i] != '') {
                        error_msg.push(numeric_validation(field,val_list[i]));
                    }
                }
            } else {
                error_msg = numeric_validation(field, val);
            }
        }
    }

    if (error_msg.length == 0) {
        if (val || field.hasClass('required')) {
            div.addClass('has-success');
            div.find("p.help-block").prepend('<span aria-hidden="true" class="glyphicon glyphicon-ok form-control-feedback"></span>');
        }
    } else {
        div.addClass('has-error');
        div.find("p.help-block").prepend('<span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>');
        for (var i=0; i<error_msg.length;i++) {
            div.find("p.help-block").prepend('<span class="help-block"><strong>'+error_msg[i]+'</strong></span>');
        }
    }

    div.addClass('has-feedback');
    field.prop('disabled', false);
    return (error_msg.length == 0)
}

function form_validation(form, clean_form_action, clean_field_action) {
    form.find('input').prop('disabled', true);
    clear_form(form)

    var error_fields = [];
    form.find('input:visible:not(.checkboxinput):not(.btn)').each(function () {

        if ($(this).val() || $(this).hasClass('required')) {
            if (field_validation($(this))) {
                clean_field_action
            } else {
                error_fields.push($(this));
            }
        }
    })

    if (error_fields.length == 0) { 
        clean_form_action
    } else { 
        form.prepend('<h4 class="alert alert-danger">Oh snap! You got an error!</h4>');
        error_fields[0].focus();
    }

    form.find('input').prop('disabled', false);
    return error_fields
}

@@ -1,24 +1,229 @@
+/*!%0A * Form numeric validation with bootstrap v0.1%0A * https://github.com/babsey/form-numeric-validation%0A *%0A * Copyright 2015 Sebastian Spreizer%0A * Released under the BSD 2-clause %22Simplified%22 Licence%0A */%0A%0A
 function clear_field(fie
@@ -810,32 +810,24 @@
 er(val)) ) %7B
-%0A       
  error_msg.p
@@ -853,39 +853,34 @@
 number value.');
-%0A   
  %7D
- 
 %0A    if ( (div.h
@@ -926,32 +926,24 @@
  == 0.0) ) %7B
-%0A       
  error_msg.p
@@ -970,39 +970,34 @@
 onzero value.');
-%0A   
  %7D
- 
 %0A    if ( (div.h
@@ -1043,32 +1043,24 @@
 ) %3C 0.0) ) %7B
-%0A       
  error_msg.p
@@ -1088,39 +1088,34 @@
 sitive value.');
-%0A   
  %7D
- 
 %0A    if ( (div.h
@@ -1161,32 +1161,24 @@
 ) %3E 0.0) ) %7B
-%0A       
  error_msg.p
@@ -1214,23 +1214,18 @@
 alue.');
-%0A   
  %7D
- 
 %0A    if 
@@ -1481,32 +1481,16 @@
 l_max) %7B
-%0A               
  error_m
@@ -1553,36 +1553,24 @@
 l_max +'.');
-%0A           
  %7D%0A        %7D
@@ -1725,32 +1725,16 @@
 l_min) %7B
-%0A               
  error_m
@@ -1801,28 +1801,16 @@
 n +'.');
-%0A           
  %7D%0A     
@@ -1937,17 +1937,16 @@
 field);%0A
-%0A
     var 
@@ -2032,17 +2032,16 @@
 g = %5B%5D;%0A
-%0A
     if (
@@ -2616,25 +2616,24 @@
     %7D%0A    %7D%0A
-%0A
     if (erro
@@ -3246,25 +3246,24 @@
     %7D%0A    %7D%0A
-%0A
     div.addC
@@ -3497,17 +3497,16 @@
 m(form)%0A
-%0A
     var 
@@ -3604,17 +3604,16 @@
 on () %7B%0A
-%0A
         
@@ -3841,17 +3841,16 @@
 %0A    %7D)%0A
-%0A
     if (
@@ -4045,17 +4045,16 @@
 ;%0A    %7D%0A
-%0A
     form

add licence