var chatHandler = function()

in chat.js [30:90]


	var chatHandler = function(message) {
		var type = message.getAttribute('type');
		var from = message.getAttribute('from');

		switch (type) {
			// Incoming chat message
			case 'chat' : {
				var text = message.childNodes[0].data;

				if (from == last) from = '...';
				else {
					last = from;
					from += ':';
				}

				chat.innerHTML += '<span class=\'from\'>' + from + '&nbsp;</span><span class=\'text\'>' + text + '</span><br/>';
				break;
			}

			// Incoming ping request, add the person's name to your list.
			case 'ping' : {
				members.innerHTML += '<span class="member">' + from + '</span><br/>';
				break;
			}

			// someone new joined the chatroom, clear your list and
			// broadcast your name to all users.
			case 'join' : {
				members.innerHTML = '';
				if (user != null)
					amq.sendMessage(chatTopic, '<message type="ping" from="' + user + '"/>');
				chat.innerHTML += '<span class="alert"><span class="from">' + from + '&nbsp;</span><span class="text">has joined the room!</span></span><br/>';
				break;
			}

			// Screw you guys, I'm going home...
			// When I (and everyone else) receive a leave message, we broadcast
			// our own names in a ping in order to update everyone's list.
			// todo: Make this more efficient by simply removing the person's name from the list.
			case 'leave': {
				members.innerHTML = '';
				chat.innerHTML += '<span class="alert"><span class="from">' + from + '&nbsp;</span><span class="text">has left the room!</span></span><br/>';

				// If we are the one that is leaving...
				if (from == user) {
				// switch the input form
					join.className = '';
					joined.className = 'hidden';
					username.focus();

					user = null;
					amq.removeListener('chat', chatTopic);
				}
				if (user != null)
					amq.sendMessage(chatTopic, '<message type="ping" from="' + user + '"/>');
				break;
			}
		}

		chat.scrollTop = chat.scrollHeight - chat.clientHeight;
	};