var searchresults_opacity = 0;
var effect_func = searchresults_roll_in;
var effect_enabled = false;
var request_in_progress = false;
var searchinput_not_sent = false;
var old_searchinput = null;


function searchresults_effect_start(func)
{
  effect_func = func;
  if (!effect_enabled)
  {
    effect_enabled = true;
    window.setTimeout(searchresults_effect, 10)
  }
}

function searchresults_effect()
{
  effect_func();
  if (effect_enabled)
    window.setTimeout(searchresults_effect, 100);

  $('searchresults').style.opacity = (searchresults_opacity / 100.0);
}

function searchresults_roll_in()
{
  searchresults_opacity -= 10;
  if (searchresults_opacity <= 0)
    effect_enabled = false;
}


function searchresults_roll_out()
{
  searchresults_opacity += 10;
  if (searchresults_opacity >= 100)
  {
    effect_enabled = false;
  }
}


function search_result(req)
{
  // Prepare effects

  searchresults_opacity = 0;
  searchresults_effect_start(searchresults_roll_out);
  $('searchinput').style.backgroundColor = 'white';

  // Evaluate response

  var responseXML = new DOMParser().parseFromString(req.responseText, 'text/xml');
  var entries = responseXML.getElementsByTagName('search');
  var i;

  $('searchresults').innerHTML = '';
  for(i = 0; i < entries.length; i++)
  {
    var entry_id = entries[i].getElementsByTagName('entry_id')[0].firstChild.nodeValue;
    var entry_title = entries[i].getElementsByTagName('title')[0].firstChild.nodeValue;

    var li = document.createElement('li');
    var a = document.createElement('a');
    a.appendChild(document.createTextNode(entry_title));
    a.setAttribute('href', 'index.rb?entry=' + entry_id);
    li.appendChild(a);
    $('searchresults').appendChild(li);
  }

  // Send next?
  request_in_progress = false;
  if (searchinput_not_sent)
    send_search_request();
}

function searchinput_keyup(input)
{
  // Has nothing changed?

  if (input.value == old_searchinput)
    return;
  old_searchinput = input.value;

  // Prepare effects

  searchresults_opacity = 30;
  searchresults_effect_start(searchresults_roll_in);
  $('searchinput').style.backgroundColor = '#ffcfcf';


  if (request_in_progress)
    searchinput_not_sent = true;
  else
    send_search_request();
}

function send_search_request()
{
  new Ajax.Request('index.rb', {
    method: 'get',
    parameters: 'format=raw&search=' + $('searchinput').value,
    onSuccess: search_result});
  request_in_progress = true;
  searchinput_not_sent = false;
}
