var Observer=new Class({Implements:[Options,Events],options:{periodical:false,delay:1E3},initialize:function(a,b,c){this.setOptions(c);this.addEvent("onFired",b);this.element=$(a)||$$(a);this.value=this.element.get("value");if(this.options.periodical)this.timer=this.changed.periodical(this.options.periodical,this);else this.element.addEvent("keyup",this.changed.bind(this))},changed:function(){var a=this.element.get("value");if(!$equals(this.value,a)){this.clear();this.value=a;this.timeout=this.onFired.delay(this.options.delay, this)}},setValue:function(a){this.value=a;this.element.set("value",a);return this.clear()},onFired:function(){this.fireEvent("onFired",[this.value,this.element])},clear:function(){$clear(this.timeout||null);return this}}),$equals=function(a,b){return a==b||JSON.encode(a)==JSON.encode(b)};
