All pastes #89396 Raw Edit

Anonymous

public text v1 · immutable
#89396 ·published 2006-07-16 05:42 UTC
rendered paste body
//
// uncompressed / commented / renamed by Chris... 
//

var w="";
var pa=false;
var _oldInputFieldValue=""; // inputField value (set during call to google...)...(was ta)
var da=false;
var _currentInputFieldValue=""; // also inputField value (was g)
var G="";
var _eventKeycode=""; // event keycode... (was m)
var _highlightedSuggestionIndex=-1; // currently hightlighted suggestion index (was j)
var _highlightedSuggestionDiv=null; // currently highlisted suggestion div... (was h)
var _completeDivRows=-1; // completeDiv rows at time of keypress... (was Z)
var _completeDivDivList=null; // completeDiv div list at time of keypress (was za)
var _completeDivRows2=5; // was Ca... initially 5? not sure difference between this and _completeDivRows...
var q="";
var _divTag="div"; // Was Lb
var _spanTag="span"; // Was Bb
var _documentForm=null; // Form on html page... (was la...)
var _inputField=null; // Input field on form... (was a)
var _completeDiv=null; // document.completeDiv (was b)
var _submitButton=null; // submit button (was Xa)
var mb=null;
var X=null;
var _enString=null; // This becomes the string "en" (was ha)
var _cursorUpDownPressed=false;  // Was ra...
var kc=null;
var hc=null;
var _resultCache=new Object(); // This is a cache of results from google... (was Ua)
var ca=1;
var Aa=1;
var Y=false;
var _lastKeyCode=-1; // Gets set on keyDown... Was na... 
var Va=(new Date()).getTime();
var _hasXMLHTTP=false; // Gets set to true if XMLHTTP Supported (was Q)
var _xmlHttp=null; // This is the XMLHttp Object... (was k) 
var _completeSearchEnString=null; // Gets set to "/complete/search/?hl=en" (was sa)
var _completeSearchString=null; // Gets set to "/complete/search" ... (was E)
var B=null;
var aa=null;
var Ba=false;
var Ka=false;
var p=60;
var _searchString=null; // Gets set to "search" in installAC (was ia)
var ya=null;
var _timeoutAdjustment=0; // timeout adjustment... (was W)... gets adjusted over time...
var a = null;

// This is the function that get's called from the google html page...
// Line from page:
// InstallAC(document.f,document.f.q,document.f.btnG,"search","en");
// document.f is the name of the form on the page...
// document.f.q is the input text box on the page... 
//  -> <input autocomplete="off" maxLength=256 size=55 name=q value="">
// document.f.btnG Google Search button
InstallAC=function(frm,fld,sb,pn,rl,hd,sm,ufn){
  _documentForm=frm;
  _inputField=fld;
  _submitButton=sb;
  if(!pn) {
    pn="search";
  }
  _searchString=pn;
  var Kb="en|";
  var Jb="zh-CN|zh-TW|ja|ko|vi|";
  if(!rl||Kb.indexOf(rl+"|")==-1) {
    rl="en";
  }
  _enString=escapeURI(rl);
  if(Jb.indexOf(_enString+"|")==-1){
    // We won't pass through here...
    X=true;
    Y=false;
    Ba=false
  }else{
    // but will come through here...
    X=false;
    if(_enString.indexOf("zh")==0) {
      // not here...
      Y=false;
    } else {
      // but here...
      Y=true;
    }
    Ba=true
  }
  // hd is not defined, so becomes false...
  if(!hd) {
    hd=false;
  }
  ya=hd;

  // sm not defined, so becomes the string "query"
  if(!sm) {
    sm="query";
  }
  w=sm;

  // ufn is not defined...
  mb=ufn;
  installACPartTwo()
  _inputField.readOnly = false;
}
;

// blurs focus, then sets focus again... 
// This is getting aclled when we press cursor up / cursor down...
// Was Yb...
function blurThenGetFocus(){
  _cursorUpDownPressed=true;
  _inputField.blur();
  setTimeout("setInputFieldFocus();",10);
  return
}

// setup a keydown event...
// Was Fb...
function setupKeydown1(){
  if(document.createEventObject) {
    var y=document.createEventObject();
    y.ctrlKey=true;
    y.keyCode=70;
    document.fireEvent("onkeydown",y)
  }
}

// setup a keydown event...
// I can't figure out what calls this...
// was nc...
function setupKeydown2(vb){
  var y=document.createEventObject();
  y.ctrlKey=true;
  y.keyCode=vb;
  document.fireEvent("onkeydown",y)
}

function gc(event){}
function ic(event){}

// Was Pb
function keyDownHandler(event){
  if(!event&&window.event) {
    event=window.event;
  }
  if(event) {
    _lastKeyCode=event.keyCode;
  }

  var a;
  // We are backspacing here...
  if(event&&event.keyCode==8){
    if(X&&(_inputField.createTextRange && (event.srcElement==a&&(bb(_inputField)==0&&lb(_inputField)==0)))){
      cc(_inputField);
      event.cancelBubble=true;
      event.returnValue=false;
      return false
    }
  }
}

function mc(){}

// Was Db..
function resizeHandler(){
  if(w=="url"){
    setInputFieldSize()
  }
  setCompleteDivSize()
}

// was ba...
function setCompleteDivSize(){
  if(_completeDiv){
    _completeDiv.style.left=calculateOffsetLeft(_inputField)+2+"px";
    _completeDiv.style.top=calculateOffsetTop(_inputField)+_inputField.offsetHeight+"px";
    _completeDiv.style.width=calculateWidth() -3 +"px"
  }
}

// calculate width of inputField... Note browser specific adjustments...
// Was Ja()
function calculateWidth(){
  if(navigator&&navigator.userAgent.toLowerCase().indexOf("msie")==-1){
    return _inputField.offsetWidth-ca*2
  }else{
    return _inputField.offsetWidth
  }
}


// Called from InstallAC...
// was ac()
function installACPartTwo(){
  if(getXMLHTTP()){
    _hasXMLHTTP=true
  }else{
    _hasXMLHTTP=false
  }

  // pa init'd to false at the top of this file...
  if(pa) {
    _completeSearchString="complete";
  } else {
    _completeSearchString="/complete/"+_searchString;
  }

  _completeSearchEnString=_completeSearchString+"?hl="+_enString;

  if(!_hasXMLHTTP){
    setCookie("qu","",0,_completeSearchString,null,null)
  }
       
  addEvent(_documentForm, "submit", Fa);
  //_documentForm.onsubmit = Fa;
  _inputField.autocomplete="off";
  _inputField.onblur=onBlurHandler;
  if(_inputField.createTextRange) {
    _inputField.onkeyup=new Function("return okuh(event);");
  } else {
    _inputField.onkeyup=okuh;
  }
  
  addEvent(_inputField, "submit", Fa);
  //_inputField.onsubmit=Fa;
  _currentInputFieldValue=_inputField.value;
  _oldInputFieldValue=_currentInputFieldValue;
  _completeDiv=document.createElement("DIV");
  _completeDiv.id="completeDiv" + _inputField.id;
  ca=1;
  Aa=1;
  _completeDiv.style.borderRight="black "+ca+"px solid";
  _completeDiv.style.borderLeft="black "+ca+"px solid";
  _completeDiv.style.borderTop="black "+Aa+"px solid";
  _completeDiv.style.borderBottom="black "+Aa+"px solid";
  _completeDiv.style.zIndex="9999999";
  _completeDiv.style.paddingRight="0";
  _completeDiv.style.paddingLeft="0";
  _completeDiv.style.paddingTop="0";
  _completeDiv.style.paddingBottom="0";
  setCompleteDivSize();
  _completeDiv.style.display="none";
  _completeDiv.style.position="absolute";
  _completeDiv.style.backgroundColor="white";
  document.body.appendChild(_completeDiv);
  cacheResults("",new Array(),new Array());
  Gb(_completeDiv);
  var s=document.createElement("DIV");
  s.style.display="none";
  s.style.position="absolute";
  s.style.left="-10000";
  s.style.top="-10000";
  s.style.width="0";
  s.style.height="0";
  var M=document.createElement("IFRAME");
  M.completeDiv=_completeDiv;
  M.name="completionFrame";
  M.id="completionFrame";
  M.src=_completeSearchEnString;
  s.appendChild(M);
  document.body.appendChild(s);
  if(frames&&(frames["completionFrame"]&&frames["completionFrame"].frameElement)) {
    B=frames["completionFrame"].frameElement;
  } else {
    B=document.getElementById("completionFrame");
  }
  if(w=="url"){
    setInputFieldSize();
    setCompleteDivSize()
  }
  window.onresize=resizeHandler;
  document.onkeydown=keyDownHandler;
  setupKeydown1()
}

function addEvent(obj, evType, fn)
{
  if (obj.addEventListener)
  {
    obj.addEventListener(evType, fn, false);
    return true;
  }
  else if (obj.attachEvent)
  {
  var r = obj.attachEvent("on"+evType, fn);
    return r;
  }
  else
  {
    return false;
  }
}

// Was Ob
function onBlurHandler(event){
  if(!event&&window.event) {
    event=window.event;
  }
  if(!_cursorUpDownPressed){
    hideCompleteDiv();
    // check if tab pressed...
    if(_lastKeyCode==9){
      _lastKeyCode=-1
    }
  }
  _cursorUpDownPressed=false
}

okuh=function(e){
  _eventKeycode=e.keyCode;
  aa=_inputField.value;
  Oa()
}
;
// Was Xb...
function setSubmitButtonFocus(){
  _submitButton.focus()
}

// Was sfi..
setInputFieldFocus=function(){
  _inputField.focus()
}
;

// strip CR from string...
// was Wb
function stripCRFromString(va){
  for(var f=0,oa="",zb="\n\r"; f<va.length; f++) {
    if (zb.indexOf(va.charAt(f))==-1) {
      oa+=va.charAt(f);
    } else {
      oa+=" ";
    }
  }
return oa
}

// Find span value with className = dc...
// Was Qa
function findSpanValueForClass(i,dc){
  var ga=i.getElementsByTagName(_spanTag);
  if(ga){
    for(var f=0; f<ga.length; ++f){
      if(ga[f].className==dc){
        var value=ga[f].innerHTML;
        if(value=="&nbsp;") {
          return"";
        } else{
          var z=stripCRFromString(value);
          return z
        }
      }
    }
  }else{
    return""
  }
}

// Return null if i undefined...
// otherwise return value of span cAutoComplete...
// was U
function valueOfCAutoComplete(i){
  if(!i) {
    return null;
  }
  return findSpanValueForClass(i,"cAutoComplete")
}

// Return null if i undefined...
// otherwise return value of span dAutoComplete...
// was wa
function valueOfDAutoComplete(i){
  if(!i) {
    return null;
  }
  return findSpanValueForClass(i,"dAutoComplete")
}

// Was F
function hideCompleteDiv(){
  document.getElementById("completeDiv" + _inputField.id).style.display="none"
}
// Was cb
function showCompleteDiv(){
  document.getElementById("completeDiv" + _inputField.id).style.display="inline";
  setCompleteDivSize()
}

// This is a result caching mechanism...
// was Ma
function cacheResults(is,cs,ds){
  _resultCache[is]=new Array(cs,ds)
}

// We get the following javascript code dynamically returned from google:
// sendRPCDone(frameElement, "fast bug", new Array("fast bug track", "fast bugs", "fast bug", "fast bugtrack"), new Array("793,000 results", "2,040,000 results", "6,000,000 results", "7,910 results"), new Array(""));
sendRPCDone=function(fr,is,cs,ds,pr){
  if(_timeoutAdjustment>0) {
    _timeoutAdjustment--;
  }
  var lc=(new Date()).getTime();
  if(!fr) {
    fr=B;
  }
  cacheResults(is,cs,ds);
  var b=fr.completeDiv;
  b.completeStrings=cs;
  b.displayStrings=ds;
  b.prefixStrings=pr;
  displaySuggestedList(b,b.completeStrings,b.displayStrings);
  Pa(b,valueOfCAutoComplete);
  if(_completeDivRows2>0) {
    b.height=16*_completeDivRows2+4;
  } else {
    hideCompleteDiv();
  }
}

function Oa(){
  // 38 is up cursor key, 40 is down cursor key...
  if(_eventKeycode==40||_eventKeycode==38) {
    blurThenGetFocus();
  }
  var N=lb(_inputField);
  var v=bb(_inputField);
  var V=_inputField.value;
  if(X&&_eventKeycode!=0){
    if(N>0&&v!=-1) {
      V=V.substring(0,v);
    } 
    if(_eventKeycode==13||_eventKeycode==3){ 
      var d=_inputField; 
      if(d.createTextRange){
        var t=d.createTextRange();
        t.moveStart("character",d.value.length);
        t.select()
      } else if (d.setSelectionRange){
        d.setSelectionRange(d.value.length,d.value.length)
      }
    } else { 
      if(_inputField.value!=V) {
        selectEntry(V)
      }
    }
  }
  _currentInputFieldValue=V;
  if(handleCursorUpDownEnter(_eventKeycode)&&_eventKeycode!=0) { 
    Pa(_completeDiv,valueOfCAutoComplete)
  }
}

function Fa(e)
{   
    if (document.getElementById("completeDiv" + _inputField.id).style.display == "inline")
    {
        hideCompleteDiv();
        if (e && e.preventDefault)
            e.preventDefault();
        else
            false;
    }
    else
        return true;
}

function xb(eb) {
  da=true;
  if(!_hasXMLHTTP){
    setCookie("qu","",0,_completeSearchString,null,null)
  }
  hideCompleteDiv();
  if(eb=="url"){
    var R="";
    if(_highlightedSuggestionIndex!=-1&&h) {
      R=valueOfCAutoComplete(_highlightedSuggestionDiv);
    }
    if(R=="") {
      R=_inputField.value;
    }
    if(q=="") { 
      document.title=R;
    } else {
      document.title=q;
    }
    var Tb="window.frames['"+mb+"'].location = \""+R+'";';
    setTimeout(Tb,10);
    return false
  } else if(eb=="query"){
    //_documentForm.submit();
    return true
  }
}

newwin=function(){
  window.open(_inputField.value);
  hideCompleteDiv();
  return false
}
;

idkc=function(e){
  if(Ba){
    var Ta=_inputField.value;
    if(Ta!=aa){
      _eventKeycode=0;
      Oa()
    }
    aa=Ta;
    setTimeout("idkc()",10)
  }
}
;
setTimeout("idkc()",10);

// Go read about encodeURIComponent here: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsmthencodeuricomponent.asp
// Basically converts a string to a valid uri... (spaces become %20, etc, etc..)
// this function was nb...
function escapeURI(La){
  if(encodeURIComponent) {
    return encodeURIComponent(La);
  }
  if(escape) {
    return escape(La)
  }
}

// Was yb
// If Mb is 0, will return 150...
// If Mb is 3, will return 250...
// If Mb is 4, will return 450...
// If Mb is X, will return 850...
function recalculateTimeout(Mb){
  var H=100;
  for(var o=1; o<=(Mb-2)/2; o++){
    H=H*2
  }
  H=H+50;
  return H
}

// This function sets itself up and gets called over and over (timeout driven)
// was idfn...
mainLoop=function(){
  if(_oldInputFieldValue!=_currentInputFieldValue){
    if(!da){
      var Za=escapeURI(_currentInputFieldValue);
      var ma=_resultCache[_currentInputFieldValue];
      if(ma){
        // Found in our cache...
        Va=-1;
        sendRPCDone(B,_currentInputFieldValue,ma[0],ma[1],B.completeDiv.prefixStrings)
      }else{
        _timeoutAdjustment++;
        Va=(new Date()).getTime();
        x.fetchData();
      }
      _inputField.focus()
    }
    da=false
  }
  _oldInputFieldValue=_currentInputFieldValue;
  setTimeout("mainLoop()",recalculateTimeout(_timeoutAdjustment));
  return true
}
;
// Call mainLoop() after 10 milliseconds...
setTimeout("mainLoop()",10);

// This is onMouseDown function...
var Cb=function(){
  selectEntry(valueOfCAutoComplete(this));
  q=valueOfDAutoComplete(this);
  da=true;
  Fa()
}
;

// on mouseover...
var pb=function(){
  if(_highlightedSuggestionDiv) {
    setStyleForElement(_highlightedSuggestionDiv,"aAutoComplete");
  }
  setStyleForElement(this,"bAutoComplete")
}
;

// On Mouse out...
var ec=function(){
  setStyleForElement(this,"aAutoComplete")
}
;

// Called when cursor up/down pressed... selects new entry in completeDiv...
// was Na
function highlightNewValue(C){
  // fix here
//  var i;
//  for (i = 0; i <= _completeDivDivList.item.length; i++)
//  {
//    setStyleForElement(_completeDivDivList.item(i),"aAutoComplete");
//  }
  _currentInputFieldValue=G;
  selectEntry(G);
  q=G;
  if(!_completeDivDivList||_completeDivRows<=0) {
    return;
  }
  showCompleteDiv();
  if(C>=_completeDivRows){
    C=_completeDivRows-1
  }
  if(_highlightedSuggestionIndex!=-1&&C!=_highlightedSuggestionIndex){
    setStyleForElement(_highlightedSuggestionDiv,"aAutoComplete"); 
    _highlightedSuggestionIndex=-1
  }
  if(C<0){
    _highlightedSuggestionIndex=-1;
    _inputField.focus();
    return
  }
  _highlightedSuggestionIndex=C;
  _highlightedSuggestionDiv=_completeDivDivList.item(C);
  setStyleForElement(_highlightedSuggestionDiv,"bAutoComplete");
  _currentInputFieldValue=G;
  q=valueOfDAutoComplete(_highlightedSuggestionDiv);
  selectEntry(valueOfCAutoComplete(_highlightedSuggestionDiv))
}

// Was Eb
// returns false if cursor up / cursor down or enter pressed...
function handleCursorUpDownEnter(eventCode){
  if(eventCode==40){
    highlightNewValue(_highlightedSuggestionIndex+1);
    return false
  }else if(eventCode==38){
    highlightNewValue(_highlightedSuggestionIndex-1);
    return false
  }else if(eventCode==13||eventCode==3){
    return false
  }
  return true
}

// Pa(completeDiv,H)
// This function gets called for every keypress I make...
function Pa(localCompleteDiv,ib){
  var localInputField=_inputField;
  var T=false;
  _highlightedSuggestionIndex=-1;
  // This becomes the rows in our suggestion list...
  var J=localCompleteDiv.getElementsByTagName(_divTag);
  // # of rows in list...
  var O=J.length;
  _completeDivRows=O;
  _completeDivDivList=J;
  _completeDivRows2=O;
  G=_currentInputFieldValue;
  if(_currentInputFieldValue==""||O==0||_lastKeyCode == 13){
    hideCompleteDiv()
  }else{
    showCompleteDiv()
  }
  var Ab="";
  if(_currentInputFieldValue.length>0){
    var f;
    var o;
    // My prefixStrings was always an empty array...
    // So local variable T never would be set to true...
    // And the local variable Ab would remain empty...
    for(var f=0; f<O; f++){
      for(o=0; o<localCompleteDiv.prefixStrings.length; o++){
        var Ib=localCompleteDiv.prefixStrings[o]+_currentInputFieldValue;
        if(Y||ib(J.item(f)).toUpperCase().indexOf(Ib.toUpperCase())==0) {
          Ab=localCompleteDiv.prefixStrings[o]; 
          T=true; 
          break
        }
      }
      if(T){
        break
      }
    }
  }
  if(T) {
    _highlightedSuggestionIndex=f;
  }
  for(var f=0; f<O; f++) {
    setStyleForElement(J.item(f),"aAutoComplete");
  }

  if (T)
  {
    q=_currentInputFieldValue;
    _highlightedSuggestionIndex=-1;
    _highlightedSuggestionDiv=null
  }

  return;
}

// Called as:
// calculateOffsetLeft(_inputField)
// was ob
function calculateOffsetLeft(r){
  return Ya(r,"offsetLeft")
}

// Called as:
// calculateOffsetTop(_inputField)
// Was Qb...
function calculateOffsetTop(r){
  return Ya(r,"offsetTop")
}

function Ya(r,attr){
  var kb=0;
  while(r){
    kb+=r[attr]; 
    r=r.offsetParent
  }
  return kb
}

// Sets cookie...
// (was called qa...)
function setCookie(name,value,Ra,hb,fb,Sb){
  var Nb=name+"="+value+(Ra?";expires="+Ra.toGMTString():"")+(hb?";path="+hb:"")+(fb?";domain="+fb:"")+(Sb?";secure":"");
  document.cookie=Nb
}

// Was Ha
function setInputFieldSize(){
  var xa=document.body.scrollWidth-220;
  xa=0.73*xa;
  _inputField.size=Math.floor(xa/6.18)
}
function lb(n){
  var N=-1;
  if(n.createTextRange){
    var fa=document.selection.createRange().duplicate();
    N=fa.text.length
  }else if(n.setSelectionRange){
    N=n.selectionEnd-n.selectionStart
  }
  return N
}

function bb(n){
  var v=0;
  if(n.createTextRange){
    var fa=document.selection.createRange().duplicate();
    fa.moveEnd("textedit",1);
    v=n.value.length-fa.text.length
  }else if(n.setSelectionRange){
    v=n.selectionStart
  }else{
    v=-1
  }
  return v
}
function cc(d){
  if(d.createTextRange){
    var t=d.createTextRange();
    t.moveStart("character",d.value.length);
    t.select() 
  } else if(d.setSelectionRange) {
    d.setSelectionRange(d.value.length,d.value.length)
  }
}

function jc(Zb,Ea){
  if(!Ea)Ea=1;
  if(pa&&pa<=Ea){
    var Ia=document.createElement("DIV");
    Ia.innerHTML=Zb;
    document.getElementById("console").appendChild(Ia)
  }
}

// Ex: setStyleForElement(document.createElement("DIV"), "aAutoComplete");
// was l
function setStyleForElement(c,name){
  db();
  c.className=name;
  if(Ka){
    return
  }
  switch(name.charAt(0)){
    case "m":
      c.style.fontSize="13px";
      c.style.fontFamily="arial,sans-serif";
      c.style.wordWrap="break-word";
      break;
    case "l":
      c.style.display="block";
      c.style.paddingLeft="3";
      c.style.paddingRight="3";
      c.style.height="16px";
      c.style.overflow="hidden";
      break;
    case "a":
      c.style.backgroundColor="white";
      c.style.color="black";
      if(c.displaySpan){
        c.displaySpan.style.color="green"
      }
      break;
    case "b":
      c.style.backgroundColor="#3366cc";
      c.style.color="white";
      if(c.displaySpan){
        c.displaySpan.style.color="white"
      }
      break;
    case "c":
      //c.style.width=p+"%";
      c.style.cssFloat="left";
      break;
    case "d":
      c.style.cssFloat="right";
      //c.style.width=100-p+"%";
      if(w=="query"){
        c.style.fontSize="10px";
        c.style.textAlign="right";
        c.style.color="green";
        c.style.paddingTop="3px"
      }else{
        c.style.color="#696969"
      }
      break
  }
}

function db(){
  p=65;
  if(w=="query"){
    var wb=110;
    var Sa=calculateWidth();
    var tb=(Sa-wb)/Sa*100;
    p=tb
  }else{
    p=65
  }
  if(ya){
    p=99.99
  }
}
function Gb(i){
  db();
  var Ub="font-size: 13px; font-family: arial,sans-serif; word-wrap:break-word; ";
  var Vb="display: block; padding-left: 3; padding-right: 3; height: 16px; overflow: hidden; ";
  var bc="background-color: white; ";
  var qb="background-color: #3366cc; color: white ! important; ";
  var ub="display: block; margin-left: 0%; width: "+p+"%; float: left; ";
  var Ga="display: block; margin-left: "+p+"%; ";
  if(w=="query"){
    Ga+="font-size: 10px; text-align: right; color: green; padding-top: 3px; "
  }else{
    Ga+="color: #696969; "
  }
  D(".mAutoComplete",Ub);
  D(".lAutoComplete",Vb);
  D(".aAutoComplete *",bc);
  D(".bAutoComplete *",qb);
  D(".cAutoComplete",ub);
  D(".dAutoComplete",Ga);
  setStyleForElement(i,"mAutoComplete")
}

// Called from sendRPCResponse...
// i = fr.completeDiv
// cs = list of comlete strings...
// Hb = list of results...
// was rb
function displaySuggestedList(i,cs,Hb){
  while(i.childNodes.length>0) {
    i.removeChild(i.childNodes[0]);
  }
  // For each element in our list, we create:
  // <DIV (u) - mousedown/mouseover/mouseout aAutoComplete>
  //   <SPAN (ka) lAutoComplete>
  //     <SPAN (ua) cAutoComplete>
  //        bug tracking
  //     </SPAN (ua)>
  //     <SPAN (ea) dAutoComplete>
  //        500,000 results
  //     </SPAN (ea)>
  //   </SPAN>
  // </DIV (u)>
  for(var f=0; f<cs.length; ++f){
    var u=document.createElement("DIV");
    setStyleForElement(u,"aAutoComplete");
    u.onmousedown=Cb;
    u.onmouseover=pb;
    u.onmouseout=ec;
    var ka=document.createElement("SPAN");
    setStyleForElement(ka,"lAutoComplete");
    var ua=document.createElement("SPAN");
    ua.innerHTML=cs[f]; // the text for the suggested result...
    var ea=document.createElement("SPAN");
    setStyleForElement(ea,"dAutoComplete");
    setStyleForElement(ua,"cAutoComplete");
    u.displaySpan=ea;
    if(!ya) {
      ea.innerHTML=Hb[f]; // the text for # results for suggested result...
    }
    ka.appendChild(ua);
    if (Hb[f] != "")
        ka.appendChild(ea);
    u.appendChild(ka);
    i.appendChild(u)
  }
}

function D(name,gb){
  if(Ka){
    var I=document.styleSheets[0];
    if(I.addRule){
      I.addRule(name,gb)
    }else if(I.insertRule){
      I.insertRule(name+" { "+gb+" }",I.cssRules.length)
    }
  }
}

// Was function jb...
// returns an XMLHttp object... gets it in an IE/Mozilla friendly way..
function getXMLHTTP(){
  var A=null;
  try{
    A=new ActiveXObject("Msxml2.XMLHTTP")
  }catch(e){
    try{
      A=new ActiveXObject("Microsoft.XMLHTTP")
    } catch(oc){
      A=null
    }
  }
  if(!A && typeof XMLHttpRequest != "undefined") {
    A=new XMLHttpRequest()
  }
  return A
}


// Select suggested entry...
// wa is the value to set the inputfield to...
// was S
function selectEntry(Wa){
  _inputField.value=HtmlDecode(Wa);
  aa=Wa
}

function HtmlDecode(s) 
{ 
    var out = ""; 
    if (s==null) return;
    var l = s.length; 
    for (var i=0; i<l; i++) 
    { 
        var ch = s.charAt(i); 
        if (ch == '&') 
        { 
            var semicolonIndex = s.indexOf(';', i+1); 
            if (semicolonIndex > 0) 
            { 
                var entity = s.substring(i + 1, semicolonIndex); 
                if (entity.length > 1 && entity.charAt(0) == '#') 
                { 
                      if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X') 
                            ch = String.fromCharCode(eval('0'+entity.substring(1))); 
                      else 
                            ch = String.fromCharCode(eval(entity.substring(1))); 
                } 
                else 
                { 
                    switch (entity) 
                    { 
                        case 'quot': ch = String.fromCharCode(0x0022); break; 
                        case 'amp': ch = String.fromCharCode(0x0026); break; 
                        case 'lt': ch = String.fromCharCode(0x003c); break; 
                        case 'gt': ch = String.fromCharCode(0x003e); break; 
                        case 'nbsp': ch = String.fromCharCode(0x00a0); break; 
                        case 'iexcl': ch = String.fromCharCode(0x00a1); break; 
                        case 'cent': ch = String.fromCharCode(0x00a2); break; 
                        case 'pound': ch = String.fromCharCode(0x00a3); break; 
                        case 'curren': ch = String.fromCharCode(0x00a4); break; 
                        case 'yen': ch = String.fromCharCode(0x00a5); break; 
                        case 'brvbar': ch = String.fromCharCode(0x00a6); break; 
                        case 'sect': ch = String.fromCharCode(0x00a7); break;
                        case 'uml': ch = String.fromCharCode(0x00a8); break; 
                        case 'copy': ch = String.fromCharCode(0x00a9); break; 
                        case 'ordf': ch = String.fromCharCode(0x00aa); break; 
                        case 'laquo': ch = String.fromCharCode(0x00ab); break; 
                        case 'not': ch = String.fromCharCode(0x00ac); break; 
                        case 'shy': ch = String.fromCharCode(0x00ad); break; 
                        case 'reg': ch = String.fromCharCode(0x00ae); break; 
                        case 'macr': ch = String.fromCharCode(0x00af); break; 
                        case 'deg': ch = String.fromCharCode(0x00b0); break; 
                        case 'plusmn': ch = String.fromCharCode(0x00b1); break; 
                        case 'sup2': ch = String.fromCharCode(0x00b2); break; 
                        case 'sup3': ch = String.fromCharCode(0x00b3); break; 
                        case 'acute': ch = String.fromCharCode(0x00b4); break; 
                        case 'micro': ch = String.fromCharCode(0x00b5); break; 
                        case 'para': ch = String.fromCharCode(0x00b6); break; 
                        case 'middot': ch = String.fromCharCode(0x00b7); break; 
                        case 'cedil': ch = String.fromCharCode(0x00b8); break; 
                        case 'sup1': ch = String.fromCharCode(0x00b9); break; 
                        case 'ordm': ch = String.fromCharCode(0x00ba); break; 
                        case 'raquo': ch = String.fromCharCode(0x00bb); break 
                        case 'frac14': ch = String.fromCharCode(0x00bc); break; 
                        case 'frac12': ch = String.fromCharCode(0x00bd); break; 
                        case 'frac34': ch = String.fromCharCode(0x00be); break; 
                        case 'iquest': ch = String.fromCharCode(0x00bf); break; 
                        case 'Agrave': ch = String.fromCharCode(0x00c0); break; 
                        case 'Aacute': ch = String.fromCharCode(0x00c1); break; 
                        case 'Acirc': ch = String.fromCharCode(0x00c2); break; 
                        case 'Atilde': ch = String.fromCharCode(0x00c3); break; 
                        case 'Auml': ch = String.fromCharCode(0x00c4); break; 
                        case 'Aring': ch = String.fromCharCode(0x00c5); break; 
                        case 'AElig': ch = String.fromCharCode(0x00c6); break; 
                        case 'Ccedil': ch = String.fromCharCode(0x00c7); break; 
                        case 'Egrave': ch = String.fromCharCode(0x00c8); break; 
                        case 'Eacute': ch = String.fromCharCode(0x00c9); break; 
                        case 'Ecirc': ch = String.fromCharCode(0x00ca); break; 
                        case 'Euml': ch = String.fromCharCode(0x00cb); break; 
                        case 'Igrave': ch = String.fromCharCode(0x00cc); break; 
                        case 'Iacute': ch = String.fromCharCode(0x00cd); break; 
                        case 'Icirc': ch = String.fromCharCode(0x00ce ); break; 
                        case 'Iuml': ch = String.fromCharCode(0x00cf); break; 
                        case 'ETH': ch = String.fromCharCode(0x00d0); break; 
                        case 'Ntilde': ch = String.fromCharCode(0x00d1); break; 
                        case 'Ograve': ch = String.fromCharCode(0x00d2); break; 
                        case 'Oacute': ch = String.fromCharCode(0x00d3); break; 
                        case 'Ocirc': ch = String.fromCharCode(0x00d4); break; 
                        case 'Otilde': ch = String.fromCharCode(0x00d5); break; 
                        case 'Ouml': ch = String.fromCharCode(0x00d6); break; 
                        case 'times': ch = String.fromCharCode(0x00d7); break; 
                        case 'Oslash': ch = String.fromCharCode(0x00d8); break; 
                        case 'Ugrave': ch = String.fromCharCode(0x00d9); break; 
                        case 'Uacute': ch = String.fromCharCode(0x00da); break; 
                        case 'Ucirc': ch = String.fromCharCode(0x00db); break; 
                        case 'Uuml': ch = String.fromCharCode(0x00dc); break; 
                        case 'Yacute': ch = String.fromCharCode(0x00dd); break; 
                        case 'THORN': ch = String.fromCharCode(0x00de); break; 
                        case 'szlig': ch = String.fromCharCode(0x00df); break; 
                        case 'agrave': ch = String.fromCharCode(0x00e0); break; 
                        case 'aacute': ch = String.fromCharCode(0x00e1); break; 
                        case 'acirc': ch = String.fromCharCode(0x00e2); break; 
                        case 'atilde': ch = String.fromCharCode(0x00e3); break; 
                        case 'auml': ch = String.fromCharCode(0x00e4); break; 
                        case 'aring': ch = String.fromCharCode(0x00e5); break; 
                        case 'aelig': ch = String.fromCharCode(0x00e6); break; 
                        case 'ccedil': ch = String.fromCharCode(0x00e7); break; 
                        case 'egrave': ch = String.fromCharCode(0x00e8); break; 
                        case 'eacute': ch = String.fromCharCode(0x00e9); break; 
                        case 'ecirc': ch = String.fromCharCode(0x00ea); break; 
                        case 'euml': ch = String.fromCharCode(0x00eb); break; 
                        case 'igrave': ch = String.fromCharCode(0x00ec); break; 
                        case 'iacute': ch = String.fromCharCode(0x00ed); break; 
                        case 'icirc': ch = String.fromCharCode(0x00ee); break; 
                        case 'iuml': ch = String.fromCharCode(0x00ef); break; 
                        case 'eth': ch = String.fromCharCode(0x00f0); break; 
                        case 'ntilde': ch = String.fromCharCode(0x00f1); break; 
                        case 'ograve': ch = String.fromCharCode(0x00f2); break; 
                        case 'oacute': ch = String.fromCharCode(0x00f3); break; 
                        case 'ocirc': ch = String.fromCharCode(0x00f4); break; 
                        case 'otilde': ch = String.fromCharCode(0x00f5); break; 
                        case 'ouml': ch = String.fromCharCode(0x00f6); break; 
                        case 'divide': ch = String.fromCharCode(0x00f7); break; 
                        case 'oslash': ch = String.fromCharCode(0x00f8); break; 
                        case 'ugrave': ch = String.fromCharCode(0x00f9); break; 
                        case 'uacute': ch = String.fromCharCode(0x00fa); break; 
                        case 'ucirc': ch = String.fromCharCode(0x00fb); break; 
                        case 'uuml': ch = String.fromCharCode(0x00fc); break; 
                        case 'yacute': ch = String.fromCharCode(0x00fd); break; 
                        case 'thorn': ch = String.fromCharCode(0x00fe); break; 
                        case 'yuml': ch = String.fromCharCode(0x00ff); break; 
                        case 'OElig': ch = String.fromCharCode(0x0152); break; 
                        case 'oelig': ch = String.fromCharCode(0x0153); break; 
                        case 'Scaron': ch = String.fromCharCode(0x0160); break; 
                        case 'scaron': ch = String.fromCharCode(0x0161); break; 
                        case 'Yuml': ch = String.fromCharCode(0x0178); break; 
                        case 'fnof': ch = String.fromCharCode(0x0192); break; 
                        case 'circ': ch = String.fromCharCode(0x02c6); break; 
                        case 'tilde': ch = String.fromCharCode(0x02dc); break; 
                        case 'Alpha': ch = String.fromCharCode(0x0391); break; 
                        case 'Beta': ch = String.fromCharCode(0x0392); break; 
                        case 'Gamma': ch = String.fromCharCode(0x0393); break; 
                        case 'Delta': ch = String.fromCharCode(0x0394); break; 
                        case 'Epsilon': ch = String.fromCharCode(0x0395); break; 
                        case 'Zeta': ch = String.fromCharCode(0x0396); break; 
                        case 'Eta': ch = String.fromCharCode(0x0397); break; 
                        case 'Theta': ch = String.fromCharCode(0x0398); break; 
                        case 'Iota': ch = String.fromCharCode(0x0399); break; 
                        case 'Kappa': ch = String.fromCharCode(0x039a); break; 
                        case 'Lambda': ch = String.fromCharCode(0x039b); break; 
                        case 'Mu': ch = String.fromCharCode(0x039c); break; 
                        case 'Nu': ch = String.fromCharCode(0x039d); break; 
                        case 'Xi': ch = String.fromCharCode(0x039e); break; 
                        case 'Omicron': ch = String.fromCharCode(0x039f); break; 
                        case 'Pi': ch = String.fromCharCode(0x03a0); break; 
                        case ' Rho ': ch = String.fromCharCode(0x03a1); break; 
                        case 'Sigma': ch = String.fromCharCode(0x03a3); break; 
                        case 'Tau': ch = String.fromCharCode(0x03a4); break; 
                        case 'Upsilon': ch = String.fromCharCode(0x03a5); break; 
                        case 'Phi': ch = String.fromCharCode(0x03a6); break; 
                        case 'Chi': ch = String.fromCharCode(0x03a7); break; 
                        case 'Psi': ch = String.fromCharCode(0x03a8); break; 
                        case 'Omega': ch = String.fromCharCode(0x03a9); break; 
                        case 'alpha': ch = String.fromCharCode(0x03b1); break; 
                        case 'beta': ch = String.fromCharCode(0x03b2); break; 
                        case 'gamma': ch = String.fromCharCode(0x03b3); break; 
                        case 'delta': ch = String.fromCharCode(0x03b4); break; 
                        case 'epsilon': ch = String.fromCharCode(0x03b5); break; 
                        case 'zeta': ch = String.fromCharCode(0x03b6); break; 
                        case 'eta': ch = String.fromCharCode(0x03b7); break; 
                        case 'theta': ch = String.fromCharCode(0x03b8); break; 
                        case 'iota': ch = String.fromCharCode(0x03b9); break; 
                        case 'kappa': ch = String.fromCharCode(0x03ba); break; 
                        case 'lambda': ch = String.fromCharCode(0x03bb); break; 
                        case 'mu': ch = String.fromCharCode(0x03bc); break; 
                        case 'nu': ch = String.fromCharCode(0x03bd); break; 
                        case 'xi': ch = String.fromCharCode(0x03be); break; 
                        case 'omicron': ch = String.fromCharCode(0x03bf); break; 
                        case 'pi': ch = String.fromCharCode(0x03c0); break; 
                        case 'rho': ch = String.fromCharCode(0x03c1); break; 
                        case 'sigmaf': ch = String.fromCharCode(0x03c2); break; 
                        case 'sigma': ch = String.fromCharCode(0x03c3); break; 
                        case 'tau': ch = String.fromCharCode(0x03c4); break; 
                        case 'upsilon': ch = String.fromCharCode(0x03c5); break; 
                        case 'phi': ch = String.fromCharCode(0x03c6); break; 
                        case 'chi': ch = String.fromCharCode(0x03c7); break; 
                        case 'psi': ch = String.fromCharCode(0x03c8); break; 
                        case 'omega': ch = String.fromCharCode(0x03c9); break; 
                        case 'thetasym': ch = String.fromCharCode(0x03d1); break; 
                        case 'upsih': ch = String.fromCharCode(0x03d2); break; 
                        case 'piv': ch = String.fromCharCode(0x03d6); break; 
                        case 'ensp': ch = String.fromCharCode(0x2002); break; 
                        case 'emsp': ch = String.fromCharCode(0x2003); break; 
                        case 'thinsp': ch = String.fromCharCode(0x2009); break; 
                        case 'zwnj': ch = String.fromCharCode(0x200c); break; 
                        case 'zwj': ch = String.fromCharCode(0x200d); break; 
                        case 'lrm': ch = String.fromCharCode(0x200e); break; 
                        case 'rlm': ch = String.fromCharCode(0x200f); break; 
                        case 'ndash': ch = String.fromCharCode(0x2013); break; 
                        case 'mdash': ch = String.fromCharCode(0x2014); break; 
                        case 'lsquo': ch = String.fromCharCode(0x2018); break; 
                        case 'rsquo': ch = String.fromCharCode(0x2019); break; 
                        case 'sbquo': ch = String.fromCharCode(0x201a); break; 
                        case 'ldquo': ch = String.fromCharCode(0x201c); break; 
                        case 'rdquo': ch = String.fromCharCode(0x201d); break; 
                        case 'bdquo': ch = String.fromCharCode(0x201e); break; 
                        case 'dagger': ch = String.fromCharCode(0x2020); break; 
                        case 'Dagger': ch = String.fromCharCode(0x2021); break; 
                        case 'bull': ch = String.fromCharCode(0x2022); break; 
                        case 'hellip': ch = String.fromCharCode(0x2026); break; 
                        case 'permil': ch = String.fromCharCode(0x2030); break; 
                        case 'prime': ch = String.fromCharCode(0x2032); break; 
                        case 'Prime': ch = String.fromCharCode(0x2033); break; 
                        case 'lsaquo': ch = String.fromCharCode(0x2039); break; 
                        case 'rsaquo': ch = String.fromCharCode(0x203a); break; 
                        case 'oline': ch = String.fromCharCode(0x203e); break; 
                        case 'frasl': ch = String.fromCharCode(0x2044); break; 
                        case 'euro': ch = String.fromCharCode(0x20ac); break; 
                        case 'image': ch = String.fromCharCode(0x2111); break; 
                        case 'weierp': ch = String.fromCharCode(0x2118); break; 
                        case 'real': ch = String.fromCharCode(0x211c); break; 
                        case 'trade': ch = String.fromCharCode(0x2122); break; 
                        case 'alefsym': ch = String.fromCharCode(0x2135); break; 
                        case 'larr': ch = String.fromCharCode(0x2190); break; 
                        case 'uarr': ch = String.fromCharCode(0x2191); break; 
                        case 'rarr': ch = String.fromCharCode(0x2192); break; 
                        case 'darr': ch = String.fromCharCode(0x2193); break; 
                        case 'harr': ch = String.fromCharCode(0x2194); break; 
                        case 'crarr': ch = String.fromCharCode(0x21b5); break; 
                        case 'lArr': ch = String.fromCharCode(0x21d0); break; 
                        case 'uArr': ch = String.fromCharCode(0x21d1); break; 
                        case 'rArr': ch = String.fromCharCode(0x21d2); break; 
                        case 'dArr': ch = String.fromCharCode(0x21d3); break; 
                        case 'hArr': ch = String.fromCharCode(0x21d4); break; 
                        case 'forall': ch = String.fromCharCode(0x2200); break; 
                        case 'part': ch = String.fromCharCode(0x2202); break; 
                        case 'exist': ch = String.fromCharCode(0x2203); break; 
                        case 'empty': ch = String.fromCharCode(0x2205); break; 
                        case 'nabla': ch = String.fromCharCode(0x2207); break; 
                        case 'isin': ch = String.fromCharCode(0x2208); break; 
                        case 'notin': ch = String.fromCharCode(0x2209); break; 
                        case 'ni': ch = String.fromCharCode(0x220b); break; 
                        case 'prod': ch = String.fromCharCode(0x220f); break; 
                        case 'sum': ch = String.fromCharCode(0x2211); break; 
                        case 'minus': ch = String.fromCharCode(0x2212); break; 
                        case 'lowast': ch = String.fromCharCode(0x2217); break; 
                        case 'radic': ch = String.fromCharCode(0x221a); break; 
                        case 'prop': ch = String.fromCharCode(0x221d); break; 
                        case 'infin': ch = String.fromCharCode(0x221e); break; 
                        case 'ang': ch = String.fromCharCode(0x2220); break; 
                        case 'and': ch = String.fromCharCode(0x2227); break; 
                        case 'or': ch = String.fromCharCode(0x2228); break; 
                        case 'cap': ch = String.fromCharCode(0x2229); break; 
                        case 'cup': ch = String.fromCharCode(0x222a); break; 
                        case 'int': ch = String.fromCharCode(0x222b); break; 
                        case 'there4': ch = String.fromCharCode(0x2234); break; 
                        case 'sim': ch = String.fromCharCode(0x223c); break; 
                        case 'cong': ch = String.fromCharCode(0x2245); break; 
                        case 'asymp': ch = String.fromCharCode(0x2248); break; 
                        case 'ne': ch = String.fromCharCode(0x2260); break; 
                        case 'equiv': ch = String.fromCharCode(0x2261); break; 
                        case 'le': ch = String.fromCharCode(0x2264); break; 
                        case 'ge': ch = String.fromCharCode(0x2265); break; 
                        case 'sub': ch = String.fromCharCode(0x2282); break; 
                        case 'sup': ch = String.fromCharCode(0x2283); break; 
                        case 'nsub': ch = String.fromCharCode(0x2284); break; 
                        case 'sube': ch = String.fromCharCode(0x2286); break; 
                        case 'supe': ch = String.fromCharCode(0x2287); break; 
                        case 'oplus': ch = String.fromCharCode(0x2295); break; 
                        case 'otimes': ch = String.fromCharCode(0x2297); break; 
                        case 'perp': ch = String.fromCharCode(0x22a5); break; 
                        case 'sdot': ch = String.fromCharCode(0x22c5); break; 
                        case 'lceil': ch = String.fromCharCode(0x2308); break; 
                        case 'rceil': ch = String.fromCharCode(0x2309); break; 
                        case 'lfloor': ch = String.fromCharCode(0x230a); break; 
                        case 'rfloor': ch = String.fromCharCode(0x230b); break; 
                        case 'lang': ch = String.fromCharCode(0x2329); break; 
                        case 'rang': ch = String.fromCharCode(0x232a); break; 
                        case 'loz': ch = String.fromCharCode(0x25ca); break; 
                        case 'spades': ch = String.fromCharCode(0x2660); break; 
                        case 'clubs': ch = String.fromCharCode(0x2663); break; 
                        case 'hearts': ch = String.fromCharCode(0x2665); break; 
                        case 'diams': ch = String.fromCharCode(0x2666); break; 
                        default: ch = ''; break; 
                    } 
                } 
                i = semicolonIndex; 
            } 
        } 
        out += ch; 
    } 
    return out;     
}