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