diff options
author | Andreas Unterkircher <unki@netshadow.at> | 2008-03-28 17:02:18 +0100 |
---|---|---|
committer | Andreas Unterkircher <unki@netshadow.at> | 2008-03-28 17:02:18 +0100 |
commit | 144f16a71f7289bb891c52995061aee21e3e08f9 (patch) | |
tree | b8cd9492463dad0cb0dbe751145e45a8fd54b53b /autosuggest | |
parent | af0be8f9546fb5dec947be33e465bb6d9e85d0a7 (diff) |
remove autocomplete and use autosuggest instead
Signed-off-by: Andreas Unterkircher <unki@netshadow.at>
Diffstat (limited to 'autosuggest')
15 files changed, 1083 insertions, 0 deletions
diff --git a/autosuggest/css/autosuggest_inquisitor.css b/autosuggest/css/autosuggest_inquisitor.css new file mode 100644 index 0000000..32bda6e --- /dev/null +++ b/autosuggest/css/autosuggest_inquisitor.css @@ -0,0 +1,178 @@ +/* +================================================ +autosuggest, inquisitor style +================================================ +*/ + +body +{ + /* removed as conflicts with phpfspot's CSS */ + /* position: relative; */ +} + + +div.autosuggest +{ + position: absolute; + background-image: url(img_inquisitor/as_pointer.gif); + background-position: top; + background-repeat: no-repeat; + padding: 10px 0 0 0; +} + +div.autosuggest div.as_header, +div.autosuggest div.as_footer +{ + position: relative; + height: 6px; + padding: 0 6px; + background-image: url(img_inquisitor/ul_corner_tr.gif); + background-position: top right; + background-repeat: no-repeat; + overflow: hidden; +} +div.autosuggest div.as_footer +{ + background-image: url(img_inquisitor/ul_corner_br.gif); +} + +div.autosuggest div.as_header div.as_corner, +div.autosuggest div.as_footer div.as_corner +{ + position: absolute; + top: 0; + left: 0; + height: 6px; + width: 6px; + background-image: url(img_inquisitor/ul_corner_tl.gif); + background-position: top left; + background-repeat: no-repeat; +} +div.autosuggest div.as_footer div.as_corner +{ + background-image: url(img_inquisitor/ul_corner_bl.gif); +} +div.autosuggest div.as_header div.as_bar, +div.autosuggest div.as_footer div.as_bar +{ + height: 6px; + overflow: hidden; + background-color: #333; +} + + +div.autosuggest ul +{ + list-style: none; + margin: 0 0 -4px 0; + padding: 0; + overflow: hidden; + background-color: #333; +} + +div.autosuggest ul li +{ + color: #ccc; + padding: 0; + margin: 0 4px 4px; + text-align: left; +} + +div.autosuggest ul li a +{ + color: #ccc; + display: block; + text-decoration: none; + background-color: transparent; + text-shadow: #000 0px 0px 5px; + position: relative; + padding: 0; + width: 100%; +} +div.autosuggest ul li a:hover +{ + background-color: #444; +} +div.autosuggest ul li.as_highlight a:hover +{ + background-color: #1B5CCD; +} + +div.autosuggest ul li a span +{ + display: block; + padding: 3px 6px; + font-weight: bold; +} + +div.autosuggest ul li a span small +{ + font-weight: normal; + color: #999; +} + +div.autosuggest ul li.as_highlight a span small +{ + color: #ccc; +} + +div.autosuggest ul li.as_highlight a +{ + color: #fff; + background-color: #1B5CCD; + background-image: url(img_inquisitor/hl_corner_br.gif); + background-position: bottom right; + background-repeat: no-repeat; +} + +div.autosuggest ul li.as_highlight a span +{ + background-image: url(img_inquisitor/hl_corner_bl.gif); + background-position: bottom left; + background-repeat: no-repeat; +} + +div.autosuggest ul li a .tl, +div.autosuggest ul li a .tr +{ + background-image: transparent; + background-repeat: no-repeat; + width: 6px; + height: 6px; + position: absolute; + top: 0; + padding: 0; + margin: 0; +} +div.autosuggest ul li a .tr +{ + right: 0; +} + +div.autosuggest ul li.as_highlight a .tl +{ + left: 0; + background-image: url(img_inquisitor/hl_corner_tl.gif); + background-position: bottom left; +} + +div.autosuggest ul li.as_highlight a .tr +{ + right: 0; + background-image: url(img_inquisitor/hl_corner_tr.gif); + background-position: bottom right; +} + + + +div.autosuggest ul li.as_warning +{ + font-weight: bold; + text-align: center; +} + +div.autosuggest ul em +{ + font-style: normal; + color: #6EADE7; +} diff --git a/autosuggest/css/img_inquisitor/_source/as_pointer.png b/autosuggest/css/img_inquisitor/_source/as_pointer.png Binary files differnew file mode 100644 index 0000000..a0d43aa --- /dev/null +++ b/autosuggest/css/img_inquisitor/_source/as_pointer.png diff --git a/autosuggest/css/img_inquisitor/_source/li_corner.png b/autosuggest/css/img_inquisitor/_source/li_corner.png Binary files differnew file mode 100644 index 0000000..ba5d875 --- /dev/null +++ b/autosuggest/css/img_inquisitor/_source/li_corner.png diff --git a/autosuggest/css/img_inquisitor/_source/ul_corner.png b/autosuggest/css/img_inquisitor/_source/ul_corner.png Binary files differnew file mode 100644 index 0000000..44da270 --- /dev/null +++ b/autosuggest/css/img_inquisitor/_source/ul_corner.png diff --git a/autosuggest/css/img_inquisitor/as_pointer.gif b/autosuggest/css/img_inquisitor/as_pointer.gif Binary files differnew file mode 100644 index 0000000..dbc2122 --- /dev/null +++ b/autosuggest/css/img_inquisitor/as_pointer.gif diff --git a/autosuggest/css/img_inquisitor/hl_corner_bl.gif b/autosuggest/css/img_inquisitor/hl_corner_bl.gif Binary files differnew file mode 100644 index 0000000..b701d01 --- /dev/null +++ b/autosuggest/css/img_inquisitor/hl_corner_bl.gif diff --git a/autosuggest/css/img_inquisitor/hl_corner_br.gif b/autosuggest/css/img_inquisitor/hl_corner_br.gif Binary files differnew file mode 100644 index 0000000..11debd7 --- /dev/null +++ b/autosuggest/css/img_inquisitor/hl_corner_br.gif diff --git a/autosuggest/css/img_inquisitor/hl_corner_tl.gif b/autosuggest/css/img_inquisitor/hl_corner_tl.gif Binary files differnew file mode 100644 index 0000000..1c2bbaf --- /dev/null +++ b/autosuggest/css/img_inquisitor/hl_corner_tl.gif diff --git a/autosuggest/css/img_inquisitor/hl_corner_tr.gif b/autosuggest/css/img_inquisitor/hl_corner_tr.gif Binary files differnew file mode 100644 index 0000000..38b1eff --- /dev/null +++ b/autosuggest/css/img_inquisitor/hl_corner_tr.gif diff --git a/autosuggest/css/img_inquisitor/ul_corner_bl.gif b/autosuggest/css/img_inquisitor/ul_corner_bl.gif Binary files differnew file mode 100644 index 0000000..41675d9 --- /dev/null +++ b/autosuggest/css/img_inquisitor/ul_corner_bl.gif diff --git a/autosuggest/css/img_inquisitor/ul_corner_br.gif b/autosuggest/css/img_inquisitor/ul_corner_br.gif Binary files differnew file mode 100644 index 0000000..4fa84af --- /dev/null +++ b/autosuggest/css/img_inquisitor/ul_corner_br.gif diff --git a/autosuggest/css/img_inquisitor/ul_corner_tl.gif b/autosuggest/css/img_inquisitor/ul_corner_tl.gif Binary files differnew file mode 100644 index 0000000..2dd3d82 --- /dev/null +++ b/autosuggest/css/img_inquisitor/ul_corner_tl.gif diff --git a/autosuggest/css/img_inquisitor/ul_corner_tr.gif b/autosuggest/css/img_inquisitor/ul_corner_tr.gif Binary files differnew file mode 100644 index 0000000..21839fb --- /dev/null +++ b/autosuggest/css/img_inquisitor/ul_corner_tr.gif diff --git a/autosuggest/js/bsn.AutoSuggest_2.1.3.js b/autosuggest/js/bsn.AutoSuggest_2.1.3.js new file mode 100644 index 0000000..9ab7c60 --- /dev/null +++ b/autosuggest/js/bsn.AutoSuggest_2.1.3.js @@ -0,0 +1,904 @@ +/** + * author: Timothy Groves - http://www.brandspankingnew.net + * version: 1.2 - 2006-11-17 + * 1.3 - 2006-12-04 + * 2.0 - 2007-02-07 + * 2.1.1 - 2007-04-13 + * 2.1.2 - 2007-07-07 + * 2.1.3 - 2007-07-19 + * + */ + + +if (typeof(bsn) == "undefined") + _b = bsn = {}; + + +if (typeof(_b.Autosuggest) == "undefined") + _b.Autosuggest = {}; +else + alert("Autosuggest is already set!"); + + + + + + + + + + + + +_b.AutoSuggest = function (id, param) +{ + // no DOM - give up! + // + if (!document.getElementById) + return 0; + + + + + // get field via DOM + // + this.fld = _b.DOM.gE(id); + + if (!this.fld) + return 0; + + + + + // init variables + // + this.sInp = ""; + this.nInpC = 0; + this.aSug = []; + this.iHigh = 0; + + + + + // parameters object + // + this.oP = param ? param : {}; + + // defaults + // + var k, def = {minchars:1, meth:"get", varname:"input", className:"autosuggest", timeout:2500, delay:500, offsety:-5, shownoresults: true, noresults: "No results!", maxheight: 250, cache: true, maxentries: 25}; + for (k in def) + { + if (typeof(this.oP[k]) != typeof(def[k])) + this.oP[k] = def[k]; + } + + + // set keyup handler for field + // and prevent autocomplete from client + // + var p = this; + + // NOTE: not using addEventListener because UpArrow fired twice in Safari + //_b.DOM.addEvent( this.fld, 'keyup', function(ev){ return pointer.onKeyPress(ev); } ); + + this.fld.onkeypress = function(ev){ return p.onKeyPress(ev); }; + this.fld.onkeyup = function(ev){ return p.onKeyUp(ev); }; + + this.fld.setAttribute("autocomplete","off"); +}; + + + + + + + + + + + + + + + + +_b.AutoSuggest.prototype.onKeyPress = function(ev) +{ + + var key = (window.event) ? window.event.keyCode : ev.keyCode; + + + + // set responses to keydown events in the field + // this allows the user to use the arrow keys to scroll through the results + // ESCAPE clears the list + // TAB sets the current highlighted value + // + var RETURN = 13; + var TAB = 9; + var ESC = 27; + + var bubble = 1; + + switch(key) + { + case RETURN: + this.setHighlightedValue(); + bubble = 0; + break; + + case ESC: + this.clearSuggestions(); + break; + } + + return bubble; +}; + + + +_b.AutoSuggest.prototype.onKeyUp = function(ev) +{ + var key = (window.event) ? window.event.keyCode : ev.keyCode; + + + + // set responses to keydown events in the field + // this allows the user to use the arrow keys to scroll through the results + // ESCAPE clears the list + // TAB sets the current highlighted value + // + + var ARRUP = 38; + var ARRDN = 40; + + var bubble = 1; + + switch(key) + { + + + case ARRUP: + this.changeHighlight(key); + bubble = 0; + break; + + + case ARRDN: + this.changeHighlight(key); + bubble = 0; + break; + + + default: + this.getSuggestions(this.fld.value); + } + + return bubble; + + +}; + + + + + + + + +_b.AutoSuggest.prototype.getSuggestions = function (val) +{ + + // if input stays the same, do nothing + // + if (val == this.sInp) + return 0; + + + // kill list + // + _b.DOM.remE(this.idAs); + + + this.sInp = val; + + + // input length is less than the min required to trigger a request + // do nothing + // + if (val.length < this.oP.minchars) + { + this.aSug = []; + this.nInpC = val.length; + return 0; + } + + + + + var ol = this.nInpC; // old length + this.nInpC = val.length ? val.length : 0; + + + + // if caching enabled, and user is typing (ie. length of input is increasing) + // filter results out of aSuggestions from last request + // + var l = this.aSug.length; + if (this.nInpC > ol && l && l<this.oP.maxentries && this.oP.cache) + { + var arr = []; + for (var i=0;i<l;i++) + { + if (this.aSug[i].value.substr(0,val.length).toLowerCase() == val.toLowerCase()) + arr.push( this.aSug[i] ); + } + this.aSug = arr; + + this.createList(this.aSug); + + + + return false; + } + else + // do new request + // + { + var pointer = this; + var input = this.sInp; + clearTimeout(this.ajID); + this.ajID = setTimeout( function() { pointer.doAjaxRequest(input) }, this.oP.delay ); + } + + return false; +}; + + + + + +_b.AutoSuggest.prototype.doAjaxRequest = function (input) +{ + // check that saved input is still the value of the field + // + if (input != this.fld.value) + return false; + + + var pointer = this; + + + // create ajax request + // + if (typeof(this.oP.script) == "function") + var url = this.oP.script(encodeURIComponent(this.sInp)); + else + var url = this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp); + + if (!url) + return false; + + var meth = this.oP.meth; + var input = this.sInp; + + var onSuccessFunc = function (req) { pointer.setSuggestions(req, input) }; + var onErrorFunc = function (status) { alert("AJAX error: "+status); }; + + var myAjax = new _b.Ajax(); + myAjax.makeRequest( url, meth, onSuccessFunc, onErrorFunc ); +}; + + + + + +_b.AutoSuggest.prototype.setSuggestions = function (req, input) +{ + // if field input no longer matches what was passed to the request + // don't show the suggestions + // + if (input != this.fld.value) + return false; + + + this.aSug = []; + + + if (this.oP.json) + { + var jsondata = eval('(' + req.responseText + ')'); + + for (var i=0;i<jsondata.results.length;i++) + { + this.aSug.push( { 'id':jsondata.results[i].id, 'value':jsondata.results[i].value, 'info':jsondata.results[i].info } ); + } + } + else + { + + var xml = req.responseXML; + + // traverse xml + // + var results = xml.getElementsByTagName('results')[0].childNodes; + + for (var i=0;i<results.length;i++) + { + if (results[i].hasChildNodes()) + this.aSug.push( { 'id':results[i].getAttribute('id'), 'value':results[i].childNodes[0].nodeValue, 'info':results[i].getAttribute('info') } ); + } + + } + + this.idAs = "as_"+this.fld.id; + + + this.createList(this.aSug); + +}; + + + + + + + + + + + + + + +_b.AutoSuggest.prototype.createList = function(arr) +{ + var pointer = this; + + + + + // get rid of old list + // and clear the list removal timeout + // + _b.DOM.remE(this.idAs); + this.killTimeout(); + + + // if no results, and shownoresults is false, do nothing + // + if (arr.length == 0 && !this.oP.shownoresults) + return false; + + + // create holding div + // + var div = _b.DOM.cE("div", {id:this.idAs, className:this.oP.className}); + + var hcorner = _b.DOM.cE("div", {className:"as_corner"}); + var hbar = _b.DOM.cE("div", {className:"as_bar"}); + var header = _b.DOM.cE("div", {className:"as_header"}); + header.appendChild(hcorner); + header.appendChild(hbar); + div.appendChild(header); + + + + + // create and populate ul + // + var ul = _b.DOM.cE("ul", {id:"as_ul"}); + + + + + // loop throught arr of suggestions + // creating an LI element for each suggestion + // + for (var i=0;i<arr.length;i++) + { + // format output with the input enclosed in a EM element + // (as HTML, not DOM) + // + var val = arr[i].value; + var st = val.toLowerCase().indexOf( this.sInp.toLowerCase() ); + var output = val.substring(0,st) + "<em>" + val.substring(st, st+this.sInp.length) + "</em>" + val.substring(st+this.sInp.length); + + + var span = _b.DOM.cE("span", {}, output, true); + if (arr[i].info != "") + { + var br = _b.DOM.cE("br", {}); + span.appendChild(br); + var small = _b.DOM.cE("small", {}, arr[i].info); + span.appendChild(small); + } + + var a = _b.DOM.cE("a", { href:"#" }); + + var tl = _b.DOM.cE("span", {className:"tl"}, " "); + var tr = _b.DOM.cE("span", {className:"tr"}, " "); + a.appendChild(tl); + a.appendChild(tr); + + a.appendChild(span); + + a.name = i+1; + a.onclick = function () { pointer.setHighlightedValue(); return false; }; + a.onmouseover = function () { pointer.setHighlight(this.name); }; + + var li = _b.DOM.cE( "li", {}, a ); + + ul.appendChild( li ); + } + + + // no results + // + if (arr.length == 0 && this.oP.shownoresults) + { + var li = _b.DOM.cE( "li", {className:"as_warning"}, this.oP.noresults ); + ul.appendChild( li ); + } + + + div.appendChild( ul ); + + + var fcorner = _b.DOM.cE("div", {className:"as_corner"}); + var fbar = _b.DOM.cE("div", {className:"as_bar"}); + var footer = _b.DOM.cE("div", {className:"as_footer"}); + footer.appendChild(fcorner); + footer.appendChild(fbar); + div.appendChild(footer); + + + + // get position of target textfield + // position holding div below it + // set width of holding div to width of field + // + var pos = _b.DOM.getPos(this.fld); + + div.style.left = pos.x + "px"; + div.style.top = ( pos.y + this.fld.offsetHeight + this.oP.offsety ) + "px"; + div.style.width = this.fld.offsetWidth + "px"; + + + + // set mouseover functions for div + // when mouse pointer leaves div, set a timeout to remove the list after an interval + // when mouse enters div, kill the timeout so the list won't be removed + // + div.onmouseover = function(){ pointer.killTimeout() }; + div.onmouseout = function(){ pointer.resetTimeout() }; + + + // add DIV to document + // + document.getElementsByTagName("body")[0].appendChild(div); + + + + // currently no item is highlighted + // + this.iHigh = 0; + + + + + + + // remove list after an interval + // + var pointer = this; + this.toID = setTimeout(function () { pointer.clearSuggestions() }, this.oP.timeout); +}; + + + + + + + + + + + + + + + +_b.AutoSuggest.prototype.changeHighlight = function(key) +{ + var list = _b.DOM.gE("as_ul"); + if (!list) + return false; + + var n; + + if (key == 40) + n = this.iHigh + 1; + else if (key == 38) + n = this.iHigh - 1; + + + if (n > list.childNodes.length) + n = list.childNodes.length; + if (n < 1) + n = 1; + + + this.setHighlight(n); +}; + + + +_b.AutoSuggest.prototype.setHighlight = function(n) +{ + var list = _b.DOM.gE("as_ul"); + if (!list) + return false; + + if (this.iHigh > 0) + this.clearHighlight(); + + this.iHigh = Number(n); + + list.childNodes[this.iHigh-1].className = "as_highlight"; + + + this.killTimeout(); +}; + + +_b.AutoSuggest.prototype.clearHighlight = function() +{ + var list = _b.DOM.gE("as_ul"); + if (!list) + return false; + + if (this.iHigh > 0) + { + list.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; + + // move cursor to end of input (safari) + // + this.fld.focus(); + if (this.fld.selectionStart) + this.fld.setSelectionRange(this.sInp.length, this.sInp.length); + + + this.clearSuggestions(); + + // pass selected object to callback function, if exists + // + 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 pointer = this; + this.toID = setTimeout(function () { pointer.clearSuggestions() }, 1000); +}; + + + + + + + +_b.AutoSuggest.prototype.clearSuggestions = function () +{ + + this.killTimeout(); + + var ele = _b.DOM.gE(this.idAs); + var pointer = this; + if (ele) + { + var fade = new _b.Fader(ele,1,0,250,function () { _b.DOM.remE(pointer.idAs) }); + } +}; + + + + + + + + + + +// AJAX PROTOTYPE _____________________________________________ + + +if (typeof(_b.Ajax) == "undefined") + _b.Ajax = {}; + + + +_b.Ajax = function () +{ + this.req = {}; + this.isIE = false; +}; + + + +_b.Ajax.prototype.makeRequest = function (url, meth, onComp, onErr) +{ + + if (meth != "POST") + meth = "GET"; + + this.onComplete = onComp; + this.onError = onErr; + + var pointer = this; + + // branch for native XMLHttpRequest object + if (window.XMLHttpRequest) + { + this.req = new XMLHttpRequest(); + this.req.onreadystatechange = function () { pointer.processReqChange() }; + this.req.open("GET", url, true); // + this.req.send(null); + // branch for IE/Windows ActiveX version + } + else if (window.ActiveXObject) + { + this.req = new ActiveXObject("Microsoft.XMLHTTP"); + if (this.req) + { + this.req.onreadystatechange = function () { pointer.processReqChange() }; + this.req.open(meth, url, true); + this.req.send(); + } + } +}; + + +_b.Ajax.prototype.processReqChange = function() +{ + + // only if req shows "loaded" + if (this.req.readyState == 4) { + // only if "OK" + if (this.req.status == 200) + { + this.onComplete( this.req ); + } else { + this.onError( this.req.status ); + } + } +}; + + + + + + + + + + +// DOM PROTOTYPE _____________________________________________ + + +if (typeof(_b.DOM) == "undefined") + _b.DOM = {}; + + + +/* create element */ +_b.DOM.cE = function ( type, attr, cont, html ) +{ + var ne = document.createElement( type ); + if (!ne) + return 0; + + for (var a in attr) + ne[a] = attr[a]; + + var t = typeof(cont); + + if (t == "string" && !html) + ne.appendChild( document.createTextNode(cont) ); + else if (t == "string" && html) + ne.innerHTML = cont; + else if (t == "object") + ne.appendChild( cont ); + + return ne; +}; + + + +/* get element */ +_b.DOM.gE = function ( e ) +{ + var t=typeof(e); + if (t == "undefined") + return 0; + else if (t == "string") + { + var re = document.getElementById( e ); + if (!re) + return 0; + else if (typeof(re.appendChild) != "undefined" ) + return re; + else + return 0; + } + else if (typeof(e.appendChild) != "undefined") + return e; + else + return 0; +}; + + + +/* remove element */ +_b.DOM.remE = function ( ele ) +{ + var e = this.gE(ele); + + if (!e) + return 0; + else if (e.parentNode.removeChild(e)) + return true; + else + return 0; +}; + + + +/* get position */ +_b.DOM.getPos = function ( e ) +{ + var e = this.gE(e); + + var obj = e; + + var curleft = 0; + if (obj.offsetParent) + { + while (obj.offsetParent) + { + curleft += obj.offsetLeft; + obj = obj.offsetParent; + } + } + else if (obj.x) + curleft += obj.x; + + var obj = e; + + var curtop = 0; + if (obj.offsetParent) + { + while (obj.offsetParent) + { + curtop += obj.offsetTop; + obj = obj.offsetParent; + } + } + else if (obj.y) + curtop += obj.y; + + return {x:curleft, y:curtop}; +}; + + + + + + + + + + +// FADER PROTOTYPE _____________________________________________ + + + +if (typeof(_b.Fader) == "undefined") + _b.Fader = {}; + + + + + +_b.Fader = function (ele, from, to, fadetime, callback) +{ + if (!ele) + return 0; + + this.e = ele; + + this.from = from; + this.to = to; + + this.cb = callback; + + this.nDur = fadetime; + + 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 ieop = Math.round( this._tween(this.nTime, this.from, this.to, this.nDur) * 100 ); + var op = ieop / 100; + + if (this.e.filters) // internet explorer + { + try + { + this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity = ieop; + } catch (e) { + // If it is not set initially, the browser will throw an error. This will set it if it is not set yet. + this.e.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+ieop+')'; + } + } + else // other browsers + { + this.e.style.opacity = op; + } + + + 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) ); +};
\ No newline at end of file diff --git a/autosuggest/js/bsn.AutoSuggest_2.1.3_comp.js b/autosuggest/js/bsn.AutoSuggest_2.1.3_comp.js new file mode 100644 index 0000000..bf89be6 --- /dev/null +++ b/autosuggest/js/bsn.AutoSuggest_2.1.3_comp.js @@ -0,0 +1 @@ +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:2500,delay:500,offsety:-5,shownoresults:true,noresults:"No results!",maxheight:250,cache:true,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)+"<em>"+j.substring(k,k+this.sInp.length)+"</em>"+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))};
\ No newline at end of file |