/**
 * Extender jQuery med funk for å gjøre dynamisk søk blant ansatte/jobber/nyheter - global på alle sider
 *
 * 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({
      globalsearch: function(options,callback){
        options = $.extend( {},
                            $.globalsearcher.defaults,
                            options );
        
        $(this).val(options.defaultText);
        $(options.divTarget).append('<a href="#" class="close" style="display:none;">Lukk</a>');
        $(options.divTarget+' a.close').click(function(e){
          $(this).hide();
          $(options.divTarget+' input').val(options.defaultText);
          $(options.divTarget+' div.results').hide();
          return false;
        });
        return this.each(function(){
          new $.globalsearcher(this,options,callback);
        });
      }
    });
    
    $.globalsearcher = function(input,options,callback){

      var KEY = {
        UP: 38,
        DOWN: 40,
        DEL: 46,
        TAB: 9,
        RETURN: 13,
        ESC: 27,
        COMMA: 188,
        PAGEUP: 33,
        PAGEDOWN: 34,
        BACKSPACE: 8
      };
  
      var $input = $(input);
      var timeout;
      var changing = false;
      var current_request_id = 0;
      
      $input.keyup(function(event){
        switch(event.keyCode) {
          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(){
        $input.val( $input.val()==options.defaultText ? '' : $input.val() );
      }).blur(function(){
        $input.val( $input.val()=='' ? options.defaultText : $input.val() );
        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( '/search/global/', { q: $input.val().toLowerCase() }, function(json){
          if( json.success ){
            if(my_request_id==current_request_id)
            {
	            $(options.divTarget+' div.results ul').html('');
	            if( json.results.length>0 ){
					      for( field in json.results ){
					        var styleclass = ((parseInt(field)+1)==json.results.length && json.results.length<6) ? 'last' : '';
					        if( json.results[field].url!="" ){
					          $(options.divTarget+' div.results ul').append('<li class="'+styleclass+'"><a href="'+json.results[field].url+'"><img src="'+json.results[field].image+'" /></a><span class="text"><span class="heading"><a href="'+json.results[field].url+'">'+json.results[field].title+'</a></span><br /><a href="'+json.results[field].url+'">'+json.results[field].text+'</a></span></li>');
					        }else{
                    $(options.divTarget+' div.results ul').append('<li class="'+styleclass+'"><img src="'+json.results[field].image+'" /><span class="text"><span class="heading">'+json.results[field].title+'</span><br />'+json.results[field].text+'</span></li>');
					        }
					      }
					      if( json.total_results>json.results.length ){
	                $(options.divTarget+' div.results ul').append('<li class="simple last"><span class="text">Total <i>'+json.total_results+'</i> treff.</span></li>');
					      }
	            }else{
	               $(options.divTarget+' div.results ul').append('<li class="simple last"><span class="text"><span class="heading">Beklager</span><br />Vi fant ingen treff på <i>'+$input.val()+'</i>.</span></li>');
	            }            
	            $(options.divTarget).children('div.results').show();
              $(options.divTarget+' a.close').show();
	          }
          }
        }, "json" );
      }
      
      /**
       * 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 && $input.val().length>2){
          changing = true;
          current_request_id = parseInt(Math.random()*100000);
          var hits = getHits(current_request_id);
          changing = false;
        }else{
          $(options.divTarget+' a.close').hide();
	        $(options.divTarget+' div.results ul').html('');
	        $(options.divTarget+' div.results').hide();
        }
      }
    };
  
    $.globalsearcher.defaults = {
      delay: 300,
      defaultText: "Søk",
      divTarget: "div#globalsearch"
    };
  })(jQuery);
}
