jQuery.validator.addMethod("www", function(val, elem) { if (val.length == 0) { return true; } return /^(https?:\/\/)?(((([a-z]|\d|-|\.|_|~|[\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])([a-z]|\d|-|\.|_|~|[\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])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(val); }); jQuery.validator.addMethod("phone", function(value, element) { return this.optional(element) || value.match(/^(\+[0-9]{2})?\s?[0-9]{3}\s?[0-9]{3}\s?[0-9]{3}$/) || value.match(/^(\+[0-9]{2})?\s?[0-9]{2}\s?[0-9]{3}\s?[0-9]{2}\s?[0-9]{2}$/); }); jQuery.validator.addMethod("image", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || (ext=="jpg" || ext=="jpeg" || ext=="jpe" || ext=="png" || ext=="gif" || ext=="bmp" || ext=="svg"); }); jQuery.validator.addMethod("pdf", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || (ext=="pdf"); }); jQuery.validator.addMethod("sound", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || (ext=="wav" || ext=="mp3" || ext=="ogg"); }); jQuery.validator.addMethod("sound_mp3", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || ext=="mp3"; }); jQuery.validator.addMethod("sound_ogg", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || ext=="ogg"; }); jQuery.validator.addMethod("video", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || (ext=="mp4" || ext=="webm" || ext=="ogg"); }); jQuery.validator.addMethod('fileSize', function(value, element, param) { return this.optional(element) || (element.files[0].size <= param); }); jQuery.validator.addMethod("video_mp4", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || ext=="mp4" ; }); jQuery.validator.addMethod("video_ogg", function(value, element) { var filename = (value == null) ? "" : value; var ext = ""; var dotIndex = filename.lastIndexOf("."); if(dotIndex != -1) { ext = filename.substring(dotIndex + 1).toLowerCase(); } return this.optional(element) || ext=="ogg" || ext=="ogv" ; }); jQuery.validator.methods["date"] = function(value, element, param) { if (this.optional(element)) { return true; } return parseDate(value) != null; }; jQuery.validator.methods["dateTime"] = function(value, element, param) { if (this.optional(element)) { return true; } return parseDateTime(value) != null; }; jQuery.validator.methods["mindate"] = function(value, element, param) { if(this.optional(element)) { return true; } return parseDate(value) >= parseDate(param); }; jQuery.validator.methods["maxdate"] = function(value, element, param) { if(this.optional(element)) { return true; } return parseDate(value) <= parseDate(param); }; jQuery.validator.methods["number"] = function(value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?: \d{3})+)?(?:,\d+)?$/.test(value); }; jQuery.validator.methods["min"] = function(value, element, param) { return this.optional(element) || parseNumber(value) >= param; }; jQuery.validator.methods["max"] = function(value, element, param) { return this.optional(element) || parseNumber(value) <= param; }; jQuery.validator.methods["integer"] = function(value, element, param) { return this.optional(element) || (value == parseInt(value, 10)); }; var validationTooltipItems = {}; function updateValidationTooltips(formID) { var tooltipItems = validationTooltipItems[formID]; var items = []; if(!tooltipItems) { return; } $.each(tooltipItems, function( index, value ) { items.push(value.element); }); $(document).tooltip({ items : items, tooltipClass : "error", content: function() { var tt = $(this); var result = ""; $.each(tooltipItems, function(index, value) { if($(value.element).is(':hover') && $(value.element).hasClass("error") && $(value.element).hasClass("tooltip") && $(value.element).attr("name") == tt.attr("name")) { result = value.message; } }); return result; } }); } $(document).ready(function () { $.validator.messages.required = "To pole jest wymagane"; $.validator.messages.email = "Adres e-mail jest nieprawidłowy"; $.validator.messages.digits = "Proszę wpisać tylko cyfry"; $.validator.messages.number = "Proszę podać liczbę"; jQuery.validator.addMethod("dateRange", function(value, element, params) { if(this.optional(element)) { return true; } var date1 = $(params[0]).datepicker('getDate'); var date2 = $(params[1]).datepicker('getDate'); return date1 < date2; }, jQuery.validator.format("Data rozpoczęcia powinna być wcześniejsza niż data zakończenia")); jQuery.validator.addMethod("dateTimeRange", function(value, element, params) { if($(params[0]).val() == '' || $(params[1]).val() == '') { return true; } var date1 = parseDateTime($(params[0]).val()); var date2 = parseDateTime($(params[1]).val()); return date1 < date2; }, jQuery.validator.format("Godzina rozpoczęcia powinna być wcześniejsza niż godzina zakończenia")); jQuery.validator.setDefaults({ ignore : ".ignore", showErrors : function(errorMap, errorList) { var formID = null; $.each(errorList, function( index, value ) { if($(value.element).hasClass("tooltip")) { var cleanTooltips = formID == null; formID = $(value.element).parents("form").attr("id"); if(formID) { if(!validationTooltipItems[formID]) { validationTooltipItems[formID] = []; } var toRemoveIndex = null; $.each(validationTooltipItems[formID], function(oldIndex, oldValue) { if(oldValue.element == value.element) { toRemoveIndex = oldIndex; } }); if(toRemoveIndex != null) { validationTooltipItems[formID].splice(toRemoveIndex, 1); } validationTooltipItems[formID].push(value); } } }); if(formID) { updateValidationTooltips(formID); } this.defaultShowErrors(); }, errorPlacement : function(error, element) { if(!$(element).hasClass("tooltip")) { error.insertAfter(element); } }, invalidHandler: function(e, validator) { if(validator.errorList.length) { var element = jQuery(validator.errorList[0].element); if(element.closest(".ui-tabs").size() > 0) { element.closest(".ui-tabs").tabs("option", "active", element.closest(".ui-tabs-panel").index() - 1); } } }, highlight: function (element, errorClass, validClass) { $(element).parents("div.tree-checkbox-select").addClass(errorClass); $(element).parents("div.tree-radio-select").addClass(errorClass); $(element).addClass(errorClass).removeClass(validClass); }, unhighlight: function (element, errorClass, validClass) { $(element).parents("div.tree-checkbox-select").removeClass(errorClass); $(element).parents("div.tree-radio-select").removeClass(errorClass); $(element).removeClass(errorClass).addClass(validClass); if($(element).hasClass("tooltip")) { var formID = $(element).parents("form").attr("id"); if(formID) { updateValidationTooltips(formID); } } } }); $.validator.messages.minlength = function(params, element) { var nodeName = element.nodeName.toLowerCase(); if(nodeName == "select" || (nodeName == "input" && element.attributes.getNamedItem("type").value == "checkbox")) { return jQuery.validator.format("Minimalna ilość zaznaczonych opcji: {0}", params); } return jQuery.validator.format("Minimalna ilość znaków: {0}", params); }; $.validator.messages.maxlength = function(params, element) { var nodeName = element.nodeName.toLowerCase(); if(nodeName == "select" || (nodeName == "input" && element.attributes.getNamedItem("type").value == "checkbox")) { return jQuery.validator.format("Maksymalna ilość zaznaczonych opcji: {0}", params); } return jQuery.validator.format("Maksymalna ilość znaków: {0}", params); }; $.validator.messages.min = function(params, element) { return jQuery.validator.format("Proszę wpisać wartość większą lub równą {0}", formatNumber(params)); }; $.validator.messages.max = function(params, element) { return jQuery.validator.format("Proszę wpisać wartość mniejszą lub równą {0}", formatNumber(params)); }; $.validator.messages.mindate = function(params, element) { return jQuery.validator.format("Data nie powinna być wcześniejsza niż {0}", params); }; $.validator.messages.maxdate = function(params, element) { return jQuery.validator.format("Data nie powinna być późniejsza niż {0}", params); }; $.validator.messages.fileSize = function(params, element) { return jQuery.validator.format("Maksymalny rozmiar dodawanego pliku to {0}", formatFileSize(params)); }; $.validator.messages.url = "Proszę wprowadzić prawidłowy adres URL"; $.validator.messages.www = "Proszę wpisać adres strony internetowej"; $.validator.messages.phone = "Proszę podać numer telefonu, np. +48 123 456 789"; $.validator.messages.date = "Proszę podać datę, np. 05.05.2024"; $.validator.messages.dateTime = "Proszę podać datę i godzinę, np. 05.05.2024 10:43"; $.validator.messages.image = "Dopuszczalne formaty plików: JPG, PNG, GIF, BMP, SVG"; $.validator.messages.pdf = "Dopuszczalne formaty plików: PDF"; $.validator.messages.sound = "Dopuszczalne formaty plików: MP3, WAV, OGG"; $.validator.messages.sound_mp3 = "Dopuszczalne formaty plików: MP3"; $.validator.messages.sound_ogg = "Dopuszczalne formaty plików: OGG"; $.validator.messages.video = "Dopuszczalne formaty plików: MP4, WEBM, OGG"; $.validator.messages.video_mp4 = "Dopuszczalne formaty plików: MP4"; $.validator.messages.video_ogg = "Dopuszczalne formaty plików: OGG"; $.validator.messages.integer = "Proszę podać liczbę całkowitą"; jQuery.validator.addClassRules("number-percent", { number : true, min : 0, max : 100 }); jQuery.validator.addClassRules("number-6", { number : true, min : 1, max : 5 }); jQuery.validator.addClassRules("min-0", { min : 0 }); jQuery.validator.addClassRules("required-checkbox", { required : function(element) { return $(element).prev("input:checkbox").is(":checked"); } }); jQuery.validator.addClassRules("integer", { integer : true }); });