diff --git a/Gruntfile.js b/Gruntfile.js index 5957437..a5536ea 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,12 +1,14 @@ //TODO: During next major version bump change to /dist. Leaving at ./form-validator for backwards //compatibility const DIST_DIR = './form-validator'; -const MAIN_PLUGIN_FILE = './form-validator/jquery.form-validator'; +const MAIN_PLUGIN_FILE = 'jquery.form-validator'; const SRC_DIR = './src'; const MAIN_DIR = '/main/'; -const MODULE_DIR = '/modules/'; -const LANG_DIR = '/lang/'; +const MODULE_DIR = '/modules'; +const LANG_DIR = '/lang'; const CSS_FILE = 'theme-default.css'; +const CORE_VALIDATORS = 'core-validators.js'; //must come at end of concatted file +const coreValidatorsPath = SRC_DIR + MAIN_DIR + CORE_VALIDATORS; var fs = require('fs'), readFile = function (file) { @@ -16,7 +18,8 @@ var fs = require('fs'), fs.writeFileSync(path, readFile(path).replace(from, to)); }; -function initializeGruntConfig(grunt, filesToBuild) { +function initializeGruntConfig(grunt) { + grunt.initConfig({ // Import package manifest @@ -34,12 +37,36 @@ function initializeGruntConfig(grunt, filesToBuild) { " */\n" }, - // Concat definitions. - concat: filesToBuild.concat, + concat: { + main:{ + files: [ + //This concatenates the core validators file after the other files + //Per: http://gruntjs.com/configuring-tasks + { + src: [SRC_DIR + MAIN_DIR+'*.js', '!' + coreValidatorsPath, coreValidatorsPath], + dest: DIST_DIR + '/' + MAIN_PLUGIN_FILE + '.js' + }, + { + src: [SRC_DIR + MAIN_DIR+'*.js', '!' + coreValidatorsPath, coreValidatorsPath], + dest: DIST_DIR + '/' + MAIN_PLUGIN_FILE + '.min.js' + }] + }, + options: { + banner: "<%= meta.banner %>" + } + }, cssmin: { target: { - files: filesToBuild.cssFiles + files: [ + { + dest: DIST_DIR, + src: CSS_FILE, + cwd: SRC_DIR, + expand: true, + ext: '.min.css' + } + ] } }, // Lint definitions @@ -52,7 +79,21 @@ function initializeGruntConfig(grunt, filesToBuild) { }, // Minify definitions - uglify: filesToBuild.uglify, + uglify: { + options: { + banner: "<%= meta.banner %>" + }, + main: { + files: [ + { + expand: true, + cwd: DIST_DIR + '/', + src: ['**/*.js', '!' + MAIN_PLUGIN_FILE +'.js'], + dest: DIST_DIR + '/' + } + ] + } + }, // watch for changes to source // Better than calling grunt a million times @@ -79,97 +120,49 @@ function initializeGruntConfig(grunt, filesToBuild) { } }, + copy: { + main: { + files: [ + { + src: SRC_DIR + '/' + CSS_FILE, + dest: DIST_DIR + '/' + CSS_FILE + }, + { + cwd: SRC_DIR + '/' + MODULE_DIR, + src: '**', + dest: DIST_DIR + '/', + expand: true + }, + { + cwd: SRC_DIR + '/' + LANG_DIR, + src: '**', + dest: DIST_DIR + LANG_DIR +'/', + expand: true + }] + } + }, + clean: [DIST_DIR + '/'], + umd: { main: { options: { - src: MAIN_PLUGIN_FILE + '.js', + src: DIST_DIR + '/**/*.js', + dest: './', deps: { default: ['jQuery'], amd: [{'jquery': 'jQuery'}], cjs: [{'jquery': 'jQuery'}] } } - }, - minified: { - options: { - src: MAIN_PLUGIN_FILE + '.min.js', - deps: { - default: ['$'], - amd: [{'jquery': 'jQuery'}], - cjs: [{'jquery': 'jQuery'}] - } - } } } }); } module.exports = function (grunt) { - var filesToBuild = { - uglify: {}, - concat: { - main:{ - src: [SRC_DIR + MAIN_DIR+'core-validators.js'], - dest: MAIN_PLUGIN_FILE + '.js' - } - } - }; - // Gather up all module and language files - [MODULE_DIR, LANG_DIR].forEach(function (path) { - var srcPath = SRC_DIR + path; - var distPath = DIST_DIR + path; - if (path === MODULE_DIR) { - distPath = DIST_DIR + '/'; - } - - fs.readdirSync(srcPath).forEach(function (fileName) { - var fullPath = srcPath + fileName; - filesToBuild.uglify[distPath + fileName] = fullPath; - filesToBuild.concat[fullPath] = { - src: [fullPath], - dest: distPath + fileName - }; - }); - }); - filesToBuild.concat[CSS_FILE] = { - src: [SRC_DIR + '/' + CSS_FILE], - dest: DIST_DIR + '/' + CSS_FILE - }; - // Gather up all source files that will added to minified core library - fs.readdirSync(SRC_DIR + MAIN_DIR).forEach(function (fileName) { - var fullPath = SRC_DIR + MAIN_DIR + fileName; - if (filesToBuild.concat.main.src.indexOf(fullPath) === -1) { - filesToBuild.concat.main.src.unshift(fullPath); - } - }); - - filesToBuild.cssFiles = []; - filesToBuild.cssFiles.push({ - dest: DIST_DIR, - src: CSS_FILE, - cwd: SRC_DIR, - expand: true, - ext: '.min.css' - }); - - // Add options for concat and uglify - filesToBuild.concat.options = { - banner: "<%= meta.banner %>" - }; - filesToBuild.uglify.options = { - banner: "<%= meta.banner %>" - }; - - // Add main script to uglify - filesToBuild.uglify[MAIN_PLUGIN_FILE + '.js'] = { - src: MAIN_PLUGIN_FILE + '.js', - expand: true, - extDot: 'last', - ext: '.min.js' - }; - initializeGruntConfig(grunt, filesToBuild); + initializeGruntConfig(grunt); /* * Change to new version or the next version number. The project must be built again after this task * in order for the version change to take effect. @@ -199,6 +192,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks("grunt-contrib-concat"); + grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks("grunt-contrib-jshint"); grunt.loadNpmTasks("grunt-contrib-uglify"); grunt.loadNpmTasks("grunt-contrib-watch"); @@ -208,7 +202,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-umd'); grunt.registerTask("build-production", ["version", "test", "uglify"]); - grunt.registerTask('test', ['concat', 'umd', 'cssmin','jshint', 'qunit']); + grunt.registerTask('test', ['concat', 'copy', 'umd', 'cssmin','jshint', 'qunit']); grunt.registerTask("default", ["test", "watch"]); grunt.registerTask("prepublish", ["test", "uglify"]); }; diff --git a/form-validator/brazil.js b/form-validator/brazil.js index 01b344a..a215bf9 100644 --- a/form-validator/brazil.js +++ b/form-validator/brazil.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -$.formUtils.addValidator({name:"cpf",validatorFunction:function(a){var b=a.replace(/\D/g,""),c=0,d=0,e=0,f=0;if(11!==b.length||"00000000000"===b)return!1;for(i=1;i<=9;i++)c+=parseInt(b.substring(i-1,i))*(11-i);if(e=10*c%11,e>=10&&(e=0),e!==parseInt(b.substring(9,10)))return!1;for(i=1;i<=10;i++)d+=parseInt(b.substring(i-1,i))*(12-i);return f=10*d%11,f>=10&&(f=0),f!==parseInt(b.substring(10,11))?!1:!0},errorMessage:"",errorMessageKey:"badBrazilCPFAnswer"}),$.formUtils.addValidator({name:"brphone",validatorFunction:function(a){return a.match(/^(\+[\d]{1,3}[\s]{0,1}){0,1}(\(){0,1}(\d){2}(\)){0,1}(\s){0,1}(\d){4,5}([-. ]){0,1}(\d){4}$/g)?!0:!1},errorMessage:"",errorMessageKey:"badBrazilTelephoneAnswer"}),$.formUtils.addValidator({name:"cep",validatorFunction:function(a){return a.match(/^(\d){5}([-. ]){0,1}(\d){3}$/g)?!0:!1},errorMessage:"",errorMessageKey:"badBrazilCEPAnswer"}); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){$.formUtils.addValidator({name:"cpf",validatorFunction:function(a){var b=a.replace(/\D/g,""),c=0,d=0,e=0,f=0;if(11!==b.length||"00000000000"===b)return!1;for(i=1;i<=9;i++)c+=parseInt(b.substring(i-1,i))*(11-i);if(e=10*c%11,e>=10&&(e=0),e!==parseInt(b.substring(9,10)))return!1;for(i=1;i<=10;i++)d+=parseInt(b.substring(i-1,i))*(12-i);return f=10*d%11,f>=10&&(f=0),f!==parseInt(b.substring(10,11))?!1:!0},errorMessage:"",errorMessageKey:"badBrazilCPFAnswer"}),$.formUtils.addValidator({name:"brphone",validatorFunction:function(a){return a.match(/^(\+[\d]{1,3}[\s]{0,1}){0,1}(\(){0,1}(\d){2}(\)){0,1}(\s){0,1}(\d){4,5}([-. ]){0,1}(\d){4}$/g)?!0:!1},errorMessage:"",errorMessageKey:"badBrazilTelephoneAnswer"}),$.formUtils.addValidator({name:"cep",validatorFunction:function(a){return a.match(/^(\d){5}([-. ]){0,1}(\d){3}$/g)?!0:!1},errorMessage:"",errorMessageKey:"badBrazilCEPAnswer"})}); \ No newline at end of file diff --git a/form-validator/date.js b/form-validator/date.js index 13bd6b8..4a2924b 100644 --- a/form-validator/date.js +++ b/form-validator/date.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a){a.formUtils.addValidator({name:"time",validatorFunction:function(a){if(null===a.match(/^(\d{2}):(\d{2})$/))return!1;var b=parseInt(a.split(":")[0],10),c=parseInt(a.split(":")[1],10);return b>23||c>59?!1:!0},errorMessage:"",errorMessageKey:"badTime"}),a.formUtils.addValidator({name:"birthdate",validatorFunction:function(b,c,d){var e="yyyy-mm-dd";c.valAttr("format")?e=c.valAttr("format"):"undefined"!=typeof d.dateFormat&&(e=d.dateFormat);var f=a.formUtils.parseDate(b,e);if(!f)return!1;var g=new Date,h=g.getFullYear(),i=f[0],j=f[1],k=f[2];if(i===h){var l=g.getMonth()+1;if(j===l){var m=g.getDate();return m>=k}return l>j}return h>i&&i>h-124},errorMessage:"",errorMessageKey:"badDate"})}(jQuery); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"time",validatorFunction:function(a){if(null===a.match(/^(\d{2}):(\d{2})$/))return!1;var b=parseInt(a.split(":")[0],10),c=parseInt(a.split(":")[1],10);return b>23||c>59?!1:!0},errorMessage:"",errorMessageKey:"badTime"}),a.formUtils.addValidator({name:"birthdate",validatorFunction:function(b,c,d){var e="yyyy-mm-dd";c.valAttr("format")?e=c.valAttr("format"):"undefined"!=typeof d.dateFormat&&(e=d.dateFormat);var f=a.formUtils.parseDate(b,e);if(!f)return!1;var g=new Date,h=g.getFullYear(),i=f[0],j=f[1],k=f[2];if(i===h){var l=g.getMonth()+1;if(j===l){var m=g.getDate();return m>=k}return l>j}return h>i&&i>h-124},errorMessage:"",errorMessageKey:"badDate"})}(a)}); \ No newline at end of file diff --git a/form-validator/file.js b/form-validator/file.js index fcc2de7..ba94ed3 100644 --- a/form-validator/file.js +++ b/form-validator/file.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";var c="undefined"!=typeof b.FileReader,d=function(b){var c=a.split((b.valAttr("allowing")||"").toLowerCase());return a.inArray("jpg",c)>-1&&-1===a.inArray("jpeg",c)?c.push("jpeg"):a.inArray("jpeg",c)>-1&&-1===a.inArray("jpg",c)&&c.push("jpg"),c},e=function(a,b,c,d){var e=d[b]||"";a.errorMessageKey="",a.errorMessage=e.replace("%s",c)},f=function(a){b.console&&b.console.log&&b.console.log(a)},g=function(c,d,e){var f=new FileReader,g=new Image;f.readAsDataURL(c),f.onload=function(c){g.onload=function(){a(b).trigger("imageValidation",[this]),d(this)},g.onerror=function(){e()},g.src=c.target.result}};a.formUtils.addValidator({name:"mime",validatorFunction:function(b,g,h,i){if(c){var j=!0,k=g.get(0).files||[],l="",m=d(g);return k.length&&(a.each(k,function(b,c){return j=!1,l=c.type||"",a.each(m,function(a,b){return j=l.indexOf(b)>-1,j?!1:void 0}),j}),j||(f("Trying to upload a file with mime type "+l+" which is not allowed"),e(this,"wrongFileType",m.join(", "),i))),j}return f("FileReader not supported by browser, will check file extension"),a.formUtils.validators.validate_extension.validatorFunction(b,g,h,i)},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"extension",validatorFunction:function(b,c,f,g){var h=!0,i=this,j=d(c);return a.each(c.get(0).files||[b],function(b,c){var d="string"==typeof c?c:c.value||c.fileName||c.name,f=d.substr(d.lastIndexOf(".")+1);return-1===a.inArray(f.toLowerCase(),j)?(h=!1,e(i,"wrongFileType",j.join(", "),g),!1):void 0}),h},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"size",validatorFunction:function(b,d,g,h){var i=d.valAttr("max-size");if(!i)return f('Input "'+d.attr("name")+'" is missing data-validation-max-size attribute'),!0;if(!c)return!0;var j=a.formUtils.convertSizeNameToBytes(i),k=!0;return a.each(d.get(0).files||[],function(a,b){return k=b.size<=j}),k||e(this,"wrongFileSize",i,h),k},errorMessage:"",errorMessageKey:"wrongFileSize"}),a.formUtils.convertSizeNameToBytes=function(a){return a=a.toUpperCase(),"M"===a.substr(a.length-1,1)?1024*parseInt(a.substr(0,a.length-1),10)*1024:"MB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10)*1024:"KB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10):"B"===a.substr(a.length-1,1)?parseInt(a.substr(0,a.length-1),10):parseInt(a,10)};var h=function(){return!1};a.formUtils.checkImageDimension=function(a,b,c){var d=!1,e={width:0,height:0},f=function(a){a=a.replace("min","").replace("max","");var b=a.split("x");e.width=b[0],e.height=b[1]?b[1]:b[0]},g=!1,h=!1,i=b.split("-");return 1===i.length?0===i[0].indexOf("min")?g=i[0]:h=i[0]:(g=i[0],h=i[1]),g&&(f(g),(a.widthe.width||a.height>e.height)&&(d=a.width>e.width?c.imageTooWide+" "+e.width+"px":c.imageTooTall+" "+e.height+"px",d+=" ("+c.max+" "+e.width+"x"+e.height+"px)")),d},a.formUtils.checkImageRatio=function(a,b,c){var d=a.width/a.height,e=function(a){var b=a.replace("max","").replace("min","").split(":");return b[0]/b[1]},f=b.split("-"),g=function(a,b,c){return a>=b&&c>=a};if(1===f.length){if(d!==e(f[0]))return c.imageRatioNotAccepted}else if(2===f.length&&!g(d,e(f[0]),e(f[1])))return c.imageRatioNotAccepted;return!1},a.formUtils.addValidator({name:"dimension",validatorFunction:function(b,d,e,f,i){var j=!1;if(c){var k=d.get(0).files||[];if(j=!0,-1===d.attr("data-validation").indexOf("mime"))return alert("You should validate file type being jpg, gif or png on input "+d[0].name),!1;if(k.length>1)return alert("Validating image dimensions does not support inputs allowing multiple files"),!1;if(0===k.length)return!0;if(d.valAttr("has-valid-dim"))return!0;if(d.valAttr("has-not-valid-dim"))return this.errorMessage=f.wrongFileDim+" "+d.valAttr("has-not-valid-dim"),!1;if("keyup"===a.formUtils.eventType)return null;var l=!1;return a.formUtils.isValidatingEntireForm&&(l=!0,a.formUtils.haltValidation=!0,i.bind("submit",h).addClass("on-blur")),g(k[0],function(b){var c=!1;d.valAttr("dimension")&&(c=a.formUtils.checkImageDimension(b,d.valAttr("dimension"),f)),!c&&d.valAttr("ratio")&&(c=a.formUtils.checkImageRatio(b,d.valAttr("ratio"),f)),c?d.valAttr("has-not-valid-dim",c):d.valAttr("has-valid-dim","true"),d.valAttr("has-keyup-event")||d.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("has-not-valid-dim",!1).valAttr("has-valid-dim",!1)}),l?(a.formUtils.haltValidation=!1,i.removeClass("on-blur").get(0).onsubmit=function(){},i.unbind("submit",h),i.trigger("submit")):d.trigger("blur")},function(a){throw a}),!0}return j},errorMessage:"",errorMessageKey:""}),a(b).one("validatorsLoaded formValidationSetup",function(b,c){var d;d=c?c.find('input[type="file"]'):a('input[type="file"]'),d.filter("*[data-validation]").bind("change",function(){a(this).removeClass("error").parent().find(".form-error").remove()})})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";var c="undefined"!=typeof b.FileReader,d=function(b){var c=a.split((b.valAttr("allowing")||"").toLowerCase());return a.inArray("jpg",c)>-1&&-1===a.inArray("jpeg",c)?c.push("jpeg"):a.inArray("jpeg",c)>-1&&-1===a.inArray("jpg",c)&&c.push("jpg"),c},e=function(a,b,c,d){var e=d[b]||"";a.errorMessageKey="",a.errorMessage=e.replace("%s",c)},f=function(a){b.console&&b.console.log&&b.console.log(a)},g=function(c,d,e){var f=new FileReader,g=new Image;f.readAsDataURL(c),f.onload=function(c){g.onload=function(){a(b).trigger("imageValidation",[this]),d(this)},g.onerror=function(){e()},g.src=c.target.result}};a.formUtils.addValidator({name:"mime",validatorFunction:function(b,g,h,i){if(c){var j=!0,k=g.get(0).files||[],l="",m=d(g);return k.length&&(a.each(k,function(b,c){return j=!1,l=c.type||"",a.each(m,function(a,b){return j=l.indexOf(b)>-1,j?!1:void 0}),j}),j||(f("Trying to upload a file with mime type "+l+" which is not allowed"),e(this,"wrongFileType",m.join(", "),i))),j}return f("FileReader not supported by browser, will check file extension"),a.formUtils.validators.validate_extension.validatorFunction(b,g,h,i)},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"extension",validatorFunction:function(b,c,f,g){var h=!0,i=this,j=d(c);return a.each(c.get(0).files||[b],function(b,c){var d="string"==typeof c?c:c.value||c.fileName||c.name,f=d.substr(d.lastIndexOf(".")+1);return-1===a.inArray(f.toLowerCase(),j)?(h=!1,e(i,"wrongFileType",j.join(", "),g),!1):void 0}),h},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"size",validatorFunction:function(b,d,g,h){var i=d.valAttr("max-size");if(!i)return f('Input "'+d.attr("name")+'" is missing data-validation-max-size attribute'),!0;if(!c)return!0;var j=a.formUtils.convertSizeNameToBytes(i),k=!0;return a.each(d.get(0).files||[],function(a,b){return k=b.size<=j}),k||e(this,"wrongFileSize",i,h),k},errorMessage:"",errorMessageKey:"wrongFileSize"}),a.formUtils.convertSizeNameToBytes=function(a){return a=a.toUpperCase(),"M"===a.substr(a.length-1,1)?1024*parseInt(a.substr(0,a.length-1),10)*1024:"MB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10)*1024:"KB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10):"B"===a.substr(a.length-1,1)?parseInt(a.substr(0,a.length-1),10):parseInt(a,10)};var h=function(){return!1};a.formUtils.checkImageDimension=function(a,b,c){var d=!1,e={width:0,height:0},f=function(a){a=a.replace("min","").replace("max","");var b=a.split("x");e.width=b[0],e.height=b[1]?b[1]:b[0]},g=!1,h=!1,i=b.split("-");return 1===i.length?0===i[0].indexOf("min")?g=i[0]:h=i[0]:(g=i[0],h=i[1]),g&&(f(g),(a.widthe.width||a.height>e.height)&&(d=a.width>e.width?c.imageTooWide+" "+e.width+"px":c.imageTooTall+" "+e.height+"px",d+=" ("+c.max+" "+e.width+"x"+e.height+"px)")),d},a.formUtils.checkImageRatio=function(a,b,c){var d=a.width/a.height,e=function(a){var b=a.replace("max","").replace("min","").split(":");return b[0]/b[1]},f=b.split("-"),g=function(a,b,c){return a>=b&&c>=a};if(1===f.length){if(d!==e(f[0]))return c.imageRatioNotAccepted}else if(2===f.length&&!g(d,e(f[0]),e(f[1])))return c.imageRatioNotAccepted;return!1},a.formUtils.addValidator({name:"dimension",validatorFunction:function(b,d,e,f,i){var j=!1;if(c){var k=d.get(0).files||[];if(j=!0,-1===d.attr("data-validation").indexOf("mime"))return alert("You should validate file type being jpg, gif or png on input "+d[0].name),!1;if(k.length>1)return alert("Validating image dimensions does not support inputs allowing multiple files"),!1;if(0===k.length)return!0;if(d.valAttr("has-valid-dim"))return!0;if(d.valAttr("has-not-valid-dim"))return this.errorMessage=f.wrongFileDim+" "+d.valAttr("has-not-valid-dim"),!1;if("keyup"===a.formUtils.eventType)return null;var l=!1;return a.formUtils.isValidatingEntireForm&&(l=!0,a.formUtils.haltValidation=!0,i.bind("submit",h).addClass("on-blur")),g(k[0],function(b){var c=!1;d.valAttr("dimension")&&(c=a.formUtils.checkImageDimension(b,d.valAttr("dimension"),f)),!c&&d.valAttr("ratio")&&(c=a.formUtils.checkImageRatio(b,d.valAttr("ratio"),f)),c?d.valAttr("has-not-valid-dim",c):d.valAttr("has-valid-dim","true"),d.valAttr("has-keyup-event")||d.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("has-not-valid-dim",!1).valAttr("has-valid-dim",!1)}),l?(a.formUtils.haltValidation=!1,i.removeClass("on-blur").get(0).onsubmit=function(){},i.unbind("submit",h),i.trigger("submit")):d.trigger("blur")},function(a){throw a}),!0}return j},errorMessage:"",errorMessageKey:""}),a(b).one("validatorsLoaded formValidationSetup",function(b,c){var d;d=c?c.find('input[type="file"]'):a('input[type="file"]'),d.filter("*[data-validation]").bind("change",function(){a(this).removeClass("error").parent().find(".form-error").remove()})})}(a,window)}); \ No newline at end of file diff --git a/form-validator/html5.js b/form-validator/html5.js index 1c5f359..09cd1fa 100644 --- a/form-validator/html5.js +++ b/form-validator/html5.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";var c="placeholder"in document.createElement("INPUT"),d="options"in document.createElement("DATALIST"),e=!1,f=function(b){b.each(function(){var b=a(this),f=b.find("input,textarea,select"),g=!1;f.each(function(){var b=[],c=a(this),f=c.attr("required"),h={};switch((c.attr("type")||"").toLowerCase()){case"time":b.push("time"),a.formUtils.validators.validate_date||e||(e=!0,a.formUtils.loadModules("date"));break;case"url":b.push("url");break;case"email":b.push("email");break;case"date":b.push("date");break;case"number":b.push("number");var i=c.attr("max"),j=c.attr("min");(j||i)&&(j||(j="0"),i||(i="9007199254740992"),h["data-validation-allowing"]="range["+j+";"+i+"]",(0===j.indexOf("-")||0===i.indexOf("-"))&&(h["data-validation-allowing"]+=",negative"),(j.indexOf(".")>-1||i.indexOf(".")>-1)&&(h["data-validation-allowing"]+=",float"))}if(c.attr("pattern")&&(b.push("custom"),h["data-validation-regexp"]=c.attr("pattern")),c.attr("maxlength")&&(b.push("length"),h["data-validation-length"]="max"+c.attr("maxlength")),!d&&c.attr("list")){var k=[],l=a("#"+c.attr("list"));if(l.find("option").each(function(){k.push(a(this).text())}),0===k.length){var m=a.trim(a("#"+c.attr("list")).text()).split("\n");a.each(m,function(b,c){k.push(a.trim(c))})}l.remove(),a.formUtils.suggest(c,k)}if(f&&0===b.length&&b.push("required"),b.length){f||(h["data-validation-optional"]="true"),g=!0;var n=(c.attr("data-validation")||"")+" "+b.join(" ");c.attr("data-validation",a.trim(n)),a.each(h,function(a,b){c.attr(a,b)})}}),g&&b.trigger("html5ValidationAttrsFound"),c||f.filter("input[placeholder]").each(function(){this.defaultValue=this.getAttribute("placeholder"),a(this).bind("focus",function(){this.value===this.defaultValue&&(this.value="",a(this).removeClass("showing-placeholder"))}).bind("blur",function(){""===a.trim(this.value)&&(this.value=this.defaultValue,a(this).addClass("showing-placeholder"))})})})};a(b).bind("validatorsLoaded formValidationSetup",function(b,c){c||(c=a("form")),f(c)}),a.formUtils.setupValidationUsingHTML5Attr=f}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";var c="placeholder"in document.createElement("INPUT"),d="options"in document.createElement("DATALIST"),e=!1,f=function(b){b.each(function(){var b=a(this),f=b.find("input,textarea,select"),g=!1;f.each(function(){var b=[],c=a(this),f=c.attr("required"),h={};switch((c.attr("type")||"").toLowerCase()){case"time":b.push("time"),a.formUtils.validators.validate_date||e||(e=!0,a.formUtils.loadModules("date"));break;case"url":b.push("url");break;case"email":b.push("email");break;case"date":b.push("date");break;case"number":b.push("number");var i=c.attr("max"),j=c.attr("min");(j||i)&&(j||(j="0"),i||(i="9007199254740992"),h["data-validation-allowing"]="range["+j+";"+i+"]",(0===j.indexOf("-")||0===i.indexOf("-"))&&(h["data-validation-allowing"]+=",negative"),(j.indexOf(".")>-1||i.indexOf(".")>-1)&&(h["data-validation-allowing"]+=",float"))}if(c.attr("pattern")&&(b.push("custom"),h["data-validation-regexp"]=c.attr("pattern")),c.attr("maxlength")&&(b.push("length"),h["data-validation-length"]="max"+c.attr("maxlength")),!d&&c.attr("list")){var k=[],l=a("#"+c.attr("list"));if(l.find("option").each(function(){k.push(a(this).text())}),0===k.length){var m=a.trim(a("#"+c.attr("list")).text()).split("\n");a.each(m,function(b,c){k.push(a.trim(c))})}l.remove(),a.formUtils.suggest(c,k)}if(f&&0===b.length&&b.push("required"),b.length){f||(h["data-validation-optional"]="true"),g=!0;var n=(c.attr("data-validation")||"")+" "+b.join(" ");c.attr("data-validation",a.trim(n)),a.each(h,function(a,b){c.attr(a,b)})}}),g&&b.trigger("html5ValidationAttrsFound"),c||f.filter("input[placeholder]").each(function(){this.defaultValue=this.getAttribute("placeholder"),a(this).bind("focus",function(){this.value===this.defaultValue&&(this.value="",a(this).removeClass("showing-placeholder"))}).bind("blur",function(){""===a.trim(this.value)&&(this.value=this.defaultValue,a(this).addClass("showing-placeholder"))})})})};a(b).bind("validatorsLoaded formValidationSetup",function(b,c){c||(c=a("form")),f(c)}),a.formUtils.setupValidationUsingHTML5Attr=f}(a,window)}); \ No newline at end of file diff --git a/form-validator/jquery.form-validator.js b/form-validator/jquery.form-validator.js index e648789..3985337 100644 --- a/form-validator/jquery.form-validator.js +++ b/form-validator/jquery.form-validator.js @@ -1,841 +1,809 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module unless amdModuleId is set + define(["jquery"], function (a0) { + return (factory(a0)); + }); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(require("jquery")); + } else { + factory(jQuery); + } +}(this, function (jQuery) { + /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ /** - * Utility methods and properties attached to $.formUtils + * Utility methods used for displaying error messages (attached to $.formUtils) */ -(function($, window) { +(function ($) { 'use strict'; - var $win = $(window), - getInputValue = function(query, $parent) { - var $inputs = $parent ? $parent.find(query) : query; - if ($inputs.length > 0 ) { - var type = $inputs.eq(0).attr('type'); - if (type === 'radio' || type === 'checkbox') { - return $inputs.filter(':checked').val(); - } else { - return $inputs.val(); + var errorDialogs = { + + getParentContainer: function ($elem) { + if ($elem.valAttr('error-msg-container')) { + return $($elem.valAttr('error-msg-container')); + } else { + var $parent = $elem.parent(); + if (!$parent.hasClass('form-group') && !$parent.closest('form').hasClass('form-horizontal')) { + var $formGroup = $parent.closest('.form-group'); + if ($formGroup.length) { + return $formGroup.eq(0); } } - return false; - }; - - $.formUtils = $.extend($.formUtils || {}, { - - $win: $win, - - /** - * Default config for $(...).isValid(); - */ - defaultConfig: function () { - return { - ignore: [], // Names of inputs not to be validated even though node attribute containing the validation rules tells us to - errorElementClass: 'error', // Class that will be put on elements which value is invalid - borderColorOnError: '#b94a48', // Border color of elements which value is invalid, empty string to not change border color - errorMessageClass: 'form-error', // class name of div containing error messages when validation fails - validationRuleAttribute: 'data-validation', // name of the attribute holding the validation rules - validationErrorMsgAttribute: 'data-validation-error-msg', // define custom err msg inline with element - errorMessagePosition: 'element', // Can be either "top" or "element" or "custom" - errorMessageTemplate: { - container: '
{messages}
', - messages: '{errorTitle}', - field: '
  • {msg}
  • ' - }, - errorMessageCustom: this.errorDialogs.setTemplateMessage, - scrollToTopOnError: true, - dateFormat: 'yyyy-mm-dd', - addValidClassOnAll: false, // whether or not to apply class="valid" even if the input wasn't validated - decimalSeparator: '.', - inputParentClassOnError: 'has-error', // twitter-bootstrap default class name - inputParentClassOnSuccess: 'has-success', // twitter-bootstrap default class name - validateHiddenInputs: false // whether or not hidden inputs should be validated - }; + return $parent; + } }, + applyErrorStyling: function ($elem, conf) { + $elem + .addClass(conf.errorElementClass) + .removeClass('valid'); - /** - * Available validators - */ - validators: {}, - - /** - * Events triggered by form validator - */ - _events: {load: [], valid: [], invalid: []}, - - /** - * Setting this property to true during validation will - * stop further validation from taking place and form will - * not be sent - */ - haltValidation: false, - - /** - * This variable will be true $.fn.isValid() is called - * and false when $.fn.validateOnBlur is called - */ - isValidatingEntireForm: false, + this.getParentContainer($elem) + .addClass(conf.inputParentClassOnError) + .removeClass(conf.inputParentClassOnSuccess); - /** - * Function for adding a validator - * @param {Object} validator - */ - addValidator: function (validator) { - // prefix with "validate_" for backward compatibility reasons - var name = validator.name.indexOf('validate_') === 0 ? validator.name : 'validate_' + validator.name; - if (validator.validateOnKeyUp === undefined) { - validator.validateOnKeyUp = true; + if (conf.borderColorOnError !== '') { + $elem.css('border-color', conf.borderColorOnError); } - this.validators[name] = validator; }, + removeErrorStyling: function ($elem, conf) { + $elem.each(function () { + var $this = $(this); - /** - * @var {Boolean} - */ - isLoadingModules: false, + errorDialogs.setInlineErrorMessage($this, '', conf, conf.errorMessagePosition); - /** - * @var {Object} - */ - loadedModules: {}, + $this + .removeClass('valid') + .removeClass(conf.errorElementClass) + .css('border-color', ''); - /** - * @example - * $.formUtils.loadModules('date, security.dev'); - * - * Will load the scripts date.js and security.dev.js from the - * directory where this script resides. If you want to load - * the modules from another directory you can use the - * path argument. - * - * The script will be cached by the browser unless the module - * name ends with .dev - * - * @param {String} modules - Comma separated string with module file names (no directory nor file extension) - * @param {String} [path] - Optional, path where the module files is located if their not in the same directory as the core modules - * @param {Boolean|function} [fireEvent] - Optional, whether or not to fire event 'load' when modules finished loading - */ - loadModules: function (modules, path, fireEvent) { + errorDialogs.getParentContainer($this) + .removeClass(conf.inputParentClassOnError) + .removeClass(conf.inputParentClassOnSuccess) + .find('.' + conf.errorMessageClass) // remove inline span holding error message + .remove(); + }); + }, + setInlineErrorMessage: function ($input, errorMsg, conf, $messageContainer) { + var custom = document.getElementById($input.attr('name') + '_err_msg'), + setErrorMessage = function ($elem) { + $.formUtils.$win.trigger('validationErrorDisplay', [$input, $elem]); + $elem.html(errorMsg); + }, + $message; - if (fireEvent === undefined) { - fireEvent = true; + if (custom) { + $.formUtils.warn('Using deprecated element reference ' + custom.id); + $messageContainer = $(custom); + } else if (typeof $messageContainer === 'function') { + $messageContainer = $messageContainer($input, errorMsg, conf); } - if ($.formUtils.isLoadingModules) { - setTimeout(function () { - $.formUtils.loadModules(modules, path, fireEvent); + if (typeof $messageContainer === 'object') { + var $found = false; + $messageContainer.find('.' + conf.errorMessageClass).each(function () { + if (this.inputReferer === $input[0]) { + $found = $(this); + return false; + } }); - return; + if ($found) { + if (!errorMsg) { + $found.remove(); + } else { + setErrorMessage($found); + } + } else if(errorMsg !== '') { + $message = $('
    '); + setErrorMessage($message); + $message[0].inputReferer = $input[0]; + $messageContainer.prepend($message); + } } + else { + var $parent = this.getParentContainer($input); + $message = $parent.find('.' + conf.errorMessageClass + '.help-block'); - var hasLoadedAnyModule = false, - loadModuleScripts = function (modules, path) { + if ($message.length === 0) { + $message = $('').addClass('help-block').addClass(conf.errorMessageClass); + $message.appendTo($parent); + } - var moduleList = $.split(modules), - numModules = moduleList.length, - moduleLoadedCallback = function () { - numModules--; - if (numModules === 0) { - $.formUtils.isLoadingModules = false; - if (fireEvent && hasLoadedAnyModule) { - if( typeof fireEvent === 'function' ) { - fireEvent(); - } else { - $win.trigger('validatorsLoaded'); - } - } - } - }; + setErrorMessage($message); + } + }, + setTemplateMessage: function ($form, title, errorMessages, conf) { + var messages = conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g, title), + fields = [], + container; + $.each(errorMessages, function (i, msg) { + fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g, msg)); + }); - if (numModules > 0) { - $.formUtils.isLoadingModules = true; - } + messages = messages.replace(/\{fields\}/g, fields.join('')); + container = conf.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g, conf.errorMessageClass); + container = container.replace(/\{messages\}/g, messages); + $form.children().eq(0).before(container); + } + }; - var cacheSuffix = '?_=' + ( new Date().getTime() ), - appendToElement = document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]; + $.formUtils = $.extend($.formUtils || {}, { + errorDialogs: errorDialogs + }); - $.each(moduleList, function (i, modName) { - modName = $.trim(modName); - if (modName.length === 0) { - moduleLoadedCallback(); - } - else { - var scriptUrl = path + modName + (modName.slice(-3) === '.js' ? '' : '.js'), - script = document.createElement('SCRIPT'); +})(jQuery); - if (scriptUrl in $.formUtils.loadedModules) { - // already loaded - moduleLoadedCallback(); - } - else { +/** + * File declaring all methods if this plugin which is applied to $.fn. + */ +(function($) { - // Remember that this script is loaded - $.formUtils.loadedModules[scriptUrl] = 1; - hasLoadedAnyModule = true; + var _helpers = 0; - // Load the script - script.type = 'text/javascript'; - script.onload = moduleLoadedCallback; - script.src = scriptUrl + ( scriptUrl.slice(-7) === '.dev.js' ? cacheSuffix : '' ); - script.onerror = function() { - $.formUtils.warn('Unable to load form validation module '+scriptUrl); - }; - script.onreadystatechange = function () { - // IE 7 fix - if (this.readyState === 'complete' || this.readyState === 'loaded') { - moduleLoadedCallback(); - // Handle memory leak in IE - this.onload = null; - this.onreadystatechange = null; - } - }; - appendToElement.appendChild(script); + + /** + * Assigns validateInputOnBlur function to elements blur event + * + * @param {Object} language Optional, will override $.formUtils.LANG + * @param {Object} conf Optional, will override the default settings + * @return {jQuery} + */ + $.fn.validateOnBlur = function (language, conf) { + this.find('*[data-validation]') + .bind('blur.validation', function () { + $(this).validateInputOnBlur(language, conf, true, 'blur'); + }); + if (conf.validateCheckboxRadioOnClick) { + // bind click event to validate on click for radio & checkboxes for nice UX + this.find('input[type=checkbox][data-validation],input[type=radio][data-validation]') + .bind('click.validation', function () { + $(this).validateInputOnBlur(language, conf, true, 'click'); + }); + } + + return this; + }; + + /* + * Assigns validateInputOnBlur function to elements custom event + * @param {Object} language Optional, will override $.formUtils.LANG + * @param {Object} settings Optional, will override the default settings + * * @return {jQuery} + */ + $.fn.validateOnEvent = function (language, settings) { + this.find('*[data-validation-event]') + .each(function () { + var $el = $(this), + etype = $el.valAttr('event'); + if (etype) { + $el + .unbind(etype + '.validation') + .bind(etype + '.validation', function (evt) { + if( (evt || {}).keyCode !== 9 ) { + $(this).validateInputOnBlur(language, settings, true, etype); } - } - }); - }; + }); + } + }); + return this; + }; - if (path) { - loadModuleScripts(modules, path); - } else { - var findScriptPathAndLoadModules = function () { - var foundPath = false; - $('script[src*="form-validator"]').each(function () { - foundPath = this.src.substr(0, this.src.lastIndexOf('/')) + '/'; - if (foundPath === '/') { - foundPath = ''; + /** + * fade in help message when input gains focus + * fade out when input loses focus + * + * + * @param {String} attrName - Optional, default is data-help + * @return {jQuery} + */ + $.fn.showHelpOnFocus = function (attrName) { + if (!attrName) { + attrName = 'data-validation-help'; + } + + // Remove previously added event listeners + this.find('.has-help-txt') + .valAttr('has-keyup-event', false) + .removeClass('has-help-txt'); + + // Add help text listeners + this.find('textarea,input').each(function () { + var $elem = $(this), + className = 'jquery_form_help_' + (++_helpers), + help = $elem.attr(attrName); + + if (help) { + $elem + .addClass('has-help-txt') + .unbind('focus.help') + .bind('focus.help', function () { + var $help = $elem.parent().find('.' + className); + if ($help.length === 0) { + $help = $('') + .addClass(className) + .addClass('help') + .addClass('help-block') // twitter bs + .text(help) + .hide(); + + $elem.after($help); } - return false; + $help.fadeIn(); + }) + .unbind('blur.help') + .bind('blur.help', function () { + $(this) + .parent() + .find('.' + className) + .fadeOut('slow'); }); + } + }); - if (foundPath !== false) { - loadModuleScripts(modules, foundPath); - return true; - } - return false; - }; + return this; + }; - if (!findScriptPathAndLoadModules()) { - $(findScriptPathAndLoadModules); - } - } - }, + /** + * @param {Function} cb + * @param {Object} [conf] + * @param {Object} [lang] + */ + $.fn.validate = function(cb, conf, lang) { + var language = $.extend({}, $.formUtils.LANG, lang || {}); + this.each(function() { + var $elem = $(this), + formDefaultConfig = $elem.closest('form').get(0).validationConfig || {}; - /** - * Warn user via the console if available - */ - warn: function(msg) { - if( 'console' in window ) { - if( typeof window.console.warn === 'function' ) { - window.console.warn(msg); - } else if( typeof window.console.log === 'function' ) { - window.console.log(msg); + $elem.one('validation', function(evt, isValid) { + if ( typeof cb === 'function' ) { + cb(isValid, this, evt); } - } else { - alert(msg); - } - }, + }); - /** - * Validate the value of given element according to the validation rules - * found in the attribute data-validation. Will return an object representing - * a validation result, having the props shouldChangeDisplay, isValid and errorMsg - * @param {jQuery} $elem - * @param {Object} language ($.formUtils.LANG) - * @param {Object} conf - * @param {jQuery} $form - * @param {String} [eventContext] - * @return {Object} - */ - validateInput: function ($elem, language, conf, $form, eventContext) { + $elem.validateInputOnBlur( + language, + $.extend({}, formDefaultConfig, conf || {}), + true + ); + }); + }; - $elem.trigger('beforeValidation'); - conf = conf || $.formUtils.defaultConfig(); - language = language || $.formUtils.LANG; + /** + * Tells whether or not validation of this input will have to postpone the form submit () + * @returns {Boolean} + */ + $.fn.willPostponeValidation = function() { + return (this.valAttr('suggestion-nr') || + this.valAttr('postpone') || + this.hasClass('hasDatepicker')) && + !window.postponedValidation; + }; - var value = getInputValue($elem), - result = {isValid: true, shouldChangeDisplay:true, errorMsg:''}, - inputIsOptional = $elem.valAttr('optional') === 'true', - skipBecauseDependingInputIsEmpty = false, - skipBecauseItsEmpty = !value && inputIsOptional, - skipBecauseInputIsHidden = $elem.attr('disabled') || (!$elem.is(':visible') && !conf.validateHiddenInputs), - validationDependsOn = $elem.valAttr('depends-on') || $elem.valAttr('if-checked'); + /** + * Validate single input when it loses focus + * shows error message in a span element + * that is appended to the parent element + * + * @param {Object} [language] Optional, will override $.formUtils.LANG + * @param {Object} [conf] Optional, will override the default settings + * @param {Boolean} attachKeyupEvent Optional + * @param {String} eventType + * @return {jQuery} + */ + $.fn.validateInputOnBlur = function (language, conf, attachKeyupEvent, eventType) { - if (skipBecauseInputIsHidden) { - result.shouldChangeDisplay = false; - return result; - } + $.formUtils.eventType = eventType; - // Whether or not this input should be validated depends on if another input has a value - if (validationDependsOn) { + if ( this.willPostponeValidation() ) { + // This validation has to be postponed + var _self = this, + postponeTime = this.valAttr('postpone') || 200; - // Set the boolean telling us that the validation depends - // on another input being checked - var valueOfDependingInput = getInputValue('input[name="' + validationDependsOn + '"]', $form), - requiredValueOfDependingInput = $elem.valAttr('depends-on-value') || $elem.valAttr('if-checked-value'), - dependingInputHasRequiredValue = !requiredValueOfDependingInput || requiredValueOfDependingInput === valueOfDependingInput; + window.postponedValidation = function () { + _self.validateInputOnBlur(language, conf, attachKeyupEvent, eventType); + window.postponedValidation = false; + }; - if (valueOfDependingInput && dependingInputHasRequiredValue) { - skipBecauseDependingInputIsEmpty = false; - } else { - skipBecauseDependingInputIsEmpty = true; + setTimeout(function () { + if (window.postponedValidation) { + window.postponedValidation(); } - } + }, postponeTime); + return this; + } - // For input type="number", browsers attempt to parse the entered value into a number. - // If the input is not numeric, browsers handle the situation differently: - // Chrome 48 simply disallows non-numeric input; FF 44 clears out the input box on blur; - // Safari 5 parses the entered string to find a leading number. - // If the input fails browser validation, the browser sets the input value equal to an empty string. - // Therefore, we cannot distinguish (apart from hacks) between an empty input type="text" and one with a - // value that can't be parsed by the browser. + language = $.extend({}, $.formUtils.LANG, language || {}); - if (skipBecauseItsEmpty || skipBecauseDependingInputIsEmpty) { - result.shouldChangeDisplay = conf.addValidClassOnAll; - return result; - } + $.formUtils.errorDialogs.removeErrorStyling(this, conf); - var validationRules = $elem.attr(conf.validationRuleAttribute), + var $elem = this, + $form = $elem.closest('form'), + result = $.formUtils.validateInput( + $elem, + language, + conf, + $form, + eventType + ); - // see if form element has inline err msg attribute - validationErrorMsg = true; + if (attachKeyupEvent) { + $elem.unbind('keyup.validation'); + } - if (!validationRules) { - result.shouldChangeDisplay = conf.addValidClassOnAll; - return result; + if ( result.isValid ) { + if( result.shouldChangeDisplay ) { + $elem.addClass('valid'); + $.formUtils.errorDialogs.getParentContainer($elem) + .addClass(conf.inputParentClassOnSuccess); } + } + else if (!result.isValid) { - // Filter out specified characters - var ignore = $elem.valAttr('ignore'); - if (ignore) { - $.each(ignore.split(''), function(i, char) { - value = value.replace(new RegExp('\\'+char), ''); + $.formUtils.errorDialogs.applyErrorStyling($elem, conf); + $.formUtils.errorDialogs.setInlineErrorMessage($elem, result.errorMsg, conf, conf.errorMessagePosition); + + if (attachKeyupEvent) { + $elem.bind('keyup.validation', function (evt) { + if( evt.keyCode !== 9 ) { + $(this).validateInputOnBlur(language, conf, false, 'keyup'); + } }); } + } - $.split(validationRules, function (rule) { - if (rule.indexOf('validate_') !== 0) { - rule = 'validate_' + rule; - } - - var validator = $.formUtils.validators[rule]; + return this; + }; - if (validator && typeof validator.validatorFunction === 'function') { + /** + * Short hand for fetching/adding/removing element attributes + * prefixed with 'data-validation-' + * + * @param {String} name + * @param {String|Boolean} [val] + * @return string|undefined + * @protected + */ + $.fn.valAttr = function (name, val) { + if (val === undefined) { + return this.attr('data-validation-' + name); + } else if (val === false || val === null) { + return this.removeAttr('data-validation-' + name); + } else { + name = ((name.length > 0) ? '-' + name : ''); + return this.attr('data-validation' + name, val); + } + }; - // special change of element for checkbox_group rule - if (rule === 'validate_checkbox_group') { - // set element to first in group, so error msg attr doesn't need to be set on all elements in group - $elem = $form.find('[name="' + $elem.attr('name') + '"]:eq(0)'); - } + /** + * Function that validates all inputs in active form + * + * @param {Object} [language] + * @param {Object} [conf] + * @param {Boolean} [displayError] Defaults to true + */ + $.fn.isValid = function (language, conf, displayError) { - var isValid = null; - if (eventContext !== 'keyup' || validator.validateOnKeyUp) { - isValid = validator.validatorFunction(value, $elem, conf, language, $form); - } + if ($.formUtils.isLoadingModules) { + var $self = this; + setTimeout(function () { + $self.isValid(language, conf, displayError); + }, 200); + return null; + } - if (!isValid) { - validationErrorMsg = null; - if (isValid !== null) { - validationErrorMsg = $elem.attr(conf.validationErrorMsgAttribute + '-' + rule.replace('validate_', '')); - if (!validationErrorMsg) { - validationErrorMsg = $elem.attr(conf.validationErrorMsgAttribute); - if (!validationErrorMsg) { - if (typeof validator.errorMessageKey !== 'function') { - validationErrorMsg = language[validator.errorMessageKey]; - } - else { - validationErrorMsg = language[validator.errorMessageKey(conf)]; - } - if (!validationErrorMsg) { - validationErrorMsg = validator.errorMessage; - } - } - } - } - return false; // break iteration - } + conf = $.extend({}, $.formUtils.defaultConfig(), conf || {}); + language = $.extend({}, $.formUtils.LANG, language || {}); + displayError = displayError !== false; - } else { + if ($.formUtils.errorDisplayPreventedWhenHalted) { + // isValid() was called programmatically with argument displayError set + // to false when the validation was halted by any of the validators + delete $.formUtils.errorDisplayPreventedWhenHalted; + displayError = false; + } - throw new Error('Using undefined validator "' + rule + - '". Maybe you have forgotten to load the module that "' + rule +'" belongs to?'); + $.formUtils.isValidatingEntireForm = true; + $.formUtils.haltValidation = false; + /** + * Adds message to error message stack if not already in the message stack + * + * @param {String} mess + * @para {jQuery} $elem + */ + var addErrorMessage = function (mess, $elem) { + if ($.inArray(mess, errorMessages) < 0) { + errorMessages.push(mess); } + errorInputs.push($elem); + $elem.attr('current-error', mess); + if (displayError) { + $.formUtils.errorDialogs.applyErrorStyling($elem, conf); + } + }, - }, ' '); + /** Holds inputs (of type checkox or radio) already validated, to prevent recheck of mulitple checkboxes & radios */ + checkedInputs = [], - if (typeof validationErrorMsg === 'string') { - $elem.trigger('validation', false); - result.errorMsg = validationErrorMsg; - result.isValid = false; - result.shouldChangeDisplay = true; - } else if (validationErrorMsg === null) { - result.shouldChangeDisplay = conf.addValidClassOnAll; - } else { - $elem.trigger('validation', true); - result.shouldChangeDisplay = true; - } + /** Error messages for this validation */ + errorMessages = [], - // Run element validation callback - if (typeof conf.onElementValidate === 'function' && validationErrorMsg !== null) { - conf.onElementValidate(result.isValid, $elem, $form, validationErrorMsg); - } + /** Input elements which value was not valid */ + errorInputs = [], - return result; - }, + /** Form instance */ + $form = this, - /** - * Is it a correct date according to given dateFormat. Will return false if not, otherwise - * an array 0=>year 1=>month 2=>day - * - * @param {String} val - * @param {String} dateFormat - * @param {Boolean} [addMissingLeadingZeros] - * @return {Array}|{Boolean} - */ - parseDate: function (val, dateFormat, addMissingLeadingZeros) { - var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0, 1), - regexp = '^', - formatParts = dateFormat.split(divider || null), - matches, day, month, year; + /** + * Tells whether or not to validate element with this name and of this type + * + * @param {String} name + * @param {String} type + * @return {Boolean} + */ + ignoreInput = function (name, type) { + if (type === 'submit' || type === 'button' || type === 'reset') { + return true; + } + return $.inArray(name, conf.ignore || []) > -1; + }; - $.each(formatParts, function (i, part) { - regexp += (i > 0 ? '\\' + divider : '') + '(\\d{' + part.length + '})'; - }); + // Reset style and remove error class + if (displayError) { + $form.find('.' + conf.errorMessageClass + '.alert').remove(); + $.formUtils.errorDialogs.removeErrorStyling($form.find('.' + conf.errorElementClass + ',.valid'), conf); + } - regexp += '$'; + // Validate element values + $form.find('input,textarea,select').filter(':not([type="submit"],[type="button"])').each(function () { + var $elem = $(this), + elementType = $elem.attr('type'), + isCheckboxOrRadioBtn = elementType === 'radio' || elementType === 'checkbox', + elementName = $elem.attr('name'); - if (addMissingLeadingZeros) { - var newValueParts = []; - $.each(val.split(divider), function(i, part) { - if(part.length === 1) { - part = '0'+part; - } - newValueParts.push(part); - }); - val = newValueParts.join(divider); - } + if (!ignoreInput(elementName, elementType) && (!isCheckboxOrRadioBtn || $.inArray(elementName, checkedInputs) < 0)) { + + if (isCheckboxOrRadioBtn) { + checkedInputs.push(elementName); + } + + var result = $.formUtils.validateInput( + $elem, + language, + conf, + $form, + 'submit' + ); - matches = val.match(new RegExp(regexp)); - if (matches === null) { - return false; - } + if( result.shouldChangeDisplay ) { + if ( !result.isValid ) { + addErrorMessage(result.errorMsg, $elem); + } else if( result.isValid ) { + $elem + .valAttr('current-error', false) + .addClass('valid'); - var findDateUnit = function (unit, formatParts, matches) { - for (var i = 0; i < formatParts.length; i++) { - if (formatParts[i].substring(0, 1) === unit) { - return $.formUtils.parseDateInt(matches[i + 1]); + $.formUtils.errorDialogs.getParentContainer($elem) + .addClass(conf.inputParentClassOnSuccess); } } - return -1; - }; - - month = findDateUnit('m', formatParts, matches); - day = findDateUnit('d', formatParts, matches); - year = findDateUnit('y', formatParts, matches); + } + }); - if ((month === 2 && day > 28 && (year % 4 !== 0 || year % 100 === 0 && year % 400 !== 0)) || - (month === 2 && day > 29 && (year % 4 === 0 || year % 100 !== 0 && year % 400 === 0)) || - month > 12 || month === 0) { - return false; + // Run validation callback + if (typeof conf.onValidate === 'function') { + var errors = conf.onValidate($form); + if ($.isArray(errors)) { + $.each(errors, function (i, err) { + addErrorMessage(err.message, err.element); + }); } - if ((this.isShortMonth(month) && day > 30) || (!this.isShortMonth(month) && day > 31) || day === 0) { - return false; + else if (errors && errors.element && errors.message) { + addErrorMessage(errors.message, errors.element); } + } - return [year, month, day]; - }, + // Reset form validation flag + $.formUtils.isValidatingEntireForm = false; - /** - * skum fix. är talet 05 eller lägre ger parseInt rätt int annars får man 0 när man kör parseInt? - * - * @param {String} val - * @return {Number} - */ - parseDateInt: function (val) { - if (val.indexOf('0') === 0) { - val = val.replace('0', ''); + // Validation failed + if (!$.formUtils.haltValidation && errorInputs.length > 0) { + + if (displayError) { + // display all error messages in top of form + if (conf.errorMessagePosition === 'top') { + $.formUtils.errorDialogs.setTemplateMessage($form, language.errorTitle, errorMessages, conf); + } + // Customize display message + else if (conf.errorMessagePosition === 'custom') { + $.formUtils.warn('Use deprecated function errorMessageCustom'); + if (typeof conf.errorMessageCustom === 'function') { + conf.errorMessageCustom($form, language.errorTitle, errorMessages, conf); + } + } + // Display error message below input field or in defined container + else { + $.each(errorInputs, function (i, $input) { + $.formUtils.errorDialogs.setInlineErrorMessage($input, $input.attr('current-error'), conf, conf.errorMessagePosition); + }); + } + + if (conf.scrollToTopOnError) { + $.formUtils.$win.scrollTop($form.offset().top - 20); + } } - return parseInt(val, 10); - }, - /** - * Has month only 30 days? - * - * @param {Number} m - * @return {Boolean} - */ - isShortMonth: function (m) { - return (m % 2 === 0 && m < 7) || (m % 2 !== 0 && m > 7); - }, + return false; + } - /** - * Restrict input length - * - * @param {jQuery} $inputElement Jquery Html object - * @param {jQuery} $maxLengthElement jQuery Html Object - * @return void - */ - lengthRestriction: function ($inputElement, $maxLengthElement) { - // read maxChars from counter display initial text value - var maxChars = parseInt($maxLengthElement.text(), 10), - charsLeft = 0, + if (!displayError && $.formUtils.haltValidation) { + $.formUtils.errorDisplayPreventedWhenHalted = true; + } - // internal function does the counting and sets display value - countCharacters = function () { - var numChars = $inputElement.val().length; - if (numChars > maxChars) { - // get current scroll bar position - var currScrollTopPos = $inputElement.scrollTop(); - // trim value to max length - $inputElement.val($inputElement.val().substring(0, maxChars)); - $inputElement.scrollTop(currScrollTopPos); - } - charsLeft = maxChars - numChars; - if (charsLeft < 0) { - charsLeft = 0; - } + return !$.formUtils.haltValidation; + }; - // set counter text - $maxLengthElement.text(charsLeft); - }; + /** + * @deprecated + * @param language + * @param conf + */ + $.fn.validateForm = function (language, conf) { + $.formUtils.warn('Use of deprecated function $.validateForm, use $.isValid instead'); + return this.isValid(language, conf, true); + }; - // bind events to this element - // setTimeout is needed, cut or paste fires before val is available - $($inputElement).bind('keydown keyup keypress focus blur', countCharacters) - .bind('cut paste', function () { - setTimeout(countCharacters, 100); - }); + /** + * Plugin for displaying input length restriction + */ + $.fn.restrictLength = function (maxLengthElement) { + new $.formUtils.lengthRestriction(this, maxLengthElement); + return this; + }; - // count chars on pageload, if there are prefilled input-values - $(document).bind('ready', countCharacters); - }, + /** + * Add suggestion dropdown to inputs having data-suggestions with a comma + * separated string with suggestions + * @param {Array} [settings] + * @returns {jQuery} + */ + $.fn.addSuggestions = function (settings) { + var sugs = false; + this.find('input').each(function () { + var $field = $(this); - /** - * Test numeric against allowed range - * - * @param $value int - * @param $rangeAllowed str; (1-2, min1, max2, 10) - * @return array - */ - numericRangeCheck: function (value, rangeAllowed) { - // split by dash - var range = $.split(rangeAllowed), - // min or max - minmax = parseInt(rangeAllowed.substr(3), 10); + sugs = $.split($field.attr('data-suggestions')); - if( range.length === 1 && rangeAllowed.indexOf('min') === -1 && rangeAllowed.indexOf('max') === -1 ) { - range = [rangeAllowed, rangeAllowed]; // only a number, checking agains an exact number of characters + if (sugs.length > 0 && !$field.hasClass('has-suggestions')) { + $.formUtils.suggest($field, sugs, settings); + $field.addClass('has-suggestions'); } + }); + return this; + }; - // range ? - if (range.length === 2 && (value < parseInt(range[0], 10) || value > parseInt(range[1], 10) )) { - return [ 'out', range[0], range[1] ]; - } // value is out of range - else if (rangeAllowed.indexOf('min') === 0 && (value < minmax )) // min - { - return ['min', minmax]; - } // value is below min - else if (rangeAllowed.indexOf('max') === 0 && (value > minmax )) // max - { - return ['max', minmax]; - } // value is above max - // since no other returns executed, value is in allowed range - return [ 'ok' ]; - }, +})(jQuery); - _numSuggestionElements: 0, - _selectedSuggestion: null, - _previousTypedVal: null, +/** + * jQuery Form Validator Module: JSconf + * ------------------------------------------ + * Created by Victor Jonsson + * + * This module makes it possible to configure form validation using javascript + * + * @website http://formvalidator.net/#location-validators + * @license MIT + */ +(function($) { - /** - * Utility function that can be used to create plugins that gives - * suggestions when inputs is typed into - * @param {jQuery} $elem - * @param {Array} suggestions - * @param {Object} settings - Optional - * @return {jQuery} - */ - suggest: function ($elem, suggestions, settings) { - var conf = { - css: { - maxHeight: '150px', - background: '#FFF', - lineHeight: '150%', - textDecoration: 'underline', - overflowX: 'hidden', - overflowY: 'auto', - border: '#CCC solid 1px', - borderTop: 'none', - cursor: 'pointer' - }, - activeSuggestionCSS: { - background: '#E9E9E9' - } - }, - setSuggsetionPosition = function ($suggestionContainer, $input) { - var offset = $input.offset(); - $suggestionContainer.css({ - width: $input.outerWidth(), - left: offset.left + 'px', - top: (offset.top + $input.outerHeight()) + 'px' - }); - }; + 'use strict'; - if (settings) { - $.extend(conf, settings); - } + $.setupValidation = function(conf) { + var $forms = $(conf.form || 'form'); + $.each(conf.validate || conf.validation || {}, function(elemRef, attr) { + var $elem; + if ( elemRef[0] === '#' ) { + $elem = $(elemRef); + } + else if ( elemRef[0] === '.' ) { + $elem = $forms.find(elemRef); + } + else { + $elem = $forms.find('*[name="' +elemRef+ '"]'); + } - conf.css.position = 'absolute'; - conf.css['z-index'] = 9999; - $elem.attr('autocomplete', 'off'); + $elem.attr('data-validation', attr.validation); - if (this._numSuggestionElements === 0) { - // Re-position suggestion container if window size changes - $win.bind('resize', function () { - $('.jquery-form-suggestions').each(function () { - var $container = $(this), - suggestID = $container.attr('data-suggest-container'); - setSuggsetionPosition($container, $('.suggestions-' + suggestID).eq(0)); - }); + $.each(attr, function(name, val) { + if( name !== 'validation' && val !== false) { + if( val === true ) { + val = 'true'; + } + if( name[0] === '_' ) { + name = name.substring(1); + if( val === false ) { + $elem.removeAttr(name); + } else { + $elem.attr(name, val); + } + } else { + $elem.valAttr(name, val); + } + } }); - } + }); - this._numSuggestionElements++; + $.validate(conf); - var onSelectSuggestion = function ($el) { - var suggestionId = $el.valAttr('suggestion-nr'); - $.formUtils._selectedSuggestion = null; - $.formUtils._previousTypedVal = null; - $('.jquery-form-suggestion-' + suggestionId).fadeOut('fast'); - }; + }; - $elem - .data('suggestions', suggestions) - .valAttr('suggestion-nr', this._numSuggestionElements) - .unbind('focus.suggest') - .bind('focus.suggest', function () { - $(this).trigger('keyup'); - $.formUtils._selectedSuggestion = null; - }) - .unbind('keyup.suggest') - .bind('keyup.suggest', function () { - var $input = $(this), - foundSuggestions = [], - val = $.trim($input.val()).toLocaleLowerCase(); +})(jQuery); - if (val === $.formUtils._previousTypedVal) { - return; - } - else { - $.formUtils._previousTypedVal = val; - } +/** + * Utility methods used for handling loading of modules (attached to $.formUtils) + */ +(function($) { - var hasTypedSuggestion = false, - suggestionId = $input.valAttr('suggestion-nr'), - $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); + 'use strict'; - $suggestionContainer.scrollTop(0); + $.formUtils = $.extend($.formUtils || {}, { - // Find the right suggestions - if (val !== '') { - var findPartial = val.length > 2; - $.each($input.data('suggestions'), function (i, suggestion) { - var lowerCaseVal = suggestion.toLocaleLowerCase(); - if (lowerCaseVal === val) { - foundSuggestions.push('' + suggestion + ''); - hasTypedSuggestion = true; - return false; - } else if (lowerCaseVal.indexOf(val) === 0 || (findPartial && lowerCaseVal.indexOf(val) > -1)) { - foundSuggestions.push(suggestion.replace(new RegExp(val, 'gi'), '$&')); - } - }); - } + /** + * Available validators + */ + validators: {}, - // Hide suggestion container - if (hasTypedSuggestion || (foundSuggestions.length === 0 && $suggestionContainer.length > 0)) { - $suggestionContainer.hide(); - } + /** + * @var {Boolean} + */ + isLoadingModules: false, - // Create suggestion container if not already exists - else if (foundSuggestions.length > 0 && $suggestionContainer.length === 0) { - $suggestionContainer = $('
    ').css(conf.css).appendTo('body'); - $elem.addClass('suggestions-' + suggestionId); - $suggestionContainer - .attr('data-suggest-container', suggestionId) - .addClass('jquery-form-suggestions') - .addClass('jquery-form-suggestion-' + suggestionId); - } + /** + * @var {Object} + */ + loadedModules: {}, - // Show hidden container - else if (foundSuggestions.length > 0 && !$suggestionContainer.is(':visible')) { - $suggestionContainer.show(); - } + /** + * @example + * $.formUtils.loadModules('date, security.dev'); + * + * Will load the scripts date.js and security.dev.js from the + * directory where this script resides. If you want to load + * the modules from another directory you can use the + * path argument. + * + * The script will be cached by the browser unless the module + * name ends with .dev + * + * @param {String} modules - Comma separated string with module file names (no directory nor file extension) + * @param {String} [path] - Optional, path where the module files is located if their not in the same directory as the core modules + * @param {Boolean|function} [fireEvent] - Optional, whether or not to fire event 'load' when modules finished loading + */ + loadModules: function (modules, path, fireEvent) { - // add suggestions - if (foundSuggestions.length > 0 && val.length !== foundSuggestions[0].length) { + if (fireEvent === undefined) { + fireEvent = true; + } - // put container in place every time, just in case - setSuggsetionPosition($suggestionContainer, $input); + if ($.formUtils.isLoadingModules) { + setTimeout(function () { + $.formUtils.loadModules(modules, path, fireEvent); + }, 10); + return; + } - // Add suggestions HTML to container - $suggestionContainer.html(''); - $.each(foundSuggestions, function (i, text) { - $('
    ') - .append(text) - .css({ - overflow: 'hidden', - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - padding: '5px' - }) - .addClass('form-suggest-element') - .appendTo($suggestionContainer) - .click(function () { - $input.focus(); - $input.val($(this).text()); - onSelectSuggestion($input); - }); - }); - } - }) - .unbind('keydown.validation') - .bind('keydown.validation', function (e) { - var code = (e.keyCode ? e.keyCode : e.which), - suggestionId, - $suggestionContainer, - $input = $(this); + var hasLoadedAnyModule = false, + loadModuleScripts = function (modules, path) { - if (code === 13 && $.formUtils._selectedSuggestion !== null) { - suggestionId = $input.valAttr('suggestion-nr'); - $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); - if ($suggestionContainer.length > 0) { - var newText = $suggestionContainer.find('div').eq($.formUtils._selectedSuggestion).text(); - $input.val(newText); - onSelectSuggestion($input); - e.preventDefault(); - } - } - else { - suggestionId = $input.valAttr('suggestion-nr'); - $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); - var $suggestions = $suggestionContainer.children(); - if ($suggestions.length > 0 && $.inArray(code, [38, 40]) > -1) { - if (code === 38) { // key up - if ($.formUtils._selectedSuggestion === null) { - $.formUtils._selectedSuggestion = $suggestions.length - 1; - } - else{ - $.formUtils._selectedSuggestion--; - } - if ($.formUtils._selectedSuggestion < 0) { - $.formUtils._selectedSuggestion = $suggestions.length - 1; - } - } - else if (code === 40) { // key down - if ($.formUtils._selectedSuggestion === null) { - $.formUtils._selectedSuggestion = 0; - } - else { - $.formUtils._selectedSuggestion++; - } - if ($.formUtils._selectedSuggestion > ($suggestions.length - 1)) { - $.formUtils._selectedSuggestion = 0; + var moduleList = $.split(modules), + numModules = moduleList.length, + moduleLoadedCallback = function () { + numModules--; + if (numModules === 0) { + $.formUtils.isLoadingModules = false; + if (fireEvent && hasLoadedAnyModule) { + if( typeof fireEvent === 'function' ) { + fireEvent(); + } else { + $.formUtils.$win.trigger('validatorsLoaded'); + } } } + }; - // Scroll in suggestion window - var containerInnerHeight = $suggestionContainer.innerHeight(), - containerScrollTop = $suggestionContainer.scrollTop(), - suggestionHeight = $suggestionContainer.children().eq(0).outerHeight(), - activeSuggestionPosY = suggestionHeight * ($.formUtils._selectedSuggestion); - if (activeSuggestionPosY < containerScrollTop || activeSuggestionPosY > (containerScrollTop + containerInnerHeight)) { - $suggestionContainer.scrollTop(activeSuggestionPosY); + if (numModules > 0) { + $.formUtils.isLoadingModules = true; + } + + var cacheSuffix = '?_=' + ( new Date().getTime() ), + appendToElement = document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]; + + $.each(moduleList, function (i, modName) { + modName = $.trim(modName); + if (modName.length === 0) { + moduleLoadedCallback(); + } + else { + var scriptUrl = path + modName + (modName.slice(-3) === '.js' ? '' : '.js'), + script = document.createElement('SCRIPT'); + + if (scriptUrl in $.formUtils.loadedModules) { + // already loaded + moduleLoadedCallback(); } + else { + + // Remember that this script is loaded + $.formUtils.loadedModules[scriptUrl] = 1; + hasLoadedAnyModule = true; - $suggestions - .removeClass('active-suggestion') - .css('background', 'none') - .eq($.formUtils._selectedSuggestion) - .addClass('active-suggestion') - .css(conf.activeSuggestionCSS); + // Load the script + script.type = 'text/javascript'; + script.onload = moduleLoadedCallback; + script.src = scriptUrl + ( scriptUrl.slice(-7) === '.dev.js' ? cacheSuffix : '' ); + script.onerror = function() { + $.formUtils.warn('Unable to load form validation module '+scriptUrl); + }; + script.onreadystatechange = function () { + // IE 7 fix + if (this.readyState === 'complete' || this.readyState === 'loaded') { + moduleLoadedCallback(); + // Handle memory leak in IE + this.onload = null; + this.onreadystatechange = null; + } + }; + appendToElement.appendChild(script); + } + } + }); + }; - e.preventDefault(); - return false; + if (path) { + loadModuleScripts(modules, path); + } else { + var findScriptPathAndLoadModules = function () { + var foundPath = false; + $('script[src*="form-validator"]').each(function () { + foundPath = this.src.substr(0, this.src.lastIndexOf('/')) + '/'; + if (foundPath === '/') { + foundPath = ''; } - } - }) - .unbind('blur.suggest') - .bind('blur.suggest', function () { - onSelectSuggestion($(this)); - }); + return false; + }); - return $elem; - }, + if (foundPath !== false) { + loadModuleScripts(modules, foundPath); + return true; + } + return false; + }; - /** - * Error dialogs - * - * @var {Object} - */ - LANG: { - errorTitle: 'Form submission failed!', - requiredField: 'This is a required field', - requiredFields: 'You have not answered all required fields', - badTime: 'You have not given a correct time', - badEmail: 'You have not given a correct e-mail address', - badTelephone: 'You have not given a correct phone number', - badSecurityAnswer: 'You have not given a correct answer to the security question', - badDate: 'You have not given a correct date', - lengthBadStart: 'The input value must be between ', - lengthBadEnd: ' characters', - lengthTooLongStart: 'The input value is longer than ', - lengthTooShortStart: 'The input value is shorter than ', - notConfirmed: 'Input values could not be confirmed', - badDomain: 'Incorrect domain value', - badUrl: 'The input value is not a correct URL', - badCustomVal: 'The input value is incorrect', - andSpaces: ' and spaces ', - badInt: 'The input value was not a correct number', - badSecurityNumber: 'Your social security number was incorrect', - badUKVatAnswer: 'Incorrect UK VAT Number', - badStrength: 'The password isn\'t strong enough', - badNumberOfSelectedOptionsStart: 'You have to choose at least ', - badNumberOfSelectedOptionsEnd: ' answers', - badAlphaNumeric: 'The input value can only contain alphanumeric characters ', - badAlphaNumericExtra: ' and ', - wrongFileSize: 'The file you are trying to upload is too large (max %s)', - wrongFileType: 'Only files of type %s is allowed', - groupCheckedRangeStart: 'Please choose between ', - groupCheckedTooFewStart: 'Please choose at least ', - groupCheckedTooManyStart: 'Please choose a maximum of ', - groupCheckedEnd: ' item(s)', - badCreditCard: 'The credit card number is not correct', - badCVV: 'The CVV number was not correct', - wrongFileDim : 'Incorrect image dimensions,', - imageTooTall : 'the image can not be taller than', - imageTooWide : 'the image can not be wider than', - imageTooSmall : 'the image was too small', - min : 'min', - max : 'max', - imageRatioNotAccepted : 'Image ratio is not be accepted', - badBrazilTelephoneAnswer: 'The phone number entered is invalid', - badBrazilCEPAnswer: 'The CEP entered is invalid', - badBrazilCPFAnswer: 'The CPF entered is invalid' + if (!findScriptPathAndLoadModules()) { + $(findScriptPathAndLoadModules); + } + } } + }); -})(jQuery, window); +})(jQuery); /** * Setup function for the plugin @@ -1007,19 +975,94 @@ })(jQuery); /** - * Utility methods used for handling loading of modules (attached to $.formUtils) + * Utility methods and properties attached to $.formUtils */ -(function($) { +(function($, window) { 'use strict'; + var $win = $(window), + getInputValue = function(query, $parent) { + var $inputs = $parent ? $parent.find(query) : query; + if ($inputs.length > 0 ) { + var type = $inputs.eq(0).attr('type'); + if (type === 'radio' || type === 'checkbox') { + return $inputs.filter(':checked').val(); + } else { + return $inputs.val(); + } + } + return false; + }; + $.formUtils = $.extend($.formUtils || {}, { + $win: $win, + + /** + * Default config for $(...).isValid(); + */ + defaultConfig: function () { + return { + ignore: [], // Names of inputs not to be validated even though node attribute containing the validation rules tells us to + errorElementClass: 'error', // Class that will be put on elements which value is invalid + borderColorOnError: '#b94a48', // Border color of elements which value is invalid, empty string to not change border color + errorMessageClass: 'form-error', // class name of div containing error messages when validation fails + validationRuleAttribute: 'data-validation', // name of the attribute holding the validation rules + validationErrorMsgAttribute: 'data-validation-error-msg', // define custom err msg inline with element + errorMessagePosition: 'element', // Can be either "top" or "element" or "custom" + errorMessageTemplate: { + container: '
    {messages}
    ', + messages: '{errorTitle}
      {fields}
    ', + field: '
  • {msg}
  • ' + }, + errorMessageCustom: this.errorDialogs.setTemplateMessage, + scrollToTopOnError: true, + dateFormat: 'yyyy-mm-dd', + addValidClassOnAll: false, // whether or not to apply class="valid" even if the input wasn't validated + decimalSeparator: '.', + inputParentClassOnError: 'has-error', // twitter-bootstrap default class name + inputParentClassOnSuccess: 'has-success', // twitter-bootstrap default class name + validateHiddenInputs: false // whether or not hidden inputs should be validated + }; + }, + /** * Available validators */ validators: {}, + /** + * Events triggered by form validator + */ + _events: {load: [], valid: [], invalid: []}, + + /** + * Setting this property to true during validation will + * stop further validation from taking place and form will + * not be sent + */ + haltValidation: false, + + /** + * This variable will be true $.fn.isValid() is called + * and false when $.fn.validateOnBlur is called + */ + isValidatingEntireForm: false, + + /** + * Function for adding a validator + * @param {Object} validator + */ + addValidator: function (validator) { + // prefix with "validate_" for backward compatibility reasons + var name = validator.name.indexOf('validate_') === 0 ? validator.name : 'validate_' + validator.name; + if (validator.validateOnKeyUp === undefined) { + validator.validateOnKeyUp = true; + } + this.validators[name] = validator; + }, + /** * @var {Boolean} */ @@ -1055,7 +1098,7 @@ if ($.formUtils.isLoadingModules) { setTimeout(function () { $.formUtils.loadModules(modules, path, fireEvent); - }, 10); + }); return; } @@ -1072,7 +1115,7 @@ if( typeof fireEvent === 'function' ) { fireEvent(); } else { - $.formUtils.$win.trigger('validatorsLoaded'); + $win.trigger('validatorsLoaded'); } } } @@ -1138,656 +1181,637 @@ foundPath = ''; } return false; - }); - - if (foundPath !== false) { - loadModuleScripts(modules, foundPath); - return true; - } - return false; - }; - - if (!findScriptPathAndLoadModules()) { - $(findScriptPathAndLoadModules); - } - } - } - - }); - -})(jQuery); - -/** - * jQuery Form Validator Module: JSconf - * ------------------------------------------ - * Created by Victor Jonsson - * - * This module makes it possible to configure form validation using javascript - * - * @website http://formvalidator.net/#location-validators - * @license MIT - */ -(function($) { - - 'use strict'; - - $.setupValidation = function(conf) { - var $forms = $(conf.form || 'form'); - $.each(conf.validate || conf.validation || {}, function(elemRef, attr) { - var $elem; - if ( elemRef[0] === '#' ) { - $elem = $(elemRef); - } - else if ( elemRef[0] === '.' ) { - $elem = $forms.find(elemRef); - } - else { - $elem = $forms.find('*[name="' +elemRef+ '"]'); - } - - $elem.attr('data-validation', attr.validation); - - $.each(attr, function(name, val) { - if( name !== 'validation' && val !== false) { - if( val === true ) { - val = 'true'; - } - if( name[0] === '_' ) { - name = name.substring(1); - if( val === false ) { - $elem.removeAttr(name); - } else { - $elem.attr(name, val); - } - } else { - $elem.valAttr(name, val); - } + }); + + if (foundPath !== false) { + loadModuleScripts(modules, foundPath); + return true; } - }); - }); + return false; + }; - $.validate(conf); + if (!findScriptPathAndLoadModules()) { + $(findScriptPathAndLoadModules); + } + } + }, - }; + /** + * Warn user via the console if available + */ + warn: function(msg) { + if( 'console' in window ) { + if( typeof window.console.warn === 'function' ) { + window.console.warn(msg); + } else if( typeof window.console.log === 'function' ) { + window.console.log(msg); + } + } else { + alert(msg); + } + }, -})(jQuery); + /** + * Validate the value of given element according to the validation rules + * found in the attribute data-validation. Will return an object representing + * a validation result, having the props shouldChangeDisplay, isValid and errorMsg + * @param {jQuery} $elem + * @param {Object} language ($.formUtils.LANG) + * @param {Object} conf + * @param {jQuery} $form + * @param {String} [eventContext] + * @return {Object} + */ + validateInput: function ($elem, language, conf, $form, eventContext) { -/** - * File declaring all methods if this plugin which is applied to $.fn. - */ -(function($) { + $elem.trigger('beforeValidation'); + conf = conf || $.formUtils.defaultConfig(); + language = language || $.formUtils.LANG; - var _helpers = 0; + var value = getInputValue($elem), + result = {isValid: true, shouldChangeDisplay:true, errorMsg:''}, + inputIsOptional = $elem.valAttr('optional') === 'true', + skipBecauseDependingInputIsEmpty = false, + skipBecauseItsEmpty = !value && inputIsOptional, + skipBecauseInputIsHidden = $elem.attr('disabled') || (!$elem.is(':visible') && !conf.validateHiddenInputs), + validationDependsOn = $elem.valAttr('depends-on') || $elem.valAttr('if-checked'); + if (skipBecauseInputIsHidden) { + result.shouldChangeDisplay = false; + return result; + } - /** - * Assigns validateInputOnBlur function to elements blur event - * - * @param {Object} language Optional, will override $.formUtils.LANG - * @param {Object} conf Optional, will override the default settings - * @return {jQuery} - */ - $.fn.validateOnBlur = function (language, conf) { - this.find('*[data-validation]') - .bind('blur.validation', function () { - $(this).validateInputOnBlur(language, conf, true, 'blur'); - }); - if (conf.validateCheckboxRadioOnClick) { - // bind click event to validate on click for radio & checkboxes for nice UX - this.find('input[type=checkbox][data-validation],input[type=radio][data-validation]') - .bind('click.validation', function () { - $(this).validateInputOnBlur(language, conf, true, 'click'); - }); - } + // Whether or not this input should be validated depends on if another input has a value + if (validationDependsOn) { - return this; - }; + // Set the boolean telling us that the validation depends + // on another input being checked + var valueOfDependingInput = getInputValue('input[name="' + validationDependsOn + '"]', $form), + requiredValueOfDependingInput = $elem.valAttr('depends-on-value') || $elem.valAttr('if-checked-value'), + dependingInputHasRequiredValue = !requiredValueOfDependingInput || requiredValueOfDependingInput === valueOfDependingInput; - /* - * Assigns validateInputOnBlur function to elements custom event - * @param {Object} language Optional, will override $.formUtils.LANG - * @param {Object} settings Optional, will override the default settings - * * @return {jQuery} - */ - $.fn.validateOnEvent = function (language, settings) { - this.find('*[data-validation-event]') - .each(function () { - var $el = $(this), - etype = $el.valAttr('event'); - if (etype) { - $el - .unbind(etype + '.validation') - .bind(etype + '.validation', function (evt) { - if( (evt || {}).keyCode !== 9 ) { - $(this).validateInputOnBlur(language, settings, true, etype); - } - }); + if (valueOfDependingInput && dependingInputHasRequiredValue) { + skipBecauseDependingInputIsEmpty = false; + } else { + skipBecauseDependingInputIsEmpty = true; } - }); - return this; - }; + } - /** - * fade in help message when input gains focus - * fade out when input loses focus - * - * - * @param {String} attrName - Optional, default is data-help - * @return {jQuery} - */ - $.fn.showHelpOnFocus = function (attrName) { - if (!attrName) { - attrName = 'data-validation-help'; - } - // Remove previously added event listeners - this.find('.has-help-txt') - .valAttr('has-keyup-event', false) - .removeClass('has-help-txt'); + // For input type="number", browsers attempt to parse the entered value into a number. + // If the input is not numeric, browsers handle the situation differently: + // Chrome 48 simply disallows non-numeric input; FF 44 clears out the input box on blur; + // Safari 5 parses the entered string to find a leading number. + // If the input fails browser validation, the browser sets the input value equal to an empty string. + // Therefore, we cannot distinguish (apart from hacks) between an empty input type="text" and one with a + // value that can't be parsed by the browser. - // Add help text listeners - this.find('textarea,input').each(function () { - var $elem = $(this), - className = 'jquery_form_help_' + (++_helpers), - help = $elem.attr(attrName); + if (skipBecauseItsEmpty || skipBecauseDependingInputIsEmpty) { + result.shouldChangeDisplay = conf.addValidClassOnAll; + return result; + } - if (help) { - $elem - .addClass('has-help-txt') - .unbind('focus.help') - .bind('focus.help', function () { - var $help = $elem.parent().find('.' + className); - if ($help.length === 0) { - $help = $('') - .addClass(className) - .addClass('help') - .addClass('help-block') // twitter bs - .text(help) - .hide(); + var validationRules = $elem.attr(conf.validationRuleAttribute), - $elem.after($help); - } - $help.fadeIn(); - }) - .unbind('blur.help') - .bind('blur.help', function () { - $(this) - .parent() - .find('.' + className) - .fadeOut('slow'); - }); - } - }); + // see if form element has inline err msg attribute + validationErrorMsg = true; - return this; - }; + if (!validationRules) { + result.shouldChangeDisplay = conf.addValidClassOnAll; + return result; + } - /** - * @param {Function} cb - * @param {Object} [conf] - * @param {Object} [lang] - */ - $.fn.validate = function(cb, conf, lang) { - var language = $.extend({}, $.formUtils.LANG, lang || {}); - this.each(function() { - var $elem = $(this), - formDefaultConfig = $elem.closest('form').get(0).validationConfig || {}; + // Filter out specified characters + var ignore = $elem.valAttr('ignore'); + if (ignore) { + $.each(ignore.split(''), function(i, char) { + value = value.replace(new RegExp('\\'+char), ''); + }); + } - $elem.one('validation', function(evt, isValid) { - if ( typeof cb === 'function' ) { - cb(isValid, this, evt); + $.split(validationRules, function (rule) { + if (rule.indexOf('validate_') !== 0) { + rule = 'validate_' + rule; } - }); - $elem.validateInputOnBlur( - language, - $.extend({}, formDefaultConfig, conf || {}), - true - ); - }); - }; + var validator = $.formUtils.validators[rule]; - /** - * Tells whether or not validation of this input will have to postpone the form submit () - * @returns {Boolean} - */ - $.fn.willPostponeValidation = function() { - return (this.valAttr('suggestion-nr') || - this.valAttr('postpone') || - this.hasClass('hasDatepicker')) && - !window.postponedValidation; - }; + if (validator && typeof validator.validatorFunction === 'function') { - /** - * Validate single input when it loses focus - * shows error message in a span element - * that is appended to the parent element - * - * @param {Object} [language] Optional, will override $.formUtils.LANG - * @param {Object} [conf] Optional, will override the default settings - * @param {Boolean} attachKeyupEvent Optional - * @param {String} eventType - * @return {jQuery} - */ - $.fn.validateInputOnBlur = function (language, conf, attachKeyupEvent, eventType) { + // special change of element for checkbox_group rule + if (rule === 'validate_checkbox_group') { + // set element to first in group, so error msg attr doesn't need to be set on all elements in group + $elem = $form.find('[name="' + $elem.attr('name') + '"]:eq(0)'); + } - $.formUtils.eventType = eventType; + var isValid = null; + if (eventContext !== 'keyup' || validator.validateOnKeyUp) { + isValid = validator.validatorFunction(value, $elem, conf, language, $form); + } + + if (!isValid) { + validationErrorMsg = null; + if (isValid !== null) { + validationErrorMsg = $elem.attr(conf.validationErrorMsgAttribute + '-' + rule.replace('validate_', '')); + if (!validationErrorMsg) { + validationErrorMsg = $elem.attr(conf.validationErrorMsgAttribute); + if (!validationErrorMsg) { + if (typeof validator.errorMessageKey !== 'function') { + validationErrorMsg = language[validator.errorMessageKey]; + } + else { + validationErrorMsg = language[validator.errorMessageKey(conf)]; + } + if (!validationErrorMsg) { + validationErrorMsg = validator.errorMessage; + } + } + } + } + return false; // break iteration + } - if ( this.willPostponeValidation() ) { - // This validation has to be postponed - var _self = this, - postponeTime = this.valAttr('postpone') || 200; + } else { - window.postponedValidation = function () { - _self.validateInputOnBlur(language, conf, attachKeyupEvent, eventType); - window.postponedValidation = false; - }; + throw new Error('Using undefined validator "' + rule + + '". Maybe you have forgotten to load the module that "' + rule +'" belongs to?'); - setTimeout(function () { - if (window.postponedValidation) { - window.postponedValidation(); } - }, postponeTime); - return this; - } + }, ' '); - language = $.extend({}, $.formUtils.LANG, language || {}); + if (typeof validationErrorMsg === 'string') { + $elem.trigger('validation', false); + result.errorMsg = validationErrorMsg; + result.isValid = false; + result.shouldChangeDisplay = true; + } else if (validationErrorMsg === null) { + result.shouldChangeDisplay = conf.addValidClassOnAll; + } else { + $elem.trigger('validation', true); + result.shouldChangeDisplay = true; + } - $.formUtils.errorDialogs.removeErrorStyling(this, conf); + // Run element validation callback + if (typeof conf.onElementValidate === 'function' && validationErrorMsg !== null) { + conf.onElementValidate(result.isValid, $elem, $form, validationErrorMsg); + } - var $elem = this, - $form = $elem.closest('form'), - result = $.formUtils.validateInput( - $elem, - language, - conf, - $form, - eventType - ); + return result; + }, - if (attachKeyupEvent) { - $elem.unbind('keyup.validation'); - } + /** + * Is it a correct date according to given dateFormat. Will return false if not, otherwise + * an array 0=>year 1=>month 2=>day + * + * @param {String} val + * @param {String} dateFormat + * @param {Boolean} [addMissingLeadingZeros] + * @return {Array}|{Boolean} + */ + parseDate: function (val, dateFormat, addMissingLeadingZeros) { + var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0, 1), + regexp = '^', + formatParts = dateFormat.split(divider || null), + matches, day, month, year; - if ( result.isValid ) { - if( result.shouldChangeDisplay ) { - $elem.addClass('valid'); - $.formUtils.errorDialogs.getParentContainer($elem) - .addClass(conf.inputParentClassOnSuccess); - } - } - else if (!result.isValid) { + $.each(formatParts, function (i, part) { + regexp += (i > 0 ? '\\' + divider : '') + '(\\d{' + part.length + '})'; + }); - $.formUtils.errorDialogs.applyErrorStyling($elem, conf); - $.formUtils.errorDialogs.setInlineErrorMessage($elem, result.errorMsg, conf, conf.errorMessagePosition); + regexp += '$'; - if (attachKeyupEvent) { - $elem.bind('keyup.validation', function (evt) { - if( evt.keyCode !== 9 ) { - $(this).validateInputOnBlur(language, conf, false, 'keyup'); + if (addMissingLeadingZeros) { + var newValueParts = []; + $.each(val.split(divider), function(i, part) { + if(part.length === 1) { + part = '0'+part; } + newValueParts.push(part); }); + val = newValueParts.join(divider); } - } - - return this; - }; - - /** - * Short hand for fetching/adding/removing element attributes - * prefixed with 'data-validation-' - * - * @param {String} name - * @param {String|Boolean} [val] - * @return string|undefined - * @protected - */ - $.fn.valAttr = function (name, val) { - if (val === undefined) { - return this.attr('data-validation-' + name); - } else if (val === false || val === null) { - return this.removeAttr('data-validation-' + name); - } else { - name = ((name.length > 0) ? '-' + name : ''); - return this.attr('data-validation' + name, val); - } - }; - /** - * Function that validates all inputs in active form - * - * @param {Object} [language] - * @param {Object} [conf] - * @param {Boolean} [displayError] Defaults to true - */ - $.fn.isValid = function (language, conf, displayError) { + matches = val.match(new RegExp(regexp)); + if (matches === null) { + return false; + } - if ($.formUtils.isLoadingModules) { - var $self = this; - setTimeout(function () { - $self.isValid(language, conf, displayError); - }, 200); - return null; - } + var findDateUnit = function (unit, formatParts, matches) { + for (var i = 0; i < formatParts.length; i++) { + if (formatParts[i].substring(0, 1) === unit) { + return $.formUtils.parseDateInt(matches[i + 1]); + } + } + return -1; + }; - conf = $.extend({}, $.formUtils.defaultConfig(), conf || {}); - language = $.extend({}, $.formUtils.LANG, language || {}); - displayError = displayError !== false; + month = findDateUnit('m', formatParts, matches); + day = findDateUnit('d', formatParts, matches); + year = findDateUnit('y', formatParts, matches); - if ($.formUtils.errorDisplayPreventedWhenHalted) { - // isValid() was called programmatically with argument displayError set - // to false when the validation was halted by any of the validators - delete $.formUtils.errorDisplayPreventedWhenHalted; - displayError = false; - } + if ((month === 2 && day > 28 && (year % 4 !== 0 || year % 100 === 0 && year % 400 !== 0)) || + (month === 2 && day > 29 && (year % 4 === 0 || year % 100 !== 0 && year % 400 === 0)) || + month > 12 || month === 0) { + return false; + } + if ((this.isShortMonth(month) && day > 30) || (!this.isShortMonth(month) && day > 31) || day === 0) { + return false; + } - $.formUtils.isValidatingEntireForm = true; - $.formUtils.haltValidation = false; + return [year, month, day]; + }, /** - * Adds message to error message stack if not already in the message stack + * skum fix. är talet 05 eller lägre ger parseInt rätt int annars får man 0 när man kör parseInt? * - * @param {String} mess - * @para {jQuery} $elem + * @param {String} val + * @return {Number} */ - var addErrorMessage = function (mess, $elem) { - if ($.inArray(mess, errorMessages) < 0) { - errorMessages.push(mess); - } - errorInputs.push($elem); - $elem.attr('current-error', mess); - if (displayError) { - $.formUtils.errorDialogs.applyErrorStyling($elem, conf); - } - }, - - /** Holds inputs (of type checkox or radio) already validated, to prevent recheck of mulitple checkboxes & radios */ - checkedInputs = [], - - /** Error messages for this validation */ - errorMessages = [], - - /** Input elements which value was not valid */ - errorInputs = [], - - /** Form instance */ - $form = this, + parseDateInt: function (val) { + if (val.indexOf('0') === 0) { + val = val.replace('0', ''); + } + return parseInt(val, 10); + }, - /** - * Tells whether or not to validate element with this name and of this type - * - * @param {String} name - * @param {String} type - * @return {Boolean} - */ - ignoreInput = function (name, type) { - if (type === 'submit' || type === 'button' || type === 'reset') { - return true; - } - return $.inArray(name, conf.ignore || []) > -1; - }; + /** + * Has month only 30 days? + * + * @param {Number} m + * @return {Boolean} + */ + isShortMonth: function (m) { + return (m % 2 === 0 && m < 7) || (m % 2 !== 0 && m > 7); + }, - // Reset style and remove error class - if (displayError) { - $form.find('.' + conf.errorMessageClass + '.alert').remove(); - $.formUtils.errorDialogs.removeErrorStyling($form.find('.' + conf.errorElementClass + ',.valid'), conf); - } + /** + * Restrict input length + * + * @param {jQuery} $inputElement Jquery Html object + * @param {jQuery} $maxLengthElement jQuery Html Object + * @return void + */ + lengthRestriction: function ($inputElement, $maxLengthElement) { + // read maxChars from counter display initial text value + var maxChars = parseInt($maxLengthElement.text(), 10), + charsLeft = 0, - // Validate element values - $form.find('input,textarea,select').filter(':not([type="submit"],[type="button"])').each(function () { - var $elem = $(this), - elementType = $elem.attr('type'), - isCheckboxOrRadioBtn = elementType === 'radio' || elementType === 'checkbox', - elementName = $elem.attr('name'); + // internal function does the counting and sets display value + countCharacters = function () { + var numChars = $inputElement.val().length; + if (numChars > maxChars) { + // get current scroll bar position + var currScrollTopPos = $inputElement.scrollTop(); + // trim value to max length + $inputElement.val($inputElement.val().substring(0, maxChars)); + $inputElement.scrollTop(currScrollTopPos); + } + charsLeft = maxChars - numChars; + if (charsLeft < 0) { + charsLeft = 0; + } - if (!ignoreInput(elementName, elementType) && (!isCheckboxOrRadioBtn || $.inArray(elementName, checkedInputs) < 0)) { + // set counter text + $maxLengthElement.text(charsLeft); + }; - if (isCheckboxOrRadioBtn) { - checkedInputs.push(elementName); - } + // bind events to this element + // setTimeout is needed, cut or paste fires before val is available + $($inputElement).bind('keydown keyup keypress focus blur', countCharacters) + .bind('cut paste', function () { + setTimeout(countCharacters, 100); + }); - var result = $.formUtils.validateInput( - $elem, - language, - conf, - $form, - 'submit' - ); + // count chars on pageload, if there are prefilled input-values + $(document).bind('ready', countCharacters); + }, - if( result.shouldChangeDisplay ) { - if ( !result.isValid ) { - addErrorMessage(result.errorMsg, $elem); - } else if( result.isValid ) { - $elem - .valAttr('current-error', false) - .addClass('valid'); + /** + * Test numeric against allowed range + * + * @param $value int + * @param $rangeAllowed str; (1-2, min1, max2, 10) + * @return array + */ + numericRangeCheck: function (value, rangeAllowed) { + // split by dash + var range = $.split(rangeAllowed), + // min or max + minmax = parseInt(rangeAllowed.substr(3), 10); - $.formUtils.errorDialogs.getParentContainer($elem) - .addClass(conf.inputParentClassOnSuccess); - } - } + if( range.length === 1 && rangeAllowed.indexOf('min') === -1 && rangeAllowed.indexOf('max') === -1 ) { + range = [rangeAllowed, rangeAllowed]; // only a number, checking agains an exact number of characters } - }); - // Run validation callback - if (typeof conf.onValidate === 'function') { - var errors = conf.onValidate($form); - if ($.isArray(errors)) { - $.each(errors, function (i, err) { - addErrorMessage(err.message, err.element); - }); - } - else if (errors && errors.element && errors.message) { - addErrorMessage(errors.message, errors.element); - } - } + // range ? + if (range.length === 2 && (value < parseInt(range[0], 10) || value > parseInt(range[1], 10) )) { + return [ 'out', range[0], range[1] ]; + } // value is out of range + else if (rangeAllowed.indexOf('min') === 0 && (value < minmax )) // min + { + return ['min', minmax]; + } // value is below min + else if (rangeAllowed.indexOf('max') === 0 && (value > minmax )) // max + { + return ['max', minmax]; + } // value is above max + // since no other returns executed, value is in allowed range + return [ 'ok' ]; + }, - // Reset form validation flag - $.formUtils.isValidatingEntireForm = false; - // Validation failed - if (!$.formUtils.haltValidation && errorInputs.length > 0) { + _numSuggestionElements: 0, + _selectedSuggestion: null, + _previousTypedVal: null, - if (displayError) { - // display all error messages in top of form - if (conf.errorMessagePosition === 'top') { - $.formUtils.errorDialogs.setTemplateMessage($form, language.errorTitle, errorMessages, conf); - } - // Customize display message - else if (conf.errorMessagePosition === 'custom') { - $.formUtils.warn('Use deprecated function errorMessageCustom'); - if (typeof conf.errorMessageCustom === 'function') { - conf.errorMessageCustom($form, language.errorTitle, errorMessages, conf); + /** + * Utility function that can be used to create plugins that gives + * suggestions when inputs is typed into + * @param {jQuery} $elem + * @param {Array} suggestions + * @param {Object} settings - Optional + * @return {jQuery} + */ + suggest: function ($elem, suggestions, settings) { + var conf = { + css: { + maxHeight: '150px', + background: '#FFF', + lineHeight: '150%', + textDecoration: 'underline', + overflowX: 'hidden', + overflowY: 'auto', + border: '#CCC solid 1px', + borderTop: 'none', + cursor: 'pointer' + }, + activeSuggestionCSS: { + background: '#E9E9E9' } - } - // Display error message below input field or in defined container - else { - $.each(errorInputs, function (i, $input) { - $.formUtils.errorDialogs.setInlineErrorMessage($input, $input.attr('current-error'), conf, conf.errorMessagePosition); + }, + setSuggsetionPosition = function ($suggestionContainer, $input) { + var offset = $input.offset(); + $suggestionContainer.css({ + width: $input.outerWidth(), + left: offset.left + 'px', + top: (offset.top + $input.outerHeight()) + 'px' }); - } + }; - if (conf.scrollToTopOnError) { - $.formUtils.$win.scrollTop($form.offset().top - 20); - } + if (settings) { + $.extend(conf, settings); } - return false; - } - - if (!displayError && $.formUtils.haltValidation) { - $.formUtils.errorDisplayPreventedWhenHalted = true; - } - - return !$.formUtils.haltValidation; - }; + conf.css.position = 'absolute'; + conf.css['z-index'] = 9999; + $elem.attr('autocomplete', 'off'); - /** - * @deprecated - * @param language - * @param conf - */ - $.fn.validateForm = function (language, conf) { - $.formUtils.warn('Use of deprecated function $.validateForm, use $.isValid instead'); - return this.isValid(language, conf, true); - }; + if (this._numSuggestionElements === 0) { + // Re-position suggestion container if window size changes + $win.bind('resize', function () { + $('.jquery-form-suggestions').each(function () { + var $container = $(this), + suggestID = $container.attr('data-suggest-container'); + setSuggsetionPosition($container, $('.suggestions-' + suggestID).eq(0)); + }); + }); + } - /** - * Plugin for displaying input length restriction - */ - $.fn.restrictLength = function (maxLengthElement) { - new $.formUtils.lengthRestriction(this, maxLengthElement); - return this; - }; + this._numSuggestionElements++; - /** - * Add suggestion dropdown to inputs having data-suggestions with a comma - * separated string with suggestions - * @param {Array} [settings] - * @returns {jQuery} - */ - $.fn.addSuggestions = function (settings) { - var sugs = false; - this.find('input').each(function () { - var $field = $(this); + var onSelectSuggestion = function ($el) { + var suggestionId = $el.valAttr('suggestion-nr'); + $.formUtils._selectedSuggestion = null; + $.formUtils._previousTypedVal = null; + $('.jquery-form-suggestion-' + suggestionId).fadeOut('fast'); + }; - sugs = $.split($field.attr('data-suggestions')); + $elem + .data('suggestions', suggestions) + .valAttr('suggestion-nr', this._numSuggestionElements) + .unbind('focus.suggest') + .bind('focus.suggest', function () { + $(this).trigger('keyup'); + $.formUtils._selectedSuggestion = null; + }) + .unbind('keyup.suggest') + .bind('keyup.suggest', function () { + var $input = $(this), + foundSuggestions = [], + val = $.trim($input.val()).toLocaleLowerCase(); - if (sugs.length > 0 && !$field.hasClass('has-suggestions')) { - $.formUtils.suggest($field, sugs, settings); - $field.addClass('has-suggestions'); - } - }); - return this; - }; + if (val === $.formUtils._previousTypedVal) { + return; + } + else { + $.formUtils._previousTypedVal = val; + } + var hasTypedSuggestion = false, + suggestionId = $input.valAttr('suggestion-nr'), + $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); -})(jQuery); + $suggestionContainer.scrollTop(0); -/** - * Utility methods used for displaying error messages (attached to $.formUtils) - */ -(function ($) { + // Find the right suggestions + if (val !== '') { + var findPartial = val.length > 2; + $.each($input.data('suggestions'), function (i, suggestion) { + var lowerCaseVal = suggestion.toLocaleLowerCase(); + if (lowerCaseVal === val) { + foundSuggestions.push('' + suggestion + ''); + hasTypedSuggestion = true; + return false; + } else if (lowerCaseVal.indexOf(val) === 0 || (findPartial && lowerCaseVal.indexOf(val) > -1)) { + foundSuggestions.push(suggestion.replace(new RegExp(val, 'gi'), '$&')); + } + }); + } - 'use strict'; + // Hide suggestion container + if (hasTypedSuggestion || (foundSuggestions.length === 0 && $suggestionContainer.length > 0)) { + $suggestionContainer.hide(); + } - var errorDialogs = { + // Create suggestion container if not already exists + else if (foundSuggestions.length > 0 && $suggestionContainer.length === 0) { + $suggestionContainer = $('
    ').css(conf.css).appendTo('body'); + $elem.addClass('suggestions-' + suggestionId); + $suggestionContainer + .attr('data-suggest-container', suggestionId) + .addClass('jquery-form-suggestions') + .addClass('jquery-form-suggestion-' + suggestionId); + } - getParentContainer: function ($elem) { - if ($elem.valAttr('error-msg-container')) { - return $($elem.valAttr('error-msg-container')); - } else { - var $parent = $elem.parent(); - if (!$parent.hasClass('form-group') && !$parent.closest('form').hasClass('form-horizontal')) { - var $formGroup = $parent.closest('.form-group'); - if ($formGroup.length) { - return $formGroup.eq(0); + // Show hidden container + else if (foundSuggestions.length > 0 && !$suggestionContainer.is(':visible')) { + $suggestionContainer.show(); } - } - return $parent; - } - }, - applyErrorStyling: function ($elem, conf) { - $elem - .addClass(conf.errorElementClass) - .removeClass('valid'); - this.getParentContainer($elem) - .addClass(conf.inputParentClassOnError) - .removeClass(conf.inputParentClassOnSuccess); + // add suggestions + if (foundSuggestions.length > 0 && val.length !== foundSuggestions[0].length) { - if (conf.borderColorOnError !== '') { - $elem.css('border-color', conf.borderColorOnError); - } - }, - removeErrorStyling: function ($elem, conf) { - $elem.each(function () { - var $this = $(this); + // put container in place every time, just in case + setSuggsetionPosition($suggestionContainer, $input); - errorDialogs.setInlineErrorMessage($this, '', conf, conf.errorMessagePosition); + // Add suggestions HTML to container + $suggestionContainer.html(''); + $.each(foundSuggestions, function (i, text) { + $('
    ') + .append(text) + .css({ + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + padding: '5px' + }) + .addClass('form-suggest-element') + .appendTo($suggestionContainer) + .click(function () { + $input.focus(); + $input.val($(this).text()); + $input.trigger('change'); + onSelectSuggestion($input); + }); + }); + } + }) + .unbind('keydown.validation') + .bind('keydown.validation', function (e) { + var code = (e.keyCode ? e.keyCode : e.which), + suggestionId, + $suggestionContainer, + $input = $(this); - $this - .removeClass('valid') - .removeClass(conf.errorElementClass) - .css('border-color', ''); + if (code === 13 && $.formUtils._selectedSuggestion !== null) { + suggestionId = $input.valAttr('suggestion-nr'); + $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); + if ($suggestionContainer.length > 0) { + var newText = $suggestionContainer.find('div').eq($.formUtils._selectedSuggestion).text(); + $input.val(newText); + $input.trigger('change'); + onSelectSuggestion($input); + e.preventDefault(); + } + } + else { + suggestionId = $input.valAttr('suggestion-nr'); + $suggestionContainer = $('.jquery-form-suggestion-' + suggestionId); + var $suggestions = $suggestionContainer.children(); + if ($suggestions.length > 0 && $.inArray(code, [38, 40]) > -1) { + if (code === 38) { // key up + if ($.formUtils._selectedSuggestion === null) { + $.formUtils._selectedSuggestion = $suggestions.length - 1; + } + else{ + $.formUtils._selectedSuggestion--; + } + if ($.formUtils._selectedSuggestion < 0) { + $.formUtils._selectedSuggestion = $suggestions.length - 1; + } + } + else if (code === 40) { // key down + if ($.formUtils._selectedSuggestion === null) { + $.formUtils._selectedSuggestion = 0; + } + else { + $.formUtils._selectedSuggestion++; + } + if ($.formUtils._selectedSuggestion > ($suggestions.length - 1)) { + $.formUtils._selectedSuggestion = 0; + } + } - errorDialogs.getParentContainer($this) - .removeClass(conf.inputParentClassOnError) - .removeClass(conf.inputParentClassOnSuccess) - .find('.' + conf.errorMessageClass) // remove inline span holding error message - .remove(); - }); - }, - setInlineErrorMessage: function ($input, errorMsg, conf, $messageContainer) { - var custom = document.getElementById($input.attr('name') + '_err_msg'), - setErrorMessage = function ($elem) { - $.formUtils.$win.trigger('validationErrorDisplay', [$input, $elem]); - $elem.html(errorMsg); - }, - $message; + // Scroll in suggestion window + var containerInnerHeight = $suggestionContainer.innerHeight(), + containerScrollTop = $suggestionContainer.scrollTop(), + suggestionHeight = $suggestionContainer.children().eq(0).outerHeight(), + activeSuggestionPosY = suggestionHeight * ($.formUtils._selectedSuggestion); - if (custom) { - $.formUtils.warn('Using deprecated element reference ' + custom.id); - $messageContainer = $(custom); - } else if (typeof $messageContainer === 'function') { - $messageContainer = $messageContainer($input, errorMsg, conf); - } + if (activeSuggestionPosY < containerScrollTop || activeSuggestionPosY > (containerScrollTop + containerInnerHeight)) { + $suggestionContainer.scrollTop(activeSuggestionPosY); + } - if (typeof $messageContainer === 'object') { - var $found = false; - $messageContainer.find('.' + conf.errorMessageClass).each(function () { - if (this.inputReferer === $input[0]) { - $found = $(this); - return false; + $suggestions + .removeClass('active-suggestion') + .css('background', 'none') + .eq($.formUtils._selectedSuggestion) + .addClass('active-suggestion') + .css(conf.activeSuggestionCSS); + + e.preventDefault(); + return false; + } } + }) + .unbind('blur.suggest') + .bind('blur.suggest', function () { + onSelectSuggestion($(this)); }); - if ($found) { - if (!errorMsg) { - $found.remove(); - } else { - setErrorMessage($found); - } - } else if(errorMsg !== '') { - $message = $('
    '); - setErrorMessage($message); - $message[0].inputReferer = $input[0]; - $messageContainer.prepend($message); - } - } - else { - var $parent = this.getParentContainer($input); - $message = $parent.find('.' + conf.errorMessageClass + '.help-block'); - - if ($message.length === 0) { - $message = $('').addClass('help-block').addClass(conf.errorMessageClass); - $message.appendTo($parent); - } - setErrorMessage($message); - } + return $elem; }, - setTemplateMessage: function ($form, title, errorMessages, conf) { - var messages = conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g, title), - fields = [], - container; - $.each(errorMessages, function (i, msg) { - fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g, msg)); - }); - - messages = messages.replace(/\{fields\}/g, fields.join('')); - container = conf.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g, conf.errorMessageClass); - container = container.replace(/\{messages\}/g, messages); - $form.children().eq(0).before(container); + /** + * Error dialogs + * + * @var {Object} + */ + LANG: { + errorTitle: 'Form submission failed!', + requiredField: 'This is a required field', + requiredFields: 'You have not answered all required fields', + badTime: 'You have not given a correct time', + badEmail: 'You have not given a correct e-mail address', + badTelephone: 'You have not given a correct phone number', + badSecurityAnswer: 'You have not given a correct answer to the security question', + badDate: 'You have not given a correct date', + lengthBadStart: 'The input value must be between ', + lengthBadEnd: ' characters', + lengthTooLongStart: 'The input value is longer than ', + lengthTooShortStart: 'The input value is shorter than ', + notConfirmed: 'Input values could not be confirmed', + badDomain: 'Incorrect domain value', + badUrl: 'The input value is not a correct URL', + badCustomVal: 'The input value is incorrect', + andSpaces: ' and spaces ', + badInt: 'The input value was not a correct number', + badSecurityNumber: 'Your social security number was incorrect', + badUKVatAnswer: 'Incorrect UK VAT Number', + badUKNin: 'Incorrect UK NIN', + badUKUtr: 'Incorrect UK UTR Number', + badStrength: 'The password isn\'t strong enough', + badNumberOfSelectedOptionsStart: 'You have to choose at least ', + badNumberOfSelectedOptionsEnd: ' answers', + badAlphaNumeric: 'The input value can only contain alphanumeric characters ', + badAlphaNumericExtra: ' and ', + wrongFileSize: 'The file you are trying to upload is too large (max %s)', + wrongFileType: 'Only files of type %s is allowed', + groupCheckedRangeStart: 'Please choose between ', + groupCheckedTooFewStart: 'Please choose at least ', + groupCheckedTooManyStart: 'Please choose a maximum of ', + groupCheckedEnd: ' item(s)', + badCreditCard: 'The credit card number is not correct', + badCVV: 'The CVV number was not correct', + wrongFileDim : 'Incorrect image dimensions,', + imageTooTall : 'the image can not be taller than', + imageTooWide : 'the image can not be wider than', + imageTooSmall : 'the image was too small', + min : 'min', + max : 'max', + imageRatioNotAccepted : 'Image ratio is not be accepted', + badBrazilTelephoneAnswer: 'The phone number entered is invalid', + badBrazilCEPAnswer: 'The CEP entered is invalid', + badBrazilCPFAnswer: 'The CPF entered is invalid', + badPlPesel: 'The PESEL entered is invalid', + badPlNip: 'The NIP entered is invalid', + badPlRegon: 'The REGON entered is invalid', + badreCaptcha: 'Please confirm that you are not a bot' } - }; - - $.formUtils = $.extend($.formUtils || {}, { - errorDialogs: errorDialogs }); -})(jQuery); +})(jQuery, window); /** * File declaring all default validators. @@ -2132,3 +2156,6 @@ }); })(jQuery); + + +})); diff --git a/form-validator/jquery.form-validator.min.js b/form-validator/jquery.form-validator.min.js index 109a263..b151b59 100644 --- a/form-validator/jquery.form-validator.min.js +++ b/form-validator/jquery.form-validator.min.js @@ -1,11 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";var c=a(b),d=function(a,b){var c=b?b.find(a):a;if(c.length>0){var d=c.eq(0).attr("type");return"radio"===d||"checkbox"===d?c.filter(":checked").val():c.val()}return!1};a.formUtils=a.extend(a.formUtils||{},{$win:c,defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"#b94a48",errorMessageClass:"form-error",validationRuleAttribute:"data-validation",validationErrorMsgAttribute:"data-validation-error-msg",errorMessagePosition:"element",errorMessageTemplate:{container:'
    {messages}
    ',messages:"{errorTitle}
      {fields}
    ",field:"
  • {msg}
  • "},errorMessageCustom:this.errorDialogs.setTemplateMessage,scrollToTopOnError:!0,dateFormat:"yyyy-mm-dd",addValidClassOnAll:!1,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success",validateHiddenInputs:!1}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:!1,isValidatingEntireForm:!1,addValidator:function(a){var b=0===a.name.indexOf("validate_")?a.name:"validate_"+a.name;void 0===a.validateOnKeyUp&&(a.validateOnKeyUp=!0),this.validators[b]=a},isLoadingModules:!1,loadedModules:{},loadModules:function(b,d,e){if(void 0===e&&(e=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,d,e)});var f=!1,g=function(b,d){var g=a.split(b),h=g.length,i=function(){h--,0===h&&(a.formUtils.isLoadingModules=!1,e&&f&&("function"==typeof e?e():c.trigger("validatorsLoaded")))};h>0&&(a.formUtils.isLoadingModules=!0);var j="?_="+(new Date).getTime(),k=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(g,function(b,c){if(c=a.trim(c),0===c.length)i();else{var e=d+c+(".js"===c.slice(-3)?"":".js"),g=document.createElement("SCRIPT");e in a.formUtils.loadedModules?i():(a.formUtils.loadedModules[e]=1,f=!0,g.type="text/javascript",g.onload=i,g.src=e+(".dev.js"===e.slice(-7)?j:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+e)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(i(),this.onload=null,this.onreadystatechange=null)},k.appendChild(g))}})};if(d)g(b,d);else{var h=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(g(b,c),!0):!1};h()||a(h)}},warn:function(a){"console"in b?"function"==typeof b.console.warn?b.console.warn(a):"function"==typeof b.console.log&&b.console.log(a):alert(a)},validateInput:function(b,c,e,f,g){b.trigger("beforeValidation"),e=e||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var h=d(b),i={isValid:!0,shouldChangeDisplay:!0,errorMsg:""},j="true"===b.valAttr("optional"),k=!1,l=!h&&j,m=b.attr("disabled")||!b.is(":visible")&&!e.validateHiddenInputs,n=b.valAttr("depends-on")||b.valAttr("if-checked");if(m)return i.shouldChangeDisplay=!1,i;if(n){var o=d('input[name="'+n+'"]',f),p=b.valAttr("depends-on-value")||b.valAttr("if-checked-value"),q=!p||p===o;k=o&&q?!1:!0}if(l||k)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var r=b.attr(e.validationRuleAttribute),s=!0;if(!r)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var t=b.valAttr("ignore");return t&&a.each(t.split(""),function(a,b){h=h.replace(new RegExp("\\"+b),"")}),a.split(r,function(d){0!==d.indexOf("validate_")&&(d="validate_"+d);var i=a.formUtils.validators[d];if(!i||"function"!=typeof i.validatorFunction)throw new Error('Using undefined validator "'+d+'". Maybe you have forgotten to load the module that "'+d+'" belongs to?');"validate_checkbox_group"===d&&(b=f.find('[name="'+b.attr("name")+'"]:eq(0)'));var j=null;return("keyup"!==g||i.validateOnKeyUp)&&(j=i.validatorFunction(h,b,e,c,f)),j?void 0:(s=null,null!==j&&(s=b.attr(e.validationErrorMsgAttribute+"-"+d.replace("validate_","")),s||(s=b.attr(e.validationErrorMsgAttribute),s||(s="function"!=typeof i.errorMessageKey?c[i.errorMessageKey]:c[i.errorMessageKey(e)],s||(s=i.errorMessage)))),!1)}," "),"string"==typeof s?(b.trigger("validation",!1),i.errorMsg=s,i.isValid=!1,i.shouldChangeDisplay=!0):null===s?i.shouldChangeDisplay=e.addValidClassOnAll:(b.trigger("validation",!0),i.shouldChangeDisplay=!0),"function"==typeof e.onElementValidate&&null!==s&&e.onElementValidate(i.isValid,b,f,s),i},parseDate:function(b,c,d){var e,f,g,h,i=c.replace(/[a-zA-Z]/gi,"").substring(0,1),j="^",k=c.split(i||null);if(a.each(k,function(a,b){j+=(a>0?"\\"+i:"")+"(\\d{"+b.length+"})"}),j+="$",d){var l=[];a.each(b.split(i),function(a,b){1===b.length&&(b="0"+b),l.push(b)}),b=l.join(i)}if(e=b.match(new RegExp(j)),null===e)return!1;var m=function(b,c,d){for(var e=0;e28&&(h%4!==0||h%100===0&&h%400!==0)||2===g&&f>29&&(h%4===0||h%100!==0&&h%400===0)||g>12||0===g?!1:this.isShortMonth(g)&&f>30||!this.isShortMonth(g)&&f>31||0===f?!1:[h,g,f]},parseDateInt:function(a){return 0===a.indexOf("0")&&(a=a.replace("0","")),parseInt(a,10)},isShortMonth:function(a){return a%2===0&&7>a||a%2!==0&&a>7},lengthRestriction:function(b,c){var d=parseInt(c.text(),10),e=0,f=function(){var a=b.val().length;if(a>d){var f=b.scrollTop();b.val(b.val().substring(0,d)),b.scrollTop(f)}e=d-a,0>e&&(e=0),c.text(e)};a(b).bind("keydown keyup keypress focus blur",f).bind("cut paste",function(){setTimeout(f,100)}),a(document).bind("ready",f)},numericRangeCheck:function(b,c){var d=a.split(c),e=parseInt(c.substr(3),10);return 1===d.length&&-1===c.indexOf("min")&&-1===c.indexOf("max")&&(d=[c,c]),2===d.length&&(bparseInt(d[1],10))?["out",d[0],d[1]]:0===c.indexOf("min")&&e>b?["min",e]:0===c.indexOf("max")&&b>e?["max",e]:["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function(b,d,e){var f={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC solid 1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},g=function(a,b){var c=b.offset();a.css({width:b.outerWidth(),left:c.left+"px",top:c.top+b.outerHeight()+"px"})};e&&a.extend(f,e),f.css.position="absolute",f.css["z-index"]=9999,b.attr("autocomplete","off"),0===this._numSuggestionElements&&c.bind("resize",function(){a(".jquery-form-suggestions").each(function(){var b=a(this),c=b.attr("data-suggest-container");g(b,a(".suggestions-"+c).eq(0))})}),this._numSuggestionElements++;var h=function(b){var c=b.valAttr("suggestion-nr");a.formUtils._selectedSuggestion=null,a.formUtils._previousTypedVal=null,a(".jquery-form-suggestion-"+c).fadeOut("fast")};return b.data("suggestions",d).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){a(this).trigger("keyup"),a.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var c=a(this),d=[],e=a.trim(c.val()).toLocaleLowerCase();if(e!==a.formUtils._previousTypedVal){a.formUtils._previousTypedVal=e;var i=!1,j=c.valAttr("suggestion-nr"),k=a(".jquery-form-suggestion-"+j);if(k.scrollTop(0),""!==e){var l=e.length>2;a.each(c.data("suggestions"),function(a,b){var c=b.toLocaleLowerCase();return c===e?(d.push(""+b+""),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new RegExp(e,"gi"),"$&")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("
    ").css(f.css).appendTo("body"),b.addClass("suggestions-"+j),k.attr("data-suggest-container",j).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+j)):d.length>0&&!k.is(":visible")&&k.show(),d.length>0&&e.length!==d[0].length&&(g(k,c),k.html(""),a.each(d,function(b,d){a("
    ").append(d).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo(k).click(function(){c.focus(),c.val(a(this).text()),h(c)})}))}}).unbind("keydown.validation").bind("keydown.validation",function(b){var c,d,e=b.keyCode?b.keyCode:b.which,g=a(this);if(13===e&&null!==a.formUtils._selectedSuggestion){if(c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c),d.length>0){var i=d.find("div").eq(a.formUtils._selectedSuggestion).text();g.val(i),h(g),b.preventDefault()}}else{c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c);var j=d.children();if(j.length>0&&a.inArray(e,[38,40])>-1){38===e?(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=j.length-1:a.formUtils._selectedSuggestion--,a.formUtils._selectedSuggestion<0&&(a.formUtils._selectedSuggestion=j.length-1)):40===e&&(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=0:a.formUtils._selectedSuggestion++,a.formUtils._selectedSuggestion>j.length-1&&(a.formUtils._selectedSuggestion=0));var k=d.innerHeight(),l=d.scrollTop(),m=d.children().eq(0).outerHeight(),n=m*a.formUtils._selectedSuggestion;return(l>n||n>l+k)&&d.scrollTop(n),j.removeClass("active-suggestion").css("background","none").eq(a.formUtils._selectedSuggestion).addClass("active-suggestion").css(f.activeSuggestionCSS),b.preventDefault(),!1}}}).unbind("blur.suggest").bind("blur.suggest",function(){h(a(this))}),b},LANG:{errorTitle:"Form submission failed!",requiredField:"This is a required field",requiredFields:"You have not answered all required fields",badTime:"You have not given a correct time",badEmail:"You have not given a correct e-mail address",badTelephone:"You have not given a correct phone number",badSecurityAnswer:"You have not given a correct answer to the security question",badDate:"You have not given a correct date",lengthBadStart:"The input value must be between ",lengthBadEnd:" characters",lengthTooLongStart:"The input value is longer than ",lengthTooShortStart:"The input value is shorter than ",notConfirmed:"Input values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"The input value is not a correct URL",badCustomVal:"The input value is incorrect",andSpaces:" and spaces ",badInt:"The input value was not a correct number",badSecurityNumber:"Your social security number was incorrect",badUKVatAnswer:"Incorrect UK VAT Number",badStrength:"The password isn't strong enough",badNumberOfSelectedOptionsStart:"You have to choose at least ",badNumberOfSelectedOptionsEnd:" answers",badAlphaNumeric:"The input value can only contain alphanumeric characters ",badAlphaNumericExtra:" and ",wrongFileSize:"The file you are trying to upload is too large (max %s)",wrongFileType:"Only files of type %s is allowed",groupCheckedRangeStart:"Please choose between ",groupCheckedTooFewStart:"Please choose at least ",groupCheckedTooManyStart:"Please choose a maximum of ",groupCheckedEnd:" item(s)",badCreditCard:"The credit card number is not correct",badCVV:"The CVV number was not correct",wrongFileDim:"Incorrect image dimensions,",imageTooTall:"the image can not be taller than",imageTooWide:"the image can not be wider than",imageTooSmall:"the image was too small",min:"min",max:"max",imageRatioNotAccepted:"Image ratio is not be accepted",badBrazilTelephoneAnswer:"The phone number entered is invalid",badBrazilCEPAnswer:"The CEP entered is invalid",badBrazilCPFAnswer:"The CPF entered is invalid"}})}(jQuery,window),function(a){"use strict";a.split=function(b,c){if("function"!=typeof c){if(!b)return[];var d=[];return a.each(b.split(c?c:/[,|\-\s]\s*/g),function(b,c){c=a.trim(c),c.length&&d.push(c)}),d}b&&a.each(b.split(/[,|\-\s]\s*/g),function(b,d){return d=a.trim(d),d.length?c(d,b):void 0})},a.validate=function(b){var c=a.extend(a.formUtils.defaultConfig(),{form:"form",validateOnEvent:!1,validateOnBlur:!0,validateCheckboxRadioOnClick:!0,showHelpOnFocus:!0,addSuggestions:!0,modules:"",onModulesLoaded:null,language:!1,onSuccess:!1,onError:!1,onElementValidate:!1});if(b=a.extend(c,b||{}),b.lang&&"en"!==b.lang){var d="lang/"+b.lang+".js";b.modules+=b.modules.length?","+d:d}a(b.form).each(function(c,d){d.validationConfig=b;var e=a(d);a.formUtils.$win.trigger("formValidationSetup",[e,b]),e.trigger("formValidationSetup",[b]),e.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation"),e.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation"),e.bind("submit.validation",function(){var c=a(this);if(a.formUtils.haltValidation)return!1;if(a.formUtils.isLoadingModules)return setTimeout(function(){c.trigger("submit.validation")},200),!1;var d=c.isValid(b.language,b);if(a.formUtils.haltValidation)return!1;if(!d||"function"!=typeof b.onSuccess)return d||"function"!=typeof b.onError?d:(b.onError(c),!1);var e=b.onSuccess(c);return e===!1?!1:void 0}).bind("reset.validation",function(){var c=a(this),d=c.find("."+b.errorElementClass+",.valid");c.find("."+b.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(d,b)}).addClass("has-validation-callback"),b.showHelpOnFocus&&e.showHelpOnFocus(),b.addSuggestions&&e.addSuggestions(),b.validateOnBlur&&(e.validateOnBlur(b.language,b),e.bind("html5ValidationAttrsFound",function(){e.validateOnBlur(b.language,b)})),b.validateOnEvent&&e.validateOnEvent(b.language,b)}),""!==b.modules&&a.formUtils.loadModules(b.modules,!1,function(){"function"==typeof b.onModulesLoaded&&b.onModulesLoaded(),a.formUtils.$win.trigger("validatorsLoaded",["string"==typeof b.form?a(b.form):b.form,b])})}}(jQuery),function(a){"use strict";a.formUtils=a.extend(a.formUtils||{},{validators:{},isLoadingModules:!1,loadedModules:{},loadModules:function(b,c,d){if(void 0===d&&(d=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,c,d)},10);var e=!1,f=function(b,c){var f=a.split(b),g=f.length,h=function(){g--,0===g&&(a.formUtils.isLoadingModules=!1,d&&e&&("function"==typeof d?d():a.formUtils.$win.trigger("validatorsLoaded")))};g>0&&(a.formUtils.isLoadingModules=!0);var i="?_="+(new Date).getTime(),j=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(f,function(b,d){if(d=a.trim(d),0===d.length)h();else{var f=c+d+(".js"===d.slice(-3)?"":".js"),g=document.createElement("SCRIPT");f in a.formUtils.loadedModules?h():(a.formUtils.loadedModules[f]=1,e=!0,g.type="text/javascript",g.onload=h,g.src=f+(".dev.js"===f.slice(-7)?i:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+f)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(h(),this.onload=null,this.onreadystatechange=null)},j.appendChild(g))}})};if(c)f(b,c);else{var g=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(f(b,c),!0):!1};g()||a(g)}}})}(jQuery),function(a){"use strict";a.setupValidation=function(b){var c=a(b.form||"form");a.each(b.validate||b.validation||{},function(b,d){var e;e="#"===b[0]?a(b):"."===b[0]?c.find(b):c.find('*[name="'+b+'"]'),e.attr("data-validation",d.validation),a.each(d,function(a,b){"validation"!==a&&b!==!1&&(b===!0&&(b="true"),"_"===a[0]?(a=a.substring(1),b===!1?e.removeAttr(a):e.attr(a,b)):e.valAttr(a,b))})}),a.validate(b)}}(jQuery),function(a){var b=0;a.fn.validateOnBlur=function(b,c){return this.find("*[data-validation]").bind("blur.validation",function(){a(this).validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&this.find("input[type=checkbox][data-validation],input[type=radio][data-validation]").bind("click.validation",function(){a(this).validateInputOnBlur(b,c,!0,"click")}),this},a.fn.validateOnEvent=function(b,c){return this.find("*[data-validation-event]").each(function(){var d=a(this),e=d.valAttr("event");e&&d.unbind(e+".validation").bind(e+".validation",function(d){9!==(d||{}).keyCode&&a(this).validateInputOnBlur(b,c,!0,e)})}),this},a.fn.showHelpOnFocus=function(c){return c||(c="data-validation-help"),this.find(".has-help-txt").valAttr("has-keyup-event",!1).removeClass("has-help-txt"),this.find("textarea,input").each(function(){var d=a(this),e="jquery_form_help_"+ ++b,f=d.attr(c);f&&d.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var b=d.parent().find("."+e);0===b.length&&(b=a("").addClass(e).addClass("help").addClass("help-block").text(f).hide(),d.after(b)),b.fadeIn()}).unbind("blur.help").bind("blur.help",function(){a(this).parent().find("."+e).fadeOut("slow")})}),this},a.fn.validate=function(b,c,d){var e=a.extend({},a.formUtils.LANG,d||{});this.each(function(){var d=a(this),f=d.closest("form").get(0).validationConfig||{};d.one("validation",function(a,c){"function"==typeof b&&b(c,this,a)}),d.validateInputOnBlur(e,a.extend({},f,c||{}),!0)})},a.fn.willPostponeValidation=function(){return(this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!window.postponedValidation},a.fn.validateInputOnBlur=function(b,c,d,e){if(a.formUtils.eventType=e,this.willPostponeValidation()){var f=this,g=this.valAttr("postpone")||200;return window.postponedValidation=function(){f.validateInputOnBlur(b,c,d,e),window.postponedValidation=!1},setTimeout(function(){window.postponedValidation&&window.postponedValidation()},g),this}b=a.extend({},a.formUtils.LANG,b||{}),a.formUtils.errorDialogs.removeErrorStyling(this,c);var h=this,i=h.closest("form"),j=a.formUtils.validateInput(h,b,c,i,e);return d&&h.unbind("keyup.validation"),j.isValid?j.shouldChangeDisplay&&(h.addClass("valid"),a.formUtils.errorDialogs.getParentContainer(h).addClass(c.inputParentClassOnSuccess)):j.isValid||(a.formUtils.errorDialogs.applyErrorStyling(h,c),a.formUtils.errorDialogs.setInlineErrorMessage(h,j.errorMsg,c,c.errorMessagePosition),d&&h.bind("keyup.validation",function(d){9!==d.keyCode&&a(this).validateInputOnBlur(b,c,!1,"keyup")})),this},a.fn.valAttr=function(a,b){return void 0===b?this.attr("data-validation-"+a):b===!1||null===b?this.removeAttr("data-validation-"+a):(a=a.length>0?"-"+a:"",this.attr("data-validation"+a,b))},a.fn.isValid=function(b,c,d){if(a.formUtils.isLoadingModules){var e=this;return setTimeout(function(){e.isValid(b,c,d)},200),null}c=a.extend({},a.formUtils.defaultConfig(),c||{}),b=a.extend({},a.formUtils.LANG,b||{}),d=d!==!1,a.formUtils.errorDisplayPreventedWhenHalted&&(delete a.formUtils.errorDisplayPreventedWhenHalted,d=!1),a.formUtils.isValidatingEntireForm=!0,a.formUtils.haltValidation=!1;var f=function(b,e){a.inArray(b,h)<0&&h.push(b),i.push(e),e.attr("current-error",b),d&&a.formUtils.errorDialogs.applyErrorStyling(e,c)},g=[],h=[],i=[],j=this,k=function(b,d){return"submit"===d||"button"===d||"reset"===d?!0:a.inArray(b,c.ignore||[])>-1};if(d&&(j.find("."+c.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(j.find("."+c.errorElementClass+",.valid"),c)),j.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var d=a(this),e=d.attr("type"),h="radio"===e||"checkbox"===e,i=d.attr("name");if(!k(i,e)&&(!h||a.inArray(i,g)<0)){h&&g.push(i);var l=a.formUtils.validateInput(d,b,c,j,"submit");l.shouldChangeDisplay&&(l.isValid?l.isValid&&(d.valAttr("current-error",!1).addClass("valid"),a.formUtils.errorDialogs.getParentContainer(d).addClass(c.inputParentClassOnSuccess)):f(l.errorMsg,d))}}),"function"==typeof c.onValidate){var l=c.onValidate(j);a.isArray(l)?a.each(l,function(a,b){f(b.message,b.element)}):l&&l.element&&l.message&&f(l.message,l.element)}return a.formUtils.isValidatingEntireForm=!1,!a.formUtils.haltValidation&&i.length>0?(d&&("top"===c.errorMessagePosition?a.formUtils.errorDialogs.setTemplateMessage(j,b.errorTitle,h,c):"custom"===c.errorMessagePosition?(a.formUtils.warn("Use deprecated function errorMessageCustom"),"function"==typeof c.errorMessageCustom&&c.errorMessageCustom(j,b.errorTitle,h,c)):a.each(i,function(b,d){a.formUtils.errorDialogs.setInlineErrorMessage(d,d.attr("current-error"),c,c.errorMessagePosition)}),c.scrollToTopOnError&&a.formUtils.$win.scrollTop(j.offset().top-20)),!1):(!d&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),!a.formUtils.haltValidation)},a.fn.validateForm=function(b,c){return a.formUtils.warn("Use of deprecated function $.validateForm, use $.isValid instead"),this.isValid(b,c,!0)},a.fn.restrictLength=function(b){return new a.formUtils.lengthRestriction(this,b),this},a.fn.addSuggestions=function(b){var c=!1;return this.find("input").each(function(){var d=a(this);c=a.split(d.attr("data-suggestions")),c.length>0&&!d.hasClass("has-suggestions")&&(a.formUtils.suggest(d,c,b),d.addClass("has-suggestions"))}),this}}(jQuery),function(a){"use strict";var b={getParentContainer:function(b){if(b.valAttr("error-msg-container"))return a(b.valAttr("error-msg-container"));var c=b.parent();if(!c.hasClass("form-group")&&!c.closest("form").hasClass("form-horizontal")){var d=c.closest(".form-group");if(d.length)return d.eq(0)}return c},applyErrorStyling:function(a,b){a.addClass(b.errorElementClass).removeClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnError).removeClass(b.inputParentClassOnSuccess),""!==b.borderColorOnError&&a.css("border-color",b.borderColorOnError)},removeErrorStyling:function(c,d){c.each(function(){var c=a(this);b.setInlineErrorMessage(c,"",d,d.errorMessagePosition),c.removeClass("valid").removeClass(d.errorElementClass).css("border-color",""),b.getParentContainer(c).removeClass(d.inputParentClassOnError).removeClass(d.inputParentClassOnSuccess).find("."+d.errorMessageClass).remove()})},setInlineErrorMessage:function(b,c,d,e){var f,g=document.getElementById(b.attr("name")+"_err_msg"),h=function(d){a.formUtils.$win.trigger("validationErrorDisplay",[b,d]),d.html(c)};if(g?(a.formUtils.warn("Using deprecated element reference "+g.id),e=a(g)):"function"==typeof e&&(e=e(b,c,d)),"object"==typeof e){var i=!1;e.find("."+d.errorMessageClass).each(function(){return this.inputReferer===b[0]?(i=a(this),!1):void 0}),i?c?h(i):i.remove():""!==c&&(f=a('
    '),h(f),f[0].inputReferer=b[0],e.prepend(f))}else{var j=this.getParentContainer(b);f=j.find("."+d.errorMessageClass+".help-block"),0===f.length&&(f=a("").addClass("help-block").addClass(d.errorMessageClass),f.appendTo(j)),h(f)}},setTemplateMessage:function(b,c,d,e){var f,g=e.errorMessageTemplate.messages.replace(/\{errorTitle\}/g,c),h=[];a.each(d,function(a,b){h.push(e.errorMessageTemplate.field.replace(/\{msg\}/g,b))}),g=g.replace(/\{fields\}/g,h.join("")),f=e.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g,e.errorMessageClass),f=f.replace(/\{messages\}/g,g),b.children().eq(0).before(f)}};a.formUtils=a.extend(a.formUtils||{},{errorDialogs:b})}(jQuery),function(a){a.formUtils.addValidator({name:"email",validatorFunction:function(b){var c=b.toLowerCase().split("@"),d=c[0],e=c[1];if(d&&e){if(0===d.indexOf('"')){var f=d.length;if(d=d.replace(/\"/g,""),d.length!==f-2)return!1}return a.formUtils.validators.validate_domain.validatorFunction(c[1])&&0!==d.indexOf(".")&&"."!==d.substring(d.length-1,d.length)&&-1===d.indexOf("..")&&!/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(d)}return!1},errorMessage:"",errorMessageKey:"badEmail"}),a.formUtils.addValidator({name:"domain",validatorFunction:function(a){return a.length>0&&a.length<=253&&!/[^a-zA-Z0-9]/.test(a.slice(-2))&&!/[^a-zA-Z0-9]/.test(a.substr(0,1))&&!/[^a-zA-Z0-9\.\-]/.test(a)&&1===a.split("..").length&&a.split(".").length>1},errorMessage:"",errorMessageKey:"badDomain"}),a.formUtils.addValidator({name:"required",validatorFunction:function(b,c,d,e,f){switch(c.attr("type")){case"checkbox":return c.is(":checked");case"radio":return f.find('input[name="'+c.attr("name")+'"]').filter(":checked").length>0;default:return""!==a.trim(b)}},errorMessage:"",errorMessageKey:function(a){return"top"===a.errorMessagePosition||"custom"===a.errorMessagePosition?"requiredFields":"requiredField"}}),a.formUtils.addValidator({name:"length",validatorFunction:function(b,c,d,e){var f=c.valAttr("length"),g=c.attr("type");if(void 0===f)return alert('Please add attribute "data-validation-length" to '+c[0].nodeName+" named "+c.attr("name")),!0;var h,i="file"===g&&void 0!==c.get(0).files?c.get(0).files.length:b.length,j=a.formUtils.numericRangeCheck(i,f);switch(j[0]){case"out":this.errorMessage=e.lengthBadStart+f+e.lengthBadEnd,h=!1;break;case"min":this.errorMessage=e.lengthTooShortStart+j[1]+e.lengthBadEnd,h=!1;break;case"max":this.errorMessage=e.lengthTooLongStart+j[1]+e.lengthBadEnd,h=!1;break;default:h=!0}return h},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"url",validatorFunction:function(b){var c=/^(https?|ftp):\/\/((((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|\[|\]|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;if(c.test(b)){var d=b.split("://")[1],e=d.indexOf("/");return e>-1&&(d=d.substr(0,e)),a.formUtils.validators.validate_domain.validatorFunction(d)}return!1},errorMessage:"",errorMessageKey:"badUrl"}),a.formUtils.addValidator({name:"number",validatorFunction:function(a,b,c){if(""!==a){var d,e,f=b.valAttr("allowing")||"",g=b.valAttr("decimal-separator")||c.decimalSeparator,h=!1,i=b.valAttr("step")||"",j=!1,k=b.attr("data-sanitize")||"",l=k.match(/(^|[\s])numberFormat([\s]|$)/i);if(l){if(!window.numeral)throw new ReferenceError("The data-sanitize value numberFormat cannot be used without the numeral library. Please see Data Validation in http://www.formvalidator.net for more information.");a.length&&(a=String(numeral().unformat(a)))}if(-1===f.indexOf("number")&&(f+=",number"),-1===f.indexOf("negative")&&0===a.indexOf("-"))return!1;if(f.indexOf("range")>-1&&(d=parseFloat(f.substring(f.indexOf("[")+1,f.indexOf(";"))),e=parseFloat(f.substring(f.indexOf(";")+1,f.indexOf("]"))),h=!0),""!==i&&(j=!0),","===g){if(a.indexOf(".")>-1)return!1;a=a.replace(",",".")}if(""===a.replace(/[0-9-]/g,"")&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0;if(f.indexOf("float")>-1&&null!==a.match(new RegExp("^([0-9-]+)\\.([0-9]+)$"))&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0}return!1},errorMessage:"",errorMessageKey:"badInt"}),a.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"custom",validatorFunction:function(a,b){var c=new RegExp(b.valAttr("regexp"));return c.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"date",validatorFunction:function(b,c,d){var e=c.valAttr("format")||d.dateFormat||"yyyy-mm-dd",f="false"===c.valAttr("require-leading-zero");return a.formUtils.parseDate(b,e,f)!==!1},errorMessage:"",errorMessageKey:"badDate"}),a.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(b,c,d,e,f){var g=!0,h=c.attr("name"),i=a('input[type=checkbox][name^="'+h+'"]',f),j=i.filter(":checked").length,k=c.valAttr("qty");if(void 0===k){var l=c.get(0).nodeName;alert('Attribute "data-validation-qty" is missing from '+l+" named "+c.attr("name"))}var m=a.formUtils.numericRangeCheck(j,k);switch(m[0]){case"out":this.errorMessage=e.groupCheckedRangeStart+k+e.groupCheckedEnd,g=!1;break;case"min":this.errorMessage=e.groupCheckedTooFewStart+m[1]+e.groupCheckedEnd,g=!1;break;case"max":this.errorMessage=e.groupCheckedTooManyStart+m[1]+e.groupCheckedEnd,g=!1;break;default:g=!0}if(!g){var n=function(){i.unbind("click",n),i.filter("*[data-validation]").validateInputOnBlur(e,d,!1,"blur")};i.bind("click",n)}return g}})}(jQuery); -======= -!function(a,b){"use strict";var c=a(b),d=function(a,b){var c=b?b.find(a):a;if(c.length>0){var d=c.eq(0).attr("type");return"radio"===d||"checkbox"===d?c.filter(":checked").val():c.val()}return!1};a.formUtils=a.extend(a.formUtils||{},{$win:c,defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"#b94a48",errorMessageClass:"form-error",validationRuleAttribute:"data-validation",validationErrorMsgAttribute:"data-validation-error-msg",errorMessagePosition:"element",errorMessageTemplate:{container:'
    {messages}
    ',messages:"{errorTitle}
      {fields}
    ",field:"
  • {msg}
  • "},errorMessageCustom:this.errorDialogs.setTemplateMessage,scrollToTopOnError:!0,dateFormat:"yyyy-mm-dd",addValidClassOnAll:!1,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success",validateHiddenInputs:!1}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:!1,isValidatingEntireForm:!1,addValidator:function(a){var b=0===a.name.indexOf("validate_")?a.name:"validate_"+a.name;void 0===a.validateOnKeyUp&&(a.validateOnKeyUp=!0),this.validators[b]=a},isLoadingModules:!1,loadedModules:{},loadModules:function(b,d,e){if(void 0===e&&(e=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,d,e)});var f=!1,g=function(b,d){var g=a.split(b),h=g.length,i=function(){h--,0===h&&(a.formUtils.isLoadingModules=!1,e&&f&&("function"==typeof e?e():c.trigger("validatorsLoaded")))};h>0&&(a.formUtils.isLoadingModules=!0);var j="?_="+(new Date).getTime(),k=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(g,function(b,c){if(c=a.trim(c),0===c.length)i();else{var e=d+c+(".js"===c.slice(-3)?"":".js"),g=document.createElement("SCRIPT");e in a.formUtils.loadedModules?i():(a.formUtils.loadedModules[e]=1,f=!0,g.type="text/javascript",g.onload=i,g.src=e+(".dev.js"===e.slice(-7)?j:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+e)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(i(),this.onload=null,this.onreadystatechange=null)},k.appendChild(g))}})};if(d)g(b,d);else{var h=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(g(b,c),!0):!1};h()||a(h)}},warn:function(a){"console"in b?"function"==typeof b.console.warn?b.console.warn(a):"function"==typeof b.console.log&&b.console.log(a):alert(a)},validateInput:function(b,c,e,f,g){b.trigger("beforeValidation"),e=e||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var h=d(b),i={isValid:!0,shouldChangeDisplay:!0,errorMsg:""},j="true"===b.valAttr("optional"),k=!1,l=!h&&j,m=b.attr("disabled")||!b.is(":visible")&&!e.validateHiddenInputs,n=b.valAttr("depends-on")||b.valAttr("if-checked");if(m)return i.shouldChangeDisplay=!1,i;if(n){var o=d('input[name="'+n+'"]',f),p=b.valAttr("depends-on-value")||b.valAttr("if-checked-value"),q=!p||p===o;k=o&&q?!1:!0}if(l||k)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var r=b.attr(e.validationRuleAttribute),s=!0;if(!r)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var t=b.valAttr("ignore");return t&&a.each(t.split(""),function(a,b){h=h.replace(new RegExp("\\"+b),"")}),a.split(r,function(d){0!==d.indexOf("validate_")&&(d="validate_"+d);var i=a.formUtils.validators[d];if(!i||"function"!=typeof i.validatorFunction)throw new Error('Using undefined validator "'+d+'". Maybe you have forgotten to load the module that "'+d+'" belongs to?');"validate_checkbox_group"===d&&(b=f.find('[name="'+b.attr("name")+'"]:eq(0)'));var j=null;return("keyup"!==g||i.validateOnKeyUp)&&(j=i.validatorFunction(h,b,e,c,f)),j?void 0:(s=null,null!==j&&(s=b.attr(e.validationErrorMsgAttribute+"-"+d.replace("validate_","")),s||(s=b.attr(e.validationErrorMsgAttribute),s||(s="function"!=typeof i.errorMessageKey?c[i.errorMessageKey]:c[i.errorMessageKey(e)],s||(s=i.errorMessage)))),!1)}," "),"string"==typeof s?(b.trigger("validation",!1),i.errorMsg=s,i.isValid=!1,i.shouldChangeDisplay=!0):null===s?i.shouldChangeDisplay=e.addValidClassOnAll:(b.trigger("validation",!0),i.shouldChangeDisplay=!0),"function"==typeof e.onElementValidate&&null!==s&&e.onElementValidate(i.isValid,b,f,s),i},parseDate:function(b,c,d){var e,f,g,h,i=c.replace(/[a-zA-Z]/gi,"").substring(0,1),j="^",k=c.split(i||null);if(a.each(k,function(a,b){j+=(a>0?"\\"+i:"")+"(\\d{"+b.length+"})"}),j+="$",d){var l=[];a.each(b.split(i),function(a,b){1===b.length&&(b="0"+b),l.push(b)}),b=l.join(i)}if(e=b.match(new RegExp(j)),null===e)return!1;var m=function(b,c,d){for(var e=0;e28&&(h%4!==0||h%100===0&&h%400!==0)||2===g&&f>29&&(h%4===0||h%100!==0&&h%400===0)||g>12||0===g?!1:this.isShortMonth(g)&&f>30||!this.isShortMonth(g)&&f>31||0===f?!1:[h,g,f]},parseDateInt:function(a){return 0===a.indexOf("0")&&(a=a.replace("0","")),parseInt(a,10)},isShortMonth:function(a){return a%2===0&&7>a||a%2!==0&&a>7},lengthRestriction:function(b,c){var d=parseInt(c.text(),10),e=0,f=function(){var a=b.val().length;if(a>d){var f=b.scrollTop();b.val(b.val().substring(0,d)),b.scrollTop(f)}e=d-a,0>e&&(e=0),c.text(e)};a(b).bind("keydown keyup keypress focus blur",f).bind("cut paste",function(){setTimeout(f,100)}),a(document).bind("ready",f)},numericRangeCheck:function(b,c){var d=a.split(c),e=parseInt(c.substr(3),10);return 1===d.length&&-1===c.indexOf("min")&&-1===c.indexOf("max")&&(d=[c,c]),2===d.length&&(bparseInt(d[1],10))?["out",d[0],d[1]]:0===c.indexOf("min")&&e>b?["min",e]:0===c.indexOf("max")&&b>e?["max",e]:["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function(b,d,e){var f={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC solid 1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},g=function(a,b){var c=b.offset();a.css({width:b.outerWidth(),left:c.left+"px",top:c.top+b.outerHeight()+"px"})};e&&a.extend(f,e),f.css.position="absolute",f.css["z-index"]=9999,b.attr("autocomplete","off"),0===this._numSuggestionElements&&c.bind("resize",function(){a(".jquery-form-suggestions").each(function(){var b=a(this),c=b.attr("data-suggest-container");g(b,a(".suggestions-"+c).eq(0))})}),this._numSuggestionElements++;var h=function(b){var c=b.valAttr("suggestion-nr");a.formUtils._selectedSuggestion=null,a.formUtils._previousTypedVal=null,a(".jquery-form-suggestion-"+c).fadeOut("fast")};return b.data("suggestions",d).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){a(this).trigger("keyup"),a.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var c=a(this),d=[],e=a.trim(c.val()).toLocaleLowerCase();if(e!==a.formUtils._previousTypedVal){a.formUtils._previousTypedVal=e;var i=!1,j=c.valAttr("suggestion-nr"),k=a(".jquery-form-suggestion-"+j);if(k.scrollTop(0),""!==e){var l=e.length>2;a.each(c.data("suggestions"),function(a,b){var c=b.toLocaleLowerCase();return c===e?(d.push(""+b+""),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new RegExp(e,"gi"),"$&")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("
    ").css(f.css).appendTo("body"),b.addClass("suggestions-"+j),k.attr("data-suggest-container",j).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+j)):d.length>0&&!k.is(":visible")&&k.show(),d.length>0&&e.length!==d[0].length&&(g(k,c),k.html(""),a.each(d,function(b,d){a("
    ").append(d).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo(k).click(function(){c.focus(),c.val(a(this).text()),h(c)})}))}}).unbind("keydown.validation").bind("keydown.validation",function(b){var c,d,e=b.keyCode?b.keyCode:b.which,g=a(this);if(13===e&&null!==a.formUtils._selectedSuggestion){if(c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c),d.length>0){var i=d.find("div").eq(a.formUtils._selectedSuggestion).text();g.val(i),h(g),b.preventDefault()}}else{c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c);var j=d.children();if(j.length>0&&a.inArray(e,[38,40])>-1){38===e?(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=j.length-1:a.formUtils._selectedSuggestion--,a.formUtils._selectedSuggestion<0&&(a.formUtils._selectedSuggestion=j.length-1)):40===e&&(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=0:a.formUtils._selectedSuggestion++,a.formUtils._selectedSuggestion>j.length-1&&(a.formUtils._selectedSuggestion=0));var k=d.innerHeight(),l=d.scrollTop(),m=d.children().eq(0).outerHeight(),n=m*a.formUtils._selectedSuggestion;return(l>n||n>l+k)&&d.scrollTop(n),j.removeClass("active-suggestion").css("background","none").eq(a.formUtils._selectedSuggestion).addClass("active-suggestion").css(f.activeSuggestionCSS),b.preventDefault(),!1}}}).unbind("blur.suggest").bind("blur.suggest",function(){h(a(this))}),b},LANG:{errorTitle:"Form submission failed!",requiredField:"This is a required field",requiredFields:"You have not answered all required fields",badTime:"You have not given a correct time",badEmail:"You have not given a correct e-mail address",badTelephone:"You have not given a correct phone number",badSecurityAnswer:"You have not given a correct answer to the security question",badDate:"You have not given a correct date",lengthBadStart:"The input value must be between ",lengthBadEnd:" characters",lengthTooLongStart:"The input value is longer than ",lengthTooShortStart:"The input value is shorter than ",notConfirmed:"Input values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"The input value is not a correct URL",badCustomVal:"The input value is incorrect",andSpaces:" and spaces ",badInt:"The input value was not a correct number",badSecurityNumber:"Your social security number was incorrect",badUKVatAnswer:"Incorrect UK VAT Number",badStrength:"The password isn't strong enough",badNumberOfSelectedOptionsStart:"You have to choose at least ",badNumberOfSelectedOptionsEnd:" answers",badAlphaNumeric:"The input value can only contain alphanumeric characters ",badAlphaNumericExtra:" and ",wrongFileSize:"The file you are trying to upload is too large (max %s)",wrongFileType:"Only files of type %s is allowed",groupCheckedRangeStart:"Please choose between ",groupCheckedTooFewStart:"Please choose at least ",groupCheckedTooManyStart:"Please choose a maximum of ",groupCheckedEnd:" item(s)",badCreditCard:"The credit card number is not correct",badCVV:"The CVV number was not correct",wrongFileDim:"Incorrect image dimensions,",imageTooTall:"the image can not be taller than",imageTooWide:"the image can not be wider than",imageTooSmall:"the image was too small",min:"min",max:"max",imageRatioNotAccepted:"Image ratio is not be accepted",badBrazilTelephoneAnswer:"The phone number entered is invalid",badBrazilCEPAnswer:"The CEP entered is invalid",badBrazilCPFAnswer:"The CPF entered is invalid"}})}(jQuery,window),function(a){"use strict";a.split=function(b,c){if("function"!=typeof c){if(!b)return[];var d=[];return a.each(b.split(c?c:/[,|\-\s]\s*/g),function(b,c){c=a.trim(c),c.length&&d.push(c)}),d}b&&a.each(b.split(/[,|\-\s]\s*/g),function(b,d){return d=a.trim(d),d.length?c(d,b):void 0})},a.validate=function(b){var c=a.extend(a.formUtils.defaultConfig(),{form:"form",validateOnEvent:!1,validateOnBlur:!0,validateCheckboxRadioOnClick:!0,showHelpOnFocus:!0,addSuggestions:!0,modules:"",onModulesLoaded:null,language:!1,onSuccess:!1,onError:!1,onElementValidate:!1});if(b=a.extend(c,b||{}),b.lang&&"en"!==b.lang){var d="lang/"+b.lang+".js";b.modules+=b.modules.length?","+d:d}a(b.form).each(function(c,d){d.validationConfig=b;var e=a(d);a.formUtils.$win.trigger("formValidationSetup",[e,b]),e.trigger("formValidationSetup",[b]),e.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation"),e.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation"),e.bind("submit.validation",function(){var c=a(this);if(a.formUtils.haltValidation)return!1;if(a.formUtils.isLoadingModules)return setTimeout(function(){c.trigger("submit.validation")},200),!1;var d=c.isValid(b.language,b);if(a.formUtils.haltValidation)return!1;if(!d||"function"!=typeof b.onSuccess)return d||"function"!=typeof b.onError?d:(b.onError(c),!1);var e=b.onSuccess(c);return e===!1?!1:void 0}).bind("reset.validation",function(){var c=a(this),d=c.find("."+b.errorElementClass+",.valid");c.find("."+b.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(d,b)}).addClass("has-validation-callback"),b.showHelpOnFocus&&e.showHelpOnFocus(),b.addSuggestions&&e.addSuggestions(),b.validateOnBlur&&(e.validateOnBlur(b.language,b),e.bind("html5ValidationAttrsFound",function(){e.validateOnBlur(b.language,b)})),b.validateOnEvent&&e.validateOnEvent(b.language,b)}),""!==b.modules&&a.formUtils.loadModules(b.modules,!1,function(){"function"==typeof b.onModulesLoaded&&b.onModulesLoaded(),a.formUtils.$win.trigger("validatorsLoaded",["string"==typeof b.form?a(b.form):b.form,b])})}}(jQuery),function(a){"use strict";a.formUtils=a.extend(a.formUtils||{},{validators:{},isLoadingModules:!1,loadedModules:{},loadModules:function(b,c,d){if(void 0===d&&(d=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,c,d)},10);var e=!1,f=function(b,c){var f=a.split(b),g=f.length,h=function(){g--,0===g&&(a.formUtils.isLoadingModules=!1,d&&e&&("function"==typeof d?d():a.formUtils.$win.trigger("validatorsLoaded")))};g>0&&(a.formUtils.isLoadingModules=!0);var i="?_="+(new Date).getTime(),j=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(f,function(b,d){if(d=a.trim(d),0===d.length)h();else{var f=c+d+(".js"===d.slice(-3)?"":".js"),g=document.createElement("SCRIPT");f in a.formUtils.loadedModules?h():(a.formUtils.loadedModules[f]=1,e=!0,g.type="text/javascript",g.onload=h,g.src=f+(".dev.js"===f.slice(-7)?i:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+f)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(h(),this.onload=null,this.onreadystatechange=null)},j.appendChild(g))}})};if(c)f(b,c);else{var g=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(f(b,c),!0):!1};g()||a(g)}}})}(jQuery),function(a){var b=0;a.fn.validateOnBlur=function(b,c){return this.find("*[data-validation]").bind("blur.validation",function(){a(this).validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&this.find("input[type=checkbox][data-validation],input[type=radio][data-validation]").bind("click.validation",function(){a(this).validateInputOnBlur(b,c,!0,"click")}),this},a.fn.validateOnEvent=function(b,c){return this.find("*[data-validation-event]").each(function(){var d=a(this),e=d.valAttr("event");e&&d.unbind(e+".validation").bind(e+".validation",function(d){9!==(d||{}).keyCode&&a(this).validateInputOnBlur(b,c,!0,e)})}),this},a.fn.showHelpOnFocus=function(c){return c||(c="data-validation-help"),this.find(".has-help-txt").valAttr("has-keyup-event",!1).removeClass("has-help-txt"),this.find("textarea,input").each(function(){var d=a(this),e="jquery_form_help_"+ ++b,f=d.attr(c);f&&d.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var b=d.parent().find("."+e);0===b.length&&(b=a("").addClass(e).addClass("help").addClass("help-block").text(f).hide(),d.after(b)),b.fadeIn()}).unbind("blur.help").bind("blur.help",function(){a(this).parent().find("."+e).fadeOut("slow")})}),this},a.fn.validate=function(b,c,d){var e=a.extend({},a.formUtils.LANG,d||{});this.each(function(){var d=a(this),f=d.closest("form").get(0).validationConfig||{};d.one("validation",function(a,c){"function"==typeof b&&b(c,this,a)}),d.validateInputOnBlur(e,a.extend({},f,c||{}),!0)})},a.fn.willPostponeValidation=function(){return(this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!window.postponedValidation},a.fn.validateInputOnBlur=function(b,c,d,e){if(a.formUtils.eventType=e,this.willPostponeValidation()){var f=this,g=this.valAttr("postpone")||200;return window.postponedValidation=function(){f.validateInputOnBlur(b,c,d,e),window.postponedValidation=!1},setTimeout(function(){window.postponedValidation&&window.postponedValidation()},g),this}b=a.extend({},a.formUtils.LANG,b||{}),a.formUtils.errorDialogs.removeErrorStyling(this,c);var h=this,i=h.closest("form"),j=a.formUtils.validateInput(h,b,c,i,e);return d&&h.unbind("keyup.validation"),j.isValid?j.shouldChangeDisplay&&(h.addClass("valid"),a.formUtils.errorDialogs.getParentContainer(h).addClass(c.inputParentClassOnSuccess)):j.isValid||(a.formUtils.errorDialogs.applyErrorStyling(h,c),a.formUtils.errorDialogs.setInlineErrorMessage(h,j.errorMsg,c,c.errorMessagePosition),d&&h.bind("keyup.validation",function(d){9!==d.keyCode&&a(this).validateInputOnBlur(b,c,!1,"keyup")})),this},a.fn.valAttr=function(a,b){return void 0===b?this.attr("data-validation-"+a):b===!1||null===b?this.removeAttr("data-validation-"+a):(a=a.length>0?"-"+a:"",this.attr("data-validation"+a,b))},a.fn.isValid=function(b,c,d){if(a.formUtils.isLoadingModules){var e=this;return setTimeout(function(){e.isValid(b,c,d)},200),null}c=a.extend({},a.formUtils.defaultConfig(),c||{}),b=a.extend({},a.formUtils.LANG,b||{}),d=d!==!1,a.formUtils.errorDisplayPreventedWhenHalted&&(delete a.formUtils.errorDisplayPreventedWhenHalted,d=!1),a.formUtils.isValidatingEntireForm=!0,a.formUtils.haltValidation=!1;var f=function(b,e){a.inArray(b,h)<0&&h.push(b),i.push(e),e.attr("current-error",b),d&&a.formUtils.errorDialogs.applyErrorStyling(e,c)},g=[],h=[],i=[],j=this,k=function(b,d){return"submit"===d||"button"===d||"reset"===d?!0:a.inArray(b,c.ignore||[])>-1};if(d&&(j.find("."+c.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(j.find("."+c.errorElementClass+",.valid"),c)),j.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var d=a(this),e=d.attr("type"),h="radio"===e||"checkbox"===e,i=d.attr("name");if(!k(i,e)&&(!h||a.inArray(i,g)<0)){h&&g.push(i);var l=a.formUtils.validateInput(d,b,c,j,"submit");l.shouldChangeDisplay&&(l.isValid?l.isValid&&(d.valAttr("current-error",!1).addClass("valid"),a.formUtils.errorDialogs.getParentContainer(d).addClass(c.inputParentClassOnSuccess)):f(l.errorMsg,d))}}),"function"==typeof c.onValidate){var l=c.onValidate(j);a.isArray(l)?a.each(l,function(a,b){f(b.message,b.element)}):l&&l.element&&l.message&&f(l.message,l.element)}return a.formUtils.isValidatingEntireForm=!1,!a.formUtils.haltValidation&&i.length>0?(d&&("top"===c.errorMessagePosition?a.formUtils.errorDialogs.setTemplateMessage(j,b.errorTitle,h,c):"custom"===c.errorMessagePosition?(a.formUtils.warn("Use deprecated function errorMessageCustom"),"function"==typeof c.errorMessageCustom&&c.errorMessageCustom(j,b.errorTitle,h,c)):a.each(i,function(b,d){a.formUtils.errorDialogs.setInlineErrorMessage(d,d.attr("current-error"),c,c.errorMessagePosition)}),c.scrollToTopOnError&&a.formUtils.$win.scrollTop(j.offset().top-20)),!1):(!d&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),!a.formUtils.haltValidation)},a.fn.validateForm=function(b,c){return a.formUtils.warn("Use of deprecated function $.validateForm, use $.isValid instead"),this.isValid(b,c,!0)},a.fn.restrictLength=function(b){return new a.formUtils.lengthRestriction(this,b),this},a.fn.addSuggestions=function(b){var c=!1;return this.find("input").each(function(){var d=a(this);c=a.split(d.attr("data-suggestions")),c.length>0&&!d.hasClass("has-suggestions")&&(a.formUtils.suggest(d,c,b),d.addClass("has-suggestions"))}),this}}(jQuery),function(a){"use strict";var b={getParentContainer:function(b){if(b.valAttr("error-msg-container"))return a(b.valAttr("error-msg-container"));var c=b.parent();if(!c.hasClass("form-group")&&!c.closest("form").hasClass("form-horizontal")){var d=c.closest(".form-group");if(d.length)return d.eq(0)}return c},applyErrorStyling:function(a,b){a.addClass(b.errorElementClass).removeClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnError).removeClass(b.inputParentClassOnSuccess),""!==b.borderColorOnError&&a.css("border-color",b.borderColorOnError)},removeErrorStyling:function(c,d){c.each(function(){var c=a(this);b.setInlineErrorMessage(c,"",d,d.errorMessagePosition),c.removeClass("valid").removeClass(d.errorElementClass).css("border-color",""),b.getParentContainer(c).removeClass(d.inputParentClassOnError).removeClass(d.inputParentClassOnSuccess).find("."+d.errorMessageClass).remove()})},setInlineErrorMessage:function(b,c,d,e){var f,g=document.getElementById(b.attr("name")+"_err_msg"),h=function(d){a.formUtils.$win.trigger("validationErrorDisplay",[b,d]),d.html(c)};if(g?(a.formUtils.warn("Using deprecated element reference "+g.id),e=a(g)):"function"==typeof e&&(e=e(b,c,d)),"object"==typeof e){var i=!1;e.find("."+d.errorMessageClass).each(function(){return this.inputReferer===b[0]?(i=a(this),!1):void 0}),i?c?h(i):i.remove():""!==c&&(f=a('
    '),h(f),f[0].inputReferer=b[0],e.prepend(f))}else{var j=this.getParentContainer(b);f=j.find("."+d.errorMessageClass+".help-block"),0===f.length&&(f=a("").addClass("help-block").addClass(d.errorMessageClass),f.appendTo(j)),h(f)}},setTemplateMessage:function(b,c,d,e){var f,g=e.errorMessageTemplate.messages.replace(/\{errorTitle\}/g,c),h=[];a.each(d,function(a,b){h.push(e.errorMessageTemplate.field.replace(/\{msg\}/g,b))}),g=g.replace(/\{fields\}/g,h.join("")),f=e.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g,e.errorMessageClass),f=f.replace(/\{messages\}/g,g),b.children().eq(0).before(f)}};a.formUtils=a.extend(a.formUtils||{},{errorDialogs:b})}(jQuery),function(a){a.formUtils.addValidator({name:"email",validatorFunction:function(b){var c=b.toLowerCase().split("@"),d=c[0],e=c[1];if(d&&e){if(0===d.indexOf('"')){var f=d.length;if(d=d.replace(/\"/g,""),d.length!==f-2)return!1}return a.formUtils.validators.validate_domain.validatorFunction(c[1])&&0!==d.indexOf(".")&&"."!==d.substring(d.length-1,d.length)&&-1===d.indexOf("..")&&!/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(d)}return!1},errorMessage:"",errorMessageKey:"badEmail"}),a.formUtils.addValidator({name:"domain",validatorFunction:function(a){return a.length>0&&a.length<=253&&!/[^a-zA-Z0-9]/.test(a.slice(-2))&&!/[^a-zA-Z0-9]/.test(a.substr(0,1))&&!/[^a-zA-Z0-9\.\-]/.test(a)&&1===a.split("..").length&&a.split(".").length>1},errorMessage:"",errorMessageKey:"badDomain"}),a.formUtils.addValidator({name:"required",validatorFunction:function(b,c,d,e,f){switch(c.attr("type")){case"checkbox":return c.is(":checked");case"radio":return f.find('input[name="'+c.attr("name")+'"]').filter(":checked").length>0;default:return""!==a.trim(b)}},errorMessage:"",errorMessageKey:function(a){return"top"===a.errorMessagePosition||"custom"===a.errorMessagePosition?"requiredFields":"requiredField"}}),a.formUtils.addValidator({name:"length",validatorFunction:function(b,c,d,e){var f=c.valAttr("length"),g=c.attr("type");if(void 0===f)return alert('Please add attribute "data-validation-length" to '+c[0].nodeName+" named "+c.attr("name")),!0;var h,i="file"===g&&void 0!==c.get(0).files?c.get(0).files.length:b.length,j=a.formUtils.numericRangeCheck(i,f);switch(j[0]){case"out":this.errorMessage=e.lengthBadStart+f+e.lengthBadEnd,h=!1;break;case"min":this.errorMessage=e.lengthTooShortStart+j[1]+e.lengthBadEnd,h=!1;break;case"max":this.errorMessage=e.lengthTooLongStart+j[1]+e.lengthBadEnd,h=!1;break;default:h=!0}return h},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"url",validatorFunction:function(b){var c=/^(https?|ftp):\/\/((((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|\[|\]|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;if(c.test(b)){var d=b.split("://")[1],e=d.indexOf("/");return e>-1&&(d=d.substr(0,e)),a.formUtils.validators.validate_domain.validatorFunction(d)}return!1},errorMessage:"",errorMessageKey:"badUrl"}),a.formUtils.addValidator({name:"number",validatorFunction:function(a,b,c){if(""!==a){var d,e,f=b.valAttr("allowing")||"",g=b.valAttr("decimal-separator")||c.decimalSeparator,h=!1,i=b.valAttr("step")||"",j=!1,k=b.attr("data-sanitize")||"",l=k.match(/(^|[\s])numberFormat([\s]|$)/i);if(l){if(!window.numeral)throw new ReferenceError("The data-sanitize value numberFormat cannot be used without the numeral library. Please see Data Validation in http://www.formvalidator.net for more information.");a.length&&(a=String(numeral().unformat(a)))}if(-1===f.indexOf("number")&&(f+=",number"),-1===f.indexOf("negative")&&0===a.indexOf("-"))return!1;if(f.indexOf("range")>-1&&(d=parseFloat(f.substring(f.indexOf("[")+1,f.indexOf(";"))),e=parseFloat(f.substring(f.indexOf(";")+1,f.indexOf("]"))),h=!0),""!==i&&(j=!0),","===g){if(a.indexOf(".")>-1)return!1;a=a.replace(",",".")}if(""===a.replace(/[0-9-]/g,"")&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0;if(f.indexOf("float")>-1&&null!==a.match(new RegExp("^([0-9-]+)\\.([0-9]+)$"))&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0}return!1},errorMessage:"",errorMessageKey:"badInt"}),a.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"custom",validatorFunction:function(a,b){var c=new RegExp(b.valAttr("regexp"));return c.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"date",validatorFunction:function(b,c,d){var e=c.valAttr("format")||d.dateFormat||"yyyy-mm-dd",f="false"===c.valAttr("require-leading-zero");return a.formUtils.parseDate(b,e,f)!==!1},errorMessage:"",errorMessageKey:"badDate"}),a.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(b,c,d,e,f){var g=!0,h=c.attr("name"),i=a('input[type=checkbox][name^="'+h+'"]',f),j=i.filter(":checked").length,k=c.valAttr("qty");if(void 0===k){var l=c.get(0).nodeName;alert('Attribute "data-validation-qty" is missing from '+l+" named "+c.attr("name"))}var m=a.formUtils.numericRangeCheck(j,k);switch(m[0]){case"out":this.errorMessage=e.groupCheckedRangeStart+k+e.groupCheckedEnd,g=!1;break;case"min":this.errorMessage=e.groupCheckedTooFewStart+m[1]+e.groupCheckedEnd,g=!1;break;case"max":this.errorMessage=e.groupCheckedTooManyStart+m[1]+e.groupCheckedEnd,g=!1;break;default:g=!0}if(!g){var n=function(){i.unbind("click",n),i.filter("*[data-validation]").validateInputOnBlur(e,d,!1,"blur")};i.bind("click",n)}return g}})}(jQuery); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";var b={getParentContainer:function(b){if(b.valAttr("error-msg-container"))return a(b.valAttr("error-msg-container"));var c=b.parent();if(!c.hasClass("form-group")&&!c.closest("form").hasClass("form-horizontal")){var d=c.closest(".form-group");if(d.length)return d.eq(0)}return c},applyErrorStyling:function(a,b){a.addClass(b.errorElementClass).removeClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnError).removeClass(b.inputParentClassOnSuccess),""!==b.borderColorOnError&&a.css("border-color",b.borderColorOnError)},removeErrorStyling:function(c,d){c.each(function(){var c=a(this);b.setInlineErrorMessage(c,"",d,d.errorMessagePosition),c.removeClass("valid").removeClass(d.errorElementClass).css("border-color",""),b.getParentContainer(c).removeClass(d.inputParentClassOnError).removeClass(d.inputParentClassOnSuccess).find("."+d.errorMessageClass).remove()})},setInlineErrorMessage:function(b,c,d,e){var f,g=document.getElementById(b.attr("name")+"_err_msg"),h=function(d){a.formUtils.$win.trigger("validationErrorDisplay",[b,d]),d.html(c)};if(g?(a.formUtils.warn("Using deprecated element reference "+g.id),e=a(g)):"function"==typeof e&&(e=e(b,c,d)),"object"==typeof e){var i=!1;e.find("."+d.errorMessageClass).each(function(){return this.inputReferer===b[0]?(i=a(this),!1):void 0}),i?c?h(i):i.remove():""!==c&&(f=a('
    '),h(f),f[0].inputReferer=b[0],e.prepend(f))}else{var j=this.getParentContainer(b);f=j.find("."+d.errorMessageClass+".help-block"),0===f.length&&(f=a("").addClass("help-block").addClass(d.errorMessageClass),f.appendTo(j)),h(f)}},setTemplateMessage:function(b,c,d,e){var f,g=e.errorMessageTemplate.messages.replace(/\{errorTitle\}/g,c),h=[];a.each(d,function(a,b){h.push(e.errorMessageTemplate.field.replace(/\{msg\}/g,b))}),g=g.replace(/\{fields\}/g,h.join("")),f=e.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g,e.errorMessageClass),f=f.replace(/\{messages\}/g,g),b.children().eq(0).before(f)}};a.formUtils=a.extend(a.formUtils||{},{errorDialogs:b})}(a),function(a){var b=0;a.fn.validateOnBlur=function(b,c){return this.find("*[data-validation]").bind("blur.validation",function(){a(this).validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&this.find("input[type=checkbox][data-validation],input[type=radio][data-validation]").bind("click.validation",function(){a(this).validateInputOnBlur(b,c,!0,"click")}),this},a.fn.validateOnEvent=function(b,c){return this.find("*[data-validation-event]").each(function(){var d=a(this),e=d.valAttr("event");e&&d.unbind(e+".validation").bind(e+".validation",function(d){9!==(d||{}).keyCode&&a(this).validateInputOnBlur(b,c,!0,e)})}),this},a.fn.showHelpOnFocus=function(c){return c||(c="data-validation-help"),this.find(".has-help-txt").valAttr("has-keyup-event",!1).removeClass("has-help-txt"),this.find("textarea,input").each(function(){var d=a(this),e="jquery_form_help_"+ ++b,f=d.attr(c);f&&d.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var b=d.parent().find("."+e);0===b.length&&(b=a("").addClass(e).addClass("help").addClass("help-block").text(f).hide(),d.after(b)),b.fadeIn()}).unbind("blur.help").bind("blur.help",function(){a(this).parent().find("."+e).fadeOut("slow")})}),this},a.fn.validate=function(b,c,d){var e=a.extend({},a.formUtils.LANG,d||{});this.each(function(){var d=a(this),f=d.closest("form").get(0).validationConfig||{};d.one("validation",function(a,c){"function"==typeof b&&b(c,this,a)}),d.validateInputOnBlur(e,a.extend({},f,c||{}),!0)})},a.fn.willPostponeValidation=function(){return(this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!window.postponedValidation},a.fn.validateInputOnBlur=function(b,c,d,e){if(a.formUtils.eventType=e,this.willPostponeValidation()){var f=this,g=this.valAttr("postpone")||200;return window.postponedValidation=function(){f.validateInputOnBlur(b,c,d,e),window.postponedValidation=!1},setTimeout(function(){window.postponedValidation&&window.postponedValidation()},g),this}b=a.extend({},a.formUtils.LANG,b||{}),a.formUtils.errorDialogs.removeErrorStyling(this,c);var h=this,i=h.closest("form"),j=a.formUtils.validateInput(h,b,c,i,e);return d&&h.unbind("keyup.validation"),j.isValid?j.shouldChangeDisplay&&(h.addClass("valid"),a.formUtils.errorDialogs.getParentContainer(h).addClass(c.inputParentClassOnSuccess)):j.isValid||(a.formUtils.errorDialogs.applyErrorStyling(h,c),a.formUtils.errorDialogs.setInlineErrorMessage(h,j.errorMsg,c,c.errorMessagePosition),d&&h.bind("keyup.validation",function(d){9!==d.keyCode&&a(this).validateInputOnBlur(b,c,!1,"keyup")})),this},a.fn.valAttr=function(a,b){return void 0===b?this.attr("data-validation-"+a):b===!1||null===b?this.removeAttr("data-validation-"+a):(a=a.length>0?"-"+a:"",this.attr("data-validation"+a,b))},a.fn.isValid=function(b,c,d){if(a.formUtils.isLoadingModules){var e=this;return setTimeout(function(){e.isValid(b,c,d)},200),null}c=a.extend({},a.formUtils.defaultConfig(),c||{}),b=a.extend({},a.formUtils.LANG,b||{}),d=d!==!1,a.formUtils.errorDisplayPreventedWhenHalted&&(delete a.formUtils.errorDisplayPreventedWhenHalted,d=!1),a.formUtils.isValidatingEntireForm=!0,a.formUtils.haltValidation=!1;var f=function(b,e){a.inArray(b,h)<0&&h.push(b),i.push(e),e.attr("current-error",b),d&&a.formUtils.errorDialogs.applyErrorStyling(e,c)},g=[],h=[],i=[],j=this,k=function(b,d){return"submit"===d||"button"===d||"reset"===d?!0:a.inArray(b,c.ignore||[])>-1};if(d&&(j.find("."+c.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(j.find("."+c.errorElementClass+",.valid"),c)),j.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var d=a(this),e=d.attr("type"),h="radio"===e||"checkbox"===e,i=d.attr("name");if(!k(i,e)&&(!h||a.inArray(i,g)<0)){h&&g.push(i);var l=a.formUtils.validateInput(d,b,c,j,"submit");l.shouldChangeDisplay&&(l.isValid?l.isValid&&(d.valAttr("current-error",!1).addClass("valid"),a.formUtils.errorDialogs.getParentContainer(d).addClass(c.inputParentClassOnSuccess)):f(l.errorMsg,d))}}),"function"==typeof c.onValidate){var l=c.onValidate(j);a.isArray(l)?a.each(l,function(a,b){f(b.message,b.element)}):l&&l.element&&l.message&&f(l.message,l.element)}return a.formUtils.isValidatingEntireForm=!1,!a.formUtils.haltValidation&&i.length>0?(d&&("top"===c.errorMessagePosition?a.formUtils.errorDialogs.setTemplateMessage(j,b.errorTitle,h,c):"custom"===c.errorMessagePosition?(a.formUtils.warn("Use deprecated function errorMessageCustom"),"function"==typeof c.errorMessageCustom&&c.errorMessageCustom(j,b.errorTitle,h,c)):a.each(i,function(b,d){a.formUtils.errorDialogs.setInlineErrorMessage(d,d.attr("current-error"),c,c.errorMessagePosition)}),c.scrollToTopOnError&&a.formUtils.$win.scrollTop(j.offset().top-20)),!1):(!d&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),!a.formUtils.haltValidation)},a.fn.validateForm=function(b,c){return a.formUtils.warn("Use of deprecated function $.validateForm, use $.isValid instead"),this.isValid(b,c,!0)},a.fn.restrictLength=function(b){return new a.formUtils.lengthRestriction(this,b),this},a.fn.addSuggestions=function(b){var c=!1;return this.find("input").each(function(){var d=a(this);c=a.split(d.attr("data-suggestions")),c.length>0&&!d.hasClass("has-suggestions")&&(a.formUtils.suggest(d,c,b),d.addClass("has-suggestions"))}),this}}(a),function(a){"use strict";a.setupValidation=function(b){var c=a(b.form||"form");a.each(b.validate||b.validation||{},function(b,d){var e;e="#"===b[0]?a(b):"."===b[0]?c.find(b):c.find('*[name="'+b+'"]'),e.attr("data-validation",d.validation),a.each(d,function(a,b){"validation"!==a&&b!==!1&&(b===!0&&(b="true"),"_"===a[0]?(a=a.substring(1),b===!1?e.removeAttr(a):e.attr(a,b)):e.valAttr(a,b))})}),a.validate(b)}}(a),function(a){"use strict";a.formUtils=a.extend(a.formUtils||{},{validators:{},isLoadingModules:!1,loadedModules:{},loadModules:function(b,c,d){if(void 0===d&&(d=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,c,d)},10);var e=!1,f=function(b,c){var f=a.split(b),g=f.length,h=function(){g--,0===g&&(a.formUtils.isLoadingModules=!1,d&&e&&("function"==typeof d?d():a.formUtils.$win.trigger("validatorsLoaded")))};g>0&&(a.formUtils.isLoadingModules=!0);var i="?_="+(new Date).getTime(),j=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(f,function(b,d){if(d=a.trim(d),0===d.length)h();else{var f=c+d+(".js"===d.slice(-3)?"":".js"),g=document.createElement("SCRIPT");f in a.formUtils.loadedModules?h():(a.formUtils.loadedModules[f]=1,e=!0,g.type="text/javascript",g.onload=h,g.src=f+(".dev.js"===f.slice(-7)?i:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+f)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(h(),this.onload=null,this.onreadystatechange=null)},j.appendChild(g))}})};if(c)f(b,c);else{var g=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(f(b,c),!0):!1};g()||a(g)}}})}(a),function(a){"use strict";a.split=function(b,c){if("function"!=typeof c){if(!b)return[];var d=[];return a.each(b.split(c?c:/[,|\-\s]\s*/g),function(b,c){c=a.trim(c),c.length&&d.push(c)}),d}b&&a.each(b.split(/[,|\-\s]\s*/g),function(b,d){return d=a.trim(d),d.length?c(d,b):void 0})},a.validate=function(b){var c=a.extend(a.formUtils.defaultConfig(),{form:"form",validateOnEvent:!1,validateOnBlur:!0,validateCheckboxRadioOnClick:!0,showHelpOnFocus:!0,addSuggestions:!0,modules:"",onModulesLoaded:null,language:!1,onSuccess:!1,onError:!1,onElementValidate:!1});if(b=a.extend(c,b||{}),b.lang&&"en"!==b.lang){var d="lang/"+b.lang+".js";b.modules+=b.modules.length?","+d:d}a(b.form).each(function(c,d){d.validationConfig=b;var e=a(d);a.formUtils.$win.trigger("formValidationSetup",[e,b]),e.trigger("formValidationSetup",[b]),e.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation"),e.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation"),e.bind("submit.validation",function(){var c=a(this);if(a.formUtils.haltValidation)return!1;if(a.formUtils.isLoadingModules)return setTimeout(function(){c.trigger("submit.validation")},200),!1;var d=c.isValid(b.language,b);if(a.formUtils.haltValidation)return!1;if(!d||"function"!=typeof b.onSuccess)return d||"function"!=typeof b.onError?d:(b.onError(c),!1);var e=b.onSuccess(c);return e===!1?!1:void 0}).bind("reset.validation",function(){var c=a(this),d=c.find("."+b.errorElementClass+",.valid");c.find("."+b.errorMessageClass+".alert").remove(),a.formUtils.errorDialogs.removeErrorStyling(d,b)}).addClass("has-validation-callback"),b.showHelpOnFocus&&e.showHelpOnFocus(),b.addSuggestions&&e.addSuggestions(),b.validateOnBlur&&(e.validateOnBlur(b.language,b),e.bind("html5ValidationAttrsFound",function(){e.validateOnBlur(b.language,b)})),b.validateOnEvent&&e.validateOnEvent(b.language,b)}),""!==b.modules&&a.formUtils.loadModules(b.modules,!1,function(){"function"==typeof b.onModulesLoaded&&b.onModulesLoaded(),a.formUtils.$win.trigger("validatorsLoaded",["string"==typeof b.form?a(b.form):b.form,b])})}}(a),function(a,b){"use strict";var c=a(b),d=function(a,b){var c=b?b.find(a):a;if(c.length>0){var d=c.eq(0).attr("type");return"radio"===d||"checkbox"===d?c.filter(":checked").val():c.val()}return!1};a.formUtils=a.extend(a.formUtils||{},{$win:c,defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"#b94a48",errorMessageClass:"form-error",validationRuleAttribute:"data-validation",validationErrorMsgAttribute:"data-validation-error-msg",errorMessagePosition:"element",errorMessageTemplate:{container:'
    {messages}
    ',messages:"{errorTitle}
      {fields}
    ",field:"
  • {msg}
  • "},errorMessageCustom:this.errorDialogs.setTemplateMessage,scrollToTopOnError:!0,dateFormat:"yyyy-mm-dd",addValidClassOnAll:!1,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success",validateHiddenInputs:!1}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:!1,isValidatingEntireForm:!1,addValidator:function(a){var b=0===a.name.indexOf("validate_")?a.name:"validate_"+a.name;void 0===a.validateOnKeyUp&&(a.validateOnKeyUp=!0),this.validators[b]=a},isLoadingModules:!1,loadedModules:{},loadModules:function(b,d,e){if(void 0===e&&(e=!0),a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,d,e)});var f=!1,g=function(b,d){var g=a.split(b),h=g.length,i=function(){h--,0===h&&(a.formUtils.isLoadingModules=!1,e&&f&&("function"==typeof e?e():c.trigger("validatorsLoaded")))};h>0&&(a.formUtils.isLoadingModules=!0);var j="?_="+(new Date).getTime(),k=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(g,function(b,c){if(c=a.trim(c),0===c.length)i();else{var e=d+c+(".js"===c.slice(-3)?"":".js"),g=document.createElement("SCRIPT");e in a.formUtils.loadedModules?i():(a.formUtils.loadedModules[e]=1,f=!0,g.type="text/javascript",g.onload=i,g.src=e+(".dev.js"===e.slice(-7)?j:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+e)},g.onreadystatechange=function(){("complete"===this.readyState||"loaded"===this.readyState)&&(i(),this.onload=null,this.onreadystatechange=null)},k.appendChild(g))}})};if(d)g(b,d);else{var h=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1?(g(b,c),!0):!1};h()||a(h)}},warn:function(a){"console"in b?"function"==typeof b.console.warn?b.console.warn(a):"function"==typeof b.console.log&&b.console.log(a):alert(a)},validateInput:function(b,c,e,f,g){b.trigger("beforeValidation"),e=e||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var h=d(b),i={isValid:!0,shouldChangeDisplay:!0,errorMsg:""},j="true"===b.valAttr("optional"),k=!1,l=!h&&j,m=b.attr("disabled")||!b.is(":visible")&&!e.validateHiddenInputs,n=b.valAttr("depends-on")||b.valAttr("if-checked");if(m)return i.shouldChangeDisplay=!1,i;if(n){var o=d('input[name="'+n+'"]',f),p=b.valAttr("depends-on-value")||b.valAttr("if-checked-value"),q=!p||p===o;k=o&&q?!1:!0}if(l||k)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var r=b.attr(e.validationRuleAttribute),s=!0;if(!r)return i.shouldChangeDisplay=e.addValidClassOnAll,i;var t=b.valAttr("ignore");return t&&a.each(t.split(""),function(a,b){h=h.replace(new RegExp("\\"+b),"")}),a.split(r,function(d){0!==d.indexOf("validate_")&&(d="validate_"+d);var i=a.formUtils.validators[d];if(!i||"function"!=typeof i.validatorFunction)throw new Error('Using undefined validator "'+d+'". Maybe you have forgotten to load the module that "'+d+'" belongs to?');"validate_checkbox_group"===d&&(b=f.find('[name="'+b.attr("name")+'"]:eq(0)'));var j=null;return("keyup"!==g||i.validateOnKeyUp)&&(j=i.validatorFunction(h,b,e,c,f)),j?void 0:(s=null,null!==j&&(s=b.attr(e.validationErrorMsgAttribute+"-"+d.replace("validate_","")),s||(s=b.attr(e.validationErrorMsgAttribute),s||(s="function"!=typeof i.errorMessageKey?c[i.errorMessageKey]:c[i.errorMessageKey(e)],s||(s=i.errorMessage)))),!1)}," "),"string"==typeof s?(b.trigger("validation",!1),i.errorMsg=s,i.isValid=!1,i.shouldChangeDisplay=!0):null===s?i.shouldChangeDisplay=e.addValidClassOnAll:(b.trigger("validation",!0),i.shouldChangeDisplay=!0),"function"==typeof e.onElementValidate&&null!==s&&e.onElementValidate(i.isValid,b,f,s),i},parseDate:function(b,c,d){var e,f,g,h,i=c.replace(/[a-zA-Z]/gi,"").substring(0,1),j="^",k=c.split(i||null);if(a.each(k,function(a,b){j+=(a>0?"\\"+i:"")+"(\\d{"+b.length+"})"}),j+="$",d){var l=[];a.each(b.split(i),function(a,b){1===b.length&&(b="0"+b),l.push(b)}),b=l.join(i)}if(e=b.match(new RegExp(j)),null===e)return!1;var m=function(b,c,d){for(var e=0;e28&&(h%4!==0||h%100===0&&h%400!==0)||2===g&&f>29&&(h%4===0||h%100!==0&&h%400===0)||g>12||0===g?!1:this.isShortMonth(g)&&f>30||!this.isShortMonth(g)&&f>31||0===f?!1:[h,g,f]},parseDateInt:function(a){return 0===a.indexOf("0")&&(a=a.replace("0","")),parseInt(a,10)},isShortMonth:function(a){return a%2===0&&7>a||a%2!==0&&a>7},lengthRestriction:function(b,c){var d=parseInt(c.text(),10),e=0,f=function(){var a=b.val().length;if(a>d){var f=b.scrollTop();b.val(b.val().substring(0,d)),b.scrollTop(f)}e=d-a,0>e&&(e=0),c.text(e)};a(b).bind("keydown keyup keypress focus blur",f).bind("cut paste",function(){setTimeout(f,100)}),a(document).bind("ready",f)},numericRangeCheck:function(b,c){var d=a.split(c),e=parseInt(c.substr(3),10);return 1===d.length&&-1===c.indexOf("min")&&-1===c.indexOf("max")&&(d=[c,c]),2===d.length&&(bparseInt(d[1],10))?["out",d[0],d[1]]:0===c.indexOf("min")&&e>b?["min",e]:0===c.indexOf("max")&&b>e?["max",e]:["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function(b,d,e){var f={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC solid 1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},g=function(a,b){var c=b.offset();a.css({width:b.outerWidth(),left:c.left+"px",top:c.top+b.outerHeight()+"px"})};e&&a.extend(f,e),f.css.position="absolute",f.css["z-index"]=9999,b.attr("autocomplete","off"),0===this._numSuggestionElements&&c.bind("resize",function(){a(".jquery-form-suggestions").each(function(){var b=a(this),c=b.attr("data-suggest-container");g(b,a(".suggestions-"+c).eq(0))})}),this._numSuggestionElements++;var h=function(b){var c=b.valAttr("suggestion-nr");a.formUtils._selectedSuggestion=null,a.formUtils._previousTypedVal=null,a(".jquery-form-suggestion-"+c).fadeOut("fast")};return b.data("suggestions",d).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){a(this).trigger("keyup"),a.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var c=a(this),d=[],e=a.trim(c.val()).toLocaleLowerCase();if(e!==a.formUtils._previousTypedVal){a.formUtils._previousTypedVal=e;var i=!1,j=c.valAttr("suggestion-nr"),k=a(".jquery-form-suggestion-"+j);if(k.scrollTop(0),""!==e){var l=e.length>2;a.each(c.data("suggestions"),function(a,b){var c=b.toLocaleLowerCase();return c===e?(d.push(""+b+""),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new RegExp(e,"gi"),"$&")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("
    ").css(f.css).appendTo("body"),b.addClass("suggestions-"+j),k.attr("data-suggest-container",j).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+j)):d.length>0&&!k.is(":visible")&&k.show(),d.length>0&&e.length!==d[0].length&&(g(k,c),k.html(""),a.each(d,function(b,d){a("
    ").append(d).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo(k).click(function(){c.focus(),c.val(a(this).text()),c.trigger("change"),h(c)})}))}}).unbind("keydown.validation").bind("keydown.validation",function(b){var c,d,e=b.keyCode?b.keyCode:b.which,g=a(this);if(13===e&&null!==a.formUtils._selectedSuggestion){if(c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c),d.length>0){var i=d.find("div").eq(a.formUtils._selectedSuggestion).text();g.val(i),g.trigger("change"),h(g),b.preventDefault()}}else{c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c);var j=d.children();if(j.length>0&&a.inArray(e,[38,40])>-1){38===e?(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=j.length-1:a.formUtils._selectedSuggestion--,a.formUtils._selectedSuggestion<0&&(a.formUtils._selectedSuggestion=j.length-1)):40===e&&(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=0:a.formUtils._selectedSuggestion++,a.formUtils._selectedSuggestion>j.length-1&&(a.formUtils._selectedSuggestion=0));var k=d.innerHeight(),l=d.scrollTop(),m=d.children().eq(0).outerHeight(),n=m*a.formUtils._selectedSuggestion;return(l>n||n>l+k)&&d.scrollTop(n),j.removeClass("active-suggestion").css("background","none").eq(a.formUtils._selectedSuggestion).addClass("active-suggestion").css(f.activeSuggestionCSS),b.preventDefault(),!1}}}).unbind("blur.suggest").bind("blur.suggest",function(){h(a(this))}),b},LANG:{errorTitle:"Form submission failed!",requiredField:"This is a required field",requiredFields:"You have not answered all required fields",badTime:"You have not given a correct time",badEmail:"You have not given a correct e-mail address",badTelephone:"You have not given a correct phone number",badSecurityAnswer:"You have not given a correct answer to the security question",badDate:"You have not given a correct date",lengthBadStart:"The input value must be between ",lengthBadEnd:" characters",lengthTooLongStart:"The input value is longer than ",lengthTooShortStart:"The input value is shorter than ",notConfirmed:"Input values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"The input value is not a correct URL",badCustomVal:"The input value is incorrect",andSpaces:" and spaces ",badInt:"The input value was not a correct number",badSecurityNumber:"Your social security number was incorrect",badUKVatAnswer:"Incorrect UK VAT Number",badUKNin:"Incorrect UK NIN",badUKUtr:"Incorrect UK UTR Number",badStrength:"The password isn't strong enough",badNumberOfSelectedOptionsStart:"You have to choose at least ",badNumberOfSelectedOptionsEnd:" answers",badAlphaNumeric:"The input value can only contain alphanumeric characters ",badAlphaNumericExtra:" and ",wrongFileSize:"The file you are trying to upload is too large (max %s)",wrongFileType:"Only files of type %s is allowed",groupCheckedRangeStart:"Please choose between ",groupCheckedTooFewStart:"Please choose at least ",groupCheckedTooManyStart:"Please choose a maximum of ",groupCheckedEnd:" item(s)",badCreditCard:"The credit card number is not correct",badCVV:"The CVV number was not correct",wrongFileDim:"Incorrect image dimensions,",imageTooTall:"the image can not be taller than",imageTooWide:"the image can not be wider than",imageTooSmall:"the image was too small",min:"min",max:"max",imageRatioNotAccepted:"Image ratio is not be accepted",badBrazilTelephoneAnswer:"The phone number entered is invalid",badBrazilCEPAnswer:"The CEP entered is invalid",badBrazilCPFAnswer:"The CPF entered is invalid",badPlPesel:"The PESEL entered is invalid",badPlNip:"The NIP entered is invalid",badPlRegon:"The REGON entered is invalid",badreCaptcha:"Please confirm that you are not a bot"}})}(a,window),function(a){a.formUtils.addValidator({name:"email",validatorFunction:function(b){var c=b.toLowerCase().split("@"),d=c[0],e=c[1];if(d&&e){if(0===d.indexOf('"')){var f=d.length;if(d=d.replace(/\"/g,""),d.length!==f-2)return!1}return a.formUtils.validators.validate_domain.validatorFunction(c[1])&&0!==d.indexOf(".")&&"."!==d.substring(d.length-1,d.length)&&-1===d.indexOf("..")&&!/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(d)}return!1},errorMessage:"",errorMessageKey:"badEmail"}),a.formUtils.addValidator({name:"domain",validatorFunction:function(a){return a.length>0&&a.length<=253&&!/[^a-zA-Z0-9]/.test(a.slice(-2))&&!/[^a-zA-Z0-9]/.test(a.substr(0,1))&&!/[^a-zA-Z0-9\.\-]/.test(a)&&1===a.split("..").length&&a.split(".").length>1},errorMessage:"",errorMessageKey:"badDomain"}),a.formUtils.addValidator({name:"required",validatorFunction:function(b,c,d,e,f){switch(c.attr("type")){case"checkbox":return c.is(":checked");case"radio":return f.find('input[name="'+c.attr("name")+'"]').filter(":checked").length>0;default:return""!==a.trim(b)}},errorMessage:"",errorMessageKey:function(a){return"top"===a.errorMessagePosition||"custom"===a.errorMessagePosition?"requiredFields":"requiredField"}}),a.formUtils.addValidator({name:"length",validatorFunction:function(b,c,d,e){var f=c.valAttr("length"),g=c.attr("type");if(void 0===f)return alert('Please add attribute "data-validation-length" to '+c[0].nodeName+" named "+c.attr("name")),!0;var h,i="file"===g&&void 0!==c.get(0).files?c.get(0).files.length:b.length,j=a.formUtils.numericRangeCheck(i,f);switch(j[0]){case"out":this.errorMessage=e.lengthBadStart+f+e.lengthBadEnd,h=!1;break;case"min":this.errorMessage=e.lengthTooShortStart+j[1]+e.lengthBadEnd,h=!1;break;case"max":this.errorMessage=e.lengthTooLongStart+j[1]+e.lengthBadEnd,h=!1;break;default:h=!0}return h},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"url",validatorFunction:function(b){var c=/^(https?|ftp):\/\/((((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|\[|\]|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;if(c.test(b)){var d=b.split("://")[1],e=d.indexOf("/");return e>-1&&(d=d.substr(0,e)),a.formUtils.validators.validate_domain.validatorFunction(d)}return!1},errorMessage:"",errorMessageKey:"badUrl"}),a.formUtils.addValidator({name:"number",validatorFunction:function(a,b,c){if(""!==a){var d,e,f=b.valAttr("allowing")||"",g=b.valAttr("decimal-separator")||c.decimalSeparator,h=!1,i=b.valAttr("step")||"",j=!1,k=b.attr("data-sanitize")||"",l=k.match(/(^|[\s])numberFormat([\s]|$)/i);if(l){if(!window.numeral)throw new ReferenceError("The data-sanitize value numberFormat cannot be used without the numeral library. Please see Data Validation in http://www.formvalidator.net for more information.");a.length&&(a=String(numeral().unformat(a)))}if(-1===f.indexOf("number")&&(f+=",number"),-1===f.indexOf("negative")&&0===a.indexOf("-"))return!1;if(f.indexOf("range")>-1&&(d=parseFloat(f.substring(f.indexOf("[")+1,f.indexOf(";"))),e=parseFloat(f.substring(f.indexOf(";")+1,f.indexOf("]"))),h=!0),""!==i&&(j=!0),","===g){if(a.indexOf(".")>-1)return!1;a=a.replace(",",".")}if(""===a.replace(/[0-9-]/g,"")&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0;if(f.indexOf("float")>-1&&null!==a.match(new RegExp("^([0-9-]+)\\.([0-9]+)$"))&&(!h||a>=d&&e>=a)&&(!j||a%i===0))return!0}return!1},errorMessage:"",errorMessageKey:"badInt"}),a.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"custom",validatorFunction:function(a,b){var c=new RegExp(b.valAttr("regexp"));return c.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"date",validatorFunction:function(b,c,d){var e=c.valAttr("format")||d.dateFormat||"yyyy-mm-dd",f="false"===c.valAttr("require-leading-zero");return a.formUtils.parseDate(b,e,f)!==!1},errorMessage:"",errorMessageKey:"badDate"}),a.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(b,c,d,e,f){var g=!0,h=c.attr("name"),i=a('input[type=checkbox][name^="'+h+'"]',f),j=i.filter(":checked").length,k=c.valAttr("qty");if(void 0===k){var l=c.get(0).nodeName;alert('Attribute "data-validation-qty" is missing from '+l+" named "+c.attr("name"))}var m=a.formUtils.numericRangeCheck(j,k);switch(m[0]){case"out":this.errorMessage=e.groupCheckedRangeStart+k+e.groupCheckedEnd,g=!1;break;case"min":this.errorMessage=e.groupCheckedTooFewStart+m[1]+e.groupCheckedEnd,g=!1;break;case"max":this.errorMessage=e.groupCheckedTooManyStart+m[1]+e.groupCheckedEnd,g=!1;break;default:g=!0}if(!g){var n=function(){i.unbind("click",n),i.filter("*[data-validation]").validateInputOnBlur(e,d,!1,"blur")};i.bind("click",n)}return g}})}(a)}); \ No newline at end of file diff --git a/form-validator/jsconf.js b/form-validator/jsconf.js index 58b9363..88de02e 100644 --- a/form-validator/jsconf.js +++ b/form-validator/jsconf.js @@ -1,9 +1,9 @@ -/** +/** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.187 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a){"use strict";a.setupValidation=function(b){var c=a(b.form||"form");a.each(b.validate||b.validation||{},function(b,d){var e;e="#"===b[0]?a(b):c.find("."===b[0]?b:'*[name="'+b+'"]'),e.attr("data-validation",d.validation),a.each(d,function(a,b){"validation"!==a&&b!==!1&&(b===!0&&(b="true"),"_"===a[0]?(a=a.substring(1),b===!1?e.removeAttr(a):e.attr(a,b)):e.valAttr(a,b))})}),a.validate(b)}}(jQuery); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(b,c){"function"==typeof define&&define.amd?define(["jquery"],function(a){return c(a)}):"object"==typeof exports?module.exports=c(require("jquery")):c(a)}(this,function(a){!function(a){"use strict";a.setupValidation=function(b){var c=a(b.form||"form");a.each(b.validate||b.validation||{},function(b,d){var e;e="#"===b[0]?a(b):c.find("."===b[0]?b:'*[name="'+b+'"]'),e.attr("data-validation",d.validation),a.each(d,function(a,b){"validation"!==a&&b!==!1&&(b===!0&&(b="true"),"_"===a[0]?(a=a.substring(1),b===!1?e.removeAttr(a):e.attr(a,b)):e.valAttr(a,b))})}),a.validate(b)}}(a)})}); \ No newline at end of file diff --git a/form-validator/lang/cz.js b/form-validator/lang/cz.js index 0adcdaa..cde54c7 100644 --- a/form-validator/lang/cz.js +++ b/form-validator/lang/cz.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Podání formuláře selhalo!",requiredField:"Toto pole je povinné",requiredfields:"Nebyly vyplněny všechny požadované pole",badTime:"Neplatný čas",badEmail:"Neplatná e-mailová adresa",badTelephone:"Neplatné telefonní číslo",badSecurityAnswer:"Chybná odpověď na bezpečnostní otázku",badDate:"Nesprávné datum",lengthBadStart:"Zadaná hodnota musí být v rozmezí ",lengthBadEnd:" znaků",lengthTooLongStart:"Zadaná hodnota je větší než ",lengthTooShortStart:"Zadaná hodnota je menší než ",notConfirmed:"Zadané hodnoty nebyly potvrzené",badDomain:"Neplatná doména",badUrl:"Neplatný URL",badCustomVal:"Zadaná hodnota je chybná",andSpaces:" a mezery",badInt:"Neplatné číslo",badSecurityNumber:"Neplatné číslo zabezpečení",badUKVatAnswer:"Neplatné číslo DIČ ",badStrength:"Vaše heslo není dostatečně silné",badNumberOfSelectedOptionsStart:"Musíte vybrat nejméně ",badNumberOfSelectedOptionsEnd:" odpověď",badAlphaNumeric:"Zadaná hodnota může obsahovat pouze alfanumerické znaky ",badAlphaNumericExtra:" a ",wrongFileSize:"Soubor je příliš velký (max %s)",wrongFileType:"Pouze soubory typu %s",groupCheckedRangeStart:"Prosím, vyberte ",groupCheckedTooFewStart:"Vyberte prosím nejméně ",groupCheckedTooManyStart:"Vyberte prosím maximálně ",groupCheckedEnd:" složka(y)",badCreditCard:"Číslo kreditní karty je neplatné",badCVV:"Číslo CVV je neplatné",wrongFileDim:"Nesprávné rozměry obrázku,",imageTooTall:"obraz nemůže být vyšší než",imageTooWide:"obraz nemůže být širší než",imageTooSmall:"obraz je příliš malý",min:"min",max:"max",imageRatioNotAccepted:"Poměr obrázku je nesprávný",badBrazilTelephoneAnswer:"Neplatné telefonní číslo",badBrazilCEPAnswer:"Neplatné CEP",badBrazilCPFAnswer:"Neplatné CPF"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Podání formuláře selhalo!",requiredField:"Toto pole je povinné",requiredfields:"Nebyly vyplněny všechny požadované pole",badTime:"Neplatný čas",badEmail:"Neplatná e-mailová adresa",badTelephone:"Neplatné telefonní číslo",badSecurityAnswer:"Chybná odpověď na bezpečnostní otázku",badDate:"Nesprávné datum",lengthBadStart:"Zadaná hodnota musí být v rozmezí ",lengthBadEnd:" znaků",lengthTooLongStart:"Zadaná hodnota je větší než ",lengthTooShortStart:"Zadaná hodnota je menší než ",notConfirmed:"Zadané hodnoty nebyly potvrzené",badDomain:"Neplatná doména",badUrl:"Neplatný URL",badCustomVal:"Zadaná hodnota je chybná",andSpaces:" a mezery",badInt:"Neplatné číslo",badSecurityNumber:"Neplatné číslo zabezpečení",badUKVatAnswer:"Neplatné číslo DIČ ",badStrength:"Vaše heslo není dostatečně silné",badNumberOfSelectedOptionsStart:"Musíte vybrat nejméně ",badNumberOfSelectedOptionsEnd:" odpověď",badAlphaNumeric:"Zadaná hodnota může obsahovat pouze alfanumerické znaky ",badAlphaNumericExtra:" a ",wrongFileSize:"Soubor je příliš velký (max %s)",wrongFileType:"Pouze soubory typu %s",groupCheckedRangeStart:"Prosím, vyberte ",groupCheckedTooFewStart:"Vyberte prosím nejméně ",groupCheckedTooManyStart:"Vyberte prosím maximálně ",groupCheckedEnd:" složka(y)",badCreditCard:"Číslo kreditní karty je neplatné",badCVV:"Číslo CVV je neplatné",wrongFileDim:"Nesprávné rozměry obrázku,",imageTooTall:"obraz nemůže být vyšší než",imageTooWide:"obraz nemůže být širší než",imageTooSmall:"obraz je příliš malý",min:"min",max:"max",imageRatioNotAccepted:"Poměr obrázku je nesprávný",badBrazilTelephoneAnswer:"Neplatné telefonní číslo",badBrazilCEPAnswer:"Neplatné CEP",badBrazilCPFAnswer:"Neplatné CPF"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/de.js b/form-validator/lang/de.js index 511926f..3f67b7d 100644 --- a/form-validator/lang/de.js +++ b/form-validator/lang/de.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ihre Anfrage konnte nicht gesendet werden!",requiredField:"Dies ist ein Pflichtfeld",requiredFields:"Sie haben nicht alle Fragen beantwortet",badTime:"Sie haben nicht die korrekte Zeit eingegeben",badEmail:"Sie haben keine gültige E-Mail-Adresse eingegeben",badTelephone:"Sie haben keine richtige Telefonnummer eingetragen",badSecurityAnswer:"Sie haben die falsche Antwort auf die Sicherheitsfrage eingegeben",badDate:"Re-Eingabe eines falschen Datums",lengthBadStart:"Der eingegebene Wert muss da zwischen sein ",lengthBadEnd:"  Zeichen",lengthTooLongStart:"Eingegebene Wert ist größer als ",lengthTooShortStart:"Eingegebene Wert ist größer als ",notConfirmed:"Die Antworten könnten nicht gegenseitig bestätigen,",badDomain:"Sie haben die falsche Domäne eingetragen",badUrl:"Sie haben nicht die richtige URL eingegeben",badCustomVal:"Re-Eingabe einer falschen Antwort",andSpaces:" und Leerzeichen",badInt:"Sie haben keine Nummer eingegeben",badSecurityNumber:"Sie haben eine falsche Sozialversicherungsnummer eingegeben",badUKVatAnswer:"Sie haben keine UK Umsatzsteuer-Identifikationsnummer eingegeben",badStrength:"Sie haben ein Kennwort, das nicht sicher genug ist eingegeben",badNumberOfSelectedOptionsStart:"Wählen Sie zu mindestens ",badNumberOfSelectedOptionsEnd:" Antwort",badAlphaNumeric:"Sie können nur mit alphanumerische Zeichen (Buchstaben und Zahlen) eingaben",badAlphaNumericExtra:" und",wrongFileSize:"Die Datei, die Sie hochzuladen versuchen, zu groß ist (max %s)",wrongFileType:"Nur Dateien vom Typ %s sind zulässig",groupCheckedRangeStart:"Wählen Sie zwischen",groupCheckedTooFewStart:"Dann müssen Sie zumindest sicher,",groupCheckedTooManyStart:"Sie können nicht mehr als zu machen",groupCheckedEnd:" Auswahl",badCreditCard:"Sie haben eine ungültige Kreditkartennummer eingegeben",badCVV:"Sie haben eine falsche CVV eingegeben",wrongFileDim:"Illegal Bildgröße,",imageTooTall:"Bild kann nicht größer als",imageTooWide:"Bild kann nicht breiter sein als",imageTooSmall:"Bild ist zu klein",min:"min",max:"max",imageRatioNotAccepted:"Bildverhältnis wird nicht akzeptiert",badBrazilTelephoneAnswer:"Die eingegebene Telefonnummer ist nicht korrekt",badBrazilCEPAnswer:"Der CEP ist ungültig",badBrazilCPFAnswer:"Der CEP ist ungültig"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ihre Anfrage konnte nicht gesendet werden!",requiredField:"Dies ist ein Pflichtfeld",requiredFields:"Sie haben nicht alle Fragen beantwortet",badTime:"Sie haben nicht die korrekte Zeit eingegeben",badEmail:"Sie haben keine gültige E-Mail-Adresse eingegeben",badTelephone:"Sie haben keine richtige Telefonnummer eingetragen",badSecurityAnswer:"Sie haben die falsche Antwort auf die Sicherheitsfrage eingegeben",badDate:"Re-Eingabe eines falschen Datums",lengthBadStart:"Der eingegebene Wert muss da zwischen sein ",lengthBadEnd:"  Zeichen",lengthTooLongStart:"Eingegebene Wert ist größer als ",lengthTooShortStart:"Eingegebene Wert ist größer als ",notConfirmed:"Die Antworten könnten nicht gegenseitig bestätigen,",badDomain:"Sie haben die falsche Domäne eingetragen",badUrl:"Sie haben nicht die richtige URL eingegeben",badCustomVal:"Re-Eingabe einer falschen Antwort",andSpaces:" und Leerzeichen",badInt:"Sie haben keine Nummer eingegeben",badSecurityNumber:"Sie haben eine falsche Sozialversicherungsnummer eingegeben",badUKVatAnswer:"Sie haben keine UK Umsatzsteuer-Identifikationsnummer eingegeben",badStrength:"Sie haben ein Kennwort, das nicht sicher genug ist eingegeben",badNumberOfSelectedOptionsStart:"Wählen Sie zu mindestens ",badNumberOfSelectedOptionsEnd:" Antwort",badAlphaNumeric:"Sie können nur mit alphanumerische Zeichen (Buchstaben und Zahlen) eingaben",badAlphaNumericExtra:" und",wrongFileSize:"Die Datei, die Sie hochzuladen versuchen, zu groß ist (max %s)",wrongFileType:"Nur Dateien vom Typ %s sind zulässig",groupCheckedRangeStart:"Wählen Sie zwischen",groupCheckedTooFewStart:"Dann müssen Sie zumindest sicher,",groupCheckedTooManyStart:"Sie können nicht mehr als zu machen",groupCheckedEnd:" Auswahl",badCreditCard:"Sie haben eine ungültige Kreditkartennummer eingegeben",badCVV:"Sie haben eine falsche CVV eingegeben",wrongFileDim:"Illegal Bildgröße,",imageTooTall:"Bild kann nicht größer als",imageTooWide:"Bild kann nicht breiter sein als",imageTooSmall:"Bild ist zu klein",min:"min",max:"max",imageRatioNotAccepted:"Bildverhältnis wird nicht akzeptiert",badBrazilTelephoneAnswer:"Die eingegebene Telefonnummer ist nicht korrekt",badBrazilCEPAnswer:"Der CEP ist ungültig",badBrazilCPFAnswer:"Der CEP ist ungültig"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/es.js b/form-validator/lang/es.js index 43315a5..9ee7ffc 100644 --- a/form-validator/lang/es.js +++ b/form-validator/lang/es.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"El formulario no se ha podido enviar!",requiredField:"Este campo es obligatorio",requiredFields:"No ha contestado todos los campos requeridos",badTime:"La hora proporcionada no es válida",badEmail:"La dirección de e-mail no es válida",badTelephone:"El número de teléfono proporcionado no es válido",badSecurityAnswer:"La respuesta a su pregunta de seguridad es incorrecta",badDate:"La fecha proporcionada no es válida",lengthBadStart:"Su respuesta debe incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Su respuesta debe de ser menor a ",lengthTooShortStart:"Su respuesta debe de ser mayor a ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Ha introducido un dominio incorrecto",badUrl:"La URL proporcionada no es válida",badCustomVal:"Los valores proporcionados no son válidos",andSpaces:" y espacios ",badInt:"El valor proporcionado no es un número válido",badSecurityNumber:"El número de seguridad social proporcionado es incorrecto",badUKVatAnswer:"No número VAT proporcionado no es válido para el Reino Unido",badStrength:"La contraseña proporcionada no es lo suficientemente segura",badNumberOfSelectedOptionsStart:"Debe seleccionar al menos",badNumberOfSelectedOptionsEnd:" respuesta(s)",badAlphaNumeric:"El valor proporcionado solo debe contener caracteres alfanuméricos (a-z y números)",badAlphaNumericExtra:" y",wrongFileSize:"El archivo que está tratando de subir es demasiado grande (máx. %s)",wrongFileType:"Sólo los archivos del tipo %s están permitido",groupCheckedRangeStart:"Por favor, elija entre ",groupCheckedTooFewStart:"Por favor, elija al menos ",groupCheckedTooManyStart:"Por favor, elija un máximo de ",groupCheckedEnd:" ítem(s)",badCreditCard:"El número de tarjeta de crédito proporcionado no es válido",badCVV:"CVV proporcionado no es válido",wrongFileDim:"Las dimensiones de la imagen no son validas,",imageTooTall:"el alto de la imagen no puede ser mayor a",imageTooWide:"el ancho de la imagen no puede ser mayor a",imageTooSmall:"la imagen es demasiado pequeña",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporción de imagen (alto x ancho) no es válida"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"El formulario no se ha podido enviar!",requiredField:"Este campo es obligatorio",requiredFields:"No ha contestado todos los campos requeridos",badTime:"La hora proporcionada no es válida",badEmail:"La dirección de e-mail no es válida",badTelephone:"El número de teléfono proporcionado no es válido",badSecurityAnswer:"La respuesta a su pregunta de seguridad es incorrecta",badDate:"La fecha proporcionada no es válida",lengthBadStart:"Su respuesta debe incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Su respuesta debe de ser menor a ",lengthTooShortStart:"Su respuesta debe de ser mayor a ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Ha introducido un dominio incorrecto",badUrl:"La URL proporcionada no es válida",badCustomVal:"Los valores proporcionados no son válidos",andSpaces:" y espacios ",badInt:"El valor proporcionado no es un número válido",badSecurityNumber:"El número de seguridad social proporcionado es incorrecto",badUKVatAnswer:"No número VAT proporcionado no es válido para el Reino Unido",badStrength:"La contraseña proporcionada no es lo suficientemente segura",badNumberOfSelectedOptionsStart:"Debe seleccionar al menos",badNumberOfSelectedOptionsEnd:" respuesta(s)",badAlphaNumeric:"El valor proporcionado solo debe contener caracteres alfanuméricos (a-z y números)",badAlphaNumericExtra:" y",wrongFileSize:"El archivo que está tratando de subir es demasiado grande (máx. %s)",wrongFileType:"Sólo los archivos del tipo %s están permitido",groupCheckedRangeStart:"Por favor, elija entre ",groupCheckedTooFewStart:"Por favor, elija al menos ",groupCheckedTooManyStart:"Por favor, elija un máximo de ",groupCheckedEnd:" ítem(s)",badCreditCard:"El número de tarjeta de crédito proporcionado no es válido",badCVV:"CVV proporcionado no es válido",wrongFileDim:"Las dimensiones de la imagen no son validas,",imageTooTall:"el alto de la imagen no puede ser mayor a",imageTooWide:"el ancho de la imagen no puede ser mayor a",imageTooSmall:"la imagen es demasiado pequeña",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporción de imagen (alto x ancho) no es válida"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/fr.js b/form-validator/lang/fr.js index 524bfa6..fbdc32b 100644 --- a/form-validator/lang/fr.js +++ b/form-validator/lang/fr.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Le formulaire n'a pas pu être envoyé!",requiredField:"Ce champ est obligatoire",requiredFields:"Vous n'avez pas rempli tous les champs",badTime:"Vous n'avez pas saisi l'heure correctement",badEmail:"Vous n'avez pas saisi une adresse e-mail valide",badTelephone:"Vous n'avez pas saisi un numéro de téléphone valide",badSecurityAnswer:"Vous avez saisi une mauvaise réponse à la question de sécurité",badDate:"Vous n'avez pas saisi une date correcte",lengthBadStart:"Votre saisie doit comporter entre",lengthBadEnd:" caractères",lengthTooLongStart:"Vous avez saisi une réponse qui est plus longue que",lengthTooShortStart:"Votre saisie est plus courte que",notConfirmed:"Les saisies ne sont pas identiques",badDomain:"Vous avez saisi un domaine incorrect",badUrl:"Vous avez saisi une URL incorrecte",badCustomVal:"Re-saisissez une réponse correcte",andSpaces:" et des espaces",badInt:"Vous n'avez pas saisi un numéro",badSecurityNumber:"Vous avez saisi un mauvais numéro de sécurité sociale",badUKVatAnswer:"Vous n'avez pas saisi un numéro de TVA au Royaume-Uni",badStrength:"Vous avez saisi un mot de passe pas assez sécurisé",badNumberOfSelectedOptionsStart:"Vous devez sélectionner au moins",badNumberOfSelectedOptionsEnd:" réponse(s)",badAlphaNumeric:"Vous ne pouvez répondre qu'avec des caractères alphanumériques et des chiffres",badAlphaNumericExtra:" et",wrongFileSize:"Le fichier que vous essayez de télécharger est trop grand (max %s)",wrongFileType:"Seuls les fichiers du type %s sont autorisés",groupCheckedRangeStart:"Choisissez entre",groupCheckedTooFewStart:"Vous devez faire au moins",groupCheckedTooManyStart:"Vous ne pouvez pas faire plus de",groupCheckedEnd:" sélection(s)",badCreditCard:"Vous avez saisi un numéro de carte de crédit invalide",badCVV:"Vous avez saisi un CVV incorrect",wrongFileDim:"Mauvaise taille de l'image,",imageTooTall:"l'image ne peut pas être plus élevée que",imageTooWide:"l'image ne peut pas être plus large que",imageTooSmall:"l'image est trop petite",min:"moins",max:"max",imageRatioNotAccepted:"Ratio de l'image non accepté"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Le formulaire n'a pas pu être envoyé!",requiredField:"Ce champ est obligatoire",requiredFields:"Vous n'avez pas rempli tous les champs",badTime:"Vous n'avez pas saisi l'heure correctement",badEmail:"Vous n'avez pas saisi une adresse e-mail valide",badTelephone:"Vous n'avez pas saisi un numéro de téléphone valide",badSecurityAnswer:"Vous avez saisi une mauvaise réponse à la question de sécurité",badDate:"Vous n'avez pas saisi une date correcte",lengthBadStart:"Votre saisie doit comporter entre",lengthBadEnd:" caractères",lengthTooLongStart:"Vous avez saisi une réponse qui est plus longue que",lengthTooShortStart:"Votre saisie est plus courte que",notConfirmed:"Les saisies ne sont pas identiques",badDomain:"Vous avez saisi un domaine incorrect",badUrl:"Vous avez saisi une URL incorrecte",badCustomVal:"Re-saisissez une réponse correcte",andSpaces:" et des espaces",badInt:"Vous n'avez pas saisi un numéro",badSecurityNumber:"Vous avez saisi un mauvais numéro de sécurité sociale",badUKVatAnswer:"Vous n'avez pas saisi un numéro de TVA au Royaume-Uni",badStrength:"Vous avez saisi un mot de passe pas assez sécurisé",badNumberOfSelectedOptionsStart:"Vous devez sélectionner au moins",badNumberOfSelectedOptionsEnd:" réponse(s)",badAlphaNumeric:"Vous ne pouvez répondre qu'avec des caractères alphanumériques et des chiffres",badAlphaNumericExtra:" et",wrongFileSize:"Le fichier que vous essayez de télécharger est trop grand (max %s)",wrongFileType:"Seuls les fichiers du type %s sont autorisés",groupCheckedRangeStart:"Choisissez entre",groupCheckedTooFewStart:"Vous devez faire au moins",groupCheckedTooManyStart:"Vous ne pouvez pas faire plus de",groupCheckedEnd:" sélection(s)",badCreditCard:"Vous avez saisi un numéro de carte de crédit invalide",badCVV:"Vous avez saisi un CVV incorrect",wrongFileDim:"Mauvaise taille de l'image,",imageTooTall:"l'image ne peut pas être plus élevée que",imageTooWide:"l'image ne peut pas être plus large que",imageTooSmall:"l'image est trop petite",min:"moins",max:"max",imageRatioNotAccepted:"Ratio de l'image non accepté"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/it.js b/form-validator/lang/it.js index bfd10a6..993eb95 100644 --- a/form-validator/lang/it.js +++ b/form-validator/lang/it.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Impossibile inviare il modulo!",requiredField:"Campo obbligatorio",requiredFields:"Non sono stati compilati tutti i campi richiesti",badTime:"L'ora scelta non è valida",badEmail:"Questo indirizzo email non è valido",badTelephone:"Il numero di telefono imputato non è valido",badSecurityAnswer:"La risposta alla domanda di sicurezza è errata",badDate:"La data scelta non è valida",lengthBadStart:"La sua risposta non può essere più lunga di ",lengthBadEnd:" caratteri",lengthTooLongStart:"La lunghezza della risposta deve essere minore di ",lengthTooShortStart:"La lunghezza della risposta deve essere maggiore di ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Il dominio inserito non è corretto.",badUrl:"L' URL inserito non è valido",badCustomVal:"I valori inseriti non sono validi",andSpaces:" e spazi ",badInt:"Il numero inserito non è valido",badSecurityNumber:"Il numero di sicurezza inserito non è valido",badUKVatAnswer:"La Partita IVA (VAT) inserita non è valida nel Regno Unito",badStrength:"La password proposta non è sufficientemente sicura",badNumberOfSelectedOptionsStart:"Deve selezionare almeno",badNumberOfSelectedOptionsEnd:" risposta/e",badAlphaNumeric:"Il valore proposto deve contenere caratteri alfanumerici (a-z e 1234...)",badAlphaNumericExtra:"",wrongFileSize:"Il file che si sta cercando di caricare è troppo grande (massimo %s)",wrongFileType:"Solo i file di tipo %s possono essere inviati",groupCheckedRangeStart:"Si prega di scegliere tra ",groupCheckedTooFewStart:"Si prega di selezionare un minimo di ",groupCheckedTooManyStart:"Si prega di selezionare un massimo di ",groupCheckedEnd:" opzione/i",badCreditCard:"Il numero di carta di credito non risulta valido",badCVV:"CVV non valido",wrongFileDim:"La dimensione dell'immagine non è valida,",imageTooTall:"il lato alto dell'immagine non può essere maggiore di",imageTooWide:"il lato lungo dell'immagine non può essere maggiore di",imageTooSmall:"L'immagine è troppo piccola",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporzione dell' immagine (altezza x larghezza) non è valida"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Impossibile inviare il modulo!",requiredField:"Campo obbligatorio",requiredFields:"Non sono stati compilati tutti i campi richiesti",badTime:"L'ora scelta non è valida",badEmail:"Questo indirizzo email non è valido",badTelephone:"Il numero di telefono imputato non è valido",badSecurityAnswer:"La risposta alla domanda di sicurezza è errata",badDate:"La data scelta non è valida",lengthBadStart:"La sua risposta non può essere più lunga di ",lengthBadEnd:" caratteri",lengthTooLongStart:"La lunghezza della risposta deve essere minore di ",lengthTooShortStart:"La lunghezza della risposta deve essere maggiore di ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Il dominio inserito non è corretto.",badUrl:"L' URL inserito non è valido",badCustomVal:"I valori inseriti non sono validi",andSpaces:" e spazi ",badInt:"Il numero inserito non è valido",badSecurityNumber:"Il numero di sicurezza inserito non è valido",badUKVatAnswer:"La Partita IVA (VAT) inserita non è valida nel Regno Unito",badStrength:"La password proposta non è sufficientemente sicura",badNumberOfSelectedOptionsStart:"Deve selezionare almeno",badNumberOfSelectedOptionsEnd:" risposta/e",badAlphaNumeric:"Il valore proposto deve contenere caratteri alfanumerici (a-z e 1234...)",badAlphaNumericExtra:"",wrongFileSize:"Il file che si sta cercando di caricare è troppo grande (massimo %s)",wrongFileType:"Solo i file di tipo %s possono essere inviati",groupCheckedRangeStart:"Si prega di scegliere tra ",groupCheckedTooFewStart:"Si prega di selezionare un minimo di ",groupCheckedTooManyStart:"Si prega di selezionare un massimo di ",groupCheckedEnd:" opzione/i",badCreditCard:"Il numero di carta di credito non risulta valido",badCVV:"CVV non valido",wrongFileDim:"La dimensione dell'immagine non è valida,",imageTooTall:"il lato alto dell'immagine non può essere maggiore di",imageTooWide:"il lato lungo dell'immagine non può essere maggiore di",imageTooSmall:"L'immagine è troppo piccola",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporzione dell' immagine (altezza x larghezza) non è valida"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/pl.js b/form-validator/lang/pl.js index 292dbaa..2bef455 100644 --- a/form-validator/lang/pl.js +++ b/form-validator/lang/pl.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Złożenie formularza nie powiodło się!",requiredField:"To pole jest wymagane",requiredfields:"Nie wszystkie wymagane pola zostały wypełnione",badTime:"Wprowadzono niepoprawny czas",badEmail:"Wprowadzono niepoprawny adres e-mail",badTelephone:"Wprowadzono niepoprawny numeru telefonu",badSecurityAnswer:"Nieprawidłowa odpowiedź na pytanie bezpieczeństwa",badDate:"Niepoprawna data",lengthBadStart:"Wprowadzona wartość musi być pomiędzy ",lengthBadEnd:" znaków",lengthTooLongStart:"Wprowadzona wartość jest większa niż ",lengthTooShortStart:"Wprowadzona wartość jest mniejsza niż ",notConfirmed:"Wprowadzone wartości nie zostały potwierdzone",badDomain:"Nieprawidłowa wartość domeny",badUrl:"Wprowadzono nieprawidłowy adres URL",badCustomVal:"Wprowadzona wartość jest niepoprawna",andSpaces:" i odstępy",badInt:"Wprowadzono nieprawidłowy numer",badSecurityNumber:"Wprowadzono niepoprawny numer ubezpieczenia społecznego",badUKVatAnswer:"Wprowadzono niepoprawny brytyjski numer VAT",badUKNin:"Wprowadzono niepoprawny brytyjski numer NIP",badUKUtr:"Wprowadzono niepoprawny brytyjski numer podatnika",badStrength:"Twoje hasło nie jest wystarczająco mocne",badNumberOfSelectedOptionsStart:"Musisz wybrać przynajmniej ",badNumberOfSelectedOptionsEnd:" odpowiedzi",badAlphaNumeric:"Wprowadzona wartość może zawierać tylko znaki alfanumeryczne ",badAlphaNumericExtra:" i ",wrongFileSize:"Wysyłany plik jest zbyt duży (max %s)",wrongFileType:"Dozwolone są tylko pliki typu %s",groupCheckedRangeStart:"Proszę wybrać pomiędzy ",groupCheckedTooFewStart:"Proszę wybrać przynajmniej ",groupCheckedTooManyStart:"Proszę wybrać maksymalnie ",groupCheckedEnd:" element(ów)",badCreditCard:"Podany numer karty kredytowej jest nieprawidłowy",badCVV:"Podany numer CVV jest nieprawidłowy",wrongFileDim:"Nieprawidłowe wymiary obrazu,",imageTooTall:"obraz nie może być wyższa niż",imageTooWide:"obraz nie może być szerszy niż",imageTooSmall:"obraz jest zbyt mały",min:"min",max:"max",imageRatioNotAccepted:"Proporcje obrazu są niepoprawne",badBrazilTelephoneAnswer:"Wprowadzono niepoprawny numer telefonu",badBrazilCEPAnswer:"Wprowadzono niepoprawny CEP",badBrazilCPFAnswer:"Wprowadzono niepoprawny CPF"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Złożenie formularza nie powiodło się!",requiredField:"To pole jest wymagane",requiredfields:"Nie wszystkie wymagane pola zostały wypełnione",badTime:"Wprowadzono niepoprawny czas",badEmail:"Wprowadzono niepoprawny adres e-mail",badTelephone:"Wprowadzono niepoprawny numeru telefonu",badSecurityAnswer:"Nieprawidłowa odpowiedź na pytanie bezpieczeństwa",badDate:"Niepoprawna data",lengthBadStart:"Wprowadzona wartość musi być pomiędzy ",lengthBadEnd:" znaków",lengthTooLongStart:"Wprowadzona wartość jest większa niż ",lengthTooShortStart:"Wprowadzona wartość jest mniejsza niż ",notConfirmed:"Wprowadzone wartości nie zostały potwierdzone",badDomain:"Nieprawidłowa wartość domeny",badUrl:"Wprowadzono nieprawidłowy adres URL",badCustomVal:"Wprowadzona wartość jest niepoprawna",andSpaces:" i odstępy",badInt:"Wprowadzono nieprawidłowy numer",badSecurityNumber:"Wprowadzono niepoprawny numer ubezpieczenia społecznego",badUKVatAnswer:"Wprowadzono niepoprawny brytyjski numer VAT",badUKNin:"Wprowadzono niepoprawny brytyjski numer NIP",badUKUtr:"Wprowadzono niepoprawny brytyjski numer podatnika",badStrength:"Twoje hasło nie jest wystarczająco mocne",badNumberOfSelectedOptionsStart:"Musisz wybrać przynajmniej ",badNumberOfSelectedOptionsEnd:" odpowiedzi",badAlphaNumeric:"Wprowadzona wartość może zawierać tylko znaki alfanumeryczne ",badAlphaNumericExtra:" i ",wrongFileSize:"Wysyłany plik jest zbyt duży (max %s)",wrongFileType:"Dozwolone są tylko pliki typu %s",groupCheckedRangeStart:"Proszę wybrać pomiędzy ",groupCheckedTooFewStart:"Proszę wybrać przynajmniej ",groupCheckedTooManyStart:"Proszę wybrać maksymalnie ",groupCheckedEnd:" element(ów)",badCreditCard:"Podany numer karty kredytowej jest nieprawidłowy",badCVV:"Podany numer CVV jest nieprawidłowy",wrongFileDim:"Nieprawidłowe wymiary obrazu,",imageTooTall:"obraz nie może być wyższa niż",imageTooWide:"obraz nie może być szerszy niż",imageTooSmall:"obraz jest zbyt mały",min:"min",max:"max",imageRatioNotAccepted:"Proporcje obrazu są niepoprawne",badBrazilTelephoneAnswer:"Wprowadzono niepoprawny numer telefonu",badBrazilCEPAnswer:"Wprowadzono niepoprawny CEP",badBrazilCPFAnswer:"Wprowadzono niepoprawny CPF",badPlPesel:"Wprowadzono niepoprawny numer PESEL",badPlNip:"Wprowadzono niepoprawny numer NIP",badPlRegon:"Wprowadzono niepoprawny numer REGON",badreCaptcha:"Potwierdź że nie jesteś botem!"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/pt.js b/form-validator/lang/pt.js index 84f3b57..6c7fa4f 100644 --- a/form-validator/lang/pt.js +++ b/form-validator/lang/pt.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"O formulário não pode ser enviado!",requiredField:"Campo de preenchimento obrigatório",requiredFields:"Você ainda não preencheu todos os campos obrigatórios",badTime:"A hora digitada não é válida",badEmail:"O e-mail digitado não é válido",badTelephone:"O telefone digitado não é válido",badSecurityAnswer:"A pergunta de segurança não foi respondida corretamente",badDate:"A data digitada não é válida",lengthBadStart:"Sua resposta deve incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Sua resposta tem mais que ",lengthTooShortStart:"Sua resposta tem menos que",notConfirmed:"As informações digitadas não puderam ser confirmadas",badDomain:"O domínio digitado não é válido",badUrl:"A URL digitada não é válida",badCustomVal:"Os dados digitados não são válidos",andSpaces:" e espaços",badInt:"O número digitado não é válido",badSecurityNumber:"O número de seguro social digitado não é válido",badUKVatAnswer:"O número do VAT digitado não é válido para o Reino Unido",badStrength:"Senha muito fraca",badNumberOfSelectedOptionsStart:"Selecione pelo menos",badNumberOfSelectedOptionsEnd:" alternativa(s)",badAlphaNumeric:"Use somente caracteres alfanuméricos (letras a-z e números)",badAlphaNumericExtra:" e",wrongFileSize:"O arquivo selecionado é maior que o tamanho máximo permitido (%s)",wrongFileType:"Somente arquivos %s são permitidos",groupCheckedRangeStart:"Por favor, escolha entre ",groupCheckedTooFewStart:"Por favor, escolha pelo menos ",groupCheckedTooManyStart:"Por favor, escolhe no máximo ",groupCheckedEnd:" alternativa(s)",badCreditCard:"O número de cartão de crédito digitado não é válido",badCVV:"O código de segurança do cartão de crédito não é válido",wrongFileDim:"As dimensões da imagem não são válidas",imageTooTall:"a imagem não pode ser mais alta que ",imageTooWide:"a imagem não pode ser mais larga que ",imageTooSmall:"a imagem é muito pequena",min:"min",max:"max",imageRatioNotAccepted:"A proporção da imagem (largura x altura) não é válida",badBrazilTelephoneAnswer:"O número de telefone digitado é inválido",badBrazilCEPAnswer:"O CEP digitado é inválido",badBrazilCPFAnswer:"O CPF digitado é inválido"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"O formulário não pode ser enviado!",requiredField:"Campo de preenchimento obrigatório",requiredFields:"Você ainda não preencheu todos os campos obrigatórios",badTime:"A hora digitada não é válida",badEmail:"O e-mail digitado não é válido",badTelephone:"O telefone digitado não é válido",badSecurityAnswer:"A pergunta de segurança não foi respondida corretamente",badDate:"A data digitada não é válida",lengthBadStart:"Sua resposta deve incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Sua resposta tem mais que ",lengthTooShortStart:"Sua resposta tem menos que",notConfirmed:"As informações digitadas não puderam ser confirmadas",badDomain:"O domínio digitado não é válido",badUrl:"A URL digitada não é válida",badCustomVal:"Os dados digitados não são válidos",andSpaces:" e espaços",badInt:"O número digitado não é válido",badSecurityNumber:"O número de seguro social digitado não é válido",badUKVatAnswer:"O número do VAT digitado não é válido para o Reino Unido",badStrength:"Senha muito fraca",badNumberOfSelectedOptionsStart:"Selecione pelo menos",badNumberOfSelectedOptionsEnd:" alternativa(s)",badAlphaNumeric:"Use somente caracteres alfanuméricos (letras a-z e números)",badAlphaNumericExtra:" e",wrongFileSize:"O arquivo selecionado é maior que o tamanho máximo permitido (%s)",wrongFileType:"Somente arquivos %s são permitidos",groupCheckedRangeStart:"Por favor, escolha entre ",groupCheckedTooFewStart:"Por favor, escolha pelo menos ",groupCheckedTooManyStart:"Por favor, escolhe no máximo ",groupCheckedEnd:" alternativa(s)",badCreditCard:"O número de cartão de crédito digitado não é válido",badCVV:"O código de segurança do cartão de crédito não é válido",wrongFileDim:"As dimensões da imagem não são válidas",imageTooTall:"a imagem não pode ser mais alta que ",imageTooWide:"a imagem não pode ser mais larga que ",imageTooSmall:"a imagem é muito pequena",min:"min",max:"max",imageRatioNotAccepted:"A proporção da imagem (largura x altura) não é válida",badBrazilTelephoneAnswer:"O número de telefone digitado é inválido",badBrazilCEPAnswer:"O CEP digitado é inválido",badBrazilCPFAnswer:"O CPF digitado é inválido"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/ro.js b/form-validator/lang/ro.js index 06921a4..77ea968 100644 --- a/form-validator/lang/ro.js +++ b/form-validator/lang/ro.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Nu sa reusit lansarea formularului!",requiredField:"Acest câmp este obligatoriu",requiredfields:"Nu toate câmpurile obligatorii au fost completate",badTime:"Timpul introdus este incorect",badEmail:"Adresa de e-mail este incorectă",badTelephone:"Numărul de telefon este incorect",badSecurityAnswer:"Răspuns incorect la întrebarea de siguran?ă",badDate:"Dară incorectă",lengthBadStart:"Valoarea introdusă trebuie să fie interval ",lengthBadEnd:" caractere",lengthTooLongStart:"Valoarea introdusă este mai mare decât ",lengthTooShortStart:"Valoarea introdusă este mai mică decât ",notConfirmed:"Valorile introduse nu au fost confirmate",badDomain:"Domeniul este incorect",badUrl:"Adresa URL este incorectă",badCustomVal:"Valoarea introdusă este incorectă",andSpaces:" şi spaţierea",badInt:"Numărul introdus este incorect",badSecurityNumber:"Numărul de asigurare introdus este incorect",badUKVatAnswer:"Numărul CIF introdus este incorect",badStrength:"Parola Dvs nu este suficient de sigură",badNumberOfSelectedOptionsStart:"Trebuie să alegi măcar ",badNumberOfSelectedOptionsEnd:" răspunsuri",badAlphaNumeric:"Valoarea introdusă trebuie să con însă doar caractere alfanumerice ",badAlphaNumericExtra:" și ",wrongFileSize:"Fisierul trimis este prea mare (max %s)",wrongFileType:"Se acceptă doar fisiere tip %s",groupCheckedRangeStart:"Te rog alege între ",groupCheckedTooFewStart:"Te rog alege măcar ",groupCheckedTooManyStart:"Te rog alege maxim ",groupCheckedEnd:" elemnt(e)",badCreditCard:"Numărul de card introdus este incorect",badCVV:"Numărul CVV introdus este incorect",wrongFileDim:"Dimensiunea imaginii este incorectă,",imageTooTall:"imaginea nu poate fi mai înaltă decât",imageTooWide:"imaginea nu poate fi mai lată decât",imageTooSmall:"imaginea este prea mică",min:"min",max:"max",imageRatioNotAccepted:"Proportiile imaginii sunt incorecte",badBrazilTelephoneAnswer:"Numărul de telefon introdus este incorect.",badBrazilCEPAnswer:"CEP incorect",badBrazilCPFAnswer:"CPF incorect"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Nu sa reusit lansarea formularului!",requiredField:"Acest câmp este obligatoriu",requiredfields:"Nu toate câmpurile obligatorii au fost completate",badTime:"Timpul introdus este incorect",badEmail:"Adresa de e-mail este incorectă",badTelephone:"Numărul de telefon este incorect",badSecurityAnswer:"Răspuns incorect la întrebarea de siguran?ă",badDate:"Dară incorectă",lengthBadStart:"Valoarea introdusă trebuie să fie interval ",lengthBadEnd:" caractere",lengthTooLongStart:"Valoarea introdusă este mai mare decât ",lengthTooShortStart:"Valoarea introdusă este mai mică decât ",notConfirmed:"Valorile introduse nu au fost confirmate",badDomain:"Domeniul este incorect",badUrl:"Adresa URL este incorectă",badCustomVal:"Valoarea introdusă este incorectă",andSpaces:" şi spaţierea",badInt:"Numărul introdus este incorect",badSecurityNumber:"Numărul de asigurare introdus este incorect",badUKVatAnswer:"Numărul CIF introdus este incorect",badStrength:"Parola Dvs nu este suficient de sigură",badNumberOfSelectedOptionsStart:"Trebuie să alegi măcar ",badNumberOfSelectedOptionsEnd:" răspunsuri",badAlphaNumeric:"Valoarea introdusă trebuie să con însă doar caractere alfanumerice ",badAlphaNumericExtra:" și ",wrongFileSize:"Fisierul trimis este prea mare (max %s)",wrongFileType:"Se acceptă doar fisiere tip %s",groupCheckedRangeStart:"Te rog alege între ",groupCheckedTooFewStart:"Te rog alege măcar ",groupCheckedTooManyStart:"Te rog alege maxim ",groupCheckedEnd:" elemnt(e)",badCreditCard:"Numărul de card introdus este incorect",badCVV:"Numărul CVV introdus este incorect",wrongFileDim:"Dimensiunea imaginii este incorectă,",imageTooTall:"imaginea nu poate fi mai înaltă decât",imageTooWide:"imaginea nu poate fi mai lată decât",imageTooSmall:"imaginea este prea mică",min:"min",max:"max",imageRatioNotAccepted:"Proportiile imaginii sunt incorecte",badBrazilTelephoneAnswer:"Numărul de telefon introdus este incorect.",badBrazilCEPAnswer:"CEP incorect",badBrazilCPFAnswer:"CPF incorect"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/ru.js b/form-validator/lang/ru.js index 62ead20..6506343 100644 --- a/form-validator/lang/ru.js +++ b/form-validator/lang/ru.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ошибка отправки формы!",requiredField:"Это обязательное поле",requiredFields:"Вы задали не все обязательные поля",badTime:"Вы задали некорректное время",badEmail:"Вы задали некорректный e-mail",badTelephone:"Вы задали некорректный номер телефона",badSecurityAnswer:"Вы задали некорректный ответ на секретный вопрос",badDate:"Вы задали некорректную дату",lengthBadStart:"Значение должно быть в диапазоне",lengthBadEnd:" символов",lengthTooLongStart:"Значение длинее, чем ",lengthTooShortStart:"Значение меньше, чем ",notConfirmed:"Введённые значения не могут быть подтверждены",badDomain:"Некорректное значение домена",badUrl:"Некорретный URL",badCustomVal:"Введённое значение неверно",andSpaces:" и пробелы ",badInt:"Значение - не число",badSecurityNumber:"Введённый защитный номер - неправильный",badUKVatAnswer:"Некорректный UK VAT номер",badStrength:"Пароль не достаточно надёжен",badNumberOfSelectedOptionsStart:"Вы должны выбрать как минимум ",badNumberOfSelectedOptionsEnd:" ответов",badAlphaNumeric:"Значение должно содержать только числа и буквы ",badAlphaNumericExtra:" и ",wrongFileSize:"Загружаемый файл слишком велик (максимальный размер %s)",wrongFileType:"Принимаются файлы следующих типов %s",groupCheckedRangeStart:"Выберите между ",groupCheckedTooFewStart:"Выберите как минимум ",groupCheckedTooManyStart:"Выберите максимум из ",groupCheckedEnd:" элемент(ов)",badCreditCard:"Номер кредитной карты некорректен",badCVV:"CVV номер некорректно",wrongFileDim:"Неверные размеры графического файла,",imageTooTall:"изображение не может быть уже чем",imageTooWide:"изображение не может быть шире чем",imageTooSmall:"изображение слишком мало",min:"минимум",max:"максимум",imageRatioNotAccepted:"Изображение с таким соотношением сторон не принимается",badBrazilTelephoneAnswer:"Введённый номер телефона неправильный",badBrazilCEPAnswer:"CEP неправильный",badBrazilCPFAnswer:"CPF неправильный"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ошибка отправки формы!",requiredField:"Это обязательное поле",requiredFields:"Вы задали не все обязательные поля",badTime:"Вы задали некорректное время",badEmail:"Вы задали некорректный e-mail",badTelephone:"Вы задали некорректный номер телефона",badSecurityAnswer:"Вы задали некорректный ответ на секретный вопрос",badDate:"Вы задали некорректную дату",lengthBadStart:"Значение должно быть в диапазоне",lengthBadEnd:" символов",lengthTooLongStart:"Значение длинее, чем ",lengthTooShortStart:"Значение меньше, чем ",notConfirmed:"Введённые значения не могут быть подтверждены",badDomain:"Некорректное значение домена",badUrl:"Некорретный URL",badCustomVal:"Введённое значение неверно",andSpaces:" и пробелы ",badInt:"Значение - не число",badSecurityNumber:"Введённый защитный номер - неправильный",badUKVatAnswer:"Некорректный UK VAT номер",badStrength:"Пароль не достаточно надёжен",badNumberOfSelectedOptionsStart:"Вы должны выбрать как минимум ",badNumberOfSelectedOptionsEnd:" ответов",badAlphaNumeric:"Значение должно содержать только числа и буквы ",badAlphaNumericExtra:" и ",wrongFileSize:"Загружаемый файл слишком велик (максимальный размер %s)",wrongFileType:"Принимаются файлы следующих типов %s",groupCheckedRangeStart:"Выберите между ",groupCheckedTooFewStart:"Выберите как минимум ",groupCheckedTooManyStart:"Выберите максимум из ",groupCheckedEnd:" элемент(ов)",badCreditCard:"Номер кредитной карты некорректен",badCVV:"CVV номер некорректно",wrongFileDim:"Неверные размеры графического файла,",imageTooTall:"изображение не может быть уже чем",imageTooWide:"изображение не может быть шире чем",imageTooSmall:"изображение слишком мало",min:"минимум",max:"максимум",imageRatioNotAccepted:"Изображение с таким соотношением сторон не принимается",badBrazilTelephoneAnswer:"Введённый номер телефона неправильный",badBrazilCEPAnswer:"CEP неправильный",badBrazilCPFAnswer:"CPF неправильный"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/lang/sv.js b/form-validator/lang/sv.js index 8985231..cccd27b 100644 --- a/form-validator/lang/sv.js +++ b/form-validator/lang/sv.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Formuläret kunde inte skickas!",requiredField:"Detta är ett obligtoriskt fält",requiredFields:"Du har inte besvarat alla frågor",badTime:"Du har inte angett en korrekt tidpunkt",badEmail:"Du har inte angett en korrekt e-postadress",badTelephone:"Du har inte angett ett korrekt telefonnummer",badSecurityAnswer:"Du har angett fel svar på säkerhetsfrågan",badDate:"Du har anget ett felaktigt datum",lengthBadStart:"Ditt svar måste innehålla mellan ",lengthBadEnd:" tecken",lengthTooLongStart:"Du har angett ett svar som är längre än ",lengthTooShortStart:"Du har angett ett svar som är kortare än ",notConfirmed:"Svaren kunde inte bekräfta varandra",badDomain:"Du har angett en inkorrekt domän",badUrl:"Du har inte angett en korrekt webbadress",badCustomVal:"Du har anget ett inkorrekt svar",andSpaces:" och mellanslag ",badInt:"Du har inte angett en siffra",badSecurityNumber:"Du har angett ett felaktigt personnummer",badUKVatAnswer:"Du har inte angett ett brittiskt moms-nummer",badStrength:"Du har angett ett lösenord som inte är nog säkert",badNumberOfSelectedOptionsStart:"Du måste åtminstone välja ",badNumberOfSelectedOptionsEnd:" svarsalternativ",badAlphaNumeric:"Du kan endast svara med alfanumersika tecken (a-z och siffror)",badAlphaNumericExtra:" och ",wrongFileSize:"Filen du försöker ladda upp är för stor (max %s)",wrongFileType:"Endast filer av typen %s är tillåtna",groupCheckedRangeStart:"Välj mellan ",groupCheckedTooFewStart:"Då måste göra minst ",groupCheckedTooManyStart:"Du får inte göra fler än ",groupCheckedEnd:" val",badCreditCard:"Du har angett ett felaktigt kreditkortsnummer",badCVV:"Du har angett ett felaktigt CVV-nummer",wrongFileDim:"Otillåten bildstorlek,",imageTooTall:"bilden får inte vara högre än",imageTooWide:"bilden får inte vara bredare än",imageTooSmall:"bilden är för liten",genericBadInputValue:"The input value can be accepted",min:"minst",max:"max",imageRatioNotAccepted:"Bildens dimensioner (förhållandet mellan höjd och längd) kan inte accepteras"}})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Formuläret kunde inte skickas!",requiredField:"Detta är ett obligtoriskt fält",requiredFields:"Du har inte besvarat alla frågor",badTime:"Du har inte angett en korrekt tidpunkt",badEmail:"Du har inte angett en korrekt e-postadress",badTelephone:"Du har inte angett ett korrekt telefonnummer",badSecurityAnswer:"Du har angett fel svar på säkerhetsfrågan",badDate:"Du har anget ett felaktigt datum",lengthBadStart:"Ditt svar måste innehålla mellan ",lengthBadEnd:" tecken",lengthTooLongStart:"Du har angett ett svar som är längre än ",lengthTooShortStart:"Du har angett ett svar som är kortare än ",notConfirmed:"Svaren kunde inte bekräfta varandra",badDomain:"Du har angett en inkorrekt domän",badUrl:"Du har inte angett en korrekt webbadress",badCustomVal:"Du har anget ett inkorrekt svar",andSpaces:" och mellanslag ",badInt:"Du har inte angett en siffra",badSecurityNumber:"Du har angett ett felaktigt personnummer",badUKVatAnswer:"Du har inte angett ett brittiskt moms-nummer",badStrength:"Du har angett ett lösenord som inte är nog säkert",badNumberOfSelectedOptionsStart:"Du måste åtminstone välja ",badNumberOfSelectedOptionsEnd:" svarsalternativ",badAlphaNumeric:"Du kan endast svara med alfanumersika tecken (a-z och siffror)",badAlphaNumericExtra:" och ",wrongFileSize:"Filen du försöker ladda upp är för stor (max %s)",wrongFileType:"Endast filer av typen %s är tillåtna",groupCheckedRangeStart:"Välj mellan ",groupCheckedTooFewStart:"Då måste göra minst ",groupCheckedTooManyStart:"Du får inte göra fler än ",groupCheckedEnd:" val",badCreditCard:"Du har angett ett felaktigt kreditkortsnummer",badCVV:"Du har angett ett felaktigt CVV-nummer",wrongFileDim:"Otillåten bildstorlek,",imageTooTall:"bilden får inte vara högre än",imageTooWide:"bilden får inte vara bredare än",imageTooSmall:"bilden är för liten",genericBadInputValue:"The input value can be accepted",min:"minst",max:"max",imageRatioNotAccepted:"Bildens dimensioner (förhållandet mellan höjd och längd) kan inte accepteras"}})}(a,window)}); \ No newline at end of file diff --git a/form-validator/location.js b/form-validator/location.js index 27670ff..55b53fd 100644 --- a/form-validator/location.js +++ b/form-validator/location.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a){a.formUtils.addValidator({name:"country",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.countries)>-1},countries:["afghanistan","albania","algeria","american samoa","andorra","angola","anguilla","antarctica","antigua and barbuda","arctic ocean","argentina","armenia","aruba","ashmore and cartier islands","atlantic ocean","australia","austria","azerbaijan","bahamas","bahrain","baltic sea","baker island","bangladesh","barbados","bassas da india","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","borneo","bosnia and herzegovina","botswana","bouvet island","brazil","british virgin islands","brunei","bulgaria","burkina faso","burundi","cambodia","cameroon","canada","cape verde","cayman islands","central african republic","chad","chile","china","christmas island","clipperton island","cocos islands","colombia","comoros","cook islands","coral sea islands","costa rica","croatia","cuba","cyprus","czech republic","democratic republic of the congo","denmark","djibouti","dominica","dominican republic","east timor","ecuador","egypt","el salvador","equatorial guinea","eritrea","estonia","ethiopia","europa island","falkland islands","faroe islands","fiji","finland","france","french guiana","french polynesia","french southern and antarctic lands","gabon","gambia","gaza strip","georgia","germany","ghana","gibraltar","glorioso islands","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea-bissau","guyana","haiti","heard island and mcdonald islands","honduras","hong kong","howland island","hungary","iceland","india","indian ocean","indonesia","iran","iraq","ireland","isle of man","israel","italy","jamaica","jan mayen","japan","jarvis island","jersey","johnston atoll","jordan","juan de nova island","kazakhstan","kenya","kerguelen archipelago","kingman reef","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall islands","martinique","mauritania","mauritius","mayotte","mediterranean sea","mexico","micronesia","midway islands","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","navassa island","nepal","netherlands","netherlands antilles","new caledonia","new zealand","nicaragua","niger","nigeria","niue","norfolk island","north korea","north sea","northern mariana islands","norway","oman","pacific ocean","pakistan","palau","palmyra atoll","panama","papua new guinea","paracel islands","paraguay","peru","philippines","pitcairn islands","poland","portugal","puerto rico","qatar","republic of the congo","reunion","romania","ross sea","russia","rwanda","saint helena","saint kitts and nevis","saint lucia","saint pierre and miquelon","saint vincent and the grenadines","samoa","san marino","sao tome and principe","saudi arabia","senegal","serbia","seychelles","sierra leone","singapore","slovakia","slovenia","solomon islands","somalia","south africa","south georgia and the south sandwich islands","south korea","southern ocean","spain","spratly islands","sri lanka","sudan","suriname","svalbard","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","tasman sea","thailand","togo","tokelau","tonga","trinidad and tobago","tromelin island","tunisia","turkey","turkmenistan","turks and caicos islands","tuvalu","uganda","ukraine","united arab emirates","united kingdom","uruguay","usa","uzbekistan","vanuatu","venezuela","viet nam","virgin islands","wake island","wallis and futuna","west bank","western sahara","yemen","zambia","zimbabwe"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"federatestate",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.states)>-1},states:["alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","district of columbia","massachusetts","michigan","minnesota","mississippi","missouri","montana","nebraska","nevada","new hampshire","new jersey","new mexico","new york","north carolina","north dakota","ohio","oklahoma","oregon","pennsylvania","rhode island","south carolina","south dakota","tennessee","texas","utah","vermont","virginia","washington","west virginia","wisconsin","wyoming"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"longlat",validatorFunction:function(a){var b=/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/;return b.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"});var b=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestCountry=function(c){var d=b(a.formUtils.validators.validate_country.countries);return a.formUtils.suggest(this,d,c)},a.fn.suggestState=function(c){var d=b(a.formUtils.validators.validate_federatestate.states);return a.formUtils.suggest(this,d,c)}}(jQuery); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"country",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.countries)>-1},countries:["afghanistan","albania","algeria","american samoa","andorra","angola","anguilla","antarctica","antigua and barbuda","arctic ocean","argentina","armenia","aruba","ashmore and cartier islands","atlantic ocean","australia","austria","azerbaijan","bahamas","bahrain","baltic sea","baker island","bangladesh","barbados","bassas da india","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","borneo","bosnia and herzegovina","botswana","bouvet island","brazil","british virgin islands","brunei","bulgaria","burkina faso","burundi","cambodia","cameroon","canada","cape verde","cayman islands","central african republic","chad","chile","china","christmas island","clipperton island","cocos islands","colombia","comoros","cook islands","coral sea islands","costa rica","croatia","cuba","cyprus","czech republic","democratic republic of the congo","denmark","djibouti","dominica","dominican republic","east timor","ecuador","egypt","el salvador","equatorial guinea","eritrea","estonia","ethiopia","europa island","falkland islands","faroe islands","fiji","finland","france","french guiana","french polynesia","french southern and antarctic lands","gabon","gambia","gaza strip","georgia","germany","ghana","gibraltar","glorioso islands","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea-bissau","guyana","haiti","heard island and mcdonald islands","honduras","hong kong","howland island","hungary","iceland","india","indian ocean","indonesia","iran","iraq","ireland","isle of man","israel","italy","jamaica","jan mayen","japan","jarvis island","jersey","johnston atoll","jordan","juan de nova island","kazakhstan","kenya","kerguelen archipelago","kingman reef","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall islands","martinique","mauritania","mauritius","mayotte","mediterranean sea","mexico","micronesia","midway islands","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","navassa island","nepal","netherlands","netherlands antilles","new caledonia","new zealand","nicaragua","niger","nigeria","niue","norfolk island","north korea","north sea","northern mariana islands","norway","oman","pacific ocean","pakistan","palau","palmyra atoll","panama","papua new guinea","paracel islands","paraguay","peru","philippines","pitcairn islands","poland","portugal","puerto rico","qatar","republic of the congo","reunion","romania","ross sea","russia","rwanda","saint helena","saint kitts and nevis","saint lucia","saint pierre and miquelon","saint vincent and the grenadines","samoa","san marino","sao tome and principe","saudi arabia","senegal","serbia","seychelles","sierra leone","singapore","slovakia","slovenia","solomon islands","somalia","south africa","south georgia and the south sandwich islands","south korea","southern ocean","spain","spratly islands","sri lanka","sudan","suriname","svalbard","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","tasman sea","thailand","togo","tokelau","tonga","trinidad and tobago","tromelin island","tunisia","turkey","turkmenistan","turks and caicos islands","tuvalu","uganda","ukraine","united arab emirates","united kingdom","uruguay","usa","uzbekistan","vanuatu","venezuela","viet nam","virgin islands","wake island","wallis and futuna","west bank","western sahara","yemen","zambia","zimbabwe"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"federatestate",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.states)>-1},states:["alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","district of columbia","massachusetts","michigan","minnesota","mississippi","missouri","montana","nebraska","nevada","new hampshire","new jersey","new mexico","new york","north carolina","north dakota","ohio","oklahoma","oregon","pennsylvania","rhode island","south carolina","south dakota","tennessee","texas","utah","vermont","virginia","washington","west virginia","wisconsin","wyoming"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"longlat",validatorFunction:function(a){var b=/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/;return b.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"});var b=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestCountry=function(c){var d=b(a.formUtils.validators.validate_country.countries);return a.formUtils.suggest(this,d,c)},a.fn.suggestState=function(c){var d=b(a.formUtils.validators.validate_federatestate.states);return a.formUtils.suggest(this,d,c)}}(a)}); \ No newline at end of file diff --git a/form-validator/poland.js b/form-validator/poland.js new file mode 100644 index 0000000..b30d2f0 --- /dev/null +++ b/form-validator/poland.js @@ -0,0 +1,9 @@ +/** File generated by Grunt -- do not modify + * JQUERY-FORM-VALIDATOR + * + * @version 2.2.190 + * @website http://formvalidator.net/ + * @author Victor Jonsson, http://victorjonsson.se + * @license MIT + */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"plpesel",validatorFunction:function(a){var b=[1,3,7,9,1,3,7,9,1,3],c=0,d=0;if(/\d{11}/.test(a)&&11===a.length){for(var e=0;10>e;e++)c+=a[e]*b[e];if(c%10!==0&&(d=10-c%10),parseInt(a.charAt(10))===d)return!0}return!1},errorMessage:"",errorMessageKey:"badPlPesel"}),a.formUtils.addValidator({name:"plnip",validatorFunction:function(a){var b=[6,5,7,2,3,4,5,6,7],c=0;if(/\d{10}/.test(a)&&10===a.length){for(var d=0;9>d;d++)c+=a[d]*b[d];if(parseInt(a.charAt(9))===c%11)return!0}return!1},errorMessage:"",errorMessageKey:"badPlNip"}),a.formUtils.addValidator({name:"plregon",validatorFunction:function(a){var b=[8,9,2,3,4,5,6,7],c=[2,4,8,5,0,9,7,3,6,1,2,4,8],d=0,e=0;if(/(\d{14}|\d{9})/.test(a)&&(9===a.length||14===a.length)){for(var f=0;8>f;f++)d+=a[f]*b[f];if(d%11!==10&&(e=d%11),parseInt(a.charAt(8))===e){if(14!==a.length)return!0;for(d=0,f=0;13>f;f++)d+=a[f]*c[f];if(d%11!==10&&(e=d%11),parseInt(a.charAt(13))===e)return!0}}return!1},errorMessage:"",errorMessageKey:"badPlRegon"})}(a)}); \ No newline at end of file diff --git a/form-validator/sanitize.js b/form-validator/sanitize.js index f01c3f8..91be2d3 100644 --- a/form-validator/sanitize.js +++ b/form-validator/sanitize.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";var c='[type="button"], [type="submit"], [type="radio"], [type="checkbox"], [type="reset"], [type="search"]',d={upper:function(a){return a.toLocaleUpperCase()},lower:function(a){return a.toLocaleLowerCase()},trim:function(b){return a.trim(b)},trimLeft:function(a){return a.replace(/^\s+/,"")},trimRight:function(a){return a.replace(/\s+$/,"")},capitalize:function(b){var c=b.split(" ");return a.each(c,function(a,b){c[a]=b.substr(0,1).toUpperCase()+b.substr(1,b.length)}),c.join(" ")},insert:function(a,b,c){var d=(b.attr("data-sanitize-insert-"+c)||"").replace(/\[SPACE\]/g," ");return"left"===c&&0===a.indexOf(d)||"right"===c&&a.substring(a.length-d.length)===d?a:("left"===c?d:"")+a+("right"===c?d:"")},insertRight:function(a,b){return this.insert(a,b,"right")},insertLeft:function(a,b){return this.insert(a,b,"left")},numberFormat:function(a,c){if(0===a.length)return a;if(!("numeral"in b))throw new ReferenceError('Using sanitation function "numberFormat" requires that you include numeral.js (http://numeraljs.com/)');return a=numeral().unformat(a),a=numeral(a).format(c.attr("data-sanitize-number-format"))},strip:function(b,c){var d=c.attr("data-sanitize-strip")||"";return a.split(d,function(a){b=b.replace(new RegExp("\\"+a,"g"),"")}),b},escape:function(b){var c={"<":"__%AMP%__lt;",">":"__%AMP%__gt;","&":"__%AMP%__amp;","'":"__%AMP%__#8217;",'"':"__%AMP%__quot;"};return a.each(c,function(a,c){b=b.replace(new RegExp(a,"g"),c)}),b.replace(new RegExp("__%AMP%__","g"),"&")}},e=function(b,e,f){e||(e=a("form")),e.each||(e=a(e));var g=function(){var b=a(this),c=b.val();a.split(b.attr("data-sanitize"),function(a){if(!(a in d))throw new Error('Use of unknown sanitize command "'+a+'"');c=d[a](c,b,f)}),b.val(c).trigger("keyup.validation")};e.each(function(){var b=a(this);f.sanitizeAll&&b.find("input,textarea").not(c).each(function(){var b=a(this),c=b.attr("data-sanitize")||"";b.attr("data-sanitize",f.sanitizeAll+" "+c)}),b.find("[data-sanitize]").unbind("blur.sanitation",g).bind("blur.sanitation",g),a(function(){b.trigger("blur.sanitation")})})};a(b).on("validatorsLoaded formValidationSetup",e),a.formUtils.setupSanitation=e}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";var c='[type="button"], [type="submit"], [type="radio"], [type="checkbox"], [type="reset"], [type="search"]',d={upper:function(a){return a.toLocaleUpperCase()},lower:function(a){return a.toLocaleLowerCase()},trim:function(b){return a.trim(b)},trimLeft:function(a){return a.replace(/^\s+/,"")},trimRight:function(a){return a.replace(/\s+$/,"")},capitalize:function(b){var c=b.split(" ");return a.each(c,function(a,b){c[a]=b.substr(0,1).toUpperCase()+b.substr(1,b.length)}),c.join(" ")},insert:function(a,b,c){var d=(b.attr("data-sanitize-insert-"+c)||"").replace(/\[SPACE\]/g," ");return"left"===c&&0===a.indexOf(d)||"right"===c&&a.substring(a.length-d.length)===d?a:("left"===c?d:"")+a+("right"===c?d:"")},insertRight:function(a,b){return this.insert(a,b,"right")},insertLeft:function(a,b){return this.insert(a,b,"left")},numberFormat:function(a,c){if(0===a.length)return a;if(!("numeral"in b))throw new ReferenceError('Using sanitation function "numberFormat" requires that you include numeral.js (http://numeraljs.com/)');return a=numeral().unformat(a),a=numeral(a).format(c.attr("data-sanitize-number-format"))},strip:function(b,c){var d=c.attr("data-sanitize-strip")||"";return a.split(d,function(a){b=b.replace(new RegExp("\\"+a,"g"),"")}),b},escape:function(b){var c={"<":"__%AMP%__lt;",">":"__%AMP%__gt;","&":"__%AMP%__amp;","'":"__%AMP%__#8217;",'"':"__%AMP%__quot;"};return a.each(c,function(a,c){b=b.replace(new RegExp(a,"g"),c)}),b.replace(new RegExp("__%AMP%__","g"),"&")}},e=function(b,e,f){e||(e=a("form")),e.each||(e=a(e));var g=function(){var b=a(this),c=b.val();a.split(b.attr("data-sanitize"),function(a){if(!(a in d))throw new Error('Use of unknown sanitize command "'+a+'"');c=d[a](c,b,f)}),b.val(c).trigger("keyup.validation")};e.each(function(){var b=a(this);f.sanitizeAll&&b.find("input,textarea").not(c).each(function(){var b=a(this),c=b.attr("data-sanitize")||"";b.attr("data-sanitize",f.sanitizeAll+" "+c)}),b.find("[data-sanitize]").unbind("blur.sanitation",g).bind("blur.sanitation",g),a(function(){b.trigger("blur.sanitation")})})};a(b).on("validatorsLoaded formValidationSetup",e),a.formUtils.setupSanitation=e}(a,window)}); \ No newline at end of file diff --git a/form-validator/security.js b/form-validator/security.js index 219926b..a408c75 100644 --- a/form-validator/security.js +++ b/form-validator/security.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){"use strict";a.formUtils.addValidator({name:"spamcheck",validatorFunction:function(a,b){var c=b.valAttr("captcha");return c===a},errorMessage:"",errorMessageKey:"badSecurityAnswer"}),a.formUtils.addValidator({name:"confirmation",validatorFunction:function(a,b,c,d,e){var f="",g=b.valAttr("confirm")||b.attr("name")+"_confirmation",h=e.find('[name="'+g+'"]').eq(0);if(h){if(f=h.val(),c.validateOnBlur&&!h[0].hasValidationCallback){h[0].hasValidationCallback=!0;var i=function(){b.validate()};h.on("keyup",i),e.one("formValidationSetup",function(){h[0].hasValidationCallback=!1,h.off("keyup",i)})}}else alert('Could not find an input with name "'+g+'"');return a===f},errorMessage:"",errorMessageKey:"notConfirmed"});var c={amex:[15,15],diners_club:[14,14],cjb:[16,16],laser:[16,19],visa:[16,16],mastercard:[16,16],maestro:[12,19],discover:[16,16]},d=!1,e=!1;a.formUtils.addValidator({name:"creditcard",validatorFunction:function(f,g){var h=a.split(g.valAttr("allowing")||"");if(e=a.inArray("amex",h)>-1,d=e&&1===h.length,h.length>0){var i=!1;if(a.each(h,function(a,d){if(d in c){if(f.length>=c[d][0]&&f.length<=c[d][1])return i=!0,!1}else b.console&&console.warn('Use of unknown credit card "'+d+'"')}),!i)return!1}if(""!==f.replace(new RegExp("[0-9]","g"),""))return!1;var j=0;return a.each(f.split("").reverse(),function(a,b){b=parseInt(b,10),a%2===0?j+=b:(b*=2,j+=10>b?b:b-9)}),j%10===0},errorMessage:"",errorMessageKey:"badCreditCard"}),a.formUtils.addValidator({name:"cvv",validatorFunction:function(a){return""===a.replace(/[0-9]/g,"")?(a+="",d?4===a.length:e?3===a.length||4===a.length:3===a.length):!1},errorMessage:"",errorMessageKey:"badCVV"}),a.formUtils.addValidator({name:"strength",validatorFunction:function(b,c){var d=c.valAttr("strength")||2;return d&&d>3&&(d=3),a.formUtils.validators.validate_strength.calculatePasswordStrength(b)>=d},errorMessage:"",errorMessageKey:"badStrength",calculatePasswordStrength:function(a){if(a.length<4)return 0;var b=0,c=function(a,b){for(var c="",d=0;df&&f+d+af&&(e=!1),e?(d+=a-1,e=!1):c+=b.charAt(d)}return c};return b+=4*a.length,b+=1*(c(1,a).length-a.length),b+=1*(c(2,a).length-a.length),b+=1*(c(3,a).length-a.length),b+=1*(c(4,a).length-a.length),a.match(/(.*[0-9].*[0-9].*[0-9])/)&&(b+=5),a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)&&(b+=5),a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&(b+=10),a.match(/([a-zA-Z])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([a-zA-Z])/)&&(b+=15),(a.match(/^\w+$/)||a.match(/^\d+$/))&&(b-=10),0>b&&(b=0),b>100&&(b=100),20>b?0:40>b?1:60>=b?2:3},strengthDisplay:function(b,c){var d={fontSize:"12pt",padding:"4px",bad:"Very bad",weak:"Weak",good:"Good",strong:"Strong"};c&&a.extend(d,c),b.bind("keyup",function(){var b=a(this).val(),c="undefined"==typeof d.parent?a(this).parent():a(d.parent),e=c.find(".strength-meter"),f=a.formUtils.validators.validate_strength.calculatePasswordStrength(b),g={background:"pink",color:"#FF0000",fontWeight:"bold",border:"red solid 1px",borderWidth:"0px 0px 4px",display:"inline-block",fontSize:d.fontSize,padding:d.padding},h=d.bad;0===e.length&&(e=a(""),e.addClass("strength-meter").appendTo(c)),b?e.show():e.hide(),1===f?h=d.weak:2===f?(g.background="lightyellow",g.borderColor="yellow",g.color="goldenrod",h=d.good):f>=3&&(g.background="lightgreen",g.borderColor="darkgreen",g.color="darkgreen",h=d.strong),e.css(g).text(h)})}});var f=function(b,c,d,e,f){var g=c.valAttr("req-params")||c.data("validation-req-params")||{},h=function(b,d){b.valid?c.valAttr("backend-valid","true"):(c.valAttr("backend-invalid","true"),b.message&&c.attr(e.validationErrorMsgAttribute,b.message)),c.valAttr("has-keyup-event")||c.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("backend-valid",!1).valAttr("backend-invalid",!1)}),d()};g||(g={}),"string"==typeof g&&(g=a.parseJSON(g)),g[c.valAttr("param-name")||c.attr("name")]=d,a.ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed with status: "+a.statusText},f),!1},success:function(a){h(a,f)}})},g=function(){return!1};a.formUtils.addValidator({name:"server",validatorFunction:function(b,c,d,e,h){var i=c.valAttr("backend-valid"),j=c.valAttr("backend-invalid"),k=document.location.href;return c.valAttr("url")?k=c.valAttr("url"):"serverURL"in d&&(k=d.backendUrl),i?!0:j?!1:"keyup"!==a.formUtils.eventType||a.formUtils.isValidatingEntireForm?a.formUtils.isValidatingEntireForm?(h.bind("submit",g).addClass("validating-server-side").addClass("on-blur"),c.addClass("validating-server-side"),a.formUtils.haltValidation=!0,f(k,c,b,d,function(){h.removeClass("validating-server-side").removeClass("on-blur").get(0).onsubmit=function(){},h.unbind("submit",g),c.removeClass("validating-server-side"),c.valAttr("value-length",b.length),a.formUtils.haltValidation=!1,h.trigger("submit")}),null):(h.addClass("validating-server-side"),c.addClass("validating-server-side"),f(k,c,b,d,function(){h.removeClass("validating-server-side"),c.removeClass("validating-server-side"),c.trigger("blur")}),null):null},errorMessage:"",errorMessageKey:"badBackend",validateOnKeyUp:!1}),a.formUtils.addValidator({name:"letternumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:"requiredFields"}),a.fn.displayPasswordStrength=function(b){return new a.formUtils.validators.validate_strength.strengthDisplay(this,b),this}}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a.formUtils.addValidator({name:"spamcheck",validatorFunction:function(a,b){var c=b.valAttr("captcha");return c===a},errorMessage:"",errorMessageKey:"badSecurityAnswer"}),a.formUtils.addValidator({name:"confirmation",validatorFunction:function(b,c,d,e,f){var g,h=c.valAttr("confirm")||c.attr("name")+"_confirmation",i=f.find('[name="'+h+'"]');if(!i.length)return a.formUtils.warn('Password confirmation validator: could not find an input with name "'+h+'"'),!1;if(g=i.val(),d.validateOnBlur&&!i[0].hasValidationCallback){i[0].hasValidationCallback=!0;var j=function(){c.validate()};i.on("keyup",j),f.one("formValidationSetup",function(){i[0].hasValidationCallback=!1,i.off("keyup",j)})}return b===g},errorMessage:"",errorMessageKey:"notConfirmed"});var c={amex:[15,15],diners_club:[14,14],cjb:[16,16],laser:[16,19],visa:[16,16],mastercard:[16,16],maestro:[12,19],discover:[16,16]},d=!1,e=!1;a.formUtils.addValidator({name:"creditcard",validatorFunction:function(f,g){var h=a.split(g.valAttr("allowing")||"");if(e=a.inArray("amex",h)>-1,d=e&&1===h.length,h.length>0){var i=!1;if(a.each(h,function(a,d){if(d in c){if(f.length>=c[d][0]&&f.length<=c[d][1])return i=!0,!1}else b.console&&console.warn('Use of unknown credit card "'+d+'"')}),!i)return!1}if(""!==f.replace(new RegExp("[0-9]","g"),""))return!1;var j=0;return a.each(f.split("").reverse(),function(a,b){b=parseInt(b,10),a%2===0?j+=b:(b*=2,j+=10>b?b:b-9)}),j%10===0},errorMessage:"",errorMessageKey:"badCreditCard"}),a.formUtils.addValidator({name:"cvv",validatorFunction:function(a){return""===a.replace(/[0-9]/g,"")?(a+="",d?4===a.length:e?3===a.length||4===a.length:3===a.length):!1},errorMessage:"",errorMessageKey:"badCVV"}),a.formUtils.addValidator({name:"strength",validatorFunction:function(b,c){var d=c.valAttr("strength")||2;return d&&d>3&&(d=3),a.formUtils.validators.validate_strength.calculatePasswordStrength(b)>=d},errorMessage:"",errorMessageKey:"badStrength",calculatePasswordStrength:function(a){if(a.length<4)return 0;var b=0,c=function(a,b){for(var c="",d=0;df&&f+d+af&&(e=!1),e?(d+=a-1,e=!1):c+=b.charAt(d)}return c};return b+=4*a.length,b+=1*(c(1,a).length-a.length),b+=1*(c(2,a).length-a.length),b+=1*(c(3,a).length-a.length),b+=1*(c(4,a).length-a.length),a.match(/(.*[0-9].*[0-9].*[0-9])/)&&(b+=5),a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)&&(b+=5),a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&(b+=10),a.match(/([a-zA-Z])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([a-zA-Z])/)&&(b+=15),(a.match(/^\w+$/)||a.match(/^\d+$/))&&(b-=10),0>b&&(b=0),b>100&&(b=100),20>b?0:40>b?1:60>=b?2:3},strengthDisplay:function(b,c){var d={fontSize:"12pt",padding:"4px",bad:"Very bad",weak:"Weak",good:"Good",strong:"Strong"};c&&a.extend(d,c),b.bind("keyup",function(){var b=a(this).val(),c="undefined"==typeof d.parent?a(this).parent():a(d.parent),e=c.find(".strength-meter"),f=a.formUtils.validators.validate_strength.calculatePasswordStrength(b),g={background:"pink",color:"#FF0000",fontWeight:"bold",border:"red solid 1px",borderWidth:"0px 0px 4px",display:"inline-block",fontSize:d.fontSize,padding:d.padding},h=d.bad;0===e.length&&(e=a(""),e.addClass("strength-meter").appendTo(c)),b?e.show():e.hide(),1===f?h=d.weak:2===f?(g.background="lightyellow",g.borderColor="yellow",g.color="goldenrod",h=d.good):f>=3&&(g.background="lightgreen",g.borderColor="darkgreen",g.color="darkgreen",h=d.strong),e.css(g).text(h)})}});var f=function(b,c,d,e,f){var g=c.valAttr("req-params")||c.data("validation-req-params")||{},h=function(b,d){b.valid?c.valAttr("backend-valid","true"):(c.valAttr("backend-invalid","true"),b.message&&c.attr(e.validationErrorMsgAttribute,b.message)),c.valAttr("has-keyup-event")||c.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("backend-valid",!1).valAttr("backend-invalid",!1)}),d()};g||(g={}),"string"==typeof g&&(g=a.parseJSON(g)),g[c.valAttr("param-name")||c.attr("name")]=d,a.ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed with status: "+a.statusText},f),!1},success:function(a){h(a,f)}})},g=function(){return!1};a.formUtils.addValidator({name:"server",validatorFunction:function(b,c,d,e,h){var i=c.valAttr("backend-valid"),j=c.valAttr("backend-invalid"),k=document.location.href;return c.valAttr("url")?k=c.valAttr("url"):"serverURL"in d&&(k=d.backendUrl),i?!0:j?!1:"keyup"!==a.formUtils.eventType||a.formUtils.isValidatingEntireForm?a.formUtils.isValidatingEntireForm?(h.bind("submit",g).addClass("validating-server-side").addClass("on-blur"),c.addClass("validating-server-side"),a.formUtils.haltValidation=!0,f(k,c,b,d,function(){h.removeClass("validating-server-side").removeClass("on-blur").get(0).onsubmit=function(){},h.unbind("submit",g),c.removeClass("validating-server-side"),c.valAttr("value-length",b.length),a.formUtils.haltValidation=!1,h.trigger("submit")}),null):(h.addClass("validating-server-side"),c.addClass("validating-server-side"),f(k,c,b,d,function(){h.removeClass("validating-server-side"),c.removeClass("validating-server-side"),c.trigger("blur")}),null):null},errorMessage:"",errorMessageKey:"badBackend",validateOnKeyUp:!1}),a.formUtils.addValidator({name:"letternumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:"requiredFields"}),a.formUtils.addValidator({name:"recaptcha",validatorFunction:function(a,b){return grecaptcha.getResponse(b.valAttr("recaptcha-widgetId"))},errorMessage:"",errorMessageKey:"badreCaptcha"}),a.fn.displayPasswordStrength=function(b){return new a.formUtils.validators.validate_strength.strengthDisplay(this,b),this};var h=function(b,c,d){if("undefined"!=typeof grecaptcha&&!a.formUtils.hasLoadedGrecaptcha)throw new Error("reCaptcha API can not be loaded by hand, delete reCaptcha API snippet.");if(!a.formUtils.hasLoadedGrecaptcha){a.formUtils.hasLoadedGrecaptcha=!0;var e="//www.google.com/recaptcha/api.js?onload=reCaptchaLoaded&render=explicit"+(d.lang?"&hl="+d.lang:""),f=document.createElement("script");f.type="text/javascript",f.async=!0,f.defer=!0,f.src=e,document.getElementsByTagName("body")[0].appendChild(f)}};b.reCaptchaLoaded=function(){var b=a("form");b.each||(b=a(b)),b.each(function(){var b=a(this),c=b.context.validationConfig;a('[data-validation~="recaptcha"]',b).each(function(){var b=a(this),d=document.createElement("DIV"),e=c.reCaptchaSiteKey||b.valAttr("recaptcha-sitekey"),f=c.reCaptchaTheme||b.valAttr("recaptcha-theme")||"light";if(!e)throw new Error("Google reCaptcha site key is required.");b.hide(),b.parent().append(d);var g=grecaptcha.render(d,{sitekey:e,theme:f});b.valAttr("recaptcha-widgetId",g)})})},a(b).on("validatorsLoaded formValidationSetup",h)}(a,window)}); \ No newline at end of file diff --git a/form-validator/sweden.js b/form-validator/sweden.js index 4a91965..583b8db 100644 --- a/form-validator/sweden.js +++ b/form-validator/sweden.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b){a.formUtils.addValidator({name:"swesec",validatorFunction:function(c,d){var e,f,g,h;if(d.valAttr("use-hyphen")){if(h=c.split("-"),2!==h.length)return!1;c=h.join("")}if(!c.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/))return!1;e=RegExp.$1,f=a.formUtils.parseDateInt(RegExp.$2),g=a.formUtils.parseDateInt(RegExp.$3),b.ssnGender=parseInt(RegExp.$4.substring(2,3))%2===0?"female":"male";var i=[31,28,31,30,31,30,31,31,30,31,30,31];if((e%400===0||e%4===0&&e%100!==0)&&(i[1]=29),1>f||f>12||1>g||g>i[f-1])return!1;c=c.substring(2,c.length);for(var j="",k=0;k-1:!1:!0},errorMessage:"",errorMessageKey:"badCustomVal",counties:["stockholms län","uppsala län","södermanlands län","östergötlands län","jönköpings län","kronobergs län","kalmar län","gotlands län","blekinge län","skåne län","hallands län","västra götalands län","värmlands län","örebro län","västmanlands län","dalarnas län","gävleborgs län","västernorrlands län","jämtlands län","västerbottens län","norrbottens län"]}),a.formUtils.addValidator({name:"swemunicipality",validatorFunction:function(b){return b=b.toLowerCase(),-1===a.inArray(b,this.municipalities)?"s kommun"===b.substr(-8)&&a.inArray(b.substr(0,b.length-8),this.municipalities)>-1?!0:" kommun"===b.substr(-7)?a.inArray(b.substr(0,b.length-7),this.municipalities)>-1:!1:!0},errorMessage:"",errorMessageKey:"badCustomVal",municipalities:["ale","alingsås","alvesta","aneby","arboga","arjeplog","arvidsjaur","arvika","askersund","avesta","bengtsfors","berg","bjurholm","bjuv","boden","bollebygd","bollnäs","borgholm","borlänge","borås","botkyrka","boxholm","bromölla","bräcke","burlöv","båstad","dals-ed","danderyd","degerfors","dorotea","eda","ekerö","eksjö","emmaboda","enköpings","eskilstuna","eslövs","essunga","fagersta","falkenberg","falköping","falu","filipstad","finspång","flen","forshaga","färgelanda","gagnef","gislaved","gnesta","gnosjö","gotland","grum","grästorp","gullspång","gällivare","gävle","göteborg","götene","habo","hagfor","hallsberg","hallstahammar","halmstad","hammarö","haninge","haparanda","heby","hedemora","helsingborg","herrljunga","hjo","hofor","huddinge","hudiksvall","hultsfred","hylte","håbo","hällefor","härjedalen","härnösand","härryda","hässleholm","höganäs","högsby","hörby","höör","jokkmokk","järfälla","jönköping","kalix","kalmar","karlsborg","karlshamn","karlskoga","karlskrona","karlstad","katrineholm","kil","kinda","kiruna","klippan","knivsta","kramfors","kristianstad","kristinehamn","krokoms","kumla","kungsbacka","kungsör","kungälv","kävlinge","köping","laholm","landskrona","laxå","lekeberg","leksand","lerum","lessebo","lidingö","lidköping","lilla edets","lindesbergs","linköpings","ljungby","ljusdals","ljusnarsbergs","lomma","ludvika","luleå","lunds","lycksele","lysekil","malmö","malung-sälen","malå","mariestad","marks","markaryd","mellerud","mjölby","mora","motala","mullsjö","munkedal","munkfors","mölndal","mönsterås","mörbylånga","nacka","nora","norberg","nordanstig","nordmaling","norrköping","norrtälje","norsjö","nybro","nykvarn","nyköping","nynäshamn","nässjö","ockelbo","olofström","orsa","orust","osby","oskarshamn","ovanåker","oxelösund","pajala","partille","perstorp","piteå","ragunda","robertsfors","ronneby","rättvik","sala","salem","sandviken","sigtuna","simrishamn","sjöbo","skara","skellefteå","skinnskatteberg","skurup","skövde","smedjebacken","sollefteå","sollentuna","solna","sorsele","sotenäs","staffanstorp","stenungsund","stockholm","storfors","storuman","strängnäs","strömstad","strömsund","sundbyberg","sundsvall","sunne","surahammar","svalöv","svedala","svenljunga","säffle","säter","sävsjö","söderhamns","söderköping","södertälje","sölvesborg","tanum","tibro","tidaholm","tierp","timrå","tingsryd","tjörn","tomelilla","torsby","torså","tranemo","tranå","trelleborg","trollhättan","trosa","tyresö","täby","töreboda","uddevalla","ulricehamns","umeå","upplands väsby","upplands-bro","uppsala","uppvidinge","vadstena","vaggeryd","valdemarsvik","vallentuna","vansbro","vara","varberg","vaxholm","vellinge","vetlanda","vilhelmina","vimmerby","vindeln","vingåker","vårgårda","vänersborg","vännäs","värmdö","värnamo","västervik","västerås","växjö","ydre","ystad","åmål","ånge","åre","årjäng","åsele","åstorp","åtvidaberg","älmhult","älvdalen","älvkarleby","älvsbyn","ängelholm","öckerö","ödeshög","örebro","örkelljunga","örnsköldsvik","östersund","österåker","östhammar","östra göinge","överkalix","övertorneå"]}),a.formUtils.addValidator({name:"swephone",validatorFunction:function(a){var b=a.match(/\+/g),c=a.match(/-/g);return null!==b&&b.length>1||null!==c&&c.length>1?!1:null!==b&&0!==a.indexOf("+")?!1:(a=a.replace(/([-|\+])/g,""),a.length>8&&null===a.match(/[^0-9]/g))},errorMessage:"",errorMessageKey:"badTelephone"}),a.formUtils.addValidator({name:"swemobile",validatorFunction:function(b){if(!a.formUtils.validators.validate_swephone.validatorFunction(b))return!1;b=b.replace(/[^0-9]/g,"");var c=b.substring(0,3);return 10!==b.length&&"467"!==c?!1:11!==b.length&&"467"===c?!1:/07[0-9{1}]/.test(c)||"467"===c},errorMessage:"",errorMessageKey:"badTelephone"});var c=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestSwedishCounty=function(b){var d=c(a.formUtils.validators.validate_swecounty.counties);return a.formUtils.suggest(this,d,b)},a.fn.suggestSwedishMunicipality=function(b){var d=c(a.formUtils.validators.validate_swemunicipality.municipalities);return a.formUtils.suggest(this,d,b)}}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){a.formUtils.addValidator({name:"swesec",validatorFunction:function(c,d){var e,f,g,h;if(d.valAttr("use-hyphen")){if(h=c.split("-"),2!==h.length)return!1;c=h.join("")}if(!c.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/))return!1;e=RegExp.$1,f=a.formUtils.parseDateInt(RegExp.$2),g=a.formUtils.parseDateInt(RegExp.$3),b.ssnGender=parseInt(RegExp.$4.substring(2,3))%2===0?"female":"male";var i=[31,28,31,30,31,30,31,31,30,31,30,31];if((e%400===0||e%4===0&&e%100!==0)&&(i[1]=29),1>f||f>12||1>g||g>i[f-1])return!1;c=c.substring(2,c.length);for(var j="",k=0;k-1:!1:!0},errorMessage:"",errorMessageKey:"badCustomVal",counties:["stockholms län","uppsala län","södermanlands län","östergötlands län","jönköpings län","kronobergs län","kalmar län","gotlands län","blekinge län","skåne län","hallands län","västra götalands län","värmlands län","örebro län","västmanlands län","dalarnas län","gävleborgs län","västernorrlands län","jämtlands län","västerbottens län","norrbottens län"]}),a.formUtils.addValidator({name:"swemunicipality",validatorFunction:function(b){return b=b.toLowerCase(),-1===a.inArray(b,this.municipalities)?"s kommun"===b.substr(-8)&&a.inArray(b.substr(0,b.length-8),this.municipalities)>-1?!0:" kommun"===b.substr(-7)?a.inArray(b.substr(0,b.length-7),this.municipalities)>-1:!1:!0},errorMessage:"",errorMessageKey:"badCustomVal",municipalities:["ale","alingsås","alvesta","aneby","arboga","arjeplog","arvidsjaur","arvika","askersund","avesta","bengtsfors","berg","bjurholm","bjuv","boden","bollebygd","bollnäs","borgholm","borlänge","borås","botkyrka","boxholm","bromölla","bräcke","burlöv","båstad","dals-ed","danderyd","degerfors","dorotea","eda","ekerö","eksjö","emmaboda","enköpings","eskilstuna","eslövs","essunga","fagersta","falkenberg","falköping","falu","filipstad","finspång","flen","forshaga","färgelanda","gagnef","gislaved","gnesta","gnosjö","gotland","grum","grästorp","gullspång","gällivare","gävle","göteborg","götene","habo","hagfor","hallsberg","hallstahammar","halmstad","hammarö","haninge","haparanda","heby","hedemora","helsingborg","herrljunga","hjo","hofor","huddinge","hudiksvall","hultsfred","hylte","håbo","hällefor","härjedalen","härnösand","härryda","hässleholm","höganäs","högsby","hörby","höör","jokkmokk","järfälla","jönköping","kalix","kalmar","karlsborg","karlshamn","karlskoga","karlskrona","karlstad","katrineholm","kil","kinda","kiruna","klippan","knivsta","kramfors","kristianstad","kristinehamn","krokoms","kumla","kungsbacka","kungsör","kungälv","kävlinge","köping","laholm","landskrona","laxå","lekeberg","leksand","lerum","lessebo","lidingö","lidköping","lilla edets","lindesbergs","linköpings","ljungby","ljusdals","ljusnarsbergs","lomma","ludvika","luleå","lunds","lycksele","lysekil","malmö","malung-sälen","malå","mariestad","marks","markaryd","mellerud","mjölby","mora","motala","mullsjö","munkedal","munkfors","mölndal","mönsterås","mörbylånga","nacka","nora","norberg","nordanstig","nordmaling","norrköping","norrtälje","norsjö","nybro","nykvarn","nyköping","nynäshamn","nässjö","ockelbo","olofström","orsa","orust","osby","oskarshamn","ovanåker","oxelösund","pajala","partille","perstorp","piteå","ragunda","robertsfors","ronneby","rättvik","sala","salem","sandviken","sigtuna","simrishamn","sjöbo","skara","skellefteå","skinnskatteberg","skurup","skövde","smedjebacken","sollefteå","sollentuna","solna","sorsele","sotenäs","staffanstorp","stenungsund","stockholm","storfors","storuman","strängnäs","strömstad","strömsund","sundbyberg","sundsvall","sunne","surahammar","svalöv","svedala","svenljunga","säffle","säter","sävsjö","söderhamns","söderköping","södertälje","sölvesborg","tanum","tibro","tidaholm","tierp","timrå","tingsryd","tjörn","tomelilla","torsby","torså","tranemo","tranå","trelleborg","trollhättan","trosa","tyresö","täby","töreboda","uddevalla","ulricehamns","umeå","upplands väsby","upplands-bro","uppsala","uppvidinge","vadstena","vaggeryd","valdemarsvik","vallentuna","vansbro","vara","varberg","vaxholm","vellinge","vetlanda","vilhelmina","vimmerby","vindeln","vingåker","vårgårda","vänersborg","vännäs","värmdö","värnamo","västervik","västerås","växjö","ydre","ystad","åmål","ånge","åre","årjäng","åsele","åstorp","åtvidaberg","älmhult","älvdalen","älvkarleby","älvsbyn","ängelholm","öckerö","ödeshög","örebro","örkelljunga","örnsköldsvik","östersund","österåker","östhammar","östra göinge","överkalix","övertorneå"]}),a.formUtils.addValidator({name:"swephone",validatorFunction:function(a){var b=a.match(/\+/g),c=a.match(/-/g);return null!==b&&b.length>1||null!==c&&c.length>1?!1:null!==b&&0!==a.indexOf("+")?!1:(a=a.replace(/([-|\+])/g,""),a.length>8&&null===a.match(/[^0-9]/g))},errorMessage:"",errorMessageKey:"badTelephone"}),a.formUtils.addValidator({name:"swemobile",validatorFunction:function(b){if(!a.formUtils.validators.validate_swephone.validatorFunction(b))return!1;b=b.replace(/[^0-9]/g,"");var c=b.substring(0,3);return 10!==b.length&&"467"!==c?!1:11!==b.length&&"467"===c?!1:/07[0-9{1}]/.test(c)||"467"===c},errorMessage:"",errorMessageKey:"badTelephone"});var c=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestSwedishCounty=function(b){var d=c(a.formUtils.validators.validate_swecounty.counties);return a.formUtils.suggest(this,d,b)},a.fn.suggestSwedishMunicipality=function(b){var d=c(a.formUtils.validators.validate_swemunicipality.municipalities);return a.formUtils.suggest(this,d,b)}}(a,window)}); \ No newline at end of file diff --git a/form-validator/theme-default.css b/form-validator/theme-default.css index f23e965..b2fe281 100644 --- a/form-validator/theme-default.css +++ b/form-validator/theme-default.css @@ -1,11 +1,3 @@ -/** File generated by Grunt -- do not modify - * JQUERY-FORM-VALIDATOR - * - * @version 2.2.189 - * @website http://formvalidator.net/ - * @author Victor Jonsson, http://victorjonsson.se - * @license MIT - */ /** * Default CSS theme for jQuery-Form-Validator. * @author Victor Jonsson diff --git a/form-validator/toggleDisabled.js b/form-validator/toggleDisabled.js index d6b167f..9bad59c 100644 --- a/form-validator/toggleDisabled.js +++ b/form-validator/toggleDisabled.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(a,b,c){"use strict";var d=function(a,b){"disabled"===b?a.find('*[type="submit"]').addClass("disabled").attr("disabled","disabled"):a.find('*[type="submit"]').removeClass("disabled").removeAttr("disabled")},e=!1;a(b).bind("validatorsLoaded formValidationSetup",function(b,f,g){var h=g.disabledFormFilter?f.filter(g.disabledFormFilter):f,i=g.showErrorDialogs===c||g.showErrorDialogs;h.addClass(i?"disabled-with-errors":"disabled-without-errors").find("*[data-validation]").attr("data-validation-event","keyup change").on("validation",function(b,c){if(!e){e=!0;var f=a(this).closest("form");c&&f.isValid(g,g.language,!1)?d(f,"enabled"):d(f,"disabled"),e=!1}}),d(h,"disabled"),h.validateOnEvent(g.language,g)}).on("validationErrorDisplay",function(a,b,c){b.closest("form").hasClass("disabled-without-errors")&&c.hide()})}(jQuery,window); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b,c){"use strict";var d=function(a,b){"disabled"===b?a.find('*[type="submit"]').addClass("disabled").attr("disabled","disabled"):a.find('*[type="submit"]').removeClass("disabled").removeAttr("disabled")},e=!1;a(b).bind("validatorsLoaded formValidationSetup",function(b,f,g){var h=g.disabledFormFilter?f.filter(g.disabledFormFilter):f,i=g.showErrorDialogs===c||g.showErrorDialogs;h.addClass(i?"disabled-with-errors":"disabled-without-errors").find("*[data-validation]").attr("data-validation-event","keyup change").on("validation",function(b,c){if(!e){e=!0;var f=a(this).closest("form");c&&f.isValid(g,g.language,!1)?d(f,"enabled"):d(f,"disabled"),e=!1}}),d(h,"disabled"),h.validateOnEvent(g.language,g)}).on("validationErrorDisplay",function(a,b,c){b.closest("form").hasClass("disabled-without-errors")&&c.hide()})}(a,window)}); \ No newline at end of file diff --git a/form-validator/uk.js b/form-validator/uk.js index dde6ae3..b3ef02e 100644 --- a/form-validator/uk.js +++ b/form-validator/uk.js @@ -1,9 +1,9 @@ /** File generated by Grunt -- do not modify * JQUERY-FORM-VALIDATOR * - * @version 2.2.189 + * @version 2.2.190 * @website http://formvalidator.net/ * @author Victor Jonsson, http://victorjonsson.se * @license MIT */ -!function(r){"use strict";r.formUtils.addValidator({name:"ukvatnumber",validatorFunction:function(r){if(r=r.replace(/[^0-9]/g,""),r.length<9)return!1;var e=!1,a=[];a=r.split("");var t=+(a[7]+a[8]),n=a[0],o=a[1];if(0===n&&o>0)return!1;for(var i=0,s=0;7>s;s++)i+=a[s]*(8-s);for(var u=0,d=0,f=8;f>=2;f--)u+=a[d]*f,d++;for(;i>0;)i-=97;return i=Math.abs(i),t===i&&(e=!0),e||(i%=97,55>i?i+=42:i-=55,i===t&&(e=!0)),e},errorMessage:"",errorMessageKey:"badUKVatAnswer"}),r.formUtils.addValidator({name:"ukutr",validatorFunction:function(r){var e=[0,6,7,8,9,10,5,4,3,2,0],a=[2,1,9,8,7,6,5,4,3,2,1],t=0,n=r+"K";if(/\d{10}K/.test(n)){for(var o=0;10>o;o++)t+=n[o]*e[o];if(n.charAt(0)===a[t%11])return!0}return!1},errorMessage:"",errorMessageKey:"badUkUtrNumber"}),r.formUtils.addValidator({name:"uknin",validatorFunction:function(r){return/^(?!BG)(?!GB)(?!NK)(?!KN)(?!TN)(?!NT)(?!ZZ)(?:[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z])(?:\s*\d\s*){6}([A-D]|\s)$/i.test(r)?!0:!1},errorMessage:"",errorMessageKey:"badUkNinNumber"})}(jQuery); \ No newline at end of file +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";a.formUtils.addValidator({name:"ukvatnumber",validatorFunction:function(a){if(a=a.replace(/[^0-9]/g,""),a.length<9)return!1;var b=!1,c=[];c=a.split("");var d=Number(c[7]+c[8]),e=c[0],f=c[1];if(0===e&&f>0)return!1;for(var g=0,h=0;7>h;h++)g+=c[h]*(8-h);for(var i=0,j=0,k=8;k>=2;k--)i+=c[j]*k,j++;for(;g>0;)g-=97;return g=Math.abs(g),d===g&&(b=!0),b||(g%=97,g>=55?g-=55:g+=42,g===d&&(b=!0)),b},errorMessage:"",errorMessageKey:"badUKVatAnswer"}),a.formUtils.addValidator({name:"ukutr",validatorFunction:function(a){var b=[0,6,7,8,9,10,5,4,3,2,0],c=[2,1,9,8,7,6,5,4,3,2,1],d=0,e=a+"K";if(/\d{10}K/.test(e)){for(var f=0;10>f;f++)d+=e[f]*b[f];if(e.charAt(0)===c[d%11])return!0}return!1},errorMessage:"",errorMessageKey:"badUkUtr"}),a.formUtils.addValidator({name:"uknin",validatorFunction:function(a){return/^(?!BG)(?!GB)(?!NK)(?!KN)(?!TN)(?!NT)(?!ZZ)(?:[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z])(?:\s*\d\s*){6}([A-D]|\s)$/i.test(a)?!0:!1},errorMessage:"",errorMessageKey:"badUkNin"})}(a)}); \ No newline at end of file diff --git a/formvalidator.jquery.json b/formvalidator.jquery.json index 5c11090..48c2a68 100644 --- a/formvalidator.jquery.json +++ b/formvalidator.jquery.json @@ -7,7 +7,7 @@ "validation", "validator" ], - "version": "2.2.189", + "version": "2.2.190", "author": { "name": "Victor Jonsson", "url": "http://victorjonsson.se", diff --git a/package.json b/package.json index df44e6c..1b6537f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jquery-form-validator", "description": "With this feature rich jQuery plugin it becomes easy to validate user input while keeping your HTML markup clean from javascript code. Even though this plugin has a wide range of validation functions it's designed to require as little bandwidth as possible. This is achieved by grouping together validation functions in \"modules\", making it possible for the programmer to load only those functions that's needed to validate a particular form.", - "version": "2.2.189", + "version": "2.2.190", "main": "./form-validator/jquery.form-validator.min.js", "keywords": [ "form", @@ -28,6 +28,7 @@ "grunt-contrib-clean": "~1.0.0", "grunt-contrib-concat": "^0.5.1", "grunt-contrib-connect": "^0.11.2", + "grunt-contrib-copy": "~1.0.0", "grunt-contrib-cssmin": "~0.14.0", "grunt-contrib-jshint": "~1.0.0", "grunt-contrib-qunit": "^0.7.0", diff --git a/src/modules/security.js b/src/modules/security.js index 9cb79fa..ea8aea1 100644 --- a/src/modules/security.js +++ b/src/modules/security.js @@ -33,33 +33,36 @@ }); /* - * Validate confirmation + * Validate confirmation (tests that two inputs are identical; usually used for + * passwords) */ $.formUtils.addValidator({ name : 'confirmation', validatorFunction : function(value, $el, config, language, $form) { - var conf = '', - confInputName = $el.valAttr('confirm') || ($el.attr('name') + '_confirmation'), - $confInput = $form.find('[name="' +confInputName+ '"]').eq(0); - - if ( $confInput ) { - conf = $confInput.val(); - if( config.validateOnBlur && !$confInput[0].hasValidationCallback ) { - $confInput[0].hasValidationCallback = true; - var keyUpCallback = function() { - $el.validate(); - }; - $confInput.on('keyup', keyUpCallback); - $form.one('formValidationSetup', function() { - $confInput[0].hasValidationCallback = false; - $confInput.off('keyup', keyUpCallback); - }); - } - } else { - alert('Could not find an input with name "'+confInputName+'"'); + var password, + passwordInputName = $el.valAttr('confirm') || + ($el.attr('name') + '_confirmation'), + $passwordInput = $form.find('[name="' +passwordInputName+ '"]'); + if (!$passwordInput.length) { + $.formUtils.warn('Password confirmation validator: could not find an input ' + + 'with name "'+passwordInputName+'"'); + return false; + } + + password = $passwordInput.val(); + if( config.validateOnBlur && !$passwordInput[0].hasValidationCallback ) { + $passwordInput[0].hasValidationCallback = true; + var keyUpCallback = function() { + $el.validate(); + }; + $passwordInput.on('keyup', keyUpCallback); + $form.one('formValidationSetup', function() { + $passwordInput[0].hasValidationCallback = false; + $passwordInput.off('keyup', keyUpCallback); + }); } - return value === conf; + return value === password; }, errorMessage : '', errorMessageKey: 'notConfirmed' diff --git a/test/form.html b/test/form.html index 966b7c9..a85f020 100644 --- a/test/form.html +++ b/test/form.html @@ -233,17 +233,19 @@
    +

    Validate on submit

    - +
    - +