var searchTimer; // for tracking keyup inactivity, search request will be sent only after 150 ms of inactivity
var searchTimestamp; // for tracking which request is the most recent

$(document).ready(function(){

  $('#searchForm ul li').live('mouseover',function(){
    $('#searchForm ul li').removeClass('hover');
    $(this).addClass('hover');
  });
  $('#searchForm ul li').live('mouseout',function(){
    $(this).removeClass('hover');
  });
  $('#searchForm input').focus(function() { $(this).val(''); $('#searchForm').find('ul li').remove(); });
  $('#searchForm input').keypress(function(e){
    return e.keyCode == 13 ? false : true;
  });
  $('#searchForm input').keyup(function(e) {
    if($.inArray(e.keyCode,Array(37,38,39,40,13)) > -1) { // arrows plus enter/return key
      var items = $('#searchForm ul');
      var moveTo = false;
      var current = $(items).find('li.hover');
      switch(e.keyCode){
        case 38: // move up
          if($(current).length){
            if($(items).find('li').index(current)>0){
              moveTo = $(current).prev('li');
            } else {
              $(items).find('li').removeClass('hover');
            }
          }
          break;
        case 40: // move down
          if($(current).length){
            if(($(items).find('li').index(current)+1)<($(items).find('li').length)){
              moveTo = $(current).next('li');
            }
          } else {
            moveTo = $(items).find('li:first');
          }
          break;
        case 13: // enter (either go to url or submit form)
          if($(current).length){
            if($(current).find('a').attr('href')!=''){
              window.location = $(current).find('a').attr('href');
            }
          } else {
            $(this).parents('form').submit();
          }
          break;
      }
      if(moveTo) {
        $(items).find('li').removeClass('hover');
        $(moveTo).addClass('hover');
      }
      return;
    }
    clearTimeout(searchTimer);
    if($(this).val().length > 0){
      $('#searchForm').addClass('searching'); // for the spinner
      query = $(this).val();
      timestamp = new Date().getTime();
      searchTimestamp = timestamp;
      searchTimer = setTimeout(function(){nrl_search(query,timestamp)},150);
    } else {
      searchTimestamp = 0;
      $('#searchForm').removeClass('active searching').find('ul li').remove();
    }
  });
  $('#searchForm input').blur(function() {
    clearTimeout(searchTimer);
    searchTimestamp = 0;
    $(this).val('Search');
    setTimeout( "$('#searchForm').removeClass('active searching')", 250 ); // delay required for result links to work
  });

});


function nrl_search(query,timestamp) {
  $.ajax({
    type: 'GET',
    dataType: 'jsonp',
    data: {'content-type':'application/jsonp','q': query,'num':3},
    url: '/pages/search.php',
    error: function(xhr,error) {
      listItems += '<li style="font-weight: bold;"><a href="/search?q='+encodeURI(query)+'&mode=fullsearch">Search All NRL Web Sites &rarr;</a></li>';
      $('#searchForm').removeClass('searching').addClass('active').find('ul').html(listItems);
    },
    success: function(data){
      if(timestamp == searchTimestamp){
        $('#searchForm').removeClass('searching');
        if($('#searchForm input').val().length > 0) {
          listItems = '';
          if(typeof data.RES.R != 'undefined' && data.RES.R[0] != null){
            $.each(data.RES.R, function(i,item){
              if(i<3){
                listItems += '<li><a href="'+item.U+'">'+item.T+'</a></li>';
              }
            });
          }
          listItems += '<li style="font-weight: bold;"><a href="/search?q='+encodeURI(query)+'&mode=fullsearch">Search All NRL Web Sites &rarr;</a></li>';
          $('#searchForm').addClass('active').find('ul').html(listItems);
        } else {
          $('#searchForm').removeClass('active').find('ul li').remove();
        }
      }
    }
  });
}

