/**
 * Observer - Observe formelements for changes
 *
 * @version		1.0rc1
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Observer = new Class({

  options: {
    periodical: false,
    delay: 1000
  },

  initialize: function(el, onFired, options){
    this.setOptions(options);
    this.addEvent('onFired', onFired);
    this.element = $(el);
    this.listener = this.fired.bind(this);
    this.value = this.element.getValue();
    if (this.options.periodical) this.timer = this.listener.periodical(this.options.periodical);
    else this.element.addEvent('keyup', this.listener);
  },

  fired: function() {
    var value = this.element.getValue();
    if (this.value == value) return;
    this.clear();
    this.value = value;
    this.timeout = this.fireEvent.delay(this.options.delay, this, ['onFired', [value]]);
  },

  clear: function() {
    $clear(this.timeout);
    return this;
  }
});

Observer.implement(new Options);
Observer.implement(new Events);