var MMSocket = function(moduleName) {
	var self = this;

	if (typeof moduleName !== 'string') {
		throw new Error('Please set the module name for the MMSocket.');
	}

	self.moduleName = moduleName;

	// Private Methods
	socket = io.connect('/' + self.moduleName);
	var notificationCallback = function() {};

	var onevent = socket.onevent;
	socket.onevent = function (packet) {
		var args = packet.data || [];
		onevent.call (this, packet);    // original call
		packet.data = ["*"].concat(args);
		onevent.call(this, packet);      // additional call to catch-all
	};

	// register catch all.
	socket.on('*', function (notification, payload) {
		if (notification !== '*') {
			//console.log('Received notification: ' + notification +', payload: ' + payload);
			notificationCallback(notification, payload);
		}
	});


	// Public Methods
	this.setNotificationCallback = function(callback) {
		notificationCallback = callback;
	};

	this.sendNotification = function(notification, payload) {
		if (typeof payload === 'undefined') {
			payload = {};
		}
		socket.emit(notification, payload);
	};
};
