diff --git a/jquery.formvalidator.js b/jquery.formvalidator.js index cfee3e5..7dd2a69 100644 --- a/jquery.formvalidator.js +++ b/jquery.formvalidator.js @@ -35,8 +35,9 @@ * @return {jQuery} */ showHelpOnFocus : function(attrName) { - if(typeof attrName == 'undefined') + if(typeof attrName === 'undefined') { attrName = 'data-help'; + } $(this).find('textarea,input').each(function() { var help = $(this).attr(attrName); @@ -44,7 +45,7 @@ $(this) .focus(function() { var $element = $(this); - if($element.parent().find('.jquery_form_help').length == 0) { + if($element.parent().find('.jquery_form_help').length === 0) { $element.after( $('') .addClass('jquery_form_help') @@ -77,8 +78,9 @@ * @return {jQuery} */ doValidate : function(language, settings, attachKeyupEvent) { - if(typeof attachKeyupEvent == 'undefined') + if(typeof attachKeyupEvent === 'undefined') { attachKeyupEvent = true; + } var $element = $(this); @@ -89,16 +91,19 @@ dateFormat : 'yyyy-mm-dd' }; - if (settings) + if (settings) { $.extend(config, settings); - if (language) + } + if (language) { $.extend(jQueryFormUtils.LANG,language); - else + } else { language = jQueryFormUtils.LANG; + } var elementType = $element.attr('type'); - if (jQueryFormUtils.defaultBorderColor == null && elementType != 'submit' && elementType != 'checkbox' && elementType != 'radio') + if (jQueryFormUtils.defaultBorderColor === null && elementType !== 'submit' && elementType !== 'checkbox' && elementType !== 'radio') { jQueryFormUtils.defaultBorderColor = $element.css('border-color'); + } // Remove possible error style applied by previous validation $element @@ -106,21 +111,23 @@ .parent() .find('.jquery_form_error_message').remove(); - if(config.borderColorOnError != '') + if(config.borderColorOnError !== '') { $element.css('border-color', jQueryFormUtils.defaultBorderColor); + } var validation = jQueryFormUtils.validateInput($element, language, config); - if(validation === true) + if(validation === true) { $element.unbind('keyup'); - else { + } else { $element .addClass(config.errorElementClass) .parent() .append(''+validation+''); - if(config.borderColorOnError != '') + if(config.borderColorOnError !== '') { $element.css('border-color', config.borderColorOnError); + } if(attachKeyupEvent) { $element.bind('keyup', function() { @@ -157,12 +164,14 @@ /* * Extends initial settings */ - if (settings) + if (settings) { $.extend(config, settings); - if (language) + } + if (language) { $.extend(jQueryFormUtils.LANG, language); - else + } else { language = jQueryFormUtils.LANG; + } /** @@ -173,12 +182,14 @@ * @return {Boolean} */ var ignoreInput = function(name, type) { - if (type == 'submit' || type == 'button') + if (type === 'submit' || type === 'button') { return true; + } for (var i = 0; i < config.ignore.length; i++) { - if (config.ignore[i] == name) + if (config.ignore[i] === name) { return true; + } } return false; }; @@ -189,8 +200,9 @@ * @param {String} mess */ var addErrorMessage = function(mess) { - if (jQuery.inArray(mess, errorMessages) < 0) + if (jQuery.inArray(mess, errorMessages) < 0) { errorMessages.push(mess); + } }; /** Error messages for this validation */ @@ -207,12 +219,13 @@ // $form.find('input[type=radio]').each(function() { var validationRule = $(this).attr(config.validationRuleAttribute); - if (typeof validationRule != 'undefined' && validationRule == 'required') { + if (typeof validationRule !== 'undefined' && validationRule === 'required') { var radioButtonName = $(this).attr('name'); var isChecked = false; $form.find('input[name=' + radioButtonName + ']').each(function() { - if ($(this).is(':checked')) + if ($(this).is(':checked')) { isChecked = true; + } }); if (!isChecked) { errorMessages.push(language.requiredFields); @@ -229,8 +242,9 @@ if (!ignoreInput($(this).attr('name'), $(this).attr('type'))) { // memorize border color - if (jQueryFormUtils.defaultBorderColor == null && $(this).attr('type') == 'text') + if (jQueryFormUtils.defaultBorderColor === null && $(this).attr('type') === 'text') { jQueryFormUtils.defaultBorderColor = $(this).css('border-color'); + } var valid = jQueryFormUtils.validateInput( $(this), @@ -269,20 +283,23 @@ // Apply error style to invalid inputs for (var i = 0; i < errorInputs.length; i++) { - if (config.borderColorOnError != '') + if (config.borderColorOnError !== '') { errorInputs[i].css('border-color', config.borderColorOnError); + } errorInputs[i].addClass(config.errorElementClass); } // display all error messages in top of form - if (config.errorMessagePosition == 'top') { + if (config.errorMessagePosition === 'top') { var messages = '' + language.errorTitle + ''; - for (var i = 0; i < errorMessages.length; i++) + for (var i = 0; i < errorMessages.length; i++) { messages += '
* ' + errorMessages[i]; + } $form.children().eq(0).before('

' + messages + '

'); - if(config.scrollToTopOnError) + if(config.scrollToTopOnError) { $(window).scrollTop($form.offset().top - 20); + } } // Display error message below input field @@ -290,10 +307,11 @@ for (var i = 0; i < errorInputs.length; i++) { var parent = errorInputs[i].parent(); var errorSpan = parent.find('span[class=jquery_form_error_message]'); - if (errorSpan.length > 0) + if (errorSpan.length > 0) { errorSpan.eq(0).text(errorInputs[i].attr('data-error')); - else + } else { parent.append('' + errorInputs[i].attr('data-error') + ''); + } } } return false; @@ -330,10 +348,10 @@ jQueryFormUtils.defaultBorderColor = null; * @return {Boolean} */ jQueryFormUtils.validateEmail = function(email) { - var emailFilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/; + var emailFilter = /^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if(emailFilter.test(email)) { var parts = email.split('@'); - if(parts.length == 2) { + if(parts.length === 2) { return jQueryFormUtils.validateDomain(parts[1]); } } @@ -349,13 +367,15 @@ jQueryFormUtils.validatePhoneNumber = function(tele) { var numPlus = tele.match(/\+/g); var numHifen = tele.match(/-/g); - if ((numPlus != null && numPlus.length > 1) || (numHifen != null && numHifen.length > 1)) + if ((numPlus !== null && numPlus.length > 1) || (numHifen !== null && numHifen.length > 1)) { return false; - if (numPlus != null && tele.indexOf('+') != 0) + } + if (numPlus !== null && tele.indexOf('+') !== 0) { return false; + } tele = tele.replace(/([-|\+])/g, ''); - return tele.length > 8 && tele.match(/[^0-9]/g) == null; + return tele.length > 8 && tele.match(/[^0-9]/g) === null; }; /** @@ -365,17 +385,19 @@ jQueryFormUtils.validatePhoneNumber = function(tele) { * @return {Boolean} */ jQueryFormUtils.validateSwedishMobileNumber = function(number) { - if (!jQueryFormUtils.validatePhoneNumber(number)) + if (!jQueryFormUtils.validatePhoneNumber(number)) { return false; + } number = number.replace(/[^0-9]/g, ''); var begin = number.substring(0, 3); - if (number.length != 10 && begin != '467') + if (number.length !== 10 && begin !== '467') { return false; - else if (number.length != 11 && begin == '467') + } else if (number.length !== 11 && begin === '467') { return false; - return /07[0-9{1}]/.test(begin) || (begin == '467' && number.substr(3, 1) == '0'); + } + return (/07[0-9{1}]/).test(begin) || (begin === '467' && number.substr(3, 1) === '0'); }; /** @@ -385,8 +407,9 @@ jQueryFormUtils.validateSwedishMobileNumber = function(number) { */ jQueryFormUtils.validateBirthdate = function(val, dateFormat) { var inputDate = this.parseDate(val, dateFormat); - if (!inputDate) + if (!inputDate) { return false; + } var d = new Date(); var currentYear = d.getFullYear(); @@ -394,17 +417,19 @@ jQueryFormUtils.validateBirthdate = function(val, dateFormat) { var month = inputDate[1]; var day = inputDate[2]; - if (year == currentYear) { + if (year === currentYear) { var currentMonth = d.getMonth() + 1; - if (month == currentMonth) { + if (month === currentMonth) { var currentDay = d.getDate(); return day <= currentDay; } - else + else { return month < currentMonth; + } } - else + else { return year < currentYear && year > (currentYear - 124); // we can not live for ever yet... + } }; /** @@ -419,17 +444,19 @@ jQueryFormUtils.parseDate = function(val, dateFormat) { var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0,1); var regexp = '^'; var formatParts = dateFormat.split(divider); - for(var i=0; i < formatParts.length; i++) + for(var i=0; i < formatParts.length; i++) { regexp += (i > 0 ? '\\'+divider:'') + '(\\d{'+formatParts[i].length+'})'; + } regexp += '$'; var matches = val.match(new RegExp(regexp)); - if (matches == null) + 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) { + if(formatParts[i].substring(0,1) === unit) { return jQueryFormUtils.parseDateInt(matches[i+1]); } } @@ -440,10 +467,12 @@ jQueryFormUtils.parseDate = function(val, dateFormat) { var day = findDateUnit('d', formatParts, matches); var year = findDateUnit('y', formatParts, matches); - if (month == 2 && day > 28 || month > 12 || month == 0) + if (month === 2 && day > 28 || month > 12 || month === 0) { return false; - if ((this.isShortMonth(month) && day > 30) || (!this.isShortMonth(month) && day > 31) || day == 0) + } + if ((this.isShortMonth(month) && day > 30) || (!this.isShortMonth(month) && day > 31) || day === 0) { return false; + } return [year, month, day]; }; @@ -455,9 +484,10 @@ jQueryFormUtils.parseDate = function(val, dateFormat) { * @param {Number} */ jQueryFormUtils.parseDateInt = function(val) { - if (val.indexOf('0') == 0) + if (val.indexOf('0') === 0) { val = val.replace('0', ''); - return parseInt(val); + } + return parseInt(val,10); }; /** @@ -467,30 +497,35 @@ jQueryFormUtils.parseDateInt = function(val) { * @return {Boolean} */ jQueryFormUtils.validateSwedishSecurityNumber = function(securityNumber) { - if (!securityNumber.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/)) + if (!securityNumber.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/)) { return false; + } var year = RegExp.$1; var month = jQueryFormUtils.parseDateInt(RegExp.$2); var day = jQueryFormUtils.parseDateInt(RegExp.$3); - // var gender = parseInt( (RegExp.$4) .substring(2,3)) % 2; ==> 1 == male && 0 == female + // var gender = parseInt( (RegExp.$4) .substring(2,3)) % 2; ==> 1 === male && 0 === female var months = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); - if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) + if (year % 400 === 0 || year % 4 === 0 && year % 100 !== 0) { months[1] = 29; - if (month < 1 || month > 12 || day < 1 || day > months[month - 1]) + } + if (month < 1 || month > 12 || day < 1 || day > months[month - 1]) { return false; + } securityNumber = securityNumber.substring(2, securityNumber.length); var check = ''; - for (var i = 0; i < securityNumber.length; i++) + for (var i = 0; i < securityNumber.length; i++) { check += ((((i + 1) % 2) + 1) * securityNumber.substring(i, i + 1)); + } var checksum = 0; - for (i = 0; i < check.length; i++) - checksum += parseInt(check.substring(i, i + 1)); + for (i = 0; i < check.length; i++) { + checksum += parseInt(check.substring(i, i + 1),10); + } - return checksum % 10 == 0; + return checksum % 10 === 0; }; /** @@ -500,13 +535,14 @@ jQueryFormUtils.validateSwedishSecurityNumber = function(securityNumber) { * @return {Boolean} */ jQueryFormUtils.validateTime = function(time) { - if (time.match(/^(\d{2}):(\d{2})$/) == null) + if (time.match(/^(\d{2}):(\d{2})$/) === null) { return false; - else { - var hours = parseInt(time.split(':')[0]); - var minutes = parseInt(time.split(':')[1]); - if((hours > 24 || minutes > 59) || (hours == 24 && minutes > 0)) + } else { + var hours = parseInt(time.split(':')[0],10); + var minutes = parseInt(time.split(':')[1],10); + if((hours > 24 || minutes > 59) || (hours === 24 && minutes > 0)) { return false; + } } return true; }; @@ -518,7 +554,7 @@ jQueryFormUtils.validateTime = function(time) { * @return {Boolean} */ jQueryFormUtils.validateFloat = function(val) { - return val.match(/^(\-|)([0-9]+)\.([0-9]+)$/) != null; + return val.match(/^(\-|)([0-9]+)\.([0-9]+)$/) !== null; }; /** @@ -528,7 +564,7 @@ jQueryFormUtils.validateFloat = function(val) { * @return {Boolean} */ jQueryFormUtils.validateInteger = function(val) { - return val != '' && val.replace(/[0-9]/g, '') == ''; + return val !== '' && val.replace(/[0-9]/g, '') === ''; }; /** @@ -538,7 +574,7 @@ jQueryFormUtils.validateInteger = function(val) { * @return {Boolean} */ jQueryFormUtils.isShortMonth = function(m) { - return (m % 2 == 0 && m < 7) || (m % 2 != 0 & m > 7); + return (m % 2 === 0 && m < 7) || (m % 2 !== 0 && m > 7); }; /** @@ -550,7 +586,7 @@ jQueryFormUtils.isShortMonth = function(m) { */ jQueryFormUtils.simpleSpamCheck = function(val, classAttr) { var answer = classAttr.match(/captcha([0-9a-z]+)/i)[1].replace('captcha', ''); - return val == answer; + return val === answer; }; /** @@ -560,7 +596,7 @@ jQueryFormUtils.simpleSpamCheck = function(val, classAttr) { * @return {Boolean} */ jQueryFormUtils.validateDomain = function(val) { - val = val.replace('http://', '').replace('www.', ''); + val = val.replace('ftp://', '').replace('https://', '').replace('http://', '').replace('www.', ''); var arr = new Array('.com', '.net', '.org', '.biz', '.coop', '.info', '.museum', '.name', '.pro', '.edu', '.gov', '.int', '.mil', '.ac', '.ad', '.ae', '.af', '.ag', '.ai', '.al', '.am', '.an', '.ao', '.aq', '.ar', '.as', '.at', '.au', '.aw', '.az', '.ba', '.bb', @@ -589,27 +625,50 @@ jQueryFormUtils.validateDomain = function(val) { var ext = val.substring(dot, val.length); var hasTopDomain = false; - for (var i = 0; i < arr.length; i++) { - if (arr[i] == ext) { - hasTopDomain = true; - break; - } - } + for (var i = 0; i < arr.length; i++) { + if (arr[i] === ext) { + if(ext==='.uk') { + //Run Extra Checks for UK Domain Names + var domainParts = val.split('.'); + var tld2 = domainParts[domainParts.length-2]; + var ukarr = new Array('co', 'me', 'ac', 'gov', 'judiciary', + 'ltd', 'mod', 'net', 'nhs', 'nic', 'org', 'parliament', + 'plc', 'police', 'sch', 'bl', 'british-library', 'jet', + 'nls'); + + for(var j = 0; j < ukarr.length; j++) { + if(ukarr[j] === tld2) + { + hasTopDomain = true; + break; + } + } + } else { + hasTopDomain = true; + break; + } + } + } + + - if (!hasTopDomain) + if (!hasTopDomain) { return false; - else if (dot < 2 || dot > 57) + } else if (dot < 2 || dot > 57) { return false; - else { + } else { var firstChar = domain.substring(0, 1); var lastChar = domain.substring(domain.length - 1, domain.length); - if (firstChar == '-' || firstChar == '.' || lastChar == '-' || lastChar == '.') + if (firstChar === '-' || firstChar === '.' || lastChar === '-' || lastChar === '.') { return false; - if (domain.split('.').length > 3 || domain.split('..').length > 1) + } + if (domain.split('.').length > 3 || domain.split('..').length > 1) { return false; - if (domain.replace(/[0-9a-z\.\-]/g, '') != '') + } + if (domain.replace(/[0-9a-z\.\-]/g, '') !== '') { return false; + } } return true; @@ -630,7 +689,7 @@ jQueryFormUtils.validateInput = function(el, language, config, form) { var value = jQuery.trim(el.val()); var validationRules = el.attr(config.validationRuleAttribute); - if (typeof validationRules != 'undefined' && validationRules != null) { + if (typeof validationRules !== 'undefined' && validationRules !== null) { /** * => getAttribute($(element).attr('class'), 'length') = 12 @@ -644,7 +703,7 @@ jQueryFormUtils.validateInput = function(el, language, config, form) { }; // Required - if (validationRules.indexOf('required') > -1 && value == '') { + if (validationRules.indexOf('required') > -1 && value === '') { return language.requiredFields; } @@ -661,7 +720,7 @@ jQueryFormUtils.validateInput = function(el, language, config, form) { // Length range if (validationRules.indexOf('validate_length') > -1) { var range = getAttributeInteger(validationRules, 'length').split('-'); - if (value.length < parseInt(range[0]) || value.length > parseInt(range[1])) { + if (value.length < parseInt(range[0],10) || value.length > parseInt(range[1],10)) { return language.badLength + getAttributeInteger(validationRules, 'length') + language.toLongEnd; } } @@ -735,12 +794,13 @@ jQueryFormUtils.validateInput = function(el, language, config, form) { } // confirmation - if (validationRules.indexOf('validate_confirmation') > -1 && typeof(form) != 'undefined') { + if (validationRules.indexOf('validate_confirmation') > -1 && typeof(form) !== 'undefined') { var conf = ''; var confInput = form.find('input[name=' + el.attr('name') + '_confirmation]').eq(0); - if (confInput) + if (confInput) { conf = confInput.val(); - if (value != conf) { + } + if (value !== conf) { return language.notConfirmed; } } @@ -797,7 +857,7 @@ jQueryFormUtils.validateUrl = function(url) { */ jQueryFormUtils.lengthRestriction = function(inputElement, maxLengthElement) { this.input = inputElement; - this.maxLength = parseInt(maxLengthElement.text()); + this.maxLength = parseInt(maxLengthElement.text(),10); var self = this; $(this.input).keyup(function() { diff --git a/jquery.formvalidator.min.js b/jquery.formvalidator.min.js index 2610bc1..995efd1 100644 --- a/jquery.formvalidator.min.js +++ b/jquery.formvalidator.min.js @@ -10,4 +10,4 @@ * * $version 1.2 */ -(function($){$.extend($.fn,{validateOnBlur:function(language,settings){$(this).find("textarea,input").blur(function(){$(this).doValidate(language,settings);});return $(this);},showHelpOnFocus:function(attrName){if(typeof attrName=="undefined"){attrName="data-help";}$(this).find("textarea,input").each(function(){var help=$(this).attr(attrName);if(help){$(this).focus(function(){if($(this).parent().find(".jquery_form_help").length==0){$(this).after($("").addClass("jquery_form_help").text(help).hide().fadeIn());}}).blur(function(){$(this).parent().find(".jquery_form_help").fadeOut("slow",function(){$(this).remove();});});}});return $(this);},doValidate:function(language,settings,attachKeyupEvent){if(typeof attachKeyupEvent=="undefined"){attachKeyupEvent=true;}var config={validationRuleAttribute:"data-validation",errorElementClass:"error",borderColorOnError:"red",dateFormat:"yyyy-mm-dd"};if(settings){$.extend(config,settings);}if(language){$.extend(jQueryFormUtils.LANG,language);}else{language=jQueryFormUtils.LANG;}if(jQueryFormUtils.defaultBorderColor==null&&$(this).attr("type")=="text"){jQueryFormUtils.defaultBorderColor=$(this).css("border-color");}$(this).removeClass(config.errorElementClass).parent().find(".jquery_form_error_message").remove();if(config.borderColorOnError!=""){$(this).css("border-color",jQueryFormUtils.defaultBorderColor);}var validation=jQueryFormUtils.validateInput($(this),language,config);if(validation===true){$(this).unbind("keyup");}else{$(this).addClass(config.errorElementClass).parent().append(''+validation+"");if(config.borderColorOnError!=""){$(this).css("border-color",config.borderColorOnError);}if(attachKeyupEvent){$(this).bind("keyup",function(){$(this).doValidate(language,settings,false);});}}return $(this);},validate:function(language,settings){var config={ignore:[],errorElementClass:"error",borderColorOnError:"red",errorMessageClass:"jquery_form_error_message",validationRuleAttribute:"data-validation",errorMessagePosition:"top",scrollToTopOnError:true,dateFormat:"yyyy-mm-dd"};if(settings){$.extend(config,settings);}if(language){$.extend(jQueryFormUtils.LANG,language);}else{language=jQueryFormUtils.LANG;}var ignoreInput=function(name,type){if(type=="submit"||type=="button"){return true;}for(var i=0;i0){for(var i=0;i";for(var i=0;i* "+errorMessages[i];}$(this).children().eq(0).before('

'+messages+"

");if(config.scrollToTopOnError){$(window).scrollTop($(form).offset().top-20);}}else{for(var i=0;i0){errorSpan.eq(0).text(errorInputs[i].attr("data-error"));}else{parent.append(''+errorInputs[i].attr("data-error")+"");}}}return false;}return true;},restrictLength:function(maxLengthElement){new jQueryFormUtils.lengthRestriction(this,maxLengthElement);return this;}});})(jQuery);var jQueryFormUtils={};jQueryFormUtils.defaultBorderColor=null;jQueryFormUtils.validateEmail=function(email){var emailFilter=/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;return emailFilter.test(email);};jQueryFormUtils.validatePhoneNumber=function(tele){var numPlus=tele.match(/\+/g);var numHifen=tele.match(/-/g);if((numPlus!=null&&numPlus.length>1)||(numHifen!=null&&numHifen.length>1)){return false;}if(numPlus!=null&&tele.indexOf("+")!=0){return false;}tele=tele.replace(/([-|\+])/g,"");return tele.length>8&&tele.match(/[^0-9]/g)==null;};jQueryFormUtils.validateSwedishMobileNumber=function(number){if(!jQueryFormUtils.validatePhoneNumber(number)){return false;}number=number.replace(/[^0-9]/g,"");var begin=number.substring(0,3);if(number.length!=10&&begin!="467"){return false;}else{if(number.length!=11&&begin=="467"){return false;}}return/07[0-9{1}]/.test(begin)||(begin=="467"&&number.substr(3,1)=="0");};jQueryFormUtils.validateBirthdate=function(val,dateFormat){var inputDate=this.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(currentYear-124);}};jQueryFormUtils.parseDate=function(val,dateFormat){var divider=dateFormat.replace(/[a-zA-Z]/gi,"").substring(0,1);var regexp="^";var formatParts=dateFormat.split(divider);for(var i=0;i0?"\\"+divider:"")+"(\\d{"+formatParts[i].length+"})";}regexp+="$";var matches=val.match(new RegExp(regexp));if(matches==null){return false;}var findDateUnit=function(unit,formatParts,matches){for(var i=0;i28||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];};jQueryFormUtils.parseDateInt=function(val){if(val.indexOf("0")==0){val=val.replace("0","");}return parseInt(val);};jQueryFormUtils.validateSwedishSecurityNumber=function(securityNumber){if(!securityNumber.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/)){return false;}var year=RegExp.$1;var month=jQueryFormUtils.parseDateInt(RegExp.$2);var day=jQueryFormUtils.parseDateInt(RegExp.$3);var months=new Array(31,28,31,30,31,30,31,31,30,31,30,31);if(year%400==0||year%4==0&&year%100!=0){months[1]=29;}if(month<1||month>12||day<1||day>months[month-1]){return false;}securityNumber=securityNumber.substring(2,securityNumber.length);var check="";for(var i=0;i24||minutes>59)||(hours==24&&minutes>0)){return false;}}return true;};jQueryFormUtils.validateFloat=function(val){return val.match(/^(\-|)([0-9]+)\.([0-9]+)$/)!=null;};jQueryFormUtils.validateInteger=function(val){return val!=""&&val.replace(/[0-9]/g,"")=="";};jQueryFormUtils.isShortMonth=function(m){return(m%2==0&&m<7)||(m%2!=0&m>7);};jQueryFormUtils.simpleSpamCheck=function(val,classAttr){var answer=classAttr.match(/captcha([0-9a-z]+)/i)[1].replace("captcha","");return val==answer;};jQueryFormUtils.validateDomain=function(val){val=val.replace("http://","").replace("www.","");var arr=new Array(".com",".net",".org",".biz",".coop",".info",".museum",".name",".pro",".edu",".gov",".int",".mil",".ac",".ad",".ae",".af",".ag",".ai",".al",".am",".an",".ao",".aq",".ar",".as",".at",".au",".aw",".az",".ba",".bb",".bd",".be",".bf",".bg",".bh",".bi",".bj",".bm",".bn",".bo",".br",".bs",".bt",".bv",".bw",".by",".bz",".ca",".cc",".cd",".cf",".cg",".ch",".ci",".ck",".cl",".cm",".cn",".co",".cr",".cu",".cv",".cx",".cy",".cz",".de",".dj",".dk",".dm",".do",".dz",".ec",".ee",".eg",".eh",".er",".es",".et",".fi",".fj",".fk",".fm",".fo",".fr",".ga",".gd",".ge",".gf",".gg",".gh",".gi",".gl",".gm",".gn",".gp",".gq",".gr",".gs",".gt",".gu",".gv",".gy",".hk",".hm",".hn",".hr",".ht",".hu",".id",".ie",".il",".im",".in",".io",".iq",".ir",".is",".it",".je",".jm",".jo",".jp",".ke",".kg",".kh",".ki",".km",".kn",".kp",".kr",".kw",".ky",".kz",".la",".lb",".lc",".li",".lk",".lr",".ls",".lt",".lu",".lv",".ly",".ma",".mc",".md",".mg",".mh",".mk",".ml",".mm",".mn",".mo",".mp",".mq",".mr",".ms",".mt",".mu",".mv",".mw",".mx",".my",".mz",".na",".nc",".ne",".nf",".ng",".ni",".nl",".no",".np",".nr",".nu",".nz",".om",".pa",".pe",".pf",".pg",".ph",".pk",".pl",".pm",".pn",".pr",".ps",".pt",".pw",".py",".qa",".re",".ro",".rw",".ru",".sa",".sb",".sc",".sd",".se",".sg",".sh",".si",".sj",".sk",".sl",".sm",".sn",".so",".sr",".st",".sv",".sy",".sz",".tc",".td",".tf",".tg",".th",".tj",".tk",".tm",".tn",".to",".tp",".tr",".tt",".tv",".tw",".tz",".ua",".ug",".uk",".um",".us",".uy",".uz",".va",".vc",".ve",".vg",".vi",".vn",".vu",".ws",".wf",".ye",".yt",".yu",".za",".zm",".zw",".mobi",".xxx");var dot=val.lastIndexOf(".");var domain=val.substring(0,dot);var ext=val.substring(dot,val.length);var hasTopDomain=false;for(var i=0;i57){return false;}else{var firstChar=domain.substring(0,1);var lastChar=domain.substring(domain.length-1,domain.length);if(firstChar=="-"||firstChar=="."||lastChar=="-"||lastChar=="."){return false;}if(domain.split(".").length>3||domain.split("..").length>1){return false;}if(domain.replace(/[0-9a-z\.\-]/g,"")!=""){return false;}}}return true;};jQueryFormUtils.validateInput=function(el,language,config,form){var value=jQuery.trim(el.val());var validationRules=el.attr(config.validationRuleAttribute);if(typeof validationRules!="undefined"&&validationRules!=null){var getAttributeInteger=function(attrValue,attrName){var regex=new RegExp("("+attrName+"[0-9-]+)","g");return attrValue.match(regex)[0].replace(/[^0-9\-]/g,"");};if(validationRules.indexOf("required")>-1&&value==""){return language.requiredFields;}if(validationRules.indexOf("validate_min_length")>-1&&value.length-1&&value.length>getAttributeInteger(validationRules,"length")){return language.toLongStart+getAttributeInteger(validationRules,"length")+language.toLongEnd;}if(validationRules.indexOf("validate_length")>-1){var range=getAttributeInteger(validationRules,"length").split("-");if(value.lengthparseInt(range[1])){return language.badLength+getAttributeInteger(validationRules,"length")+language.toLongEnd;}}if(validationRules.indexOf("validate_email")>-1&&!jQueryFormUtils.validateEmail(value)){return language.badEmail;}else{if(validationRules.indexOf("validate_domain")>-1&&!jQueryFormUtils.validateDomain(value)){return language.badDomain;}else{if(validationRules.indexOf("validate_url")>-1&&!jQueryFormUtils.validateUrl(value)){return language.badUrl;}else{if(validationRules.indexOf("validate_float")>-1&&!jQueryFormUtils.validateFloat(value)){return language.badFloat;}else{if(validationRules.indexOf("validate_int")>-1&&!jQueryFormUtils.validateInteger(value)){return language.badInt;}else{if(validationRules.indexOf("validate_time")>-1&&!jQueryFormUtils.validateTime(value)){return language.badTime;}else{if(validationRules.indexOf("validate_date")>-1&&!jQueryFormUtils.parseDate(value,config.dateFormat)){return language.badDate;}else{if(validationRules.indexOf("validate_birthdate")>-1&&!jQueryFormUtils.validateBirthdate(value,config.dateFormat)){return language.badDate;}else{if(validationRules.indexOf("validate_phone")>-1&&!jQueryFormUtils.validatePhoneNumber(value)){return language.badTelephone;}else{if(validationRules.indexOf("validate_swemobile")>-1&&!jQueryFormUtils.validateSwedishMobileNumber(value)){return language.badTelephone;}else{if(validationRules.indexOf("validate_spamcheck")>-1&&!jQueryFormUtils.simpleSpamCheck(value,validationRules)){return language.badSecurityAnswer;}}}}}}}}}}}if(validationRules.indexOf("validate_custom")>-1&&validationRules.indexOf("regexp/")>-1){var regexp=new RegExp(validationRules.split("regexp/")[1].split("/")[0]);if(!regexp.test(value)){return language.badCustomVal;}}if(validationRules.indexOf("validate_swesc")>-1&&!jQueryFormUtils.validateSwedishSecurityNumber(value)){return language.badSecurityNumber;}if(validationRules.indexOf("validate_confirmation")>-1&&typeof(form)!="undefined"){var conf="";var confInput=form.find("input[name="+el.attr("name")+"_confirmation]").eq(0);if(confInput){conf=confInput.val();}if(value!=conf){return language.notConfirmed;}}}return true;};jQueryFormUtils.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",toLongStart:"You have given an answer longer then ",toLongEnd:" characters",toShortStart:"You have given an answer shorter then ",toShortEnd:" characters",badLength:"You have to give an answer between ",notConfirmed:"Values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"Incorrect url value",badFloat:"Incorrect float value",badCustomVal:"You gave an incorrect answer",badInt:"Incorrect integer value",badSecurityNumber:"Your social security number was incorrect"};jQueryFormUtils.validateUrl=function(url){var urlFilter=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return urlFilter.test(url);};jQueryFormUtils.lengthRestriction=function(inputElement,maxLengthElement){this.input=inputElement;this.maxLength=parseInt(maxLengthElement.text());var self=this;$(this.input).keyup(function(){$(this).val($(this).val().substring(0,self.maxLength));maxLengthElement.text(self.maxLength-$(this).val().length);}).focus(function(){$(this).keyup();}).keyup();}; \ No newline at end of file +(function(a){a.extend(a.fn,{validateOnBlur:function(b,c){a(this).find("textarea,input").blur(function(){a(this).doValidate(b,c)});return a(this)},showHelpOnFocus:function(b){if(typeof b==="undefined"){b="data-help"}a(this).find("textarea,input").each(function(){var c=a(this).attr(b);if(c){a(this).focus(function(){var b=a(this);if(b.parent().find(".jquery_form_help").length===0){b.after(a("").addClass("jquery_form_help").text(c).hide().fadeIn())}}).blur(function(){a(this).parent().find(".jquery_form_help").fadeOut("slow",function(){a(this).remove()})})}});return a(this)},doValidate:function(b,c,d){if(typeof d==="undefined"){d=true}var e=a(this);var f={validationRuleAttribute:"data-validation",errorElementClass:"error",borderColorOnError:"red",dateFormat:"yyyy-mm-dd"};if(c){a.extend(f,c)}if(b){a.extend(jQueryFormUtils.LANG,b)}else{b=jQueryFormUtils.LANG}var g=e.attr("type");if(jQueryFormUtils.defaultBorderColor===null&&g!=="submit"&&g!=="checkbox"&&g!=="radio"){jQueryFormUtils.defaultBorderColor=e.css("border-color")}e.removeClass(f.errorElementClass).parent().find(".jquery_form_error_message").remove();if(f.borderColorOnError!==""){e.css("border-color",jQueryFormUtils.defaultBorderColor)}var h=jQueryFormUtils.validateInput(e,b,f);if(h===true){e.unbind("keyup")}else{e.addClass(f.errorElementClass).parent().append(''+h+"");if(f.borderColorOnError!==""){e.css("border-color",f.borderColorOnError)}if(d){e.bind("keyup",function(){a(this).doValidate(b,c,false)})}}return a(this)},validate:function(b,c){var d={ignore:[],errorElementClass:"error",borderColorOnError:"red",errorMessageClass:"jquery_form_error_message",validationRuleAttribute:"data-validation",errorMessagePosition:"top",scrollToTopOnError:true,dateFormat:"yyyy-mm-dd"};if(c){a.extend(d,c)}if(b){a.extend(jQueryFormUtils.LANG,b)}else{b=jQueryFormUtils.LANG}var e=function(a,b){if(b==="submit"||b==="button"){return true}for(var c=0;c0){for(var j=0;j";for(var j=0;j* "+g[j]}i.children().eq(0).before('

'+k+"

");if(d.scrollToTopOnError){a(window).scrollTop(i.offset().top-20)}}else{for(var j=0;j0){m.eq(0).text(h[j].attr("data-error"))}else{l.append(''+h[j].attr("data-error")+"")}}}return false}return true},restrictLength:function(a){new jQueryFormUtils.lengthRestriction(this,a);return this}})})(jQuery);var jQueryFormUtils={};jQueryFormUtils.defaultBorderColor=null;jQueryFormUtils.validateEmail=function(a){var b=/^([a-zA-Z0-9_\.\-])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;if(b.test(a)){var c=a.split("@");if(c.length===2){return jQueryFormUtils.validateDomain(c[1])}}return false};jQueryFormUtils.validatePhoneNumber=function(a){var b=a.match(/\+/g);var c=a.match(/-/g);if(b!==null&&b.length>1||c!==null&&c.length>1){return false}if(b!==null&&a.indexOf("+")!==0){return false}a=a.replace(/([-|\+])/g,"");return a.length>8&&a.match(/[^0-9]/g)===null};jQueryFormUtils.validateSwedishMobileNumber=function(a){if(!jQueryFormUtils.validatePhoneNumber(a)){return false}a=a.replace(/[^0-9]/g,"");var b=a.substring(0,3);if(a.length!==10&&b!=="467"){return false}else if(a.length!==11&&b==="467"){return false}return/07[0-9{1}]/.test(b)||b==="467"&&a.substr(3,1)==="0"};jQueryFormUtils.validateBirthdate=function(a,b){var c=this.parseDate(a,b);if(!c){return false}var d=new Date;var e=d.getFullYear();var f=c[0];var g=c[1];var h=c[2];if(f===e){var i=d.getMonth()+1;if(g===i){var j=d.getDate();return h<=j}else{return ge-124}};jQueryFormUtils.parseDate=function(a,b){var c=b.replace(/[a-zA-Z]/gi,"").substring(0,1);var d="^";var e=b.split(c);for(var f=0;f0?"\\"+c:"")+"(\\d{"+e[f].length+"})"}d+="$";var g=a.match(new RegExp(d));if(g===null){return false}var h=function(a,b,c){for(var d=0;d28||i>12||i===0){return false}if(this.isShortMonth(i)&&j>30||!this.isShortMonth(i)&&j>31||j===0){return false}return[k,i,j]};jQueryFormUtils.parseDateInt=function(a){if(a.indexOf("0")===0){a=a.replace("0","")}return parseInt(a,10)};jQueryFormUtils.validateSwedishSecurityNumber=function(a){if(!a.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/)){return false}var b=RegExp.$1;var c=jQueryFormUtils.parseDateInt(RegExp.$2);var d=jQueryFormUtils.parseDateInt(RegExp.$3);var e=new Array(31,28,31,30,31,30,31,31,30,31,30,31);if(b%400===0||b%4===0&&b%100!==0){e[1]=29}if(c<1||c>12||d<1||d>e[c-1]){return false}a=a.substring(2,a.length);var f="";for(var g=0;g24||c>59||b===24&&c>0){return false}}return true};jQueryFormUtils.validateFloat=function(a){return a.match(/^(\-|)([0-9]+)\.([0-9]+)$/)!==null};jQueryFormUtils.validateInteger=function(a){return a!==""&&a.replace(/[0-9]/g,"")===""};jQueryFormUtils.isShortMonth=function(a){return a%2===0&&a<7||a%2!==0&&a>7};jQueryFormUtils.simpleSpamCheck=function(a,b){var c=b.match(/captcha([0-9a-z]+)/i)[1].replace("captcha","");return a===c};jQueryFormUtils.validateDomain=function(a){a=a.replace("ftp://","").replace("https://","").replace("http://","").replace("www.","");var b=new Array(".com",".net",".org",".biz",".coop",".info",".museum",".name",".pro",".edu",".gov",".int",".mil",".ac",".ad",".ae",".af",".ag",".ai",".al",".am",".an",".ao",".aq",".ar",".as",".at",".au",".aw",".az",".ba",".bb",".bd",".be",".bf",".bg",".bh",".bi",".bj",".bm",".bn",".bo",".br",".bs",".bt",".bv",".bw",".by",".bz",".ca",".cc",".cd",".cf",".cg",".ch",".ci",".ck",".cl",".cm",".cn",".co",".cr",".cu",".cv",".cx",".cy",".cz",".de",".dj",".dk",".dm",".do",".dz",".ec",".ee",".eg",".eh",".er",".es",".et",".fi",".fj",".fk",".fm",".fo",".fr",".ga",".gd",".ge",".gf",".gg",".gh",".gi",".gl",".gm",".gn",".gp",".gq",".gr",".gs",".gt",".gu",".gv",".gy",".hk",".hm",".hn",".hr",".ht",".hu",".id",".ie",".il",".im",".in",".io",".iq",".ir",".is",".it",".je",".jm",".jo",".jp",".ke",".kg",".kh",".ki",".km",".kn",".kp",".kr",".kw",".ky",".kz",".la",".lb",".lc",".li",".lk",".lr",".ls",".lt",".lu",".lv",".ly",".ma",".mc",".md",".mg",".mh",".mk",".ml",".mm",".mn",".mo",".mp",".mq",".mr",".ms",".mt",".mu",".mv",".mw",".mx",".my",".mz",".na",".nc",".ne",".nf",".ng",".ni",".nl",".no",".np",".nr",".nu",".nz",".om",".pa",".pe",".pf",".pg",".ph",".pk",".pl",".pm",".pn",".pr",".ps",".pt",".pw",".py",".qa",".re",".ro",".rw",".ru",".sa",".sb",".sc",".sd",".se",".sg",".sh",".si",".sj",".sk",".sl",".sm",".sn",".so",".sr",".st",".sv",".sy",".sz",".tc",".td",".tf",".tg",".th",".tj",".tk",".tm",".tn",".to",".tp",".tr",".tt",".tv",".tw",".tz",".ua",".ug",".uk",".um",".us",".uy",".uz",".va",".vc",".ve",".vg",".vi",".vn",".vu",".ws",".wf",".ye",".yt",".yu",".za",".zm",".zw",".mobi",".xxx");var c=a.lastIndexOf(".");var d=a.substring(0,c);var e=a.substring(c,a.length);var f=false;for(var g=0;g57){return false}else{var l=d.substring(0,1);var m=d.substring(d.length-1,d.length);if(l==="-"||l==="."||m==="-"||m==="."){return false}if(d.split(".").length>3||d.split("..").length>1){return false}if(d.replace(/[0-9a-z\.\-]/g,"")!==""){return false}}return true};jQueryFormUtils.validateInput=function(a,b,c,d){var e=jQuery.trim(a.val());var f=a.attr(c.validationRuleAttribute);if(typeof f!=="undefined"&&f!==null){var g=function(a,b){var c=new RegExp("("+b+"[0-9-]+)","g");return a.match(c)[0].replace(/[^0-9\-]/g,"")};if(f.indexOf("required")>-1&&e===""){return b.requiredFields}if(f.indexOf("validate_min_length")>-1&&e.length-1&&e.length>g(f,"length")){return b.toLongStart+g(f,"length")+b.toLongEnd}if(f.indexOf("validate_length")>-1){var h=g(f,"length").split("-");if(e.lengthparseInt(h[1],10)){return b.badLength+g(f,"length")+b.toLongEnd}}if(f.indexOf("validate_email")>-1&&!jQueryFormUtils.validateEmail(e)){return b.badEmail}else if(f.indexOf("validate_domain")>-1&&!jQueryFormUtils.validateDomain(e)){return b.badDomain}else if(f.indexOf("validate_url")>-1&&!jQueryFormUtils.validateUrl(e)){return b.badUrl}else if(f.indexOf("validate_float")>-1&&!jQueryFormUtils.validateFloat(e)){return b.badFloat}else if(f.indexOf("validate_int")>-1&&!jQueryFormUtils.validateInteger(e)){return b.badInt}else if(f.indexOf("validate_time")>-1&&!jQueryFormUtils.validateTime(e)){return b.badTime}else if(f.indexOf("validate_date")>-1&&!jQueryFormUtils.parseDate(e,c.dateFormat)){return b.badDate}else if(f.indexOf("validate_birthdate")>-1&&!jQueryFormUtils.validateBirthdate(e,c.dateFormat)){return b.badDate}else if(f.indexOf("validate_phone")>-1&&!jQueryFormUtils.validatePhoneNumber(e)){return b.badTelephone}else if(f.indexOf("validate_swemobile")>-1&&!jQueryFormUtils.validateSwedishMobileNumber(e)){return b.badTelephone}else if(f.indexOf("validate_spamcheck")>-1&&!jQueryFormUtils.simpleSpamCheck(e,f)){return b.badSecurityAnswer}if(f.indexOf("validate_custom")>-1&&f.indexOf("regexp/")>-1){var i=new RegExp(f.split("regexp/")[1].split("/")[0]);if(!i.test(e)){return b.badCustomVal}}if(f.indexOf("validate_swesc")>-1&&!jQueryFormUtils.validateSwedishSecurityNumber(e)){return b.badSecurityNumber}if(f.indexOf("validate_confirmation")>-1&&typeof d!=="undefined"){var j="";var k=d.find("input[name="+a.attr("name")+"_confirmation]").eq(0);if(k){j=k.val()}if(e!==j){return b.notConfirmed}}}return true};jQueryFormUtils.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",toLongStart:"You have given an answer longer then ",toLongEnd:" characters",toShortStart:"You have given an answer shorter then ",toShortEnd:" characters",badLength:"You have to give an answer between ",notConfirmed:"Values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"Incorrect url value",badFloat:"Incorrect float value",badCustomVal:"You gave an incorrect answer",badInt:"Incorrect integer value",badSecurityNumber:"Your social security number was incorrect"};jQueryFormUtils.validateUrl=function(a){var b=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return b.test(a)};jQueryFormUtils.lengthRestriction=function(a,b){this.input=a;this.maxLength=parseInt(b.text(),10);var c=this;$(this.input).keyup(function(){$(this).val($(this).val().substring(0,c.maxLength));b.text(c.maxLength-$(this).val().length)}).focus(function(){$(this).keyup()}).trigger("keyup")} \ No newline at end of file