/**
 * Initializes the two AJAX searchers (news and web).
 * @param {String} query Initial query to execute.
 */
function Z2_initializeAjaxSearchers(query) {
  Z2_searchControl(query);
}

function Z2_searchControl(query) {
  var searcher = new GwebSearch();
  searcher.setSearchCompleteCallback(
      this,
      Z2_searchControl.prototype.Z2_searchComplete,
      ["web",
       MSG_NO_WEB_RESULTS,
       searcher]);
  searcher.execute(query);
  searcher = new GnewsSearch();
  searcher.setSearchCompleteCallback(
      this,
      Z2_searchControl.prototype.Z2_searchComplete,
      ["news",
       MSG_NO_NEWS_RESULTS,
       searcher]);
  searcher.execute(query);
}

// Called when a AJAX search completes, renders the results.
Z2_searchControl.prototype.Z2_searchComplete = function(serviceName,
                                                        noResultsMessage,
                                                        searcher) {
  var results = document.getElementById(serviceName + "control");
  var controlDiv = createDiv("", "gsc-control");
  var boxDiv = createDiv("", "gsc-resultsbox-visible");
  controlDiv.appendChild(boxDiv);
  var rootDiv = createDiv("", "gsc-resultsRoot");
  boxDiv.appendChild(rootDiv);
  var gscResultsDiv = createDiv("", "gsc-results gsc-" + serviceName + "Result");
  gscResultsDiv.setAttribute("style", "display:block");
  rootDiv.appendChild(gscResultsDiv);
  results.appendChild(controlDiv);

  // if the searcher has results then process them
  if (searcher.results && searcher.results.length > 0) {
    for (var i=0; i<searcher.results.length; i++) {
      var gscResultDiv = createDiv("", "gsc-result");
      gscResultsDiv.appendChild(gscResultDiv);
      var result = searcher.results[i];
      var div;
      if (result.html) {
        div = result.html.cloneNode(true);
      }
      gscResultDiv.appendChild(div);
    }
    var moreResultsDiv = createDiv("", "gsc-trailing-more-results");
    var moreLink = document.createElement('a');
    var slashIdx = searcher.gwsUrl.indexOf("/", searcher.gwsUrl.indexOf("//") +
    2);
    moreLink.setAttribute('href', searcher.gwsUrl.substr(slashIdx));
    if (serviceName == 'web') {
      moreLink.innerHTML = MSG_MORE_WEB_RESULTS + ' &raquo;';
    } else if (serviceName == 'news') {
      moreLink.innerHTML = MSG_MORE_NEWS_RESULTS + ' &raquo;';
    } else {
      moreLink.innerHTML = 'More ' + serviceName +  ' results &raquo;';
    }
    moreLink.className = "gsc-trailing-more-results";
    moreResultsDiv.appendChild(moreLink);
    gscResultsDiv.appendChild(moreResultsDiv);
  } else {
    // No results were found.
    var div = createDiv(noResultsMessage,
                        "gsc-no-results");
    gscResultsDiv.appendChild(div);
  }
}

// HTML helper function.
function createDiv(opt_text, opt_className) {
  var el = document.createElement("div");
  if (opt_text) {
    el.innerHTML = opt_text;
  }
  if (opt_className) { el.className = opt_className; }
  return el;
}
