{"version":3,"file":"global.validation.min.js","names":["extendValidationSettings","settings","$","extend","ignore","errorClass","validClass","errorElement","errorPlacement","error","element","insertAfter","parent","highlight","type","this","findByName","name","addClass","removeClass","unhighlight","submitHandler","form","isDirtyOverridden","fieldIdsToRemoveMask","each","i","e","inputmask","hasClass","val","getUnmaskedNumber","submit","validator","addMethod","value","param","unmasked","replace","number","Number","optional","args","moment","isValid","startDate","startOf","subtract","daysBefore","endDate","add","daysAfter","isAfter","isSame","isBefore","diff","maxSpan","params","test","Date","isNaN","startTime","endTime","regex","isParamString","symbol","soft","RegExp","phone_number","length","match","zip","split","join","jQuery","password","values","methods","email","call","paramValue","numberValue","maxlength","document","ready","on","ev","valid","attr"],"sources":["global/global.validation.js"],"sourcesContent":["//#region extendValidationSettings. Set defaults that can be overridden\n\nfunction extendValidationSettings(settings) {\n var extended = $.extend({}, {\n ignore: '',\n errorClass: \"invalid\",\n validClass: \"valid\",\n errorElement: \"em\",\n errorPlacement: function (error, element) {\n error.insertAfter(element.parent());\n },\n highlight: function (element, errorClass, validClass) {\n if (element.type === \"radio\") {\n this.findByName(element.name).addClass(errorClass).removeClass(validClass).parent().addClass('state-error').removeClass('state-success');\n } else {\n $(element).addClass(errorClass).removeClass(validClass).parent().addClass('state-error').removeClass('state-success');\n }\n },\n unhighlight: function (element, errorClass, validClass) {\n if (element.type === \"radio\") {\n this.findByName(element.name).removeClass(errorClass).addClass(validClass).parent().removeClass('state-error');\n } else {\n $(element).removeClass(errorClass).addClass(validClass).parent().removeClass('state-error');\n }\n },\n submitHandler: function (form) {\n isDirtyOverridden = true;\n\n if (fieldIdsToRemoveMask) {\n $.each(fieldIdsToRemoveMask, function (i, e) {\n var element = $('#' + e);\n\n element.inputmask('remove');\n\n if (element.hasClass('percentMask')) {\n element.val(getUnmaskedNumber(element.val()));\n }\n });\n }\n\n form.submit();\n }\n }, settings);\n\n return extended;\n}\n\n//#endregion\n\n//#region Validators\n\n//#region minCurrency\n\n$.validator.addMethod('minCurrency', function (value, element, param) {\n var unmasked = value.replace(/[^\\-0-9\\.]+/g, \"\");\n var number = Number(unmasked);\n return this.optional(element) || number >= param;\n}, \"\");\n\n//#endregion\n\n//#region daterange\n\n$.validator.addMethod('daterange', function (value, element, args) {\n // Same as above\n\n var value = moment(value);\n\n if (value.isValid()) {\n var startDate = moment().startOf('day').subtract('days', args.daysBefore);\n var endDate = moment().startOf('day').add('days', args.daysAfter);\n\n if ((value.isAfter(startDate) || value.isSame(startDate)) && (value.isBefore(endDate) || value.isSame(endDate))) {\n return true;\n }\n }\n else {\n return true;\n }\n\n return false;\n}, \"\");\n\n//#endregion\n\n//#region datespan\n\n$.validator.addMethod('datespan', function (value, element, args) {\n // Same as above\n\n var startDate = moment($(args.startDate).val()).startOf('day');\n var endDate = moment($(args.endDate).val()).startOf('day');\n\n if (startDate.isValid() && endDate.isValid()) {\n var span = endDate.diff(startDate, 'days');\n if (span <= args.maxSpan) {\n return true;\n }\n }\n else {\n return true;\n }\n\n return false;\n}, \"\");\n\n//#endregion\n\n//#region dateGreaterThan\n\n//http://stackoverflow.com/questions/833997/end-date-greater-than-start-date-jquery-validation\n$.validator.addMethod(\"dateGreaterThan\",\nfunction (value, element, params) {\n if (!value) {\n return true;\n }\n\n if (!/Invalid|NaN/.test(new Date(value))) {\n return new Date(value) > new Date($(params).val());\n }\n\n return isNaN(value) && isNaN($(params).val())\n || (Number(value) > Number($(params).val()));\n}, 'Must be greater than {0}.');\n\n//#endregion\n\n//#region timeGreaterThan\n\n$.validator.addMethod(\"timeGreaterThan\",\nfunction (value, element, params) {\n var startTime = moment(\"1/1/2000 \" + value);\n\n var endTime = moment(\"1/1/2000 \" + $(params).val());\n\n return startTime.isAfter(endTime);\n}, 'Must be greater than {0}.');\n\n//#endregion\n\n//#region time\n\n//http://stackoverflow.com/questions/7294131/time-validation-with-jquery\n$.validator.addMethod(\"time\", function (value, element) {\n if (!value) {\n return true;\n }\n\n return /^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?(\\s*)(am|pm)$/i.test(value);\n}, \"Please enter a valid time.\");\n\n//#endregion\n\n//#region number_unmask\n\n$.validator.addMethod(\"number_unmask\", function (value, element) {\n // http://jqueryvalidation.org/number-method/\n return this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(getUnmaskedNumber(value));\n}, \"Please enter a valid number.\");\n\n//#endregion\n\n//#region currency\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n * currency: [\"£\", false] - Use false for soft currency validation\n * currency: [\"$\", false]\n * currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n * \n *\n * Soft symbol checking\n * currencyInput: {\n * currency: [\"$\", false]\n * }\n *\n * Strict symbol checking (default)\n * currencyInput: {\n * currency: \"$\"\n * //OR\n * currency: [\"$\", true]\n * }\n *\n * Multiple Symbols\n * currencyInput: {\n * currency: \"$,£,¢\"\n * }\n */\n$.validator.addMethod(\"currency\", function (value, element, param) {\n if (param[0] == \"disable\") {\n return true;\n }\n\n var isParamString = typeof param === \"string\",\n symbol = isParamString ? param : param[0],\n soft = isParamString ? true : param[1],\n regex;\n\n symbol = symbol.replace(/,/g, \"\");\n symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n //STH-12/17/2014: Modified to allow leading 0.\n //STH-8/13/2015: Modified to allow leading '- '.\n regex = \"^[\\\\(|\\\\W]*[\" + symbol + \"[\\\\W]*([0-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[0-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)[\\\\)]*$\";\n regex = new RegExp(regex);\n return this.optional(element) || regex.test(value);\n}, \"Please specify a valid currency\");\n\n//#endregion\n\n//#region phoneUS\n\n$.validator.addMethod(\"phoneUS\", function (phone_number, element) {\n phone_number = phone_number.replace(/\\s+/g, \"\");\n phone_number = phone_number.replace(/x____$/, \"\");\n phone_number = phone_number.replace(/_*/g, \"\");\n return this.optional(element) || phone_number.length > 9 &&\n\t\tphone_number.match(/^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]([02-9]\\d|1[02-9])-?\\d{4}(x\\d{1,4})?$/);\n}, \"Please specify a valid phone number\");\n\n//#endregion\n\n//#region zipcodeUS\n\n$.validator.addMethod(\"zipcodeUS\", function (value, element) {\n var zip = element.value;\n\n zip = zip.split(\"_\").join(\"\");\n\n //Checks the length of the zipcode now that placeholder characters are removed.\n if (zip.length === 6) {\n //Removes hyphen\n zip = zip.replace(\"-\", \"\");\n }\n return this.optional(element) || /^\\d{5}$|^\\d{5}\\-\\d{4}$/.test(zip);\n}, \"The specified US ZIP Code is invalid\");\n\n//#endregion\n\n//#region percent\n\n$.validator.addMethod(\"percent\", function (value, element) {\n return this.optional(element) || (value.replace('%', '') <= 100 && value.replace('%', '') >= 0);\n}, \"Please enter a value between 0% and 100%.\");\n\n//#endregion\n\n//#region strongPassword\n\njQuery.validator.addMethod(\n \"strongPassword\",\n function (password, element) {\n if (!password) {\n return false;\n }\n\n if (password.length < 8) {\n return false;\n }\n\n //Must contain an upper-case letter\n if (password.match(/[A-Z]+/) == null) {\n return false;\n }\n\n //Must contain a lower-case letter\n if (password.match(/[a-z]+/) == null) {\n return false;\n }\n\n //Must contain a digit\n if (password.match(/\\d+/) == null) {\n return false;\n }\n\n //Must contain a special-character\n if (password.match(/\\W+/) == null) {\n return false;\n }\n\n return true;\n }, 'Password must contain at least one upper/lower case letter, one number, and one special character.'\n );\n\n//#endregion strongPassword\n\n//#region select2Email\n\njQuery.validator.addMethod(\"select2Email\", function (value, element) {\n var values = value.split(',');\n\n for (var i = 0; i < values.length; i++) {\n var result = jQuery.validator.methods.email.call(this, values[i], element);\n\n if (!result) {\n return false;\n }\n }\n\n return true;\n}, \"One or more email addresses are invalid.\");\n\n//#endregion select2Email\n\n$.validator.addMethod('allowSingleAmount', function (value, element, param) {\n var paramValue = getUnmaskedNumber($(param).val());\n var numberValue = getUnmaskedNumber(value);\n\n //Only allow 1 to be entered.\n if (paramValue > 0 && numberValue > 0) {\n return false;\n }\n\n return true;\n}, \"Either One Amount can be entered.\");\n\n\n//#endregion\n\n$.validator.methods.maxlength = function (value, element, param) {\n //The textarea maxlength attribute and the default maxlenth validation method counts CRLF as one char whereas the value that is passed to the server is actually 2 chars. \n // Thus, users can experience an exception on save to due string truncation at the db level. This ammends the maxlength validation method to count correctly. This code \n // is utilizing the same logic as we use to populate the \"characters remaining...\" message. \n var fullLength = value.length + (value.match(/\\n/g) || '').length;\n return fullLength <= param;\n};\n\n$(document).ready(function () {\n //Adds a change event to date picker and select2 to fix a bug when changing the value, it does not trigger a validation check\n //http://stackoverflow.com/questions/22335120/jquery-validator-and-datepicker-click-not-validating/22338363#22338363\n\n $(document).on(\"change\", \".datepicker, .select2-offscreen\", function (ev) {\n if ($(this).valid()) {\n $(this).attr(\"aria-invalid\", \"false\");\n }\n });\n});"],"mappings":"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"}