var RemoteObservable = function(name,events)
{
	  this.name=name;
	  this.lastFrom=null;
	  if(Ext.isArray(events)) this.addEvents.apply(this,events);
}
Ext.extend(RemoteObservable,Ext.util.Observable,{
	  setIM:function(im)
	  {
	  	this.im=im;
	  	this.jidtailor = '@'+im.getConnection().domain+'/'+im.getConnection().resource;
	  },
	  /**
	   * 向某个特定用户引发事件,调用方式 fireUserEvent(username,eventName,eventArgs1,eventArgs1...);
	   */
	  fireUserEvent:function()
	  {
	  	 if(arguments.length<2) return ;
	  	 var userName = arguments[0];
	  	 if(userName.indexOf('@')<1) userName+=this.jidtailor;
	  	 var msg = new JSJaCMessage();
	  	 msg.setTo(userName);
	  	 msg.appendNode(
	  	 	'observalbe',{xmlns:'jabberd:observalbe',name:this.name},[msg.getDoc().createTextNode(Ext.util.JSON.encode(Array.prototype.slice.call(arguments,1)))]
	  	 );
	  	 this.im.getConnection().send(msg);
	  },
	  readEventData:function(data,from)
	  {
	  	   this.lastFrom=from;
	  	   this.fireEvent.apply(this,Ext.util.JSON.decode(data));
	  }
});