var selected = 0;
var number_results = 0;
var current_search = '';
var last_keypress = 0;

function createRequestObject() {
  var ro;
  var browser = navigator.appName;
  if (browser == "Microsoft Internet Explorer") {
    ro = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
    ro = new XMLHttpRequest();
  }
  return ro;
}
 
var http = createRequestObject();
 
function sndReq(search) {
  if (current_search != search) {
    current_search = search;
    selected = 0;
    number_results = 0;
    if ((search != null ) && search.length > 0) {
      http.open('get', 'rpc.php?action=search&search='+search);
      http.onreadystatechange = handleResponse;
      http.send(null);
    } else {
      document.getElementById('searchsuggest').style.display = 'none';
    }
  }
}

function handleResponse() {
  if (http.readyState == 4) {
    var response = http.responseText;
    var update = new Array();
    document.getElementById('searchsuggest').innerHTML = '';
    if (response.indexOf('|' != -1) && response.length > 0) {
      document.getElementById('searchsuggest').style.display = 'block';
      update = response.split('|');
      document.getElementById('searchsuggest').innerHTML = '';
      var suggestions = update[1].split(',');
      number_results = suggestions.length;
      for(i=0;i<suggestions.length;i++) {
        var number = i+1;
        var suggest = '<div id="searchsuggest'+number+'" onmouseover="javascript:suggestionOver(this);" ';
        suggest += 'onmouseout="javascript:suggestionOut(this);" ';
        suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
        suggest += 'class="searchsuggestion">' + suggestions[i] + '</div>';
        document.getElementById('searchsuggest').innerHTML += suggest;
      }
    } else {
      document.getElementById('searchsuggest').style.display = 'none';
    }
  }
}
 
function suggestionOver(div_value) {
  div_value.className = 'searchsuggestionover';
}
 
function suggestionOut(div_value) {
  div_value.className = 'searchsuggestion';
}
 
function setSearch(value) {
  document.getElementById('searchfield').value = value;
  document.getElementById('searchsuggest').innerHTML = '';
  document.getElementById('searchsuggest').style.display = 'none';
  document.getElementById('search').submit();
}
 
function keyHandler(e) {

  var date = new Date();
  var time = date.getTime();

  if (last_keypress < time-100 || last_keypress == 0) {  

    last_keypress = time;
 
  if (number_results != 0) {
    // initialise vars
    var keycode = 0;
    var browser = navigator.appName;
 
    // setup correct object depending on browser
    if (browser == "Microsoft Internet Explorer") {
      keycode = window.event.keyCode;
    } else {
      keycode = e.which;
    }
 
    // perform action depending on key pressed
    switch (keycode) {
      case 38:
        if(selected != 0) {
          eval('searchsuggest'+selected+'.className = \'searchsuggestion\'');
        }
        selected = selected-1;
        if (selected < 1) {
          selected = number_results;
        }
        eval('searchsuggest'+selected+'.className = \'searchsuggestionover\'');
        break;
      case 40:
        if(selected != 0) {
          eval('searchsuggest'+selected+'.className = \'searchsuggestion\'');
        }
        selected = selected+1;
        if (selected > number_results) {
          selected = 1;
        }
        eval('searchsuggest'+selected+'.className = \'searchsuggestionover\'');
        break;
      case 13:
        document.getElementById('searchfield').value = eval('searchsuggest'+selected).innerHTML;
        document.getElementById('searchsuggest').style.display = 'none';
        break;
      case 27:
        document.getElementById('searchsuggest').style.display = 'none';
        break;
    }
  }
  }
}
