!function (a) { var b, c, d, e; a.browser || (a.browser = {}, a.browser.mozilla = !1, a.browser.webkit = !1, a.browser.opera = !1, a.browser.msie = !1, b = navigator.userAgent, a.browser.name = navigator.appName, a.browser.fullVersion = "" + parseFloat(navigator.appVersion), a.browser.majorVersion = parseInt(navigator.appVersion, 10), -1 != (d = b.indexOf("Opera")) ? (a.browser.opera = !0, a.browser.name = "Opera", a.browser.fullVersion = b.substring(d + 6), -1 != (d = b.indexOf("Version")) && (a.browser.fullVersion = b.substring(d + 8))) : -1 != (d = b.indexOf("MSIE")) ? (a.browser.msie = !0, a.browser.name = "Microsoft Internet Explorer", a.browser.fullVersion = b.substring(d + 5)) : -1 != (d = b.indexOf("Chrome")) ? (a.browser.webkit = !0, a.browser.name = "Chrome", a.browser.fullVersion = b.substring(d + 7)) : -1 != (d = b.indexOf("Safari")) ? (a.browser.webkit = !0, a.browser.name = "Safari", a.browser.fullVersion = b.substring(d + 7), -1 != (d = b.indexOf("Version")) && (a.browser.fullVersion = b.substring(d + 8))) : -1 != (d = b.indexOf("Firefox")) ? (a.browser.mozilla = !0, a.browser.name = "Firefox", a.browser.fullVersion = b.substring(d + 8)) : (c = b.lastIndexOf(" ") + 1) < (d = b.lastIndexOf("/")) && (a.browser.name = b.substring(c, d), a.browser.fullVersion = b.substring(d + 1), a.browser.name.toLowerCase() == a.browser.name.toUpperCase() && (a.browser.name = navigator.appName)), -1 != (e = a.browser.fullVersion.indexOf(";")) && (a.browser.fullVersion = a.browser.fullVersion.substring(0, e)), -1 != (e = a.browser.fullVersion.indexOf(" ")) && (a.browser.fullVersion = a.browser.fullVersion.substring(0, e)), a.browser.majorVersion = parseInt("" + a.browser.fullVersion, 10), isNaN(a.browser.majorVersion) && (a.browser.fullVersion = "" + parseFloat(navigator.appVersion), a.browser.majorVersion = parseInt(navigator.appVersion, 10)), a.browser.version = a.browser.majorVersion) }(jQuery), function (a) { a.fn.extend({ autocomplete: function (b, c) { var d = "string" == typeof b; return c = a.extend({}, a.Autocompleter.defaults, { url: d ? b : null, data: d ? null : b, delay: d ? a.Autocompleter.defaults.delay : 10, max: c && !c.scroll ? 10 : 150 }, c), c.highlight = c.highlight || function (a) { return a }, c.formatMatch = c.formatMatch || c.formatItem, this.each(function () { new a.Autocompleter(this, c) }) }, result: function (a) { return this.on("result", a) }, search: function (a) { return this.trigger("search", [a]) }, flushCache: function () { return this.trigger("flushCache") }, setOptions: function (a) { return this.trigger("setOptions", [a]) }, unautocomplete: function () { return this.trigger("unautocomplete") } }), a.Autocompleter = function (b, c) { function n() { var a = l.activeItem(); e.val(a.result) } function o() { var f, h, i, j, k, m, d = l.selected(); return d ? (f = d.result, g = f, c.multiple && (h = q(e.val()), h.length > 1 && (i = c.multipleSeparator.length, j = a(b).selection().start, m = 0, a.each(h, function (a, b) { return m += b.length, m >= j ? (k = a, !1) : (m += i, void 0) }), h[k] = f, f = h.join(c.multipleSeparator)), f += c.multipleSeparator), e.val(f), u(), e.trigger("result", [d.data, d.value]), !0) : !1 } function p(a, b) { if (j == d.DEL) return l.hide(), void 0; var f = e.val(); (b || f != g) && (g = f, f = r(f), f.length >= c.minChars ? (c.matchCase || (f = f.toLowerCase()), w(f, v, u)) : l.hide()) } function q(b) { return b ? c.multiple ? a.map(b.split(c.multipleSeparator), function (c) { return a.trim(b).length ? a.trim(c) : null }) : [a.trim(b)] : [""] } function r(d) { var e, f; return c.multiple ? (e = q(d), 1 == e.length ? e[0] : (f = a(b).selection().start, e = f == d.length ? q(d) : q(d.replace(d.substring(f), "")), e[e.length - 1])) : d } function s(f, h) { c.autoFill && r(e.val()).toLowerCase() == f.toLowerCase() && j != d.BACKSPACE && (e.val(e.val() + h.substring(r(g).length)), a(b).selection(g.length, g.length + h.length)) } function t() { clearTimeout(f), f = setTimeout(u, 200) } function u() { l.visible(), l.hide(), clearTimeout(f), c.mustMatch && e.search(function (a) { if (!a) if (c.multiple) { var b = q(e.val()).slice(0, -1); e.val(b.join(c.multipleSeparator) + (b.length ? c.multipleSeparator : "")) } else e.val(""), e.trigger("result", null) }) } function v(a, b) { b && b.length && i ? (l.display(b, a), s(a, b[0].value), l.show()) : u() } function w(d, e, f) { var g, i; c.matchCase || (d = d.toLowerCase()), g = h.load(d), g && g.length ? e(d, g) : "string" == typeof c.url && c.url.length > 0 ? (i = { timestamp: +new Date }, a.each(c.extraParams, function (a, b) { i[a] = "function" == typeof b ? b() : b }), a.ajax({ mode: "abort", port: "autocomplete" + b.name, dataType: c.dataType, url: c.url, data: a.extend({ wd: r(d), limit: c.max }, i), success: function (a) { if (null == a || "" == a || 0 == a.length) return t(), void 0; var b = c.parse && c.parse(a) || x(a); h.add(d, b), e(d, b) } })) : (l.emptyList(), f(d)) } function x(b) { var f, g, d = [], e = b.split(c.lineSeparator); for (f = 0; f < e.length; f++) g = a.trim(e[f]), g && (g = g.split(c.cellSeparator), d[d.length] = { data: g, value: g[0], result: c.formatResult && c.formatResult(g, g[0]) || g[0] }); return d } var f, j, m, d = { UP: 38, DOWN: 40, DEL: 46, TAB: 9, RETURN: 13, ESC: 27, COMMA: 188, PAGEUP: 33, PAGEDOWN: 34, BACKSPACE: 8 }, e = a(b).attr("autocomplete", "off").addClass(c.inputClass), g = "", h = a.Autocompleter.Cache(c), i = 0, k = { mouseDownOnSelect: !1 }, l = a.Autocompleter.Select(c, b, o, k); a.browser.opera && a(b.form).on("submit.autocomplete", function () { return m ? (m = !1, !1) : void 0 }), e.on((a.browser.opera ? "keypress" : "keydown") + ".autocomplete", function (b) { switch (i = 1, j = b.keyCode, b.keyCode) { case d.UP: b.preventDefault(), l.visible() ? (l.prev(), n()) : p(0, !0); break; case d.DOWN: b.preventDefault(), l.visible() ? (l.next(), n()) : p(0, !0); break; case d.PAGEUP: b.preventDefault(), l.visible() ? l.pageUp() : p(0, !0); break; case d.PAGEDOWN: b.preventDefault(), l.visible() ? l.pageDown() : p(0, !0); break; case c.multiple && "," == a.trim(c.multipleSeparator) && d.COMMA: case d.TAB: case d.RETURN: if (o()) return b.preventDefault(), m = !0, !1; break; case d.ESC: l.hide(); break; default: clearTimeout(f), f = setTimeout(p, c.delay) } }).focus(function () { i++ }).blur(function () { i = 0, k.mouseDownOnSelect || t() }).click(function () { ++i > 1 && !l.visible() && p(0, !0) }).on("search", function () { function c(a, c) { var d, f; if (c && c.length) for (f = 0; f < c.length; f++) if (c[f].result.toLowerCase() == a.toLowerCase()) { d = c[f]; break } "function" == typeof b ? b(d) : e.trigger("result", d && [d.data, d.value]) } var b = arguments.length > 1 ? arguments[1] : null; a.each(q(e.val()), function (a, b) { w(b, c, c) }) }).on("flushCache", function () { h.flush() }).on("setOptions", function () { a.extend(c, arguments[1]), "data" in arguments[1] && h.populate() }).on("unautocomplete", function () { l.unbind(), e.unbind(), a(b.form).unbind(".autocomplete") }).on("input", function () { p(0, !1) }) }, a.Autocompleter.defaults = { inputClass: "ac_input", resultsClass: "ac_results", minChars: 1, delay: 400, matchCase: !1, matchSubset: !0, matchContains: !1, cacheLength: 10, max: 100, mustMatch: !1, extraParams: {}, selectFirst: !0, formatItem: function (a) { return a[0] }, formatMatch: null, autoFill: !1, width: 0, lineSeparator: "\n", cellSeparator: "|", tips: function (a) { return a[0] }, multiple: !1, multipleSeparator: ", ", highlight: function (a, b) { return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1") }, setHighlight: function (a, b) { var c = []; return c[0] = a, c[1] = b, c }, scroll: !0, scrollHeight: 180 }, a.Autocompleter.Cache = function (b) { function e(a, c) { b.matchCase || (a = a.toLowerCase()); var d = a.indexOf(c); return "word" == b.matchContains && (d = a.toLowerCase().search("\\b" + c.toLowerCase())), -1 == d ? !1 : 0 == d || b.matchContains } function f(a, e) { d > b.cacheLength && h(), c[a] || d++, c[a] = e } function g() { var c, d, e, g, h, i, j, k; if (!b.data) return !1; for (c = {}, d = 0, b.url || (b.cacheLength = 1), c[""] = [], e = 0, g = b.data.length; g > e; e++) h = b.data[e], h = "string" == typeof h ? [h] : h, i = b.formatMatch(h, e + 1, b.data.length), i !== !1 && (j = i.charAt(0).toLowerCase(), c[j] || (c[j] = []), k = { value: i, data: h, result: b.formatResult && b.formatResult(h) || i }, c[j].push(k), d++ < b.max && c[""].push(k)); a.each(c, function (a, c) { b.cacheLength++, f(a, c) }) } function h() { c = {}, d = 0 } var c = {}, d = 0; return setTimeout(g, 25), { flush: h, add: f, populate: g, load: function (f) { var g, h, i, j; if (!b.cacheLength || !d) return null; if (!b.url && b.matchContains) { g = []; for (h in c) h.length > 0 && (i = c[h], a.each(i, function (a, b) { e(b.value, f) && g.push(b) })); return g } if (c[f]) return c[f]; if (b.matchSubset) for (j = f.length - 1; j >= b.minChars; j--) if (i = c[f.substr(0, j)]) return g = [], a.each(i, function (a, b) { e(b.value, f) && (g[g.length] = b) }), g; return null } } }, a.Autocompleter.Select = function (b, c, d, e) { function n() { k && (searchBar = b.searchBar, l = a("
").hide().addClass(b.resultsClass).css("position", "absolute"), null != searchBar && searchBar.length > 0 ? l.appendTo(searchBar) : l.appendTo(document.body), m = a("