èÓòi YS ØÅòi ücÙ ”’ Accept-Encoding,User-Agent Á‹qî)´ êi‚ƒ¼{ñçÎ
KEY: http://www.quadrangularcentral.com.br/js/jquery.bvalidator.js
HTTP/1.1 200 OK
Date: Thu, 30 Apr 2026 03:00:40 GMT
Server: Apache
Last-Modified: Mon, 17 Feb 2014 12:45:13 GMT
Accept-Ranges: bytes
Content-Length: 19283
Vary: Accept-Encoding,User-Agent
Connection: close
Content-Type: application/javascript
/*!
* jQuery bValidator plugin
*
* http://code.google.com/p/bvalidator/
*
* Copyright (c) 2011 Bojan Mauser
*
* $Id: jquery.bvalidator.js 55 2011-02-02 01:29:04Z bmauser $
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function($){
// constructor
$.fn.bValidator = function(overrideOptions){
return new bValidator(this, overrideOptions);
};
// bValidator class
bValidator = function(mainElement, overrideOptions){
// default options
var options = {
singleError: false, // validate all inputs at once
offset: {x:-25, y:-3}, // offset position for error message tooltip
position: {x:'right', y:'top'}, // error message placement x:left|center|right y:top|center|bottom
template: '
{message}
', // template for error message
templateCloseIcon: '', // template for error message container when showCloseIcon option is true
showCloseIcon: true, // put close icon on error message
showErrMsgSpeed: 'normal', // message's fade-in speed 'fast', 'normal', 'slow' or number of milliseconds
scrollToError: true, // scroll to first error
// css class names
closeIconClass: 'bvalidator_close_icon', // close error message icon class
errMsgClass: 'bvalidator_errmsg', // error message class
errorClass: 'bvalidator_invalid', // input field class name in case of validation error
validClass: '', // input field class name in case of valid value
lang: 'en', // default language for error messages
errorMessageAttr: 'data-bvalidator-msg',// name of the attribute for overridden error message
validateActionsAttr: 'data-bvalidator', // name of the attribute which stores info what validation actions to do
paramsDelimiter: ':', // delimiter for validator action options inside []
validatorsDelimiter: ',', // delimiter for validator actions
// when to validate
validateOn: null, // null, 'change', 'blur', 'keyup'
errorValidateOn: 'keyup', // null, 'change', 'blur', 'keyup'
// callback functions
onBeforeValidate: null,
onAfterValidate: null,
onValidateFail: null,
onValidateSuccess: null,
// default error messages
errorMessages: {
en: {
'default': 'Please correct this value.',
'equalto': 'Please enter the same value again.',
'differs': 'Please enter a different value.',
'minlength': 'The length must be at least {0} characters',
'maxlength': 'The length must be at max {0} characters',
'rangelength':'The length must be between {0} and {1}',
'min': 'Please enter a number greater than or equal to {0}.',
'max': 'Please enter a number less than or equal to {0}.',
'between': 'Please enter a number between {0} and {1}.',
'required': 'Este campo é obrigatório.',
'alpha': 'Please enter alphabetic characters only.',
'alphanum': 'Please enter alphanumeric characters only.',
'digit': 'Please enter only digits.',
'number': 'Please enter a valid number.',
'email': 'Digite um endereço de e-mail válido.',
'image': 'This field should only contain image types',
'url': 'Please enter a valid URL.',
'ip4': 'Please enter a valid IP address.',
'date': 'Please enter a valid date in format {0}.'
}
},
// regular expressions used by validator methods
regex: {
alpha: /^[a-z ._\-]+$/i,
alphanum: /^[a-z0-9 ._\-]+$/i,
digit: /^\d+$/,
number: /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/,
email: /^([a-zA-Z0-9_\.\-\+%])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
image: /\.(jpg|jpeg|png|gif|bmp)$/i,
url: /^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*$/i
}
},
// returns all inputs
_getElementsForValidation = function(element){
// skip hidden and input fields witch we do not want to validate
return element.is(':input') ? element : element.find(':input[' + options.validateActionsAttr + ']').not(":button, :image, :reset, :submit, :hidden, :disabled");
},
// binds validateOn event
_bindValidateOn = function(elements){
elements.bind(options.validateOn + '.bV', {'bVInstance': instance}, function(event){
event.data.bVInstance.validate(false, $(this));
});
},
// displays error message
_showErrMsg = function(element, messages){
// if error message already exists remove it from DOM
_removeErrMsg(element);
msg_container = $('').css('position','absolute');
element.data("errMsg.bV", msg_container);
msg_container.insertAfter(element);
var messagesHtml = '';
for(var i in messages)
messagesHtml += '' + messages[i] + '
\n';
if(options.showCloseIcon)
messagesHtml = options.templateCloseIcon.replace('{message}', messagesHtml).replace('{closeIconClass}', options.closeIconClass).replace('{closeErrMsg}', '$(this).closest(\'.'+ options.errMsgClass +'\').css(\'visibility\', \'hidden\');');
// make tooltip from template
var tooltip = $(options.template.replace('{errMsgClass}', options.errMsgClass).replace('{message}', messagesHtml));
tooltip.appendTo(msg_container);
var pos = _getErrMsgPosition(element, tooltip);
tooltip.css({visibility: 'visible', position: 'absolute', top: pos.top, left: pos.left}).fadeIn(options.showErrMsgSpeed);
if(options.scrollToError){
// get most top tolltip
var tot = tooltip.offset().top;
if(scroll_to === null || tot < scroll_to)
scroll_to = tot;
}
},
// removes error message from DOM
_removeErrMsg = function(element){
var existingMsg = element.data("errMsg.bV")
if(existingMsg){
existingMsg.remove();
}
},
// calculates error message position
_getErrMsgPosition = function(input, tooltip){
var tooltipContainer = input.data("errMsg.bV"),
top = - ((tooltipContainer.offset().top - input.offset().top) + tooltip.outerHeight() - options.offset.y),
left = (input.offset().left + input.outerWidth()) - tooltipContainer.offset().left + options.offset.x,
x = options.position.x,
y = options.position.y;
// adjust Y
if(y == 'center' || y == 'bottom'){
var height = tooltip.outerHeight() + input.outerHeight();
if (y == 'center') {top += height / 2;}
if (y == 'bottom') {top += height;}
}
// adjust X
if(x == 'center' || x == 'left'){
var width = input.outerWidth();
if (x == 'center') {left -= width / 2;}
if (x == 'left') {left -= width;}
}
return {top: top, left: left};
},
// calls callback functions
_callBack = function(type, param1, param2, param3){
if($.isFunction(options[type])){
return options[type](param1, param2, param3);
}
},
// gets element value
_getValue = function(element){
var ret = {};
// checkbox
if(element.is('input:checkbox')){
ret['value'] = element.attr('name') ? ret['selectedInGroup'] = $('input:checkbox[name="' + element.attr('name') + '"]:checked').length : element.attr('checked');
}
else if(element.is('input:radio')){
ret['value'] = element.attr('name') ? ret['value'] = $('input:radio[name="' + element.attr('name') + '"]:checked').length : element.val();
}
else if(element.is('select')){
ret['selectedInGroup'] = $("option:selected", element).length;
ret['value'] = element.val();
}
else if(element.is(':input')){
ret['value'] = element.val();
}
return ret;
},
// object with validator functions
validator = {
equalto: function(v, elementId){
return v.value == $('#' + elementId).val();
},
differs: function(v, elementId){
return v.value != $('#' + elementId).val();
},
minlength: function(v, minlength){
return (v.value.length >= parseInt(minlength))
},
maxlength: function(v, maxlength){
return (v.value.length <= parseInt(maxlength))
},
rangelength: function(v, minlength, maxlength){
return (v.value.length >= parseInt(minlength) && v.value.length <= parseInt(maxlength))
},
min: function(v, min){
if(v.selectedInGroup)
return v.selectedInGroup >= parseFloat(min)
else{
if(!this.number(v))
return false;
return (parseFloat(v.value) >= parseFloat(min))
}
},
max: function(v, max){
if(v.selectedInGroup)
return v.selectedInGroup <= parseFloat(max)
else{
if(!this.number(v))
return false;
return (parseFloat(v.value) <= parseFloat(max))
}
},
between: function(v, min, max){
if(v.selectedInGroup)
return (v.selectedInGroup >= parseFloat(min) && v.selectedInGroup <= parseFloat(max))
if(!this.number(v))
return false;
var va = parseFloat(v.value);
return (va >= parseFloat(min) && va <= parseFloat(max))
},
required: function(v){
if(!v.value || !$.trim(v.value))
return false
return true
},
alpha: function(v){
return this.regex(v, options.regex.alpha);
},
alphanum: function(v){
return this.regex(v, options.regex.alphanum);
},
digit: function(v){
return this.regex(v, options.regex.digit);
},
number: function(v){
return this.regex(v, options.regex.number);
},
email: function(v){
return this.regex(v, options.regex.email);
},
image: function(v){
return this.regex(v, options.regex.image);
},
url: function(v){
return this.regex(v, options.regex.url);
},
regex: function(v, regex, mod){
if(typeof regex === "string")
regex = new RegExp(regex, mod);
return regex.test(v.value);
},
ip4: function(v){
var r = /^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$/;
if (!r.test(v.value) || v.value == "0.0.0.0" || v.value == "255.255.255.255")
return false
return true;
},
date: function(v, format){ // format can be any combination of mm,dd,yyyy with separator between. Example: 'mm.dd.yyyy' or 'yyyy-mm-dd'
if(v.value.length == 10 && format.length == 10){
var s = format.match(/[^mdy]+/g);
if(s.length == 2 && s[0].length == 1 && s[0] == s[1]){
var d = v.value.split(s[0]),
f = format.split(s[0]);
for(var i=0; i<3; i++){
if(f[i] == 'dd') var day = d[i];
else if(f[i] == 'mm') var month = d[i];
else if(f[i] == 'yyyy') var year = d[i];
}
var dobj = new Date(year, month-1, day)
if ((dobj.getMonth()+1!=month) || (dobj.getDate()!=day) || (dobj.getFullYear()!=year))
return false
return true
}
}
return false;
},
extension: function(){
var v = arguments[0],
r = '';
if(!arguments[1])
return false
for(var i=1; i scroll_to || $(window).scrollTop()+$(window).height() < scroll_to)){
var ua = navigator.userAgent.toLowerCase();
$(ua.indexOf('chrome')>-1 || ua.indexOf('safari')>-1 ? 'body' : 'html').animate({scrollTop: scroll_to - 10}, {duration: 'slow'});
}
return ret;
}
// returns options object
this.getOptions = function(){
return options;
}
// chechs validity
this.isValid = function(){
return this.validate(true);
}
// deletes error message
this.removeErrMsg = function(element){
_removeErrMsg(element);
}
// returns all inputs
this.getInputs = function(){
return _getElementsForValidation(mainElement);
}
// binds validateOn event
this.bindValidateOn = function(element){
_bindValidateOn(element);
}
// resets validation
this.reset = function(){
elements = _getElementsForValidation(mainElement);
if (options.validateOn)
_bindValidateOn(elements);
elements.each(function(){
_removeErrMsg($(this));
$(this).unbind('.bVerror');
$(this).removeClass(options.errorClass);
$(this).removeClass(options.validClass);
});
}
this.destroy = function(){
if (mainElement.is('form'))
mainElement.unbind('.bV');
this.reset();
mainElement.removeData("bValidator");
}
}
})(jQuery);