fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [15823] validator: update from upstream


From: sigurdne
Subject: [Fmsystem-commits] [15823] validator: update from upstream
Date: Thu, 13 Oct 2016 13:04:59 +0000 (UTC)

Revision: 15823
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=15823
Author:   sigurdne
Date:     2016-10-13 13:04:59 +0000 (Thu, 13 Oct 2016)
Log Message:
-----------
validator: update from upstream

Modified Paths:
--------------
    trunk/phpgwapi/js/jquery/validator/brazil.js
    trunk/phpgwapi/js/jquery/validator/date.js
    trunk/phpgwapi/js/jquery/validator/file.js
    trunk/phpgwapi/js/jquery/validator/html5.js
    trunk/phpgwapi/js/jquery/validator/jquery.form-validator.js
    trunk/phpgwapi/js/jquery/validator/jquery.form-validator.min.js
    trunk/phpgwapi/js/jquery/validator/jsconf.js
    trunk/phpgwapi/js/jquery/validator/lang/de.js
    trunk/phpgwapi/js/jquery/validator/lang/es.js
    trunk/phpgwapi/js/jquery/validator/lang/fr.js
    trunk/phpgwapi/js/jquery/validator/lang/it.js
    trunk/phpgwapi/js/jquery/validator/lang/no.js
    trunk/phpgwapi/js/jquery/validator/lang/pl.js
    trunk/phpgwapi/js/jquery/validator/lang/pt.js
    trunk/phpgwapi/js/jquery/validator/lang/ro.js
    trunk/phpgwapi/js/jquery/validator/lang/ru.js
    trunk/phpgwapi/js/jquery/validator/lang/sv.js
    trunk/phpgwapi/js/jquery/validator/location.js
    trunk/phpgwapi/js/jquery/validator/sanitize.js
    trunk/phpgwapi/js/jquery/validator/security.js
    trunk/phpgwapi/js/jquery/validator/sweden.js
    trunk/phpgwapi/js/jquery/validator/theme-default.css
    trunk/phpgwapi/js/jquery/validator/toggleDisabled.js
    trunk/phpgwapi/js/jquery/validator/uk.js

Added Paths:
-----------
    trunk/phpgwapi/js/jquery/validator/lang/ca.js
    trunk/phpgwapi/js/jquery/validator/lang/cs.js
    trunk/phpgwapi/js/jquery/validator/lang/da.js
    trunk/phpgwapi/js/jquery/validator/lang/nl.js
    trunk/phpgwapi/js/jquery/validator/lang/vi.js
    trunk/phpgwapi/js/jquery/validator/logic.js
    trunk/phpgwapi/js/jquery/validator/poland.js
    trunk/phpgwapi/js/jquery/validator/sepa.js
    trunk/phpgwapi/js/jquery/validator/theme-default.min.css

Modified: trunk/phpgwapi/js/jquery/validator/brazil.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/brazil.js        2016-10-13 12:36:01 UTC 
(rev 15822)
+++ trunk/phpgwapi/js/jquery/validator/brazil.js        2016-10-13 13:04:59 UTC 
(rev 15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-$.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))},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)},errorMessage:"",errorMessageKey:"badBrazilTelephoneAnswer"}),$.formUtils.addValidator({name:"cep",validatorFunction:function(a){return!!a.match(/^(\d){5}([-.
 ]){0,1}(\d){3}$/g)},errorMessage:"",errorMessageKey:"badBrazilCEPAnswer"})});
\ No newline at end of file

Modified: trunk/phpgwapi/js/jquery/validator/date.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/date.js  2016-10-13 12:36:01 UTC (rev 
15822)
+++ trunk/phpgwapi/js/jquery/validator/date.js  2016-10-13 13:04:59 UTC (rev 
15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-!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)},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 k<=m}return j<l}return 
i<h&&i>h-124},errorMessage:"",errorMessageKey:"badDate"})}(a)});
\ No newline at end of file

Modified: trunk/phpgwapi/js/jquery/validator/file.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/file.js  2016-10-13 12:36:01 UTC (rev 
15822)
+++ trunk/phpgwapi/js/jquery/validator/file.js  2016-10-13 13:04:59 UTC (rev 
15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-!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.width<e.width||a.height<e.height)&&(d=c.imageTooSmall+"
 ("+c.min+" 
"+e.width+"x"+e.height+"px)")),!d&&h&&(f(h),(a.width>e.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&&a.inArray("jpeg",c)===-1?c.push("jpeg"):a.inArray("jpeg",c)>-1&&a.inArray("jpg",c)===-1&&c.push("jpg"),c},e=function(a,b,c,d){var
 
e=d[b]||"";a.errorMessageKey="",a.errorMessage=e.replace("%s",c)},f=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,f,g,h){if(c){var
 i=!0,j=f.get(0).files||[],k="",l=d(f);return 
j.length&&(a.each(j,function(b,c){return 
i=!1,k=c.type||"",a.each(l,function(a,b){if(i=k.indexOf(b)>-1)return!1}),i}),i||(a.formUtils.warn("Trying
 to upload a file with mime type "+k+" which is not 
allowed"),e(this,"wrongFileType",l.join(", "),h))),i}return 
a.formUtils.warn("FileReader not supported by browser, will check file 
extension"),a.formUtils.validators.validate_extension.validatorFunction(b,f,g,h)},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);if(a.inArray(f.toLowerCase(),j)===-1)return
 h=!1,e(i,"wrongFileType",j.join(", 
"),g),!1}),h},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"size",validatorFunction:function(b,d,f,g){var
 h=d.valAttr("max-size");if(!h)return a.formUtils.warn('Input 
"'+d.attr("name")+'" is missing data-validation-max-size 
attribute'),!0;if(!c)return!0;var 
i=a.formUtils.convertSizeNameToBytes(h),j=!0;return 
a.each(d.get(0).files||[],function(a,b){return 
j=b.size<=i}),j||e(this,"wrongFileSize",h,g),j},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)},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.width<e.width||a.height<e.height)&&(d=c.imageTooSmall+"
 ("+c.min+" 
"+e.width+"x"+e.height+"px)")),!d&&h&&(f(h),(a.width>e.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&&a<=c};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,g,h,i){if(c){var
 j=this,k=a.formUtils.asyncValidation(this.name,d,h);return 
k.run(i,function(b){var 
c=d.get(0).files||[];d.attr("data-validation").indexOf("mime")===-1?(alert("You 
should validate file type being jpg, gif or png on input 
"+d[0].name),b(!1)):c.length>1?(alert("Validating image dimensions does not 
support inputs allowing multiple 
files"),b(!1)):0===c.length?b(!0):f(c[0],function(c){var 
e=!1;d.valAttr("dimension")&&(e=a.formUtils.checkImageDimension(c,d.valAttr("dimension"),g)),!e&&d.valAttr("ratio")&&(e=a.formUtils.checkImageRatio(c,d.valAttr("ratio"),g)),e?(j.errorMessage=g.wrongFileDim+"
 "+d.valAttr("has-not-valid-dim"),b(!1)):b(!0)},function(a){throw 
a})})}return!0},errorMessage:"",errorMessageKey:""}),a(b).one("validatorsLoaded 
formValidationSetup",function(b,c,d){var 
e;e=c?c.find('input[type="file"]'):a('input[type="file"]'),a.formUtils.dialogs.removeInputStylingAndMessage(e,d)})}(a,window)});
\ No newline at end of file

Modified: trunk/phpgwapi/js/jquery/validator/html5.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/html5.js 2016-10-13 12:36:01 UTC (rev 
15822)
+++ trunk/phpgwapi/js/jquery/validator/html5.js 2016-10-13 13:04:59 UTC (rev 
15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-!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)}f&&0===b.length&&b.push("required"),b.length&&(f||(h["data-validation-optional"]="true"),g=!0,c.attr("data-validation",b.join("
 
")),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){"use
 strict";var b="placeholder"in document.createElement("INPUT"),c="options"in 
document.createElement("DATALIST"),d=!1,e=function(e){e.each(function(){var 
e=a(this),f=e.find("input,textarea,select"),g=!1;f.each(function(){var 
b=[],e=a(this),f=e.attr("required"),h={};switch(f&&b.push("required"),(e.attr("type")||"").toLowerCase()){case"time":b.push("time"),a.formUtils.validators.validate_date||d||(d=!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=e.attr("max"),j=e.attr("min"),k=e.attr("step");j||i?(j||(j="0"),i||(i="9007199254740992"),k||(k="1"),h["data-validation-allowing"]="range["+j+";"+i+"]",0!==j.indexOf("-")&&0!==i.indexOf("-")||(h["data-validation-allowing"]+=",negative"),(j.indexOf(".")>-1||i.indexOf(".")>-1||k.indexOf(".")>-1)&&(h["data-validation-allowing"]+=",float")):h["data-validation-allowing"]+=",float,negative"}if(e.attr("pattern")&&(b.push("custom"),h["data-validation-regexp"]=e.attr("pattern")),e.attr("maxlength")&&(b.push("length"),h["data-validation-length"]="max"+e.attr("maxlength")),!c&&e.attr("list")){var
 
l=[],m=a("#"+e.attr("list"));if(m.find("option").each(function(){l.push(a(this).text())}),0===l.length){var
 
n=a.trim(a("#"+e.attr("list")).text()).split("\n");a.each(n,function(b,c){l.push(a.trim(c))})}m.remove(),a.formUtils.suggest(e,l)}if(b.length){f||(h["data-validation-optional"]="true"),g=!0;var
 o=(e.attr("data-validation")||"")+" "+b.join(" 
");e.attr("data-validation",a.trim(o)),a.each(h,function(a,b){e.attr(a,b)})}}),g&&e.trigger("html5ValidationAttrsFound"),b||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.formUtils.$win.bind("validatorsLoaded
 
formValidationSetup",function(b,c){c||(c=a("form")),e(c)}),a.formUtils.setupValidationUsingHTML5Attr=e}(a,window)});
\ No newline at end of file

Modified: trunk/phpgwapi/js/jquery/validator/jquery.form-validator.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/jquery.form-validator.js 2016-10-13 
12:36:01 UTC (rev 15822)
+++ trunk/phpgwapi/js/jquery/validator/jquery.form-validator.js 2016-10-13 
13:04:59 UTC (rev 15823)
@@ -1,23 +1,290 @@
-/**
- * jQuery Form Validator
- * ------------------------------------------
- * Created by Victor Jonsson <http://www.victorjonsson.se>
+(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
  *
- * @website http://formvalidator.net/
- * @license MIT
- * @version 2.2.83
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
+ *  @license MIT
  */
+/**
+ */
+(function ($, undefined) {
+
+  var disableFormSubmit = function () {
+      return false;
+    },
+    HaltManager = {
+      numHalted: 0,
+      haltValidation: function($form) {
+        this.numHalted++;
+        $.formUtils.haltValidation = true;
+        $form
+          .unbind('submit', disableFormSubmit)
+          .bind('submit', disableFormSubmit)
+          .find('*[type="submit"]')
+            .addClass('disabled')
+            .attr('disabled', 'disabled');
+      },
+      unHaltValidation: function($form) {
+        this.numHalted--;
+        if (this.numHalted === 0) {
+          $.formUtils.haltValidation = false;
+          $form
+            .unbind('submit', disableFormSubmit)
+            .find('*[type="submit"]')
+              .removeClass('disabled')
+              .removeAttr('disabled', 'disabled');
+        }
+      }
+    };
+
+  function AsyncValidation($form, $input) {
+    this.$form = $form;
+    this.$input = $input;
+    this.reset();
+    $input.on('change paste', this.reset.bind(this));
+  }
+
+  AsyncValidation.prototype.reset = function() {
+    this.haltedFormValidation = false;
+    this.hasRun = false;
+    this.isRunning = false;
+    this.result = undefined;
+  };
+
+  AsyncValidation.prototype.run = function(eventContext, callback) {
+    if (eventContext === 'keyup') {
+      return null;
+    } else if (this.isRunning) {
+      if (!this.haltedFormValidation && eventContext === 'submit') {
+        HaltManager.haltValidation();
+        this.haltedFormValidation = true;
+      }
+      return null; // Waiting for result
+    } else if(this.hasRun) {
+      //this.$input.one('keyup change paste', this.reset.bind(this));
+      return this.result;
+    } else {
+      if (eventContext === 'submit') {
+        HaltManager.haltValidation(this.$form);
+        this.haltedFormValidation = true;
+      }
+      this.isRunning = true;
+      this.$input
+        .attr('disabled', 'disabled')
+        .addClass('async-validation');
+      this.$form.addClass('async-validation');
+
+      callback(function(result) {
+        this.done(result);
+      }.bind(this));
+
+      return null;
+    }
+  };
+
+  AsyncValidation.prototype.done = function(result) {
+    this.result = result;
+    this.hasRun = true;
+    this.isRunning = false;
+    this.$input
+      .removeAttr('disabled')
+      .removeClass('async-validation');
+    this.$form.removeClass('async-validation');
+    if (this.haltedFormValidation) {
+      HaltManager.unHaltValidation(this.$form);
+      this.$form.trigger('submit');
+    } else {
+      this.$input.trigger('validation.revalidate');
+    }
+  };
+
+  $.formUtils = $.extend($.formUtils || {}, {
+    asyncValidation: function(validatorName, $input, $form) {
+      // Return async validator attached to this input element
+      // or create a new async validator and attach it to the input
+      var asyncValidation,
+        input = $input.get(0);
+
+      if (!input.asyncValidators) {
+        input.asyncValidators = {};
+      }
+
+      if (input.asyncValidators[validatorName]) {
+        asyncValidation = input.asyncValidators[validatorName];
+      } else {
+        asyncValidation = new AsyncValidation($form, $input);
+        input.asyncValidators[validatorName] = asyncValidation;
+      }
+
+      return asyncValidation;
+    }
+  });
+
+})(jQuery);
+
+/**
+ * Deprecated functions and attributes
+ * @todo: Remove in release of 3.0
+ */
+(function ($, undefined) {
+
+  'use strict';
+
+  /**
+   * @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);
+  };
+
+  $(window)
+    .on('formValidationPluginInit', function(evt, config) {
+      convertDeprecatedLangCodeToISO6391(config);
+      addSupportForCustomErrorMessageCallback(config);
+      addSupportForElementReferenceInPositionParam(config);
+    })
+    .on('validatorsLoaded formValidationSetup', function(evt, $form) {
+      if( !$form ) {
+        $form = $('form');
+      }
+      addSupportForValidationDependingOnCheckedInput($form);
+    });
+
+
+  function addSupportForCustomErrorMessageCallback(config) {
+    if (config &&
+        config.errorMessagePosition === 'custom' &&
+        typeof config.errorMessageCustom === 'function') {
+
+      $.formUtils.warn('Use of deprecated function errorMessageCustom, use 
config.submitErrorMessageCallback instead');
+
+      config.submitErrorMessageCallback = function($form, errorMessages) {
+        config.errorMessageCustom(
+            $form,
+            config.language.errorTitle,
+            errorMessages,
+            config
+        );
+      };
+    }
+  }
+
+  function addSupportForElementReferenceInPositionParam(config) {
+    if (config.errorMessagePosition && typeof config.errorMessagePosition === 
'object') {
+      $.formUtils.warn('Deprecated use of config parameter 
errorMessagePosition, use config.submitErrorMessageCallback instead');
+      var $errorMessageContainer = config.errorMessagePosition;
+      config.errorMessagePosition = 'top';
+      config.submitErrorMessageCallback = function() {
+        return $errorMessageContainer;
+      };
+    }
+  }
+
+  function addSupportForValidationDependingOnCheckedInput($form) {
+    var $inputsDependingOnCheckedInputs = 
$form.find('[data-validation-if-checked]');
+    if ($inputsDependingOnCheckedInputs.length) {
+      $.formUtils.warn(
+        'Detected use of attribute "data-validation-if-checked" which is '+
+        'deprecated. Use "data-validation-depends-on" provided by module 
"logic"'
+      );
+    }
+
+    $inputsDependingOnCheckedInputs
+      .on('beforeValidation', function() {
+
+        var $elem = $(this),
+          nameOfDependingInput = $elem.valAttr('if-checked');
+
+        // Set the boolean telling us that the validation depends
+        // on another input being checked
+        var $dependingInput = $('input[name="' + nameOfDependingInput + '"]', 
$form),
+          dependingInputIsChecked = $dependingInput.is(':checked'),
+          valueOfDependingInput = ($.formUtils.getValue($dependingInput) || 
'').toString(),
+          requiredValueOfDependingInput = $elem.valAttr('if-checked-value');
+
+        if (!dependingInputIsChecked || !(
+              !requiredValueOfDependingInput ||
+              requiredValueOfDependingInput === valueOfDependingInput
+          )) {
+          $elem.valAttr('skipped', true);
+        }
+
+      });
+    }
+
+    function convertDeprecatedLangCodeToISO6391(config) {
+      var deprecatedLangCodes = {
+        se: 'sv',
+        cz: 'cs',
+        dk: 'da'
+      };
+
+      if (config.lang in deprecatedLangCodes) {
+        var newLangCode = deprecatedLangCodes[config.lang];
+        $.formUtils.warn(
+          'Deprecated use of lang code "'+config.lang+'" use "'+newLangCode+'" 
instead'
+        );
+        config.lang = newLangCode;
+      }
+    }
+
+})(jQuery);
+
+/**
+ * Utility methods used for displaying error messages (attached to $.formUtils)
+ */
 (function ($) {
 
   'use strict';
 
-  var $window = $(window),
-    _getInputParentContainer = function ($elem) {
+  var dialogs = {
+
+    resolveErrorMessage: function($elem, validator, validatorName, conf, 
language) {
+      var errorMsgAttr = conf.validationErrorMsgAttribute + '-' + 
validatorName.replace('validate_', ''),
+        validationErrorMsg = $elem.attr(errorMsgAttr);
+
+      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 validationErrorMsg;
+    },
+    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') ) {
+        if (!$parent.hasClass('form-group') && 
!$parent.closest('form').hasClass('form-horizontal')) {
           var $formGroup = $parent.closest('.form-group');
           if ($formGroup.length) {
             return $formGroup.eq(0);
@@ -26,97 +293,177 @@
         return $parent;
       }
     },
-    _applyErrorStyle = function ($elem, conf) {
-      $elem
+    applyInputErrorStyling: function ($input, conf) {
+      $input
         .addClass(conf.errorElementClass)
         .removeClass('valid');
 
-      _getInputParentContainer($elem)
+      this.getParentContainer($input)
         .addClass(conf.inputParentClassOnError)
         .removeClass(conf.inputParentClassOnSuccess);
 
       if (conf.borderColorOnError !== '') {
-        $elem.css('border-color', conf.borderColorOnError);
+        $input.css('border-color', conf.borderColorOnError);
       }
     },
-    _removeErrorStyle = function ($elem, conf) {
-      $elem.each(function () {
-        var $this = $(this);
+    applyInputSuccessStyling: function($input, conf) {
+      $input.addClass('valid');
+      this.getParentContainer($input)
+        .addClass(conf.inputParentClassOnSuccess);
+    },
+    removeInputStylingAndMessage: function($input, conf) {
 
-        _setInlineErrorMessage($this, '', conf, conf.errorMessagePosition);
+      // Reset input css
+      $input
+        .removeClass('valid')
+        .removeClass(conf.errorElementClass)
+        .css('border-color', '');
 
-        $this
-          .removeClass('valid')
-          .removeClass(conf.errorElementClass)
-          .css('border-color', '');
+      var $parentContainer = dialogs.getParentContainer($input);
 
-        _getInputParentContainer($this)
-          .removeClass(conf.inputParentClassOnError)
-          .removeClass(conf.inputParentClassOnSuccess)
-          .find('.' + conf.errorMessageClass) // remove inline span holding 
error message
-            .remove();
+      // Reset parent css
+      $parentContainer
+        .removeClass(conf.inputParentClassOnError)
+        .removeClass(conf.inputParentClassOnSuccess);
+
+      // Remove possible error message
+      if (typeof conf.inlineErrorMessageCallback === 'function') {
+        var $errorMessage = conf.inlineErrorMessageCallback($input, false, 
conf);
+        if ($errorMessage) {
+          $errorMessage.html('');
+        }
+      } else {
+        $parentContainer
+          .find('.' + conf.errorMessageClass)
+          .remove();
+      }
+
+    },
+    removeAllMessagesAndStyling: function($form, conf) {
+
+      // Remove error messages in top of form
+      if (typeof conf.submitErrorMessageCallback === 'function') {
+        var $errorMessagesInTopOfForm = conf.submitErrorMessageCallback($form, 
false, conf);
+        if ($errorMessagesInTopOfForm) {
+          $errorMessagesInTopOfForm.html('');
+        }
+      } else {
+        $form.find('.' + conf.errorMessageClass + '.alert').remove();
+      }
+
+      // Remove input css/messages
+      $form.find('.' + conf.errorElementClass + ',.valid').each(function() {
+        dialogs.removeInputStylingAndMessage($(this), conf);
       });
     },
-    _setInlineErrorMessage = function ($input, mess, conf, $messageContainer) {
+    setInlineMessage: function ($input, errorMsg, conf) {
+
+      this.applyInputErrorStyling($input, conf);
+
       var custom = document.getElementById($input.attr('name') + '_err_msg'),
-          setErrorMessage = function($elem) {
-            $window.trigger('validationErrorDisplay', [$input, $elem]);
-            $elem.html(mess);
-          },
-          $mess = {};
+        $messageContainer = false,
+        setErrorMessage = function ($elem) {
+          $.formUtils.$win.trigger('validationErrorDisplay', [$input, $elem]);
+          $elem.html(errorMsg);
+        },
+        addErrorToMessageContainer = function() {
+          var $found = false;
+          $messageContainer.find('.' + conf.errorMessageClass).each(function 
() {
+            if (this.inputReferer === $input[0]) {
+              $found = $(this);
+              return false;
+            }
+          });
+          if ($found) {
+            if (!errorMsg) {
+              $found.remove();
+            } else {
+              setErrorMessage($found);
+            }
+          } else if(errorMsg !== '') {
+            $message = $('<div class="' + conf.errorMessageClass + ' 
alert"></div>');
+            setErrorMessage($message);
+            $message[0].inputReferer = $input[0];
+            $messageContainer.prepend($message);
+          }
+        },
+        $message;
 
       if (custom) {
-        setErrorMessage($(custom));
-      }
-      else if (typeof $messageContainer === 'object') {
-        var $found = false;
-        $messageContainer.find('.' + conf.errorMessageClass).each(function () {
-          if (this.inputReferer === $input[0]) {
-            $found = $(this);
-            return false;
-          }
-        });
-        if ($found) {
-          if (!mess) {
-            $found.remove();
-          } else {
-            setErrorMessage($found);
-          }
-        } else {
-          $mess = $('<div class="' + conf.errorMessageClass + '"></div>');
-          setErrorMessage($mess);
-          $mess[0].inputReferer = $input[0];
-          $messageContainer.prepend($mess);
+        // Todo: remove in 3.0
+        $.formUtils.warn('Using deprecated element reference ' + custom.id);
+        $messageContainer = $(custom);
+        addErrorToMessageContainer();
+      } else if (typeof conf.inlineErrorMessageCallback === 'function') {
+        $messageContainer = conf.inlineErrorMessageCallback($input, errorMsg, 
conf);
+        if (!$messageContainer) {
+          // Error display taken care of by inlineErrorMessageCallback
+          return;
         }
+        addErrorToMessageContainer();
+      } else {
+        var $parent = this.getParentContainer($input);
+        $message = $parent.find('.' + conf.errorMessageClass + '.help-block');
+        if ($message.length === 0) {
+          $message = 
$('<span></span>').addClass('help-block').addClass(conf.errorMessageClass);
+          $message.appendTo($parent);
+        }
+        setErrorMessage($message);
       }
-      else {
-        var $parent = _getInputParentContainer($input);
-        $mess = $parent.find('.' + conf.errorMessageClass + '.help-block');
+    },
+    setMessageInTopOfForm: function ($form, errorMessages, conf, lang) {
+      var view = '<div class="{errorMessageClass} alert alert-danger">'+
+                    '<strong>{errorTitle}</strong>'+
+                    '<ul>{fields}</ul>'+
+                '</div>',
+          $container = false;
 
-        if ($mess.length === 0) {
-          $mess = 
$('<span></span>').addClass('help-block').addClass(conf.errorMessageClass);
-          $mess.appendTo($parent);
+      if (typeof conf.submitErrorMessageCallback === 'function') {
+        $container = conf.submitErrorMessageCallback($form, errorMessages, 
conf);
+        if (!$container) {
+          // message display taken care of by callback
+          return;
         }
-
-        setErrorMessage($mess);
       }
-    },
-    _templateMessage = function ($form, title, errorMessages, conf) {
-      var messages = 
conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g, title),
-          fields = [],
-          container;
 
+      var viewParams = {
+            errorTitle: lang.errorTitle,
+            fields: '',
+            errorMessageClass: conf.errorMessageClass
+          };
+
       $.each(errorMessages, function (i, msg) {
-        fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g, msg));
+        viewParams.fields += '<li>'+msg+'</li>';
       });
 
-      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);
-    };
+      $.each(viewParams, function(param, value) {
+        view = view.replace('{'+param+'}', value);
+      });
 
+      if ($container) {
+        $container.html(view);
+      } else {
+        $form.children().eq(0).before($(view));
+      }
+    }
+  };
 
+  $.formUtils = $.extend($.formUtils || {}, {
+    dialogs: dialogs
+  });
+
+})(jQuery);
+
+/**
+ * File declaring all methods if this plugin which is applied to $.fn.
+ */
+(function($, window, undefined) {
+
+  'use strict';
+
+  var _helpers = 0;
+
+
   /**
    * Assigns validateInputOnBlur function to elements blur event
    *
@@ -125,10 +472,28 @@
    * @return {jQuery}
    */
   $.fn.validateOnBlur = function (language, conf) {
-    this.find('*[data-validation]')
-      .bind('blur.validation', function () {
-        $(this).validateInputOnBlur(language, conf, true, 'blur');
-      });
+    var $form = this,
+        $elems = this.find('*[data-validation]');
+
+    $elems.each(function(){
+      var $this = $(this);
+      if ($this.is('[type=radio]')){
+        var $additionals = $form.find('[type=radio][name="' + 
$this.attr('name') + '"]');
+        $additionals.bind('blur.validation', function(){
+          $this.validateInputOnBlur(language, conf, true, 'blur');
+        });
+        if (conf.validateCheckboxRadioOnClick) {
+          $additionals.bind('click.validation', function () {
+            $this.validateInputOnBlur(language, conf, true, 'click');
+          });
+        }
+      }
+    });
+
+    $elems.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]')
@@ -146,16 +511,19 @@
    * @param {Object} settings Optional, will override the default settings
    * * @return {jQuery}
    */
-  $.fn.validateOnEvent = function (language, settings) {
-    this.find('*[data-validation-event]')
+  $.fn.validateOnEvent = function (language, config) {
+    var $elements = this[0].nodeName === 'FORM' ? 
this.find('*[data-validation-event]') : this;
+    $elements
       .each(function () {
         var $el = $(this),
-            etype = $el.valAttr('event');
+          etype = $el.valAttr('event');
         if (etype) {
           $el
             .unbind(etype + '.validation')
-            .bind(etype + '.validation', function () {
-              $(this).validateInputOnBlur(language, settings, true, etype);
+            .bind(etype + '.validation', function (evt) {
+              if( (evt || {}).keyCode !== 9 ) {
+                $(this).validateInputOnBlur(language, config, true, etype);
+              }
             });
         }
       });
@@ -175,36 +543,35 @@
       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_' + ($elem.attr('name') || 
'').replace(/(:|\.|\[|\])/g, ''),
-          help = $elem.attr(attrName);
+        className = 'jquery_form_help_' + (++_helpers),
+        help = $elem.attr(attrName);
 
+      // Reset
+      $elem
+        .removeClass('has-help-text')
+        .unbind('focus.help')
+        .unbind('blur.help');
+
       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 = $('<span />')
-                        .addClass(className)
-                        .addClass('help')
-                        .addClass('help-block') // twitter bs
-                        .text(help)
-                        .hide();
+                .addClass(className)
+                .addClass('help')
+                .addClass('help-block') // twitter bs
+                .text(help)
+                .hide();
 
               $elem.after($help);
             }
             $help.fadeIn();
           })
-          .unbind('blur.help')
           .bind('blur.help', function () {
             $(this)
               .parent()
@@ -226,7 +593,7 @@
     var language = $.extend({}, $.formUtils.LANG, lang || {});
     this.each(function() {
       var $elem = $(this),
-          formDefaultConfig = $elem.closest('form').get(0).validationConfig || 
{};
+        formDefaultConfig = $elem.closest('form').get(0).validationConfig || 
{};
 
       $elem.one('validation', function(evt, isValid) {
         if ( typeof cb === 'function' ) {
@@ -235,10 +602,10 @@
       });
 
       $elem.validateInputOnBlur(
-          language,
-          $.extend({}, formDefaultConfig, conf || {}),
-          true
-        );
+        language,
+        $.extend({}, formDefaultConfig, conf || {}),
+        true
+      );
     });
   };
 
@@ -248,9 +615,9 @@
    */
   $.fn.willPostponeValidation = function() {
     return (this.valAttr('suggestion-nr') ||
-            this.valAttr('postpone') ||
-            this.hasClass('hasDatepicker')) &&
-            !window.postponedValidation;
+      this.valAttr('postpone') ||
+      this.hasClass('hasDatepicker')) &&
+      !window.postponedValidation;
   };
 
   /**
@@ -261,20 +628,20 @@
    * @param {Object} [language] Optional, will override $.formUtils.LANG
    * @param {Object} [conf] Optional, will override the default settings
    * @param {Boolean} attachKeyupEvent Optional
-   * @param {String} eventType
+   * @param {String} eventContext
    * @return {jQuery}
    */
-  $.fn.validateInputOnBlur = function (language, conf, attachKeyupEvent, 
eventType) {
+  $.fn.validateInputOnBlur = function (language, conf, attachKeyupEvent, 
eventContext) {
 
-    $.formUtils.eventType = eventType;
+    $.formUtils.eventType = eventContext;
 
     if ( this.willPostponeValidation() ) {
       // This validation has to be postponed
       var _self = this,
-          postponeTime = this.valAttr('postpone') || 200;
+        postponeTime = this.valAttr('postpone') || 200;
 
       window.postponedValidation = function () {
-        _self.validateInputOnBlur(language, conf, attachKeyupEvent, eventType);
+        _self.validateInputOnBlur(language, conf, attachKeyupEvent, 
eventContext);
         window.postponedValidation = false;
       };
 
@@ -288,38 +655,75 @@
     }
 
     language = $.extend({}, $.formUtils.LANG, language || {});
-    _removeErrorStyle(this, conf);
+    $.formUtils.dialogs.removeInputStylingAndMessage(this, conf);
+
     var $elem = this,
-        $form = $elem.closest('form'),
-        result = $.formUtils.validateInput(
-                    $elem,
-                    language,
-                    conf,
-                    $form,
-                    eventType
-                  );
+      $form = $elem.closest('form'),
+      result = $.formUtils.validateInput(
+        $elem,
+        language,
+        conf,
+        $form,
+        eventContext
+      );
 
-    if ( result.isValid ) {
-      if( result.shouldChangeDisplay ) {
-          $elem.addClass('valid');
-          _getInputParentContainer($elem)
-            .addClass(conf.inputParentClassOnSuccess);
+    var reValidate = function() {
+      $elem.validateInputOnBlur(language, conf, false, 'blur.revalidated');
+    };
+
+    if (eventContext === 'blur') {
+      $elem
+        .unbind('validation.revalidate', reValidate)
+        .one('validation.revalidate', reValidate);
+    }
+
+    if (attachKeyupEvent) {
+      $elem.removeKeyUpValidation();
+    }
+
+    if (result.shouldChangeDisplay) {
+      if (result.isValid) {
+        $.formUtils.dialogs.applyInputSuccessStyling($elem, conf);
+      } else {
+        $.formUtils.dialogs.setInlineMessage($elem, result.errorMsg, conf);
       }
     }
-    else if (!result.isValid) {
 
-      _applyErrorStyle($elem, conf);
-      _setInlineErrorMessage($elem, result.errorMsg, conf, 
conf.errorMessagePosition);
+    if (!result.isValid && attachKeyupEvent) {
+      $elem.validateOnKeyUp(language, conf);
+    }
 
-      if (attachKeyupEvent) {
-        $elem
-          .unbind('keyup.validation')
-          .bind('keyup.validation', function () {
-            $(this).validateInputOnBlur(language, conf, false, 'keyup');
+    return this;
+  };
+
+  /**
+   * Validate element on keyup-event
+   */
+  $.fn.validateOnKeyUp = function(language, conf) {
+    this.each(function() {
+      var $input = $(this);
+      if (!$input.valAttr('has-keyup-event')) {
+        $input
+          .valAttr('has-keyup-event', 'true')
+          .bind('keyup.validation', function (evt) {
+            if( evt.keyCode !== 9 ) {
+              $input.validateInputOnBlur(language, conf, false, 'keyup');
+            }
           });
       }
-    }
+    });
+    return this;
+  };
 
+  /**
+   * Remove validation on keyup
+   */
+  $.fn.removeKeyUpValidation = function() {
+    this.each(function() {
+      $(this)
+        .valAttr('has-keyup-event', false)
+        .unbind('keyup.validation');
+    });
     return this;
   };
 
@@ -329,7 +733,7 @@
    *
    * @param {String} name
    * @param {String|Boolean} [val]
-   * @return string|undefined
+   * @return {String|undefined|jQuery}
    * @protected
    */
   $.fn.valAttr = function (name, val) {
@@ -371,9 +775,6 @@
       displayError = false;
     }
 
-    $.formUtils.isValidatingEntireForm = true;
-    $.formUtils.haltValidation = false;
-
     /**
      * Adds message to error message stack if not already in the message stack
      *
@@ -381,27 +782,27 @@
      * @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) {
-            _applyErrorStyle($elem, conf);
-          }
-        },
+        if ($.inArray(mess, errorMessages) < 0) {
+          errorMessages.push(mess);
+        }
+        errorInputs.push($elem);
+        $elem.attr('current-error', mess);
+        if (displayError) {
+          $.formUtils.dialogs.applyInputErrorStyling($elem, conf);
+        }
+      },
 
-        /** Holds inputs (of type checkox or radio) already validated, to 
prevent recheck of mulitple checkboxes & radios */
-        checkedInputs = [],
+      /** Holds inputs (of type checkox or radio) already validated, to 
prevent recheck of mulitple checkboxes & radios */
+      checkedInputs = [],
 
-        /** Error messages for this validation */
-        errorMessages = [],
+      /** Error messages for this validation */
+      errorMessages = [],
 
-        /** Input elements which value was not valid */
-        errorInputs = [],
+      /** Input elements which value was not valid */
+      errorInputs = [],
 
-        /** Form instance */
-        $form = this,
+      /** Form instance */
+      $form = this,
 
       /**
        * Tells whether or not to validate element with this name and of this 
type
@@ -410,7 +811,7 @@
        * @param {String} type
        * @return {Boolean}
        */
-        ignoreInput = function (name, type) {
+      ignoreInput = function (name, type) {
         if (type === 'submit' || type === 'button' || type === 'reset') {
           return true;
         }
@@ -419,8 +820,7 @@
 
     // Reset style and remove error class
     if (displayError) {
-      $form.find('.' + conf.errorMessageClass + '.alert').remove();
-      _removeErrorStyle($form.find('.' + conf.errorElementClass + ',.valid'), 
conf);
+      $.formUtils.dialogs.removeAllMessagesAndStyling($form, conf);
     }
 
     // Validate element values
@@ -437,26 +837,21 @@
         }
 
         var result = $.formUtils.validateInput(
-                              $elem,
-                              language,
-                              conf,
-                              $form,
-                              'submit'
-                            );
+          $elem,
+          language,
+          conf,
+          $form,
+          'submit'
+        );
 
-        if( result.shouldChangeDisplay ) {
-          if ( !result.isValid ) {
-            addErrorMessage(result.errorMsg, $elem);
-          } else if( result.isValid ) {
-            $elem
-              .valAttr('current-error', false)
-              .addClass('valid');
-
-            _getInputParentContainer($elem)
-              .addClass(conf.inputParentClassOnSuccess);
-          }
+        if (!result.isValid) {
+          addErrorMessage(result.errorMsg, $elem);
+        } else if (result.isValid && result.shouldChangeDisplay) {
+          $elem.valAttr('current-error', false);
+          $.formUtils.dialogs.applyInputSuccessStyling($elem, conf);
         }
       }
+
     });
 
     // Run validation callback
@@ -476,54 +871,29 @@
     $.formUtils.isValidatingEntireForm = false;
 
     // Validation failed
-    if (!$.formUtils.haltValidation && errorInputs.length > 0) {
-
+    if (errorInputs.length > 0) {
       if (displayError) {
-        // display all error messages in top of form
         if (conf.errorMessagePosition === 'top') {
-          _templateMessage($form, language.errorTitle, errorMessages, conf);
-        }
-        // Customize display message
-        else if (conf.errorMessagePosition === 'custom') {
-          if (typeof conf.errorMessageCustom === 'function') {
-            conf.errorMessageCustom($form, language.errorTitle, errorMessages, 
conf);
-          }
-        }
-        // Display error message below input field or in defined container
-        else {
+          $.formUtils.dialogs.setMessageInTopOfForm($form, errorMessages, 
conf, language);
+        } else {
           $.each(errorInputs, function (i, $input) {
-            _setInlineErrorMessage($input, $input.attr('current-error'), conf, 
conf.errorMessagePosition);
+            $.formUtils.dialogs.setInlineMessage($input, 
$input.attr('current-error'), conf);
           });
         }
-
         if (conf.scrollToTopOnError) {
-          $window.scrollTop($form.offset().top - 20);
+          $.formUtils.$win.scrollTop($form.offset().top - 20);
         }
       }
-
-      return false;
     }
 
     if (!displayError && $.formUtils.haltValidation) {
       $.formUtils.errorDisplayPreventedWhenHalted = true;
     }
 
-    return !$.formUtils.haltValidation;
+    return errorInputs.length === 0 && !$.formUtils.haltValidation;
   };
 
   /**
-   * @deprecated
-   * @param language
-   * @param conf
-   */
-  $.fn.validateForm = function (language, conf) {
-    if (window.console && typeof window.console.warn === 'function') {
-      window.console.warn('Use of deprecated function $.validateForm, use 
$.isValid instead');
-    }
-    return this.isValid(language, conf, true);
-  };
-
-  /**
    * Plugin for displaying input length restriction
    */
   $.fn.restrictLength = function (maxLengthElement) {
@@ -552,21 +922,180 @@
     return this;
   };
 
+
+})(jQuery, window);
+
+/**
+ * Utility methods used for handling loading of modules (attached to 
$.formUtils)
+ */
+(function($) {
+
+  'use strict';
+
+  $.formUtils = $.extend($.formUtils || {}, {
+
+    /**
+     * @var {Boolean}
+     */
+    isLoadingModules: false,
+
+    /**
+     * @var {Object}
+     */
+    loadedModules: {},
+
+    /**
+     * @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 {function} [callback] - Optional, whether or not to fire event 
'load' when modules finished loading
+     */
+    loadModules: function (modules, path, callback) {
+
+      if ($.formUtils.isLoadingModules) {
+        setTimeout(function () {
+          $.formUtils.loadModules(modules, path, callback);
+        }, 10);
+        return;
+      }
+
+      var hasLoadedAnyModule = false,
+        loadModuleScripts = function (modules, path) {
+
+          var moduleList = $.split(modules),
+            numModules = moduleList.length,
+            moduleLoadedCallback = function () {
+              numModules--;
+              if (numModules === 0) {
+                $.formUtils.isLoadingModules = false;
+                if (callback && hasLoadedAnyModule) {
+                  if( typeof callback === 'function' ) {
+                    callback();
+                  }
+                }
+              }
+            };
+
+
+          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;
+
+                // 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);
+              }
+            }
+          });
+        };
+
+      if (path) {
+        loadModuleScripts(modules, path);
+      } else {
+        var findScriptPathAndLoadModules = function () {
+          var foundPath = false;
+          $('script[src*="form-validator"]').each(function () {
+            var isScriptFromPluginNodeModulesDirectory = 
this.src.split('form-validator')[1].split('node_modules').length > 1;
+            if (!isScriptFromPluginNodeModulesDirectory) {
+              foundPath = this.src.substr(0, this.src.lastIndexOf('/')) + '/';
+              if (foundPath === '/') {
+                foundPath = '';
+              }
+              return false;
+            }
+          });
+
+          if (foundPath !== false) {
+            loadModuleScripts(modules, foundPath);
+            return true;
+          }
+          return false;
+        };
+
+        if (!findScriptPathAndLoadModules()) {
+          $(findScriptPathAndLoadModules);
+        }
+      }
+    }
+
+  });
+
+})(jQuery);
+
+/**
+ * Setup function for the plugin
+ */
+(function ($) {
+
+  'use strict';
+
+
   /**
    * A bit smarter split function
    * delimiter can be space, comma, dash or pipe
    * @param {String} val
    * @param {Function|String} [callback]
+   * @param {Boolean} [allowSpaceAsDelimiter]
    * @returns {Array|void}
    */
-  $.split = function (val, callback) {
+  $.split = function (val, callback, allowSpaceAsDelimiter) {
+    // default to true
+    allowSpaceAsDelimiter = allowSpaceAsDelimiter === undefined || 
allowSpaceAsDelimiter === true;
+    var pattern = '[,|\-'+(allowSpaceAsDelimiter ? '\\s':'')+']\\s*',
+      regex = new RegExp(pattern, 'g');
     if (typeof callback !== 'function') {
       // return array
       if (!val) {
         return [];
       }
       var values = [];
-      $.each(val.split(callback ? callback : /[,|\-\s]\s*/g),
+      $.each(val.split(callback ? callback : regex),
         function (i, str) {
           str = $.trim(str);
           if (str.length) {
@@ -577,7 +1106,7 @@
       return values;
     } else if (val) {
       // exec callback func on each
-      $.each(val.split(/[,|\-\s]\s*/g),
+      $.each(val.split(regex),
         function (i, str) {
           str = $.trim(str);
           if (str.length) {
@@ -596,9 +1125,6 @@
 
     var defaultConf = $.extend($.formUtils.defaultConfig(), {
       form: 'form',
-      /*
-       * Enable custom event for validation
-       */
       validateOnEvent: false,
       validateOnBlur: true,
       validateCheckboxRadioOnClick: true,
@@ -609,11 +1135,13 @@
       language: false,
       onSuccess: false,
       onError: false,
-      onElementValidate: false,
+      onElementValidate: false
     });
 
     conf = $.extend(defaultConf, conf || {});
 
+    $(window).trigger('formValidationPluginInit', [conf]);
+
     if( conf.lang && conf.lang !== 'en' ) {
       var langModule = 'lang/'+conf.lang+'.js';
       conf.modules += conf.modules.length ? ','+langModule : langModule;
@@ -625,9 +1153,9 @@
       // Make a reference to the config for this form
       form.validationConfig = conf;
 
-      // Trigger jQuery event that we're about to setup va
+      // Trigger jQuery event that we're about to setup validation
       var $form = $(form);
-      $window.trigger('formValidationSetup', [$form, conf]);
+      $form.trigger('formValidationSetup', [$form, conf]);
 
       // Remove classes and event handlers that might have been
       // added by a previous call to $.validate
@@ -643,45 +1171,46 @@
           .unbind('blur.validation');
 
       // Validate when submitted
-      $form.bind('submit.validation', function () {
+      $form.bind('submit.validation', function (evt) {
 
-        var $form = $(this);
+        var $form = $(this),
+          stop = function() {
+            evt.stopImmediatePropagation();
+            return false;
+          };
 
         if ($.formUtils.haltValidation) {
           // pressing several times on submit button while validation is halted
-          return false;
+          return stop();
         }
 
         if ($.formUtils.isLoadingModules) {
           setTimeout(function () {
             $form.trigger('submit.validation');
           }, 200);
-          return false;
+          return stop();
         }
 
         var valid = $form.isValid(conf.language, conf);
-
         if ($.formUtils.haltValidation) {
           // Validation got halted by one of the validators
-          return false;
+          return stop();
         } else {
           if (valid && typeof conf.onSuccess === 'function') {
             var callbackResponse = conf.onSuccess($form);
             if (callbackResponse === false) {
-              return false;
+              return stop();
             }
           } else if (!valid && typeof conf.onError === 'function') {
             conf.onError($form);
-            return false;
+            return stop();
           } else {
-            return valid;
+            return valid ? true : stop();
           }
         }
       })
       .bind('reset.validation', function () {
-        // remove messages
-        $(this).find('.' + conf.errorMessageClass + '.alert').remove();
-        _removeErrorStyle($(this).find('.' + conf.errorElementClass + 
',.valid'), conf);
+        $.formUtils.dialogs.removeAllMessagesAndStyling($form, conf);
       })
       .addClass('has-validation-callback');
 
@@ -707,34 +1236,44 @@
         if (typeof conf.onModulesLoaded === 'function') {
           conf.onModulesLoaded();
         }
-        $window.trigger('validatorsLoaded', [typeof conf.form === 'string' ? 
$(conf.form) : conf.form, conf]);
+        var $form = typeof conf.form === 'string' ? $(conf.form) : conf.form;
+        $.formUtils.$win.trigger('validatorsLoaded', [$form, conf]);
       });
     }
   };
 
-  /**
-   * Object containing utility methods for this plugin
-   */
-  $.formUtils = {
+})(jQuery);
 
+/**
+ * Utility methods and properties attached to $.formUtils
+ */
+(function($, window) {
+
+  'use strict';
+
+  var $win = $(window);
+
+  $.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
+        ignore: [], // Names of inputs not to be validated even though 
`validationRuleAttribute` 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"
+        errorMessagePosition: 'inline', // Can be either "top" or "inline"
         errorMessageTemplate: {
           container: '<div class="{errorMessageClass} alert 
alert-danger">{messages}</div>',
           messages: '<strong>{errorTitle}</strong><ul>{fields}</ul>',
           field: '<li>{msg}</li>'
         },
-        errorMessageCustom: _templateMessage,
         scrollToTopOnError: true,
         dateFormat: 'yyyy-mm-dd',
         addValidClassOnAll: false, // whether or not to apply class="valid" 
even if the input wasn't validated
@@ -742,6 +1281,8 @@
         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
+        inlineErrorMessageCallback: false,
+        submitErrorMessageCallback: false
       };
     },
 
@@ -763,12 +1304,6 @@
     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
      */
@@ -782,138 +1317,42 @@
     },
 
     /**
-     * @var {Boolean}
+     * Warn user via the console if available
      */
-    isLoadingModules: false,
+    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);
+      }
+    },
 
     /**
-     * @var {Object}
-     */
-    loadedModules: {},
-
-    /**
+     * Same as input $.fn.val() but also supporting input of typ radio or 
checkbox
      * @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.
+     *  $.formUtils.getValue('.myRadioButtons', $('#some-form'));
+     *  $.formUtils.getValue($('#some-form').find('.check-boxes'));
      *
-     * 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
+     * @param query
+     * @param $parent
+     * @returns {String|Boolean}
      */
-    loadModules: function (modules, path, fireEvent) {
-
-      if (fireEvent === undefined) {
-        fireEvent = true;
-      }
-
-      if ($.formUtils.isLoadingModules) {
-        setTimeout(function () {
-          $.formUtils.loadModules(modules, path, fireEvent);
-        });
-        return;
-      }
-
-      var hasLoadedAnyModule = false,
-        loadModuleScripts = function (modules, path) {
-
-          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 {
-                    $window.trigger('validatorsLoaded');
-                  }
-                }
-              }
-            };
-
-
-          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;
-
-                // Load the script
-                script.type = 'text/javascript';
-                script.onload = moduleLoadedCallback;
-                script.src = scriptUrl + ( scriptUrl.slice(-7) === '.dev.js' ? 
cacheSuffix : '' );
-                script.onerror = function() {
-                  if( 'console' in window && window.console.log ) {
-                    window.console.log('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);
-              }
-            }
-          });
-        };
-
-      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 = '';
-            }
-            return false;
-          });
-
-          if (foundPath !== false) {
-            loadModuleScripts(modules, foundPath);
-            return true;
-          }
-          return false;
-        };
-
-        if (!findScriptPathAndLoadModules()) {
-          $(findScriptPathAndLoadModules);
+    getValue: 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;
     },
 
     /**
@@ -929,85 +1368,61 @@
      */
     validateInput: function ($elem, language, conf, $form, eventContext) {
 
-      $elem.trigger('beforeValidation');
       conf = conf || $.formUtils.defaultConfig();
       language = language || $.formUtils.LANG;
 
-      var value = $elem.val() || '',
-          result = {isValid: true, shouldChangeDisplay:true, errorMsg:''},
-          optional = $elem.valAttr('optional'),
+      var value = this.getValue($elem);
 
-          // test if a checkbox forces this element to be validated
-          validationDependsOnCheckedInput = false,
-          validationDependentInputIsChecked = false,
-          validateIfCheckedElement = false,
+      $elem
+        .valAttr('skipped', false)
+        .one('beforeValidation', function() {
+          // Skip input because its hidden or disabled
+          // Doing this in a callback makes it possible for others to prevent 
the default
+          // behaviour by binding to the same event and call 
evt.stopImmediatePropagation()
+          if ($elem.attr('disabled') || (!$elem.is(':visible') && 
!conf.validateHiddenInputs)) {
+            $elem.valAttr('skipped', 1);
+          }
+        })
+        .trigger('beforeValidation', [value, conf, language]);
 
-          // get value of this element's attribute "... if-checked"
-          validateIfCheckedElementName = $elem.valAttr('if-checked'),
-          // get expected radio button value for "if-checked" optional 
validation
-          validateIfCheckedElementValue = $elem.valAttr('if-checked-value');
 
+      var inputIsOptional = $elem.valAttr('optional') === 'true',
+          skipBecauseItsEmpty = !value && inputIsOptional,
+          validationRules = $elem.attr(conf.validationRuleAttribute),
+          isValid = true,
+          errorMsg = '',
+          result = {isValid: true, shouldChangeDisplay:true, errorMsg:''};
 
-      if ($elem.attr('disabled') || (!$elem.is(':visible') && 
!conf.validateHiddenInputs)) {
-        result.shouldChangeDisplay = false;
-        return result;
-      }
+      // 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.
 
-      // make sure we can proceed
-      if (validateIfCheckedElementName != null) {
-
-        // Set the boolean telling us that the validation depends
-        // on another input being checked
-        validationDependsOnCheckedInput = true;
-
-        // select the checkbox type element in this form
-        validateIfCheckedElement = $form.find('input[name="' + 
validateIfCheckedElementName + '"]');
-
-        // test if check input value
-        if (validateIfCheckedElementValue != null) {
-          validateIfCheckedElement.each(function(index, el) {
-            // test if it's property "checked" is checked and value equals 
expected value
-            if ($(el).prop('checked') && $(el).val() === 
validateIfCheckedElementValue) {
-              validationDependentInputIsChecked = true;
-            }
-          });
-        }
-        else {
-          // test if it's property "checked" is checked
-          if (validateIfCheckedElement.prop('checked')) {
-            // set value for validation checkpoint
-            validationDependentInputIsChecked = true;
-          }
-        }
-      }
-
-      // validation checkpoint
-      // if empty AND optional attribute is present
-      // OR depending on a checkbox being checked AND checkbox is checked, 
return true
-      var isInvalidNumberInput = !value && $elem[0].type === 'number';
-      if ((!value && optional === 'true' && !isInvalidNumberInput) || 
(validationDependsOnCheckedInput && !validationDependentInputIsChecked)) {
+      if (!validationRules || skipBecauseItsEmpty || $elem.valAttr('skipped')) 
{
         result.shouldChangeDisplay = conf.addValidClassOnAll;
         return result;
       }
 
-      var validationRules = $elem.attr(conf.validationRuleAttribute),
-
-        // see if form element has inline err msg attribute
-        validationErrorMsg = true;
-
-      if (!validationRules) {
-        result.shouldChangeDisplay = conf.addValidClassOnAll;
-        return result;
+      // Filter out specified characters
+      var ignore = $elem.valAttr('ignore');
+      if (ignore) {
+        $.each(ignore.split(''), function(i, character) {
+          value = value.replace(new RegExp('\\'+character, 'g'), '');
+        });
       }
 
       $.split(validationRules, function (rule) {
+
         if (rule.indexOf('validate_') !== 0) {
           rule = 'validate_' + rule;
         }
 
         var validator = $.formUtils.validators[rule];
 
-        if (validator && typeof validator.validatorFunction === 'function') {
+        if (validator) {
 
           // special change of element for checkbox_group rule
           if (rule === 'validate_checkbox_group') {
@@ -1015,56 +1430,52 @@
             $elem = $form.find('[name="' + $elem.attr('name') + '"]:eq(0)');
           }
 
-          var isValid = null;
           if (eventContext !== 'keyup' || validator.validateOnKeyUp) {
-            isValid = validator.validatorFunction(value, $elem, conf, 
language, $form);
+            // A validator can prevent itself from getting triggered on keyup
+            isValid = validator.validatorFunction(value, $elem, conf, 
language, $form, eventContext);
           }
 
           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;
-                  }
-                }
-              }
+            if (conf.validateOnBlur) {
+              $elem.validateOnKeyUp(language, conf);
             }
+            errorMsg = $.formUtils.dialogs.resolveErrorMessage($elem, 
validator, rule, conf, language);
             return false; // break iteration
           }
 
         } else {
-          throw new Error('Using undefined validator "' + rule + '"');
+
+          // todo: Add some validator lookup function and tell immediately 
which module is missing
+          throw new Error('Using undefined validator "' + rule +
+            '". Maybe you have forgotten to load the module that "' + rule +'" 
belongs to?');
+
         }
 
-      }, ' ');
+      });
 
-      if (typeof validationErrorMsg === 'string') {
+
+      if (isValid === false) {
         $elem.trigger('validation', false);
-        result.errorMsg = validationErrorMsg;
+        result.errorMsg = errorMsg;
         result.isValid = false;
         result.shouldChangeDisplay = true;
-      } else if (validationErrorMsg === null) {
-        result.shouldChangeDisplay = conf.addValidClassOnAll;
+      } else if (isValid === null) {
+        // A validatorFunction returning null means that it's not able to 
validate
+        // the input at this time. Most probably some async stuff need to gets 
finished
+        // first and then the validator will re-trigger the validation.
+        result.shouldChangeDisplay = false;
       } else {
         $elem.trigger('validation', true);
         result.shouldChangeDisplay = true;
       }
 
       // Run element validation callback
-      if (typeof conf.onElementValidate === 'function' && validationErrorMsg 
!== null) {
-        conf.onElementValidate(result.isValid, $elem, $form, 
validationErrorMsg);
+      if (typeof conf.onElementValidate === 'function' && errorMsg !== null) {
+        conf.onElementValidate(result.isValid, $elem, $form, errorMsg);
       }
 
+      $elem.trigger('afterValidation', [result, eventContext]);
+
       return result;
     },
 
@@ -1074,9 +1485,10 @@
      *
      * @param {String} val
      * @param {String} dateFormat
+     * @param {Boolean} [addMissingLeadingZeros]
      * @return {Array}|{Boolean}
      */
-    parseDate: function (val, dateFormat) {
+    parseDate: function (val, dateFormat, addMissingLeadingZeros) {
       var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0, 1),
         regexp = '^',
         formatParts = dateFormat.split(divider || null),
@@ -1088,6 +1500,17 @@
 
       regexp += '$';
 
+      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);
+      }
+
       matches = val.match(new RegExp(regexp));
       if (matches === null) {
         return false;
@@ -1107,8 +1530,8 @@
       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) {
+        (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) {
@@ -1122,7 +1545,7 @@
      * 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
-     * @param {Number}
+     * @return {Number}
      */
     parseDateInt: function (val) {
       if (val.indexOf('0') === 0) {
@@ -1193,8 +1616,8 @@
     numericRangeCheck: function (value, rangeAllowed) {
       // split by dash
       var range = $.split(rangeAllowed),
-          // min or max
-          minmax = parseInt(rangeAllowed.substr(3), 10);
+      // min or max
+        minmax = parseInt(rangeAllowed.substr(3), 10);
 
       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
@@ -1265,7 +1688,7 @@
 
       if (this._numSuggestionElements === 0) {
         // Re-position suggestion container if window size changes
-        $window.bind('resize', function () {
+        $win.bind('resize', function () {
           $('.jquery-form-suggestions').each(function () {
             var $container = $(this),
               suggestID = $container.attr('data-suggest-container');
@@ -1367,6 +1790,7 @@
                 .click(function () {
                   $input.focus();
                   $input.val($(this).text());
+                  $input.trigger('change');
                   onSelectSuggestion($input);
                 });
             });
@@ -1385,6 +1809,7 @@
             if ($suggestionContainer.length > 0) {
               var newText = 
$suggestionContainer.find('div').eq($.formUtils._selectedSuggestion).text();
               $input.val(newText);
+              $input.trigger('change');
               onSelectSuggestion($input);
               e.preventDefault();
             }
@@ -1473,6 +1898,8 @@
       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',
@@ -1495,16 +1922,28 @@
       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'
+      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',
+      passwordComplexityStart: 'Password must contain at least ',
+      passwordComplexitySeparator: ', ',
+      passwordComplexityUppercaseInfo: ' uppercase letter(s)',
+      passwordComplexityLowercaseInfo: ' lowercase letter(s)',
+      passwordComplexitySpecialCharsInfo: ' special character(s)',
+      passwordComplexityNumericCharsInfo: ' numeric character(s)',
+      passwordComplexityEnd: '.'
     }
-  };
+  });
 
+})(jQuery, window);
 
-  /* * * * * * * * * * * * * * * * * * * * * *
-   CORE VALIDATORS
-   * * * * * * * * * * * * * * * * * * * * */
+/**
+ * File declaring all default validators.
+ */
+(function($) {
 
-
   /*
    * Validate email
    */
@@ -1513,8 +1952,8 @@
     validatorFunction: function (email) {
 
       var emailParts = email.toLowerCase().split('@'),
-          localPart = emailParts[0],
-          domain = emailParts[1];
+        localPart = emailParts[0],
+        domain = emailParts[1];
 
       if (localPart && domain) {
 
@@ -1527,10 +1966,10 @@
         }
 
         return 
$.formUtils.validators.validate_domain.validatorFunction(emailParts[1]) &&
-              localPart.indexOf('.') !== 0 &&
-              localPart.substring(localPart.length-1, localPart.length) !== 
'.' &&
-              localPart.indexOf('..') === -1 &&
-              !(/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(localPart));
+          localPart.indexOf('.') !== 0 &&
+          localPart.substring(localPart.length-1, localPart.length) !== '.' &&
+          localPart.indexOf('..') === -1 &&
+          !(/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(localPart));
       }
 
       return false;
@@ -1572,7 +2011,7 @@
     },
     errorMessage: '',
     errorMessageKey: function(config) {
-      if (config.errorMessagePosition === 'top' || config.errorMessagePosition 
=== 'custom') {
+      if (config.errorMessagePosition === 'top' || typeof 
config.errorMessagePosition === 'function') {
         return 'requiredFields';
       }
       else {
@@ -1665,8 +2104,21 @@
           allowsRange = false,
           begin, end,
           steps = $el.valAttr('step') || '',
-          allowsSteps = false;
+          allowsSteps = false,
+          sanitize = $el.attr('data-sanitize') || '',
+          isFormattedWithNumeral = 
sanitize.match(/(^|[\s])numberFormat([\s]|$)/i);
 
+        if (isFormattedWithNumeral) {
+          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.');
+          }
+          //Unformat input first, then convert back to String
+          if (val.length) {
+            val = String(numeral().unformat(val));
+          }
+        }
+
         if (allowing.indexOf('number') === -1) {
           allowing += ',number';
         }
@@ -1692,10 +2144,10 @@
           // Fix for checking range with floats using ,
           val = val.replace(',', '.');
         }
-
-        if (allowing.indexOf('number') > -1 && val.replace(/[0-9-]/g, '') === 
'' && (!allowsRange || (val >= begin && val <= end)) && (!allowsSteps || (val % 
steps === 0))) {
+        if (val.replace(/[0-9-]/g, '') === '' && (!allowsRange || (val >= 
begin && val <= end)) && (!allowsSteps || (val % steps === 0))) {
           return true;
         }
+
         if (allowing.indexOf('float') > -1 && val.match(new 
RegExp('^([0-9-]+)\\.([0-9]+)$')) !== null && (!allowsRange || (val >= begin && 
val <= end)) && (!allowsSteps || (val % steps === 0))) {
           return true;
         }
@@ -1755,8 +2207,9 @@
   $.formUtils.addValidator({
     name: 'date',
     validatorFunction: function (date, $el, conf) {
-      var dateFormat = $el.valAttr('format') || conf.dateFormat || 
'yyyy-mm-dd';
-      return $.formUtils.parseDate(date, dateFormat) !== false;
+      var dateFormat = $el.valAttr('format') || conf.dateFormat || 
'yyyy-mm-dd',
+        addMissingLeadingZeros = $el.valAttr('require-leading-zero') === 
'false';
+      return $.formUtils.parseDate(date, dateFormat, addMissingLeadingZeros) 
!== false;
     },
     errorMessage: '',
     errorMessageKey: 'badDate'
@@ -1776,12 +2229,12 @@
     validatorFunction: function (val, $el, conf, lang, $form) {
       // preset return var
       var isValid = true,
-        // get name of element. since it is a checkbox group, all checkboxes 
will have same name
+      // get name of element. since it is a checkbox group, all checkboxes 
will have same name
         elname = $el.attr('name'),
-        // get checkboxes and count the checked ones
+      // get checkboxes and count the checked ones
         $checkBoxes = $('input[type=checkbox][name^="' + elname + '"]', $form),
         checkedCount = $checkBoxes.filter(':checked').length,
-        // get el attr that specs qty required / allowed
+      // get el attr that specs qty required / allowed
         qtyAllowed = $el.valAttr('qty');
 
       if (qtyAllowed === undefined) {
@@ -1829,3 +2282,6 @@
   });
 
 })(jQuery);
+
+
+}));

Modified: trunk/phpgwapi/js/jquery/validator/jquery.form-validator.min.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/jquery.form-validator.min.js     
2016-10-13 12:36:01 UTC (rev 15822)
+++ trunk/phpgwapi/js/jquery/validator/jquery.form-validator.min.js     
2016-10-13 13:04:59 UTC (rev 15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-!function(a){"use strict";var 
b=a(window),c=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},d=function(a,b){a.addClass(b.errorElementClass).removeClass("valid"),c(a).addClass(b.inputParentClassOnError).removeClass(b.inputParentClassOnSuccess),""!==b.borderColorOnError&&a.css("border-color",b.borderColorOnError)},e=function(b,d){b.each(function(){var
 
b=a(this);f(b,"",d,d.errorMessagePosition),b.removeClass("valid").removeClass(d.errorElementClass).css("border-color",""),c(b).removeClass(d.inputParentClassOnError).removeClass(d.inputParentClassOnSuccess).find("."+d.errorMessageClass).remove()})},f=function(d,e,f,g){var
 
h=document.getElementById(d.attr("name")+"_err_msg"),i=function(a){b.trigger("validationErrorDisplay",[d,a]),a.html(e)},j={};if(h)i(a(h));else
 if("object"==typeof g){var 
k=!1;g.find("."+f.errorMessageClass).each(function(){return 
this.inputReferer===d[0]?(k=a(this),!1):void 0}),k?e?i(k):k.remove():(j=a('<div 
class="'+f.errorMessageClass+'"></div>'),i(j),j[0].inputReferer=d[0],g.prepend(j))}else{var
 
l=c(d);j=l.find("."+f.errorMessageClass+".help-block"),0===j.length&&(j=a("<span></span>").addClass("help-block").addClass(f.errorMessageClass),j.appendTo(l)),i(j)}},g=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.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(){a(this).validateInputOnBlur(b,c,!0,e)})}),this},a.fn.showHelpOnFocus=function(b){return
 
b||(b="data-validation-help"),this.find(".has-help-txt").valAttr("has-keyup-event",!1).removeClass("has-help-txt"),this.find("textarea,input").each(function(){var
 
c=a(this),d="jquery_form_help_"+(c.attr("name")||"").replace(/(:|\.|\[|\])/g,""),e=c.attr(b);e&&c.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var
 b=c.parent().find("."+d);0===b.length&&(b=a("<span 
/>").addClass(d).addClass("help").addClass("help-block").text(e).hide(),c.after(b)),b.fadeIn()}).unbind("blur.help").bind("blur.help",function(){a(this).parent().find("."+d).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,g,h,i){if(a.formUtils.eventType=i,this.willPostponeValidation()){var
 j=this,k=this.valAttr("postpone")||200;return 
window.postponedValidation=function(){j.validateInputOnBlur(b,g,h,i),window.postponedValidation=!1},setTimeout(function(){window.postponedValidation&&window.postponedValidation()},k),this}b=a.extend({},a.formUtils.LANG,b||{}),e(this,g);var
 l=this,m=l.closest("form"),n=a.formUtils.validateInput(l,b,g,m,i);return 
n.isValid?n.shouldChangeDisplay&&(l.addClass("valid"),c(l).addClass(g.inputParentClassOnSuccess)):n.isValid||(d(l,g),f(l,n.errorMsg,g,g.errorMessagePosition),h&&l.unbind("keyup.validation").bind("keyup.validation",function(){a(this).validateInputOnBlur(b,g,!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(h,i,j){if(a.formUtils.isLoadingModules){var
 k=this;return 
setTimeout(function(){k.isValid(h,i,j)},200),null}i=a.extend({},a.formUtils.defaultConfig(),i||{}),h=a.extend({},a.formUtils.LANG,h||{}),j=j!==!1,a.formUtils.errorDisplayPreventedWhenHalted&&(delete
 
a.formUtils.errorDisplayPreventedWhenHalted,j=!1),a.formUtils.isValidatingEntireForm=!0,a.formUtils.haltValidation=!1;var
 
l=function(b,c){a.inArray(b,n)<0&&n.push(b),o.push(c),c.attr("current-error",b),j&&d(c,i)},m=[],n=[],o=[],p=this,q=function(b,c){return"submit"===c||"button"===c||"reset"===c?!0:a.inArray(b,i.ignore||[])>-1};if(j&&(p.find("."+i.errorMessageClass+".alert").remove(),e(p.find("."+i.errorElementClass+",.valid"),i)),p.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var
 
b=a(this),d=b.attr("type"),e="radio"===d||"checkbox"===d,f=b.attr("name");if(!q(f,d)&&(!e||a.inArray(f,m)<0)){e&&m.push(f);var
 
g=a.formUtils.validateInput(b,h,i,p,"submit");g.shouldChangeDisplay&&(g.isValid?g.isValid&&(b.valAttr("current-error",!1).addClass("valid"),c(b).addClass(i.inputParentClassOnSuccess)):l(g.errorMsg,b))}}),"function"==typeof
 i.onValidate){var 
r=i.onValidate(p);a.isArray(r)?a.each(r,function(a,b){l(b.message,b.element)}):r&&r.element&&r.message&&l(r.message,r.element)}return
 
a.formUtils.isValidatingEntireForm=!1,!a.formUtils.haltValidation&&o.length>0?(j&&("top"===i.errorMessagePosition?g(p,h.errorTitle,n,i):"custom"===i.errorMessagePosition?"function"==typeof
 
i.errorMessageCustom&&i.errorMessageCustom(p,h.errorTitle,n,i):a.each(o,function(a,b){f(b,b.attr("current-error"),i,i.errorMessagePosition)}),i.scrollToTopOnError&&b.scrollTop(p.offset().top-20)),!1):(!j&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),!a.formUtils.haltValidation)},a.fn.validateForm=function(a,b){return
 window.console&&"function"==typeof 
window.console.warn&&window.console.warn("Use of deprecated function 
$.validateForm, use $.isValid 
instead"),this.isValid(a,b,!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.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(c){var 
d=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(c=a.extend(d,c||{}),c.lang&&"en"!==c.lang){var
 
f="lang/"+c.lang+".js";c.modules+=c.modules.length?","+f:f}a(c.form).each(function(d,f){f.validationConfig=c;var
 
g=a(f);b.trigger("formValidationSetup",[g,c]),g.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation"),g.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation"),g.bind("submit.validation",function(){var
 
b=a(this);if(a.formUtils.haltValidation)return!1;if(a.formUtils.isLoadingModules)return
 setTimeout(function(){b.trigger("submit.validation")},200),!1;var 
d=b.isValid(c.language,c);if(a.formUtils.haltValidation)return!1;if(!d||"function"!=typeof
 c.onSuccess)return d||"function"!=typeof c.onError?d:(c.onError(b),!1);var 
e=c.onSuccess(b);return e===!1?!1:void 
0}).bind("reset.validation",function(){a(this).find("."+c.errorMessageClass+".alert").remove(),e(a(this).find("."+c.errorElementClass+",.valid"),c)}).addClass("has-validation-callback"),c.showHelpOnFocus&&g.showHelpOnFocus(),c.addSuggestions&&g.addSuggestions(),c.validateOnBlur&&(g.validateOnBlur(c.language,c),g.bind("html5ValidationAttrsFound",function(){g.validateOnBlur(c.language,c)})),c.validateOnEvent&&g.validateOnEvent(c.language,c)}),""!==c.modules&&a.formUtils.loadModules(c.modules,!1,function(){"function"==typeof
 
c.onModulesLoaded&&c.onModulesLoaded(),b.trigger("validatorsLoaded",["string"==typeof
 
c.form?a(c.form):c.form,c])})},a.formUtils={defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"#b94a48",errorMessageClass:"form-error",validationRuleAttribute:"data-validation",validationErrorMsgAttribute:"data-validation-error-msg",errorMessagePosition:"element",errorMessageTemplate:{container:'<div
 class="{errorMessageClass} alert 
alert-danger">{messages}</div>',messages:"<strong>{errorTitle}</strong><ul>{fields}</ul>",field:"<li>{msg}</li>"},errorMessageCustom:g,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(c,d,e){if(void
 0===e&&(e=!0),a.formUtils.isLoadingModules)return void 
setTimeout(function(){a.formUtils.loadModules(c,d,e)});var 
f=!1,g=function(c,d){var 
g=a.split(c),h=g.length,i=function(){h--,0===h&&(a.formUtils.isLoadingModules=!1,e&&f&&("function"==typeof
 
e?e():b.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(){"console"in
 window&&window.console.log&&window.console.log("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(c,d);else{var
 h=function(){var b=!1;return 
a('script[src*="form-validator"]').each(function(){return 
b=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===b&&(b=""),!1}),b!==!1?(g(c,b),!0):!1};h()||a(h)}},validateInput:function(b,c,d,e,f){b.trigger("beforeValidation"),d=d||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var
 
g=b.val()||"",h={isValid:!0,shouldChangeDisplay:!0,errorMsg:""},i=b.valAttr("optional"),j=!1,k=!1,l=!1,m=b.valAttr("if-checked"),n=b.valAttr("if-checked-value");if(b.attr("disabled")||!b.is(":visible")&&!d.validateHiddenInputs)return
 
h.shouldChangeDisplay=!1,h;null!=m&&(j=!0,l=e.find('input[name="'+m+'"]'),null!=n?l.each(function(b,c){a(c).prop("checked")&&a(c).val()===n&&(k=!0)}):l.prop("checked")&&(k=!0));var
 o=!g&&"number"===b[0].type;if(!g&&"true"===i&&!o||j&&!k)return 
h.shouldChangeDisplay=d.addValidClassOnAll,h;var 
p=b.attr(d.validationRuleAttribute),q=!0;return 
p?(a.split(p,function(h){0!==h.indexOf("validate_")&&(h="validate_"+h);var 
i=a.formUtils.validators[h];if(!i||"function"!=typeof i.validatorFunction)throw 
new Error('Using undefined validator 
"'+h+'"');"validate_checkbox_group"===h&&(b=e.find('[name="'+b.attr("name")+'"]:eq(0)'));var
 
j=null;return("keyup"!==f||i.validateOnKeyUp)&&(j=i.validatorFunction(g,b,d,c,e)),j?void
 
0:(q=null,null!==j&&(q=b.attr(d.validationErrorMsgAttribute+"-"+h.replace("validate_","")),q||(q=b.attr(d.validationErrorMsgAttribute),q||(q=c[i.errorMessageKey],q||(q=i.errorMessage)))),!1)},"
 "),"string"==typeof 
q?(b.trigger("validation",!1),h.errorMsg=q,h.isValid=!1,h.shouldChangeDisplay=!0):null===q?h.shouldChangeDisplay=d.addValidClassOnAll:(b.trigger("validation",!0),h.shouldChangeDisplay=!0),"function"==typeof
 
d.onElementValidate&&null!==q&&d.onElementValidate(h.isValid,b,e,q),h):(h.shouldChangeDisplay=d.addValidClassOnAll,h)},parseDate:function(b,c){var
 
d,e,f,g,h=c.replace(/[a-zA-Z]/gi,"").substring(0,1),i="^",j=c.split(h||null);if(a.each(j,function(a,b){i+=(a>0?"\\"+h:"")+"(\\d{"+b.length+"})"}),i+="$",d=b.match(new
 RegExp(i)),null===d)return!1;var k=function(b,c,d){for(var 
e=0;e<c.length;e++)if(c[e].substring(0,1)===b)return 
a.formUtils.parseDateInt(d[e+1]);return-1};return 
f=k("m",j,d),e=k("d",j,d),g=k("y",j,d),2===f&&e>28&&(g%4!==0||g%100===0&&g%400!==0)||2===f&&e>29&&(g%4===0||g%100!==0&&g%400===0)||f>12||0===f?!1:this.isShortMonth(f)&&e>30||!this.isShortMonth(f)&&e>31||0===e?!1:[g,f,e]},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&&(b<parseInt(d[0],10)||b>parseInt(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(c,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,c.attr("autocomplete","off"),0===this._numSuggestionElements&&b.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
 
c.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
 
b=a(this),d=[],e=a.trim(b.val()).toLocaleLowerCase();if(e!==a.formUtils._previousTypedVal){a.formUtils._previousTypedVal=e;var
 
i=!1,j=b.valAttr("suggestion-nr"),k=a(".jquery-form-suggestion-"+j);if(k.scrollTop(0),""!==e){var
 l=e.length>2;a.each(b.data("suggestions"),function(a,b){var 
c=b.toLocaleLowerCase();return 
c===e?(d.push("<strong>"+b+"</strong>"),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new
 
RegExp(e,"gi"),"<strong>$&</strong>")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("<div></div>").css(f.css).appendTo("body"),c.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,b),k.html(""),a.each(d,function(c,d){a("<div></div>").append(d).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo(k).click(function(){b.focus(),b.val(a(this).text()),h(b)})}))}}).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))}),c},LANG:{errorTitle:"Form
 submission failed!",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"}},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:"requiredFields"}),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;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(f.indexOf("number")>-1&&""===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";return 
a.formUtils.parseDate(b,e)!==!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,b){function
 c(a,b){this.$form=a,this.$input=b,this.reset(),b.on("change 
paste",this.reset.bind(this))}var 
d=function(){return!1},e={numHalted:0,haltValidation:function(b){this.numHalted++,a.formUtils.haltValidation=!0,b.unbind("submit",d).bind("submit",d).find('*[type="submit"]').addClass("disabled").attr("disabled","disabled")},unHaltValidation:function(b){this.numHalted--,0===this.numHalted&&(a.formUtils.haltValidation=!1,b.unbind("submit",d).find('*[type="submit"]').removeClass("disabled").removeAttr("disabled","disabled"))}};c.prototype.reset=function(){this.haltedFormValidation=!1,this.hasRun=!1,this.isRunning=!1,this.result=b},c.prototype.run=function(a,b){return"keyup"===a?null:this.isRunning?(this.haltedFormValidation||"submit"!==a||(e.haltValidation(),this.haltedFormValidation=!0),null):this.hasRun?this.result:("submit"===a&&(e.haltValidation(this.$form),this.haltedFormValidation=!0),this.isRunning=!0,this.$input.attr("disabled","disabled").addClass("async-validation"),this.$form.addClass("async-validation"),b(function(a){this.done(a)}.bind(this)),null)},c.prototype.done=function(a){this.result=a,this.hasRun=!0,this.isRunning=!1,this.$input.removeAttr("disabled").removeClass("async-validation"),this.$form.removeClass("async-validation"),this.haltedFormValidation?(e.unHaltValidation(this.$form),this.$form.trigger("submit")):this.$input.trigger("validation.revalidate")},a.formUtils=a.extend(a.formUtils||{},{asyncValidation:function(a,b,d){var
 e,f=b.get(0);return 
f.asyncValidators||(f.asyncValidators={}),f.asyncValidators[a]?e=f.asyncValidators[a]:(e=new
 c(d,b),f.asyncValidators[a]=e),e}})}(a),function(a,b){"use strict";function 
c(b){b&&"custom"===b.errorMessagePosition&&"function"==typeof 
b.errorMessageCustom&&(a.formUtils.warn("Use of deprecated function 
errorMessageCustom, use config.submitErrorMessageCallback 
instead"),b.submitErrorMessageCallback=function(a,c){b.errorMessageCustom(a,b.language.errorTitle,c,b)})}function
 d(b){if(b.errorMessagePosition&&"object"==typeof 
b.errorMessagePosition){a.formUtils.warn("Deprecated use of config parameter 
errorMessagePosition, use config.submitErrorMessageCallback instead");var 
c=b.errorMessagePosition;b.errorMessagePosition="top",b.submitErrorMessageCallback=function(){return
 c}}}function e(b){var 
c=b.find("[data-validation-if-checked]");c.length&&a.formUtils.warn('Detected 
use of attribute "data-validation-if-checked" which is deprecated. Use 
"data-validation-depends-on" provided by module 
"logic"'),c.on("beforeValidation",function(){var 
c=a(this),d=c.valAttr("if-checked"),e=a('input[name="'+d+'"]',b),f=e.is(":checked"),g=(a.formUtils.getValue(e)||"").toString(),h=c.valAttr("if-checked-value");(!f||h&&h!==g)&&c.valAttr("skipped",!0)})}function
 f(b){var c={se:"sv",cz:"cs",dk:"da"};if(b.lang in c){var 
d=c[b.lang];a.formUtils.warn('Deprecated use of lang code "'+b.lang+'" use 
"'+d+'" instead'),b.lang=d}}a.fn.validateForm=function(b,c){return 
a.formUtils.warn("Use of deprecated function $.validateForm, use $.isValid 
instead"),this.isValid(b,c,!0)},a(window).on("formValidationPluginInit",function(a,b){f(b),c(b),d(b)}).on("validatorsLoaded
 
formValidationSetup",function(b,c){c||(c=a("form")),e(c)})}(a),function(a){"use 
strict";var b={resolveErrorMessage:function(a,b,c,d,e){var 
f=d.validationErrorMsgAttribute+"-"+c.replace("validate_",""),g=a.attr(f);return
 g||(g=a.attr(d.validationErrorMsgAttribute),g||(g="function"!=typeof 
b.errorMessageKey?e[b.errorMessageKey]:e[b.errorMessageKey(d)],g||(g=b.errorMessage))),g},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},applyInputErrorStyling: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)},applyInputSuccessStyling:function(a,b){a.addClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnSuccess)},removeInputStylingAndMessage:function(a,c){a.removeClass("valid").removeClass(c.errorElementClass).css("border-color","");var
 
d=b.getParentContainer(a);if(d.removeClass(c.inputParentClassOnError).removeClass(c.inputParentClassOnSuccess),"function"==typeof
 c.inlineErrorMessageCallback){var 
e=c.inlineErrorMessageCallback(a,!1,c);e&&e.html("")}else 
d.find("."+c.errorMessageClass).remove()},removeAllMessagesAndStyling:function(c,d){if("function"==typeof
 d.submitErrorMessageCallback){var 
e=d.submitErrorMessageCallback(c,!1,d);e&&e.html("")}else 
c.find("."+d.errorMessageClass+".alert").remove();c.find("."+d.errorElementClass+",.valid").each(function(){b.removeInputStylingAndMessage(a(this),d)})},setInlineMessage:function(b,c,d){this.applyInputErrorStyling(b,d);var
 
e,f=document.getElementById(b.attr("name")+"_err_msg"),g=!1,h=function(d){a.formUtils.$win.trigger("validationErrorDisplay",[b,d]),d.html(c)},i=function(){var
 
f=!1;g.find("."+d.errorMessageClass).each(function(){if(this.inputReferer===b[0])return
 f=a(this),!1}),f?c?h(f):f.remove():""!==c&&(e=a('<div 
class="'+d.errorMessageClass+' 
alert"></div>'),h(e),e[0].inputReferer=b[0],g.prepend(e))};if(f)a.formUtils.warn("Using
 deprecated element reference "+f.id),g=a(f),i();else if("function"==typeof 
d.inlineErrorMessageCallback){if(g=d.inlineErrorMessageCallback(b,c,d),!g)return;i()}else{var
 
j=this.getParentContainer(b);e=j.find("."+d.errorMessageClass+".help-block"),0===e.length&&(e=a("<span></span>").addClass("help-block").addClass(d.errorMessageClass),e.appendTo(j)),h(e)}},setMessageInTopOfForm:function(b,c,d,e){var
 f='<div class="{errorMessageClass} alert 
alert-danger"><strong>{errorTitle}</strong><ul>{fields}</ul></div>',g=!1;if("function"!=typeof
 d.submitErrorMessageCallback||(g=d.submitErrorMessageCallback(b,c,d))){var 
h={errorTitle:e.errorTitle,fields:"",errorMessageClass:d.errorMessageClass};a.each(c,function(a,b){h.fields+="<li>"+b+"</li>"}),a.each(h,function(a,b){f=f.replace("{"+a+"}",b)}),g?g.html(f):b.children().eq(0).before(a(f))}}};a.formUtils=a.extend(a.formUtils||{},{dialogs:b})}(a),function(a,b,c){"use
 strict";var d=0;a.fn.validateOnBlur=function(b,c){var 
d=this,e=this.find("*[data-validation]");return e.each(function(){var 
e=a(this);if(e.is("[type=radio]")){var 
f=d.find('[type=radio][name="'+e.attr("name")+'"]');f.bind("blur.validation",function(){e.validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&f.bind("click.validation",function(){e.validateInputOnBlur(b,c,!0,"click")})}}),e.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){var
 d="FORM"===this[0].nodeName?this.find("*[data-validation-event]"):this;return 
d.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(b){return
 b||(b="data-validation-help"),this.find("textarea,input").each(function(){var 
c=a(this),e="jquery_form_help_"+ 
++d,f=c.attr(b);c.removeClass("has-help-text").unbind("focus.help").unbind("blur.help"),f&&c.addClass("has-help-txt").bind("focus.help",function(){var
 b=c.parent().find("."+e);0===b.length&&(b=a("<span 
/>").addClass(e).addClass("help").addClass("help-block").text(f).hide(),c.after(b)),b.fadeIn()}).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"))&&!b.postponedValidation},a.fn.validateInputOnBlur=function(c,d,e,f){if(a.formUtils.eventType=f,this.willPostponeValidation()){var
 g=this,h=this.valAttr("postpone")||200;return 
b.postponedValidation=function(){g.validateInputOnBlur(c,d,e,f),b.postponedValidation=!1},setTimeout(function(){b.postponedValidation&&b.postponedValidation()},h),this}c=a.extend({},a.formUtils.LANG,c||{}),a.formUtils.dialogs.removeInputStylingAndMessage(this,d);var
 
i=this,j=i.closest("form"),k=a.formUtils.validateInput(i,c,d,j,f),l=function(){i.validateInputOnBlur(c,d,!1,"blur.revalidated")};return"blur"===f&&i.unbind("validation.revalidate",l).one("validation.revalidate",l),e&&i.removeKeyUpValidation(),k.shouldChangeDisplay&&(k.isValid?a.formUtils.dialogs.applyInputSuccessStyling(i,d):a.formUtils.dialogs.setInlineMessage(i,k.errorMsg,d)),!k.isValid&&e&&i.validateOnKeyUp(c,d),this},a.fn.validateOnKeyUp=function(b,c){return
 this.each(function(){var 
d=a(this);d.valAttr("has-keyup-event")||d.valAttr("has-keyup-event","true").bind("keyup.validation",function(a){9!==a.keyCode&&d.validateInputOnBlur(b,c,!1,"keyup")})}),this},a.fn.removeKeyUpValidation=function(){return
 
this.each(function(){a(this).valAttr("has-keyup-event",!1).unbind("keyup.validation")}),this},a.fn.valAttr=function(a,b){return
 
b===c?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);var 
f=function(b,e){a.inArray(b,h)<0&&h.push(b),i.push(e),e.attr("current-error",b),d&&a.formUtils.dialogs.applyInputErrorStyling(e,c)},g=[],h=[],i=[],j=this,k=function(b,d){return"submit"===d||"button"===d||"reset"===d||a.inArray(b,c.ignore||[])>-1};if(d&&a.formUtils.dialogs.removeAllMessagesAndStyling(j,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.isValid?l.isValid&&l.shouldChangeDisplay&&(d.valAttr("current-error",!1),a.formUtils.dialogs.applyInputSuccessStyling(d,c)):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,i.length>0&&d&&("top"===c.errorMessagePosition?a.formUtils.dialogs.setMessageInTopOfForm(j,h,c,b):a.each(i,function(b,d){a.formUtils.dialogs.setInlineMessage(d,d.attr("current-error"),c)}),c.scrollToTopOnError&&a.formUtils.$win.scrollTop(j.offset().top-20)),!d&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),0===i.length&&!a.formUtils.haltValidation},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,window),function(a){"use
 
strict";a.formUtils=a.extend(a.formUtils||{},{isLoadingModules:!1,loadedModules:{},loadModules:function(b,c,d){if(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())};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(){var 
a=this.src.split("form-validator")[1].split("node_modules").length>1;if(!a)return
 
c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1&&(f(b,c),!0)};g()||a(g)}}})}(a),function(a){"use
 strict";a.split=function(b,c,d){d=void 0===d||d===!0;var 
e="[,|-"+(d?"\\s":"")+"]\\s*",f=new RegExp(e,"g");if("function"!=typeof 
c){if(!b)return[];var g=[];return 
a.each(b.split(c?c:f),function(b,c){c=a.trim(c),c.length&&g.push(c)}),g}b&&a.each(b.split(f),function(b,d){if(d=a.trim(d),d.length)return
 c(d,b)})},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||{}),a(window).trigger("formValidationPluginInit",[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);e.trigger("formValidationSetup",[e,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(c){var
 d=a(this),e=function(){return 
c.stopImmediatePropagation(),!1};if(a.formUtils.haltValidation)return 
e();if(a.formUtils.isLoadingModules)return 
setTimeout(function(){d.trigger("submit.validation")},200),e();var 
f=d.isValid(b.language,b);if(a.formUtils.haltValidation)return 
e();if(!f||"function"!=typeof b.onSuccess)return f||"function"!=typeof 
b.onError?!!f||e():(b.onError(d),e());var g=b.onSuccess(d);return 
g===!1?e():void 
0}).bind("reset.validation",function(){a.formUtils.dialogs.removeAllMessagesAndStyling(e,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();var c="string"==typeof 
b.form?a(b.form):b.form;a.formUtils.$win.trigger("validatorsLoaded",[c,b])})}}(a),function(a,b){"use
 strict";var 
c=a(b);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:"inline",errorMessageTemplate:{container:'<div
 class="{errorMessageClass} alert 
alert-danger">{messages}</div>',messages:"<strong>{errorTitle}</strong><ul>{fields}</ul>",field:"<li>{msg}</li>"},scrollToTopOnError:!0,dateFormat:"yyyy-mm-dd",addValidClassOnAll:!1,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success",validateHiddenInputs:!1,inlineErrorMessageCallback:!1,submitErrorMessageCallback:!1}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:!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},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)},getValue: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},validateInput:function(b,c,d,e,f){d=d||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var
 
g=this.getValue(b);b.valAttr("skipped",!1).one("beforeValidation",function(){(b.attr("disabled")||!b.is(":visible")&&!d.validateHiddenInputs)&&b.valAttr("skipped",1)}).trigger("beforeValidation",[g,d,c]);var
 
h="true"===b.valAttr("optional"),i=!g&&h,j=b.attr(d.validationRuleAttribute),k=!0,l="",m={isValid:!0,shouldChangeDisplay:!0,errorMsg:""};if(!j||i||b.valAttr("skipped"))return
 m.shouldChangeDisplay=d.addValidClassOnAll,m;var n=b.valAttr("ignore");return 
n&&a.each(n.split(""),function(a,b){g=g.replace(new 
RegExp("\\"+b,"g"),"")}),a.split(j,function(h){0!==h.indexOf("validate_")&&(h="validate_"+h);var
 i=a.formUtils.validators[h];if(!i)throw new Error('Using undefined validator 
"'+h+'". Maybe you have forgotten to load the module that "'+h+'" belongs 
to?');if("validate_checkbox_group"===h&&(b=e.find('[name="'+b.attr("name")+'"]:eq(0)')),("keyup"!==f||i.validateOnKeyUp)&&(k=i.validatorFunction(g,b,d,c,e,f)),!k)return
 
d.validateOnBlur&&b.validateOnKeyUp(c,d),l=a.formUtils.dialogs.resolveErrorMessage(b,i,h,d,c),!1}),k===!1?(b.trigger("validation",!1),m.errorMsg=l,m.isValid=!1,m.shouldChangeDisplay=!0):null===k?m.shouldChangeDisplay=!1:(b.trigger("validation",!0),m.shouldChangeDisplay=!0),"function"==typeof
 
d.onElementValidate&&null!==l&&d.onElementValidate(m.isValid,b,e,l),b.trigger("afterValidation",[m,f]),m},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;e<c.length;e++)if(c[e].substring(0,1)===b)return 
a.formUtils.parseDateInt(d[e+1]);return-1};return 
g=m("m",k,e),f=m("d",k,e),h=m("y",k,e),!(2===g&&f>28&&(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)&&(!(this.isShortMonth(g)&&f>30||!this.isShortMonth(g)&&f>31||0===f)&&[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&&a<7||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,e<0&&(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&&c.indexOf("min")===-1&&c.indexOf("max")===-1&&(d=[c,c]),2===d.length&&(b<parseInt(d[0],10)||b>parseInt(d[1],10))?["out",d[0],d[1]]:0===c.indexOf("min")&&b<e?["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("<strong>"+b+"</strong>"),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new
 
RegExp(e,"gi"),"<strong>$&</strong>")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("<div></div>").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("<div></div>").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(n<l||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",passwordComplexityStart:"Password must contain at least 
",passwordComplexitySeparator:", ",passwordComplexityUppercaseInfo:" uppercase 
letter(s)",passwordComplexityLowercaseInfo:" lowercase 
letter(s)",passwordComplexitySpecialCharsInfo:" special 
character(s)",passwordComplexityNumericCharsInfo:" numeric 
character(s)",passwordComplexityEnd:"."}})}(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)&&d.indexOf("..")===-1&&!/[^\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||"function"==typeof
 
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(f.indexOf("number")===-1&&(f+=",number"),f.indexOf("negative")===-1&&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&&a<=e)&&(!j||a%i===0))return!0;if(f.indexOf("float")>-1&&null!==a.match(new
 
RegExp("^([0-9-]+)\\.([0-9]+)$"))&&(!h||a>=d&&a<=e)&&(!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

Modified: trunk/phpgwapi/js/jquery/validator/jsconf.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/jsconf.js        2016-10-13 12:36:01 UTC 
(rev 15822)
+++ trunk/phpgwapi/js/jquery/validator/jsconf.js        2016-10-13 13:04:59 UTC 
(rev 15823)
@@ -1,8 +1,9 @@
-/**
+/** File generated by Grunt -- do not modify
  *  JQUERY-FORM-VALIDATOR
  *
- *  @website by 
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
  *  @license MIT
- *  @version 2.2.83
  */
-!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"),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(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)});
\ No newline at end of file

Added: trunk/phpgwapi/js/jquery/validator/lang/ca.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/lang/ca.js                               
(rev 0)
+++ trunk/phpgwapi/js/jquery/validator/lang/ca.js       2016-10-13 13:04:59 UTC 
(rev 15823)
@@ -0,0 +1,9 @@
+/** File generated by Grunt -- do not modify
+ *  JQUERY-FORM-VALIDATOR
+ *
+ *  @version 2.3.49
+ *  @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,b){"use
 
strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"El
 formulari no s'ha pogut enviar!",requiredField:"Aquest camp és 
obligatori",requiredFields:"No ha contestat tots els camps 
requerits",badTime:"L'hora proporcionada no és vàlida",badEmail:"La direcció 
d'e-mail no és vàlida",badTelephone:"El número de telèfon proporcionat no és 
vàlid",badSecurityAnswer:"La resposta a la seva pregunta de seguretat és 
incorrecte",badDate:"La data proporcionada no és vàlida",lengthBadStart:"La 
seva resposta s'ha d'incloure entre ",lengthBadEnd:" 
caràcters",lengthTooLongStart:"La seva resposta ha de ser menor a 
",lengthTooShortStart:"La seva resposta ha de ser major a ",notConfirmed:"Els 
valors proporcionats no poden ser confirmats",badDomain:"Ha introduït un domini 
incorrecte",badUrl:"La URL proporcionada no és vàlida",badCustomVal:"Els valors 
proporcionats no són vàlids",andSpaces:" i espais ",badInt:"El valor 
proporcionat no és un número vàlid",badSecurityNumber:"El número de seguretat 
social proporcionat és incorrecte",badUKVatAnswer:"El número VAT proporcionat 
no és vàlid pel Regne Unit",badStrength:"La contrasenya proporcionada no és 
suficientment segura",badNumberOfSelectedOptionsStart:"Ha de seleccionar 
almenys",badNumberOfSelectedOptionsEnd:" resposta(es)",badAlphaNumeric:"El 
valor proporcionat només ha de contenir caràcters alfanumèrics (a-z i 
números)",badAlphaNumericExtra:" i",wrongFileSize:"L'arxiu que està tractant de 
pujar és massa gran (màx. %s)",wrongFileType:"Només els arxius de tipus %s 
estan permesos",groupCheckedRangeStart:"Si us plau, triï entre 
",groupCheckedTooFewStart:"Si us plau, triï almenys 
",groupCheckedTooManyStart:"Si us plau, triï un màxim de ",groupCheckedEnd:" 
element(s)",badCreditCard:"El número de targeta de crèdit proporcionat no és 
vàlid",badCVV:"CVV proporcionat no és vàlid",wrongFileDim:"Les dimensions de la 
imatge no són vàlides,",imageTooTall:"l'alçada de la imatge no pot ser major 
a",imageTooWide:"l'amplada de la imatge no pot ser major a",imageTooSmall:"la 
imatge és massa petita",min:"min.",max:"màx.",imageRatioNotAccepted:"La 
proporció de la imatge (alçada x amplada) no és vàlida"}})}(a,window)});
\ No newline at end of file

Added: trunk/phpgwapi/js/jquery/validator/lang/cs.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/lang/cs.js                               
(rev 0)
+++ trunk/phpgwapi/js/jquery/validator/lang/cs.js       2016-10-13 13:04:59 UTC 
(rev 15823)
@@ -0,0 +1,9 @@
+/** File generated by Grunt -- do not modify
+ *  JQUERY-FORM-VALIDATOR
+ *
+ *  @version 2.3.49
+ *  @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,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

Added: trunk/phpgwapi/js/jquery/validator/lang/da.js
===================================================================
--- trunk/phpgwapi/js/jquery/validator/lang/da.js                               
(rev 0)
+++ trunk/phpgwapi/js/jquery/validator/lang/da.js       2016-10-13 13:04:59 UTC 
(rev 15823)
@@ -0,0 +1,9 @@
+/** File generated by Grunt -- do not modify
+ *  JQUERY-FORM-VALIDATOR
+ *
+ *  @version 2.3.49
+ *  @website http://formvalidator.net/
+ *  @author Victor Jonsson, http://victorjonsson.se
+ *  @license MIT
+ */

@@ Diff output truncated at 153600 characters. @@



reply via email to

[Prev in Thread] Current Thread [Next in Thread]