//jQuery.noConflict(); // For mootools
jQuery.postJSON = function(url, data, callback) {
    jQuery.ajax({
        'url': url,
        'type': 'post',
        'processData': false,
        'data': 'search='+data,
        success: function (data) { callback(JSON.parse(data)); }
    });
};

jQuery(document).ready(function(){

	var input_search = jQuery("input[name=search]");
        var last_request = "";
        var NOTHING = -42
        var now_selected = NOTHING;
        var suggestions_count = 0;
        var search_str = "";
        input_search.attr("autocomplete", "off");
        
	input_search.keyup(function (event) {
                if (event.keyCode == 40 ) { // DOWN
                  if (jQuery("div.suggestions").css('display') == 'none')
                    return;
                  
                  if (now_selected == NOTHING) {
                    // Selecting first element
                    now_selected = 0;
                    jQuery("a#s_"+now_selected).addClass("selected");
                    search_str = input_search.val();
                    input_search.val(jQuery("a#s_"+now_selected).html());
                  } else if (now_selected == suggestions_count-1){
                    // Selecting last element           
                    jQuery("a#s_"+now_selected).removeClass("selected");         
                    now_selected = NOTHING;
                    input_search.val(search_str);
                  } else {
                    // Selecting in the middle or in the end
                    jQuery("a#s_"+now_selected).removeClass("selected");
                    now_selected++;
                    jQuery("a#s_"+now_selected).addClass("selected");
                    input_search.val(jQuery("a#s_"+now_selected).html());
                  }
                  
                  return false;
                  
                } else if (event.keyCode == 38) { // UP
                  if (jQuery("div.suggestions").css('display') == 'none')
                    return;
                  
                  if (now_selected == NOTHING) {
                    // Selecting last element
                    now_selected = suggestions_count-1;
                    jQuery("a#s_"+now_selected).addClass("selected");
                    search_str = input_search.val();
                    input_search.val(jQuery("a#s_"+now_selected).html());                    
                  } else if (now_selected == 0){
                    // Selecting first element           
                    jQuery("a#s_"+now_selected).removeClass("selected");         
                    now_selected = NOTHING;
                    input_search.val(search_str);
                  } else {
                    // Selecting in the middle or in the end
                    jQuery("a#s_"+now_selected).removeClass("selected");
                    now_selected--;
                    jQuery("a#s_"+now_selected).addClass("selected"); 
                    input_search.val(jQuery("a#s_"+now_selected).html());                   
                  }
                  
                  return false;
                  
                } else { // COMMON TYPING
                  var request = jQuery(this).val();
                  if (last_request == request)
                      return;
                  
                  if (request.length > 0) {
                          // Some remembering
                          search_str = request;
                          now_selected = NOTHING;
                          // Clear HTML
                          jQuery("div.suggestions").css('display', 'none');
                          jQuery("div.suggestions").html("");
                          // Querying
                          jQuery.postJSON('/search/suggest/', request,function(data) {
                                  // Parsing
                                  if (data) {
                                      for (i=0; i < data.length; i++) {
                                            if (jQuery("a#s_" + i).length == 0)
                                              jQuery("div.suggestions").append(" \
                                                      <div> \
                                                              <a id='s_" + i +"' href='javascript:Go(\""+data[i]+"\");'>" + data[i] + "</a> \
                                                      </div>");
                                      }
                                      suggestions_count = data.length;
                                      // Showing
                                      if (jQuery("div.suggestions").css('display')=='none') {
                                          jQuery("div.suggestions").css('display', 'inline-block');
                                          jQuery("div.suggestions").css('position', 'absolute');
                                          var top_pos = 13 + input_search.position().top + input_search.outerHeight();
                                          //var top_pos = input_search.position().top + input_search.outerHeight(true);
                                          jQuery("div.suggestions").css('top', top_pos);
                                          var left_pos = input_search.position().left;
                                          jQuery("div.suggestions").css('left', left_pos);
                                          jQuery("div.suggestions").css('width', input_search.width());
                                      }
                                  } else {
                                      jQuery("div.suggestions").css('display', 'none');
                                  }
                          });
                          // Saving request
                          last_request = request;
                  } else {
                          // Hiding
                          jQuery("div.suggestions").css('display', 'none');
                  }
              }
	});


});

