if (!window.faq) { faq = {}; }

faq.search = {

  language: 'nl',
  timeoutId: null,
  searchValue: null,
  resultsElement: null,
  currentCall: null,
  searchCategory: null,

  doSearch: function (value, resultsElementName, categoryId, forcedRefresh)
  {
    if (value == '') return;
    if (!forcedRefresh && (value == this.searchValue && categoryId == this.searchCategory)) return;
    this.searchValue = value;
    this.searchCategory = categoryId;
    this.resultsElement = $(resultsElementName);
    clearTimeout(this.timeoutId);
    if (forcedRefresh)
      this.fetchResults();
    else
      this.timeoutId = setTimeout('faq.search.fetchResults();', 500);
  },

  fetchResults: function()
  {
    this.setSearching();
    if (faq.search.currentCall)
    {
      faq.search.currentCall.transport.abort();
    }
    new Ajax.Request('?uri=faq/search/search', {
        parameters: 'searchPhrase=' + escape(this.searchValue) + '&searchCategory=' + this.searchCategory + '&lng=' + this.language + '&atkpartial=1',
        onCreate:  function(request) { faq.search.currentCall = request; },
        onSuccess: function(transport) { if (transport.status != 0) { faq.search.handleSuccess(transport); }},
        onFailure: faq.search.handleFailure
      });
  },

  handleSuccess: function(transport)
  {
    this.resultsElement.setOpacity(1.0);
    this.resultsElement.update(transport.responseText);
    this.trackSearchAction();
  },

  handleFailure: function(transport)
  {
    faq.search.resultsElement.setOpacity(1.0);
    faq.search.resultsElement.update('');
  },

  trackSearchAction: function()
  {
    new Ajax.Request('?uri=faq/search/savesearchphrase', {
      parameters: 'searchPhrase=' + escape(this.searchValue) + '&searchCategory=' + this.searchCategory + '&atkpartial=1'
    });
  },

  setSearching: function()
  {
    this.resultsElement.setOpacity(0.5);
    if (!$('faq_spinner'))
    {
      this.resultsElement.insert({top : '<img id="faq_spinner" src="/platform/atk/images/spinner.gif" />'});
    }
  }
}
