$.suggest = function(opt){
	opt = jQuery.extend({
     autoWidth:       1,
		 selector:        '#suggest',
		 target:          '#funds',
		 highlight:       '.highlight',
		 desc:            '.suggest_desc',
     script:          'suggest.php',
     searchVar:       'search=',
     method:          'POST',
     chars:            3
	}, opt);

  // get From Inputbox
 var offset     = $(opt.selector).offset();
 var boxwidth   = ($(opt.selector).width()) - 3;
 var highselect = opt.highlight.substr(1);

  // Spawn ul - Browser Autocomplete Off
  $("body").append('<ul id="'+opt.target.substr(1)+'"></ul>');
  $(opt.selector).attr("autocomplete", "off");

 // Style Searchfunds and hide
     if (opt.autoWidth == true) {
      $(opt.target).css({
        position:"absolute",
        top: offset.top + 22,
        left: offset.left,
        width: boxwidth,
        zIndex: 999
      });
  } else {
      $(opt.target).css({
        position:"absolute",
        top: offset.top + 22,
        left: offset.left,
        zIndex: 999
     });
  }
$(opt.target).hide();


  // Keylog Listener
  $(function() {
    $(opt.selector).keydown(function(key) {
      // wenn Leer oder Backspace gedrückt wird
      if ($(opt.target).html() == "" || key.which == 8)
      $(opt.target).html("").slideUp();

      /* Wenn anzahl Buchstaben gleich einstellung
         und Backspace nicht gedrückt wird */
      var act_length = $(opt.selector).val().length ;
      if (act_length > opt.chars & key.which != 8) {

        switch(key.keyCode) {
          case 38: // up
            if ($(opt.target + " li:first-child").hasClass(highselect)) return false;
            $("li" + opt.highlight).removeClass(highselect).prev().addClass(highselect);
          break;

          case 40: // down
            if ($(opt.target + " li:last-child").hasClass(highselect)) return false;
            $("li" + opt.highlight).removeClass(highselect).next().addClass(highselect);
          break;

          case 9:  // tab
          case 13: // return

          // Inputfeld Blur wegen Enter bei Formularen
            $(opt.selector).blur();
            
            var link = $("li" + opt.highlight).attr("rel");
               if ($(opt.target).html() != "")
                window.location.href=link;
          break;

          case 27: // ESC
            $(opt.target).hide();
          break;

          default:  // alle andren
            $.ajax({
              url: (opt.script),
              data:     opt.searchVar + escape($(opt.selector).val()),
              type:     opt.method,
              timeout:  2000,
              dataType: 'json',

                success: function(json){
                  var output = "";

                  for (p in json) {
                    output += '<li class="item" rel="'+json[p].url+'">'+
                              json[p].title
                              +'<span class="'+opt.desc.substr(1)+'">'+json[p].desc+'</span>'
                              +'</li>';
                  }

                $(opt.target).html(output);

                  if ($(opt.target).html() != "") {
                    $(opt.target).slideDown();
                    $(opt.target + " li:first-child").addClass(highselect);

                    // Mouse Listener
                    $(opt.target + " li").mouseover(function(){
                      $(opt.target + " li").removeClass(highselect);
                      $(this).addClass(highselect);
                    }).click(function () {
                      var link = $(this).attr("rel");
                      window.location.href=link;
                    });
                  }
                }
            });
        }
      }
    });
  });
}