{"version":3,"sources":["jquery\\typeahead.jquery.js"],"names":["root","factory","define","amd","a0","module","exports","require","this","$","_","isBlankString","str","test","escapeRegExChars","replace","isString","obj","isNumber","isArray","Array","isFunction","isObject","isPlainObject","isUndefined","isElement","nodeType","isJQuery","toStr","s","bind","proxy","each","collection","cb","index","value","map","filter","grep","every","result","key","val","call","some","mixin","extend","identity","x","clone","getIdGenerator","counter","templatify","String","defer","fn","setTimeout","debounce","func","wait","immediate","timeout","later","callNow","context","args","arguments","apply","clearTimeout","throttle","previous","Date","now","remaining","stringify","JSON","guid","_p8","p","Math","random","toString","substr","noop","WWW","defaultClassNames","wrapper","input","hint","menu","dataset","suggestion","selectable","empty","open","cursor","highlight","o","www","classes","css","buildCss","html","buildHtml","selectors","buildSelectors","c","v","k","position","display","top","left","borderColor","boxShadow","opacity","verticalAlign","backgroundColor","inputWithNoHint","zIndex","ltr","right","rtl","EventBus","deprecationMap","el","error","$el","render","cursorchange","select","autocomplete","prototype","_trigger","type","$e","Event","trigger","before","slice","isDefaultPrevented","deprecatedType","EventEmitter","splitter","nextTick","nextTickFn","window","setImmediate","getNextTick","onSync","types","on","onAsync","off","_callbacks","split","shift","callbacks","syncFlush","asyncFlush","getFlush","sync","concat","async","method","bindContext","push","cancelled","i","len","length","doc","defaults","node","pattern","tagName","className","wordsOnly","caseSensitive","diacriticInsensitive","accented","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","regex","patterns","regexStr","escapedPatterns","escapedWord","accent_replacer","join","RegExp","getRegex","traverse","hightlightTextNode","childNode","childNodes","textNode","match","patternNode","wrapperNode","exec","data","createElement","splitText","appendChild","cloneNode","parentNode","replaceChild","chr","toUpperCase","document","Input","specialKeyCodeMap","id","$input","$hint","$menu","attr","role","query","queryWhenFocused","hasFocus","$overflowHelper","visibility","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","fontWeight","wordSpacing","letterSpacing","textIndent","textRendering","textTransform","insertAfter","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","_updateDescendent","normalizeQuery","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","which","keyCode","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","preventDefault","withModifier","dir","toLowerCase","silent","areEquivalent","hasDifferentWhitespace","a","b","event","onBlur","onFocus","onKeydown","onInput","focus","blur","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","indexOf","hasOverflow","is","constraint","width","text","isCursorAtEnd","valueLength","selectionStart","range","selection","createRange","moveStart","destroy","remove","setAriaExpanded","altKey","ctrlKey","metaKey","shiftKey","Dataset","keys","nameGenerator","templates","notFound","source","name","limit","displayFn","getDisplayFn","displayKey","pending","header","footer","userSuggestionTemplate","suggestionTemplate","template","getTemplates","__ttAdapter","_resetLastSuggestion","addClass","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","children","last","prepend","_getHeader","append","_getFooter","after","fragment","that","createDocumentFragment","_injectQuery","_query","update","canceled","syncCalled","rendered","cancel","idx","abs","clear","isEmpty","Menu","$node","_popper","Popper","createPopper","parent","find","placement","datasets","oDataset","first","appendTo","_onSelectableClick","currentTarget","_onRendered","toggleClass","_allDatasetsEmpty","_onCleared","_propagate","_getSelectables","_removeCursor","$selectable","getActiveSelectable","removeClass","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","outerHeight","scrollTop","height","parseInt","onSelectableClick","setCursor","isOpen","hasClass","close","setLanguageDirection","selectableRelativeToCursor","delta","$selectables","$oldCursor","newIndex","eq","getSelectableData","getTopSelectable","isValidUpdate","Status","options","padding","border","overflow","clip","cleared","words","DefaultMenu","_show","_hide","hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","enabled","autoselect","active","activate","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","activeElement","isActive","hasActive","has","_updateHint","cursorClass","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","stopPropagation","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","e","_onWhitespaceChanged","_openIfActive","escapedQuery","isEnabled","enable","disable","deactivate","setVal","getVal","$candidate","datasetName","ctx","methods","old","ttEach","$els","typeahead","buildHintFromInput","removeData","backgroundAttachment","backgroundClip","backgroundImage","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","prop","readonly","required","removeAttr","spellcheck","tabindex","prepInput","attrs","style","$elOrNull","initialize","classNames","attach","$wrapper","defaultHint","defaultMenu","MenuConstructor","d","wrap","t","success","newVal","detach","revert","noConflict"],"mappings":"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","sourcesContent":["/*!\r\n * typeahead.js 1.3.1\r\n * https://github.com/corejavascript/typeahead.js\r\n * Copyright 2013-2021 Twitter, Inc. and other contributors; Licensed MIT\r\n */\r\n\r\n\r\n(function(root, factory) {\r\n    if (typeof define === \"function\" && define.amd) {\r\n        define([ \"jquery\" ], function(a0) {\r\n            return factory(a0);\r\n        });\r\n    } else if (typeof module === \"object\" && module.exports) {\r\n        module.exports = factory(require(\"jquery\"));\r\n    } else {\r\n        factory(root[\"jQuery\"]);\r\n    }\r\n})(this, function($) {\r\n    var _ = function() {\r\n        \"use strict\";\r\n        return {\r\n            isBlankString: function(str) {\r\n                return !str || /^\\s*$/.test(str);\r\n            },\r\n            escapeRegExChars: function(str) {\r\n                return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n            },\r\n            isString: function(obj) {\r\n                return typeof obj === \"string\";\r\n            },\r\n            isNumber: function(obj) {\r\n                return typeof obj === \"number\";\r\n            },\r\n            isArray: Array.isArray,\r\n            isFunction: function(obj) {\r\n                return typeof obj === \"function\";\r\n            },\r\n            isObject: $.isPlainObject,\r\n            isUndefined: function(obj) {\r\n                return typeof obj === \"undefined\";\r\n            },\r\n            isElement: function(obj) {\r\n                return !!(obj && obj.nodeType === 1);\r\n            },\r\n            isJQuery: function(obj) {\r\n                return obj instanceof $;\r\n            },\r\n            toStr: function toStr(s) {\r\n                return _.isUndefined(s) || s === null ? \"\" : s + \"\";\r\n            },\r\n            bind: $.proxy,\r\n            each: function(collection, cb) {\r\n                $.each(collection, reverseArgs);\r\n                function reverseArgs(index, value) {\r\n                    return cb(value, index);\r\n                }\r\n            },\r\n            map: $.map,\r\n            filter: $.grep,\r\n            every: function(obj, test) {\r\n                var result = true;\r\n                if (!obj) {\r\n                    return result;\r\n                }\r\n                $.each(obj, function(key, val) {\r\n                    if (!(result = test.call(null, val, key, obj))) {\r\n                        return false;\r\n                    }\r\n                });\r\n                return !!result;\r\n            },\r\n            some: function(obj, test) {\r\n                var result = false;\r\n                if (!obj) {\r\n                    return result;\r\n                }\r\n                $.each(obj, function(key, val) {\r\n                    if (result = test.call(null, val, key, obj)) {\r\n                        return false;\r\n                    }\r\n                });\r\n                return !!result;\r\n            },\r\n            mixin: $.extend,\r\n            identity: function(x) {\r\n                return x;\r\n            },\r\n            clone: function(obj) {\r\n                return $.extend(true, {}, obj);\r\n            },\r\n            getIdGenerator: function() {\r\n                var counter = 0;\r\n                return function() {\r\n                    return counter++;\r\n                };\r\n            },\r\n            templatify: function templatify(obj) {\r\n                return $.isFunction(obj) ? obj : template;\r\n                function template() {\r\n                    return String(obj);\r\n                }\r\n            },\r\n            defer: function(fn) {\r\n                setTimeout(fn, 0);\r\n            },\r\n            debounce: function(func, wait, immediate) {\r\n                var timeout, result;\r\n                return function() {\r\n                    var context = this, args = arguments, later, callNow;\r\n                    later = function() {\r\n                        timeout = null;\r\n                        if (!immediate) {\r\n                            result = func.apply(context, args);\r\n                        }\r\n                    };\r\n                    callNow = immediate && !timeout;\r\n                    clearTimeout(timeout);\r\n                    timeout = setTimeout(later, wait);\r\n                    if (callNow) {\r\n                        result = func.apply(context, args);\r\n                    }\r\n                    return result;\r\n                };\r\n            },\r\n            throttle: function(func, wait) {\r\n                var context, args, timeout, result, previous, later;\r\n                previous = 0;\r\n                later = function() {\r\n                    previous = new Date();\r\n                    timeout = null;\r\n                    result = func.apply(context, args);\r\n                };\r\n                return function() {\r\n                    var now = new Date(), remaining = wait - (now - previous);\r\n                    context = this;\r\n                    args = arguments;\r\n                    if (remaining <= 0) {\r\n                        clearTimeout(timeout);\r\n                        timeout = null;\r\n                        previous = now;\r\n                        result = func.apply(context, args);\r\n                    } else if (!timeout) {\r\n                        timeout = setTimeout(later, remaining);\r\n                    }\r\n                    return result;\r\n                };\r\n            },\r\n            stringify: function(val) {\r\n                return _.isString(val) ? val : JSON.stringify(val);\r\n            },\r\n            guid: function() {\r\n                function _p8(s) {\r\n                    var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\r\n                    return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\r\n                }\r\n                return \"tt-\" + _p8() + _p8(true) + _p8(true) + _p8();\r\n            },\r\n            noop: function() {}\r\n        };\r\n    }();\r\n    var WWW = function() {\r\n        \"use strict\";\r\n        var defaultClassNames = {\r\n            wrapper: \"twitter-typeahead\",\r\n            input: \"tt-input\",\r\n            hint: \"tt-hint\",\r\n            menu: \"tt-menu\",\r\n            dataset: \"tt-dataset\",\r\n            suggestion: \"tt-suggestion\",\r\n            selectable: \"tt-selectable\",\r\n            empty: \"tt-empty\",\r\n            open: \"tt-open\",\r\n            cursor: \"tt-cursor\",\r\n            highlight: \"tt-highlight\"\r\n        };\r\n        return build;\r\n        function build(o) {\r\n            var www, classes;\r\n            classes = _.mixin({}, defaultClassNames, o);\r\n            www = {\r\n                css: buildCss(),\r\n                classes: classes,\r\n                html: buildHtml(classes),\r\n                selectors: buildSelectors(classes)\r\n            };\r\n            return {\r\n                css: www.css,\r\n                html: www.html,\r\n                classes: www.classes,\r\n                selectors: www.selectors,\r\n                mixin: function(o) {\r\n                    _.mixin(o, www);\r\n                }\r\n            };\r\n        }\r\n        function buildHtml(c) {\r\n            return {\r\n                wrapper: '<span class=\"' + c.wrapper + '\"></span>',\r\n                menu: '<div role=\"listbox\" class=\"' + c.menu + '\"></div>'\r\n            };\r\n        }\r\n        function buildSelectors(classes) {\r\n            var selectors = {};\r\n            _.each(classes, function(v, k) {\r\n                selectors[k] = \".\" + v;\r\n            });\r\n            return selectors;\r\n        }\r\n        function buildCss() {\r\n            var css = {\r\n                wrapper: {\r\n                    position: \"relative\",\r\n                    display: \"inline-block\"\r\n                },\r\n                hint: {\r\n                    position: \"absolute\",\r\n                    top: \"0\",\r\n                    left: \"0\",\r\n                    borderColor: \"transparent\",\r\n                    boxShadow: \"none\",\r\n                    opacity: \"1\"\r\n                },\r\n                input: {\r\n                    position: \"relative\",\r\n                    verticalAlign: \"top\",\r\n                    backgroundColor: \"var(--bs-body-bg)\" //***\r\n                },\r\n                inputWithNoHint: {\r\n                    position: \"relative\",\r\n                    verticalAlign: \"top\"\r\n                },\r\n                menu: {\r\n                    position: \"absolute\",\r\n                    top: \"100%\",\r\n                    left: \"0\",\r\n                    zIndex: \"100\",\r\n                    display: \"none\"\r\n                },\r\n                ltr: {\r\n                    left: \"0\",\r\n                    right: \"auto\"\r\n                },\r\n                rtl: {\r\n                    left: \"auto\",\r\n                    right: \" 0\"\r\n                }\r\n            };\r\n            return css;\r\n        }\r\n    }();\r\n    var EventBus = function() {\r\n        \"use strict\";\r\n        var namespace, deprecationMap;\r\n        namespace = \"typeahead:\";\r\n        deprecationMap = {\r\n            render: \"rendered\",\r\n            cursorchange: \"cursorchanged\",\r\n            select: \"selected\",\r\n            autocomplete: \"autocompleted\"\r\n        };\r\n        function EventBus(o) {\r\n            if (!o || !o.el) {\r\n                $.error(\"EventBus initialized without el\");\r\n            }\r\n            this.$el = $(o.el);\r\n        }\r\n        _.mixin(EventBus.prototype, {\r\n            _trigger: function(type, args) {\r\n                var $e = $.Event(namespace + type);\r\n                this.$el.trigger.call(this.$el, $e, args || []);\r\n                return $e;\r\n            },\r\n            before: function(type) {\r\n                var args, $e;\r\n                args = [].slice.call(arguments, 1);\r\n                $e = this._trigger(\"before\" + type, args);\r\n                return $e.isDefaultPrevented();\r\n            },\r\n            trigger: function(type) {\r\n                var deprecatedType;\r\n                this._trigger(type, [].slice.call(arguments, 1));\r\n                if (deprecatedType = deprecationMap[type]) {\r\n                    this._trigger(deprecatedType, [].slice.call(arguments, 1));\r\n                }\r\n            }\r\n        });\r\n        return EventBus;\r\n    }();\r\n    var EventEmitter = function() {\r\n        \"use strict\";\r\n        var splitter = /\\s+/, nextTick = getNextTick();\r\n        return {\r\n            onSync: onSync,\r\n            onAsync: onAsync,\r\n            off: off,\r\n            trigger: trigger\r\n        };\r\n        function on(method, types, cb, context) {\r\n            var type;\r\n            if (!cb) {\r\n                return this;\r\n            }\r\n            types = types.split(splitter);\r\n            cb = context ? bindContext(cb, context) : cb;\r\n            this._callbacks = this._callbacks || {};\r\n            while (type = types.shift()) {\r\n                this._callbacks[type] = this._callbacks[type] || {\r\n                    sync: [],\r\n                    async: []\r\n                };\r\n                this._callbacks[type][method].push(cb);\r\n            }\r\n            return this;\r\n        }\r\n        function onAsync(types, cb, context) {\r\n            return on.call(this, \"async\", types, cb, context);\r\n        }\r\n        function onSync(types, cb, context) {\r\n            return on.call(this, \"sync\", types, cb, context);\r\n        }\r\n        function off(types) {\r\n            var type;\r\n            if (!this._callbacks) {\r\n                return this;\r\n            }\r\n            types = types.split(splitter);\r\n            while (type = types.shift()) {\r\n                delete this._callbacks[type];\r\n            }\r\n            return this;\r\n        }\r\n        function trigger(types) {\r\n            var type, callbacks, args, syncFlush, asyncFlush;\r\n            if (!this._callbacks) {\r\n                return this;\r\n            }\r\n            types = types.split(splitter);\r\n            args = [].slice.call(arguments, 1);\r\n            while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\r\n                syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\r\n                asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\r\n                syncFlush() && nextTick(asyncFlush);\r\n            }\r\n            return this;\r\n        }\r\n        function getFlush(callbacks, context, args) {\r\n            return flush;\r\n            function flush() {\r\n                var cancelled;\r\n                for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\r\n                    cancelled = callbacks[i].apply(context, args) === false;\r\n                }\r\n                return !cancelled;\r\n            }\r\n        }\r\n        function getNextTick() {\r\n            var nextTickFn;\r\n            if (window.setImmediate) {\r\n                nextTickFn = function nextTickSetImmediate(fn) {\r\n                    setImmediate(function() {\r\n                        fn();\r\n                    });\r\n                };\r\n            } else {\r\n                nextTickFn = function nextTickSetTimeout(fn) {\r\n                    setTimeout(function() {\r\n                        fn();\r\n                    }, 0);\r\n                };\r\n            }\r\n            return nextTickFn;\r\n        }\r\n        function bindContext(fn, context) {\r\n            return fn.bind ? fn.bind(context) : function() {\r\n                fn.apply(context, [].slice.call(arguments, 0));\r\n            };\r\n        }\r\n    }();\r\n    var highlight = function(doc) {\r\n        \"use strict\";\r\n        var defaults = {\r\n            node: null,\r\n            pattern: null,\r\n            tagName: \"strong\",\r\n            className: null,\r\n            wordsOnly: false,\r\n            caseSensitive: false,\r\n            diacriticInsensitive: false\r\n        };\r\n        var accented = {\r\n            A: \"[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]\",\r\n            B: \"[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]\",\r\n            C: \"[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]\",\r\n            D: \"[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]\",\r\n            E: \"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]\",\r\n            F: \"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]\",\r\n            G: \"[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]\",\r\n            H: \"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]\",\r\n            I: \"[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]\",\r\n            J: \"[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]\",\r\n            K: \"[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]\",\r\n            L: \"[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]\",\r\n            M: \"[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]\",\r\n            N: \"[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]\",\r\n            O: \"[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]\",\r\n            P: \"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]\",\r\n            Q: \"[Qqℚ⒬Ⓠⓠ㏃Qq]\",\r\n            R: \"[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]\",\r\n            S: \"[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]\",\r\n            T: \"[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]\",\r\n            U: \"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]\",\r\n            V: \"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]\",\r\n            W: \"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]\",\r\n            X: \"[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]\",\r\n            Y: \"[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]\",\r\n            Z: \"[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]\"\r\n        };\r\n        return function hightlight(o) {\r\n            var regex;\r\n            o = _.mixin({}, defaults, o);\r\n            if (!o.node || !o.pattern) {\r\n                return;\r\n            }\r\n            o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\r\n            regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);\r\n            traverse(o.node, hightlightTextNode);\r\n            function hightlightTextNode(textNode) {\r\n                var match, patternNode, wrapperNode;\r\n                if (match = regex.exec(textNode.data)) {\r\n                    wrapperNode = doc.createElement(o.tagName);\r\n                    o.className && (wrapperNode.className = o.className);\r\n                    patternNode = textNode.splitText(match.index);\r\n                    patternNode.splitText(match[0].length);\r\n                    wrapperNode.appendChild(patternNode.cloneNode(true));\r\n                    textNode.parentNode.replaceChild(wrapperNode, patternNode);\r\n                }\r\n                return !!match;\r\n            }\r\n            function traverse(el, hightlightTextNode) {\r\n                var childNode, TEXT_NODE_TYPE = 3;\r\n                for (var i = 0; i < el.childNodes.length; i++) {\r\n                    childNode = el.childNodes[i];\r\n                    if (childNode.nodeType === TEXT_NODE_TYPE) {\r\n                        i += hightlightTextNode(childNode) ? 1 : 0;\r\n                    } else {\r\n                        traverse(childNode, hightlightTextNode);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        function accent_replacer(chr) {\r\n            return accented[chr.toUpperCase()] || chr;\r\n        }\r\n        function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {\r\n            var escapedPatterns = [], regexStr;\r\n            for (var i = 0, len = patterns.length; i < len; i++) {\r\n                var escapedWord = _.escapeRegExChars(patterns[i]);\r\n                if (diacriticInsensitive) {\r\n                    escapedWord = escapedWord.replace(/\\S/g, accent_replacer);\r\n                }\r\n                escapedPatterns.push(escapedWord);\r\n            }\r\n            regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\r\n            return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\r\n        }\r\n    }(window.document);\r\n    var Input = function() {\r\n        \"use strict\";\r\n        var specialKeyCodeMap;\r\n        specialKeyCodeMap = {\r\n            9: \"tab\",\r\n            27: \"esc\",\r\n            37: \"left\",\r\n            39: \"right\",\r\n            13: \"enter\",\r\n            38: \"up\",\r\n            40: \"down\"\r\n        };\r\n        function Input(o, www) {\r\n            var id;\r\n            o = o || {};\r\n            if (!o.input) {\r\n                $.error(\"input is missing\");\r\n            }\r\n            www.mixin(this);\r\n            this.$hint = $(o.hint);\r\n            this.$input = $(o.input);\r\n            this.$menu = $(o.menu);\r\n            id = this.$input.attr(\"id\") || _.guid();\r\n            this.$menu.attr(\"id\", id + \"_listbox\");\r\n            this.$hint.attr({\r\n                \"aria-hidden\": true\r\n            });\r\n            this.$input.attr({\r\n                \"aria-owns\": id + \"_listbox\",\r\n                role: \"combobox\",\r\n                \"aria-autocomplete\": \"list\",\r\n                \"aria-expanded\": false\r\n            });\r\n            this.query = this.$input.val();\r\n            this.queryWhenFocused = this.hasFocus() ? this.query : null;\r\n            this.$overflowHelper = buildOverflowHelper(this.$input);\r\n            this._checkLanguageDirection();\r\n            if (this.$hint.length === 0) {\r\n                this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\r\n            }\r\n            this.onSync(\"cursorchange\", this._updateDescendent);\r\n        }\r\n        Input.normalizeQuery = function(str) {\r\n            return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\r\n        };\r\n        _.mixin(Input.prototype, EventEmitter, {\r\n            _onBlur: function onBlur() {\r\n                this.resetInputValue();\r\n                this.trigger(\"blurred\");\r\n            },\r\n            _onFocus: function onFocus() {\r\n                this.queryWhenFocused = this.query;\r\n                this.trigger(\"focused\");\r\n            },\r\n            _onKeydown: function onKeydown($e) {\r\n                var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\r\n                this._managePreventDefault(keyName, $e);\r\n                if (keyName && this._shouldTrigger(keyName, $e)) {\r\n                    this.trigger(keyName + \"Keyed\", $e);\r\n                }\r\n            },\r\n            _onInput: function onInput() {\r\n                this._setQuery(this.getInputValue());\r\n                this.clearHintIfInvalid();\r\n                this._checkLanguageDirection();\r\n            },\r\n            _managePreventDefault: function managePreventDefault(keyName, $e) {\r\n                var preventDefault;\r\n                switch (keyName) {\r\n                  case \"up\":\r\n                  case \"down\":\r\n                    preventDefault = !withModifier($e);\r\n                    break;\r\n\r\n                  default:\r\n                    preventDefault = false;\r\n                }\r\n                preventDefault && $e.preventDefault();\r\n            },\r\n            _shouldTrigger: function shouldTrigger(keyName, $e) {\r\n                var trigger;\r\n                switch (keyName) {\r\n                  case \"tab\":\r\n                    trigger = !withModifier($e);\r\n                    break;\r\n\r\n                  default:\r\n                    trigger = true;\r\n                }\r\n                return trigger;\r\n            },\r\n            _checkLanguageDirection: function checkLanguageDirection() {\r\n                var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\r\n                if (this.dir !== dir) {\r\n                    this.dir = dir;\r\n                    this.$hint.attr(\"dir\", dir);\r\n                    this.trigger(\"langDirChanged\", dir);\r\n                }\r\n            },\r\n            _setQuery: function setQuery(val, silent) {\r\n                var areEquivalent, hasDifferentWhitespace;\r\n                areEquivalent = areQueriesEquivalent(val, this.query);\r\n                hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\r\n                this.query = val;\r\n                if (!silent && !areEquivalent) {\r\n                    this.trigger(\"queryChanged\", this.query);\r\n                } else if (!silent && hasDifferentWhitespace) {\r\n                    this.trigger(\"whitespaceChanged\", this.query);\r\n                }\r\n            },\r\n            _updateDescendent: function updateDescendent(event, id) {\r\n                this.$input.attr(\"aria-activedescendant\", id);\r\n            },\r\n            bind: function() {\r\n                var onBlur, onFocus, onKeydown, onInput;\r\n                onBlur = _.bind(this._onBlur, this);\r\n                onFocus = _.bind(this._onFocus, this);\r\n                onKeydown = _.bind(this._onKeydown, this);\r\n                onInput = _.bind(this._onInput, this);\r\n                this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\r\n                this.$input.on(\"input.tt\", onInput);\r\n                return this;\r\n            },\r\n            focus: function focus() {\r\n                this.$input.focus();\r\n            },\r\n            blur: function blur() {\r\n                this.$input.blur();\r\n            },\r\n            getLangDir: function getLangDir() {\r\n                return this.dir;\r\n            },\r\n            getQuery: function getQuery() {\r\n                return this.query || \"\";\r\n            },\r\n            setQuery: function setQuery(val, silent) {\r\n                this.setInputValue(val);\r\n                this._setQuery(val, silent);\r\n            },\r\n            hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\r\n                return this.query !== this.queryWhenFocused;\r\n            },\r\n            getInputValue: function getInputValue() {\r\n                return this.$input.val();\r\n            },\r\n            setInputValue: function setInputValue(value) {\r\n                this.$input.val(value);\r\n                this.clearHintIfInvalid();\r\n                this._checkLanguageDirection();\r\n            },\r\n            resetInputValue: function resetInputValue() {\r\n                this.setInputValue(this.query);\r\n            },\r\n            getHint: function getHint() {\r\n                return this.$hint.val();\r\n            },\r\n            setHint: function setHint(value) {\r\n                this.$hint.val(value);\r\n            },\r\n            clearHint: function clearHint() {\r\n                this.setHint(\"\");\r\n            },\r\n            clearHintIfInvalid: function clearHintIfInvalid() {\r\n                var val, hint, valIsPrefixOfHint, isValid;\r\n                val = this.getInputValue();\r\n                hint = this.getHint();\r\n                valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\r\n                isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\r\n                !isValid && this.clearHint();\r\n            },\r\n            hasFocus: function hasFocus() {\r\n                return this.$input.is(\":focus\");\r\n            },\r\n            hasOverflow: function hasOverflow() {\r\n                var constraint = this.$input.width() - 2;\r\n                this.$overflowHelper.text(this.getInputValue());\r\n                return this.$overflowHelper.width() >= constraint;\r\n            },\r\n            isCursorAtEnd: function() {\r\n                var valueLength, selectionStart, range;\r\n                valueLength = this.$input.val().length;\r\n                selectionStart = this.$input[0].selectionStart;\r\n                if (_.isNumber(selectionStart)) {\r\n                    return selectionStart === valueLength;\r\n                } else if (document.selection) {\r\n                    range = document.selection.createRange();\r\n                    range.moveStart(\"character\", -valueLength);\r\n                    return valueLength === range.text.length;\r\n                }\r\n                return true;\r\n            },\r\n            destroy: function destroy() {\r\n                this.$hint.off(\".tt\");\r\n                this.$input.off(\".tt\");\r\n                this.$overflowHelper.remove();\r\n                this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\r\n            },\r\n            setAriaExpanded: function setAriaExpanded(value) {\r\n                this.$input.attr(\"aria-expanded\", value);\r\n            }\r\n        });\r\n        return Input;\r\n        function buildOverflowHelper($input) {\r\n            return $('<pre aria-hidden=\"true\"></pre>').css({\r\n                position: \"absolute\",\r\n                visibility: \"hidden\",\r\n                whiteSpace: \"pre\",\r\n                fontFamily: $input.css(\"font-family\"),\r\n                fontSize: $input.css(\"font-size\"),\r\n                fontStyle: $input.css(\"font-style\"),\r\n                fontVariant: $input.css(\"font-variant\"),\r\n                fontWeight: $input.css(\"font-weight\"),\r\n                wordSpacing: $input.css(\"word-spacing\"),\r\n                letterSpacing: $input.css(\"letter-spacing\"),\r\n                textIndent: $input.css(\"text-indent\"),\r\n                textRendering: $input.css(\"text-rendering\"),\r\n                textTransform: $input.css(\"text-transform\")\r\n            }).insertAfter($input);\r\n        }\r\n        function areQueriesEquivalent(a, b) {\r\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\r\n        }\r\n        function withModifier($e) {\r\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\r\n        }\r\n    }();\r\n    var Dataset = function() {\r\n        \"use strict\";\r\n        var keys, nameGenerator;\r\n        keys = {\r\n            dataset: \"tt-selectable-dataset\",\r\n            val: \"tt-selectable-display\",\r\n            obj: \"tt-selectable-object\"\r\n        };\r\n        nameGenerator = _.getIdGenerator();\r\n        function Dataset(o, www) {\r\n            o = o || {};\r\n            o.templates = o.templates || {};\r\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\r\n            if (!o.source) {\r\n                $.error(\"missing source\");\r\n            }\r\n            if (!o.node) {\r\n                $.error(\"missing node\");\r\n            }\r\n            if (o.name && !isValidName(o.name)) {\r\n                $.error(\"invalid dataset name: \" + o.name);\r\n            }\r\n            www.mixin(this);\r\n            this.highlight = !!o.highlight;\r\n            this.name = _.toStr(o.name || nameGenerator());\r\n            this.limit = o.limit || 5;\r\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\r\n            this.templates = getTemplates(o.templates, this.displayFn);\r\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\r\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\r\n            this._resetLastSuggestion();\r\n            this.$el = $(o.node).attr(\"role\", \"presentation\").addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\r\n        }\r\n        Dataset.extractData = function extractData(el) {\r\n            var $el = $(el);\r\n            if ($el.data(keys.obj)) {\r\n                return {\r\n                    dataset: $el.data(keys.dataset) || \"\",\r\n                    val: $el.data(keys.val) || \"\",\r\n                    obj: $el.data(keys.obj) || null\r\n                };\r\n            }\r\n            return null;\r\n        };\r\n        _.mixin(Dataset.prototype, EventEmitter, {\r\n            _overwrite: function overwrite(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (this.async && this.templates.pending) {\r\n                    this._renderPending(query);\r\n                } else if (!this.async && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                } else {\r\n                    this._empty();\r\n                }\r\n                this.trigger(\"rendered\", suggestions, false, this.name);\r\n            },\r\n            _append: function append(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length && this.$lastSuggestion.length) {\r\n                    this._appendSuggestions(query, suggestions);\r\n                } else if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                }\r\n                this.trigger(\"rendered\", suggestions, true, this.name);\r\n            },\r\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\r\n                var $fragment;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                this.$lastSuggestion = $fragment.children().last();\r\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\r\n            },\r\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\r\n                var $fragment, $lastSuggestion;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                $lastSuggestion = $fragment.children().last();\r\n                this.$lastSuggestion.after($fragment);\r\n                this.$lastSuggestion = $lastSuggestion;\r\n            },\r\n            _renderPending: function renderPending(query) {\r\n                var template = this.templates.pending;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _renderNotFound: function renderNotFound(query) {\r\n                var template = this.templates.notFound;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _empty: function empty() {\r\n                this.$el.empty();\r\n                this._resetLastSuggestion();\r\n            },\r\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\r\n                var that = this, fragment;\r\n                fragment = document.createDocumentFragment();\r\n                _.each(suggestions, function getSuggestionNode(suggestion) {\r\n                    var $el, context;\r\n                    context = that._injectQuery(query, suggestion);\r\n                    $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\r\n                    fragment.appendChild($el[0]);\r\n                });\r\n                this.highlight && highlight({\r\n                    className: this.classes.highlight,\r\n                    node: fragment,\r\n                    pattern: query\r\n                });\r\n                return $(fragment);\r\n            },\r\n            _getFooter: function getFooter(query, suggestions) {\r\n                return this.templates.footer ? this.templates.footer({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _getHeader: function getHeader(query, suggestions) {\r\n                return this.templates.header ? this.templates.header({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _resetLastSuggestion: function resetLastSuggestion() {\r\n                this.$lastSuggestion = $();\r\n            },\r\n            _injectQuery: function injectQuery(query, obj) {\r\n                return _.isObject(obj) ? _.mixin({\r\n                    _query: query\r\n                }, obj) : obj;\r\n            },\r\n            update: function update(query) {\r\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\r\n                this.cancel();\r\n                this.cancel = function cancel() {\r\n                    canceled = true;\r\n                    that.cancel = $.noop;\r\n                    that.async && that.trigger(\"asyncCanceled\", query, that.name);\r\n                };\r\n                this.source(query, sync, async);\r\n                !syncCalled && sync([]);\r\n                function sync(suggestions) {\r\n                    if (syncCalled) {\r\n                        return;\r\n                    }\r\n                    syncCalled = true;\r\n                    suggestions = (suggestions || []).slice(0, that.limit);\r\n                    rendered = suggestions.length;\r\n                    that._overwrite(query, suggestions);\r\n                    if (rendered < that.limit && that.async) {\r\n                        that.trigger(\"asyncRequested\", query, that.name);\r\n                    }\r\n                }\r\n                function async(suggestions) {\r\n                    suggestions = suggestions || [];\r\n                    if (!canceled && rendered < that.limit) {\r\n                        that.cancel = $.noop;\r\n                        var idx = Math.abs(rendered - that.limit);\r\n                        rendered += idx;\r\n                        that._append(query, suggestions.slice(0, idx));\r\n                        that.async && that.trigger(\"asyncReceived\", query, that.name);\r\n                    }\r\n                }\r\n            },\r\n            cancel: $.noop,\r\n            clear: function clear() {\r\n                this._empty();\r\n                this.cancel();\r\n                this.trigger(\"cleared\");\r\n            },\r\n            isEmpty: function isEmpty() {\r\n                return this.$el.is(\":empty\");\r\n            },\r\n            destroy: function destroy() {\r\n                this.$el = $(\"<div>\");\r\n            }\r\n        });\r\n        return Dataset;\r\n        function getDisplayFn(display) {\r\n            display = display || _.stringify;\r\n            return _.isFunction(display) ? display : displayFn;\r\n            function displayFn(obj) {\r\n                return obj[display];\r\n            }\r\n        }\r\n        function getTemplates(templates, displayFn) {\r\n            return {\r\n                notFound: templates.notFound && _.templatify(templates.notFound),\r\n                pending: templates.pending && _.templatify(templates.pending),\r\n                header: templates.header && _.templatify(templates.header),\r\n                footer: templates.footer && _.templatify(templates.footer),\r\n                suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate\r\n            };\r\n            function userSuggestionTemplate(context) {\r\n                var template = templates.suggestion;\r\n                return $(template(context)).attr(\"id\", _.guid());\r\n            }\r\n            function suggestionTemplate(context) {\r\n                return $('<div role=\"option\">').attr(\"id\", _.guid()).text(displayFn(context));\r\n            }\r\n        }\r\n        function isValidName(str) {\r\n            return /^[_a-zA-Z0-9-]+$/.test(str);\r\n        }\r\n    }();\r\n    var Menu = function() {\r\n        \"use strict\";\r\n        function Menu(o, www) {\r\n            var that = this;\r\n            o = o || {};\r\n            if (!o.node) {\r\n                $.error(\"node is required\");\r\n            }\r\n            www.mixin(this);\r\n            this.$node = $(o.node);\r\n            this._popper = Popper.createPopper(this.$node.parent().find(\".tt-input\")[0], o.node[0], {\r\n                placement: this.$node.parent().find(\".tt-input\").attr(\"dir\") == \"rtl\" ? \"bottom-end\" : \"bottom-start\"\r\n            });\r\n            this.query = null;\r\n            this.datasets = _.map(o.datasets, initializeDataset);\r\n            function initializeDataset(oDataset) {\r\n                var node = that.$node.find(oDataset.node).first();\r\n                oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\r\n                return new Dataset(oDataset, www);\r\n            }\r\n        }\r\n        _.mixin(Menu.prototype, EventEmitter, {\r\n            _onSelectableClick: function onSelectableClick($e) {\r\n                this.trigger(\"selectableClicked\", $($e.currentTarget));\r\n            },\r\n            _onRendered: function onRendered(type, dataset, suggestions, async) {\r\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n                this.trigger(\"datasetRendered\", dataset, suggestions, async);\r\n            },\r\n            _onCleared: function onCleared() {\r\n                this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n                this.trigger(\"datasetCleared\");\r\n            },\r\n            _propagate: function propagate() {\r\n                this.trigger.apply(this, arguments);\r\n            },\r\n            _allDatasetsEmpty: function allDatasetsEmpty() {\r\n                return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {\r\n                    var isEmpty = dataset.isEmpty();\r\n                    this.$node.attr(\"aria-expanded\", !isEmpty);\r\n                    return isEmpty;\r\n                }, this));\r\n            },\r\n            _getSelectables: function getSelectables() {\r\n                return this.$node.find(this.selectors.selectable);\r\n            },\r\n            _removeCursor: function _removeCursor() {\r\n                var $selectable = this.getActiveSelectable();\r\n                $selectable && $selectable.removeClass(this.classes.cursor);\r\n            },\r\n            _ensureVisible: function ensureVisible($el) {\r\n                var elTop, elBottom, nodeScrollTop, nodeHeight;\r\n                elTop = $el.position().top;\r\n                elBottom = elTop + $el.outerHeight(true);\r\n                nodeScrollTop = this.$node.scrollTop();\r\n                nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\r\n                if (elTop < 0) {\r\n                    this.$node.scrollTop(nodeScrollTop + elTop);\r\n                } else if (nodeHeight < elBottom) {\r\n                    this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\r\n                }\r\n            },\r\n            bind: function() {\r\n                var that = this, onSelectableClick;\r\n                onSelectableClick = _.bind(this._onSelectableClick, this);\r\n                this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\r\n                this.$node.on(\"mouseover\", this.selectors.selectable, function() {\r\n                    that.setCursor($(this));\r\n                });\r\n                this.$node.on(\"mouseleave\", function() {\r\n                    that._removeCursor();\r\n                });\r\n                _.each(this.datasets, function(dataset) {\r\n                    dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\r\n                });\r\n                return this;\r\n            },\r\n            isOpen: function isOpen() {\r\n                this._popper.update();\r\n                return this.$node.hasClass(this.classes.open);\r\n            },\r\n            open: function open() {\r\n                this.$node.scrollTop(0);\r\n                this.$node.addClass(this.classes.open);\r\n            },\r\n            close: function close() {\r\n                this.$node.attr(\"aria-expanded\", false);\r\n                this.$node.removeClass(this.classes.open);\r\n                this._removeCursor();\r\n            },\r\n            setLanguageDirection: function setLanguageDirection(dir) {\r\n                this.$node.attr(\"dir\", dir);\r\n            },\r\n            selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\r\n                var $selectables, $oldCursor, oldIndex, newIndex;\r\n                $oldCursor = this.getActiveSelectable();\r\n                $selectables = this._getSelectables();\r\n                oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\r\n                newIndex = oldIndex + delta;\r\n                newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\r\n                newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\r\n                return newIndex === -1 ? null : $selectables.eq(newIndex);\r\n            },\r\n            setCursor: function setCursor($selectable) {\r\n                this._removeCursor();\r\n                if ($selectable = $selectable && $selectable.first()) {\r\n                    $selectable.addClass(this.classes.cursor);\r\n                    this._ensureVisible($selectable);\r\n                }\r\n            },\r\n            getSelectableData: function getSelectableData($el) {\r\n                return $el && $el.length ? Dataset.extractData($el) : null;\r\n            },\r\n            getActiveSelectable: function getActiveSelectable() {\r\n                var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\r\n                return $selectable.length ? $selectable : null;\r\n            },\r\n            getTopSelectable: function getTopSelectable() {\r\n                var $selectable = this._getSelectables().first();\r\n                return $selectable.length ? $selectable : null;\r\n            },\r\n            update: function update(query) {\r\n                var isValidUpdate = query !== this.query;\r\n                if (isValidUpdate) {\r\n                    this.query = query;\r\n                    _.each(this.datasets, updateDataset);\r\n                }\r\n                return isValidUpdate;\r\n                function updateDataset(dataset) {\r\n                    dataset.update(query);\r\n                }\r\n            },\r\n            empty: function empty() {\r\n                _.each(this.datasets, clearDataset);\r\n                this.query = null;\r\n                this.$node.addClass(this.classes.empty);\r\n                function clearDataset(dataset) {\r\n                    dataset.clear();\r\n                }\r\n            },\r\n            destroy: function destroy() {\r\n                this.$node.off(\".tt\");\r\n                this.$node = $(\"<div>\");\r\n                if (this._popper !== null) {\r\n                    this._popper.destroy();\r\n                    this._popper = null;\r\n                }\r\n                _.each(this.datasets, destroyDataset);\r\n                function destroyDataset(dataset) {\r\n                    dataset.destroy();\r\n                }\r\n            }\r\n        });\r\n        return Menu;\r\n    }();\r\n    var Status = function() {\r\n        \"use strict\";\r\n        function Status(options) {\r\n            this.$el = $(\"<span></span>\", {\r\n                role: \"status\",\r\n                \"aria-live\": \"polite\"\r\n            }).css({\r\n                position: \"absolute\",\r\n                padding: \"0\",\r\n                border: \"0\",\r\n                height: \"1px\",\r\n                width: \"1px\",\r\n                \"margin-bottom\": \"-1px\",\r\n                \"margin-right\": \"-1px\",\r\n                overflow: \"hidden\",\r\n                clip: \"rect(0 0 0 0)\",\r\n                \"white-space\": \"nowrap\"\r\n            });\r\n            options.$input.after(this.$el);\r\n            _.each(options.menu.datasets, _.bind(function(dataset) {\r\n                if (dataset.onSync) {\r\n                    dataset.onSync(\"rendered\", _.bind(this.update, this));\r\n                    dataset.onSync(\"cleared\", _.bind(this.cleared, this));\r\n                }\r\n            }, this));\r\n        }\r\n        _.mixin(Status.prototype, {\r\n            update: function update(event, suggestions) {\r\n                var length = suggestions.length;\r\n                var words;\r\n                if (length === 1) {\r\n                    words = {\r\n                        result: \"result\",\r\n                        is: \"is\"\r\n                    };\r\n                } else {\r\n                    words = {\r\n                        result: \"results\",\r\n                        is: \"are\"\r\n                    };\r\n                }\r\n                this.$el.text(length + \" \" + words.result + \" \" + words.is + \" available, use up and down arrow keys to navigate.\");\r\n            },\r\n            cleared: function() {\r\n                this.$el.text(\"\");\r\n            }\r\n        });\r\n        return Status;\r\n    }();\r\n    var DefaultMenu = function() {\r\n        \"use strict\";\r\n        var s = Menu.prototype;\r\n        function DefaultMenu() {\r\n            Menu.apply(this, [].slice.call(arguments, 0));\r\n        }\r\n        _.mixin(DefaultMenu.prototype, Menu.prototype, {\r\n            open: function open() {\r\n                !this._allDatasetsEmpty() && this._show();\r\n                return s.open.apply(this, [].slice.call(arguments, 0));\r\n            },\r\n            close: function close() {\r\n                this._hide();\r\n                return s.close.apply(this, [].slice.call(arguments, 0));\r\n            },\r\n            _onRendered: function onRendered() {\r\n                if (this._allDatasetsEmpty()) {\r\n                    this._hide();\r\n                } else {\r\n                    this.isOpen() && this._show();\r\n                }\r\n                return s._onRendered.apply(this, [].slice.call(arguments, 0));\r\n            },\r\n            _onCleared: function onCleared() {\r\n                if (this._allDatasetsEmpty()) {\r\n                    this._hide();\r\n                } else {\r\n                    this.isOpen() && this._show();\r\n                }\r\n                return s._onCleared.apply(this, [].slice.call(arguments, 0));\r\n            },\r\n            setLanguageDirection: function setLanguageDirection(dir) {\r\n                this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\r\n                return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\r\n            },\r\n            _hide: function hide() {\r\n                this.$node.hide();\r\n            },\r\n            _show: function show() {\r\n                this.$node.css(\"display\", \"block\");\r\n            }\r\n        });\r\n        return DefaultMenu;\r\n    }();\r\n    var Typeahead = function() {\r\n        \"use strict\";\r\n        function Typeahead(o, www) {\r\n            var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\r\n            o = o || {};\r\n            if (!o.input) {\r\n                $.error(\"missing input\");\r\n            }\r\n            if (!o.menu) {\r\n                $.error(\"missing menu\");\r\n            }\r\n            if (!o.eventBus) {\r\n                $.error(\"missing event bus\");\r\n            }\r\n            www.mixin(this);\r\n            this.eventBus = o.eventBus;\r\n            this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\r\n            this.input = o.input;\r\n            this.menu = o.menu;\r\n            this.enabled = true;\r\n            this.autoselect = !!o.autoselect;\r\n            this.active = false;\r\n            this.input.hasFocus() && this.activate();\r\n            this.dir = this.input.getLangDir();\r\n            this._hacks();\r\n            this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\r\n            onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\r\n            onBlurred = c(this, \"deactivate\", \"_onBlurred\");\r\n            onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\r\n            onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\r\n            onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\r\n            onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\r\n            onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\r\n            onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\r\n            onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\r\n            onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\r\n            onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\r\n            this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\r\n        }\r\n        _.mixin(Typeahead.prototype, {\r\n            _hacks: function hacks() {\r\n                var $input, $menu;\r\n                $input = this.input.$input || $(\"<div>\");\r\n                $menu = this.menu.$node || $(\"<div>\");\r\n                $input.on(\"blur.tt\", function($e) {\r\n                    var active;\r\n                    active = document.activeElement;\r\n                    isActive = $menu.is(active);\r\n                    hasActive = $menu.has(active).length > 0;\r\n                });\r\n                $menu.on(\"mousedown.tt\", function($e) {\r\n                    $e.preventDefault();\r\n                });\r\n            },\r\n            _onSelectableClicked: function onSelectableClicked(type, $el) {\r\n                this.select($el);\r\n            },\r\n            _onDatasetCleared: function onDatasetCleared() {\r\n                this._updateHint();\r\n            },\r\n            _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {\r\n                this._updateHint();\r\n                if (this.autoselect) {\r\n                    var cursorClass = this.selectors.cursor.substr(1);\r\n                    this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);\r\n                }\r\n                this.eventBus.trigger(\"render\", suggestions, async, dataset);\r\n            },\r\n            _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\r\n                this.eventBus.trigger(\"asyncrequest\", query, dataset);\r\n            },\r\n            _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\r\n                this.eventBus.trigger(\"asynccancel\", query, dataset);\r\n            },\r\n            _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\r\n                this.eventBus.trigger(\"asyncreceive\", query, dataset);\r\n            },\r\n            _onFocused: function onFocused() {\r\n                this._minLengthMet() && this.menu.update(this.input.getQuery());\r\n            },\r\n            _onBlurred: function onBlurred() {\r\n                if (this.input.hasQueryChangedSinceLastFocus()) {\r\n                    this.eventBus.trigger(\"change\", this.input.getQuery());\r\n                }\r\n            },\r\n            _onEnterKeyed: function onEnterKeyed(type, $e) {\r\n                var $selectable;\r\n                if ($selectable = this.menu.getActiveSelectable()) {\r\n                    if (this.select($selectable)) {\r\n                        $e.preventDefault();\r\n                        $e.stopPropagation();\r\n                    }\r\n                } else if (this.autoselect) {\r\n                    if (this.select(this.menu.getTopSelectable())) {\r\n                        $e.preventDefault();\r\n                        $e.stopPropagation();\r\n                    }\r\n                }\r\n            },\r\n            _onTabKeyed: function onTabKeyed(type, $e) {\r\n                var $selectable;\r\n                if ($selectable = this.menu.getActiveSelectable()) {\r\n                    this.select($selectable) && $e.preventDefault();\r\n                } else if (this.autoselect) {\r\n                    if ($selectable = this.menu.getTopSelectable()) {\r\n                        this.autocomplete($selectable) && $e.preventDefault();\r\n                    }\r\n                }\r\n            },\r\n            _onEscKeyed: function onEscKeyed() {\r\n                this.close();\r\n            },\r\n            _onUpKeyed: function onUpKeyed() {\r\n                this.moveCursor(-1);\r\n            },\r\n            _onDownKeyed: function onDownKeyed() {\r\n                this.moveCursor(+1);\r\n            },\r\n            _onLeftKeyed: function onLeftKeyed() {\r\n                if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\r\n                    this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\r\n                }\r\n            },\r\n            _onRightKeyed: function onRightKeyed() {\r\n                if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\r\n                    this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\r\n                }\r\n            },\r\n            _onQueryChanged: function onQueryChanged(e, query) {\r\n                this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\r\n            },\r\n            _onWhitespaceChanged: function onWhitespaceChanged() {\r\n                this._updateHint();\r\n            },\r\n            _onLangDirChanged: function onLangDirChanged(e, dir) {\r\n                if (this.dir !== dir) {\r\n                    this.dir = dir;\r\n                    this.menu.setLanguageDirection(dir);\r\n                }\r\n            },\r\n            _openIfActive: function openIfActive() {\r\n                this.isActive() && this.open();\r\n            },\r\n            _minLengthMet: function minLengthMet(query) {\r\n                query = _.isString(query) ? query : this.input.getQuery() || \"\";\r\n                return query.length >= this.minLength;\r\n            },\r\n            _updateHint: function updateHint() {\r\n                var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\r\n                $selectable = this.menu.getTopSelectable();\r\n                data = this.menu.getSelectableData($selectable);\r\n                val = this.input.getInputValue();\r\n                if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\r\n                    query = Input.normalizeQuery(val);\r\n                    escapedQuery = _.escapeRegExChars(query);\r\n                    frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\r\n                    match = frontMatchRegEx.exec(data.val);\r\n                    match && this.input.setHint(val + match[1]);\r\n                } else {\r\n                    this.input.clearHint();\r\n                }\r\n            },\r\n            isEnabled: function isEnabled() {\r\n                return this.enabled;\r\n            },\r\n            enable: function enable() {\r\n                this.enabled = true;\r\n            },\r\n            disable: function disable() {\r\n                this.enabled = false;\r\n            },\r\n            isActive: function isActive() {\r\n                return this.active;\r\n            },\r\n            activate: function activate() {\r\n                if (this.isActive()) {\r\n                    return true;\r\n                } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\r\n                    return false;\r\n                } else {\r\n                    this.active = true;\r\n                    this.eventBus.trigger(\"active\");\r\n                    return true;\r\n                }\r\n            },\r\n            deactivate: function deactivate() {\r\n                if (!this.isActive()) {\r\n                    return true;\r\n                } else if (this.eventBus.before(\"idle\")) {\r\n                    return false;\r\n                } else {\r\n                    this.active = false;\r\n                    this.close();\r\n                    this.eventBus.trigger(\"idle\");\r\n                    return true;\r\n                }\r\n            },\r\n            isOpen: function isOpen() {\r\n                return this.menu.isOpen();\r\n            },\r\n            open: function open() {\r\n                if (!this.isOpen() && !this.eventBus.before(\"open\")) {\r\n                    this.input.setAriaExpanded(true);\r\n                    this.menu.open();\r\n                    this._updateHint();\r\n                    this.eventBus.trigger(\"open\");\r\n                }\r\n                return this.isOpen();\r\n            },\r\n            close: function close() {\r\n                if (this.isOpen() && !this.eventBus.before(\"close\")) {\r\n                    this.input.setAriaExpanded(false);\r\n                    this.menu.close();\r\n                    this.input.clearHint();\r\n                    this.input.resetInputValue();\r\n                    this.eventBus.trigger(\"close\");\r\n                }\r\n                return !this.isOpen();\r\n            },\r\n            setVal: function setVal(val) {\r\n                this.input.setQuery(_.toStr(val));\r\n            },\r\n            getVal: function getVal() {\r\n                return this.input.getQuery();\r\n            },\r\n            select: function select($selectable) {\r\n                var data = this.menu.getSelectableData($selectable);\r\n                if (data && !this.eventBus.before(\"select\", data.obj, data.dataset)) {\r\n                    this.input.setQuery(data.val, true);\r\n                    this.eventBus.trigger(\"select\", data.obj, data.dataset);\r\n                    this.close();\r\n                    return true;\r\n                }\r\n                return false;\r\n            },\r\n            autocomplete: function autocomplete($selectable) {\r\n                var query, data, isValid;\r\n                query = this.input.getQuery();\r\n                data = this.menu.getSelectableData($selectable);\r\n                isValid = data && query !== data.val;\r\n                if (isValid && !this.eventBus.before(\"autocomplete\", data.obj, data.dataset)) {\r\n                    this.input.setQuery(data.val);\r\n                    this.eventBus.trigger(\"autocomplete\", data.obj, data.dataset);\r\n                    return true;\r\n                }\r\n                return false;\r\n            },\r\n            moveCursor: function moveCursor(delta) {\r\n                var query, $candidate, data, suggestion, datasetName, cancelMove, id;\r\n                query = this.input.getQuery();\r\n                $candidate = this.menu.selectableRelativeToCursor(delta);\r\n                data = this.menu.getSelectableData($candidate);\r\n                suggestion = data ? data.obj : null;\r\n                datasetName = data ? data.dataset : null;\r\n                id = $candidate ? $candidate.attr(\"id\") : null;\r\n                this.input.trigger(\"cursorchange\", id);\r\n                cancelMove = this._minLengthMet() && this.menu.update(query);\r\n                if (!cancelMove && !this.eventBus.before(\"cursorchange\", suggestion, datasetName)) {\r\n                    this.menu.setCursor($candidate);\r\n                    if (data) {\r\n                        if (typeof data.val === \"string\") {\r\n                            this.input.setInputValue(data.val);\r\n                        }\r\n                    } else {\r\n                        this.input.resetInputValue();\r\n                        this._updateHint();\r\n                    }\r\n                    this.eventBus.trigger(\"cursorchange\", suggestion, datasetName);\r\n                    return true;\r\n                }\r\n                return false;\r\n            },\r\n            destroy: function destroy() {\r\n                this.input.destroy();\r\n                this.menu.destroy();\r\n            }\r\n        });\r\n        return Typeahead;\r\n        function c(ctx) {\r\n            var methods = [].slice.call(arguments, 1);\r\n            return function() {\r\n                var args = [].slice.call(arguments);\r\n                _.each(methods, function(method) {\r\n                    return ctx[method].apply(ctx, args);\r\n                });\r\n            };\r\n        }\r\n    }();\r\n    (function() {\r\n        \"use strict\";\r\n        var old, keys, methods;\r\n        old = $.fn.typeahead;\r\n        keys = {\r\n            www: \"tt-www\",\r\n            attrs: \"tt-attrs\",\r\n            typeahead: \"tt-typeahead\"\r\n        };\r\n        methods = {\r\n            initialize: function initialize(o, datasets) {\r\n                var www;\r\n                datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\r\n                o = o || {};\r\n                www = WWW(o.classNames);\r\n                return this.each(attach);\r\n                function attach() {\r\n                    var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;\r\n                    _.each(datasets, function(d) {\r\n                        d.highlight = !!o.highlight;\r\n                    });\r\n                    $input = $(this);\r\n                    $wrapper = $(www.html.wrapper);\r\n                    $hint = $elOrNull(o.hint);\r\n                    $menu = $elOrNull(o.menu);\r\n                    defaultHint = o.hint !== false && !$hint;\r\n                    defaultMenu = o.menu !== false && !$menu;\r\n                    defaultHint && ($hint = buildHintFromInput($input, www));\r\n                    defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\r\n                    $hint && $hint.val(\"\");\r\n                    $input = prepInput($input, www);\r\n                    if (defaultHint || defaultMenu) {\r\n                        $wrapper.css(www.css.wrapper);\r\n                        $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\r\n                        $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\r\n                    }\r\n                    MenuConstructor = defaultMenu ? DefaultMenu : Menu;\r\n                    eventBus = new EventBus({\r\n                        el: $input\r\n                    });\r\n                    input = new Input({\r\n                        hint: $hint,\r\n                        input: $input,\r\n                        menu: $menu\r\n                    }, www);\r\n                    menu = new MenuConstructor({\r\n                        node: $menu,\r\n                        datasets: datasets\r\n                    }, www);\r\n                    status = new Status({\r\n                        $input: $input,\r\n                        menu: menu\r\n                    });\r\n                    typeahead = new Typeahead({\r\n                        input: input,\r\n                        menu: menu,\r\n                        eventBus: eventBus,\r\n                        minLength: o.minLength,\r\n                        autoselect: o.autoselect\r\n                    }, www);\r\n                    $input.data(keys.www, www);\r\n                    $input.data(keys.typeahead, typeahead);\r\n                }\r\n            },\r\n            isEnabled: function isEnabled() {\r\n                var enabled;\r\n                ttEach(this.first(), function(t) {\r\n                    enabled = t.isEnabled();\r\n                });\r\n                return enabled;\r\n            },\r\n            enable: function enable() {\r\n                ttEach(this, function(t) {\r\n                    t.enable();\r\n                });\r\n                return this;\r\n            },\r\n            disable: function disable() {\r\n                ttEach(this, function(t) {\r\n                    t.disable();\r\n                });\r\n                return this;\r\n            },\r\n            isActive: function isActive() {\r\n                var active;\r\n                ttEach(this.first(), function(t) {\r\n                    active = t.isActive();\r\n                });\r\n                return active;\r\n            },\r\n            activate: function activate() {\r\n                ttEach(this, function(t) {\r\n                    t.activate();\r\n                });\r\n                return this;\r\n            },\r\n            deactivate: function deactivate() {\r\n                ttEach(this, function(t) {\r\n                    t.deactivate();\r\n                });\r\n                return this;\r\n            },\r\n            isOpen: function isOpen() {\r\n                var open;\r\n                ttEach(this.first(), function(t) {\r\n                    open = t.isOpen();\r\n                });\r\n                return open;\r\n            },\r\n            open: function open() {\r\n                ttEach(this, function(t) {\r\n                    t.open();\r\n                });\r\n                return this;\r\n            },\r\n            close: function close() {\r\n                ttEach(this, function(t) {\r\n                    t.close();\r\n                });\r\n                return this;\r\n            },\r\n            select: function select(el) {\r\n                var success = false, $el = $(el);\r\n                ttEach(this.first(), function(t) {\r\n                    success = t.select($el);\r\n                });\r\n                return success;\r\n            },\r\n            autocomplete: function autocomplete(el) {\r\n                var success = false, $el = $(el);\r\n                ttEach(this.first(), function(t) {\r\n                    success = t.autocomplete($el);\r\n                });\r\n                return success;\r\n            },\r\n            moveCursor: function moveCursoe(delta) {\r\n                var success = false;\r\n                ttEach(this.first(), function(t) {\r\n                    success = t.moveCursor(delta);\r\n                });\r\n                return success;\r\n            },\r\n            val: function val(newVal) {\r\n                var query;\r\n                if (!arguments.length) {\r\n                    ttEach(this.first(), function(t) {\r\n                        query = t.getVal();\r\n                    });\r\n                    return query;\r\n                } else {\r\n                    ttEach(this, function(t) {\r\n                        t.setVal(_.toStr(newVal));\r\n                    });\r\n                    return this;\r\n                }\r\n            },\r\n            destroy: function destroy() {\r\n                ttEach(this, function(typeahead, $input) {\r\n                    revert($input);\r\n                    typeahead.destroy();\r\n                });\r\n                return this;\r\n            }\r\n        };\r\n        $.fn.typeahead = function(method) {\r\n            if (methods[method]) {\r\n                return methods[method].apply(this, [].slice.call(arguments, 1));\r\n            } else {\r\n                return methods.initialize.apply(this, arguments);\r\n            }\r\n        };\r\n        $.fn.typeahead.noConflict = function noConflict() {\r\n            $.fn.typeahead = old;\r\n            return this;\r\n        };\r\n        function ttEach($els, fn) {\r\n            $els.each(function() {\r\n                var $input = $(this), typeahead;\r\n                (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\r\n            });\r\n        }\r\n        function buildHintFromInput($input, www) {\r\n            return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({\r\n                readonly: true,\r\n                required: false\r\n            }).removeAttr(\"id name placeholder\").removeClass(\"required\").attr({\r\n                spellcheck: \"false\",\r\n                tabindex: -1\r\n            });\r\n        }\r\n        function prepInput($input, www) {\r\n            $input.data(keys.attrs, {\r\n                dir: $input.attr(\"dir\"),\r\n                autocomplete: $input.attr(\"autocomplete\"),\r\n                spellcheck: $input.attr(\"spellcheck\"),\r\n                style: $input.attr(\"style\")\r\n            });\r\n            $input.addClass(www.classes.input).attr({\r\n                spellcheck: false\r\n            });\r\n            try {\r\n                !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\r\n            } catch (e) {}\r\n            return $input;\r\n        }\r\n        function getBackgroundStyles($el) {\r\n            return {\r\n                backgroundAttachment: $el.css(\"background-attachment\"),\r\n                backgroundClip: $el.css(\"background-clip\"),\r\n                backgroundColor: $el.css(\"background-color\"),\r\n                backgroundImage: $el.css(\"background-image\"),\r\n                backgroundOrigin: $el.css(\"background-origin\"),\r\n                backgroundPosition: $el.css(\"background-position\"),\r\n                backgroundRepeat: $el.css(\"background-repeat\"),\r\n                backgroundSize: $el.css(\"background-size\")\r\n            };\r\n        }\r\n        function revert($input) {\r\n            var www, $wrapper;\r\n            www = $input.data(keys.www);\r\n            $wrapper = $input.parent().filter(www.selectors.wrapper);\r\n            _.each($input.data(keys.attrs), function(val, key) {\r\n                _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\r\n            });\r\n            $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\r\n            if ($wrapper.length) {\r\n                $input.detach().insertAfter($wrapper);\r\n                $wrapper.remove();\r\n            }\r\n        }\r\n        function $elOrNull(obj) {\r\n            var isValid, $el;\r\n            isValid = _.isJQuery(obj) || _.isElement(obj);\r\n            $el = isValid ? $(obj).first() : [];\r\n            return $el.length ? $el : null;\r\n        }\r\n    })();\r\n});"]}