if (typeof (bsn) == "undefined") { _b = bsn = {}; } if (typeof (_b.Autosuggest) == "undefined") { _b.Autosuggest = {}; } else { alert("Autosuggest is already set!"); } _b.AutoSuggest = function (b, c) { if (!document.getElementById) { return 0; } this.fld = _b.DOM.gE(b); if (!this.fld) { return 0; } this.sInp = ""; this.nInpC = 0; this.aSug = []; this.iHigh = 0; this.oP = c ? c : {}; var k, def = {minchars:1, meth:"get", varname:"input", className:"autosuggest", timeout:20000, delay:250, offsety:-5, shownoresults:false, noresults:"No results!", maxheight:250, cache:false, maxentries:25}; for (k in def) { if (typeof (this.oP[k]) != typeof (def[k])) { this.oP[k] = def[k]; } } var p = this; this.fld.onkeypress = function (a) { return p.onKeyPress(a); }; this.fld.onkeyup = function (a) { return p.onKeyUp(a); }; this.fld.setAttribute("autocomplete", "off"); }; _b.AutoSuggest.prototype.onKeyPress = function (a) { var b = (window.event) ? window.event.keyCode : a.keyCode; var c = 13; var d = 9; var e = 27; var f = 1; switch (b) { case c: this.setHighlightedValue(); f = 0; break; case e: this.clearSuggestions(); break; } return f; }; _b.AutoSuggest.prototype.onKeyUp = function (a) { var b = (window.event) ? window.event.keyCode : a.keyCode; var c = 38; var d = 40; var e = 1; switch (b) { case c: this.changeHighlight(b); e = 0; break; case d: this.changeHighlight(b); e = 0; break; default: this.getSuggestions(this.fld.value); } return e; }; _b.AutoSuggest.prototype.getSuggestions = function (a) { if (a == this.sInp) { return 0; } _b.DOM.remE(this.idAs); this.sInp = a; if (a.length < this.oP.minchars) { this.aSug = []; this.nInpC = a.length; return 0; } var b = this.nInpC; this.nInpC = a.length ? a.length : 0; var l = this.aSug.length; if (this.nInpC > b && l && l < this.oP.maxentries && this.oP.cache) { var c = []; for (var i = 0; i < l; i++) { if (this.aSug[i].value.substr(0, a.length).toLowerCase() == a.toLowerCase()) { c.push(this.aSug[i]); } } this.aSug = c; this.createList(this.aSug); return false; } else { var d = this; var e = this.sInp; clearTimeout(this.ajID); this.ajID = setTimeout(function () { d.doAjaxRequest(e); }, this.oP.delay); } return false; }; _b.AutoSuggest.prototype.doAjaxRequest = function (b) { if (b != this.fld.value) { return false; } var c = this; if (typeof (this.oP.script) == "function") { var d = this.oP.script(encodeURIComponent(this.sInp)); } else { var d = this.oP.script + this.oP.varname + "=" + encodeURIComponent(this.sInp); } if (!d) { return false; } var e = this.oP.meth; var b = this.sInp; var f = function (a) { c.setSuggestions(a, b); }; var g = function (a) { //alert("AJAX error: " + a); }; var h = new _b.Ajax(); h.makeRequest(d, e, f, g); }; _b.AutoSuggest.prototype.setSuggestions = function (a, b) { if (b != this.fld.value) { return false; } this.aSug = []; if (this.oP.json) { var c = eval("(" + a.responseText + ")"); for (var i = 0; i < c.results.length; i++) { this.aSug.push({"id":c.results[i].id, "value":c.results[i].value, "info":c.results[i].info}); } } else { var d = a.responseXML; var e = d.getElementsByTagName("results")[0].childNodes; for (var i = 0; i < e.length; i++) { if (e[i].hasChildNodes()) { this.aSug.push({"id":e[i].getAttribute("id"), "value":e[i].childNodes[0].nodeValue, "info":e[i].getAttribute("info")}); } } } this.idAs = "as_" + this.fld.id; this.createList(this.aSug); }; _b.AutoSuggest.prototype.createList = function (b) { var c = this; _b.DOM.remE(this.idAs); this.killTimeout(); if (b.length == 0 && !this.oP.shownoresults) { return false; } var d = _b.DOM.cE("div", {id:this.idAs, className:this.oP.className}); var e = _b.DOM.cE("div", {className:"as_corner"}); var f = _b.DOM.cE("div", {className:"as_bar"}); var g = _b.DOM.cE("div", {className:"as_header"}); g.appendChild(e); g.appendChild(f); d.appendChild(g); var h = _b.DOM.cE("ul", {id:"as_ul"}); for (var i = 0; i < b.length; i++) { var j = b[i].value; var k = j.toLowerCase().indexOf(this.sInp.toLowerCase()); var l = j.substring(0, k) + "" + j.substring(k, k + this.sInp.length) + "" + j.substring(k + this.sInp.length); var m = _b.DOM.cE("span", {}, l, true); if (b[i].info != "") { var n = _b.DOM.cE("br", {}); m.appendChild(n); var o = _b.DOM.cE("small", {}, b[i].info); m.appendChild(o); } var a = _b.DOM.cE("a", {href:"#"}); var p = _b.DOM.cE("span", {className:"tl"}, " "); var q = _b.DOM.cE("span", {className:"tr"}, " "); a.appendChild(p); a.appendChild(q); a.appendChild(m); a.name = i + 1; a.onclick = function () { c.setHighlightedValue(); return false; }; a.onmouseover = function () { c.setHighlight(this.name); }; var r = _b.DOM.cE("li", {}, a); h.appendChild(r); } if (b.length == 0 && this.oP.shownoresults) { var r = _b.DOM.cE("li", {className:"as_warning"}, this.oP.noresults); h.appendChild(r); } d.appendChild(h); var s = _b.DOM.cE("div", {className:"as_corner"}); var t = _b.DOM.cE("div", {className:"as_bar"}); var u = _b.DOM.cE("div", {className:"as_footer"}); u.appendChild(s); u.appendChild(t); d.appendChild(u); var v = _b.DOM.getPos(this.fld); d.style.left = v.x + "px"; d.style.top = (v.y + this.fld.offsetHeight + this.oP.offsety) + "px"; d.style.width = this.fld.offsetWidth + "px"; d.onmouseover = function () { c.killTimeout(); }; d.onmouseout = function () { c.resetTimeout(); }; document.getElementsByTagName("body")[0].appendChild(d); this.iHigh = 0; var c = this; this.toID = setTimeout(function () { c.clearSuggestions(); }, this.oP.timeout); }; _b.AutoSuggest.prototype.changeHighlight = function (a) { var b = _b.DOM.gE("as_ul"); if (!b) { return false; } var n; if (a == 40) { n = this.iHigh + 1; } else { if (a == 38) { n = this.iHigh - 1; } } if (n > b.childNodes.length) { n = b.childNodes.length; } if (n < 1) { n = 1; } this.setHighlight(n); }; _b.AutoSuggest.prototype.setHighlight = function (n) { var a = _b.DOM.gE("as_ul"); if (!a) { return false; } if (this.iHigh > 0) { this.clearHighlight(); } this.iHigh = Number(n); a.childNodes[this.iHigh - 1].className = "as_highlight"; this.killTimeout(); }; _b.AutoSuggest.prototype.clearHighlight = function () { var a = _b.DOM.gE("as_ul"); if (!a) { return false; } if (this.iHigh > 0) { a.childNodes[this.iHigh - 1].className = ""; this.iHigh = 0; } }; _b.AutoSuggest.prototype.setHighlightedValue = function () { if (this.iHigh) { this.sInp = this.fld.value = this.aSug[this.iHigh - 1].value; this.fld.focus(); if (this.fld.selectionStart) { this.fld.setSelectionRange(this.sInp.length, this.sInp.length); } this.clearSuggestions(); if (typeof (this.oP.callback) == "function") { this.oP.callback(this.aSug[this.iHigh - 1]); } } }; _b.AutoSuggest.prototype.killTimeout = function () { clearTimeout(this.toID); }; _b.AutoSuggest.prototype.resetTimeout = function () { clearTimeout(this.toID); var a = this; this.toID = setTimeout(function () { a.clearSuggestions(); }, 1000); }; _b.AutoSuggest.prototype.clearSuggestions = function () { this.killTimeout(); var a = _b.DOM.gE(this.idAs); var b = this; if (a) { var c = new _b.Fader(a, 1, 0, 250, function () { _b.DOM.remE(b.idAs); }); } }; if (typeof (_b.Ajax) == "undefined") { _b.Ajax = {}; } _b.Ajax = function () { this.req = {}; this.isIE = false; }; _b.Ajax.prototype.makeRequest = function (a, b, c, d) { if (b != "POST") { b = "GET"; } this.onComplete = c; this.onError = d; var e = this; if (window.XMLHttpRequest) { this.req = new XMLHttpRequest(); this.req.onreadystatechange = function () { e.processReqChange(); }; this.req.open("GET", a, true); this.req.send(null); } else { if (window.ActiveXObject) { this.req = new ActiveXObject("Microsoft.XMLHTTP"); if (this.req) { this.req.onreadystatechange = function () { e.processReqChange(); }; this.req.open(b, a, true); this.req.send(); } } } }; _b.Ajax.prototype.processReqChange = function () { if (this.req.readyState == 4) { if (this.req.status == 200) { this.onComplete(this.req); } else { this.onError(this.req.status); } } }; if (typeof (_b.DOM) == "undefined") { _b.DOM = {}; } _b.DOM.cE = function (b, c, d, e) { var f = document.createElement(b); if (!f) { return 0; } for (var a in c) { f[a] = c[a]; } var t = typeof (d); if (t == "string" && !e) { f.appendChild(document.createTextNode(d)); } else { if (t == "string" && e) { f.innerHTML = d; } else { if (t == "object") { f.appendChild(d); } } } return f; }; _b.DOM.gE = function (e) { var t = typeof (e); if (t == "undefined") { return 0; } else { if (t == "string") { var a = document.getElementById(e); if (!a) { return 0; } else { if (typeof (a.appendChild) != "undefined") { return a; } else { return 0; } } } else { if (typeof (e.appendChild) != "undefined") { return e; } else { return 0; } } } }; _b.DOM.remE = function (a) { var e = this.gE(a); if (!e) { return 0; } else { if (e.parentNode.removeChild(e)) { return true; } else { return 0; } } }; _b.DOM.getPos = function (e) { var e = this.gE(e); var a = e; var b = 0; if (a.offsetParent) { while (a.offsetParent) { b += a.offsetLeft; a = a.offsetParent; } } else { if (a.x) { b += a.x; } } var a = e; var c = 0; if (a.offsetParent) { while (a.offsetParent) { c += a.offsetTop; a = a.offsetParent; } } else { if (a.y) { c += a.y; } } return {x:b, y:c}; }; if (typeof (_b.Fader) == "undefined") { _b.Fader = {}; } _b.Fader = function (a, b, c, d, e) { if (!a) { return 0; } this.e = a; this.from = b; this.to = c; this.cb = e; this.nDur = d; this.nInt = 50; this.nTime = 0; var p = this; this.nID = setInterval(function () { p._fade(); }, this.nInt); }; _b.Fader.prototype._fade = function () { this.nTime += this.nInt; var a = Math.round(this._tween(this.nTime, this.from, this.to, this.nDur) * 100); var b = a / 100; if (this.e.filters) { try { this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity = a; } catch (e) { this.e.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + a + ")"; } } else { this.e.style.opacity = b; } if (this.nTime == this.nDur) { clearInterval(this.nID); if (this.cb != undefined) { this.cb(); } } }; _b.Fader.prototype._tween = function (t, b, c, d) { return b + ((c - b) * (t / d)); };