[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [12881] update form-validator from upstream
From: |
Sigurd Nes |
Subject: |
[Fmsystem-commits] [12881] update form-validator from upstream |
Date: |
Fri, 20 Mar 2015 13:41:36 +0000 |
Revision: 12881
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=12881
Author: sigurdne
Date: 2015-03-20 13:41:35 +0000 (Fri, 20 Mar 2015)
Log Message:
-----------
update form-validator from upstream
Modified Paths:
--------------
branches/dev-syncromind/phpgwapi/js/form-validator/date.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/date.js
branches/dev-syncromind/phpgwapi/js/form-validator/file.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/file.js
branches/dev-syncromind/phpgwapi/js/form-validator/form-test.html
branches/dev-syncromind/phpgwapi/js/form-validator/html5.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/html5.js
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.js
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.min.js
branches/dev-syncromind/phpgwapi/js/form-validator/location.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/location.js
branches/dev-syncromind/phpgwapi/js/form-validator/qunit.html
branches/dev-syncromind/phpgwapi/js/form-validator/security.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/security.js
branches/dev-syncromind/phpgwapi/js/form-validator/sweden.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/sweden.js
branches/dev-syncromind/phpgwapi/js/form-validator/uk.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/uk.js
Added Paths:
-----------
branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.dev.js
branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.js
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/date.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/date.dev.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/date.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -10,7 +10,7 @@
*
* @website http://formvalidator.net/#location-validators
* @license Dual licensed under the MIT or GPL Version 2 licenses
- * @version 2.2.beta.13
+ * @version 2.2.beta.58
*/
(function($) {
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/date.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/date.js 2015-03-20
09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/date.js 2015-03-20
13:41:35 UTC (rev 12881)
@@ -1 +1 @@
-(function($){$.formUtils.addValidator({name:"time",validatorFunction:function(time){if(time.match(/^(\d{2}):(\d{2})$/)===null){return
false}else{var hours=parseInt(time.split(":")[0],10);var
minutes=parseInt(time.split(":")[1],10);if(hours>23||minutes>59){return
false}}return
true},errorMessage:"",errorMessageKey:"badTime"});$.formUtils.addValidator({name:"birthdate",validatorFunction:function(val,$el,conf){var
dateFormat="yyyy-mm-dd";if($el.valAttr("format")){dateFormat=$el.valAttr("format")}else
if(typeof conf.dateFormat!="undefined"){dateFormat=conf.dateFormat}var
inputDate=$.formUtils.parseDate(val,dateFormat);if(!inputDate){return false}var
d=new Date;var currentYear=d.getFullYear();var year=inputDate[0];var
month=inputDate[1];var day=inputDate[2];if(year===currentYear){var
currentMonth=d.getMonth()+1;if(month===currentMonth){var
currentDay=d.getDate();return day<=currentDay}else{return
month<currentMonth}}else{return
year<currentYear&&year>currentYear-124}},errorMessage:"",errorMessageKey:"badDate"})})(jQuery);
\ No newline at end of file
+(function($){$.formUtils.addValidator({name:"time",validatorFunction:function(time){if(time.match(/^(\d{2}):(\d{2})$/)===null){return
false}else{var hours=parseInt(time.split(":")[0],10);var
minutes=parseInt(time.split(":")[1],10);if(hours>23||minutes>59){return
false}}return
true},errorMessage:"",errorMessageKey:"badTime"});$.formUtils.addValidator({name:"birthdate",validatorFunction:function(val,$el,conf){var
dateFormat="yyyy-mm-dd";if($el.valAttr("format")){dateFormat=$el.valAttr("format")}else
if(typeof conf.dateFormat!="undefined"){dateFormat=conf.dateFormat}var
inputDate=$.formUtils.parseDate(val,dateFormat);if(!inputDate){return false}var
d=new Date;var currentYear=d.getFullYear();var year=inputDate[0];var
month=inputDate[1];var day=inputDate[2];if(year===currentYear){var
currentMonth=d.getMonth()+1;if(month===currentMonth){var
currentDay=d.getDate();return day<=currentDay}else{return
month<currentMonth}}else{return
year<currentYear&&year>currentYear-124}},errorMessage:"",errorMessageKey:"badDate"})})(jQuery);
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/file.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/file.dev.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/file.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -10,16 +10,18 @@
*
* @website http://formvalidator.net/
* @license Dual licensed under the MIT or GPL Version 2 licenses
- * @version 2.2.beta.13
+ * @version 2.2.beta.58
*/
(function($, window) {
+ 'use strict';
+
var SUPPORTS_FILE_READER = typeof window.FileReader != 'undefined',
/**
* @return {Array}
*/
- _getTypes = function($input) {
+ _getTypes = function($input) {
var allowedTypes = $.split( ($input.valAttr('allowing') ||
'').toLowerCase() );
if( $.inArray('jpg', allowedTypes) > -1 && $.inArray('jpeg',
allowedTypes) == -1)
@@ -30,9 +32,21 @@
},
/**
+ * @param {Object} obj
+ * @param {String} key
+ * @param {String} insert
+ * @param {Object} lang
+ */
+ _generateErrorMsg = function(obj, key, insert, lang) {
+ var msg = lang[key];
+ obj.errorMessageKey = ''; // only use message attached to this
object
+ obj.errorMessage = msg.replace('\%s', insert);
+ },
+
+ /**
* @param {String} msg
*/
- _log = function(msg) {
+ _log = function(msg) {
if( window.console && window.console.log ) {
window.console.log(msg);
}
@@ -43,37 +57,41 @@
*/
$.formUtils.addValidator({
name : 'mime',
- validatorFunction : function(str, $input) {
- var files = $input.get(0).files || [];
+ validatorFunction : function(str, $input, conf, language) {
if( SUPPORTS_FILE_READER ) {
var valid = true,
+ files = $input.get(0).files || [],
mime = '',
allowedTypes = _getTypes($input);
- $.each(files, function(i, file) {
- valid = false;
- mime = file.type || '';
- $.each(allowedTypes, function(j, type) {
- valid = mime.indexOf(type) > -1;
- if( valid ) {
- return false;
- }
+ if( files.length ) {
+ $.each(files, function(i, file) {
+ valid = false;
+ mime = file.type || '';
+ $.each(allowedTypes, function(j, type) {
+ valid = mime.indexOf(type) > -1;
+ if( valid ) {
+ return false;
+ }
+ });
+ return valid;
});
- return valid;
- });
- if( !valid ) {
- _log('Trying to upload a file with mime type '+mime+'
which is not allowed');
+ if( !valid ) {
+ _log('Trying to upload a file with mime type '+mime+'
which is not allowed');
+ _generateErrorMsg(this, 'wrongFileType',
allowedTypes.join(', '), language);
+ }
}
+
return valid;
-
+
} else {
_log('FileReader not supported by browser, will check file
extension');
return
$.formUtils.validators.validate_extension.validatorFunction(str, $input);
}
},
- errorMessage : 'The file you are trying to upload is of wrong type',
+ errorMessage : '',
errorMessageKey: 'wrongFileType'
});
@@ -82,21 +100,24 @@
*/
$.formUtils.addValidator({
name : 'extension',
- validatorFunction : function(value, $input) {
+ validatorFunction : function(value, $input, conf, language) {
var valid = true,
- types = _getTypes($input);
+ _this = this,
+ allowedTypes = _getTypes($input);
- $.each($input.get(0).files || [], function(i, file) {
- var val = file.value,
+ $.each($input.get(0).files || [value], function(i, file) {
+ var val = typeof file == 'string' ? file : (file.value ||
file.fileName || file.name),
ext = val.substr( val.lastIndexOf('.')+1 );
- if( $.inArray(ext.toLowerCase(), types) == -1 ) {
+
+ if( $.inArray(ext.toLowerCase(), allowedTypes) == -1 ) {
valid = false;
+ _generateErrorMsg(_this, 'wrongFileType',
allowedTypes.join(', '), language);
return false;
}
});
return valid;
},
- errorMessage : 'The file you are trying to upload is of wrong type',
+ errorMessage : '',
errorMessageKey: 'wrongFileType'
});
@@ -105,7 +126,7 @@
*/
$.formUtils.addValidator({
name : 'size',
- validatorFunction : function(val, $input) {
+ validatorFunction : function(val, $input, conf, language) {
var maxSize = $input.valAttr('max-size');
if( !maxSize ) {
_log('Input "'+$input.attr('name')+'" is missing
data-validation-max-size attribute');
@@ -116,13 +137,18 @@
var maxBytes = $.formUtils.convertSizeNameToBytes(maxSize),
valid = true;
+
$.each($input.get(0).files || [], function(i, file) {
valid = file.size <= maxBytes;
return valid;
});
+
+ if( !valid ) {
+ _generateErrorMsg(this, 'wrongFileSize', maxSize, language);
+ }
return valid;
},
- errorMessage : 'The file you are trying to upload is too large',
+ errorMessage : '',
errorMessageKey: 'wrongFileSize'
});
@@ -162,7 +188,7 @@
$(this)
.removeClass('error')
.parent()
- .find('.form-error').remove();
+ .find('.form-error').remove();
});
});
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/file.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/file.js 2015-03-20
09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/file.js 2015-03-20
13:41:35 UTC (rev 12881)
@@ -1 +1 @@
-(function($,window){var SUPPORTS_FILE_READER=typeof
window.FileReader!="undefined",_getTypes=function($input){var
allowedTypes=$.split(($input.valAttr("allowing")||"").toLowerCase());if($.inArray("jpg",allowedTypes)>-1&&$.inArray("jpeg",allowedTypes)==-1)allowedTypes.push("jpeg");else
if($.inArray("jpeg",allowedTypes)>-1&&$.inArray("jpg",allowedTypes)==-1)allowedTypes.push("jpg");return
allowedTypes},_log=function(msg){if(window.console&&window.console.log){window.console.log(msg)}};$.formUtils.addValidator({name:"mime",validatorFunction:function(str,$input){var
files=$input.get(0).files||[];if(SUPPORTS_FILE_READER){var
valid=true,mime="",allowedTypes=_getTypes($input);$.each(files,function(i,file){valid=false;mime=file.type||"";$.each(allowedTypes,function(j,type){valid=mime.indexOf(type)>-1;if(valid){return
false}});return valid});if(!valid){_log("Trying to upload a file with mime
type "+mime+" which is not allowed")}return valid}else{_log("FileReader not
supported by browser, will check file extension");return
$.formUtils.validators.validate_extension.validatorFunction(str,$input)}},errorMessage:"The
file you are trying to upload is of wrong
type",errorMessageKey:"wrongFileType"});$.formUtils.addValidator({name:"extension",validatorFunction:function(value,$input){var
valid=true,types=_getTypes($input);$.each($input.get(0).files||[],function(i,file){var
val=file.value,ext=val.substr(val.lastIndexOf(".")+1);if($.inArray(ext.toLowerCase(),types)==-1){valid=false;return
false}});return valid},errorMessage:"The file you are trying to upload is of
wrong
type",errorMessageKey:"wrongFileType"});$.formUtils.addValidator({name:"size",validatorFunction:function(val,$input){var
maxSize=$input.valAttr("max-size");if(!maxSize){_log('Input
"'+$input.attr("name")+'" is missing data-validation-max-size
attribute');return true}else if(!SUPPORTS_FILE_READER){return true}var
maxBytes=$.formUtils.convertSizeNameToBytes(maxSize),valid=true;$.each($input.get(0).files||[],function(i,file){valid=file.size<=maxBytes;return
valid});return valid},errorMessage:"The file you are trying to upload is too
large",errorMessageKey:"wrongFileSize"});$.formUtils.convertSizeNameToBytes=function(sizeName){sizeName=sizeName.toUpperCase();if(sizeName.substr(sizeName.length-1,1)=="M"){return
parseInt(sizeName.substr(0,sizeName.length-1),10)*1024*1024}else
if(sizeName.substr(sizeName.length-2,2)=="MB"){return
parseInt(sizeName.substr(0,sizeName.length-2),10)*1024*1024}else
if(sizeName.substr(sizeName.length-2,2)=="KB"){return
parseInt(sizeName.substr(0,sizeName.length-2),10)*1024}else
if(sizeName.substr(sizeName.length-1,1)=="B"){return
parseInt(sizeName.substr(0,sizeName.length-1),10)}else{return
parseInt(sizeName,10)}};$(window).one("validatorsLoaded
formValidationSetup",function(evt,$form){var
$inputs;if($form){$inputs=$form.find('input[type="file"]')}else{$inputs=$('input[type="file"]')}$inputs.filter("*[data-validation]").bind("change",function(){$(this).removeClass("error").parent().find(".form-error").remove()})})})(jQuery,window);
\ No newline at end of file
+(function($,window){"use strict";var SUPPORTS_FILE_READER=typeof
window.FileReader!="undefined",_getTypes=function($input){var
allowedTypes=$.split(($input.valAttr("allowing")||"").toLowerCase());if($.inArray("jpg",allowedTypes)>-1&&$.inArray("jpeg",allowedTypes)==-1)allowedTypes.push("jpeg");else
if($.inArray("jpeg",allowedTypes)>-1&&$.inArray("jpg",allowedTypes)==-1)allowedTypes.push("jpg");return
allowedTypes},_generateErrorMsg=function(obj,key,insert,lang){var
msg=lang[key];obj.errorMessageKey="";obj.errorMessage=msg.replace("%s",insert)},_log=function(msg){if(window.console&&window.console.log){window.console.log(msg)}};$.formUtils.addValidator({name:"mime",validatorFunction:function(str,$input,conf,language){if(SUPPORTS_FILE_READER){var
valid=true,files=$input.get(0).files||[],mime="",allowedTypes=_getTypes($input);if(files.length){$.each(files,function(i,file){valid=false;mime=file.type||"";$.each(allowedTypes,function(j,type){valid=mime.indexOf(type)>-1;if(valid){return
false}});return valid});if(!valid){_log("Trying to upload a file with mime
type "+mime+" which is not
allowed");_generateErrorMsg(this,"wrongFileType",allowedTypes.join(",
"),language)}}return valid}else{_log("FileReader not supported by browser, will
check file extension");return
$.formUtils.validators.validate_extension.validatorFunction(str,$input)}},errorMessage:"",errorMessageKey:"wrongFileType"});$.formUtils.addValidator({name:"extension",validatorFunction:function(value,$input,conf,language){var
valid=true,_this=this,allowedTypes=_getTypes($input);$.each($input.get(0).files||[value],function(i,file){var
val=typeof
file=="string"?file:file.value||file.fileName||file.name,ext=val.substr(val.lastIndexOf(".")+1);if($.inArray(ext.toLowerCase(),allowedTypes)==-1){valid=false;_generateErrorMsg(_this,"wrongFileType",allowedTypes.join(",
"),language);return false}});return
valid},errorMessage:"",errorMessageKey:"wrongFileType"});$.formUtils.addValidator({name:"size",validatorFunction:function(val,$input,conf,language){var
maxSize=$input.valAttr("max-size");if(!maxSize){_log('Input
"'+$input.attr("name")+'" is missing data-validation-max-size
attribute');return true}else if(!SUPPORTS_FILE_READER){return true}var
maxBytes=$.formUtils.convertSizeNameToBytes(maxSize),valid=true;$.each($input.get(0).files||[],function(i,file){valid=file.size<=maxBytes;return
valid});if(!valid){_generateErrorMsg(this,"wrongFileSize",maxSize,language)}return
valid},errorMessage:"",errorMessageKey:"wrongFileSize"});$.formUtils.convertSizeNameToBytes=function(sizeName){sizeName=sizeName.toUpperCase();if(sizeName.substr(sizeName.length-1,1)=="M"){return
parseInt(sizeName.substr(0,sizeName.length-1),10)*1024*1024}else
if(sizeName.substr(sizeName.length-2,2)=="MB"){return
parseInt(sizeName.substr(0,sizeName.length-2),10)*1024*1024}else
if(sizeName.substr(sizeName.length-2,2)=="KB"){return
parseInt(sizeName.substr(0,sizeName.length-2),10)*1024}else
if(sizeName.substr(sizeName.length-1,1)=="B"){return
parseInt(sizeName.substr(0,sizeName.length-1),10)}else{return
parseInt(sizeName,10)}};$(window).one("validatorsLoaded
formValidationSetup",function(evt,$form){var
$inputs;if($form){$inputs=$form.find('input[type="file"]')}else{$inputs=$('input[type="file"]')}$inputs.filter("*[data-validation]").bind("change",function(){$(this).removeClass("error").parent().find(".form-error").remove()})})})(jQuery,window);
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/form-test.html
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/form-test.html
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/form-test.html
2015-03-20 13:41:35 UTC (rev 12881)
@@ -71,7 +71,7 @@
<form action="" id="form-a" role="form">
<div class="form-group">
<label class="control-label" for="inline-suggestions">Inline
suggestions</label>
- <input name="inline suggestions" type="text"
id="inline-suggestions" class="form-control" data-suggestions="Monkey, Horse,
Fox, Tiger, Elephant" />
+ <input name="inline suggestions" type="text"
id="inline-suggestions" class="form-control" data-suggestions="Monkey, Horse,
Hound, Fox, Tiger, Elephant" />
</div>
<div class="form-group">
@@ -88,8 +88,8 @@
<label class="control-label">Year</label>
<input name="birth" class="form-control"
data-validation="date"
- data-validation-format="yyyy-mm-dd"
- data-suggestions="2014-01-15,2014-01-16,2014-01-17" />
+ data-validation-format="yyyy/mm/dd"
+ data-suggestions="2014/01/15,2014/01/16,2014/01/17" />
</div>
<div class="form-group">
@@ -164,7 +164,7 @@
<div class="form-group">
<label class="control-label">Server validation</label>
<input class="form-control" name="code" value="secret"
- data-validation-help="The word is "secret""
+ data-validation-helssp="The word is "secret""
data-validation="server"
data-validation-url="http://formvalidator.net/validate-email.php" />
</div>
@@ -172,12 +172,20 @@
<label class="control-label">File validation</label>
<input type="file" name="some-file1" class="form-control"
data-validation="size mime required"
- data-validation-size-error-msg="The file cant be larger
than 400kb"
+ data-validation-error-msg-size="The file cant be larger
than 400kb"
data-validation-error-msg="You must upload an image file
(max 400 kb)"
data-validation-allowing="jpg, png, ico"
data-validation-max-size="400kb" />
</div>
<div class="form-group">
+ <label class="control-label">File name</label>
+ <input type="text" name="some-file2" class="form-control"
+ data-validation="extension required"
+ data-validation-error-msg="You must write a file name with
extension jpg|png|ico"
+ data-validation-allowing="jpg, png, ico"
+ />
+ </div>
+ <div class="form-group">
<label class="control-label">
Callback validation, set this value to "1" and
validation will fail
@@ -205,16 +213,17 @@
<input type="checkbox" name="box" value="5" /> 5
</label>
</div>
+
<p style="line-height: 200%">
<input type="submit" class="button">
<br />
<button class="button" type="button"
- onclick="alert('From a is ' + ( $('#form-a').isValid({},
{}, false) ? 'VALID':'NOT VALID'));">
+ onclick="alert('Form a is ' + ( $('#form-a').isValid({},
{}, false) ? 'VALID':'NOT VALID'));">
Test validation via js (<strong>without error
messages</strong>)
</button>
<br />
<button class="button" type="button"
- onclick="alert('From a is ' + ( $('#form-a').isValid() ?
'VALID':'NOT VALID'));">
+ onclick="alert('Form a is ' + ( $('#form-a').isValid() ?
'VALID':'NOT VALID'));">
Test validation via js (showing error messages)
</button>
<br />
@@ -372,9 +381,7 @@
}
},
onError : function($form) {
- if( !$.formUtils.haltValidation ) {
- alert('Invalid '+$form.attr('id'));
- }
+ alert('Invalid '+$form.attr('id'));
},
onSuccess : function($form) {
alert('Valid '+$form.attr('id'));
@@ -394,10 +401,10 @@
$.formUtils.loadModules('date'+dev+'.js', false, false);
$('input')
- .on('zbeforeValidation', function() {
+ .on('beforeValidation', function() {
console.log('About to validate input "'+this.name+'"');
})
- .on('validationz', function(evt, isValid) {
+ .on('validation', function(evt, isValid) {
var validationResult = '';
if( isValid === null ) {
validationResult = 'not validated';
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/html5.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/html5.dev.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/html5.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -17,7 +17,7 @@
*
* @website http://formvalidator.net/
* @license Dual licensed under the MIT or GPL Version 2 licenses
- * @version 2.2.beta.13
+ * @version 2.2.beta.58
*/
(function($, window) {
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/html5.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/html5.js 2015-03-20
09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/html5.js 2015-03-20
13:41:35 UTC (rev 12881)
@@ -1 +1 @@
-(function($,window){"use strict";var SUPPORTS_PLACEHOLDER="placeholder"in
document.createElement("INPUT"),SUPPORTS_DATALIST="options"in
document.createElement("DATALIST");$(window).bind("validatorsLoaded
formValidationSetup",function(evt,$form){if(!$form){$form=$("form")}var
hasLoadedDateModule=false;$form.each(function(){var
$f=$(this),$formInputs=$f.find("input,textarea,select"),foundHtml5Rule=false;$formInputs.each(function(){var
validation=[],$input=$(this),isRequired=$input.attr("required"),attrs={};switch(($input.attr("type")||"").toLowerCase()){case"time":validation.push("time");if(!$.formUtils.validators.validate_date&&!hasLoadedDateModule){hasLoadedDateModule=true;$.formUtils.loadModules("date")}break;case"url":validation.push("url");break;case"email":validation.push("email");break;case"date":validation.push("date");break;case"number":validation.push("number");var
max=$input.attr("max"),min=$input.attr("min");if(min||max){if(!min)min=0;if(!max)max=9007199254740992;attrs["data-validation-allowing"]="range["+min+";"+max+"]";if(min.indexOf("-")===0||max.indexOf("-")===0){attrs["data-validation-allowing"]+=",negative"}if(min.indexOf(".")>-1||max.indexOf(".")>-1){attrs["data-validation-allowing"]+=",float"}}break}if($input.attr("pattern")){validation.push("custom");attrs["data-validation-regexp"]=$input.attr("pattern")}if($input.attr("maxlength")){validation.push("length");attrs["data-validation-length"]="max"+$input.attr("maxlength")}if(!SUPPORTS_DATALIST&&$input.attr("list")){var
suggestions=[];$("#"+$input.attr("list")+" option").each(function(){var
$opt=$(this);suggestions.push($opt.attr("value")||$opt.text())});$.formUtils.suggest($input,suggestions)}if(validation.length){if(!isRequired){attrs["data-validation-optional"]="true"}foundHtml5Rule=true;$input.attr("data-validation",validation.join("
"));$.each(attrs,function(attrName,attrVal){$input.attr(attrName,attrVal)})}});if(foundHtml5Rule){$f.trigger("html5ValidationAttrsFound")}if(!SUPPORTS_PLACEHOLDER){$formInputs.filter("input[placeholder]").each(function(){this.defaultValue=this.getAttribute("placeholder");$(this).bind("focus",function(){if(this.value==this.defaultValue){this.value="";$(this).removeClass("showing-placeholder")}}).bind("blur",function(){if($.trim(this.value)==""){this.value=this.defaultValue;$(this).addClass("showing-placeholder")}})})}})})})(jQuery,window);
\ No newline at end of file
+(function($,window){"use strict";var SUPPORTS_PLACEHOLDER="placeholder"in
document.createElement("INPUT"),SUPPORTS_DATALIST="options"in
document.createElement("DATALIST");$(window).bind("validatorsLoaded
formValidationSetup",function(evt,$form){if(!$form){$form=$("form")}var
hasLoadedDateModule=false;$form.each(function(){var
$f=$(this),$formInputs=$f.find("input,textarea,select"),foundHtml5Rule=false;$formInputs.each(function(){var
validation=[],$input=$(this),isRequired=$input.attr("required"),attrs={};switch(($input.attr("type")||"").toLowerCase()){case"time":validation.push("time");if(!$.formUtils.validators.validate_date&&!hasLoadedDateModule){hasLoadedDateModule=true;$.formUtils.loadModules("date")}break;case"url":validation.push("url");break;case"email":validation.push("email");break;case"date":validation.push("date");break;case"number":validation.push("number");var
max=$input.attr("max"),min=$input.attr("min");if(min||max){if(!min)min=0;if(!max)max=9007199254740992;attrs["data-validation-allowing"]="range["+min+";"+max+"]";if(min.indexOf("-")===0||max.indexOf("-")===0){attrs["data-validation-allowing"]+=",negative"}if(min.indexOf(".")>-1||max.indexOf(".")>-1){attrs["data-validation-allowing"]+=",float"}}break}if($input.attr("pattern")){validation.push("custom");attrs["data-validation-regexp"]=$input.attr("pattern")}if($input.attr("maxlength")){validation.push("length");attrs["data-validation-length"]="max"+$input.attr("maxlength")}if(!SUPPORTS_DATALIST&&$input.attr("list")){var
suggestions=[];$("#"+$input.attr("list")+" option").each(function(){var
$opt=$(this);suggestions.push($opt.attr("value")||$opt.text())});$.formUtils.suggest($input,suggestions)}if(validation.length){if(!isRequired){attrs["data-validation-optional"]="true"}foundHtml5Rule=true;$input.attr("data-validation",validation.join("
"));$.each(attrs,function(attrName,attrVal){$input.attr(attrName,attrVal)})}});if(foundHtml5Rule){$f.trigger("html5ValidationAttrsFound")}if(!SUPPORTS_PLACEHOLDER){$formInputs.filter("input[placeholder]").each(function(){this.defaultValue=this.getAttribute("placeholder");$(this).bind("focus",function(){if(this.value==this.defaultValue){this.value="";$(this).removeClass("showing-placeholder")}}).bind("blur",function(){if($.trim(this.value)==""){this.value=this.defaultValue;$(this).addClass("showing-placeholder")}})})}})})})(jQuery,window);
Modified:
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -5,7 +5,7 @@
*
* @website http://formvalidator.net/
* @license Dual licensed under the MIT or GPL Version 2 licenses
-* @version 2.2.beta.13
+* @version 2.2.beta.58
*/
(function($) {
@@ -13,14 +13,17 @@
var $window = $(window),
_applyErrorStyle = function($elem, conf) {
- var $parent = $elem.parent();
$elem
.addClass(conf.errorElementClass)
.removeClass('valid');
- if($parent.hasClass("input-group")) $parent = $parent.parent();
+
+ var $parent = $elem.parent();
+ if($parent.hasClass("input-group"))
+ $parent = $parent.parent();
- $parent.addClass('has-error') .removeClass('has-success');
//twitter bs
-
+ $parent
+ .addClass(conf.inputParentClassOnError)
+ .removeClass(conf.inputParentClassOnSuccess);
if(conf.borderColorOnError !== '') {
$elem.css('border-color', conf.borderColorOnError);
@@ -28,25 +31,29 @@
},
_removeErrorStyle = function($elem, conf) {
$elem.each(function() {
- _setInlineErrorMessage($(this), '', conf,
conf.errorMessagePosition);
- var $parent = $(this).parent();
-
- if($parent.hasClass("input-group")) $parent = $parent.parent();
- $(this)
+ var $this = $(this),
+ $parent = $this.parent();
+
+ if($parent.hasClass("input-group"))
+ $parent = $parent.parent();
+
+ _setInlineErrorMessage($this, '', conf,
conf.errorMessagePosition);
+
+ $this
.removeClass('valid')
.removeClass(conf.errorElementClass)
.css('border-color', '');
+
$parent
- .removeClass('has-error')
- .removeClass('has-success')
- .find('.'+conf.errorMessageClass) // remove inline error
message
+ .removeClass(conf.inputParentClassOnError)
+ .removeClass(conf.inputParentClassOnSuccess)
+ .find('.'+conf.errorMessageClass) // remove inline span
holding error message
.remove();
});
},
_setInlineErrorMessage = function($input, mess, conf,
$messageContainer) {
var custom = _getInlineErrorElement($input);
- var $parent = $input.parent();
- if($parent.hasClass("input-group")) $parent = $parent.parent();
+
if( custom ) {
custom.innerHTML = mess;
}
@@ -71,6 +78,8 @@
}
}
else {
+ var $parent = $input.parent();
+ if($parent.hasClass("input-group")) $parent =
$parent.parent();
var $mess =
$parent.find('.'+conf.errorMessageClass+'.help-block');
if( $mess.length == 0 ) {
$mess =
$('<span></span>').addClass('help-block').addClass(conf.errorMessageClass);
@@ -106,6 +115,13 @@
.bind('blur.validation', function() {
$(this).validateInputOnBlur(language, settings, true, 'blur');
});
+ if(settings.validateCheckboxRadioOnClick) {
+ // bind click event to validate on click for radio & checkboxes for
nice UX
+
this.find('input[type=checkbox][data-validation],input[type=radio][data-validation]')
+ .bind('click.validation', function() {
+ $(this).validateInputOnBlur(language, settings, true, 'click');
+ });
+ }
return this;
};
@@ -120,7 +136,7 @@
this.find('input[data-validation][data-validation-event],textarea[data-validation][data-validation-event],select[data-validation][data-validation-event]')
.each(function(){
var $el = $(this),
- etype = $el.attr("data-validation-event");
+ etype = $el.valAttr("event");
if (etype){
$el.bind(etype + ".validation",
function(){
$(this).validateInputOnBlur(language, settings,
true, etype);
@@ -198,6 +214,7 @@
* @return {jQuery}
*/
$.fn.validateInputOnBlur = function(language, conf, attachKeyupEvent,
eventType) {
+
$.formUtils.eventType = eventType;
if( (this.valAttr('suggestion-nr') || this.valAttr('postpone') ||
this.hasClass('hasDatepicker')) && !window.postponedValidation ) {
@@ -235,7 +252,8 @@
$elem
.addClass('valid')
.parent()
- .addClass('has-success'); // twitter bs
+ .addClass(conf.inputParentClassOnSuccess);
+
} else if(validation !== null) {
_applyErrorStyle($elem, conf);
@@ -274,7 +292,7 @@
};
/**
- * Function that validate all inputs in given element
+ * Function that validates all inputs in active form
*
* @param {Object} [language]
* @param {Object} [conf]
@@ -294,6 +312,14 @@
language = $.extend({}, $.formUtils.LANG, language || {});
displayError = displayError !== false;
+ if($.formUtils.errorDisplayPreventedWhenHalted) {
+ // isValid() was called programmatically with argument
displayError set
+ // to false when the validation was halted by any of the validators
+ delete $.formUtils.errorDisplayPreventedWhenHalted
+ displayError = false;
+ }
+
+
$.formUtils.isValidatingEntireForm = true;
$.formUtils.haltValidation = false;
@@ -304,18 +330,18 @@
* @para {jQuery} $elem
*/
var addErrorMessage = function(mess, $elem) {
- // validate server side will return null as error message before
the server is requested
- if(mess !== null) {
- 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 )
+ _applyErrorStyle($elem, conf);
},
+ /** Holds inputs (of type checkox or radio) already validated, to
prevent recheck of mulitple checkboxes & radios */
+ checkedInputs = [],
+
/** Error messages for this validation */
errorMessages = [],
@@ -347,10 +373,16 @@
// Validate element values
$form.find('input,textarea,select').filter(':not([type="submit"],[type="button"])').each(function()
{
- var $elem = $(this);
- var elementType = $elem.attr('type');
- if (!ignoreInput($elem.attr('name'), elementType)) {
+ var $elem = $(this),
+ elementType = $elem.attr('type'),
+ isCheckboxOrRadioBtn = elementType == 'radio' || elementType
== 'checkbox',
+ elementName = $elem.attr('name');
+ if (!ignoreInput(elementName, elementType) &&
(!isCheckboxOrRadioBtn || $.inArray(elementName, checkedInputs) < 0) ) {
+
+ if( isCheckboxOrRadioBtn )
+ checkedInputs.push(elementName);
+
var validation = $.formUtils.validateInput(
$elem,
language,
@@ -359,22 +391,18 @@
'submit'
);
- // Run element validation callback
- if( typeof conf.onElementValidate == 'function' ) {
- conf.onElementValidate((validation === true), $elem,
$form, validation);
- }
-
- if(validation !== true) {
- addErrorMessage(validation, $elem);
- } else {
- $elem
- .valAttr('current-error', false)
- .addClass('valid')
- .parent()
+ if(validation != null) {
+ if(validation !== true) {
+ addErrorMessage(validation, $elem);
+ } else {
+ $elem
+ .valAttr('current-error', false)
+ .addClass('valid')
+ .parent()
.addClass('has-success');
+ }
}
}
-
});
// Run validation callback
@@ -422,6 +450,10 @@
return false;
}
+ if( !displayError && $.formUtils.haltValidation ) {
+ $.formUtils.errorDisplayPreventedWhenHalted = true;
+ }
+
return !$.formUtils.haltValidation;
};
@@ -468,32 +500,34 @@
/**
* A bit smarter split function
+ * delimiter can be space, comma, dash or pipe
* @param {String} val
* @param {Function|String} [func]
- * @param {String} [delim]
* @returns {Array|void}
*/
- $.split = function(val, func, delim) {
+ $.split = function(val, func) {
if( typeof func != 'function' ) {
- // return string
+ // return array
if( !val )
return [];
var values = [];
- $.each(val.split(func ? func:','), function(i,str) {
- str = $.trim(str);
- if( str.length )
- values.push(str);
- });
+ $.each(val.split(func ? func: /[,|\-\s]\s*/g ),
+ function(i,str) {
+ str = $.trim(str);
+ if( str.length )
+ values.push(str);
+ }
+ );
return values;
} else if( val ) {
- // use callback on each
- if( !delim )
- delim = ',';
- $.each(val.split(delim), function(i, str) {
- str = $.trim(str);
- if( str.length )
- return func(str, i);
- });
+ // exec callback func on each
+ $.each(val.split(/[,|\-\s]\s*/g),
+ function(i, str) {
+ str = $.trim(str);
+ if( str.length )
+ return func(str, i);
+ }
+ );
}
};
@@ -510,6 +544,7 @@
*/
validateOnEvent : true,
validateOnBlur : true,
+ validateCheckboxRadioOnClick : true,
showHelpOnFocus : true,
addSuggestions : true,
modules : '',
@@ -517,7 +552,7 @@
language : false,
onSuccess : false,
onError : false,
- onElementValidate : false
+ onElementValidate : false,
});
conf = $.extend(defaultConf, conf || {});
@@ -543,22 +578,34 @@
$form.bind('submit.validation', function() {
var $form = $(this);
+ if( $.formUtils.haltValidation ) {
+ // pressing several times on submit button while
validation is halted
+ return false;
+ }
+
if($.formUtils.isLoadingModules) {
setTimeout(function() {
$form.trigger('submit.validation');
}, 200);
return false;
}
+
var valid = $form.isValid(conf.language, conf);
- if( valid && typeof conf.onSuccess == 'function') {
- var callbackResponse = conf.onSuccess($form);
- if( callbackResponse === false )
- return false;
- } else if ( !valid && typeof conf.onError == 'function' ) {
- conf.onError($form);
+
+ if( $.formUtils.haltValidation ) {
+ // Validation got halted by one of the validators
return false;
} else {
- return valid;
+ if( valid && typeof conf.onSuccess == 'function') {
+ var callbackResponse = conf.onSuccess($form);
+ if( callbackResponse === false )
+ return false;
+ } else if ( !valid && typeof conf.onError == 'function' ) {
+ conf.onError($form);
+ return false;
+ } else {
+ return valid;
+ }
}
})
.bind('reset.validation', function() {
@@ -580,10 +627,9 @@
$form.validateOnBlur(conf.language, conf);
})
}
- if( conf.validateOnEvent ){
- $form.validateOnEvent(conf.language, conf);
- }
-
+ if( conf.validateOnEvent ){
+ $form.validateOnEvent(conf.language, conf);
+ }
});
if( conf.modules != '' ) {
@@ -620,7 +666,9 @@
scrollToTopOnError : true,
dateFormat : 'yyyy-mm-dd',
addValidClassOnAll : false, // whether or not to apply
class="valid" even if the input wasn't validated
- decimalSeparator : '.'
+ decimalSeparator : '.',
+ inputParentClassOnError : 'has-error', // twitter-bootstrap
default class name
+ inputParentClassOnSuccess : 'has-success' // twitter-bootstrap
default class name
}
},
@@ -853,12 +901,13 @@
var validator = $.formUtils.validators[rule];
if( validator && typeof validator['validatorFunction'] ==
'function' ) {
+
// special change of element for checkbox_group rule
if ( rule == 'validate_checkbox_group' ) {
- // set element to first in group, so error msg is set
only once
+ // set element to first in group, so error msg attr
doesn't need to be set on all elements in group
$elem = $("[name='"+$elem.attr('name')+"']:eq(0)");
}
-
+
var isValid = null;
if( eventContext != 'keyup' || validator.validateOnKeyUp )
{
isValid = validator.validatorFunction(value, $elem,
conf, language, $form);
@@ -886,15 +935,24 @@
}, ' ');
+ var result;
+
if( typeof validationErrorMsg == 'string' ) {
$elem.trigger('validation', false);
- return validationErrorMsg;
+ result = validationErrorMsg;
} else if( validationErrorMsg === null && !conf.addValidClassOnAll
) {
- return null;
+ result = null;
} else {
$elem.trigger('validation', true);
- return true;
+ result = true;
}
+
+ // Run element validation callback
+ if( typeof conf.onElementValidate == 'function' && result !== null
) {
+ conf.onElementValidate((result === true), $elem, $form,
validationErrorMsg);
+ }
+
+ return result;
},
/**
@@ -908,7 +966,7 @@
parseDate : function(val, dateFormat) {
var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0,1),
regexp = '^',
- formatParts = dateFormat.split(divider),
+ formatParts = dateFormat.split(divider || null),
matches, day, month, year;
$.each(formatParts, function(i, part) {
@@ -1019,7 +1077,7 @@
numericRangeCheck : function(value, rangeAllowed)
{
// split by dash
- var range = $.split(rangeAllowed, '-');
+ var range = $.split(rangeAllowed);
// min or max
var minmax = parseInt(rangeAllowed.substr(3),10)
// range ?
@@ -1287,8 +1345,8 @@
badNumberOfSelectedOptionsEnd : ' answers',
badAlphaNumeric : 'The input value can only contain alphanumeric
characters ',
badAlphaNumericExtra: ' and ',
- wrongFileSize : 'The file you are trying to upload is too large',
- wrongFileType : 'The file you are trying to upload is of wrong
type',
+ 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 ',
@@ -1314,7 +1372,7 @@
var emailParts = email.toLowerCase().split('@');
if( emailParts.length == 2 ) {
return
$.formUtils.validators.validate_domain.validatorFunction(emailParts[1]) &&
- !(/[^\w\+\.\-]/.test(emailParts[0]));
+ !(/[^\w\+\.\-]/.test(emailParts[0])) &&
emailParts[0].length > 0;
}
return false;
@@ -1328,97 +1386,14 @@
*/
$.formUtils.addValidator({
name : 'domain',
- validatorFunction : function(val, $input) {
-
- var topDomains = ['.ac', '.ad', '.ae', '.aero', '.af', '.ag',
'.ai', '.al', '.am', '.an', '.ao',
- '.aq', '.ar', '.arpa', '.as', '.asia', '.at', '.au',
'.aw', '.ax', '.az', '.ba', '.bb',
- '.bd', '.be', '.bf', '.bg', '.bh', '.bi', '.bike',
'.biz', '.bj', '.bm', '.bn', '.bo',
- '.br', '.bs', '.bt', '.bv', '.bw', '.by', '.bz',
'.ca', '.camera', '.cat', '.cc', '.cd',
- '.cf', '.cg', '.ch', '.ci', '.ck', '.cl', '.clothing',
'.cm', '.cn', '.co', '.com',
- '.construction', '.contractors', '.coop', '.cr',
'.cu', '.cv', '.cw', '.cx', '.cy', '.cz',
- '.de', '.diamonds', '.directory', '.dj', '.dk', '.dm',
'.do', '.dz', '.ec', '.edu', '.ee',
- '.eg', '.enterprises', '.equipment', '.er', '.es',
'.estate', '.et', '.eu', '.fi', '.fj',
- '.fk', '.fm', '.fo', '.fr', '.ga', '.gallery', '.gb',
'.gd', '.ge', '.gf', '.gg', '.gh',
- '.gi', '.gl', '.gm', '.gn', '.gov', '.gp', '.gq',
'.gr', '.graphics', '.gs', '.gt', '.gu',
- '.guru', '.gw', '.gy', '.hk', '.hm', '.hn',
'.holdings', '.hr', '.ht', '.hu', '.id', '.ie',
- '.il', '.im', '.in', '.info', '.int', '.io', '.iq',
'.ir', '.is', '.it', '.je', '.jm', '.jo',
- '.jobs', '.jp', '.ke', '.kg', '.kh', '.ki',
'.kitchen', '.km', '.kn', '.kp', '.kr', '.kw',
- '.ky', '.kz', '.la', '.land', '.lb', '.lc', '.li',
'.lighting', '.lk', '.lr', '.ls', '.lt',
- '.lu', '.lv', '.ly', '.ma', '.mc', '.md', '.me',
'.menu', '.mg', '.mh', '.mil', '.mk', '.ml',
- '.mm', '.mn', '.mo', '.mobi', '.mp', '.mq', '.mr',
'.ms', '.mt', '.mu', '.museum', '.mv',
- '.mw', '.mx', '.my', '.mz', '.na', '.name', '.nc',
'.ne', '.net', '.nf', '.ng', '.ni',
- '.nl', '.no', '.np', '.nr', '.nu', '.nz', '.om',
'.org', '.pa', '.pe', '.pf', '.pg', '.ph',
- '.photography', '.pk', '.pl', '.plumbing', '.pm',
'.pn', '.post', '.pr', '.pro', '.ps', '.pt',
- '.pw', '.py', '.qa', '.re', '.ro', '.rs', '.ru',
'.rw', '.sa', '.sb', '.sc', '.sd', '.se',
- '.sexy', '.sg', '.sh', '.si', '.singles', '.sj',
'.sk', '.sl', '.sm', '.sn', '.so', '.sr',
- '.st', '.su', '.sv', '.sx', '.sy', '.sz', '.tattoo',
'.tc', '.td', '.technology', '.tel', '.tf',
- '.tg', '.th', '.tips', '.tj', '.tk', '.tl', '.tm',
'.tn', '.to', '.today', '.tp', '.tr', '.travel',
- '.tt', '.tv', '.tw', '.tz', '.ua', '.ug', '.uk',
'.uno', '.us', '.uy', '.uz', '.va', '.vc', '.ve',
- '.ventures', '.vg', '.vi', '.vn', '.voyage', '.vu',
'.wf', '.ws', '.xn--3e0b707e', '.xn--45brj9c',
- '.xn--80ao21a', '.xn--80asehdb', '.xn--80aswg',
'.xn--90a3ac', '.xn--clchc0ea0b2g2a9gcd', '.xn--fiqs8s',
- '.xn--fiqz9s', '.xn--fpcrj9c3d', '.xn--fzc2c9e2c',
'.xn--gecrj9c', '.xn--h2brj9c', '.xn--j1amh',
- '.xn--j6w193g', '.xn--kprw13d', '.xn--kpry57d',
'.xn--l1acc', '.xn--lgbbat1ad8j', '.xn--mgb9awbf',
- '.xn--mgba3a4f16a', '.xn--mgbaam7a8h',
'.xn--mgbayh7gpa', '.xn--mgbbh1a71e', '.xn--mgbc0a9azcg',
- '.xn--mgberp4a5d4ar', '.xn--mgbx4cd0ab',
'.xn--ngbc5azd', '.xn--o3cw4h', '.xn--ogbpf8fl', '.xn--p1ai',
- '.xn--pgbs0dh', '.xn--q9jyb4c', '.xn--s9brj9c',
'.xn--unup4y', '.xn--wgbh1c', '.xn--wgbl6a',
- '.xn--xkc2al3hye2a', '.xn--xkc2dl3a5ee0h',
'.xn--yfro4i67o', '.xn--ygbi2ammx', '.xxx', '.ye',
- '.yt', '.za', '.zm', '.zw'],
-
- ukTopDomains = ['co', 'me', 'ac', 'gov', 'judiciary','ltd',
'mod', 'net', 'nhs', 'nic',
- 'org', 'parliament', 'plc', 'police', 'sch', 'bl',
'british-library', 'jet','nls'],
-
- dot = val.lastIndexOf('.'),
- domain = val.substring(0, dot),
- ext = val.substring(dot, val.length),
- hasTopDomain = false;
-
- for (var i = 0; i < topDomains.length; i++) {
- if (topDomains[i] === ext) {
- if(ext==='.uk') {
- //Run Extra Checks for UK Domain Names
- var domainParts = val.split('.');
- var tld2 = domainParts[domainParts.length-2];
- for(var j = 0; j < ukTopDomains.length; j++) {
- if(ukTopDomains[j] === tld2) {
- hasTopDomain = true;
- break;
- }
- }
-
- if(hasTopDomain)
- break;
-
- } else {
- hasTopDomain = true;
- break;
- }
- }
- }
-
- if (!hasTopDomain) {
- return false;
- } else if (dot < 2 || dot > 57) {
- return $.inArray(val, ['i.net', 'q.com', 'q.net', 'x.com',
'x.org', 'z.com', 'w.org']) > -1;
- } else {
- var firstChar = domain.substring(0, 1),
- lastChar = domain.substring(domain.length - 1,
domain.length);
-
- if (firstChar === '-' || firstChar === '.' || lastChar === '-'
|| lastChar === '.') {
- return false;
- }
- if (domain.split('..').length > 1) {
- return false;
- }
- if (domain.replace(/[-\da-z\.]/g, '') !== '') {
- return false;
- }
- }
-
- if(typeof $input !== 'undefined') {
- $input.val(val);
- }
-
- return true;
+ validatorFunction : function(val) {
+ return val.length > 0 &&
+ val.length <= 253 && // Including sub domains
+ !(/[^a-zA-Z0-9]/.test(val.substr(-2))) &&
+ !(/[^a-zA-Z]/.test(val.substr(0,1))) &&
+ !(/[^a-zA-Z0-9\.\-]/.test(val)) &&
+ val.split('..').length == 1 &&
+ val.split('.').length > 1;
},
errorMessage : '',
errorMessageKey: 'badDomain'
@@ -1453,8 +1428,7 @@
type = $el.attr('type');
if(lengthAllowed == undefined) {
- var elementType = $el.get(0).nodeName;
- alert('Please add attribute "data-validation-length" to
'+elementType+' named '+$el.attr('name'));
+ alert('Please add attribute "data-validation-length" to
'+$el[0].nodeName+' named '+$el.attr('name'));
return true;
}
@@ -1501,8 +1475,9 @@
// - General improvements made by Stéphane Moureau
<https://github.com/TraderStf>
var urlFilter =
/^(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( urlFilter.test(url) ) {
- var domain = url.split('://')[1];
- var domainSlashPos = domain.indexOf('/');
+ var domain = url.split('://')[1],
+ domainSlashPos = domain.indexOf('/');
+
if(domainSlashPos > -1)
domain = domain.substr(0, domainSlashPos);
@@ -1543,9 +1518,7 @@
}
if(steps != "")
- {
- allowsSteps = true;
- }
+ allowsSteps = true;
if( decimalSeparator == ',' ) {
if( val.indexOf('.') > -1 ) {
@@ -1576,7 +1549,7 @@
validatorFunction : function(val, $el, conf, language) {
var patternStart = '^([a-zA-Z0-9',
patternEnd = ']+)$',
- additionalChars = $el.attr('data-validation-allowing'),
+ additionalChars = $el.valAttr('allowing'),
pattern = '';
if( additionalChars ) {
@@ -1617,14 +1590,7 @@
$.formUtils.addValidator({
name : 'date',
validatorFunction : function(date, $el, conf) {
- var dateFormat = 'yyyy-mm-dd';
- if($el.valAttr('format')) {
- dateFormat = $el.valAttr('format');
- }
- else if( conf.dateFormat ) {
- dateFormat = conf.dateFormat;
- }
-
+ var dateFormat = $el.valAttr('format') || conf.dateFormat ||
'yyyy-mm-dd';
return $.formUtils.parseDate(date, dateFormat) !== false;
},
errorMessage : '',
@@ -1643,20 +1609,24 @@
$.formUtils.addValidator({
name : 'checkbox_group',
validatorFunction : function(val, $el, conf, lang, $form)
- { // preset return var
- var checkResult = true;
- // get name of element. since it is a checkbox group, all
checkboxes will have same name
- var elname = $el.attr('name');
- // get count of checked checkboxes with this name
- var checkedCount =
$("input[type=checkbox][name^='"+elname+"']:checked", $form).length;
- // get el attr that specs qty required / allowed
- var qtyAllowed = $el.valAttr('qty');
+ {
+ // preset return var
+ var checkResult = true,
+ // get name of element. since it is a checkbox group, all
checkboxes will have same name
+ elname = $el.attr('name'),
+ // get count of checked checkboxes with this name
+ checkedCount =
$("input[type=checkbox][name^='"+elname+"']:checked", $form).length,
+ // get el attr that specs qty required / allowed
+ qtyAllowed = $el.valAttr('qty');
+
if (qtyAllowed == undefined) {
var elementType = $el.get(0).nodeName;
alert('Attribute "data-validation-qty" is missing from
'+elementType+' named '+$el.attr('name'));
}
+
// call Utility function to check if count is above min, below
max, within range etc.
var qtyCheckResults = $.formUtils.numericRangeCheck(checkedCount,
qtyAllowed) ;
+
// results will be array, [0]=result str, [1]=qty int
switch(qtyCheckResults[0] ) {
// outside allowed range
@@ -1679,8 +1649,7 @@
checkResult = true;
}
- return checkResult;
-
+ return checkResult;
}
// errorMessage : '', // set above in switch statement
// errorMessageKey: '' // not used
Modified:
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.min.js
===================================================================
---
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.min.js
2015-03-20 09:01:00 UTC (rev 12880)
+++
branches/dev-syncromind/phpgwapi/js/form-validator/jquery.form-validator.min.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -5,7 +5,6 @@
*
* @website http://formvalidator.net/
* @license Dual licensed under the MIT or GPL Version 2 licenses
-* @version 2.2.beta.13
+* @version 2.2.beta.58
*/
-(function($){"use strict";var
$window=$(window),_applyErrorStyle=function($elem,conf){var
$parent=$elem.parent();$elem.addClass(conf.errorElementClass).removeClass("valid");if($parent.hasClass("input-group"))$parent=$parent.parent();$parent.addClass("has-error").removeClass("has-success");if(conf.borderColorOnError!==""){$elem.css("border-color",conf.borderColorOnError)}},_removeErrorStyle=function($elem,conf){$elem.each(function(){_setInlineErrorMessage($(this),"",conf,conf.errorMessagePosition);var
$parent=$(this).parent();if($parent.hasClass("input-group"))$parent=$parent.parent();$(this).removeClass("valid").removeClass(conf.errorElementClass).css("border-color","");$parent.removeClass("has-error").removeClass("has-success").find("."+conf.errorMessageClass).remove()})},_setInlineErrorMessage=function($input,mess,conf,$messageContainer){var
custom=_getInlineErrorElement($input);var
$parent=$input.parent();if($parent.hasClass("input-group"))$parent=$parent.parent();if(custom){custom.innerHTML=mess}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{$found.html(mess)}}else{var
$mess=$('<div
class="'+conf.errorMessageClass+'">'+mess+"</div>");$mess[0].inputReferer=$input[0];$messageContainer.prepend($mess)}}else{var
$mess=$parent.find("."+conf.errorMessageClass+".help-block");if($mess.length==0){$mess=$("<span></span>").addClass("help-block").addClass(conf.errorMessageClass);$mess.appendTo($parent)}$mess.html(mess)}},_getInlineErrorElement=function($input,conf){return
document.getElementById($input.attr("name")+"_err_msg")},_templateMessage=function($form,title,errorMessages,conf){var
messages=conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g,title);var
fields=[];$.each(errorMessages,function(i,msg){fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g,msg))});messages=messages.replace(/\{fields\}/g,fields.join(""));var
container=conf.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g,conf.errorMessageClass);container=container.replace(/\{messages\}/g,messages);$form.children().eq(0).before(container)};$.fn.validateOnBlur=function(language,settings){this.find("input[data-validation],textarea[data-validation],select[data-validation]").bind("blur.validation",function(){$(this).validateInputOnBlur(language,settings,true,"blur")});return
this};$.fn.validateOnEvent=function(language,settings){this.find("input[data-validation][data-validation-event],textarea[data-validation][data-validation-event],select[data-validation][data-validation-event]").each(function(){var
$el=$(this),etype=$el.attr("data-validation-event");if(etype){$el.bind(etype+".validation",function(){$(this).validateInputOnBlur(language,settings,true,etype)})}});return
this};$.fn.showHelpOnFocus=function(attrName){if(!attrName){attrName="data-validation-help"}this.find(".has-help-txt").valAttr("has-keyup-event",false).removeClass("has-help-txt");this.find("textarea,input").each(function(){var
$elem=$(this),className="jquery_form_help_"+($elem.attr("name")||"").replace(/(:|\.|\[|\])/g,""),help=$elem.attr(attrName);if(help){$elem.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var
$help=$elem.parent().find("."+className);if($help.length==0){$help=$("<span
/>").addClass(className).addClass("help").addClass("help-block").text(help).hide();$elem.after($help)}$help.fadeIn()}).unbind("blur.help").bind("blur.help",function(){$(this).parent().find("."+className).fadeOut("slow")})}});return
this};$.fn.validateInputOnBlur=function(language,conf,attachKeyupEvent,eventType){$.formUtils.eventType=eventType;if((this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!window.postponedValidation){var
_self=this,postponeTime=this.valAttr("postpone")||200;window.postponedValidation=function(){_self.validateInputOnBlur(language,conf,attachKeyupEvent,eventType);window.postponedValidation=false};setTimeout(function(){if(window.postponedValidation){window.postponedValidation()}},postponeTime);return
this}language=$.extend({},$.formUtils.LANG,language||{});_removeErrorStyle(this,conf);var
$elem=this,$form=$elem.closest("form"),validationRule=$elem.attr(conf.validationRuleAttribute),validation=$.formUtils.validateInput($elem,language,$.extend({},conf,{errorMessagePosition:"element"}),$form,eventType);if(validation===true){$elem.addClass("valid").parent().addClass("has-success")}else
if(validation!==null){_applyErrorStyle($elem,conf);_setInlineErrorMessage($elem,validation,conf,conf.errorMessagePosition);if(attachKeyupEvent){$elem.unbind("keyup.validation").bind("keyup.validation",function(){$(this).validateInputOnBlur(language,conf,false,"keyup")})}}return
this};$.fn.valAttr=function(name,val){if(val===undefined){return
this.attr("data-validation-"+name)}else if(val===false||val===null){return
this.removeAttr("data-validation-"+name)}else{if(name.length>0)name="-"+name;return
this.attr("data-validation"+name,val)}};$.fn.isValid=function(language,conf,displayError){if($.formUtils.isLoadingModules){var
$self=this;setTimeout(function(){$self.isValid(language,conf,displayError)},200);return
null}conf=$.extend({},$.formUtils.defaultConfig(),conf||{});language=$.extend({},$.formUtils.LANG,language||{});displayError=displayError!==false;$.formUtils.isValidatingEntireForm=true;$.formUtils.haltValidation=false;var
addErrorMessage=function(mess,$elem){if(mess!==null){if($.inArray(mess,errorMessages)<0){errorMessages.push(mess)}errorInputs.push($elem);$elem.attr("current-error",mess);if(displayError)_applyErrorStyle($elem,conf)}},errorMessages=[],errorInputs=[],$form=this,ignoreInput=function(name,type){if(type==="submit"||type==="button"||type=="reset"){return
true}return
$.inArray(name,conf.ignore||[])>-1};if(displayError){$form.find("."+conf.errorMessageClass+".alert").remove();_removeErrorStyle($form.find("."+conf.errorElementClass+",.valid"),conf)}$form.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var
$elem=$(this);var
elementType=$elem.attr("type");if(!ignoreInput($elem.attr("name"),elementType)){var
validation=$.formUtils.validateInput($elem,language,conf,$form,"submit");if(typeof
conf.onElementValidate=="function"){conf.onElementValidate(validation===true,$elem,$form,validation)}if(validation!==true){addErrorMessage(validation,$elem)}else{$elem.valAttr("current-error",false).addClass("valid").parent().addClass("has-success")}}});if(typeof
conf.onValidate=="function"){var
errors=conf.onValidate($form);if($.isArray(errors)){$.each(errors,function(i,err){addErrorMessage(err.message,err.element)})}else
if(errors&&errors.element&&errors.message){addErrorMessage(errors.message,errors.element)}}$.formUtils.isValidatingEntireForm=false;if(!$.formUtils.haltValidation&&errorInputs.length>0){if(displayError){if(conf.errorMessagePosition==="top"){_templateMessage($form,language.errorTitle,errorMessages,conf)}else
if(conf.errorMessagePosition==="custom"){if(typeof
conf.errorMessageCustom==="function"){conf.errorMessageCustom($form,language.errorTitle,errorMessages,conf)}}else{$.each(errorInputs,function(i,$input){_setInlineErrorMessage($input,$input.attr("current-error"),conf,conf.errorMessagePosition)})}if(conf.scrollToTopOnError){$window.scrollTop($form.offset().top-20)}}return
false}return!$.formUtils.haltValidation};$.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)};$.fn.restrictLength=function(maxLengthElement){new
$.formUtils.lengthRestriction(this,maxLengthElement);return
this};$.fn.addSuggestions=function(settings){var
sugs=false;this.find("input").each(function(){var
$field=$(this);sugs=$.split($field.attr("data-suggestions"));if(sugs.length>0&&!$field.hasClass("has-suggestions")){$.formUtils.suggest($field,sugs,settings);$field.addClass("has-suggestions")}});return
this};$.split=function(val,func,delim){if(typeof
func!="function"){if(!val)return[];var
values=[];$.each(val.split(func?func:","),function(i,str){str=$.trim(str);if(str.length)values.push(str)});return
values}else
if(val){if(!delim)delim=",";$.each(val.split(delim),function(i,str){str=$.trim(str);if(str.length)return
func(str,i)})}};$.validate=function(conf){var
defaultConf=$.extend($.formUtils.defaultConfig(),{form:"form",validateOnEvent:true,validateOnBlur:true,showHelpOnFocus:true,addSuggestions:true,modules:"",onModulesLoaded:null,language:false,onSuccess:false,onError:false,onElementValidate:false});conf=$.extend(defaultConf,conf||{});$(conf.form).each(function(i,form){var
$form=$(form);$window.trigger("formValidationSetup",[$form]);$form.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation");$form.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation");$form.bind("submit.validation",function(){var
$form=$(this);if($.formUtils.isLoadingModules){setTimeout(function(){$form.trigger("submit.validation")},200);return
false}var valid=$form.isValid(conf.language,conf);if(valid&&typeof
conf.onSuccess=="function"){var
callbackResponse=conf.onSuccess($form);if(callbackResponse===false)return
false}else if(!valid&&typeof
conf.onError=="function"){conf.onError($form);return false}else{return
valid}}).bind("reset.validation",function(){$(this).find("."+conf.errorMessageClass+".alert").remove();_removeErrorStyle($(this).find("."+conf.errorElementClass+",.valid"),conf)}).addClass("has-validation-callback");if(conf.showHelpOnFocus){$form.showHelpOnFocus()}if(conf.addSuggestions){$form.addSuggestions()}if(conf.validateOnBlur){$form.validateOnBlur(conf.language,conf);$form.bind("html5ValidationAttrsFound",function(){$form.validateOnBlur(conf.language,conf)})}if(conf.validateOnEvent){$form.validateOnEvent(conf.language,conf)}});if(conf.modules!=""){if(typeof
conf.onModulesLoaded=="function"){$window.one("validatorsLoaded",conf.onModulesLoaded)}$.formUtils.loadModules(conf.modules)}};$.formUtils={defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"red",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:_templateMessage,scrollToTopOnError:true,dateFormat:"yyyy-mm-dd",addValidClassOnAll:false,decimalSeparator:"."}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:false,isValidatingEntireForm:false,addValidator:function(validator){var
name=validator.name.indexOf("validate_")===0?validator.name:"validate_"+validator.name;if(validator.validateOnKeyUp===undefined)validator.validateOnKeyUp=true;this.validators[name]=validator},isLoadingModules:false,loadedModules:{},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){$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.substr(-3)==".js"?"":".js"),script=document.createElement("SCRIPT");if(scriptUrl
in
$.formUtils.loadedModules){moduleLoadedCallback()}else{$.formUtils.loadedModules[scriptUrl]=1;hasLoadedAnyModule=true;script.type="text/javascript";script.onload=moduleLoadedCallback;script.src=scriptUrl+(scriptUrl.substr(-7)==".dev.js"?cacheSuffix:"");script.onreadystatechange=function(){if(this.readyState=="complete"||this.readyState=="loaded"){moduleLoadedCallback();this.onload=null;this.onreadystatechange=null}};appendToElement.appendChild(script)}}})};if(path){loadModuleScripts(modules,path)}else{var
findScriptPathAndLoadModules=function(){var
foundPath=false;$("script").each(function(){if(this.src){var
scriptName=this.src.substr(this.src.lastIndexOf("/")+1,this.src.length);if(scriptName.indexOf("jquery.form-validator.js")>-1||scriptName.indexOf("jquery.form-validator.min.js")>-1){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)}}},validateInput:function($elem,language,conf,$form,eventContext){if($elem.attr("disabled"))return
null;$elem.trigger("beforeValidation");var
value=$elem.val()||"",optional=$elem.valAttr("optional"),validationDependsOnCheckedInput=false,validationDependentInputIsChecked=false,validateIfCheckedElement=false,validateIfCheckedElementName=$elem.valAttr("if-checked");if(validateIfCheckedElementName!=null){validationDependsOnCheckedInput=true;validateIfCheckedElement=$form.find('input[name="'+validateIfCheckedElementName+'"]');if(validateIfCheckedElement.prop("checked")){validationDependentInputIsChecked=true}}if(!value&&optional==="true"||validationDependsOnCheckedInput&&!validationDependentInputIsChecked){return
conf.addValidClassOnAll?true:null}var
validationRules=$elem.attr(conf.validationRuleAttribute),validationErrorMsg=true;if(!validationRules){return
conf.addValidClassOnAll?true:null}$.split(validationRules,function(rule){if(rule.indexOf("validate_")!==0){rule="validate_"+rule}var
validator=$.formUtils.validators[rule];if(validator&&typeof
validator["validatorFunction"]=="function"){if(rule=="validate_checkbox_group"){$elem=$("[name='"+$elem.attr("name")+"']:eq(0)")}var
isValid=null;if(eventContext!="keyup"||validator.validateOnKeyUp){isValid=validator.validatorFunction(value,$elem,conf,language,$form)}if(!isValid){validationErrorMsg=null;if(isValid!==null){validationErrorMsg=$elem.attr(conf.validationErrorMsgAttribute+"-"+rule.replace("validate_",""));if(!validationErrorMsg){validationErrorMsg=$elem.attr(conf.validationErrorMsgAttribute);if(!validationErrorMsg){validationErrorMsg=language[validator.errorMessageKey];if(!validationErrorMsg)validationErrorMsg=validator.errorMessage}}}return
false}}else{throw new Error('Using undefined validator "'+rule+'"')}},"
");if(typeof
validationErrorMsg=="string"){$elem.trigger("validation",false);return
validationErrorMsg}else
if(validationErrorMsg===null&&!conf.addValidClassOnAll){return
null}else{$elem.trigger("validation",true);return
true}},parseDate:function(val,dateFormat){var
divider=dateFormat.replace(/[a-zA-Z]/gi,"").substring(0,1),regexp="^",formatParts=dateFormat.split(divider),matches,day,month,year;$.each(formatParts,function(i,part){regexp+=(i>0?"\\"+divider:"")+"(\\d{"+part.length+"})"});regexp+="$";matches=val.match(new
RegExp(regexp));if(matches===null){return false}var
findDateUnit=function(unit,formatParts,matches){for(var
i=0;i<formatParts.length;i++){if(formatParts[i].substring(0,1)===unit){return
$.formUtils.parseDateInt(matches[i+1])}}return-1};month=findDateUnit("m",formatParts,matches);day=findDateUnit("d",formatParts,matches);year=findDateUnit("y",formatParts,matches);if(month===2&&day>28&&(year%4!==0||year%100===0&&year%400!==0)||month===2&&day>29&&(year%4===0||year%100!==0&&year%400===0)||month>12||month===0){return
false}if(this.isShortMonth(month)&&day>30||!this.isShortMonth(month)&&day>31||day===0){return
false}return[year,month,day]},parseDateInt:function(val){if(val.indexOf("0")===0){val=val.replace("0","")}return
parseInt(val,10)},isShortMonth:function(m){return
m%2===0&&m<7||m%2!==0&&m>7},lengthRestriction:function($inputElement,$maxLengthElement){var
maxChars=parseInt($maxLengthElement.text(),10),charsLeft=0,countCharacters=function(){var
numChars=$inputElement.val().length;if(numChars>maxChars){var
currScrollTopPos=$inputElement.scrollTop();$inputElement.val($inputElement.val().substring(0,maxChars));$inputElement.scrollTop(currScrollTopPos)}charsLeft=maxChars-numChars;if(charsLeft<0)charsLeft=0;$maxLengthElement.text(charsLeft)};$($inputElement).bind("keydown
keyup keypress focus blur",countCharacters).bind("cut
paste",function(){setTimeout(countCharacters,100)});$(document).bind("ready",countCharacters)},numericRangeCheck:function(value,rangeAllowed){var
range=$.split(rangeAllowed,"-");var
minmax=parseInt(rangeAllowed.substr(3),10);if(range.length==2&&(value<parseInt(range[0],10)||value>parseInt(range[1],10))){return["out",range[0],range[1]]}else
if(rangeAllowed.indexOf("min")===0&&value<minmax){return["min",minmax]}else
if(rangeAllowed.indexOf("max")===0&&value>minmax){return["max",minmax]}return["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function($elem,suggestions,settings){var
conf={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC
solid
1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},setSuggsetionPosition=function($suggestionContainer,$input){var
offset=$input.offset();$suggestionContainer.css({width:$input.outerWidth(),left:offset.left+"px",top:offset.top+$input.outerHeight()+"px"})};if(settings)$.extend(conf,settings);conf.css["position"]="absolute";conf.css["z-index"]=9999;$elem.attr("autocomplete","off");if(this._numSuggestionElements===0){$window.bind("resize",function(){$(".jquery-form-suggestions").each(function(){var
$container=$(this),suggestID=$container.attr("data-suggest-container");setSuggsetionPosition($container,$(".suggestions-"+suggestID).eq(0))})})}this._numSuggestionElements++;var
onSelectSuggestion=function($el){var
suggestionId=$el.valAttr("suggestion-nr");$.formUtils._selectedSuggestion=null;$.formUtils._previousTypedVal=null;$(".jquery-form-suggestion-"+suggestionId).fadeOut("fast")};$elem.data("suggestions",suggestions).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){$(this).trigger("keyup");$.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var
$input=$(this),foundSuggestions=[],val=$.trim($input.val()).toLocaleLowerCase();if(val==$.formUtils._previousTypedVal){return}else{$.formUtils._previousTypedVal=val}var
hasTypedSuggestion=false,suggestionId=$input.valAttr("suggestion-nr"),$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);$suggestionContainer.scrollTop(0);if(val!=""){var
findPartial=val.length>2;$.each($input.data("suggestions"),function(i,suggestion){var
lowerCaseVal=suggestion.toLocaleLowerCase();if(lowerCaseVal==val){foundSuggestions.push("<strong>"+suggestion+"</strong>");hasTypedSuggestion=true;return
false}else
if(lowerCaseVal.indexOf(val)===0||findPartial&&lowerCaseVal.indexOf(val)>-1){foundSuggestions.push(suggestion.replace(new
RegExp(val,"gi"),"<strong>$&</strong>"))}})}if(hasTypedSuggestion||foundSuggestions.length==0&&$suggestionContainer.length>0){$suggestionContainer.hide()}else
if(foundSuggestions.length>0&&$suggestionContainer.length==0){$suggestionContainer=$("<div></div>").css(conf.css).appendTo("body");$elem.addClass("suggestions-"+suggestionId);$suggestionContainer.attr("data-suggest-container",suggestionId).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+suggestionId)}else
if(foundSuggestions.length>0&&!$suggestionContainer.is(":visible")){$suggestionContainer.show()}if(foundSuggestions.length>0&&val.length!=foundSuggestions[0].length){setSuggsetionPosition($suggestionContainer,$input);$suggestionContainer.html("");$.each(foundSuggestions,function(i,text){$("<div></div>").append(text).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo($suggestionContainer).click(function(){$input.focus();$input.val($(this).text());onSelectSuggestion($input)})})}}).unbind("keydown.validation").bind("keydown.validation",function(e){var
code=e.keyCode?e.keyCode:e.which,suggestionId,$suggestionContainer,$input=$(this);if(code==13&&$.formUtils._selectedSuggestion!==null){suggestionId=$input.valAttr("suggestion-nr");$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);if($suggestionContainer.length>0){var
newText=$suggestionContainer.find("div").eq($.formUtils._selectedSuggestion).text();$input.val(newText);onSelectSuggestion($input);e.preventDefault()}}else{suggestionId=$input.valAttr("suggestion-nr");$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);var
$suggestions=$suggestionContainer.children();if($suggestions.length>0&&$.inArray(code,[38,40])>-1){if(code==38){if($.formUtils._selectedSuggestion===null)$.formUtils._selectedSuggestion=$suggestions.length-1;else
$.formUtils._selectedSuggestion--;if($.formUtils._selectedSuggestion<0)$.formUtils._selectedSuggestion=$suggestions.length-1}else
if(code==40){if($.formUtils._selectedSuggestion===null)$.formUtils._selectedSuggestion=0;else
$.formUtils._selectedSuggestion++;if($.formUtils._selectedSuggestion>$suggestions.length-1)$.formUtils._selectedSuggestion=0}var
containerInnerHeight=$suggestionContainer.innerHeight(),containerScrollTop=$suggestionContainer.scrollTop(),suggestionHeight=$suggestionContainer.children().eq(0).outerHeight(),activeSuggestionPosY=suggestionHeight*$.formUtils._selectedSuggestion;if(activeSuggestionPosY<containerScrollTop||activeSuggestionPosY>containerScrollTop+containerInnerHeight){$suggestionContainer.scrollTop(activeSuggestionPosY)}$suggestions.removeClass("active-suggestion").css("background","none").eq($.formUtils._selectedSuggestion).addClass("active-suggestion").css(conf.activeSuggestionCSS);e.preventDefault();return
false}}}).unbind("blur.suggest").bind("blur.suggest",function(){onSelectSuggestion($(this))});return
$elem},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",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",wrongFileType:"The file you are trying to upload is of wrong
type",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"}};$.formUtils.addValidator({name:"email",validatorFunction:function(email){var
emailParts=email.toLowerCase().split("@");if(emailParts.length==2){return
$.formUtils.validators.validate_domain.validatorFunction(emailParts[1])&&!/[^\w\+\.\-]/.test(emailParts[0])}return
false},errorMessage:"",errorMessageKey:"badEmail"});$.formUtils.addValidator({name:"domain",validatorFunction:function(val,$input){var
topDomains=[".ac",".ad",".ae",".aero",".af",".ag",".ai",".al",".am",".an",".ao",".aq",".ar",".arpa",".as",".asia",".at",".au",".aw",".ax",".az",".ba",".bb",".bd",".be",".bf",".bg",".bh",".bi",".bike",".biz",".bj",".bm",".bn",".bo",".br",".bs",".bt",".bv",".bw",".by",".bz",".ca",".camera",".cat",".cc",".cd",".cf",".cg",".ch",".ci",".ck",".cl",".clothing",".cm",".cn",".co",".com",".construction",".contractors",".coop",".cr",".cu",".cv",".cw",".cx",".cy",".cz",".de",".diamonds",".directory",".dj",".dk",".dm",".do",".dz",".ec",".edu",".ee",".eg",".enterprises",".equipment",".er",".es",".estate",".et",".eu",".fi",".fj",".fk",".fm",".fo",".fr",".ga",".gallery",".gb",".gd",".ge",".gf",".gg",".gh",".gi",".gl",".gm",".gn",".gov",".gp",".gq",".gr",".graphics",".gs",".gt",".gu",".guru",".gw",".gy",".hk",".hm",".hn",".holdings",".hr",".ht",".hu",".id",".ie",".il",".im",".in",".info",".int",".io",".iq",".ir",".is",".it",".je",".jm",".jo",".jobs",".jp",".ke",".kg",".kh",".ki",".kitchen",".km",".kn",".kp",".kr",".kw",".ky",".kz",".la",".land",".lb",".lc",".li",".lighting",".lk",".lr",".ls",".lt",".lu",".lv",".ly",".ma",".mc",".md",".me",".menu",".mg",".mh",".mil",".mk",".ml",".mm",".mn",".mo",".mobi",".mp",".mq",".mr",".ms",".mt",".mu",".museum",".mv",".mw",".mx",".my",".mz",".na",".name",".nc",".ne",".net",".nf",".ng",".ni",".nl",".no",".np",".nr",".nu",".nz",".om",".org",".pa",".pe",".pf",".pg",".ph",".photography",".pk",".pl",".plumbing",".pm",".pn",".post",".pr",".pro",".ps",".pt",".pw",".py",".qa",".re",".ro",".rs",".ru",".rw",".sa",".sb",".sc",".sd",".se",".sexy",".sg",".sh",".si",".singles",".sj",".sk",".sl",".sm",".sn",".so",".sr",".st",".su",".sv",".sx",".sy",".sz",".tattoo",".tc",".td",".technology",".tel",".tf",".tg",".th",".tips",".tj",".tk",".tl",".tm",".tn",".to",".today",".tp",".tr",".travel",".tt",".tv",".tw",".tz",".ua",".ug",".uk",".uno",".us",".uy",".uz",".va",".vc",".ve",".ventures",".vg",".vi",".vn",".voyage",".vu",".wf",".ws",".xn--3e0b707e",".xn--45brj9c",".xn--80ao21a",".xn--80asehdb",".xn--80aswg",".xn--90a3ac",".xn--clchc0ea0b2g2a9gcd",".xn--fiqs8s",".xn--fiqz9s",".xn--fpcrj9c3d",".xn--fzc2c9e2c",".xn--gecrj9c",".xn--h2brj9c",".xn--j1amh",".xn--j6w193g",".xn--kprw13d",".xn--kpry57d",".xn--l1acc",".xn--lgbbat1ad8j",".xn--mgb9awbf",".xn--mgba3a4f16a",".xn--mgbaam7a8h",".xn--mgbayh7gpa",".xn--mgbbh1a71e",".xn--mgbc0a9azcg",".xn--mgberp4a5d4ar",".xn--mgbx4cd0ab",".xn--ngbc5azd",".xn--o3cw4h",".xn--ogbpf8fl",".xn--p1ai",".xn--pgbs0dh",".xn--q9jyb4c",".xn--s9brj9c",".xn--unup4y",".xn--wgbh1c",".xn--wgbl6a",".xn--xkc2al3hye2a",".xn--xkc2dl3a5ee0h",".xn--yfro4i67o",".xn--ygbi2ammx",".xxx",".ye",".yt",".za",".zm",".zw"],ukTopDomains=["co","me","ac","gov","judiciary","ltd","mod","net","nhs","nic","org","parliament","plc","police","sch","bl","british-library","jet","nls"],dot=val.lastIndexOf("."),domain=val.substring(0,dot),ext=val.substring(dot,val.length),hasTopDomain=false;for(var
i=0;i<topDomains.length;i++){if(topDomains[i]===ext){if(ext===".uk"){var
domainParts=val.split(".");var tld2=domainParts[domainParts.length-2];for(var
j=0;j<ukTopDomains.length;j++){if(ukTopDomains[j]===tld2){hasTopDomain=true;break}}if(hasTopDomain)break}else{hasTopDomain=true;break}}}if(!hasTopDomain){return
false}else if(dot<2||dot>57){return
$.inArray(val,["i.net","q.com","q.net","x.com","x.org","z.com","w.org"])>-1}else{var
firstChar=domain.substring(0,1),lastChar=domain.substring(domain.length-1,domain.length);if(firstChar==="-"||firstChar==="."||lastChar==="-"||lastChar==="."){return
false}if(domain.split("..").length>1){return
false}if(domain.replace(/[-\da-z\.]/g,"")!==""){return false}}if(typeof
$input!=="undefined"){$input.val(val)}return
true},errorMessage:"",errorMessageKey:"badDomain"});$.formUtils.addValidator({name:"required",validatorFunction:function(val,$el,config,language,$form){switch($el.attr("type")){case"checkbox":return
$el.is(":checked");case"radio":return
$form.find('input[name="'+$el.attr("name")+'"]').filter(":checked").length>0;default:return
$.trim(val)!==""}},errorMessage:"",errorMessageKey:"requiredFields"});$.formUtils.addValidator({name:"length",validatorFunction:function(val,$el,conf,lang){var
lengthAllowed=$el.valAttr("length"),type=$el.attr("type");if(lengthAllowed==undefined){var
elementType=$el.get(0).nodeName;alert('Please add attribute
"data-validation-length" to '+elementType+" named "+$el.attr("name"));return
true}var
len=type=="file"&&$el.get(0).files!==undefined?$el.get(0).files.length:val.length,lengthCheckResults=$.formUtils.numericRangeCheck(len,lengthAllowed),checkResult;switch(lengthCheckResults[0]){case"out":this.errorMessage=lang.lengthBadStart+lengthAllowed+lang.lengthBadEnd;checkResult=false;break;case"min":this.errorMessage=lang.lengthTooShortStart+lengthCheckResults[1]+lang.lengthBadEnd;checkResult=false;break;case"max":this.errorMessage=lang.lengthTooLongStart+lengthCheckResults[1]+lang.lengthBadEnd;checkResult=false;break;default:checkResult=true}return
checkResult},errorMessage:"",errorMessageKey:""});$.formUtils.addValidator({name:"url",validatorFunction:function(url){var
urlFilter=/^(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(urlFilter.test(url)){var
domain=url.split("://")[1];var
domainSlashPos=domain.indexOf("/");if(domainSlashPos>-1)domain=domain.substr(0,domainSlashPos);return
$.formUtils.validators.validate_domain.validatorFunction(domain)}return
false},errorMessage:"",errorMessageKey:"badUrl"});$.formUtils.addValidator({name:"number",validatorFunction:function(val,$el,conf){if(val!==""){var
allowing=$el.valAttr("allowing")||"",decimalSeparator=$el.valAttr("decimal-separator")||conf.decimalSeparator,allowsRange=false,begin,end,steps=$el.valAttr("step")||"",allowsSteps=false;if(allowing.indexOf("number")==-1)allowing+=",number";if(allowing.indexOf("negative")>-1&&val.indexOf("-")===0){val=val.substr(1)}if(allowing.indexOf("range")>-1){begin=parseFloat(allowing.substring(allowing.indexOf("[")+1,allowing.indexOf(";")));end=parseFloat(allowing.substring(allowing.indexOf(";")+1,allowing.indexOf("]")));allowsRange=true}if(steps!=""){allowsSteps=true}if(decimalSeparator==","){if(val.indexOf(".")>-1){return
false}val=val.replace(",",".")}if(allowing.indexOf("number")>-1&&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
-}}return
false},errorMessage:"",errorMessageKey:"badInt"});$.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(val,$el,conf,language){var
patternStart="^([a-zA-Z0-9",patternEnd="]+)$",additionalChars=$el.attr("data-validation-allowing"),pattern="";if(additionalChars){pattern=patternStart+additionalChars+patternEnd;var
extra=additionalChars.replace(/\\/g,"");if(extra.indexOf("
")>-1){extra=extra.replace(" ","");extra+=" and spaces
"}this.errorMessage=language.badAlphaNumeric+language.badAlphaNumericExtra+extra}else{pattern=patternStart+patternEnd;this.errorMessage=language.badAlphaNumeric}return
new
RegExp(pattern).test(val)},errorMessage:"",errorMessageKey:""});$.formUtils.addValidator({name:"custom",validatorFunction:function(val,$el,conf){var
regexp=new RegExp($el.valAttr("regexp"));return
regexp.test(val)},errorMessage:"",errorMessageKey:"badCustomVal"});$.formUtils.addValidator({name:"date",validatorFunction:function(date,$el,conf){var
dateFormat="yyyy-mm-dd";if($el.valAttr("format")){dateFormat=$el.valAttr("format")}else
if(conf.dateFormat){dateFormat=conf.dateFormat}return
$.formUtils.parseDate(date,dateFormat)!==false},errorMessage:"",errorMessageKey:"badDate"});$.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(val,$el,conf,lang,$form){var
checkResult=true;var elname=$el.attr("name");var
checkedCount=$("input[type=checkbox][name^='"+elname+"']:checked",$form).length;var
qtyAllowed=$el.valAttr("qty");if(qtyAllowed==undefined){var
elementType=$el.get(0).nodeName;alert('Attribute "data-validation-qty" is
missing from '+elementType+" named "+$el.attr("name"))}var
qtyCheckResults=$.formUtils.numericRangeCheck(checkedCount,qtyAllowed);switch(qtyCheckResults[0]){case"out":this.errorMessage=lang.groupCheckedRangeStart+qtyAllowed+lang.groupCheckedEnd;checkResult=false;break;case"min":this.errorMessage=lang.groupCheckedTooFewStart+qtyCheckResults[1]+lang.groupCheckedEnd;checkResult=false;break;case"max":this.errorMessage=lang.groupCheckedTooManyStart+qtyCheckResults[1]+lang.groupCheckedEnd;checkResult=false;break;default:checkResult=true}return
checkResult}})})(jQuery);
\ No newline at end of file
+(function($){"use strict";var
$window=$(window),_applyErrorStyle=function($elem,conf){$elem.addClass(conf.errorElementClass).removeClass("valid");var
$parent=$elem.parent();if($parent.hasClass("input-group"))$parent=$parent.parent();$parent.addClass(conf.inputParentClassOnError).removeClass(conf.inputParentClassOnSuccess);if(conf.borderColorOnError!==""){$elem.css("border-color",conf.borderColorOnError)}},_removeErrorStyle=function($elem,conf){$elem.each(function(){var
$this=$(this),$parent=$this.parent();if($parent.hasClass("input-group"))$parent=$parent.parent();_setInlineErrorMessage($this,"",conf,conf.errorMessagePosition);$this.removeClass("valid").removeClass(conf.errorElementClass).css("border-color","");$parent.removeClass(conf.inputParentClassOnError).removeClass(conf.inputParentClassOnSuccess).find("."+conf.errorMessageClass).remove()})},_setInlineErrorMessage=function($input,mess,conf,$messageContainer){var
custom=_getInlineErrorElement($input);if(custom){custom.innerHTML=mess}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{$found.html(mess)}}else{var
$mess=$('<div
class="'+conf.errorMessageClass+'">'+mess+"</div>");$mess[0].inputReferer=$input[0];$messageContainer.prepend($mess)}}else{var
$parent=$input.parent();if($parent.hasClass("input-group"))$parent=$parent.parent();var
$mess=$parent.find("."+conf.errorMessageClass+".help-block");if($mess.length==0){$mess=$("<span></span>").addClass("help-block").addClass(conf.errorMessageClass);$mess.appendTo($parent)}$mess.html(mess)}},_getInlineErrorElement=function($input,conf){return
document.getElementById($input.attr("name")+"_err_msg")},_templateMessage=function($form,title,errorMessages,conf){var
messages=conf.errorMessageTemplate.messages.replace(/\{errorTitle\}/g,title);var
fields=[];$.each(errorMessages,function(i,msg){fields.push(conf.errorMessageTemplate.field.replace(/\{msg\}/g,msg))});messages=messages.replace(/\{fields\}/g,fields.join(""));var
container=conf.errorMessageTemplate.container.replace(/\{errorMessageClass\}/g,conf.errorMessageClass);container=container.replace(/\{messages\}/g,messages);$form.children().eq(0).before(container)};$.fn.validateOnBlur=function(language,settings){this.find("input[data-validation],textarea[data-validation],select[data-validation]").bind("blur.validation",function(){$(this).validateInputOnBlur(language,settings,true,"blur")});if(settings.validateCheckboxRadioOnClick){this.find("input[type=checkbox][data-validation],input[type=radio][data-validation]").bind("click.validation",function(){$(this).validateInputOnBlur(language,settings,true,"click")})}return
this};$.fn.validateOnEvent=function(language,settings){this.find("input[data-validation][data-validation-event],textarea[data-validation][data-validation-event],select[data-validation][data-validation-event]").each(function(){var
$el=$(this),etype=$el.valAttr("event");if(etype){$el.bind(etype+".validation",function(){$(this).validateInputOnBlur(language,settings,true,etype)})}});return
this};$.fn.showHelpOnFocus=function(attrName){if(!attrName){attrName="data-validation-help"}this.find(".has-help-txt").valAttr("has-keyup-event",false).removeClass("has-help-txt");this.find("textarea,input").each(function(){var
$elem=$(this),className="jquery_form_help_"+($elem.attr("name")||"").replace(/(:|\.|\[|\])/g,""),help=$elem.attr(attrName);if(help){$elem.addClass("has-help-txt").unbind("focus.help").bind("focus.help",function(){var
$help=$elem.parent().find("."+className);if($help.length==0){$help=$("<span
/>").addClass(className).addClass("help").addClass("help-block").text(help).hide();$elem.after($help)}$help.fadeIn()}).unbind("blur.help").bind("blur.help",function(){$(this).parent().find("."+className).fadeOut("slow")})}});return
this};$.fn.validateInputOnBlur=function(language,conf,attachKeyupEvent,eventType){$.formUtils.eventType=eventType;if((this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!window.postponedValidation){var
_self=this,postponeTime=this.valAttr("postpone")||200;window.postponedValidation=function(){_self.validateInputOnBlur(language,conf,attachKeyupEvent,eventType);window.postponedValidation=false};setTimeout(function(){if(window.postponedValidation){window.postponedValidation()}},postponeTime);return
this}language=$.extend({},$.formUtils.LANG,language||{});_removeErrorStyle(this,conf);var
$elem=this,$form=$elem.closest("form"),validationRule=$elem.attr(conf.validationRuleAttribute),validation=$.formUtils.validateInput($elem,language,$.extend({},conf,{errorMessagePosition:"element"}),$form,eventType);if(validation===true){$elem.addClass("valid").parent().addClass(conf.inputParentClassOnSuccess)}else
if(validation!==null){_applyErrorStyle($elem,conf);_setInlineErrorMessage($elem,validation,conf,conf.errorMessagePosition);if(attachKeyupEvent){$elem.unbind("keyup.validation").bind("keyup.validation",function(){$(this).validateInputOnBlur(language,conf,false,"keyup")})}}return
this};$.fn.valAttr=function(name,val){if(val===undefined){return
this.attr("data-validation-"+name)}else if(val===false||val===null){return
this.removeAttr("data-validation-"+name)}else{if(name.length>0)name="-"+name;return
this.attr("data-validation"+name,val)}};$.fn.isValid=function(language,conf,displayError){if($.formUtils.isLoadingModules){var
$self=this;setTimeout(function(){$self.isValid(language,conf,displayError)},200);return
null}conf=$.extend({},$.formUtils.defaultConfig(),conf||{});language=$.extend({},$.formUtils.LANG,language||{});displayError=displayError!==false;if($.formUtils.errorDisplayPreventedWhenHalted){delete
$.formUtils.errorDisplayPreventedWhenHalted;displayError=false}$.formUtils.isValidatingEntireForm=true;$.formUtils.haltValidation=false;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)},checkedInputs=[],errorMessages=[],errorInputs=[],$form=this,ignoreInput=function(name,type){if(type==="submit"||type==="button"||type=="reset"){return
true}return
$.inArray(name,conf.ignore||[])>-1};if(displayError){$form.find("."+conf.errorMessageClass+".alert").remove();_removeErrorStyle($form.find("."+conf.errorElementClass+",.valid"),conf)}$form.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var
$elem=$(this),elementType=$elem.attr("type"),isCheckboxOrRadioBtn=elementType=="radio"||elementType=="checkbox",elementName=$elem.attr("name");if(!ignoreInput(elementName,elementType)&&(!isCheckboxOrRadioBtn||$.inArray(elementName,checkedInputs)<0)){if(isCheckboxOrRadioBtn)checkedInputs.push(elementName);var
validation=$.formUtils.validateInput($elem,language,conf,$form,"submit");if(validation!=null){if(validation!==true){addErrorMessage(validation,$elem)}else{$elem.valAttr("current-error",false).addClass("valid").parent().addClass("has-success")}}}});if(typeof
conf.onValidate=="function"){var
errors=conf.onValidate($form);if($.isArray(errors)){$.each(errors,function(i,err){addErrorMessage(err.message,err.element)})}else
if(errors&&errors.element&&errors.message){addErrorMessage(errors.message,errors.element)}}$.formUtils.isValidatingEntireForm=false;if(!$.formUtils.haltValidation&&errorInputs.length>0){if(displayError){if(conf.errorMessagePosition==="top"){_templateMessage($form,language.errorTitle,errorMessages,conf)}else
if(conf.errorMessagePosition==="custom"){if(typeof
conf.errorMessageCustom==="function"){conf.errorMessageCustom($form,language.errorTitle,errorMessages,conf)}}else{$.each(errorInputs,function(i,$input){_setInlineErrorMessage($input,$input.attr("current-error"),conf,conf.errorMessagePosition)})}if(conf.scrollToTopOnError){$window.scrollTop($form.offset().top-20)}}return
false}if(!displayError&&$.formUtils.haltValidation){$.formUtils.errorDisplayPreventedWhenHalted=true}return!$.formUtils.haltValidation};$.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)};$.fn.restrictLength=function(maxLengthElement){new
$.formUtils.lengthRestriction(this,maxLengthElement);return
this};$.fn.addSuggestions=function(settings){var
sugs=false;this.find("input").each(function(){var
$field=$(this);sugs=$.split($field.attr("data-suggestions"));if(sugs.length>0&&!$field.hasClass("has-suggestions")){$.formUtils.suggest($field,sugs,settings);$field.addClass("has-suggestions")}});return
this};$.split=function(val,func){if(typeof
func!="function"){if(!val)return[];var
values=[];$.each(val.split(func?func:/[,|\-\s]\s*/g),function(i,str){str=$.trim(str);if(str.length)values.push(str)});return
values}else
if(val){$.each(val.split(/[,|\-\s]\s*/g),function(i,str){str=$.trim(str);if(str.length)return
func(str,i)})}};$.validate=function(conf){var
defaultConf=$.extend($.formUtils.defaultConfig(),{form:"form",validateOnEvent:true,validateOnBlur:true,validateCheckboxRadioOnClick:true,showHelpOnFocus:true,addSuggestions:true,modules:"",onModulesLoaded:null,language:false,onSuccess:false,onError:false,onElementValidate:false});conf=$.extend(defaultConf,conf||{});$(conf.form).each(function(i,form){var
$form=$(form);$window.trigger("formValidationSetup",[$form]);$form.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation");$form.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation");$form.bind("submit.validation",function(){var
$form=$(this);if($.formUtils.haltValidation){return
false}if($.formUtils.isLoadingModules){setTimeout(function(){$form.trigger("submit.validation")},200);return
false}var
valid=$form.isValid(conf.language,conf);if($.formUtils.haltValidation){return
false}else{if(valid&&typeof conf.onSuccess=="function"){var
callbackResponse=conf.onSuccess($form);if(callbackResponse===false)return
false}else if(!valid&&typeof
conf.onError=="function"){conf.onError($form);return false}else{return
valid}}}).bind("reset.validation",function(){$(this).find("."+conf.errorMessageClass+".alert").remove();_removeErrorStyle($(this).find("."+conf.errorElementClass+",.valid"),conf)}).addClass("has-validation-callback");if(conf.showHelpOnFocus){$form.showHelpOnFocus()}if(conf.addSuggestions){$form.addSuggestions()}if(conf.validateOnBlur){$form.validateOnBlur(conf.language,conf);$form.bind("html5ValidationAttrsFound",function(){$form.validateOnBlur(conf.language,conf)})}if(conf.validateOnEvent){$form.validateOnEvent(conf.language,conf)}});if(conf.modules!=""){if(typeof
conf.onModulesLoaded=="function"){$window.one("validatorsLoaded",conf.onModulesLoaded)}$.formUtils.loadModules(conf.modules)}};$.formUtils={defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"red",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:_templateMessage,scrollToTopOnError:true,dateFormat:"yyyy-mm-dd",addValidClassOnAll:false,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success"}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:false,isValidatingEntireForm:false,addValidator:function(validator){var
name=validator.name.indexOf("validate_")===0?validator.name:"validate_"+validator.name;if(validator.validateOnKeyUp===undefined)validator.validateOnKeyUp=true;this.validators[name]=validator},isLoadingModules:false,loadedModules:{},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){$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.substr(-3)==".js"?"":".js"),script=document.createElement("SCRIPT");if(scriptUrl
in
$.formUtils.loadedModules){moduleLoadedCallback()}else{$.formUtils.loadedModules[scriptUrl]=1;hasLoadedAnyModule=true;script.type="text/javascript";script.onload=moduleLoadedCallback;script.src=scriptUrl+(scriptUrl.substr(-7)==".dev.js"?cacheSuffix:"");script.onreadystatechange=function(){if(this.readyState=="complete"||this.readyState=="loaded"){moduleLoadedCallback();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)}}},validateInput:function($elem,language,conf,$form,eventContext){if($elem.attr("disabled"))return
null;$elem.trigger("beforeValidation");var
value=$elem.val()||"",optional=$elem.valAttr("optional"),validationDependsOnCheckedInput=false,validationDependentInputIsChecked=false,validateIfCheckedElement=false,validateIfCheckedElementName=$elem.valAttr("if-checked");if(validateIfCheckedElementName!=null){validationDependsOnCheckedInput=true;validateIfCheckedElement=$form.find('input[name="'+validateIfCheckedElementName+'"]');if(validateIfCheckedElement.prop("checked")){validationDependentInputIsChecked=true}}if(!value&&optional==="true"||validationDependsOnCheckedInput&&!validationDependentInputIsChecked){return
conf.addValidClassOnAll?true:null}var
validationRules=$elem.attr(conf.validationRuleAttribute),validationErrorMsg=true;if(!validationRules){return
conf.addValidClassOnAll?true:null}$.split(validationRules,function(rule){if(rule.indexOf("validate_")!==0){rule="validate_"+rule}var
validator=$.formUtils.validators[rule];if(validator&&typeof
validator["validatorFunction"]=="function"){if(rule=="validate_checkbox_group"){$elem=$("[name='"+$elem.attr("name")+"']:eq(0)")}var
isValid=null;if(eventContext!="keyup"||validator.validateOnKeyUp){isValid=validator.validatorFunction(value,$elem,conf,language,$form)}if(!isValid){validationErrorMsg=null;if(isValid!==null){validationErrorMsg=$elem.attr(conf.validationErrorMsgAttribute+"-"+rule.replace("validate_",""));if(!validationErrorMsg){validationErrorMsg=$elem.attr(conf.validationErrorMsgAttribute);if(!validationErrorMsg){validationErrorMsg=language[validator.errorMessageKey];if(!validationErrorMsg)validationErrorMsg=validator.errorMessage}}}return
false}}else{throw new Error('Using undefined validator "'+rule+'"')}}," ");var
result;if(typeof
validationErrorMsg=="string"){$elem.trigger("validation",false);result=validationErrorMsg}else
if(validationErrorMsg===null&&!conf.addValidClassOnAll){result=null}else{$elem.trigger("validation",true);result=true}if(typeof
conf.onElementValidate=="function"&&result!==null){conf.onElementValidate(result===true,$elem,$form,validationErrorMsg)}return
result},parseDate:function(val,dateFormat){var
divider=dateFormat.replace(/[a-zA-Z]/gi,"").substring(0,1),regexp="^",formatParts=dateFormat.split(divider||null),matches,day,month,year;$.each(formatParts,function(i,part){regexp+=(i>0?"\\"+divider:"")+"(\\d{"+part.length+"})"});regexp+="$";matches=val.match(new
RegExp(regexp));if(matches===null){return false}var
findDateUnit=function(unit,formatParts,matches){for(var
i=0;i<formatParts.length;i++){if(formatParts[i].substring(0,1)===unit){return
$.formUtils.parseDateInt(matches[i+1])}}return-1};month=findDateUnit("m",formatParts,matches);day=findDateUnit("d",formatParts,matches);year=findDateUnit("y",formatParts,matches);if(month===2&&day>28&&(year%4!==0||year%100===0&&year%400!==0)||month===2&&day>29&&(year%4===0||year%100!==0&&year%400===0)||month>12||month===0){return
false}if(this.isShortMonth(month)&&day>30||!this.isShortMonth(month)&&day>31||day===0){return
false}return[year,month,day]},parseDateInt:function(val){if(val.indexOf("0")===0){val=val.replace("0","")}return
parseInt(val,10)},isShortMonth:function(m){return
m%2===0&&m<7||m%2!==0&&m>7},lengthRestriction:function($inputElement,$maxLengthElement){var
maxChars=parseInt($maxLengthElement.text(),10),charsLeft=0,countCharacters=function(){var
numChars=$inputElement.val().length;if(numChars>maxChars){var
currScrollTopPos=$inputElement.scrollTop();$inputElement.val($inputElement.val().substring(0,maxChars));$inputElement.scrollTop(currScrollTopPos)}charsLeft=maxChars-numChars;if(charsLeft<0)charsLeft=0;$maxLengthElement.text(charsLeft)};$($inputElement).bind("keydown
keyup keypress focus blur",countCharacters).bind("cut
paste",function(){setTimeout(countCharacters,100)});$(document).bind("ready",countCharacters)},numericRangeCheck:function(value,rangeAllowed){var
range=$.split(rangeAllowed);var
minmax=parseInt(rangeAllowed.substr(3),10);if(range.length==2&&(value<parseInt(range[0],10)||value>parseInt(range[1],10))){return["out",range[0],range[1]]}else
if(rangeAllowed.indexOf("min")===0&&value<minmax){return["min",minmax]}else
if(rangeAllowed.indexOf("max")===0&&value>minmax){return["max",minmax]}return["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function($elem,suggestions,settings){var
conf={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC
solid
1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},setSuggsetionPosition=function($suggestionContainer,$input){var
offset=$input.offset();$suggestionContainer.css({width:$input.outerWidth(),left:offset.left+"px",top:offset.top+$input.outerHeight()+"px"})};if(settings)$.extend(conf,settings);conf.css["position"]="absolute";conf.css["z-index"]=9999;$elem.attr("autocomplete","off");if(this._numSuggestionElements===0){$window.bind("resize",function(){$(".jquery-form-suggestions").each(function(){var
$container=$(this),suggestID=$container.attr("data-suggest-container");setSuggsetionPosition($container,$(".suggestions-"+suggestID).eq(0))})})}this._numSuggestionElements++;var
onSelectSuggestion=function($el){var
suggestionId=$el.valAttr("suggestion-nr");$.formUtils._selectedSuggestion=null;$.formUtils._previousTypedVal=null;$(".jquery-form-suggestion-"+suggestionId).fadeOut("fast")};$elem.data("suggestions",suggestions).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){$(this).trigger("keyup");$.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var
$input=$(this),foundSuggestions=[],val=$.trim($input.val()).toLocaleLowerCase();if(val==$.formUtils._previousTypedVal){return}else{$.formUtils._previousTypedVal=val}var
hasTypedSuggestion=false,suggestionId=$input.valAttr("suggestion-nr"),$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);$suggestionContainer.scrollTop(0);if(val!=""){var
findPartial=val.length>2;$.each($input.data("suggestions"),function(i,suggestion){var
lowerCaseVal=suggestion.toLocaleLowerCase();if(lowerCaseVal==val){foundSuggestions.push("<strong>"+suggestion+"</strong>");hasTypedSuggestion=true;return
false}else
if(lowerCaseVal.indexOf(val)===0||findPartial&&lowerCaseVal.indexOf(val)>-1){foundSuggestions.push(suggestion.replace(new
RegExp(val,"gi"),"<strong>$&</strong>"))}})}if(hasTypedSuggestion||foundSuggestions.length==0&&$suggestionContainer.length>0){$suggestionContainer.hide()}else
if(foundSuggestions.length>0&&$suggestionContainer.length==0){$suggestionContainer=$("<div></div>").css(conf.css).appendTo("body");$elem.addClass("suggestions-"+suggestionId);$suggestionContainer.attr("data-suggest-container",suggestionId).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+suggestionId)}else
if(foundSuggestions.length>0&&!$suggestionContainer.is(":visible")){$suggestionContainer.show()}if(foundSuggestions.length>0&&val.length!=foundSuggestions[0].length){setSuggsetionPosition($suggestionContainer,$input);$suggestionContainer.html("");$.each(foundSuggestions,function(i,text){$("<div></div>").append(text).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo($suggestionContainer).click(function(){$input.focus();$input.val($(this).text());onSelectSuggestion($input)})})}}).unbind("keydown.validation").bind("keydown.validation",function(e){var
code=e.keyCode?e.keyCode:e.which,suggestionId,$suggestionContainer,$input=$(this);if(code==13&&$.formUtils._selectedSuggestion!==null){suggestionId=$input.valAttr("suggestion-nr");$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);if($suggestionContainer.length>0){var
newText=$suggestionContainer.find("div").eq($.formUtils._selectedSuggestion).text();$input.val(newText);onSelectSuggestion($input);e.preventDefault()}}else{suggestionId=$input.valAttr("suggestion-nr");$suggestionContainer=$(".jquery-form-suggestion-"+suggestionId);var
$suggestions=$suggestionContainer.children();if($suggestions.length>0&&$.inArray(code,[38,40])>-1){if(code==38){if($.formUtils._selectedSuggestion===null)$.formUtils._selectedSuggestion=$suggestions.length-1;else
$.formUtils._selectedSuggestion--;if($.formUtils._selectedSuggestion<0)$.formUtils._selectedSuggestion=$suggestions.length-1}else
if(code==40){if($.formUtils._selectedSuggestion===null)$.formUtils._selectedSuggestion=0;else
$.formUtils._selectedSuggestion++;if($.formUtils._selectedSuggestion>$suggestions.length-1)$.formUtils._selectedSuggestion=0}var
containerInnerHeight=$suggestionContainer.innerHeight(),containerScrollTop=$suggestionContainer.scrollTop(),suggestionHeight=$suggestionContainer.children().eq(0).outerHeight(),activeSuggestionPosY=suggestionHeight*$.formUtils._selectedSuggestion;if(activeSuggestionPosY<containerScrollTop||activeSuggestionPosY>containerScrollTop+containerInnerHeight){$suggestionContainer.scrollTop(activeSuggestionPosY)}$suggestions.removeClass("active-suggestion").css("background","none").eq($.formUtils._selectedSuggestion).addClass("active-suggestion").css(conf.activeSuggestionCSS);e.preventDefault();return
false}}}).unbind("blur.suggest").bind("blur.suggest",function(){onSelectSuggestion($(this))});return
$elem},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",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"}};$.formUtils.addValidator({name:"email",validatorFunction:function(email){var
emailParts=email.toLowerCase().split("@");if(emailParts.length==2){return
$.formUtils.validators.validate_domain.validatorFunction(emailParts[1])&&!/[^\w\+\.\-]/.test(emailParts[0])&&emailParts[0].length>0}return
false},errorMessage:"",errorMessageKey:"badEmail"});$.formUtils.addValidator({name:"domain",validatorFunction:function(val){return
val.length>0&&val.length<=253&&!/[^a-zA-Z0-9]/.test(val.substr(-2))&&!/[^a-zA-Z]/.test(val.substr(0,1))&&!/[^a-zA-Z0-9\.\-]/.test(val)&&val.split("..").length==1&&val.split(".").length>1},errorMessage:"",errorMessageKey:"badDomain"});$.formUtils.addValidator({name:"required",validatorFunction:function(val,$el,config,language,$form){switch($el.attr("type")){case"checkbox":return
$el.is(":checked");case"radio":return
$form.find('input[name="'+$el.attr("name")+'"]').filter(":checked").length>0;default:return
$.trim(val)!==""}},errorMessage:"",errorMessageKey:"requiredFields"});$.formUtils.addValidator({name:"length",validatorFunction:function(val,$el,conf,lang){var
lengthAllowed=$el.valAttr("length"),type=$el.attr("type");if(lengthAllowed==undefined){alert('Please
add attribute "data-validation-length" to '+$el[0].nodeName+" named
"+$el.attr("name"));return true}var
len=type=="file"&&$el.get(0).files!==undefined?$el.get(0).files.length:val.length,lengthCheckResults=$.formUtils.numericRangeCheck(len,lengthAllowed),checkResult;switch(lengthCheckResults[0]){case"out":this.errorMessage=lang.lengthBadStart+lengthAllowed+lang.lengthBadEnd;checkResult=false;break;case"min":this.errorMessage=lang.lengthTooShortStart+lengthCheckResults[1]+lang.lengthBadEnd;checkResult=false;break;case"max":this.errorMessage=lang.lengthTooLongStart+lengthCheckResults[1]+lang.lengthBadEnd;checkResult=false;break;default:checkResult=true}return
checkResult},errorMessage:"",errorMessageKey:""});$.formUtils.addValidator({name:"url",validatorFunction:function(url){var
urlFilter=/^(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(urlFilter.test(url)){var
domain=url.split("://")[1],domainSlashPos=domain.indexOf("/");if(domainSlashPos>-1)domain=domain.substr(0,domainSlashPos);return
$.formUtils.validators.validate_domain.validatorFunction(domain)}return
false},errorMessage:"",errorMessageKey:"badUrl"});$.formUtils.addValidator({name:"number",validatorFunction:function(val,$el,conf){if(val!==""){var
allowing=$el.valAttr("allowing")||"",decimalSeparator=$el.valAttr("decimal-separator")||conf.decimalSeparator,allowsRange=false,begin,end,steps=$el.valAttr("step")||"",allowsSteps=false;if(allowing.indexOf("number")==-1)allowing+=",number";if(allowing.indexOf("negative")>-1&&val.indexOf("-")===0){val=val.substr(1)}if(allowing.indexOf("range")>-1){begin=parseFloat(allowing.substring(allowing.indexOf("[")+1,allowing.indexOf(";")));end=parseFloat(allowing.substring(allowing.indexOf(";")+1,allowing.indexOf("]")));allowsRange=true}if(steps!="")allowsSteps=true;if(decimalSeparator==","){if(val.indexOf(".")>-1){return
false}val=val.replace(",",".")}if(allowing.indexOf("number")>-1&&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}}return
false},errorMessage:"",errorMessageKey:"badInt"});$.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(val,$el,conf,language){var
patternStart="^([a-zA-Z0-9",patternEnd="]+)$",additionalChars=$el.valAttr("allowing"),pattern="";if(additionalChars){pattern=patternStart+additionalChars+patternEnd;var
extra=additionalChars.replace(/\\/g,"");if(extra.indexOf("
")>-1){extra=extra.replace(" ","");extra+=" and spaces
"}this.errorMessage=language.badAlphaNumeric+language.badAlphaNumericExtra+extra}else{pattern=patternStart+patternEnd;this.errorMessage=language.badAlphaNumeric}return
new
RegExp(pattern).test(val)},errorMessage:"",errorMessageKey:""});$.formUtils.addValidator({name:"custom",validatorFunction:function(val,$el,conf){var
regexp=new RegExp($el.valAttr("regexp"));return
regexp.test(val)},errorMessage:"",errorMessageKey:"badCustomVal"});$.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},errorMessage:"",errorMessageKey:"badDate"});$.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(val,$el,conf,lang,$form){var
checkResult=true,elname=$el.attr("name"),checkedCount=$("input[type=checkbox][name^='"+elname+"']:checked",$form).length,qtyAllowed=$el.valAttr("qty");if(qtyAllowed==undefined){var
elementType=$el.get(0).nodeName;alert('Attribute "data-validation-qty" is
missing from '+elementType+" named "+$el.attr("name"))}var
qtyCheckResults=$.formUtils.numericRangeCheck(checkedCount,qtyAllowed);switch(qtyCheckResults[0]){case"out":this.errorMessage=lang.groupCheckedRangeStart+qtyAllowed+lang.groupCheckedEnd;checkResult=false;break;case"min":this.errorMessage=lang.groupCheckedTooFewStart+qtyCheckResults[1]+lang.groupCheckedEnd;checkResult=false;break;case"max":this.errorMessage=lang.groupCheckedTooManyStart+qtyCheckResults[1]+lang.groupCheckedEnd;checkResult=false;break;default:checkResult=true}return
checkResult}})})(jQuery);
Added: branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.dev.js
(rev 0)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -0,0 +1,40 @@
+/**
+ * jQuery Form Validator Module: JSconf
+ * ------------------------------------------
+ * Created by Victor Jonsson <http://www.victorjonsson.se>
+ *
+ * This module makes it possible to configure form validation using javascript
+ *
+ * @website http://formvalidator.net/#location-validators
+ * @license Dual licensed under the MIT or GPL Version 2 licenses
+ * @version 2.2.beta.58
+ */
+(function($) {
+
+ "use strict";
+
+ $.setupValidation = function(conf) {
+ var $forms = $(conf.form || 'form');
+ $.each(conf.validate || conf.validation || {}, function(elemRef, attr) {
+ var $elem;
+ if( elemRef[0] == '#' ) {
+ $elem = $(elemRef);
+ } else if( elemRef[0] == '.' ) {
+ $elem = $forms.find(elemRef);
+ } else {
+ $elem = $forms.find('*[name="' +elemRef+ '"]');
+ }
+
+ $elem.attr('data-validation', attr.validation);
+
+ $.each(attr, function(name, val) {
+ if( name != 'validation' ) {
+ $elem.attr('data-validation-'+name, typeof val == 'string' ? val :
'true');
+ }
+ });
+ });
+
+ $.validate(conf);
+ };
+
+})(jQuery);
Added: branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.js
(rev 0)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/jsconf.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -0,0 +1 @@
+(function($){"use strict";$.setupValidation=function(conf){var
$forms=$(conf.form||"form");$.each(conf.validate||conf.validation||{},function(elemRef,attr){var
$elem;if(elemRef[0]=="#"){$elem=$(elemRef)}else
if(elemRef[0]=="."){$elem=$forms.find(elemRef)}else{$elem=$forms.find('*[name="'+elemRef+'"]')}$elem.attr("data-validation",attr.validation);$.each(attr,function(name,val){if(name!="validation"){$elem.attr("data-validation-"+name,typeof
val=="string"?val:"true")}})});$.validate(conf)}})(jQuery);
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/location.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/location.dev.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/location.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -10,7 +10,7 @@
*
* @website http://formvalidator.net/#location-validators
* @license Dual licensed under the MIT or GPL Version 2 licenses
- * @version 2.2.beta.13
+ * @version 2.2.beta.58
*/
(function($) {
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/location.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/location.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/location.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -1 +1 @@
-(function($){$.formUtils.addValidator({name:"country",validatorFunction:function(str){return
$.inArray(str.toLowerCase(),this.countries)>-1},countries:["afghanistan","albania","algeria","american
samoa","andorra","angola","anguilla","antarctica","antigua and
barbuda","arctic ocean","argentina","armenia","aruba","ashmore and cartier
islands","atlantic
ocean","australia","austria","azerbaijan","bahamas","bahrain","baltic
sea","baker island","bangladesh","barbados","bassas da
india","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","borneo","bosnia
and herzegovina","botswana","bouvet island","brazil","british virgin
islands","brunei","bulgaria","burkina
faso","burundi","cambodia","cameroon","canada","cape verde","cayman
islands","central african republic","chad","chile","china","christmas
island","clipperton island","cocos islands","colombia","comoros","cook
islands","coral sea islands","costa rica","croatia","cuba","cyprus","czech
republic","democratic republic of the
congo","denmark","djibouti","dominica","dominican republic","east
timor","ecuador","egypt","el salvador","equatorial
guinea","eritrea","estonia","ethiopia","europa island","falkland
islands","faroe islands","fiji","finland","france","french guiana","french
polynesia","french southern and antarctic lands","gabon","gambia","gaza
strip","georgia","germany","ghana","gibraltar","glorioso
islands","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea-bissau","guyana","haiti","heard
island and mcdonald islands","honduras","hong kong","howland
island","hungary","iceland","india","indian
ocean","indonesia","iran","iraq","ireland","isle of
man","israel","italy","jamaica","jan mayen","japan","jarvis
island","jersey","johnston atoll","jordan","juan de nova
island","kazakhstan","kenya","kerguelen archipelago","kingman
reef","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall
islands","martinique","mauritania","mauritius","mayotte","mediterranean
sea","mexico","micronesia","midway
islands","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","navassa
island","nepal","netherlands","netherlands antilles","new caledonia","new
zealand","nicaragua","niger","nigeria","niue","norfolk island","north
korea","north sea","northern mariana islands","norway","oman","pacific
ocean","pakistan","palau","palmyra atoll","panama","papua new guinea","paracel
islands","paraguay","peru","philippines","pitcairn
islands","poland","portugal","puerto rico","qatar","republic of the
congo","reunion","romania","ross sea","russia","rwanda","saint helena","saint
kitts and nevis","saint lucia","saint pierre and miquelon","saint vincent and
the grenadines","samoa","san marino","sao tome and principe","saudi
arabia","senegal","serbia","seychelles","sierra
leone","singapore","slovakia","slovenia","solomon islands","somalia","south
africa","south georgia and the south sandwich islands","south korea","southern
ocean","spain","spratly islands","sri
lanka","sudan","suriname","svalbard","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","tasman
sea","thailand","togo","tokelau","tonga","trinidad and tobago","tromelin
island","tunisia","turkey","turkmenistan","turks and caicos
islands","tuvalu","uganda","ukraine","united arab emirates","united
kingdom","uruguay","usa","uzbekistan","vanuatu","venezuela","viet nam","virgin
islands","wake island","wallis and futuna","west bank","western
sahara","yemen","zambia","zimbabwe"],errorMessage:"",errorMessageKey:"badCustomVal"});$.formUtils.addValidator({name:"federatestate",validatorFunction:function(str){return
$.inArray(str.toLowerCase(),this.states)>-1},states:["alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","district
of
columbia","massachusetts","michigan","minnesota","mississippi","missouri","montana","nebraska","nevada","new
hampshire","new jersey","new mexico","new york","north carolina","north
dakota","ohio","oklahoma","oregon","pennsylvania","rhode island","south
carolina","south
dakota","tennessee","texas","utah","vermont","virginia","washington","west
virginia","wisconsin","wyoming"],errorMessage:"",errorMessageKey:"badCustomVal"});$.formUtils.addValidator({name:"longlat",validatorFunction:function(str){var
regexp=/^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$/;return
regexp.test(str)},errorMessage:"",errorMessageKey:"badCustomVal"});var
_makeSortedList=function(listItems){var
newList=[];$.each(listItems,function(i,v){newList.push(v.substr(0,1).toUpperCase()+v.substr(1,v.length))});newList.sort();return
newList};$.fn.suggestCountry=function(settings){var
country=_makeSortedList($.formUtils.validators.validate_country.countries);return
$.formUtils.suggest(this,country,settings)};$.fn.suggestState=function(settings){var
states=_makeSortedList($.formUtils.validators.validate_federatestate.states);return
$.formUtils.suggest(this,states,settings)}})(jQuery);
\ No newline at end of file
+(function($){$.formUtils.addValidator({name:"country",validatorFunction:function(str){return
$.inArray(str.toLowerCase(),this.countries)>-1},countries:["afghanistan","albania","algeria","american
samoa","andorra","angola","anguilla","antarctica","antigua and
barbuda","arctic ocean","argentina","armenia","aruba","ashmore and cartier
islands","atlantic
ocean","australia","austria","azerbaijan","bahamas","bahrain","baltic
sea","baker island","bangladesh","barbados","bassas da
india","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","borneo","bosnia
and herzegovina","botswana","bouvet island","brazil","british virgin
islands","brunei","bulgaria","burkina
faso","burundi","cambodia","cameroon","canada","cape verde","cayman
islands","central african republic","chad","chile","china","christmas
island","clipperton island","cocos islands","colombia","comoros","cook
islands","coral sea islands","costa rica","croatia","cuba","cyprus","czech
republic","democratic republic of the
congo","denmark","djibouti","dominica","dominican republic","east
timor","ecuador","egypt","el salvador","equatorial
guinea","eritrea","estonia","ethiopia","europa island","falkland
islands","faroe islands","fiji","finland","france","french guiana","french
polynesia","french southern and antarctic lands","gabon","gambia","gaza
strip","georgia","germany","ghana","gibraltar","glorioso
islands","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea-bissau","guyana","haiti","heard
island and mcdonald islands","honduras","hong kong","howland
island","hungary","iceland","india","indian
ocean","indonesia","iran","iraq","ireland","isle of
man","israel","italy","jamaica","jan mayen","japan","jarvis
island","jersey","johnston atoll","jordan","juan de nova
island","kazakhstan","kenya","kerguelen archipelago","kingman
reef","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall
islands","martinique","mauritania","mauritius","mayotte","mediterranean
sea","mexico","micronesia","midway
islands","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","navassa
island","nepal","netherlands","netherlands antilles","new caledonia","new
zealand","nicaragua","niger","nigeria","niue","norfolk island","north
korea","north sea","northern mariana islands","norway","oman","pacific
ocean","pakistan","palau","palmyra atoll","panama","papua new guinea","paracel
islands","paraguay","peru","philippines","pitcairn
islands","poland","portugal","puerto rico","qatar","republic of the
congo","reunion","romania","ross sea","russia","rwanda","saint helena","saint
kitts and nevis","saint lucia","saint pierre and miquelon","saint vincent and
the grenadines","samoa","san marino","sao tome and principe","saudi
arabia","senegal","serbia","seychelles","sierra
leone","singapore","slovakia","slovenia","solomon islands","somalia","south
africa","south georgia and the south sandwich islands","south korea","southern
ocean","spain","spratly islands","sri
lanka","sudan","suriname","svalbard","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","tasman
sea","thailand","togo","tokelau","tonga","trinidad and tobago","tromelin
island","tunisia","turkey","turkmenistan","turks and caicos
islands","tuvalu","uganda","ukraine","united arab emirates","united
kingdom","uruguay","usa","uzbekistan","vanuatu","venezuela","viet nam","virgin
islands","wake island","wallis and futuna","west bank","western
sahara","yemen","zambia","zimbabwe"],errorMessage:"",errorMessageKey:"badCustomVal"});$.formUtils.addValidator({name:"federatestate",validatorFunction:function(str){return
$.inArray(str.toLowerCase(),this.states)>-1},states:["alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","district
of
columbia","massachusetts","michigan","minnesota","mississippi","missouri","montana","nebraska","nevada","new
hampshire","new jersey","new mexico","new york","north carolina","north
dakota","ohio","oklahoma","oregon","pennsylvania","rhode island","south
carolina","south
dakota","tennessee","texas","utah","vermont","virginia","washington","west
virginia","wisconsin","wyoming"],errorMessage:"",errorMessageKey:"badCustomVal"});$.formUtils.addValidator({name:"longlat",validatorFunction:function(str){var
regexp=/^[+-]?\d+\.\d+, ?[+-]?\d+\.\d+$/;return
regexp.test(str)},errorMessage:"",errorMessageKey:"badCustomVal"});var
_makeSortedList=function(listItems){var
newList=[];$.each(listItems,function(i,v){newList.push(v.substr(0,1).toUpperCase()+v.substr(1,v.length))});newList.sort();return
newList};$.fn.suggestCountry=function(settings){var
country=_makeSortedList($.formUtils.validators.validate_country.countries);return
$.formUtils.suggest(this,country,settings)};$.fn.suggestState=function(settings){var
states=_makeSortedList($.formUtils.validators.validate_federatestate.states);return
$.formUtils.suggest(this,states,settings)}})(jQuery);
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/qunit.html
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/qunit.html
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/qunit.html
2015-03-20 13:41:35 UTC (rev 12881)
@@ -52,9 +52,9 @@
var message;
if( typeof obj.val == 'string' ) {
- message = 'Check that '+obj.val+' is '+(obj.isValid ?
'valid':'invalid');
+ message = 'Check that "'+obj.val+'" is '+(obj.isValid ?
'valid':'invalid');
} else {
- message = 'Check that input[value='+obj.val.attr('value')+'] is
'+(obj.isValid ? 'valid':'invalid');
+ message = 'Check that input[value="'+obj.val.attr('value')+'"] is
'+(obj.isValid ? 'valid':'invalid');
}
if( result === null && obj.isValid ) {
@@ -116,7 +116,7 @@
{val: 'address@hidden', isValid : true},
{val: 'address@hidden', isValid : true},
{val: 'address@hidden', isValid : true},
- {val: 'address@hidden', isValid : false},
+ {val: 'address@hidden', isValid : true},
{val: '@sdsd.xxz', isValid : false},
{val: 'sasas@', isValid : false},
{val: 'sasas.se', isValid : false},
@@ -139,10 +139,9 @@
{val: 'klsdmfklsmdf', isValid: false},
{val: 'http://google.se', isValid: true},
{val: 'https://google.se/test/?arge=hej_&arg[]=123', isValid:
true},
- {val: 'http://google.xxx/test/test.jsp', isValid: true},
- {val: 'http://google.xxy', isValid: false},
- {val: 'http://google.xxy/test/test.jsp', isValid: false},
{val: 'http://google.test.de', isValid: true},
+ {val: 'http://test.xn--fiqz9s', isValid: true},
+ {val: 'http://test.youtube', isValid: true},
{val: 'http://google.test.co.uk/', isValid: true}
];
@@ -163,15 +162,17 @@
{val:'domain.xxx', isValid:true},
{val:'domain.com', isValid:true},
{val:'www.domain.com', isValid:true},
+ {val:'test.xn--fiqz9s', isValid:true},
+ {val:'test..xn--fiqz9s', isValid:false},
{val:'q.com', isValid:true},
- {val:'v.com', isValid:false},
{val:'amazone.website.tippit.de', isValid:true},
{val:'amazone.website.co.uk', isValid:true},
{val:'http://domain.se', isValid:false},
{val:'http://www.domain.se', isValid:false},
{val:'http://www.domain.se/', isValid:false},
{val:'domain.com/', isValid:false},
- {val:'', isValid:false}
+ {val:'', isValid:false},
+ {val:'asdfasdf', isValid:false}
];
$.each(links, function(i, obj) {
@@ -211,7 +212,11 @@
{val:'asdXAvs1', isValid:true},
{val:'a b', isValid:false},
{val:'a-_ bäöåA', isValid:false},
+ {val:'abbb', isValid:true},
+ {val:'a,bbb', isValid:false},
+ {val:input('a,bbb', {'allowing':',', '':'alphanumeric'}),
isValid:true},
{val:input('a b', {'allowing':' ', '':'alphanumeric'}),
isValid:true},
+ {val:input('', {'allowing':' ', length:'3-12', '':'length
alphanumeric'}), isValid:false},
{val:input('a-_ bäöåÖA', {'allowing':' -_öäåÄÖÅ',
'':'alphanumeric'}), isValid:true}
];
@@ -244,6 +249,32 @@
});
});
+ test('isValid()', function() {
+
+ $form.empty();
+ $form.append(input('4000000000000002', {'allowing':'visa',
'':'creditcard'}));
+ $form.append(input('', {'optional':'true', '':'alphanumeric'}));
+ $form.append(input('', 'alphanumeric'));
+ $form.append(input('4000000000000002', 'alphanumeric'));
+
+ equal(
+ $form.isValid(false, false, false),
+ false
+ );
+
+ $form.empty();
+ $form.append(input('4000000000000002', {'allowing':'visa',
'':'creditcard'}));
+ $form.append(input('', {'optional':'true', '':'alphanumeric'}));
+ $form.append(input('fff', 'alphanumeric'));
+ $form.append(input('4000000000000002', 'alphanumeric'));
+
+ equal(
+ $form.isValid(false, false, false),
+ true
+ );
+
+ });
+
/*
* CVV VALIDATION
*/
@@ -253,6 +284,7 @@
var links = [
{val:'012', isValid:true},
+ {val:'0124', isValid:false},
{val:'000', isValid:true},
{val:'01', isValid:false},
{val:'a12', isValid:false}
@@ -261,11 +293,33 @@
$.each(links, function(i, obj) {
runTest(obj, 'cvv');
});
+
+ // check with amex only
+ var $cCard = input('', {'allowing':'amex', '':'creditcard'}),
+ $cvv = input('1234', 'cvv'),
+ result;
+
+ // let the validator know which type of card we're validating
+ $.formUtils.validateInput($cCard, $.formUtils.LANG,
$.formUtils.defaultConfig(), $form)
+
+ result = $.formUtils.validateInput($cvv, $.formUtils.LANG,
$.formUtils.defaultConfig(), $form);
+ equal(
+ true,
+ result
+ );
+
+ $cvv.val('123');
+ result = $.formUtils.validateInput($cvv, $.formUtils.LANG,
$.formUtils.defaultConfig(), $form);
+ equal(
+ 'string',
+ typeof result
+ );
+
});
/*
- * ALPHANUMERIC VALIDATION
+ * DISABLED VALIDATION
*/
test("Do not validate disabled", function() {
clearForm();
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/security.dev.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/security.dev.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/security.dev.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -13,7 +13,7 @@
* - cvv
*
* @website http://formvalidator.net/#security-validators
- * @version 2.2.beta.13
+ * @version 2.2.beta.58
*/
(function($, window) {
@@ -55,31 +55,37 @@
errorMessageKey: 'notConfirmed'
});
+ var creditCards = {
+ 'amex' : [15,15],
+ 'diners_club' : [14,14],
+ 'cjb' : [16,16],
+ 'laser' : [16,19],
+ 'visa' : [16,16],
+ 'mastercard' : [16,16],
+ 'maestro' : [12,19],
+ 'discover' : [16,16]
+ },
+ checkOnlyAmex = false,
+ allowsAmex = false;
+
/*
* Credit card
*/
$.formUtils.addValidator({
name : 'creditcard',
validatorFunction : function(value, $el, config, language, $form) {
- var cards = {
- 'amex' : [15,15],
- 'diners_club' : [14,14],
- 'cjb' : [16,16],
- 'laser' : [16,19],
- 'visa' : [16,16],
- 'mastercard' : [16,16],
- 'maestro' : [12,19],
- 'discover' : [16,16]
- },
- allowing = $.split( $el.valAttr('allowing') || '' );
+ var allowing = $.split( $el.valAttr('allowing') || '' );
+ // Setup for cvv validation
+ allowsAmex = $.inArray('amex', allowing) > -1;
+ checkOnlyAmex = allowsAmex && allowing.length == 1;
// Correct length
if( allowing.length > 0 ) {
var hasValidLength = false;
$.each(allowing, function(i, cardName) {
- if( cardName in cards) {
- if( value.length >= cards[cardName][0] && value.length
<= cards[cardName][1]) {
+ if( cardName in creditCards) {
+ if( value.length >= creditCards[cardName][0] &&
value.length <= creditCards[cardName][1]) {
hasValidLength = true;
return false;
}
@@ -126,7 +132,17 @@
$.formUtils.addValidator({
name : 'cvv',
validatorFunction : function(val) {
- return val.replace(/[0-9]/g, '') === '' && (val + '').length == 3;
+ if( val.replace(/[0-9]/g, '') === '' ) {
+ val = val + '';
+ if( checkOnlyAmex ) {
+ return val.length == 4;
+ } else if( allowsAmex ) {
+ return val.length == 3 || val.length == 4;
+ } else {
+ return val.length == 3;
+ }
+ }
+ return false;
},
errorMessage : '',
errorMessageKey: 'badCVV'
@@ -317,13 +333,21 @@
});
var requestServer = function(serverURL, $element, val, conf, callback) {
+ var reqParams = $element.valAttr('req-params');
+ if( !reqParams )
+ reqParams = {};
+ if( typeof reqParams == 'string' ) {
+ reqParams = $.parseJSON(reqParams);
+ }
+ reqParams[$element.valAttr('param-name') || $element.attr('name')] =
val;
+
$.ajax({
url : serverURL,
type : 'POST',
cache : false,
- data : $element.attr('name')+'='+val,
+ data : reqParams,
dataType : 'json',
- error : function(error) {
+ error : function(error, err) {
alert('Server validation failed due to: '+error.statusText);
if( window.JSON && window.JSON.stringify ) {
alert(window.JSON.stringify(error));
@@ -337,8 +361,6 @@
$element.valAttr('backend-invalid', 'true');
if(response.message)
$element.attr(conf.validationErrorMsgAttribute,
response.message);
- else
- $element.removeAttr(conf.validationErrorMsgAttribute);
}
if( !$element.valAttr('has-keyup-event') ) {
@@ -348,8 +370,7 @@
if( evt.keyCode != 9 && evt.keyCode != 16 ) {
$(this)
.valAttr('backend-valid', false)
- .valAttr('backend-invalid', false)
-
.removeAttr(conf.validationErrorMsgAttribute);
+ .valAttr('backend-invalid', false);
}
});
}
@@ -396,12 +417,14 @@
return null;
if($.formUtils.isValidatingEntireForm) {
+
$form
.bind('submit', disableFormSubmit)
.addClass('validating-server-side')
.addClass('on-blur');
$el.addClass('validating-server-side');
+ $.formUtils.haltValidation = true;
requestServer(serverURL, $el, val, conf, function() {
$form
@@ -415,10 +438,10 @@
$el.valAttr('value-length', val.length);
// fire submission again!
+ $.formUtils.haltValidation = false;
$form.trigger('submit');
});
- $.formUtils.haltValidation = true;
return null;
} else {
Modified: branches/dev-syncromind/phpgwapi/js/form-validator/security.js
===================================================================
--- branches/dev-syncromind/phpgwapi/js/form-validator/security.js
2015-03-20 09:01:00 UTC (rev 12880)
+++ branches/dev-syncromind/phpgwapi/js/form-validator/security.js
2015-03-20 13:41:35 UTC (rev 12881)
@@ -1 +1 @@
@@ Diff output truncated at 153600 characters. @@
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [12881] update form-validator from upstream,
Sigurd Nes <=