功能的实现主要包括在http://www.google.com/ac.js里面,页面里面还有一点辅助作用的脚本。主要是如下的几段:
页面加载的时候首先会调用sf这个函数,功能很简单,就是将焦点设置在文本框中。
<!--
function sf(){
document.f.q.focus();
}
function clk(url,ct,cd,sg){
if(document.images){
(new Image()).src="/url?sa=T&ct="+escape(ct)+"&cd="+escape(cd)+"&url="+escape(url).replace(/\+/g,"%2B")+"&ei=vQiQQ5e8F6KkOP2pvLAH"+sg;
}
return true;
}
// -->
<!--
function qs(el) {
if (window.RegExp && window.encodeURIComponent) {
var ue=el.href;
var qe=encodeURIComponent(document.f.q.value);
if(ue.indexOf("q=")!=-1){
el.href=ue.replace(new RegExp("q=[^&$]*"),"q="+qe);
}else{
el.href=ue+"&q="+qe;
}
}
return 1;
}
// -->
下面的这段代码调用ac.js里面的一个函数,设置表单f,文本框q,以及按钮btnG的一些属性。
InstallAC(document.f,document.f.q,document.f.btnG,"search","en");
具体代码如下:
InstallAC=function(frm,fld,sb,pn,rl,hd,sm,ufn){
sa=frm;
a=fld;
jb=sb;
if(!pn)
pn="search";
na=pn;
var Sb="zh|zh-CN|zh-TW|ja|ko|";
if(!rl||rl.length<1)
rl="en";
la=yb(rl);
if(Sb.indexOf(la+"|")==-1){
W=true;
aa=false;
va=false;
ka=false
}else{
W=false;
aa=true;
if(la.indexOf("zh")==0)
va=false;
ka=true
}
if(!hd)
hd=false;
Ha=hd;
if(!sm)
sm="query";
y=sm;
xb=ufn;
kc()
};
下面的这段代码是内嵌在页面的IFRAME页面里面的
function bodyLoad() {
if (parent == window) return;
var frameElement = this.frameElement;
parent.sendRPCDone(frameElement, "", new Array(), new Array(), new Array(""));
}
页面加载的时候首先会调用sf这个函数,功能很简单,就是将焦点设置在文本框中。
<!--
function sf(){
document.f.q.focus();
}
function clk(url,ct,cd,sg){
if(document.images){
(new Image()).src="/url?sa=T&ct="+escape(ct)+"&cd="+escape(cd)+"&url="+escape(url).replace(/\+/g,"%2B")+"&ei=vQiQQ5e8F6KkOP2pvLAH"+sg;
}
return true;
}
// -->
<!--
function qs(el) {
if (window.RegExp && window.encodeURIComponent) {
var ue=el.href;
var qe=encodeURIComponent(document.f.q.value);
if(ue.indexOf("q=")!=-1){
el.href=ue.replace(new RegExp("q=[^&$]*"),"q="+qe);
}else{
el.href=ue+"&q="+qe;
}
}
return 1;
}
// -->
下面的这段代码调用ac.js里面的一个函数,设置表单f,文本框q,以及按钮btnG的一些属性。
InstallAC(document.f,document.f.q,document.f.btnG,"search","en");
具体代码如下:
InstallAC=function(frm,fld,sb,pn,rl,hd,sm,ufn){
sa=frm;
a=fld;
jb=sb;
if(!pn)
pn="search";
na=pn;
var Sb="zh|zh-CN|zh-TW|ja|ko|";
if(!rl||rl.length<1)
rl="en";
la=yb(rl);
if(Sb.indexOf(la+"|")==-1){
W=true;
aa=false;
va=false;
ka=false
}else{
W=false;
aa=true;
if(la.indexOf("zh")==0)
va=false;
ka=true
}
if(!hd)
hd=false;
Ha=hd;
if(!sm)
sm="query";
y=sm;
xb=ufn;
kc()
};
下面的这段代码是内嵌在页面的IFRAME页面里面的
function bodyLoad() {
if (parent == window) return;
var frameElement = this.frameElement;
parent.sendRPCDone(frameElement, "", new Array(), new Array(), new Array(""));
}
ac.js里面的代码,好像被处理过了,许多函数名已经变量的名称只是用一两个字符表示,代码的可读性不是很好,我将代码格式化了一些,修改了一些变量和函数的名称,相对来ac.js里面的代码说已经好一些了。【代码将会贴在文章的末尾】
InstallAC末尾函数kc()是用来设置一些变量的值。
其实ac.js里面最主要的几个函数就是vb(),
function vb(){
var C=null;
try{
C=new ActiveXObject("Msxml2.XMLHTTP")
}catch(e){
try{
C=new ActiveXObject("Microsoft.XMLHTTP")
}catch(sc){
C=null
}
}
if(!C&&typeof XMLHttpRequest!="undefined"){
C=new XMLHttpRequest()
}
return C
}
用来生成XMLHttpRequest对象,来访问的地址为
http://www.google.com/complete/search?hl=en&js=true&qu=ajax, ajax是文本框中输入的值,en为语言选项,在InstallAC里面设定的,js=true是代码中给定的,访问上面的网址,就会返回一些数据, 如下:
sendRPCDone(frameElement, "ajax", new Array("ajax", "ajax amsterdam", "ajax fc", "ajax ontario", "ajax grips", "ajax football club", "ajax public library", "ajax football", "ajax soccer", "ajax pickering transit"), new Array("3,840,000 results", "502,000 results", "710,000 results", "275,000 results", "8,860 results", "573,000 results", "40,500 results", "454,000 results", "437,000 results", "10,700 results"), new Array(""));
针对返回结果的处理是在函数qc(ac)采用了如下的方法,eval(l.responseText), 也就是调用函数sendRPCDone(), 该函数在ac.js里面是有定义的, 如下:
sendRPCDone=function(fr,is,cs,ds,pr){
if(V>0)
V--;
var rc=(new Date()).getTime();
if(!fr)
fr=N;
Wa(is,cs,ds);
var b=fr.completeDiv;
b.completeStrings=cs;
b.displayStrings=ds;
b.prefixStrings=pr;
Cb(b,b.completeStrings,b.displayStrings);
Ya(b,T);
if(Na>0)
b.height=16*Na+4;
else
hide_complete_div()
};
主要功能我不太清楚,不过看来像是对查询结果如何显示的处理。
还有一个函数就是Qa(), 在kc里面已经将表单的提交动作设置为Qa了, 所以当提交表单的时候,会调用函数Qa,然后调用Gb(pb), Gb(pb)的作用是决定采用何种方式来取得数据, 可以通过XMLHttpRequest或者内嵌的IFRAME来取得。
// 表单提交的时候调用
function Qa(){
return Gb(y) // y="query"
}-
function Gb(pb){
fa=true;
if(!P){
add_cookie("qu","",0,F,null,null)
}
hide_complete_div();
if(pb=="url"){
var Q="";
if(k!=-1&&i)
Q=T(i);
if(Q=="")
Q=textfield_id.value;
if(r=="")
document.title=Q;
else
document.title=r;
var dc="window.frames['"+xb+"'].location = \""+Q+'";';
setTimeout(dc,10);
return false
}else if(pb=="query"){
form_id.submit();
return true
}
}
其他的部分主要是实现通用性以及显示格式的控制,我没有仔细研究,望后来人指教。
附代码:
<!--On Load-->
<!--
function sf(){
document.f.q.focus();
}
function clk(url,ct,cd,sg){
if(document.images){
(new Image()).src="/url?form_id=T&ct="+escape(ct)+"&cd="+escape(cd)+"&url="+escape(url).replace(/\+/g,"%2B")+"&ei=QdmPQ8TrCI3SOZu9ta4H"+sg;
}
return true;
}
// --> -
<!--
function qs(el) {
if (window.RegExp && window.encodeURIComponent) {
var ue=el.href;
var qe=encodeURIComponent(document.f.q.value);
if(ue.indexOf("q=")!=-1){
el.href=ue.replace(new RegExp("q=[^&$]*"),"q="+qe);
}
else{
el.href=ue+"&q="+qe;
}
}
return 1;
}
// --> -
// Input 0
-
var Pb=false;
var Ba=""; // 文本框中输入的值
var g=""; // 文本框中输入的值
var ca=null; // form_keyup中设定为文本框中的值
var H="";
var n=""; // 击键码
var k=-1;
var i=null;
var Z=-1;
var Ia=null;
var Na=5;
var r="";
var Tb="div";
var Kb="span";
var form_id=null; // 表单的ID
var textfield_id=null; // 文本框的ID
var na=null; // "search"
var jb=null; // 表单中的按钮(Google Search)的ID
var la=null; // 加密之后的"en", 采用encdoeURIComponet或者escape方法
var y=""; // "query"
var W=null; // 标识区域语言选项的la="en"的时候为true
var va=false;
var aa=false;
var ka=false;
var fa=false; // Gb()的时候设为true
var P=false; // 标识是否可以创建XMLHttpRequest对象
var F=null; // 路径 /complete 或者是 /complete/search
var Aa=null; // F+语言选项
var xb=null; // InstallAC的时候确定为null
var b=null; // 创建的completeDiv
var za=false;
var fb=new Object();
var ea=1;
var Ma=1;
var ua=-1;
var gb=(new Date()).getTime();
var l=null; -
var N=null; -
var Ua=false;
var q=60; // compeleteDiv的属性设置需要用到
var Ha=null;
var V=0;
var hb=null;
var ma=null;
var oa=null;
var Ea=false;
var X=false; -
// InstallAC(document.f,document.f.q,document.f.btnG,"search","en")
InstallAC=function(frm,fld,sb,pn,rl,hd,sm,ufn){
form_id=frm;
textfield_id=fld;
jb=sb;
if(!pn)
pn="search";
na=pn;
var Sb="zh|zh-CN|zh-TW|ja|ko|";
if(!rl||rl.length<1)
rl="en";
la=yb(rl);
if(Sb.indexOf(la+"|")==-1){
W=true;
aa=false;
va=false;
ka=false
}else{
W=false;
aa=true;
if(la.indexOf("zh")==0)
va=false;
ka=true
}
if(!hd)
hd=false;
Ha=hd;
if(!sm)
sm="query";
y=sm;
xb=ufn;
kc()
}; -
function kc(){
if(vb()){
P=true
}else{
P=false
}
if(Pb)
F="complete";
else
F="/complete/"+na; -
Aa=F+"?hl="+la;
-
if(!P){
// 添加Cookie
add_cookie("qu","",0,F,null,null)
}
form_id.onsubmit=Qa;
textfield_id.autocomplete="off";
textfield_id.onblur=Wb;
textfield_id.onfocus=lc; -
if(textfield_id.createTextRange)
textfield_id.onkeyup=new Function("return form_keyup(event);");
else
textfield_id.onkeyup=form_keyup;
textfield_id.onsubmit=Qa;
g=textfield_id.value;
Ba=g;
b=document.createElement("DIV");
b.id="completeDiv";
ea=1;
Ma=1;
// 设置completeDiv的一个属性
b.style.borderRight="black "+ea+"px solid";
b.style.borderLeft="black "+ea+"px solid";
b.style.borderTop="black "+Ma+"px solid";
b.style.borderBottom="black "+Ma+"px solid";
b.style.zIndex="1";
b.style.paddingRight="0";
b.style.paddingLeft="0";
b.style.paddingTop="0";
b.style.paddingBottom="0";
set_complete_div_pos();
b.style.visibility="hidden";
b.style.position="absolute";
b.style.backgroundColor="white";
// 将completeDiv添加到页面上去
document.body.appendChild(b);
// 会将fb=new Object()里面的fb[""]=new Array(new Array(), new Array());
Wa("",new Array(),new Array());
// 添加样式表的函数
Qb(b);
var t=document.createElement("DIV");
t.style.visibility="hidden";
t.style.position="absolute";
t.style.left="-10000";
t.style.top="-10000";
t.style.width="0";
t.style.height="0";
var L=document.createElement("IFRAME");
L.completeDiv=b;
L.name="completionFrame";
L.id="completionFrame";
L.src=Aa;
t.appendChild(L);
document.body.appendChild(t);
if(frames&&(frames["completionFrame"]&&frames["completionFrame"].frameElement))
N=frames["completionFrame"].frameElement;
else
N=document.getElementById("completionFrame"); -
if(y=="url"){
Sa();
set_complete_div_pos()
}
window.onresize=Mb;
document.onkeydown=Xb;
Ob();
if(ka){
setTimeout("idkc()",10);
if(textfield_id.attachEvent){
textfield_id.attachEvent("onpropertychange",Zb)
}
}
} -
function add_cookie(z,Y,ab,tb,qb,cc){
var Vb=z+"="+Y+(ab?";expires="+ab.toGMTString():"")+(tb?";path="+tb:"")+(qb?";domain="+qb:"")+(cc?";secure":"");
document.cookie=Vb
} -
function ub(){
za=true;
textfield_id.blur();
setTimeout("sfi();",10);
return
} -
function Ob(){
if(document.createEventObject){
var Ka=document.createEventObject();
Ka.ctrlKey=true;
Ka.keyCode=70;
document.fireEvent("onkeydown",Ka)
}
}
function Xb(h){
if(!h&&window.event)
h=window.event;
if(h)
ua=h.keyCode;
if(h&&h.keyCode==8){
if(W&&(textfield_id.createTextRange&&(h.srcElement==textfield_id&&(ja(textfield_id)==0&&qa(textfield_id)==0)))){
nc(textfield_id);
h.cancelBubble=true;
h.returnValue=false;
return false
}
}
} -
function Mb(){
if(y=="url"){
Sa()
}
set_complete_div_pos()
}
function set_complete_div_pos(){
if(b){
b.style.left=zb(textfield_id)+"px";
b.style.top=Yb(textfield_id)+textfield_id.offsetHeight-1+"px";
b.style.width=Ta()+"px"
}
}
function Ta(){
if(navigator&&navigator.userAgent.toLowerCase().indexOf("msie")==-1){
return textfield_id.offsetWidth-ea*2
}else{
return textfield_id.offsetWidth
}
} -
function lc(h){
X=true
}
function Wb(h){
X=false;
if(!h&&window.event)
h=window.event;
if(!za){
hide_complete_div();
if(ua==9){
jc();
ua=-1
}
}
za=false
} -
form_keyup=function(e){
if(!Ea){
Ea=true
}
n=e.keyCode;
ca=textfield_id.value;
form_keyup_handler()
};
function jc(){
jb.focus()
}
sfi=function(){
textfield_id.focus()
};
function hc(Da){
for(var c=0,wa="",Ib="\n\r";c<Da.length;c++)
if(Ib.indexOf(Da.charAt(c))==-1)
wa+=Da.charAt(c);
else wa+=" ";
return wa
}
function Za(j,oc){
var ia=j.getElementsByTagName(Kb);
if(ia){
for(var c=0;c<ia.length;++c){
if(ia[c].className==oc){
var Y=ia[c].innerHTML;
if(Y==" ")
return"";
else{
var A=hc(Y);
return A
}
}
}
}
else{
return""
}
}
function T(j){
if(!j)
return null;
return Za(j,"cAutoComplete")
} -
function Fa(j){
if(!j)
return null;
return Za(j,"dAutoComplete")
}
function hide_complete_div(){
document.getElementById("completeDiv").style.visibility="hidden"
}
function show_complete_div(){
document.getElementById("completeDiv").style.visibility="visible";
set_complete_div_pos()
}
function Wa(is,cs,ds){
fb[is]=new Array(cs,ds)
} -
// 处理查询的结果
sendRPCDone=function(fr,is,cs,ds,pr){
if(V>0)
V--;
var rc=(new Date()).getTime();
if(!fr)
fr=N;
Wa(is,cs,ds);
var b=fr.completeDiv;
b.completeStrings=cs;
b.displayStrings=ds;
b.prefixStrings=pr;
Cb(b,b.completeStrings,b.displayStrings);
Ya(b,T);
if(Na>0)
b.height=16*Na+4;
else
hide_complete_div()
}; -
function qa(o){
var M=-1;
if(o.createTextRange){
var ha=document.selection.createRange().duplicate();
M=ha.text.length
}else if(o.setSelectionRange){
M=o.selectionEnd-o.selectionStart
}
return M
}
function ja(o){
var w=0;
if(o.createTextRange){
var ha=document.selection.createRange().duplicate();
ha.moveEnd("textedit",1);
w=o.value.length-ha.text.length
}else if(o.setSelectionRange){
w=o.selectionStart
}else{
w=-1
}
return w
}
// 相应击键的动作
function form_keyup_handler(){
// n=40 下 方向键
// n=37 左 方向键
// n=38 上 方向键
// n=39 右 方向键
if(n==40||n==38)
ub();
var M=qa(textfield_id); // 返回选中文字的长度
var w=ja(textfield_id); // 返回选中文字的起始位置
var U=textfield_id.value;
if(W&&n!=0){
if(M>0&&w!=-1)U=U.substring(0,w);
if(n==13||n==3){ // n=13为回车键
var f=textfield_id;
if(f.createTextRange){
var u=f.createTextRange();
u.moveStart("character",f.value.length);
u.select()
}else if(f.setSelectionRange){
f.setSelectionRange(f.value.length,f.value.length)
}
}else{
if(textfield_id.value!=U)
R(U) // 设置文本框中的值
}
}
g=U;
if(Nb(n)&&n!=0)
Ya(b,T)
} -
// 表单提交的时候调用
function Qa(){
return Gb(y) // y="query"
} -
function Gb(pb){
fa=true;
if(!P){
add_cookie("qu","",0,F,null,null)
}
hide_complete_div();
if(pb=="url"){
var Q="";
if(k!=-1&&i)
Q=T(i);
if(Q=="")
Q=textfield_id.value;
if(r=="")
document.title=Q;
else
document.title=r;
var dc="window.frames['"+xb+"'].location = \""+Q+'";';
setTimeout(dc,10);
return false
}else if(pb=="query"){
form_id.submit();
return true
}
} -
newwin=function(){
window.open(textfield_id.value);
hide_complete_div();
return false
}; -
idkc=function(e){
if(ka){
if(X){
eb()
}
var db=textfield_id.value;
if(db!=ca){
n=0;
form_keyup_handler()
}
ca=db;
setTimeout("idkc()",10)
}
}; -
function yb(Va){
if(encodeURIComponent)
return encodeURIComponent(Va);
if(escape)
return escape(Va)
} -
function Hb(Ub){
var I=100;
for(var p=1;p<=(Ub-2)/2;p++){
I=I*2
}
I=I+50;
return I
}
idfn=function(){
if(Ba!=g){
if(!fa){
var lb=yb(g);
var ta=fb[g];
if(ta){
gb=-1;
sendRPCDone(N,g,ta[0],ta[1],N.completeDiv.prefixStrings)
}
else{
V++;
gb=(new Date()).getTime();
if(P){
qc(lb)
}else{
add_cookie("qu",lb,null,F,null,null);
frames["completionFrame"].document.location.reload(true)
}
}
textfield_id.focus()
}
fa=false
}
Ba=g;
setTimeout("idfn()",Hb(V));
return true
};
setTimeout("idfn()",10);
var Lb=function(){
R(T(this));
r=Fa(this);
fa=true;
Qa()
};
var Ab=function(){
if(i)m(i,"aAutoComplete");
m(this,"bAutoComplete")
};
var pc=function(){
m(this,"aAutoComplete")
};
function xa(D){
g=H;
R(H);
r=H;
if(!Ia||Z<=0)
return;
show_complete_div();
if(D>=Z){
D=Z-1
}
if(k!=-1&&D!=k){
m(i,"aAutoComplete");
k=-1
}
if(D<0){
k=-1;
textfield_id.focus();
return
}
k=D;
i=Ia.item(D);
m(i,"bAutoComplete");
g=H;
r=Fa(i);
R(T(i))
}
function Nb(pa){
if(pa==40){
xa(k+1);
return false
}else if(pa==38){
xa(k-1);
return false
}else if(pa==13||pa==3){
return false
}
return true
}
function Ya(K,Pa){
var f=textfield_id;
var S=false;
k=-1;
var B=K.getElementsByTagName(Tb);
var O=B.length;
Z=O;
Ia=B;
Na=O;
H=g;
if(g==""||O==0){
hide_complete_div()
}else{
show_complete_div()
}
var Jb="";
if(g.length>0){
var c;
var p;
for(var c=0;c<O;c++){
for(p=0;p<K.prefixStrings.length;p++){
var cb=K.prefixStrings[p]+g;
if(va||(!aa&&Pa(B.item(c)).toUpperCase().indexOf(cb.toUpperCase())==0||aa&&(c==0&&Pa(B.item(c)).toUpperCase()==cb.toUpperCase()))){
Jb=K.prefixStrings[p];
S=true;
break
}
}
if(S){
break
}
}
}
if(S)
k=c;
for(var c=0;c<O;c++)
m(B.item(c),"aAutoComplete");
if(S){
i=B.item(k);
r=Fa(i)
}else{
r=g;
k=-1;
i=null
}
var mb=false;
switch(n){
case 8:
case 33:
case 34:
case 35:
case 35:
case 36:
case 37:
case 39:
case 45:
case 46:
mb=true;
break;
default:break
}
if(!mb&&i){
var Oa=g;
m(i,"bAutoComplete");
var A;
if(S)
A=Pa(i).substr(K.prefixStrings[p].length);
else
A=Oa;
if(A!=f.value){
if(f.value!=g)
return;
if(W){
if(f.createTextRange||f.setSelectionRange)
R(A);
if(f.createTextRange){
var u=f.createTextRange();
u.moveStart("character",Oa.length);
u.select()
}else if(f.setSelectionRange){
f.setSelectionRange(Oa.length,f.value.length)
}
}
}
}else{
k=-1;
r=g
}
}
function zb(s){
return kb(s,"offsetLeft")
}
function Yb(s){
return kb(s,"offsetTop")
}
function kb(s,na){
var wb=0;
while(s){
wb+=s[na];
s=s.offsetParent
}
return wb
} -
function Sa(){
var Ga=document.body.scrollWidth-220;
Ga=0.73*Ga;
textfield_id.size=Math.floor(Ga/6.18)
} -
function nc(f){
if(f.createTextRange){
var u=f.createTextRange();
u.moveStart("character",f.value.length);
u.select()
}else if(f.setSelectionRange){
f.setSelectionRange(f.value.length,f.value.length)
}
}
function m(d,z){
ob();
d.className=z;
if(Ua){
return
}
switch(z.charAt(0)){
case "m":
d.style.fontSize="13px";
d.style.fontFamily="arial,sans-serif";
d.style.wordWrap="break-word";
break;
case "l":
d.style.display="block";
d.style.paddingLeft="3";
d.style.paddingRight="3";
d.style.height="16px";
d.style.overflow="hidden";
break;
case "textfield_id":
d.style.backgroundColor="white";
d.style.color="black";
if(d.displaySpan){
d.displaySpan.style.color="green"
}
break;
case "b":
d.style.backgroundColor="#3366cc";
d.style.color="white";
if(d.displaySpan){
d.displaySpan.style.color="white"
}
break;
case "c":
d.style.width=q+"%";
d.style.cssFloat="left";
break;
case "d":
d.style.cssFloat="right";
d.style.width=100-q+"%";
if(y=="query"){
d.style.fontSize="10px";
d.style.textAlign="right";
d.style.color="green";
d.style.paddingTop="3px"
}else{
d.style.color="#696969"
}
break
}
}
function ob(){
q=65;
if(y=="query"){
var Fb=110;
var bb=Ta();
var Db=(bb-Fb)/bb*100;
q=Db
}else{
q=65
}
if(Ha){
q=99.99
}
}
function Qb(j){
ob();
var ec="font-size: 13px;font-family: arial,sans-serif;word-wrap:break-word;";
var gc="display: block;padding-left: 3;padding-right: 3;height: 16px;overflow: hidden;";
var mc="background-color: white;";
var Bb="background-color: #3366cc;color: white ! important;";
var Eb="display: block;margin-left: 0%;width: "+q+"%;float: left;";
var Ra="display: block;margin-left: "+q+"%;";
if(y=="query"){
Ra+="font-size: 10px;text-align: right;color: green;padding-top: 3px;"
}else{
Ra+="color: #696969;"
}
E(".mAutoComplete",ec);
E(".lAutoComplete",gc);
E(".aAutoComplete *",mc);
E(".bAutoComplete *",Bb);
E(".cAutoComplete",Eb);
E(".dAutoComplete",Ra);
m(j,"mAutoComplete")
}
function Cb(j,cs,Rb){
while(j.childNodes.length>0)
j.removeChild(j.childNodes[0]);
for(var c=0;c<cs.length;++c){
var v=document.createElement("DIV");
m(v,"aAutoComplete");
v.onmousedown=Lb;
v.onmouseover=Ab;
v.onmouseout=pc;
var ra=document.createElement("SPAN");
m(ra,"lAutoComplete");
var Ca=document.createElement("SPAN");
Ca.innerHTML=cs[c];
var ga=document.createElement("SPAN");
m(ga,"dAutoComplete");
m(Ca,"cAutoComplete");
v.displaySpan=ga;
if(!Ha)
ga.innerHTML=Rb[c];
ra.appendChild(Ca);
ra.appendChild(ga);
v.appendChild(ra);
j.appendChild(v)
}
}
function E(z,rb){
if(Ua){
var J=document.styleSheets[0];
if(J.addRule){
J.addRule(z,rb)
}else if(J.insertRule){
J.insertRule(z+" { "+rb+" }",J.cssRules.length)
}
}
}
function vb(){
var C=null;
try{
C=new ActiveXObject("Msxml2.XMLHTTP")
}catch(e){
try{
C=new ActiveXObject("Microsoft.XMLHTTP")
}catch(sc){
C=null
}
}
if(!C&&typeof XMLHttpRequest!="undefined"){
C=new XMLHttpRequest()
}
return C
}
function qc(ac){
if(l&&l.readyState!=0){
l.abort()
}
l=vb();
if(l){
l.open("GET",Aa+"&js=true&qu="+ac,true);
l.onreadystatechange=function(){
if(l.readyState==4&&l.responseText){
if(l.responseText.charAt(0)=="<"){
V--
}else{
eval(l.responseText)
}
}
};
l.send(null)
}
}
function R(ib){
textfield_id.value=ib;
ca=ib
}
function Zb(h){
if(!h&&window.event)
h=window.event;
if(!Ea&&(X&&h.propertyName=="value")){
if(fc()){
eb();
setTimeout("ba("+ma+", "+oa+");",30)
}
}
}
function fc(){
var ic=textfield_id.value;
var La=ja(textfield_id);
var Ja=qa(textfield_id);
return La==ma&&(Ja==oa&&ic==hb)
}
function eb(){
hb=textfield_id.value;
ma=ja(textfield_id);
oa=qa(textfield_id)
}
ba=function(La,Ja){
if(La==ma&&Ja==oa){
bc()
}
};
function bc(){
ub();
xa(k+1)
} -
InstallAC(document.f,document.f.q,document.f.btnG,"search","en");
-
function bodyLoad() {
if (parent == window) return;
var frameElement = this.frameElement;
parent.sendRPCDone(frameElement, "", new Array(), new Array(), new Array(""));
}