  var _l = new Array();
  var _lastIndex = -1;
  var _timer;
  var _hidden = true;
  var _q;
  var _res;
  
  function addResult(text) {
    var index = _l.length;
    _l[index] = text;
    
    var html = "<div class=\"result\"";
        html+= " onmouseover=\"highlightResultStatus("+index+")\"";
        html+= " onmouseout=\"\"";
        html+= " onclick=\"sendResult("+index+")\"><span class=\"resultText\">" + text + "</span></div>";
    
    _res.innerHTML += html;
    _res.style.height = ((1+index)*15) + "px";
  }
  
  function highlightResultStatus(index) {
    if (_hidden) return false;    
    if (index<0) { index = _l.length-1; }
       else if (index>=_l.length) { index=0; }

    if (_lastIndex>=0 && typeof(_res.childNodes[_lastIndex].className) != "undefined") {
      _res.childNodes[_lastIndex].className = "result";
    }
    _res.childNodes[index].className = "result_on";
    _lastIndex = index;
    return true;
  } 

  function highlightNoResult() {
    if (_lastIndex>=0 && typeof(_res.childNodes[_lastIndex].className) != "undefined") {
      _res.childNodes[_lastIndex].className = "result";
    }
    _lastIndex = -1;
  }
  
  function setResultStatus(index, noselect) {
    var temp = _q.value;
    _q.value = _l[index];
    if (temp) {
      if (_q.createTextRange) {
        var r = _q.createTextRange();
        r.moveEnd('character', _q.value.length);
        r.moveStart('character', temp.length);
        r.select();
      }
      else if (_q.setSelectionRange) {
        _q.setSelectionRange(temp.length, _q.value.length);
      }
    }
  }

  
  function sendResult(index) {
    setResultStatus(index);
  }
  
  
  function startDisplayTimer() {
   if (_timer) {
      clearTimeout(_timer);
      _timer = null;
    }
    if (_hidden) {
      _timer = setTimeout("getWindowContents()", 550);
    }
  }

  function startHideTimer() {
    if (_timer) {
      clearTimeout(_timer);
      _timer = null;
    } 
    if (!_hidden) {
      _timer = setTimeout("hideWindow()", 250);
    }
  }  
  
  function getWindowContents() {
    var ajax = new thajax();
    clearWindowContents();
    ajax.request("?_nox_&command=AJAX_getAcctMatches&c=" + escape(_q.value), getWindowContentsCallBack);
  }
  
  function getWindowContentsCallBack(ajax) {
    var xml = ajax.responseXML;
    var acct = xml.getElementsByTagName("a");
    for (var x=0; x<acct.length; x++) {
      addResult(getNodeText(acct[x]));
    }
    showWindow();
    _timer = "";
  }
  
  function clearWindowContents() {
    _res.innerHTML = "";
    _l = [];
    hideWindow();
  }
  
  
  function showWindow() {
    if (_l.length==0) return;
    _hidden = false;
    highlightResultStatus(0);
    setResultStatus(0);
    _res.style.display = 'block';
  }

  function hideWindow() {
    _hidden = true;
    _res.style.display = '';
  }

  
  function handleKeyPress(e) {
    var key = getKeyPressed(e);
    switch (key) {
      case 40 :
        if (highlightResultStatus(_lastIndex+1)) 
          setResultStatus(_lastIndex, true);
        return false;
      break;
      case 38:
        if (highlightResultStatus(_lastIndex-1)) 
          setResultStatus(_lastIndex, true);
        return false;
      break;
      case 27:
        hideWindow();
        return false;
      break;
      case 13:
        hideWindow();
        if (_lastIndex != -1){
          sendResult(_lastIndex);
        }
        return false;
      break;
      case 46:
      case 8:
        highlightNoResult();
      break;
      case 16: case 17: case 18: // Ignore Shift, Alt, Control, Caps Lock
      break;
      default:
        hideWindow();
        startDisplayTimer();
      
    }
    return true;
  }
  
  function getKeyPressed(e) {
    return e?e.keyCode:event.keyCode;
  }
  
  function setup(_qid, _resid) {
    _q = document.getElementById(_qid);
    _res = document.getElementById(_resid);
    _q.onblur = startHideTimer;
    if (window.event) {
      _q.onkeypress = handleKeyPress;
      _q.onkeydown = handleKeyPress; 
    }
    else {
      _q.onkeydown = handleKeyPress; 
    }
  }
  
