var RealtimeAjax=new Class({Implements:[Options,Events],status:"first",options:{url:"",data:false,method:"get"},initialize:function(A){this.setOptions(A);window.addEvent("unload",this.cancel)},ping:function(){var A=this.options.data;this.canceled=false;switch($type(A)){case"element":A=$(A).toQueryString();break;case"object":case"hash":A=Hash.toQueryString(A);break}this.request=new Request.JSON({url:this.options.url,method:this.options.method,data:(A?A+"&":"")+"time="+this.time()+"&status="+this.status,onFailure:function(){this.fireEvent("onFailure");this.status="failure";this.pong()}.bind(this),onSuccess:function(B){this.status="success";if(B===false||B===null||B.nothing){this.fireEvent("onNothing",[B,this]);this.pulsed()}else{this.fireEvent("onPong",[B,this]);this.pong()}}.bind(this)});this.request.send();return this},pong:function(){if(this.canceled){return}this.fireEvent("onPung");this.ping()},time:function(){return parseInt(new Date().getTime().toString().substring(0,10))},cancel:function(){this.canceled=true;if(this.request){this.request.cancel()}return true}});