!function(e,i){"function"==typeof define&&define.amd?define("bloodhound",["jquery"],function(t){return e.Bloodhound=i(t)}):"object"==typeof exports?module.exports=i(require("jquery")):e.Bloodhound=i(jQuery)}(this,function(h){var l=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:h.isArray,isFunction:h.isFunction,isObject:h.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof h},toStr:function(t){return l.isUndefined(t)||null===t?"":t+""},bind:h.proxy,each:function(t,i){h.each(t,function(t,e){return i(e,t)})},map:h.map,filter:h.grep,every:function(i,r){var n=!0;return i?(h.each(i,function(t,e){if(!(n=r.call(null,e,t,i)))return!1}),!!n):n},some:function(i,r){var n=!1;return i?(h.each(i,function(t,e){if(n=r.call(null,e,t,i))return!1}),!!n):n},mixin:h.extend,identity:function(t){return t},clone:function(t){return h.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return h.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(n,s,o){var u,c;return function(){var t=this,e=arguments,i=function(){u=null,o||(c=n.apply(t,e))},r=o&&!u;return clearTimeout(u),u=setTimeout(i,s),c=r?n.apply(t,e):c}},throttle:function(i,r){var n,s,o,u,c=0,a=function(){c=new Date,o=null,u=i.apply(n,s)};return function(){var t=new Date,e=r-(t-c);return n=this,s=arguments,e<=0?(clearTimeout(o),o=null,c=t,u=i.apply(n,s)):o=o||setTimeout(a,e),u}},stringify:function(t){return l.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),i=function(){"use strict";return{nonword:e,whitespace:t,obj:{nonword:i(e),whitespace:i(t)}};function t(t){return(t=l.toStr(t))?t.split(/\s+/):[]}function e(t){return(t=l.toStr(t))?t.split(/\W+/):[]}function i(r){return function(t){return t=l.isArray(t)?t:[].slice.call(arguments,0),function(e){var i=[];return l.each(t,function(t){i=i.concat(r(l.toStr(e[t])))}),i}}}}(),r=function(){"use strict";function t(t){this.maxSize=l.isNumber(t)?t:100,this.reset(),this.maxSize<=0&&(this.set=this.get=h.noop)}function e(){this.head=this.tail=null}function r(t,e){this.key=t,this.val=e,this.prev=this.next=null}return l.mixin(t.prototype,{set:function(t,e){var i=this.list.tail;this.size>=this.maxSize&&(this.list.remove(i),delete this.hash[i.key],this.size--),(i=this.hash[t])?(i.val=e,this.list.moveToFront(i)):(i=new r(t,e),this.list.add(i),this.hash[t]=i,this.size++)},get:function(t){t=this.hash[t];if(t)return this.list.moveToFront(t),t.val},reset:function(){this.size=0,this.hash={},this.list=new e}}),l.mixin(e.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),t}(),e=function(){"use strict";var s;try{(s=window.localStorage).setItem("~~~","!"),s.removeItem("~~~")}catch(t){s=null}function t(t,e){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+l.escapeRegExChars(this.prefix)),this.ls=e||s,this.ls||this._noop()}return l.mixin(t.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=l.noop},_safeSet:function(t,e){try{this.ls.setItem(t,e)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),e(this.ls.getItem(this._prefix(t)))},set:function(t,e,i){return l.isNumber(i)?this._safeSet(this._ttlKey(t),n(r()+i)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),n(e))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){for(var t=function(t){var e,i,r=[],n=s.length;for(e=0;e<n;e++)(i=s.key(e)).match(t)&&r.push(i.replace(t,""));return r}(this.keyMatcher),e=t.length;e--;)this.remove(t[e]);return this},isExpired:function(t){t=e(this.ls.getItem(this._ttlKey(t)));return!!(l.isNumber(t)&&r()>t)}}),t;function r(){return(new Date).getTime()}function n(t){return JSON.stringify(l.isUndefined(t)?null:t)}function e(t){return h.parseJSON(t)}}(),n=function(){"use strict";var u=0,c={},a=6,e=new r(10);function t(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new r(0):e}return t.setMaxPendingRequests=function(t){a=t},t.resetCache=function(){e.reset()},l.mixin(t.prototype,{_fingerprint:function(t){return(t=t||{}).url+t.type+h.param(t.data||{})},_get:function(t,e){var i,r,n=this;function s(t){e(null,t),n._cache.set(i,t)}function o(){e(!0)}i=this._fingerprint(t),this.cancelled||i!==this.lastReq||((r=c[i])?r.done(s).fail(o):u<a?(u++,c[i]=this._send(t).done(s).fail(o).always(function(){u--,delete c[i],n.onDeckRequestArgs&&(n._get.apply(n,n.onDeckRequestArgs),n.onDeckRequestArgs=null)})):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(t,e){var i;e=e||h.noop,t=l.isString(t)?{url:t}:t||{},i=this._fingerprint(t),this.cancelled=!1,this.lastReq=i,(i=this._cache.get(i))?e(null,i):this._get(t,e)},cancel:function(){this.cancelled=!0}}),t}(),s=window.SearchIndex=function(){"use strict";function t(t){(t=t||{}).datumTokenizer&&t.queryTokenizer||h.error("datumTokenizer and queryTokenizer are both required"),this.identify=t.identify||l.stringify,this.datumTokenizer=t.datumTokenizer,this.queryTokenizer=t.queryTokenizer,this.reset()}return l.mixin(t.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var s=this;t=l.isArray(t)?t:[t],l.each(t,function(t){var n;s.datums[n=s.identify(t)]=t,t=e(s.datumTokenizer(t)),l.each(t,function(t){for(var e,i=s.trie,r=t.split("");e=r.shift();)(i=i.c[e]||(i.c[e]=o())).i.push(n)})})},get:function(t){var e=this;return l.map(t,function(t){return e.datums[t]})},search:function(t){var n,s=this,t=e(this.queryTokenizer(t));return l.each(t,function(t){var e,i,r;if(n&&0===n.length)return!1;for(e=s.trie,i=t.split("");e&&(r=i.shift());)e=e.c[r];if(!e||0!==i.length)return!(n=[]);t=e.i.slice(0),n=n?function(t,e){var i=0,r=0,n=[],s=(t=t.sort(),e=e.sort(),t.length),o=e.length;for(;i<s&&r<o;)t[i]<e[r]?i++:(t[i]>e[r]||(n.push(t[i]),i++),r++);return n}(n,t):t}),n?l.map(function(t){for(var e={},i=[],r=0,n=t.length;r<n;r++)e[t[r]]||(e[t[r]]=!0,i.push(t[r]));return i}(n),function(t){return s.datums[t]}):[]},all:function(){var t,e=[];for(t in this.datums)e.push(this.datums[t]);return e},reset:function(){this.datums={},this.trie=o()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),t;function e(t){return t=l.filter(t,function(t){return!!t}),t=l.map(t,function(t){return t.toLowerCase()})}function o(){var t={i:[],c:{}};return t}}(),o=function(){"use strict";var i;function t(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new e(t.cacheKey)}return i={data:"data",protocol:"protocol",thumbprint:"thumbprint"},l.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(t){this.cache&&(this.storage.set(i.data,t,this.ttl),this.storage.set(i.protocol,location.protocol,this.ttl),this.storage.set(i.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var t,e={};return this.cache&&(e.data=this.storage.get(i.data),e.protocol=this.storage.get(i.protocol),e.thumbprint=this.storage.get(i.thumbprint),t=e.thumbprint!==this.thumbprint||e.protocol!==location.protocol,e.data)&&!t?e.data:null},fromNetwork:function(e){var t,i=this;e&&(t=this.prepare(this._settings()),this.transport(t).fail(function(){e(!0)}).done(function(t){e(null,i.transform(t))}))},clear:function(){return this.storage.clear(),this}}),t}(),u=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new n({cache:t.cache,limiter:t.limiter,transport:t.transport})}return l.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,i){var r=this;if(i)return t=this.prepare(t=t||"",this._settings()),this.transport.get(t,function(t,e){i(t?[]:r.transform(e))})},cancelLastRequest:function(){this.transport.cancel()}}),t}(),c=function(){"use strict";return function(t){var e,i,r={initialize:!0,identify:l.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null};return(t=l.mixin(r,t||{})).datumTokenizer||h.error("datumTokenizer is required"),t.queryTokenizer||h.error("queryTokenizer is required"),e=t.sorter,t.sorter=e?function(t){return t.sort(e)}:l.identity,t.local=l.isFunction(t.local)?t.local():t.local,t.prefetch=(r=t.prefetch)?(i={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:l.identity,transform:l.identity,transport:null},r=l.isString(r)?{url:r}:r,(r=l.mixin(i,r)).url||h.error("prefetch requires url to be set"),r.transform=r.filter||r.transform,r.cacheKey=r.cacheKey||r.url,r.thumbprint="0.11.1"+r.thumbprint,r.transport=r.transport?n(r.transport):h.ajax,r):null,t.remote=function(t){var e;if(t)return e={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:l.identity,transport:null},t=l.isString(t)?{url:t}:t,(t=l.mixin(e,t)).url||h.error("remote requires url to be set"),t.transform=t.filter||t.transform,t.prepare=function(t){var e,i,r;return e=t.prepare,i=t.replace,r=t.wildcard,e=e||(i?function(t,e){return e.url=i(e.url,t),e}:t.wildcard?function(t,e){return e.url=e.url.replace(r,encodeURIComponent(t)),e}:function(t,e){return e})}(t),t.limiter=function(t){var e,i;e=t.limiter,i=t.rateLimitBy,t=t.rateLimitWait,e=e||(/^throttle$/i.test(i)?function(e){return function(t){return l.throttle(t,e)}}:function(e){return function(t){return l.debounce(t,e)}})(t);return e}(t),t.transport=t.transport?n(t.transport):h.ajax,delete t.replace,delete t.wildcard,delete t.rateLimitBy,delete t.rateLimitWait,t}(t.remote),t};function n(i){return function(t){var e=h.Deferred();return i(t,function(t){l.defer(function(){e.resolve(t)})},function(t){l.defer(function(){e.reject(t)})}),e}}}();return function(){"use strict";var t;function e(t){t=c(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new u(t.remote):null,this.prefetch=t.prefetch?new o(t.prefetch):null,this.index=new s({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}return t=window&&window.Bloodhound,e.noConflict=function(){return window&&(window.Bloodhound=t),e},e.tokenizers=i,l.mixin(e.prototype,{__ttAdapter:function(){var r=this;return this.remote?function(t,e,i){return r.search(t,e,i)}:function(t,e){return r.search(t,e)}},_loadPrefetch:function(){var t,i=this,r=h.Deferred();return this.prefetch?(t=this.prefetch.fromCache())?(this.index.bootstrap(t),r.resolve()):this.prefetch.fromNetwork(function(t,e){if(t)return r.reject();i.add(e),i.prefetch.store(i.index.serialize()),r.resolve()}):r.resolve(),r.promise()},_initialize:function(){var t=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(function(){t.add(t.local)}),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=l.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,e,r){var n=this,s=this.sorter(this.index.search(t));return e(this.remote?s.slice():s),this.remote&&s.length<this.sufficient?this.remote.get(t,function(t){var i=[];l.each(t,function(e){l.some(s,function(t){return n.identify(e)===n.identify(t)})||i.push(e)}),r&&r(i)}):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return n.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),e}()});