/**
 * Extender jQuery med funk for å gjøre AJAX søk i header og på Apedia
 *
 * Funksjonaliteten er basert på kode fra denne plugin:
 * http://dev.jquery.com/view/trunk/plugins/autocomplete/jquery.autocomplete.js
 */
if(typeof jQuery != "undefined"){
  ;(function($){
  
    jQuery.fn.extend({
      apsearch: function(options,callback){
        options = $.extend( {},
                            $.apsearcher.defaults,
                            options );
        $(options.divTarget+' a.close').click(function(e){
          $(options.divTarget).hide();
          return false;
        });
        return this.each(function(){
          new $.apsearcher(this,options,callback);
        });
      }
    });
    
    $.apsearcher = function(input,options,callback){

      var KEY = {
        SHIFT: 16,
        END: 35,
        HOME: 36,
        LEFT: 37,
        RIGHT: 39,
        BACKSPACE: 8,
        ENTER: 13
      };
  
      var $input = $(input);
      var timeout;
      var changing = false;
      var current_request_id = 0;
      
      $input.keydown(function(event){
        switch(event.keyCode) {
          case KEY.ENTER:
            event.preventDefault();
            break;
          
          default:
            break;
        }
      });
      
      $input.keyup(function(event){
        switch(event.keyCode) {
        
          case KEY.SHIFT:
          case KEY.END:
          case KEY.HOME:
          case KEY.LEFT:
          case KEY.RIGHT:
            break;
          
          case KEY.BACKSPACE:
            clearTimeout(timeout);
            timeout = setTimeout(onChange, options.delay*2);
            break;
        
          default:
            clearTimeout(timeout);
            timeout = setTimeout(onChange, options.delay);
            break;
        }
        if(jQuery.isFunction(callback)){
          callback.apply($(this));
        }
      }).focus(function(){
      }).blur(function(){
        if(jQuery.isFunction(callback)){
          callback.apply($(this));
        }
      });
      
      /**
       * Henter ut hits på listitems, ved å søke på tekst i inputfelt, sender tilbake array med treff som jQuery objekter
       */ 
      function getHits(my_request_id){
        $.post( options.formTarget, { q: $input.val().toLowerCase() }, function(html){
          if(my_request_id==current_request_id)
          {
            $(options.divTarget+' div.results').html(html);
            $(options.divTarget+' a.close').show();
            $(options.divTarget+' a.more').show();
            changing = false;
          }
        }, "html" );
      }
      
      /**
       * Ved keydown så henter vi ut antall hits som matcher tekst, om det er hits så fader vi ut alle synlige treff (om det er noen) før vi fader inn treffene...
       * Obs, merk at changing ikke settes false her, den blir satt false i callbacken til fadeIn() av resultatet
       */   
      function onChange(){
        if(!changing){
          if($input.val().length>=2){
	          changing = true;
	          current_request_id = parseInt(Math.random()*100000);
	          $(options.divTarget+' div.results').html('<p>Søker...</p>');
	          $(options.divTarget+' a.close').hide();
	          $(options.divTarget+' a.more').hide();
	          $(options.divTarget).show();
	          var hits = getHits(current_request_id);
	        }else{
            $(options.divTarget).hide();
	        }
        }
      }
    };
  
    $.apsearcher.defaults = {
      delay: 300,
      defaultText: "Søk",
      divTarget:   "div#ajax-search",
      formTarget:  "/dna/header/"
    };
  })(jQuery);
}
