var _query_dimension;
var _query_last;
var _completions = [];
var _completionsList = [];
var _completionsLength;
var _completionIndex = -1;

var completionURL = 'http://www.google.co.jp/complete/search?hl=ja&js=true&qu=';

Event.observe(
              window,
              'load',
              function ()
              {
                $('my_query-query').autocomplete = 'off';
                $('my_query-query').onfocus = function() { this.focused = true; };
                $('my_query-query').onblur = function() { this.focused = false; };

                _query_dimension = Element.getDimensions($('my_query-query'));

                _complete(getLocationHash());
                getCompletionsOnChange();
              }
             );

// sendRPCDone(frameElement, "ajax",
//             new Array("ajax",
//                       "ajax web",
//                       "ajax xml",
//                       "ajax html",
//                       "ajax engine",
//                       "ajax flash",
//                       "ajax google",
//                       "ajaxとは",
//                       "ajax adaptive path",
//                       "ajax usa"
//                       ),
//             new Array(
//                       "3,630,000 results",
//                       "721,000 results",
//                       "271 results",
//                       "5,320 results",
//                       "&nbsp;",
//                       "&nbsp;",
//                       "1,420 results",
//                       "727 results",
//                       "&nbsp;",
//                       "499,000 results"
//                       ),
//             new Array("")
//             );

window.google = {ac: {}};
window.google.ac.Suggest_apply = function(n,input_query,completions,counts,f)
{
  clearCompletions();

  _completions = $A(completions).findAll(function(item, index){ return index % 2});
  _completionsLength = _completions.length;
  _completionIndex = -1;

  var _position = getPosition($('my_query-query'));
  var _style =
    {
      display: 'block',
      position: 'absolute',
      left: _position.x + 'px',
      top: (_position.y + _query_dimension.height) + 'px',
      margin: '0',
      padding: '0',
      width: _query_dimension.width + 'px'
    };

  Element.setStyle($('completions_floater'), _style);

  var _completionsString = [];

  for (var i = 0; i < _completionsLength; i++)
    {
      _completionsString[i] = _completions[i];

      _completionsList[i] = document.createElement('li');
      _completionsList[i]._index = i;
      _completionsList[i]._completion = _completions[i];
      _completionsList[i].onmouseover = function() { selectCompletion(this._index); };
      _completionsList[i].onclick = function() { _complete(this._completion); };
      _completionsList[i].className = '';
      _completionsList[i].innerHTML = _completionsString[i];

      $('completions_place_holder').appendChild(_completionsList[i]);
    }
};

function selectCompletion(id)
{
  for (var i = 0; i < _completionsLength; i++)
  {
    _completionsList[i].className = '';
  }

  _completionsList[id].className = 'completion_focused';

  $('my_query-query').value = _completions[id];
  $('my_query-query').focused = false;
}

function nextCompletion()
{
  // 「(_completionsLength - 1)番目[最後]の補完候補」 = 「-1 番目[最初のさらに前]の補完候補」
  if (_completionIndex == (_completionsLength - 1))
    {
      _completionIndex = -1;
    }

  selectCompletion(++_completionIndex);
}

function previousCompletion()
{
  // 「0番目[最初]の補完候補」 = 「_completionsLength番目[最後のさらに次]の補完候補」
  if (_completionIndex == 0)
    {
      _completionIndex = _completionsLength;
    }

  selectCompletion(--_completionIndex);
}

function clearCompletions()
{
  if ($('scripts_place_holder').firstChild)
    {
      $('scripts_place_holder').removeChild($('scripts_place_holder').firstChild);
    }

  while ($('completions_place_holder').childNodes.length > 0)
    {
      $('completions_place_holder').removeChild($('completions_place_holder').childNodes[0]);
    }

  $('completions_floater').style.display = 'none';
}

function getCompletions(query)
{
  clearCompletions();

  var query;
  if (!query)
    {
      query = $('my_query-query').value;
    }

  if (query)
    {
      var query_encoded = encodeURI(query);

      var _script = document.createElement('script');
      _script.src = completionURL + query_encoded;
      _script.charset = 'UTF-8';

      $('scripts_place_holder').appendChild(_script);
    }
}

function _complete(query)
{
  // var query;
  if (query)
    {
      $('my_query-query').value = query;
      // $('my_query-query').focus();
      setLocationHash(query);
      clearCompletions();
      getResults(query);
      selectQuery();

      $('my_query-query').focused = true;
      _query_last = query;
    }
}

getCompletionsOnChange = function(e)
{
  var _query_now = $('my_query-query').value;

  if($('my_query-query').focused && _query_now != _query_last)
    {
      _query_last = _query_now;
      getCompletions(_query_now);
    }

  setTimeout('getCompletionsOnChange()', 100);
}
