var autosuggest_url="";function autosuggest(f,e,b,a){var d=document.getElementById(f);var c=d.autosuggest;if(c){return c}this.time_out=0;this.response_time=500;this.entry_limit=10;this.limit_start=true;this.match_first=false;this.restrict_typing=false;this.full_refresh=false;this.use_iframe=true;this.use_scroll=true;this.use_mouse=true;this.no_default=false;this.start_check=0;this.text_delimiter=[";",","];this.ajax_delimiter="|";this.item_delimiter=",";this.selectedIndex=-1;this.suggest_url=b||(e?"":autosuggest_url);this.msie=(document.all&&!window.opera);this.displayed=false;this.delim_words=[];this.current_word=0;this.delim_char=[];this.current=0;this.total=0;this.range_up=0;this.range_down=0;this.previous=0;this.timer=0;this.rebuild=false;this.evsetup=false;this.bool=[];this.rows=[];this.onSelect=a||null;this.cur_x=0;this.cur_y=0;this.cur_w=0;this.cur_h=0;this.mouse_x=0;this.mouse_y=0;this.mouse_on_list=0;this.caret_moved=false;this.field_id=f;this.field=d;this.lastterm=d.value;this.keywords=[],this.keywords_init=[];this.values=[],this.values_init=[];return this.construct(e||[])}autosuggest.prototype={construct:function(b){function a(c,e,f,d){return function(){c.call(e,f||null,d||null)}}this.field.autosuggest=this;this.bindArray(b);this.funcClick=this.mouseClick;this.funcCheck=this.checkKey;this.funcPress=this.keyPress;this.funcHighlight=this.highlightTable;this.funcClear=a(this.clearEvents,this);this.funcUp=a(this.scroll,this,true,1);this.funcDown=a(this.scroll,this,false,1);this.funcFocus=a(this.focusTable,this);this.funcUnfocus=a(this.unfocusTable,this);this.addEvent(this.field,"focus",a(this.setupEvents,this));this.addEvent(window,"resize",a(this.reposition,this));return this},bindArray:function(d){if(!d||!d.length){return}this.suggest_url="";this.keywords=[],this.keywords_init=[];this.values=[],this.values_init=[];for(var b=0,a=d.length;b<a;b++){var c=d[b];if(c!=null&&c.constructor!=null&&c.constructor==Array){this.keywords[b]=this.keywords_init[b]=c[0];this.values[b]=this.values_init[b]=c[1]}else{this.keywords[b]=this.keywords_init[b]=c;this.values[b]=this.values_init[b]=""}}},bindURL:function(a){if(!a){a=autosuggest_url}this.suggest_url=a},setupEvents:function(){if(!this.evsetup){this.evsetup=true;this.addEvent(document,"keydown",this.funcCheck);this.addEvent(this.field,"blur",this.funcClear);this.addEvent(document,"keypress",this.funcPress)}},clearEvents:function(){function d(h,g,f){if(h.removeEventListener&&!window.opera){h.removeEventListener(g,f,true)}else{if(h.detachEvent){h.detachEvent("on"+g,f)}else{h["on"+g]=null}}}var c=window.event;if(c&&this.cur_h){var b=c.srcElement||c.target;var a=this.mouse_x+(document.documentElement.scrollLeft||document.body.scrollLeft||0);var e=this.mouse_y+(document.documentElement.scrollTop||document.body.scrollTop||0);if((b.id==this.field_id)&&(a>this.cur_x&&a<(this.cur_x+this.cur_w))&&(e>this.cur_y&&e<(this.cur_y+this.cur_h))){this.field.focus();return}}d(document,"keydown",this.funcCheck);d(this.field,"blur",this.funcClear);d(document,"keypress",this.funcPress);this.hide();this.evsetup=false},parse:function(g,b,a){if(!g||!g.length){return""}if(!b){return g}var e=[],f=0,d=g.search(a);e[f++]=g.substr(0,d);e[f++]='<span class="match">';e[f++]=g.substring(d,b+d);e[f++]="</span>";e[f++]=g.substring(b+d,g.length);return e.join("")},build:function(){if(this.total==0){this.displayed=false;return}this.rows=[];this.current=this.no_default?-1:0;var h=this;this.addEvent(document,"mousemove",function(i){i=i||window.event;h.mouse_x=i.x;h.mouse_y=i.y});var o=document.getElementById("suggest_table_"+this.field_id);if(o){this.displayed=false;document.body.removeChild(o);var a=document.getElementById("suggest_helper_"+this.field_id);if(a){document.body.removeChild(a)}}var e=document.createElement("div");e.id="suggest_table_"+this.field_id;e.className="autosuggest-body";this.cur_y=this.curPos(this.field,"Top")+this.field.offsetHeight;e.style.top=this.cur_y+"px";this.cur_x=this.curPos(this.field,"Left");e.style.left=this.cur_x+"px";this.cur_w=this.field.offsetWidth-(this.msie?2:6);e.style.width=this.cur_w+"px";this.cur_h=1;e.style.height="1px";var q=null;if(this.msie&&this.use_iframe){var q=document.createElement("iframe");q.id="suggest_helper_"+this.field_id;q.src='javascript:"<html></html>";';q.scrolling="no";q.frameBorder="no"}var h=this;var A=(this.total>this.entry_limit);if(q){document.body.appendChild(q);q.style.top=this.cur_y+"px";q.style.left=this.cur_x+"px";q.style.width=e.offsetWidth+2}document.body.appendChild(e);var f=true,k=A?this.entry_limit:this.total;var s=[],g=0;s[g++]='<table cellspacing="1px" cellpadding="2px" id="suggest_table2_';s[g++]=this.field_id;s[g++]='">';e.innerHTML=s.join("");var z=e.firstChild;if(this.use_mouse){z.onmouseout=this.funcUnfocus;z.onmouseover=this.funcFocus}var d=0,B=0;function C(j){var t=z.insertRow(-1);t.className=j?"up":"down";var i=t.insertCell(0);d+=i.offsetHeight+1;return i}if(!this.use_scroll&&A){C(true).parentNode.className="up-disabled"}var c=this.keywords.length,m=0,v=0;var p,n;if(this.text_delimiter.length>0){var x=this.delim_words[this.current_word];p=this.trim(this.addSlashes(x));n=this.trim(x).length}else{var x=this.field.value;p=this.addSlashes(x);n=x.length}var r=new RegExp((this.limit_start?"^":"")+p,"i");function y(j,t){var D=h.rows[v]=z.insertRow(-1);D.className=(t||(h.previous==j))?"selected":"";var i=D.insertCell(0);i.innerHTML=h.parse(h.keywords[j],n,r);i.setAttribute("pos",v++);i.autosuggest=h;if(h.use_mouse){h.addEvent(i,"click",h.funcClick);i.onmouseover=h.funcHighlight}return[D.offsetWidth,D.offsetHeight]}for(var w=0;w<c;w++){if(this.bool[w]){var u=y(w,(f&&!this.no_default&&!this.rebuild));f=false;if(m<=this.entry_limit){d+=u[1]+1}if(B<u[0]){B=u[0]}if(++m==this.entry_limit){++w;break}}}var l=w;if(A){if(!this.use_scroll){var b=C(false);if(this.use_mouse){this.addEvent(b,"click",this.funcDown)}}else{e.style.height=d+"px";e.style.overflow="auto";e.style.overflowX="hidden"}}this.cur_h=d+1;e.style.height=this.cur_h+"px";this.cur_w=((B>e.offsetWidth)?B:e.offsetWidth)+(this.msie?-2:2);e.style.width=this.cur_w+"px";if(q){q.style.height=this.cur_h+"px";q.style.width=this.cur_w+"px"}this.range_up=0;this.range_down=v-1;this.displayed=true;if(this.use_scroll){setTimeout(function(){m=0;for(var j=l;j<c;j++){if(!h.displayed){return}if(h.bool[j]){y(j);if(++m==h.entry_limit){++j;break}}}l=j;if(v<h.total){setTimeout(arguments.callee,25)}},25)}},remake:function(){this.rows=[];var u=document.getElementById("suggest_table2_"+this.field_id);var m=0,p=true;function g(j,k,b,a){var i=u.rows[m++];i.className=k?(b?"up":"up-disabled"):(b?"down":"down-disabled");var t=i.firstChild;if(b&&a&&j.use_mouse){j.addEvent(t,"click",a)}}if(this.total>this.entry_limit){var s=(this.range_up>0);g(this,true,s,this.funcUp)}var w,l;if(this.text_delimiter.length>0){var f=this.delim_words[this.current_word];w=this.trim(this.addSlashes(f));l=this.trim(f).length}else{var f=this.field.value;w=this.addSlashes(f);l=f.length}var v=new RegExp((this.limit_start?"^":"")+w,"i");var e=this.keywords.length,n=0;for(var o=0;o<e;o++){if(this.bool[o]){if((n>=this.range_up)&&(n<=this.range_down)){var d=this.rows[n]=u.rows[m++];d.className="";var q=d.firstChild;q.innerHTML=this.parse(this.keywords[o],l,v);q.setAttribute("pos",n)}if(++n>this.range_down){break}}}if(e>this.entry_limit){var s=(n<this.total);g(this,false,s,this.funcDown)}if(this.msie){var h=document.getElementById("suggest_helper_"+this.field_id);if(h){h.style.width=u.parentNode.offsetWidth+2}}},reposition:function(){if(this.displayed){this.cur_y=this.curPos(this.field,"Top")+this.field.offsetHeight;this.cur_x=this.curPos(this.field,"Left");var a=document.getElementById("suggest_table_"+this.field_id);a.style.top=this.cur_y+"px";a.style.left=this.cur_x+"px"}},startTimer:function(a){if(this.time_out>0){this.timer=setTimeout(function(){this.mouse_on_list=a;this.hide()},this.time_out)}},stopTimer:function(){if(this.timer){clearTimeout(this.timer);this.timer=0}},getRow:function(a){if(typeof(a)=="undefined"){a=this.current}return(this.rows[a]||null)},fixArrows:function(b){if(this.total<=this.entry_limit){return}var a=b.firstChild,e=(this.current==0),d=(this.current==(this.total-1));var c=a.rows[0];c.className=e?"up-disabled":"up";c=a.rows[this.entry_limit+1];c.className=d?"down-disabled":"down"},scroll:function(d,e){if(!this.displayed){return}this.field.focus();if(this.current==(d?0:(this.total-1))){return}if(!d&&(this.current<0)){this.current=-1}else{var b=this.getRow();if(b&&b.style){b.className=""}}this.current+=e*(d?-1:1);if(d){if(this.current<0){this.current=0}}else{if(this.current>=this.total){this.current=this.total-1}if(this.use_scroll&&(this.current>=this.rows.length)){this.current=this.rows.length-1}}var b=this.getRow(),c=document.getElementById("suggest_table_"+this.field_id);if(this.use_scroll){if(d){if(b.offsetTop<c.scrollTop){c.scrollTop=b.offsetTop}}else{if((b.offsetTop+b.offsetHeight)>(c.scrollTop+c.offsetHeight)){var a=this.current-this.entry_limit+1;if(a>0){c.scrollTop=this.getRow(a).offsetTop}}}}else{if(d){if(this.current<this.range_up){this.range_up-=e;if(this.range_up<0){this.range_up=0}this.range_down=this.range_up+this.entry_limit-1;this.remake()}else{this.fixArrows(c)}}else{if(this.current>this.range_down){this.range_down+=e;if(this.range_down>(this.total-1)){this.range_down=this.total-1}this.range_up=this.range_down-this.entry_limit+1;this.remake()}else{this.fixArrows(c)}}b=this.getRow()}if(b&&b.style){b.className="selected"}this.stopTimer();this.startTimer(1);this.field.focus()},mouseClick:function(c){c=c||window.event;var b=c.srcElement||c.target;if(!b.id){b=b.parentNode}var d=b.autosuggest;if(!d){var a=b.tagName.toLowerCase();b=(a=="tr")?b.firstChild:b.parentNode;d=b.autosuggest}if(!d||!d.displayed){return}d.mouse_on_list=0;d.current=parseInt(b.getAttribute("pos"),10);d.choose()},focusTable:function(){this.mouse_on_list=1},unfocusTable:function(){this.mouse_on_list=0;this.stopTimer();this.startTimer(0)},highlightTable:function(b){b=b||window.event;var a=b.srcElement||b.target;var c=a.autosuggest;if(!c){return}c.mouse_on_list=1;var d=c.getRow();if(d&&d.style){d.className=""}c.current=parseInt(a.getAttribute("pos"),10);d=c.getRow();if(d&&d.style){d.className="selected"}c.stopTimer();c.startTimer(0)},choose:function(){if(!this.displayed){return}if(this.current<0){return}this.displayed=false;var b=this.keywords.length;for(var a=0,d=0;a<b;a++){if(this.bool[a]&&(d++==this.current)){break}}this.selectedIndex=a;this.insertWord(this.keywords[a]);if(this.onSelect){this.onSelect(a,this)}},insertWord:function(m){function k(j,i){j.focus();if(j.setSelectionRange){j.setSelectionRange(i,i)}else{if(j.createTextRange){var a=j.createTextRange();a.moveStart("character",i);a.collapse();a.select()}}}if(this.text_delimiter.length>0){var g="",b=this.delim_words[this.current_word],o=b.length,c=0;for(var f=0;f<this.delim_words.length;f++){if(this.current_word==f){var n="",e="",h=false;for(var d=0;d<o;++d){if(b.charAt(d)!=" "){h=true;break}n+=" "}for(d=o-1;d>=0;--d){if(b.charAt(d)!=" "){break}e+=" "}g+=n;g+=m;c=g.length;if(h){g+=e}}else{g+=this.delim_words[f]}if(f!=this.delim_words.length-1){g+=this.delim_char[f]}}this.field.value=g;k(this.field,c)}else{this.field.value=m}this.mouse_on_list=0;this.hide()},hide:function(){if(this.mouse_on_list==0){this.displayed=false;var b=document.getElementById("suggest_table_"+this.field_id);if(b){var a=document.getElementById("suggest_helper_"+this.field_id);if(a){document.body.removeChild(a)}document.body.removeChild(b)}this.stopTimer();this.cur_x=0;this.cur_y=0;this.cur_w=0;this.cur_h=0;this.rows=[]}},keyPress:function(a){a=a||window.event;var c=window.event?a.keyCode:a.charCode;var h=a.srcElement||a.target;h=h.autosuggest;if(h.restrict_typing&&!h.suggest_url.length&&(c>=32)){var m=h.getCaretEnd(h.field);var k=h.field.value.substr(0,m).toLowerCase();var d=false;if(h.text_delimiter.length>0){var b="";for(var f=0;f<h.text_delimiter.length;f++){b+=h.text_delimiter[f];if(h.text_delimiter[f]==String.fromCharCode(c)){d=true}}b=h.addSlashes(b);var l=new RegExp(".*(["+b+"])");k=k.replace(l,"")}var e=h.keywords.length;var g=0;if(d){for(g=0;g<e;g++){if(h.keywords[g].toLowerCase()==k){break}}}else{k+=String.fromCharCode(c).toLowerCase();for(g=0;g<e;g++){if(h.keywords[g].toLowerCase().indexOf(k)!=-1){break}}}if(g==e){h.stopEvent(a);return false}}if(h.caret_moved){h.stopEvent(a)}return !h.caret_moved},checkKey:function(c){c=c||window.event;var b=c.keyCode;var d=c.srcElement||c.target;d=d.autosuggest;d.caret_moved=0;var a="";d.stopTimer();switch(b){case 38:if(d.current<=0){d.stopEvent(c);d.hide()}else{d.scroll(true,1);d.caret_moved=1;d.stopEvent(c)}return false;case 40:if(!d.displayed){d.timer=setTimeout(function(){d.preSuggest(-1)},25)}else{d.scroll(false,1);d.caret_moved=1}return false;case 33:if(d.current==0){d.caret_moved=0;return false}d.scroll(true,(d.use_scroll||(d.getRow()==d.rows[d.range_up]))?d.entry_limit:(d.current-d.range_up));d.caret_moved=1;break;case 34:if(d.current==(d.total-1)){d.caret_moved=0;return false}d.scroll(false,(d.use_scroll||(d.getRow()==d.rows[d.range_down]))?d.entry_limit:(d.range_down-d.current));d.caret_moved=1;break;case 36:if(d.current==0){d.caret_moved=0;return false}d.scroll(true,d.total);d.caret_moved=1;break;case 35:if(d.current==(d.total-1)){d.caret_moved=0;return false}d.scroll(false,d.total);d.caret_moved=1;break;case 27:a=d.field.value;d.mouse_on_list=0;d.hide();break;case 13:if(d.displayed){d.caret_moved=1;d.choose();return false}break;case 9:if((d.displayed&&(d.current>=0))||d.timer){d.caret_moved=1;d.choose();setTimeout(function(){d.field.focus()},25);return false}break;case 16:break;default:d.caret_moved=0;d.timer=setTimeout(function(){d.preSuggest(b)},(d.response_time<10?10:d.response_time))}if(a.length){setTimeout(function(){d.field.value=a},25)}return true},preSuggest:function(k){if(!this.timer){return}this.stopTimer();if(this.displayed&&(this.lastterm==this.field.value)){return}this.lastterm=this.field.value;if(k==38||k==40||k==13){return}var p=0;if(this.displayed&&(this.current>=0)){for(var g=0;g<this.keywords.length;g++){if(this.bool[g]){++p}if(p==this.current){this.previous=g;break}}}else{this.previous=-1}if(!this.field.value.length&&(k!=-1)){this.mouse_on_list=0;this.hide()}var d,s;if(this.text_delimiter.length>0){var u=this.getCaretEnd(this.field);var a="";for(var g=0;g<this.text_delimiter.length;g++){a+=this.text_delimiter[g]}a=this.addSlashes(a);var h=new RegExp("(["+a+"])");p=0;this.delim_words=[];this.delim_words[0]="";for(var g=0,f=this.field.value.length;g<this.field.value.length;g++,f--){if(this.field.value.substr(g,f).search(h)==0){var r=this.field.value.substr(g,f).match(h);this.delim_char[p++]=r[1];this.delim_words[p]=""}else{this.delim_words[p]+=this.field.value.charAt(g)}}var b=0;this.current_word=-1;for(g=0;g<this.delim_words.length;g++){if((u>=b)&&(u<=(b+this.delim_words[g].length))){this.current_word=g}b+=this.delim_words[g].length+1}d=this.trim(this.delim_words[this.current_word]);s=this.trim(this.addSlashes(this.delim_words[this.current_word]))}else{d=this.field.value;s=this.addSlashes(d)}if(d.length==0&&(k!=-1)){this.mouse_on_list=0;this.hide()}else{if((d.length==1)||this.full_refresh||((d.length>1)&&!this.keywords.length)||((d.length>1)&&(this.keywords[0].charAt(0).toLowerCase()!=d.charAt(0).toLowerCase()))){var o=((d.length>1)&&!this.full_refresh)?d.charAt(0):d;if(this.suggest_url.length){var q=null;if(typeof(XMLHttpRequest)!="undefined"){try{q=new XMLHttpRequest()}catch(n){q=null}}else{try{q=new ActiveXObject("Msxml2.XMLHTTP")}catch(n){try{q=new ActiveXObject("Microsoft.XMLHTTP")}catch(n){q=null}}}if(q){if(q.overrideMimeType){q.overrideMimeType("text/xml")}q.open("GET",this.suggest_url+o,true);var m=this;q.onreadystatechange=function(c){if(q.readyState==4){if((q.status==200)||(q.status==0)){var x=q.responseText;var t=x.indexOf("<listdata>");var l=(t==-1)?x.length:x.indexOf("</listdata",t+10);t+=(t!=-1)?10:1;var w=x.substring(t,l);if(w){m.keywords=w.split(m.ajax_delimiter);if(m.item_delimiter&&m.item_delimiter.length){var v=m.keywords.length;for(var j=0;j<v;j++){var e=m.keywords[j],z=e.indexOf(m.item_delimiter);if(z!=-1){var y=e.split(m.item_delimiter);m.keywords[j]=m.keywords_init[j]=y[0];m.values[j]=m.values_init[j]=y[1]}else{m.keywords[j]=m.keywords_init[j]=e;m.values[j]=m.values_init[j]=""}}}m.suggest(o,s)}}}};q.send(null)}}else{this.suggest(d,s)}}else{this.suggest(d,s)}}},suggest:function(f,p){if(f.length<this.start_check){return}var k=this.keywords.length;this.total=0,this.rebuild=false;for(var g=0;g<k;g++){this.keywords[g]=this.keywords_init[g];this.values[g]=this.values_init[g];this.bool[g]=true}if(!this.field.value.length){this.total=k}else{var j=new RegExp(((!this.limit_start&&!this.match_first)?"":"^")+p,"i");var h=new RegExp(p,"i");var a=(!this.limit_start&&this.match_first);var n=[],m=[];var e=[],d=[];var c=[],b=[];for(var g=0;g<k;g++){var o=this.keywords[g];var l=this.values[g];if(j.test(o)){++this.total;n[n.length]=o;m[m.length]=l}else{if(a&&h.test(o)){++this.total;e[e.length]=o;d[d.length]=l}else{c[c.length]=o;b[b.length]=l}}}this.keywords=n.concat(e).concat(c);this.values=m.concat(d).concat(b);for(g=0;g<k;g++){this.bool[g]=(g<this.total)}}if(this.previous!=-1){this.rebuild=true}if(this.total){this.startTimer(0);this.build()}else{this.hide()}},addEvent:function(c,b,a){if(c.addEventListener&&!window.opera){c.addEventListener(b,a,true)}else{if(c.attachEvent){c.attachEvent("on"+b,a)}else{c["on"+b]=a}}},stopEvent:function(a){a=a||window.event;if(a){if(a.stopPropagation){a.stopPropagation()}if(a.preventDefault){a.preventDefault()}if(typeof(a.cancelBubble)!="undefined"){a.cancelBubble=true;a.returnValue=false}}return false},getCaretEnd:function(d){if(typeof(d.selectionEnd)!="undefined"){return d.selectionEnd}else{if(document.selection&&document.selection.createRange){var f=document.selection.createRange(),a;try{a=f.duplicate();a.moveToElementText(d)}catch(c){a=d.createTextRange()}a.setEndPoint("EndToEnd",f);var b=a.text.length;if(b>d.value.length){return -1}return b}}return -1},curPos:function(b,a){var c=0;while(b){c+=b["offset"+a];b=b.offsetParent}return c},addSlashes:function(a){return a.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g,"\\$1")},trim:function(a){return a.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1")}};
