$().ready(function() {

  var input = '#searchfield input[name="search"]';
  var key = '#sidebar #searchfield input[name="key"]';
  var value = '#sidebar #searchfield input[name="value"]';
  var pulldown = '#sidebar #autosearch';
  var modal = '#sidebar #userbar';


  var data = pulldown+' .data';
  var defaultdata = $(data).html();

  var queue = Array();
  var busy = false;
  

  $(input).keyup(function() {
    // 3 Char Minimum
    if ($(input).val().length >= 3) {
    
      // Simple queue
      if (queue.length) {
        queue = Array();
        queue.push($(input).val());
      }
      
      else {
        queue.push($(input).val());
      }
    
      if (!busy) {
        busy = true;
        //jQuery.queue( $(input)[0], 'suggest', function() {
        $.ajax({
          type: 'POST',
          url: '/search/suggest/',
          data: {term: queue[0]},
          success: setsuggest,
          dataType: 'html'
        });
      //});
        queue.shift();
      }

    } else {
      setsuggest('');
    }

  });


  // Setup suggestion response
  function setsuggest(html) {
    busy = false;
    $(data).html(html);
    setdefault(true);
    
    if (queue.length) {
      $(input).keyup();
    }
    
    else {
      
      // TODO: expects only one suggestion for beta launch
      $(data).find('div.pair').click(function() {
      
        var selected = $(this);
        var type = $(this).find('input').attr('name');
        
        // Remove existing condition of same type
        var existing = $('#filters').find('input[name="'+type+'"]');
        if ($(existing).length) {
          $(existing).parent().remove();
        }
        
        // Add selected condition
        var inserted = $('#filters').prepend(selected);
        
        // Submit the form
        $(inserted).parents('form').submit();
        
      });
      
    }
  }
  
  // Setup default value
  function setdefault(hasfocus) {
   
    // Focused
    if (hasfocus) {

      // Show on empty
      if (jQuery.trim($(input).val()) == '' || $(input).val() == 'Search...') {
        $(input).val('');
        $(data).html(defaultdata);
      }
      
      // Show on no suggestions
      else if (!$(data).children().length) {
        $(data).html(defaultdata);
      }
    }
    
    // Blurred
    else {    
      if (jQuery.trim($(input).val()) == '') {
        $(input).val('Search...');
        $(data).html(defaultdata);
      }
    }
  }
  
  // Setup search box
  $(input).focus(function(e) {
    $(pulldown).fadeIn(300);
    setdefault(true);
  });
  $(input).blur(function(e) {
    $(pulldown).fadeOut(300);
    setdefault();
  });
  
  
});
