jQuery.fn.liveSearch = function (conf) {
  var config = jQuery.extend({
    url:			'http://www.hotelier.de/'+'live_search.php?type=', 
    firstValue:		'Suchbegriff',
    id:			'jquery-live-search', 
    duration:		400, 
    typeDelay:		200,
    loadingClass:	'loading', 
    onSlideUp:		function () {}
  }, conf);
  
  config.url = config.url+config.art+'&we_lv_search_0=';
  var liveSearch = jQuery('#' + config.id);
  if (!liveSearch.length) {
    liveSearch = jQuery('<div id="' + config.id + '"></div>').appendTo(document.body).hide().slideUp(0);
    jQuery(document.body).click(function(event) {
      var clicked = jQuery(event.target);
      if (!(clicked.is('#' + config.id) || clicked.parents('#' + config.id).length || clicked.is('input'))) {
        liveSearch.slideUp(config.duration, function () {
          config.onSlideUp();
        });
      } else {
    }
  });
}

return this.each(function () {
  var input		= jQuery(this).attr('autocomplete', 'off');
  var resultsShit	= parseInt(liveSearch.css('paddingLeft'), 10) + parseInt(liveSearch.css('paddingRight'), 10) + parseInt(liveSearch.css('borderLeftWidth'), 10) + parseInt(liveSearch.css('borderRightWidth'), 10);
  
  input.focus(function () {
    if (this.value == config.firstValue) {
      this.value = '';
    }
    
    if (this.value !== '') {
      if (liveSearch.html() == '') {
        input.keyup();
      } else {
        liveSearch.slideDown(config.duration);
      }
    }
  })

  .keyup(function () {
    if (this.value != this.lastValue) {
      input.addClass(config.loadingClass);
      var q = this.value;
      if (this.timer) {
        clearTimeout(this.timer);
      }

      this.timer = setTimeout(function () {
        jQuery.get(config.url + q, function (data) {


          input.removeClass(config.loadingClass);
          if (data.length && q.length) {
            var tmpOffset	= input.offset();
            var inputDim	= {
              left:		tmpOffset.left, 
              top:		tmpOffset.top,
              width:		input.outerWidth(),
              height:		input.outerHeight()
            };
            
            inputDim.topNHeight	= inputDim.top + inputDim.height;
            inputDim.widthNShit	= inputDim.width - resultsShit;
            
            liveSearch.css({
              position: 'absolute',
              left:      inputDim.left + 'px', 
              top:       inputDim.topNHeight + 'px',
              width:     inputDim.widthNShit + 'px'
            });
            liveSearch.html(data).slideDown(config.duration);
          } else {
            liveSearch.slideUp(config.duration, function () {
              config.onSlideUp();
            });
          }
        })
      }, config.typeDelay);
         this.lastValue = this.value;
      }  
    });
  });
};