{"version":3,"file":"scripts/chunks/plugins-ff2708d2.7abaf53c2d10142d8880.js","mappings":"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","sources":["webpack://disp0001/./src/plugins/semantic/form.js"],"sourcesContent":["/*!\r\n * # Semantic UI 2.4.2 - Form Validation\r\n * http://github.com/semantic-org/semantic-ui/\r\n *\r\n *\r\n * Released under the MIT license\r\n * http://opensource.org/licenses/MIT\r\n *\r\n */\r\n\r\n;(function ($, window, document, undefined) {\r\n\r\n'use strict';\r\n\r\nwindow = (typeof window != 'undefined' && window.Math == Math)\r\n ? window\r\n : (typeof self != 'undefined' && self.Math == Math)\r\n ? self\r\n : Function('return this')()\r\n;\r\n\r\n$.fn.form = function(parameters) {\r\n var\r\n $allModules = $(this),\r\n moduleSelector = $allModules.selector || '',\r\n\r\n time = new Date().getTime(),\r\n performance = [],\r\n\r\n query = arguments[0],\r\n legacyParameters = arguments[1],\r\n methodInvoked = (typeof query == 'string'),\r\n queryArguments = [].slice.call(arguments, 1),\r\n returnedValue\r\n ;\r\n $allModules\r\n .each(function() {\r\n var\r\n $module = $(this),\r\n element = this,\r\n\r\n formErrors = [],\r\n keyHeldDown = false,\r\n\r\n // set at run-time\r\n $field,\r\n $group,\r\n $message,\r\n $prompt,\r\n $submit,\r\n $clear,\r\n $reset,\r\n\r\n settings,\r\n validation,\r\n\r\n metadata,\r\n selector,\r\n className,\r\n regExp,\r\n error,\r\n\r\n namespace,\r\n moduleNamespace,\r\n eventNamespace,\r\n\r\n instance,\r\n module\r\n ;\r\n\r\n module = {\r\n\r\n initialize: function() {\r\n\r\n // settings grabbed at run time\r\n module.get.settings();\r\n if(methodInvoked) {\r\n if(instance === undefined) {\r\n module.instantiate();\r\n }\r\n module.invoke(query);\r\n }\r\n else {\r\n if(instance !== undefined) {\r\n instance.invoke('destroy');\r\n }\r\n module.verbose('Initializing form validation', $module, settings);\r\n module.bindEvents();\r\n module.set.defaults();\r\n module.instantiate();\r\n }\r\n },\r\n\r\n instantiate: function() {\r\n module.verbose('Storing instance of module', module);\r\n instance = module;\r\n $module\r\n .data(moduleNamespace, module)\r\n ;\r\n },\r\n\r\n destroy: function() {\r\n module.verbose('Destroying previous module', instance);\r\n module.removeEvents();\r\n $module\r\n .removeData(moduleNamespace)\r\n ;\r\n },\r\n\r\n refresh: function() {\r\n module.verbose('Refreshing selector cache');\r\n $field = $module.find(selector.field);\r\n $group = $module.find(selector.group);\r\n $message = $module.find(selector.message);\r\n $prompt = $module.find(selector.prompt);\r\n\r\n $submit = $module.find(selector.submit);\r\n $clear = $module.find(selector.clear);\r\n $reset = $module.find(selector.reset);\r\n },\r\n\r\n submit: function() {\r\n module.verbose('Submitting form', $module);\r\n $module\r\n .submit()\r\n ;\r\n },\r\n\r\n attachEvents: function(selector, action) {\r\n action = action || 'submit';\r\n $(selector)\r\n .on('click' + eventNamespace, function(event) {\r\n module[action]();\r\n event.preventDefault();\r\n })\r\n ;\r\n },\r\n\r\n bindEvents: function() {\r\n module.verbose('Attaching form events');\r\n $module\r\n .on('submit' + eventNamespace, module.validate.form)\r\n .on('blur' + eventNamespace, selector.field, module.event.field.blur)\r\n .on('click' + eventNamespace, selector.submit, module.submit)\r\n .on('click' + eventNamespace, selector.reset, module.reset)\r\n .on('click' + eventNamespace, selector.clear, module.clear)\r\n ;\r\n if(settings.keyboardShortcuts) {\r\n $module\r\n .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\r\n ;\r\n }\r\n $field\r\n .each(function() {\r\n var\r\n $input = $(this),\r\n type = $input.prop('type'),\r\n inputEvent = module.get.changeEvent(type, $input)\r\n ;\r\n $(this)\r\n .on(inputEvent + eventNamespace, module.event.field.change)\r\n ;\r\n })\r\n ;\r\n },\r\n\r\n clear: function() {\r\n $field\r\n .each(function () {\r\n var\r\n $field = $(this),\r\n $element = $field.parent(),\r\n $fieldGroup = $field.closest($group),\r\n $prompt = $fieldGroup.find(selector.prompt),\r\n defaultValue = $field.data(metadata.defaultValue) || '',\r\n isCheckbox = $element.is(selector.uiCheckbox),\r\n isDropdown = $element.is(selector.uiDropdown),\r\n isErrored = $fieldGroup.hasClass(className.error)\r\n ;\r\n if(isErrored) {\r\n module.verbose('Resetting error on field', $fieldGroup);\r\n $fieldGroup.removeClass(className.error);\r\n $prompt.remove();\r\n }\r\n if(isDropdown) {\r\n module.verbose('Resetting dropdown value', $element, defaultValue);\r\n $element.dropdown('clear');\r\n }\r\n else if(isCheckbox) {\r\n $field.prop('checked', false);\r\n }\r\n else {\r\n module.verbose('Resetting field value', $field, defaultValue);\r\n $field.val('');\r\n }\r\n })\r\n ;\r\n },\r\n\r\n reset: function() {\r\n $field\r\n .each(function () {\r\n var\r\n $field = $(this),\r\n $element = $field.parent(),\r\n $fieldGroup = $field.closest($group),\r\n $prompt = $fieldGroup.find(selector.prompt),\r\n defaultValue = $field.data(metadata.defaultValue),\r\n isCheckbox = $element.is(selector.uiCheckbox),\r\n isDropdown = $element.is(selector.uiDropdown),\r\n isErrored = $fieldGroup.hasClass(className.error)\r\n ;\r\n if(defaultValue === undefined) {\r\n return;\r\n }\r\n if(isErrored) {\r\n module.verbose('Resetting error on field', $fieldGroup);\r\n $fieldGroup.removeClass(className.error);\r\n $prompt.remove();\r\n }\r\n if(isDropdown) {\r\n module.verbose('Resetting dropdown value', $element, defaultValue);\r\n $element.dropdown('restore defaults');\r\n }\r\n else if(isCheckbox) {\r\n module.verbose('Resetting checkbox value', $element, defaultValue);\r\n $field.prop('checked', defaultValue);\r\n }\r\n else {\r\n module.verbose('Resetting field value', $field, defaultValue);\r\n $field.val(defaultValue);\r\n }\r\n })\r\n ;\r\n },\r\n\r\n determine: {\r\n isValid: function() {\r\n var\r\n allValid = true\r\n ;\r\n $.each(validation, function(fieldName, field) {\r\n if( !( module.validate.field(field, fieldName, true) ) ) {\r\n allValid = false;\r\n }\r\n });\r\n return allValid;\r\n }\r\n },\r\n\r\n is: {\r\n bracketedRule: function(rule) {\r\n return (rule.type && rule.type.match(settings.regExp.bracket));\r\n },\r\n shorthandFields: function(fields) {\r\n var\r\n fieldKeys = Object.keys(fields),\r\n firstRule = fields[fieldKeys[0]]\r\n ;\r\n return module.is.shorthandRules(firstRule);\r\n },\r\n // duck type rule test\r\n shorthandRules: function(rules) {\r\n return (typeof rules == 'string' || $.isArray(rules));\r\n },\r\n empty: function($field) {\r\n if(!$field || $field.length === 0) {\r\n return true;\r\n }\r\n else if($field.is('input[type=\"checkbox\"]')) {\r\n return !$field.is(':checked');\r\n }\r\n else {\r\n return module.is.blank($field);\r\n }\r\n },\r\n blank: function($field) {\r\n return $.trim($field.val()) === '';\r\n },\r\n valid: function(field) {\r\n var\r\n allValid = true\r\n ;\r\n if(field) {\r\n module.verbose('Checking if field is valid', field);\r\n return module.validate.field(validation[field], field, false);\r\n }\r\n else {\r\n module.verbose('Checking if form is valid');\r\n $.each(validation, function(fieldName, field) {\r\n if( !module.is.valid(fieldName) ) {\r\n allValid = false;\r\n }\r\n });\r\n return allValid;\r\n }\r\n }\r\n },\r\n\r\n removeEvents: function() {\r\n $module\r\n .off(eventNamespace)\r\n ;\r\n $field\r\n .off(eventNamespace)\r\n ;\r\n $submit\r\n .off(eventNamespace)\r\n ;\r\n $field\r\n .off(eventNamespace)\r\n ;\r\n },\r\n\r\n event: {\r\n field: {\r\n keydown: function(event) {\r\n var\r\n $field = $(this),\r\n key = event.which,\r\n isInput = $field.is(selector.input),\r\n isCheckbox = $field.is(selector.checkbox),\r\n isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\r\n keyCode = {\r\n enter : 13,\r\n escape : 27\r\n }\r\n ;\r\n if( key == keyCode.escape) {\r\n module.verbose('Escape key pressed blurring field');\r\n $field\r\n .blur()\r\n ;\r\n }\r\n if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\r\n if(!keyHeldDown) {\r\n $field\r\n .one('keyup' + eventNamespace, module.event.field.keyup)\r\n ;\r\n module.submit();\r\n module.debug('Enter pressed on input submitting form');\r\n }\r\n keyHeldDown = true;\r\n }\r\n },\r\n keyup: function() {\r\n keyHeldDown = false;\r\n },\r\n blur: function(event) {\r\n var\r\n $field = $(this),\r\n $fieldGroup = $field.closest($group),\r\n validationRules = module.get.validation($field)\r\n ;\r\n if( $fieldGroup.hasClass(className.error) ) {\r\n module.debug('Revalidating field', $field, validationRules);\r\n if(validationRules) {\r\n module.validate.field( validationRules );\r\n }\r\n }\r\n else if(settings.on == 'blur') {\r\n if(validationRules) {\r\n module.validate.field( validationRules );\r\n }\r\n }\r\n },\r\n change: function(event) {\r\n var\r\n $field = $(this),\r\n $fieldGroup = $field.closest($group),\r\n validationRules = module.get.validation($field)\r\n ;\r\n if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\r\n clearTimeout(module.timer);\r\n module.timer = setTimeout(function() {\r\n module.debug('Revalidating field', $field, module.get.validation($field));\r\n module.validate.field( validationRules );\r\n }, settings.delay);\r\n }\r\n }\r\n }\r\n\r\n },\r\n\r\n get: {\r\n ancillaryValue: function(rule) {\r\n if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\r\n return false;\r\n }\r\n return (rule.value !== undefined)\r\n ? rule.value\r\n : rule.type.match(settings.regExp.bracket)[1] + ''\r\n ;\r\n },\r\n ruleName: function(rule) {\r\n if( module.is.bracketedRule(rule) ) {\r\n return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\r\n }\r\n return rule.type;\r\n },\r\n changeEvent: function(type, $input) {\r\n if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\r\n return 'change';\r\n }\r\n else {\r\n return module.get.inputEvent();\r\n }\r\n },\r\n inputEvent: function() {\r\n return (document.createElement('input').oninput !== undefined)\r\n ? 'input'\r\n : (document.createElement('input').onpropertychange !== undefined)\r\n ? 'propertychange'\r\n : 'keyup'\r\n ;\r\n },\r\n fieldsFromShorthand: function(fields) {\r\n var\r\n fullFields = {}\r\n ;\r\n $.each(fields, function(name, rules) {\r\n if(typeof rules == 'string') {\r\n rules = [rules];\r\n }\r\n fullFields[name] = {\r\n rules: []\r\n };\r\n $.each(rules, function(index, rule) {\r\n fullFields[name].rules.push({ type: rule });\r\n });\r\n });\r\n return fullFields;\r\n },\r\n prompt: function(rule, field) {\r\n var\r\n ruleName = module.get.ruleName(rule),\r\n ancillary = module.get.ancillaryValue(rule),\r\n $field = module.get.field(field.identifier),\r\n value = $field.val(),\r\n prompt = $.isFunction(rule.prompt)\r\n ? rule.prompt(value)\r\n : rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\r\n requiresValue = (prompt.search('{value}') !== -1),\r\n requiresName = (prompt.search('{name}') !== -1),\r\n $label,\r\n name\r\n ;\r\n if(requiresValue) {\r\n prompt = prompt.replace('{value}', $field.val());\r\n }\r\n if(requiresName) {\r\n $label = $field.closest(selector.group).find('label').eq(0);\r\n name = ($label.length == 1)\r\n ? $label.text()\r\n : $field.prop('placeholder') || settings.text.unspecifiedField\r\n ;\r\n prompt = prompt.replace('{name}', name);\r\n }\r\n prompt = prompt.replace('{identifier}', field.identifier);\r\n prompt = prompt.replace('{ruleValue}', ancillary);\r\n if(!rule.prompt) {\r\n module.verbose('Using default validation prompt for type', prompt, ruleName);\r\n }\r\n return prompt;\r\n },\r\n settings: function() {\r\n if($.isPlainObject(parameters)) {\r\n var\r\n keys = Object.keys(parameters),\r\n isLegacySettings = (keys.length > 0)\r\n ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\r\n : false,\r\n ruleKeys\r\n ;\r\n if(isLegacySettings) {\r\n // 1.x (ducktyped)\r\n settings = $.extend(true, {}, $.fn.form.settings, legacyParameters);\r\n validation = $.extend({}, $.fn.form.settings.defaults, parameters);\r\n module.error(settings.error.oldSyntax, element);\r\n module.verbose('Extending settings from legacy parameters', validation, settings);\r\n }\r\n else {\r\n // 2.x\r\n if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\r\n parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\r\n }\r\n settings = $.extend(true, {}, $.fn.form.settings, parameters);\r\n validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\r\n module.verbose('Extending settings', validation, settings);\r\n }\r\n }\r\n else {\r\n settings = $.fn.form.settings;\r\n validation = $.fn.form.settings.defaults;\r\n module.verbose('Using default form validation', validation, settings);\r\n }\r\n\r\n // shorthand\r\n namespace = settings.namespace;\r\n metadata = settings.metadata;\r\n selector = settings.selector;\r\n className = settings.className;\r\n regExp = settings.regExp;\r\n error = settings.error;\r\n moduleNamespace = 'module-' + namespace;\r\n eventNamespace = '.' + namespace;\r\n\r\n // grab instance\r\n instance = $module.data(moduleNamespace);\r\n\r\n // refresh selector cache\r\n module.refresh();\r\n },\r\n field: function(identifier) {\r\n module.verbose('Finding field with identifier', identifier);\r\n identifier = module.escape.string(identifier);\r\n if($field.filter('#' + identifier).length > 0 ) {\r\n return $field.filter('#' + identifier);\r\n }\r\n else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\r\n return $field.filter('[name=\"' + identifier +'\"]');\r\n }\r\n else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\r\n return $field.filter('[name=\"' + identifier +'[]\"]');\r\n }\r\n else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\r\n return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\r\n }\r\n return $('<input/>');\r\n },\r\n fields: function(fields) {\r\n var\r\n $fields = $()\r\n ;\r\n $.each(fields, function(index, name) {\r\n $fields = $fields.add( module.get.field(name) );\r\n });\r\n return $fields;\r\n },\r\n validation: function($field) {\r\n var\r\n fieldValidation,\r\n identifier\r\n ;\r\n if(!validation) {\r\n return false;\r\n }\r\n $.each(validation, function(fieldName, field) {\r\n identifier = field.identifier || fieldName;\r\n if( module.get.field(identifier)[0] == $field[0] ) {\r\n field.identifier = identifier;\r\n fieldValidation = field;\r\n }\r\n });\r\n return fieldValidation || false;\r\n },\r\n value: function (field) {\r\n var\r\n fields = [],\r\n results\r\n ;\r\n fields.push(field);\r\n results = module.get.values.call(element, fields);\r\n return results[field];\r\n },\r\n values: function (fields) {\r\n var\r\n $fields = $.isArray(fields)\r\n ? module.get.fields(fields)\r\n : $field,\r\n values = {}\r\n ;\r\n $fields.each(function(index, field) {\r\n var\r\n $field = $(field),\r\n type = $field.prop('type'),\r\n name = $field.prop('name'),\r\n value = $field.val(),\r\n isCheckbox = $field.is(selector.checkbox),\r\n isRadio = $field.is(selector.radio),\r\n isMultiple = (name.indexOf('[]') !== -1),\r\n isChecked = (isCheckbox)\r\n ? $field.is(':checked')\r\n : false\r\n ;\r\n if(name) {\r\n if(isMultiple) {\r\n name = name.replace('[]', '');\r\n if(!values[name]) {\r\n values[name] = [];\r\n }\r\n if(isCheckbox) {\r\n if(isChecked) {\r\n values[name].push(value || true);\r\n }\r\n else {\r\n values[name].push(false);\r\n }\r\n }\r\n else {\r\n values[name].push(value);\r\n }\r\n }\r\n else {\r\n if(isRadio) {\r\n if(values[name] === undefined || values[name] == false) {\r\n values[name] = (isChecked)\r\n ? value || true\r\n : false\r\n ;\r\n }\r\n }\r\n else if(isCheckbox) {\r\n if(isChecked) {\r\n values[name] = value || true;\r\n }\r\n else {\r\n values[name] = false;\r\n }\r\n }\r\n else {\r\n values[name] = value;\r\n }\r\n }\r\n }\r\n });\r\n return values;\r\n }\r\n },\r\n\r\n has: {\r\n\r\n field: function(identifier) {\r\n module.verbose('Checking for existence of a field with identifier', identifier);\r\n identifier = module.escape.string(identifier);\r\n if(typeof identifier !== 'string') {\r\n module.error(error.identifier, identifier);\r\n }\r\n if($field.filter('#' + identifier).length > 0 ) {\r\n return true;\r\n }\r\n else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\r\n return true;\r\n }\r\n else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n },\r\n\r\n escape: {\r\n string: function(text) {\r\n text = String(text);\r\n return text.replace(regExp.escape, '\\\\$&');\r\n }\r\n },\r\n\r\n add: {\r\n // alias\r\n rule: function(name, rules) {\r\n module.add.field(name, rules);\r\n },\r\n field: function(name, rules) {\r\n var\r\n newValidation = {}\r\n ;\r\n if(module.is.shorthandRules(rules)) {\r\n rules = $.isArray(rules)\r\n ? rules\r\n : [rules]\r\n ;\r\n newValidation[name] = {\r\n rules: []\r\n };\r\n $.each(rules, function(index, rule) {\r\n newValidation[name].rules.push({ type: rule });\r\n });\r\n }\r\n else {\r\n newValidation[name] = rules;\r\n }\r\n validation = $.extend({}, validation, newValidation);\r\n module.debug('Adding rules', newValidation, validation);\r\n },\r\n fields: function(fields) {\r\n var\r\n newValidation\r\n ;\r\n if(fields && module.is.shorthandFields(fields)) {\r\n newValidation = module.get.fieldsFromShorthand(fields);\r\n }\r\n else {\r\n newValidation = fields;\r\n }\r\n validation = $.extend({}, validation, newValidation);\r\n },\r\n prompt: function(identifier, errors) {\r\n var\r\n $field = module.get.field(identifier),\r\n $fieldGroup = $field.closest($group),\r\n $prompt = $fieldGroup.children(selector.prompt),\r\n promptExists = ($prompt.length !== 0)\r\n ;\r\n errors = (typeof errors == 'string')\r\n ? [errors]\r\n : errors\r\n ;\r\n module.verbose('Adding field error state', identifier);\r\n $fieldGroup\r\n .addClass(className.error)\r\n ;\r\n if(settings.inline) {\r\n if(!promptExists) {\r\n $prompt = settings.templates.prompt(errors);\r\n $prompt\r\n .appendTo($fieldGroup)\r\n ;\r\n }\r\n $prompt\r\n .html(errors[0])\r\n ;\r\n if(!promptExists) {\r\n if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\r\n module.verbose('Displaying error with css transition', settings.transition);\r\n $prompt.transition(settings.transition + ' in', settings.duration);\r\n }\r\n else {\r\n module.verbose('Displaying error with fallback javascript animation');\r\n $prompt\r\n .fadeIn(settings.duration)\r\n ;\r\n }\r\n }\r\n else {\r\n module.verbose('Inline errors are disabled, no inline error added', identifier);\r\n }\r\n }\r\n },\r\n errors: function(errors) {\r\n module.debug('Adding form error messages', errors);\r\n module.set.error();\r\n $message\r\n .html( settings.templates.error(errors) )\r\n ;\r\n }\r\n },\r\n\r\n remove: {\r\n rule: function(field, rule) {\r\n var\r\n rules = $.isArray(rule)\r\n ? rule\r\n : [rule]\r\n ;\r\n if(rule == undefined) {\r\n module.debug('Removed all rules');\r\n validation[field].rules = [];\r\n return;\r\n }\r\n if(validation[field] == undefined || !$.isArray(validation[field].rules)) {\r\n return;\r\n }\r\n $.each(validation[field].rules, function(index, rule) {\r\n if(rules.indexOf(rule.type) !== -1) {\r\n module.debug('Removed rule', rule.type);\r\n validation[field].rules.splice(index, 1);\r\n }\r\n });\r\n },\r\n field: function(field) {\r\n var\r\n fields = $.isArray(field)\r\n ? field\r\n : [field]\r\n ;\r\n $.each(fields, function(index, field) {\r\n module.remove.rule(field);\r\n });\r\n },\r\n // alias\r\n rules: function(field, rules) {\r\n if($.isArray(field)) {\r\n $.each(fields, function(index, field) {\r\n module.remove.rule(field, rules);\r\n });\r\n }\r\n else {\r\n module.remove.rule(field, rules);\r\n }\r\n },\r\n fields: function(fields) {\r\n module.remove.field(fields);\r\n },\r\n prompt: function(identifier) {\r\n var\r\n $field = module.get.field(identifier),\r\n $fieldGroup = $field.closest($group),\r\n $prompt = $fieldGroup.children(selector.prompt)\r\n ;\r\n $fieldGroup\r\n .removeClass(className.error)\r\n ;\r\n if(settings.inline && $prompt.is(':visible')) {\r\n module.verbose('Removing prompt for field', identifier);\r\n if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\r\n $prompt.transition(settings.transition + ' out', settings.duration, function() {\r\n $prompt.remove();\r\n });\r\n }\r\n else {\r\n $prompt\r\n .fadeOut(settings.duration, function(){\r\n $prompt.remove();\r\n })\r\n ;\r\n }\r\n }\r\n }\r\n },\r\n\r\n set: {\r\n success: function() {\r\n $module\r\n .removeClass(className.error)\r\n .addClass(className.success)\r\n ;\r\n },\r\n defaults: function () {\r\n $field\r\n .each(function () {\r\n var\r\n $field = $(this),\r\n isCheckbox = ($field.filter(selector.checkbox).length > 0),\r\n value = (isCheckbox)\r\n ? $field.is(':checked')\r\n : $field.val()\r\n ;\r\n $field.data(metadata.defaultValue, value);\r\n })\r\n ;\r\n },\r\n error: function() {\r\n $module\r\n .removeClass(className.success)\r\n .addClass(className.error)\r\n ;\r\n },\r\n value: function (field, value) {\r\n var\r\n fields = {}\r\n ;\r\n fields[field] = value;\r\n return module.set.values.call(element, fields);\r\n },\r\n values: function (fields) {\r\n if($.isEmptyObject(fields)) {\r\n return;\r\n }\r\n $.each(fields, function(key, value) {\r\n var\r\n $field = module.get.field(key),\r\n $element = $field.parent(),\r\n isMultiple = $.isArray(value),\r\n isCheckbox = $element.is(selector.uiCheckbox),\r\n isDropdown = $element.is(selector.uiDropdown),\r\n isRadio = ($field.is(selector.radio) && isCheckbox),\r\n fieldExists = ($field.length > 0),\r\n $multipleField\r\n ;\r\n if(fieldExists) {\r\n if(isMultiple && isCheckbox) {\r\n module.verbose('Selecting multiple', value, $field);\r\n $element.checkbox('uncheck');\r\n $.each(value, function(index, value) {\r\n $multipleField = $field.filter('[value=\"' + value + '\"]');\r\n $element = $multipleField.parent();\r\n if($multipleField.length > 0) {\r\n $element.checkbox('check');\r\n }\r\n });\r\n }\r\n else if(isRadio) {\r\n module.verbose('Selecting radio value', value, $field);\r\n $field.filter('[value=\"' + value + '\"]')\r\n .parent(selector.uiCheckbox)\r\n .checkbox('check')\r\n ;\r\n }\r\n else if(isCheckbox) {\r\n module.verbose('Setting checkbox value', value, $element);\r\n if(value === true) {\r\n $element.checkbox('check');\r\n }\r\n else {\r\n $element.checkbox('uncheck');\r\n }\r\n }\r\n else if(isDropdown) {\r\n module.verbose('Setting dropdown value', value, $element);\r\n $element.dropdown('set selected', value);\r\n }\r\n else {\r\n module.verbose('Setting field value', value, $field);\r\n $field.val(value);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n\r\n validate: {\r\n\r\n form: function(event, ignoreCallbacks) {\r\n var\r\n values = module.get.values(),\r\n apiRequest\r\n ;\r\n\r\n // input keydown event will fire submit repeatedly by browser default\r\n if(keyHeldDown) {\r\n return false;\r\n }\r\n\r\n // reset errors\r\n formErrors = [];\r\n if( module.determine.isValid() ) {\r\n module.debug('Form has no validation errors, submitting');\r\n module.set.success();\r\n if(ignoreCallbacks !== true) {\r\n return settings.onSuccess.call(element, event, values);\r\n }\r\n }\r\n else {\r\n module.debug('Form has errors');\r\n module.set.error();\r\n if(!settings.inline) {\r\n module.add.errors(formErrors);\r\n }\r\n // prevent ajax submit\r\n if($module.data('moduleApi') !== undefined) {\r\n event.stopImmediatePropagation();\r\n }\r\n if(ignoreCallbacks !== true) {\r\n return settings.onFailure.call(element, formErrors, values);\r\n }\r\n }\r\n },\r\n\r\n // takes a validation object and returns whether field passes validation\r\n field: function(field, fieldName, showErrors) {\r\n showErrors = (showErrors !== undefined)\r\n ? showErrors\r\n : true\r\n ;\r\n if(typeof field == 'string') {\r\n module.verbose('Validating field', field);\r\n fieldName = field;\r\n field = validation[field];\r\n }\r\n var\r\n identifier = field.identifier || fieldName,\r\n $field = module.get.field(identifier),\r\n $dependsField = (field.depends)\r\n ? module.get.field(field.depends)\r\n : false,\r\n fieldValid = true,\r\n fieldErrors = []\r\n ;\r\n if(!field.identifier) {\r\n module.debug('Using field name as identifier', identifier);\r\n field.identifier = identifier;\r\n }\r\n if($field.prop('disabled')) {\r\n module.debug('Field is disabled. Skipping', identifier);\r\n fieldValid = true;\r\n }\r\n else if(field.optional && module.is.blank($field)){\r\n module.debug('Field is optional and blank. Skipping', identifier);\r\n fieldValid = true;\r\n }\r\n else if(field.depends && module.is.empty($dependsField)) {\r\n module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\r\n fieldValid = true;\r\n }\r\n else if(field.rules !== undefined) {\r\n $.each(field.rules, function(index, rule) {\r\n if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\r\n module.debug('Field is invalid', identifier, rule.type);\r\n fieldErrors.push(module.get.prompt(rule, field));\r\n fieldValid = false;\r\n }\r\n });\r\n }\r\n if(fieldValid) {\r\n if(showErrors) {\r\n module.remove.prompt(identifier, fieldErrors);\r\n settings.onValid.call($field);\r\n }\r\n }\r\n else {\r\n if(showErrors) {\r\n formErrors = formErrors.concat(fieldErrors);\r\n module.add.prompt(identifier, fieldErrors);\r\n settings.onInvalid.call($field, fieldErrors);\r\n }\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n // takes validation rule and returns whether field passes rule\r\n rule: function(field, rule) {\r\n var\r\n $field = module.get.field(field.identifier),\r\n type = rule.type,\r\n value = $field.val(),\r\n isValid = true,\r\n ancillary = module.get.ancillaryValue(rule),\r\n ruleName = module.get.ruleName(rule),\r\n ruleFunction = settings.rules[ruleName]\r\n ;\r\n if( !$.isFunction(ruleFunction) ) {\r\n module.error(error.noRule, ruleName);\r\n return;\r\n }\r\n // cast to string avoiding encoding special values\r\n value = (value === undefined || value === '' || value === null)\r\n ? ''\r\n : $.trim(value + '')\r\n ;\r\n return ruleFunction.call($field, value, ancillary);\r\n }\r\n },\r\n\r\n setting: function(name, value) {\r\n if( $.isPlainObject(name) ) {\r\n $.extend(true, settings, name);\r\n }\r\n else if(value !== undefined) {\r\n settings[name] = value;\r\n }\r\n else {\r\n return settings[name];\r\n }\r\n },\r\n internal: function(name, value) {\r\n if( $.isPlainObject(name) ) {\r\n $.extend(true, module, name);\r\n }\r\n else if(value !== undefined) {\r\n module[name] = value;\r\n }\r\n else {\r\n return module[name];\r\n }\r\n },\r\n debug: function() {\r\n if(!settings.silent && settings.debug) {\r\n if(settings.performance) {\r\n module.performance.log(arguments);\r\n }\r\n else {\r\n module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n module.debug.apply(console, arguments);\r\n }\r\n }\r\n },\r\n verbose: function() {\r\n if(!settings.silent && settings.verbose && settings.debug) {\r\n if(settings.performance) {\r\n module.performance.log(arguments);\r\n }\r\n else {\r\n module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\r\n module.verbose.apply(console, arguments);\r\n }\r\n }\r\n },\r\n error: function() {\r\n if(!settings.silent) {\r\n module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\r\n module.error.apply(console, arguments);\r\n }\r\n },\r\n performance: {\r\n log: function(message) {\r\n var\r\n currentTime,\r\n executionTime,\r\n previousTime\r\n ;\r\n if(settings.performance) {\r\n currentTime = new Date().getTime();\r\n previousTime = time || currentTime;\r\n executionTime = currentTime - previousTime;\r\n time = currentTime;\r\n performance.push({\r\n 'Name' : message[0],\r\n 'Arguments' : [].slice.call(message, 1) || '',\r\n 'Element' : element,\r\n 'Execution Time' : executionTime\r\n });\r\n }\r\n clearTimeout(module.performance.timer);\r\n module.performance.timer = setTimeout(module.performance.display, 500);\r\n },\r\n display: function() {\r\n var\r\n title = settings.name + ':',\r\n totalTime = 0\r\n ;\r\n time = false;\r\n clearTimeout(module.performance.timer);\r\n $.each(performance, function(index, data) {\r\n totalTime += data['Execution Time'];\r\n });\r\n title += ' ' + totalTime + 'ms';\r\n if(moduleSelector) {\r\n title += ' \\'' + moduleSelector + '\\'';\r\n }\r\n if($allModules.length > 1) {\r\n title += ' ' + '(' + $allModules.length + ')';\r\n }\r\n if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\r\n console.groupCollapsed(title);\r\n if(console.table) {\r\n console.table(performance);\r\n }\r\n else {\r\n $.each(performance, function(index, data) {\r\n console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\r\n });\r\n }\r\n console.groupEnd();\r\n }\r\n performance = [];\r\n }\r\n },\r\n invoke: function(query, passedArguments, context) {\r\n var\r\n object = instance,\r\n maxDepth,\r\n found,\r\n response\r\n ;\r\n passedArguments = passedArguments || queryArguments;\r\n context = element || context;\r\n if(typeof query == 'string' && object !== undefined) {\r\n query = query.split(/[\\. ]/);\r\n maxDepth = query.length - 1;\r\n $.each(query, function(depth, value) {\r\n var camelCaseValue = (depth != maxDepth)\r\n ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\r\n : query\r\n ;\r\n if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\r\n object = object[camelCaseValue];\r\n }\r\n else if( object[camelCaseValue] !== undefined ) {\r\n found = object[camelCaseValue];\r\n return false;\r\n }\r\n else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\r\n object = object[value];\r\n }\r\n else if( object[value] !== undefined ) {\r\n found = object[value];\r\n return false;\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n }\r\n if( $.isFunction( found ) ) {\r\n response = found.apply(context, passedArguments);\r\n }\r\n else if(found !== undefined) {\r\n response = found;\r\n }\r\n if($.isArray(returnedValue)) {\r\n returnedValue.push(response);\r\n }\r\n else if(returnedValue !== undefined) {\r\n returnedValue = [returnedValue, response];\r\n }\r\n else if(response !== undefined) {\r\n returnedValue = response;\r\n }\r\n return found;\r\n }\r\n };\r\n module.initialize();\r\n })\r\n ;\r\n\r\n return (returnedValue !== undefined)\r\n ? returnedValue\r\n : this\r\n ;\r\n};\r\n\r\n$.fn.form.settings = {\r\n\r\n name : 'Form',\r\n namespace : 'form',\r\n\r\n debug : false,\r\n verbose : false,\r\n performance : true,\r\n\r\n fields : false,\r\n\r\n keyboardShortcuts : true,\r\n on : 'submit',\r\n inline : false,\r\n\r\n delay : 200,\r\n revalidate : true,\r\n\r\n transition : 'scale',\r\n duration : 200,\r\n\r\n onValid : function() {},\r\n onInvalid : function() {},\r\n onSuccess : function() { return true; },\r\n onFailure : function() { return false; },\r\n\r\n metadata : {\r\n defaultValue : 'default',\r\n validate : 'validate'\r\n },\r\n\r\n regExp: {\r\n htmlID : /^[a-zA-Z][\\w:.-]*$/g,\r\n bracket : /\\[(.*)\\]/i,\r\n decimal : /^\\d+\\.?\\d*$/,\r\n email : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\r\n escape : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\r\n flags : /^\\/(.*)\\/(.*)?/,\r\n integer : /^\\-?\\d+$/,\r\n number : /^\\-?\\d*(\\.\\d+)?$/,\r\n url : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\r\n },\r\n\r\n text: {\r\n unspecifiedRule : 'Please enter a valid value',\r\n unspecifiedField : 'This field'\r\n },\r\n\r\n prompt: {\r\n empty : '{name} must have a value',\r\n checked : '{name} must be checked',\r\n email : '{name} must be a valid e-mail',\r\n url : '{name} must be a valid url',\r\n regExp : '{name} is not formatted correctly',\r\n integer : '{name} must be an integer',\r\n decimal : '{name} must be a decimal number',\r\n number : '{name} must be set to a number',\r\n is : '{name} must be \"{ruleValue}\"',\r\n isExactly : '{name} must be exactly \"{ruleValue}\"',\r\n not : '{name} cannot be set to \"{ruleValue}\"',\r\n notExactly : '{name} cannot be set to exactly \"{ruleValue}\"',\r\n contain : '{name} must contain \"{ruleValue}\"',\r\n containExactly : '{name} must contain exactly \"{ruleValue}\"',\r\n doesntContain : '{name} cannot contain \"{ruleValue}\"',\r\n doesntContainExactly : '{name} cannot contain exactly \"{ruleValue}\"',\r\n minLength : '{name} must be at least {ruleValue} characters',\r\n length : '{name} must be at least {ruleValue} characters',\r\n exactLength : '{name} must be exactly {ruleValue} characters',\r\n maxLength : '{name} cannot be longer than {ruleValue} characters',\r\n match : '{name} must match {ruleValue} field',\r\n different : '{name} must have a different value than {ruleValue} field',\r\n creditCard : '{name} must be a valid credit card number',\r\n minCount : '{name} must have at least {ruleValue} choices',\r\n exactCount : '{name} must have exactly {ruleValue} choices',\r\n maxCount : '{name} must have {ruleValue} or less choices'\r\n },\r\n\r\n selector : {\r\n checkbox : 'input[type=\"checkbox\"], input[type=\"radio\"]',\r\n clear : '.clear',\r\n field : 'input, textarea, select',\r\n group : '.field',\r\n input : 'input',\r\n message : '.error.message',\r\n prompt : '.prompt.label',\r\n radio : 'input[type=\"radio\"]',\r\n reset : '.reset:not([type=\"reset\"])',\r\n submit : '.submit',\r\n uiCheckbox : '.ui.checkbox',\r\n uiDropdown : '.ui.dropdown'\r\n },\r\n\r\n className : {\r\n error : 'error',\r\n label : 'ui prompt label',\r\n pressed : 'down',\r\n success : 'success'\r\n },\r\n\r\n error: {\r\n identifier : 'You must specify a string identifier for each field',\r\n method : 'The method you called is not defined.',\r\n noRule : 'There is no rule matching the one you specified',\r\n oldSyntax : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\r\n },\r\n\r\n templates: {\r\n\r\n // template that produces error message\r\n error: function(errors) {\r\n var\r\n html = '<ul class=\"list\">'\r\n ;\r\n $.each(errors, function(index, value) {\r\n html += '<li>' + value + '</li>';\r\n });\r\n html += '</ul>';\r\n return $(html);\r\n },\r\n\r\n // template that produces label\r\n prompt: function(errors) {\r\n return $('<div/>')\r\n .addClass('ui basic red pointing prompt label')\r\n .html(errors[0])\r\n ;\r\n }\r\n },\r\n\r\n rules: {\r\n\r\n // is not empty or blank string\r\n empty: function(value) {\r\n return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\r\n },\r\n\r\n // checkbox checked\r\n checked: function() {\r\n return ($(this).filter(':checked').length > 0);\r\n },\r\n\r\n // is most likely an email\r\n email: function(value){\r\n return $.fn.form.settings.regExp.email.test(value);\r\n },\r\n\r\n // value is most likely url\r\n url: function(value) {\r\n return $.fn.form.settings.regExp.url.test(value);\r\n },\r\n\r\n // matches specified regExp\r\n regExp: function(value, regExp) {\r\n if(regExp instanceof RegExp) {\r\n return value.match(regExp);\r\n }\r\n var\r\n regExpParts = regExp.match($.fn.form.settings.regExp.flags),\r\n flags\r\n ;\r\n // regular expression specified as /baz/gi (flags)\r\n if(regExpParts) {\r\n regExp = (regExpParts.length >= 2)\r\n ? regExpParts[1]\r\n : regExp\r\n ;\r\n flags = (regExpParts.length >= 3)\r\n ? regExpParts[2]\r\n : ''\r\n ;\r\n }\r\n return value.match( new RegExp(regExp, flags) );\r\n },\r\n\r\n // is valid integer or matches range\r\n integer: function(value, range) {\r\n var\r\n intRegExp = $.fn.form.settings.regExp.integer,\r\n min,\r\n max,\r\n parts\r\n ;\r\n if( !range || ['', '..'].indexOf(range) !== -1) {\r\n // do nothing\r\n }\r\n else if(range.indexOf('..') == -1) {\r\n if(intRegExp.test(range)) {\r\n min = max = range - 0;\r\n }\r\n }\r\n else {\r\n parts = range.split('..', 2);\r\n if(intRegExp.test(parts[0])) {\r\n min = parts[0] - 0;\r\n }\r\n if(intRegExp.test(parts[1])) {\r\n max = parts[1] - 0;\r\n }\r\n }\r\n return (\r\n intRegExp.test(value) &&\r\n (min === undefined || value >= min) &&\r\n (max === undefined || value <= max)\r\n );\r\n },\r\n\r\n // is valid number (with decimal)\r\n decimal: function(value) {\r\n return $.fn.form.settings.regExp.decimal.test(value);\r\n },\r\n\r\n // is valid number\r\n number: function(value) {\r\n return $.fn.form.settings.regExp.number.test(value);\r\n },\r\n\r\n // is value (case insensitive)\r\n is: function(value, text) {\r\n text = (typeof text == 'string')\r\n ? text.toLowerCase()\r\n : text\r\n ;\r\n value = (typeof value == 'string')\r\n ? value.toLowerCase()\r\n : value\r\n ;\r\n return (value == text);\r\n },\r\n\r\n // is value\r\n isExactly: function(value, text) {\r\n return (value == text);\r\n },\r\n\r\n // value is not another value (case insensitive)\r\n not: function(value, notValue) {\r\n value = (typeof value == 'string')\r\n ? value.toLowerCase()\r\n : value\r\n ;\r\n notValue = (typeof notValue == 'string')\r\n ? notValue.toLowerCase()\r\n : notValue\r\n ;\r\n return (value != notValue);\r\n },\r\n\r\n // value is not another value (case sensitive)\r\n notExactly: function(value, notValue) {\r\n return (value != notValue);\r\n },\r\n\r\n // value contains text (insensitive)\r\n contains: function(value, text) {\r\n // escape regex characters\r\n text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\r\n return (value.search( new RegExp(text, 'i') ) !== -1);\r\n },\r\n\r\n // value contains text (case sensitive)\r\n containsExactly: function(value, text) {\r\n // escape regex characters\r\n text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\r\n return (value.search( new RegExp(text) ) !== -1);\r\n },\r\n\r\n // value contains text (insensitive)\r\n doesntContain: function(value, text) {\r\n // escape regex characters\r\n text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\r\n return (value.search( new RegExp(text, 'i') ) === -1);\r\n },\r\n\r\n // value contains text (case sensitive)\r\n doesntContainExactly: function(value, text) {\r\n // escape regex characters\r\n text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\r\n return (value.search( new RegExp(text) ) === -1);\r\n },\r\n\r\n // is at least string length\r\n minLength: function(value, requiredLength) {\r\n return (value !== undefined)\r\n ? (value.length >= requiredLength)\r\n : false\r\n ;\r\n },\r\n\r\n // see rls notes for 2.0.6 (this is a duplicate of minLength)\r\n length: function(value, requiredLength) {\r\n return (value !== undefined)\r\n ? (value.length >= requiredLength)\r\n : false\r\n ;\r\n },\r\n\r\n // is exactly length\r\n exactLength: function(value, requiredLength) {\r\n return (value !== undefined)\r\n ? (value.length == requiredLength)\r\n : false\r\n ;\r\n },\r\n\r\n // is less than length\r\n maxLength: function(value, maxLength) {\r\n return (value !== undefined)\r\n ? (value.length <= maxLength)\r\n : false\r\n ;\r\n },\r\n\r\n // matches another field\r\n match: function(value, identifier) {\r\n var\r\n $form = $(this),\r\n matchingValue\r\n ;\r\n if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\r\n matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\r\n }\r\n else if($('#' + identifier).length > 0) {\r\n matchingValue = $('#' + identifier).val();\r\n }\r\n else if($('[name=\"' + identifier +'\"]').length > 0) {\r\n matchingValue = $('[name=\"' + identifier + '\"]').val();\r\n }\r\n else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\r\n matchingValue = $('[name=\"' + identifier +'[]\"]');\r\n }\r\n return (matchingValue !== undefined)\r\n ? ( value.toString() == matchingValue.toString() )\r\n : false\r\n ;\r\n },\r\n\r\n // different than another field\r\n different: function(value, identifier) {\r\n // use either id or name of field\r\n var\r\n $form = $(this),\r\n matchingValue\r\n ;\r\n if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\r\n matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\r\n }\r\n else if($('#' + identifier).length > 0) {\r\n matchingValue = $('#' + identifier).val();\r\n }\r\n else if($('[name=\"' + identifier +'\"]').length > 0) {\r\n matchingValue = $('[name=\"' + identifier + '\"]').val();\r\n }\r\n else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\r\n matchingValue = $('[name=\"' + identifier +'[]\"]');\r\n }\r\n return (matchingValue !== undefined)\r\n ? ( value.toString() !== matchingValue.toString() )\r\n : false\r\n ;\r\n },\r\n\r\n creditCard: function(cardNumber, cardTypes) {\r\n var\r\n cards = {\r\n visa: {\r\n pattern : /^4/,\r\n length : [16]\r\n },\r\n amex: {\r\n pattern : /^3[47]/,\r\n length : [15]\r\n },\r\n mastercard: {\r\n pattern : /^5[1-5]/,\r\n length : [16]\r\n },\r\n discover: {\r\n pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\r\n length : [16]\r\n },\r\n unionPay: {\r\n pattern : /^(62|88)/,\r\n length : [16, 17, 18, 19]\r\n },\r\n jcb: {\r\n pattern : /^35(2[89]|[3-8][0-9])/,\r\n length : [16]\r\n },\r\n maestro: {\r\n pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\r\n length : [12, 13, 14, 15, 16, 17, 18, 19]\r\n },\r\n dinersClub: {\r\n pattern : /^(30[0-5]|^36)/,\r\n length : [14]\r\n },\r\n laser: {\r\n pattern : /^(6304|670[69]|6771)/,\r\n length : [16, 17, 18, 19]\r\n },\r\n visaElectron: {\r\n pattern : /^(4026|417500|4508|4844|491(3|7))/,\r\n length : [16]\r\n }\r\n },\r\n valid = {},\r\n validCard = false,\r\n requiredTypes = (typeof cardTypes == 'string')\r\n ? cardTypes.split(',')\r\n : false,\r\n unionPay,\r\n validation\r\n ;\r\n\r\n if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\r\n return;\r\n }\r\n\r\n // allow dashes in card\r\n cardNumber = cardNumber.replace(/[\\-]/g, '');\r\n\r\n // verify card types\r\n if(requiredTypes) {\r\n $.each(requiredTypes, function(index, type){\r\n // verify each card type\r\n validation = cards[type];\r\n if(validation) {\r\n valid = {\r\n length : ($.inArray(cardNumber.length, validation.length) !== -1),\r\n pattern : (cardNumber.search(validation.pattern) !== -1)\r\n };\r\n if(valid.length && valid.pattern) {\r\n validCard = true;\r\n }\r\n }\r\n });\r\n\r\n if(!validCard) {\r\n return false;\r\n }\r\n }\r\n\r\n // skip luhn for UnionPay\r\n unionPay = {\r\n number : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\r\n pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\r\n };\r\n if(unionPay.number && unionPay.pattern) {\r\n return true;\r\n }\r\n\r\n // verify luhn, adapted from <https://gist.github.com/2134376>\r\n var\r\n length = cardNumber.length,\r\n multiple = 0,\r\n producedValue = [\r\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\r\n [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\r\n ],\r\n sum = 0\r\n ;\r\n while (length--) {\r\n sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\r\n multiple ^= 1;\r\n }\r\n return (sum % 10 === 0 && sum > 0);\r\n },\r\n\r\n minCount: function(value, minCount) {\r\n if(minCount == 0) {\r\n return true;\r\n }\r\n if(minCount == 1) {\r\n return (value !== '');\r\n }\r\n return (value.split(',').length >= minCount);\r\n },\r\n\r\n exactCount: function(value, exactCount) {\r\n if(exactCount == 0) {\r\n return (value === '');\r\n }\r\n if(exactCount == 1) {\r\n return (value !== '' && value.search(',') === -1);\r\n }\r\n return (value.split(',').length == exactCount);\r\n },\r\n\r\n maxCount: function(value, maxCount) {\r\n if(maxCount == 0) {\r\n return false;\r\n }\r\n if(maxCount == 1) {\r\n return (value.search(',') === -1);\r\n }\r\n return (value.split(',').length <= maxCount);\r\n }\r\n }\r\n};\r\n\r\n})( jQuery, window, document );\r\n"],"names":["$","window","document","undefined","Math","self","Function","fn","form","parameters","returnedValue","$allModules","this","moduleSelector","selector","time","Date","getTime","performance","query","arguments","legacyParameters","methodInvoked","queryArguments","slice","call","each","$field","$group","$message","$submit","settings","validation","metadata","className","regExp","error","namespace","moduleNamespace","eventNamespace","instance","module","$module","element","formErrors","keyHeldDown","initialize","get","instantiate","invoke","verbose","bindEvents","set","defaults","data","destroy","removeEvents","removeData","refresh","find","field","group","message","prompt","submit","clear","reset","attachEvents","action","on","event","preventDefault","validate","blur","keyboardShortcuts","keydown","$input","type","prop","inputEvent","changeEvent","change","$element","parent","$fieldGroup","closest","$prompt","defaultValue","isCheckbox","is","uiCheckbox","isDropdown","uiDropdown","hasClass","removeClass","remove","dropdown","val","isErrored","determine","isValid","allValid","fieldName","bracketedRule","rule","match","bracket","shorthandFields","fields","firstRule","Object","keys","shorthandRules","rules","isArray","empty","length","blank","trim","valid","off","key","which","isInput","input","checkbox","isInDropdown","keyCode","ctrlKey","one","keyup","debug","validationRules","revalidate","clearTimeout","timer","setTimeout","delay","ancillaryValue","value","ruleName","replace","createElement","oninput","onpropertychange","fieldsFromShorthand","fullFields","name","index","push","$label","ancillary","identifier","isFunction","text","unspecifiedRule","requiresValue","search","requiresName","eq","unspecifiedField","isPlainObject","extend","oldSyntax","escape","string","filter","$fields","add","fieldValidation","values","isRadio","radio","isMultiple","indexOf","isChecked","has","String","newValidation","errors","children","promptExists","addClass","inline","templates","appendTo","html","transition","duration","fadeIn","splice","fadeOut","success","isEmptyObject","$multipleField","ignoreCallbacks","onSuccess","stopImmediatePropagation","onFailure","showErrors","$dependsField","depends","fieldValid","fieldErrors","optional","onValid","concat","onInvalid","ruleFunction","noRule","setting","internal","silent","log","prototype","bind","console","info","apply","currentTime","executionTime","display","title","totalTime","table","groupCollapsed","groupEnd","passedArguments","context","maxDepth","found","response","object","split","depth","camelCaseValue","charAt","toUpperCase","htmlID","decimal","email","flags","integer","number","url","checked","isExactly","not","notExactly","contain","containExactly","doesntContain","doesntContainExactly","minLength","exactLength","maxLength","different","creditCard","minCount","exactCount","maxCount","label","pressed","method","test","RegExp","regExpParts","range","min","max","parts","intRegExp","toLowerCase","notValue","contains","containsExactly","requiredLength","matchingValue","toString","cardNumber","cardTypes","unionPay","cards","visa","pattern","amex","mastercard","discover","jcb","maestro","dinersClub","laser","visaElectron","validCard","requiredTypes","inArray","multiple","producedValue","sum","parseInt","jQuery"],"sourceRoot":""}