var _query, _queries_template, _queries_editor_template;

Event.observe(
              window,
              'load',
              function ()
              {
                HTML_AJAX.defaultServerUrl = './api/';
                HTML_AJAX.defaultEncoding = 'JSON';
                HTML_AJAX.onError = function(e) { doALERT(e); };

                _queries_template = TrimPath.parseDOMTemplate('queries_template');
                _queries_editor_template = TrimPath.parseDOMTemplate('queries_editor_template');

                selectQueries();
              }
             );

function prepareQuery(my_query)
{
  if (!my_query)
    {
      my_query = {
      my_profile_id:(( $('user_profile-my_profile_id') ) ? $('user_profile-my_profile_id').value : undefined),
      my_query_id:  (( $('my_query-my_query_id') )       ? $('my_query-my_query_id').value : undefined),
      name:         (( $('my_query-name') )              ? $('my_query-name').value : undefined),
      secret:       (( $('my_query-secret') )            ? (( $('my_query-secret').checked ) ? 1 : 0) : undefined),
      query:        (( $('my_query-query') )             ? $('my_query-query').value : undefined),
      meta:         (( $('my_query-meta') )              ? $('my_query-meta').value : undefined)
      };
    }

  // if (!my_query.encoded)
  //   {
  //     my_query.name = encodeURI(my_query.name);
  //     my_query.query = encodeURI(my_query.query);
  //     my_query.meta = encodeURI(my_query.meta);
  //     my_query.encoded = true;
  //   }

  return my_query;
}

function showQueries(_param)
{
  var _my_queries, _option;

  _my_queries = _param._responses._record_set.select.my_query;

  // _option = _param._requests.option;
  // _option.page_number = Math.ceil(1 + ( _option.offset / _option.limit ));

  $('queries_place_holder').style.display = 'none';
  $('queries_place_holder').innerHTML = _queries_template.process({my_queries: _my_queries});
  new Effect.Appear('queries_place_holder', {duration: 1.0, from: 0.0, to: 1.0});

  var _query = document.getElementsByClassName('query','queries_place_holder');
  for (var j = 0; j < _query.length; j++)
    {
      _query[j].onclick = function() { _complete(this.title); };
      _query[j].onmouseover = function() { Element.addClassName(this, 'query_focused'); };
      _query[j].onmouseout = function() { Element.removeClassName(this, 'query_focused'); };
    }

  // makePager(selectQueries,1,$('queries_pager_set_on_top'));
  // makePager(selectQueries,1,$('queries_pager_set_on_bottom'));

  doALERT(_param._responses._MESSAGE.ALERT);
}

function showQuery(_param)
{
  var _my_query, _mode;

  if (_param._responses._record_set.select.my_query)
    {
      _mode = 'update';
      _my_query = (_param._responses._record_set.select.my_query)[0];
      _my_query.secret = (_my_query.secret == '1') ? true : false;
      _my_query.name = (_my_query.name) ? _my_query.name : '';
      _my_query.meta = (_my_query.meta) ? _my_query.meta : '';
    }
  else
    {
      _mode = 'insert';
      _my_query = {};
    }

  $('queries_editor_place_holder').innerHTML = _queries_editor_template.process({"mode": _mode, "my_query": _my_query});
  new Effect.Pulsate('queries_editor_place_holder', {duration: 3, from: 0.0, pulses: 3});

  if ($('my_query_save') && _mode)
    {
      $('my_query_save').onclick = function() { eval(_mode + 'Query();'); };
    }
  if ($('my_query_delete'))
    {
      $('my_query_delete').onclick = function() { deleteQuery(); };
    }

  doALERT(_param._responses._MESSAGE.ALERT);
}

function flush(_param)
{
  selectQueries();
  selectQuery();

  doALERT(_param._responses._MESSAGE.ALERT);
}

function selectQueries(_page_number)
{
  var _my_query, _param;

  _my_query = prepareQuery(_my_query);

  // 不要なプロパティを消す。
  _my_query.my_query_id = undefined;
  _my_query.query = undefined;
  _my_query.secret = undefined;

  // _param = {
  //   _requests: {
  //     action: 'select_count',
  //     my_query: _my_query,
  //     option: {
  //       order: { query: 'asc' },
  //       limit: 10,
  //       offset: (10 * (_page_number - 1))
  //     }
  //   }
  // };

  _param = {
    _requests: {
      my_query: _my_query
    }
  };

  HTML_AJAX.call('query', 'select_count', showQueries, _param);
}

function selectQuery()
{
  var _my_query, _param;

  if (
      $('user_profile-my_profile_id').value
      && $('my_profile-my_profile_id').value
      && ($('user_profile-my_profile_id').value == $('my_profile-my_profile_id').value)
      )
    {
      _my_query = prepareQuery(_my_query);

      // 不要なプロパティを消す。
      _my_query.my_query_id = undefined;
      _my_query.secret = undefined;

      _param = {
        _requests: {
          my_query: _my_query
        }
      };

      HTML_AJAX.call('query', 'select', showQuery, _param);
    }
  else { ; }
}

function insertQuery()
{
  var _my_query, _param;

  _my_query = prepareQuery(_my_query);

  _param = {
    _requests: {
      my_query: _my_query
    }
  };

  HTML_AJAX.call('query', 'insert', flush, _param);
}

function updateQuery()
{
  var _my_query, _param;

  _my_query = prepareQuery(_my_query);

  _param = {
    _requests: {
      my_query: _my_query
    }
  };

  HTML_AJAX.call('query', 'update', flush, _param);
}

function deleteQuery()
{
  var _my_query, _param;

  _my_query = prepareQuery(_my_query);

  _param = {
    _requests: {
      my_query: _my_query
    }
  };

  HTML_AJAX.call('query', 'delete', flush, _param);
}

function highlightQuery(query)
{
  var _queries = document.getElementsByClassName('query','queries_place_holder');
  for (var i = 0; i < _queries.length; i++)
    {
      if (query == _queries[i].title) { Element.addClassName(_queries[i], 'query_highlighted'); }
      else { Element.removeClassName(_queries[i], 'query_highlighted'); }
    }
}
