Ajax.CachedAutocompleter = Class.create();

Object.extend(Object.extend(Ajax.CachedAutocompleter.prototype, Autocompleter.Base.prototype), {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
    this.cache                 = {};
  },

  getUpdatedChoices: function() {

    this.startIndicator();

    var t = this.getToken();
    if(this.cache[t]) {
        this.updateChoices(this.cache[t]);
    } else {
        var entry = encodeURIComponent(this.options.paramName) + '=' +
          encodeURIComponent(this.getToken());

        this.options.parameters = this.options.callback ?
          this.options.callback(this.element, entry) : entry;

        if(this.options.defaultParams)
          this.options.parameters += '&' + this.options.defaultParams;

        new Ajax.Request(this.url, this.options);
    }
  },
  onComplete: function(request) {
    this.updateChoices(this.cache[this.getToken()] = request.responseText);
  }
});

new Ajax.CachedAutocompleter("plzsuche", "plzsuche_choices", "/plzsuche-autocomplete", {
  paramName: "value",
  minChars: 2,
  indicator: 'indicator1',
  afterUpdateElement : submitForm
});

function submitForm() {

  document.forms["partnersuche"].submit();
}
