function select_search_result ( event )
{
  if (event.keyCode == Event.KEY_DOWN)
  {
    if (e = $('search_result_0') && !Prototype.Browser.IE6)
      e.focus();

    Event.stop(event);
  }

  if (event.keyCode == 27) // escape
    search_hide_results(true);

  return true;
}

function select_next_search_result ( event, i )
{
  if (event.keyCode == Event.KEY_DOWN || event.keyCode == Event.KEY_UP)
  {
    i += event.keyCode == Event.KEY_DOWN ? 1 : -1;
    if (e = ( i < 0 ) ? $('keyword') : $('search_result_' + i))
      e.focus();
    Event.stop(event);
  }

  if (event.keyCode == 27) // escape
    search_hide_results(true);

  return true;
}

// TODO is this obsoleted? used anywhere - MB, 2010-06-21
function search_show_results ( ) {
  $$("div#search_result img.spinner").first().show();
  $("search_result_posts").update("");
  $("keyword").focus();
  $("search_result").show();
}

function search_hide_results ( clear ) {
  $("search_result").hide();
  if (clear) { search_reset_keyword(); }
}

function search_reset_keyword ( ) {
  var e = $("keyword");
  e.blur();
  e.value = "";
}

function search_activate_keyword ( ) {
  var e = $("keyword");  
  e.value = "";
  e.onfocus = null;
  e.removeClassName("default");
}

function search_highlight_keyword ( keyword, css_selectors ) {
  if (keyword.length == 0) // regexp below breaks if keyword is empty
    return;

  var template = new Template('<em class="keyword">#{keyword}</em>');
  var elements = new Array();

  // try to avoid XSS
  keyword = keyword.escapeHTML();

  // selectors:
  selector = 'div.postView div.body span.meta a, div.postView div.body h3, div.postView div.body div.resource p, table.posts tr td.title p';
  $$(selector).each(function(e) {
    e.innerHTML = e.innerHTML.gsub(new RegExp(keyword.gsub(/(\W)/, function(match){ return "\\" + match[1]; }) + "(?![^<]*>)", "i"), function(m) {
      return template.evaluate({keyword: m.first()});
    });
  });
}

function search_highlight_keywords ( ) {
  var match = location.hash.match(/#keywords=([^&]+)/);
  
  if (match && match[1]) {
    var keywords = match[1].split(",").collect(function(keyword) {
      if ((stripped_keyword = new String(keyword).strip()) == "")
        return null;
      else
        return stripped_keyword;
    });
    
    keywords = keywords.compact();
    
    keywords.each(function(keyword){
      search_highlight_keyword(keyword);
    });
  }
}
