/*
 * NewsSearch.js
 */
google.load('search', '1.0');

function LoadSimpleNews() {
  google.setOnLoadCallback(OnLoadSimpleNews, true);
}
function LoadNews() {
  google.setOnLoadCallback(OnLoadNews, true);
}
function OnLoadSimpleNews() {
  new SimpleList();
}
function OnLoadNews() {
  new MainList();
}
function SimpleList() {
  this.results = document.getElementById("simple_news_results");
  var searcher = new google.search.NewsSearch();
  searcher.setNoHtmlGeneration();
  searcher.setSearchCompleteCallback(this,
                                     SimpleList.prototype.searchComplete,
                                     [searcher]
                                     );
  searcher.setResultSetSize(google.search.Search.SMALL_RESULTSET);
  searcher.execute("犬");
}

SimpleList.prototype.searchComplete = function(searcher) {

  this.clearResults();
  if (searcher.results && searcher.results.length > 0) {

    var ul = document.createElement("ul");
    ul.className = "ta_l";
    for (var i=0; i<searcher.results.length; i++) {
      var result = searcher.results[i];
      var li = document.createElement("li");
      var link = createLink(result.unescapedUrl, result.titleNoFormatting, "_blank");
      var content = createSpan(result.content);
      li.appendChild(link);
      li.appendChild(content);
      ul.appendChild(li);
    }
    this.results.appendChild(ul);
  }
}

SimpleList.prototype.clearResults = function() {
  removeChildren(this.results);
}

function MainList() {
  google.load('search', '1.0');
  google.search.Search.getBranding(document.getElementById("branding"));
  this.results = document.getElementById("news_results");
  this.cursor = document.getElementById("cursor");
  var searcher = new google.search.NewsSearch();
  searcher.setNoHtmlGeneration();
  searcher.setSearchCompleteCallback(this,
                                     MainList.prototype.searchComplete,
                                     [searcher]
                                     );
  searcher.setResultSetSize(google.search.Search.LARGE_RESULTSET);
  searcher.execute("犬");
}

MainList.prototype.searchComplete = function(searcher) {
  this.clearResults();
  if (searcher.results && searcher.results.length > 0) {

    for (var i=0; i<searcher.results.length; i++) {
      var result = searcher.results[i];
      var item_div = createDiv('','dognews_list');
      var link_div = createDiv();
      var link = createLink(result.unescapedUrl, result.titleNoFormatting, "_blank", "l b");
      var content_div = createDiv(result.content);
      var publisher_div = createDiv(result.publisher);
      link_div.appendChild(link);
      item_div.appendChild(link_div);
      item_div.appendChild(publisher_div);
      item_div.appendChild(content_div);
      this.results.appendChild(item_div);
    }

    if (searcher.cursor) {
      var cursorNode = createDiv(null, "gsc-cursor");
      for (var i=0; i<searcher.cursor.pages.length; i++) {
        var className = "gsc-cursor-page";
        if (i == searcher.cursor.currentPageIndex) {
          className = className + " gsc-cursor-current-page";
        }
        var pageNode = createDiv(searcher.cursor.pages[i].label, className);
        pageNode.onclick = methodClosure(this, this.gotoPage, 
                                         [searcher, i]); 
        cursorNode.appendChild(pageNode);
      }
      this.cursor.appendChild(cursorNode);
      var more = createLink(searcher.cursor.moreResultsUrl,
                            GSearch.strings["more-results"] + "&nbsp;&raquo;",
                            GSearch.LINK_TARGET_SELF,
                            "gsc-trailing-more-results");
      this.cursor.appendChild(more);
    }
  }
}

MainList.prototype.gotoPage = function(searcher, page) {
  searcher.gotoPage(page);
}

MainList.prototype.clearResults = function() {
  removeChildren(this.results);
  removeChildren(this.cursor);
}

/*
 * common function
 */
function removeChildren(parent) {
  while (parent.firstChild) {
    parent.removeChild(parent.firstChild);
  }
}

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;
}

function createSpan(opt_text, opt_className) {
  var el = document.createElement("span");
  if (opt_text) {
    el.innerHTML = opt_text;
  }
  if (opt_className) { el.className = opt_className; }
  return el;
}

function methodClosure(object, method, opt_argArray) {
  return function() {
    return method.apply(object, opt_argArray);
  }
}

function createLink(href, opt_text, opt_target, opt_className, opt_divwrap) {
  var el = document.createElement("a");
  el.href = href;
  if (opt_text) {
    el.innerHTML = opt_text;
  }
  if (opt_className) {
    el.className = opt_className;
  }
  if (opt_target) {
    el.target = opt_target;
  }
  if (opt_divwrap) {
    var div = createDiv(null, opt_className);
    div.appendChild(el);
    el = div;
  }
  return el;
}
