Event.observe(
              window,
              'load',
              function ()
              {
                $('my_query-query').onkeydown = keyDownHandler;
                $('my_query-query').onkeypress = keyPressHandler;
                $('my_query-query').onkeyup = keyUpHandler;
              }
             );

var keySequence = {};

//--押されたキ−コードを返す。
function getKeyCode(e)
{
  if (document.all) { return event.keyCode; }
  else if (document.getElementById) { return (e.keyCode != 0) ? e.keyCode : e.charCode; }
  // else if (document.getElementById) { return e.keyCode; }
  else if (document.layers) { return e.which; }
}

function keyDownHandler(e)
{
  keySequence = {};
  keySequence.down = getKeyCode(e);
}

function keyPressHandler(e)
{
  keySequence.press = getKeyCode(e);
}

function keyUpHandler(e)
{
  var query = $('my_query-query').value;

  keySequence.up = getKeyCode(e);
  var _keyCode = keySequence.up;

  if (
      _keyCode == '16' // Shift
      || _keyCode == '17' // Ctrl
      || _keyCode == '18' // Alt
      || _keyCode == '37' // ←
      || _keyCode == '39' // →
      || _keyCode == '243' // 半角 > 全角
      || _keyCode == '244' // 半角 < 全角
      )
    { ; }
  else if (_keyCode == '38') // ↑
    { previousCompletion(); }
  else if (_keyCode == '40') // ↓
    { nextCompletion(); }
  else if (_keyCode == '13') // Enter
    {
      if (keySequence.down == keySequence.up) // 通常の Enter .
        { _complete(query); }
      else // IME 変換確定。
        { /* getCompletions(query); */ }
    }
  else
    {
      if (keySequence.down == keySequence.up) // 通常の ASCII .
        { /* getCompletions(query); */ }
      else // IME 変換未確定。
        { ; }
    }
}
