WebAppDir = '';
 path = document.location.pathname.split('/');
 if (path.length > 2) WebAppDir = '/' + path[1]; ROOT_CAT_KEY='11251405_';
 QUERY_FIELD_ID='befi_search_form_query';
 
 BeFiQueryAutoSuggest = new Class({
  DEFAULT_WAS: '',
  initialize: function(queryField,suggestField,suggestionHeaderText,noSuggestionText) {
   this.queryField = queryField;
   this.queryField.suggester = this;
   this.suggestField = suggestField;
 
   if (suggestField) this.suggestField = suggestField;
   else {
    this.suggestField = new Element('div');
    this.suggestField.id = 'autosuggest';
    this.suggestField.addClass('autosuggest');
    this.suggestField.setStyle('display','none');
    this.suggestField.injectInside(document.body);
   }
 
   this.counter = 0;   if (suggestionHeaderText || (suggestionHeaderText == '')) this.suggestionHeaderText = suggestionHeaderText;
   else this.suggestionHeaderText = 'Suchen Sie $query im Zusammenhang mit:';   if (noSuggestionText || (noSuggestionText == '')) this.noSuggestionText = noSuggestionText;
   else this.noSuggestionText = 'Der Suchbegriff $query ist unbekannt';    this.queryField.addEvent('keyup',this.autoSuggestDelayed.bindWithEvent(this));
   this.queryField.addEvent('keydown',this.autoSuggestDelayed.bindWithEvent(this));
   this.queryField.addEvent('mouseenter',this.showSuggest.bindWithEvent(this));
   this.queryField.addEvent('mouseleave',this.hideSuggest.bindWithEvent(this));
   this.queryField.addEvent('focus',this.showSuggest.bindWithEvent(this));
   this.suggestField.addEvent('mouseleave',this.hideSuggest.bindWithEvent(this));
   this.suggestField.addEvent('mouseenter',this.showSuggest.bindWithEvent(this));
   this.suggestField.addEvent('blur',this.hideSuggest.bindWithEvent(this));
  },
  hideSuggest: function() {
   this.suggestField.setStyle("display", "none");
  },
  showSuggest: function() {
   if (this.suggestField.innerHTML.length > 0)
    this.suggestField.setStyle("display", "block");
  },
  autoSuggestDelayed: function() {
   setTimeout(this.autoSuggest.bind(this,++this.counter),500);
  },
  autoSuggest: function(counter) {
   if ((this.queryField.value.length < 3) ||
    (this.queryField.value == BeFiQueryAutoSuggest.DEFAULT_WAS)) {
    this.suggestField.setStyle("display", "none");
    this.suggestField.setHTML('');
    this.lastQuery = '';
    
   } else if ((typeof(counter) == 'undefined') ||
    ((this.counter == counter) && (this.lastQuery != this.queryField.value))) {
    new Ajax(
      WebAppDir + '/geo?call=3' +
      '&query=' + this.queryField.value +
      '&catkey=' + ROOT_CAT_KEY,
     { 
      method: 'get',
      headers: ['Accept','text/json','If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
      async: true,
      onSuccess: this.setAutoSuggest.bind(this)
     }
    ).request();
    this.lastQuery = this.queryField.value;
   };
  },
  setAutoSuggest: function(transport) {
   var suggests = Json.evaluate('(' + transport + ')');
   var html = '';
   if (suggests.length > 0) {
    html += '<h3 class="m_u05">' + this.suggestionHeaderText + '</h3>';
    html += '<ul>';
    for(i=0; i < suggests.length; i++) {
     var parts = suggests[i].key.split('_');
     if (parts.length > 1) {
      var key = parts[parts.length-2];
      html += '<li><a href="' + WebAppDir + '/hamburg/' + key + '/" title="' + suggests[i].name + '">' + suggests[i].name + '</a></li>';
     }
    }
    html += '</ul>'
    html += '<a class="m_o10 m_l05 m_u05" style="background: none; padding-left: 0;" href="#" onclick="$(\'befi_search_form\').submit()">Alle anzeigen ...</a>';
   } else if (this.noSuggestionText != '' && (this.queryField.value.length > 2)) {
    html = '<span>' + this.noSuggestionText.replace(/\$query/g,'<strong>\'' + this.queryField.value + '\'</strong>') + '</span>';
   } else this.suggestField.setHTML('');
   if (html.length > 0) {
    this.suggestField.setHTML(html);
    if (this.suggestField.blur) this.suggestField.blur();
    
    if (this.coords == null) {
     this.coords = this.queryField.getCoordinates();
    }
    this.suggestField.setStyle('position','absolute');
    this.suggestField.setStyle('z-index','100');
    this.suggestField.setStyle('width',this.coords.width);
    this.suggestField.setStyle('left', this.coords.left);
    // ACHTUNG HACK!!!
    // AUS IRGENDWELCHEN GRUNDEN MUSS RELATIV ZU 'MAIN' POSITIONIERT WERDEN !!!!!
    this.suggestField.setStyle('top', this.coords.top - $('main').getCoordinates().top + this.coords.height-10);
    
    this.showSuggest();
    try {
     this.queryField.focus();
    } catch (e) {
    }
   }
  }
 });
 
  BeFiStreetAutoSuggest = new Class({
  Implements: [BeFiQueryAutoSuggest],
  autoSuggest: function(counter) {
   if ((this.queryField.value.length > 1) && ((typeof(counter) == 'undefined') ||
    ((this.counter == counter) && (this.lastQuery != this.queryField.value)))) {
    new Ajax(
     WebAppDir + '/geo?call=7' +
     '&streetname=' + this.queryField.value,
     { 
      method: 'get',
      headers: ['Accept','text/json','If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
      async: true,
      onSuccess: this.setAutoSuggest.bind(this)
     }
    ).request();
    this.lastQuery = this.queryField.value;
   }
  },
  setAutoSuggest: function(transport) {
   var suggests = Json.evaluate('(' + transport + ')');
   var html = '';
   if (suggests.length > 0) {
    html += '<ul style="margin: 0em; padding: 0; list-style-type: none;">';
    for(i=0; i < suggests.length; i++) {
     html += '<li><a href="javascript:void(0)" onclick="$(\'' + this.queryField.id + '\').value=\'' + suggests[i] + '\';$(\'' + this.suggestField.id + '\').setStyle(\'display\',\'none\');$(\'befi_resp_form\').submit();" title="' + suggests[i] + '">' + suggests[i] + '</a></li>';
    }
    html += '</ul>'
   } else if (this.noSuggestionText != '' && (this.queryField.value.length > 2)) {
    html = '<span>' + this.noSuggestionText.replace(/\$query/g,'<strong>\'' + this.queryField.value + '\'</strong>') + '</span>';
   } else this.suggestField.setHTML('');
   if (html.length > 0) {
    this.suggestField.setHTML(html);
    if (this.suggestField.blur) this.suggestField.blur();
    
    if (this.coords == null) {
     this.coords = this.queryField.getCoordinates();
    }
    this.suggestField.setStyle('position','absolute');
    this.suggestField.setStyle('z-index','100');
    this.suggestField.setStyle('border','1px solid #D8D8D8');
    this.suggestField.setStyle('overflow','visible');
    this.suggestField.setStyle('width',this.coords.width);
    this.suggestField.setStyle('left', this.coords.left);
    // ACHTUNG HACK!!!
    // AUS IRGENDWELCHEN GRUNDEN MUSS RELATIV ZU 'MAIN' POSITIONIERT WERDEN !!!!!
    this.suggestField.setStyle('top', this.coords.top - $('main').getCoordinates().top + this.coords.height-8);
    
    this.showSuggest();
    try {
     this.queryField.focus();
    } catch (e) {
    }
   }
  }
 });

 function toASCII7woWhitespace(text) {
  var text = text.toLowerCase();
  var t = '';
  for(i=0;i<text.length;i++) {
   var c = text.charAt(i);
   var code = c.charCodeAt(0);
   if (c==228) c='ae';
   else if (c==246) c='oe';
   else if (c==252) c='ue';
   else if (c==223) c='ss';
   else if ((c < 'a') || (c > 'z')) {
    c='_';
   }
   t += c;
  }
  return t.replace(/__*/g,'_');
 } function initYellowPageSuggest() { 
  if ($(QUERY_FIELD_ID))
   new BeFiQueryAutoSuggest($(QUERY_FIELD_ID),$('autosuggest'),'Meinten Sie ...','');
 } window.addEvent('domready',initYellowPageSuggest); 

