text: var FancyWebSocket = function(url)
  {
  	var callbacks = {};
  	var ws_url = url;
  	var conn;
  
  	this.bind = function(event_name, callback){
  		callbacks[event_name] = callbacks[event_name] || [];
  		callbacks[event_name].push(callback);
  		return this;// chainable
  	};
  
  	this.send = function(event_name, event_data){		
  		var payload = JSON.stringify({event:event_name, data: event_data});
  		// this.conn.send( event_data );
  		this.conn.send( payload );
  		return this;
  	};
  
  	this.connect = function() {
  		if ( typeof(MozWebSocket) == 'function' )
  			this.conn = new MozWebSocket(url);
  		else
  			this.conn = new WebSocket(url);
  
  		// dispatch to the right handlers
  		// this.conn.onmessage = function(evt){
  		// 	dispatch('message', evt.data);
  		// };
  
  		// dispatch to the right handlers, if JSON line 14
  		this.conn.onmessage = function(evt){			
  			try {
  			  	var json = JSON.parse(evt.data);
  			  	dispatch(json.event, json.data)
  			} catch (exception) {
  			  	dispatch('message', evt.data);
  			}
  			// var json = JSON.parse(evt.data);
  			// dispatch(json.event, json.data)
  		};
  
  		this.conn.onclose = function(){dispatch('close',null)}
  		this.conn.onopen = function(){dispatch('open',null)}
  	};
  
  	this.disconnect = function() {
  		this.conn.close();
  	};
  
  	var dispatch = function(event_name, message){
  		var chain = callbacks[event_name];
  		if(typeof chain == 'undefined') return; // no callbacks for this event
  		for(var i = 0; i < chain.length; i++){
  			chain[i]( message )
  		}
  	}
  };