function localJsonStore(a){return{load:function(d,e){var c=[];for(var b=0;b<a.data.length;b++){if(a.data[b][a.key].substring(0,d.length).toLowerCase()==d.toLowerCase()){c.push({value:a.data[b][a.key],display:a.data[b][a.display]})}}e(c)}}}function remoteJsonStore(config){var cache=[];var cacheSize=25;return{load:function(query,callback){var url=config.url+encodeURI(query);for(var i=0;i<cache.length;i++){if(cache[i].url==url){callback(cache[i].data);return}}var request=null;try{request=new XMLHttpRequest()}catch(e){request=new ActiveXObject("MSXML2.XMLHTTP")}request.onreadystatechange=function(){if(request.readyState==4){var results=eval(request.responseText);var rows=[];for(var i=0;i<results.length;i++){rows.push({value:results[i][config.value],display:results[i][config.display],raw:results[i]})}cache.push({url:url,data:rows});if(cache.length>cacheSize){cache.shift()}callback(rows)}};request.open("GET",url);request.send("")}}}function attachAutoComplete(k,l,d){var c=null;var i=null;var b="";if(!d){d={}}var e=("keyTimeout" in d)?d.keyTimeout:250;var g=("submitOnEnter" in d)?d.submitOnEnter:true;var f=("className" in d)?d.className:"";var a=("runOnClick" in d)?d.runOnClick:null;function j(m){var n=m.srcElement?m.srcElement:m.target;if(function(o){return(o)?((o==i)?true:arguments.callee(o.parentElement)):false}(n)){return}if(i!==null){i.remove()}if(document.detachEvent){document.detachEvent("onclick",j)}else{document.removeEventListener("click",j,false)}}k.setAttribute("autocomplete","off");function h(){if(c){clearTimeout(c)}c=setTimeout(function(){c=null;if(k.value.length>=1&&k.value!=b){l.load(k.value,function(q){if(q.length>0&&!(q.length==1&&q[0]==k.value)){if(i!==null){i.remove()}var r=null;i=document.createElement("DIV");i.style.overflow="auto";i.style.position="absolute";i.style.width=k.offsetWidth+"px";i.id="auto-complete";i.style.height=(Math.min(q.length,8)*22)+"px";i.style.left=function(s){return(s)?(((s.offsetLeft)?s.offsetLeft:0)+arguments.callee(s.offsetParent)):0}(k)+"px";i.style.top=function(s){return(s)?(((s.offsetTop)?s.offsetTop:0)+arguments.callee(s.offsetParent)):0}(k)+k.offsetHeight+"px";i.timeout=5000;i.oldValue=k.value;if(f!=""){i.className=f}var n=setInterval(function(){if(i===null){clearInterval(n)}else{i.timeout-=100;if(i.timeout<=0){i.remove()}}},100);var p=document.createElement("UL");for(var o=0;o<q.length;o++){var m=document.createElement("LI");m.innerHTML=q[o].display;m.trueValue=q[o].value;m.index=o;m.node=q[o];m.onmouseover=function(){return function(){i.selectItem(this)}}();m.onmouseout=function(){return function(){i.selectItem(null)}}();m.onclick=function(){return function(){i.select(this)}}();p.appendChild(m,true)}i.selectItem=function(v){if(r){r.className=""}if(v){v.className="selected"}i.timeout=5000;var t=v.offsetTop;var w=t+v.offsetHeight;var u=i.scrollTop;var s=u+i.offsetHeight;if(t<u){i.scrollTop=t}if(w>s){i.scrollTop+=v.offsetHeight}r=v};i.selectDown=function(){if(r===null){i.selectItem(p.childNodes[0])}else{if(r.nextSibling){i.selectItem(r.nextSibling)}}i.timeout=5000};i.setSelection=function(){if(r!==null){k.value=r.trueValue}};i.selectUp=function(){if(r===null){i.selectItem(p.childNodes[0])}else{if(r.previousSibling){i.selectItem(r.previousSibling)}}i.timeout=5000};i.remove=function(){document.body.removeChild(i);i=null;clearInterval(n)};i.select=function(){if(r){k.value=r.trueValue.replace("&amp;","&");if(k.onchange){k.onchange()}if(a!=null){return a(r.node)}}i.remove();return false};i.appendChild(p,true);document.body.appendChild(i,true);if(document.attachEvent){document.attachEvent("onclick",j)}else{document.addEventListener("click",j,false)}}})}else{if(i!==null){i.remove()}}b=k.value},e)}k.onkeydown=function(p){function n(){if(p.stopPropagation){p.stopPropagation()}p.cancelBubble=true;p.returnValue=false;if(p.preventDefault){p.preventDefault()}}if(window.event){p=window.event}var m=p.keyCode;if(i){if(m==40){i.selectDown();i.setSelection();n();return false}else{if(m==38){i.selectUp();i.setSelection();n();return false}else{if(m==13){n();if(i.select()){return false}if(g){var o=k.parentNode;while(o){if(o.tagName=="FORM"){o.submit();break}o=o.parentNode}}return false}else{if(m==27){k.value=i.oldValue;if(i.remove()){n()}return false}else{if(m==9){i.select();return true}}}}}}else{if(m==40){b=""}else{if(m==9){return true}}}h();return 0}};
