{"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":""}