
	var req = null;
	var users = null;
	var messages = null;
	var tstamp = 0;

	var chatWindow = null;

	function openChatWindow()
	{
		if (!chatWindow || chatWindow.closed) {
			chatWindow = window.open(baseHref + 'members/chat/index.html', 'chatWindow', 'width=390,height=390,status=1');
		}
		chatWindow.focus();
	}

	function inviteChat(id)
	{
		sendRequest('invite', id, false);
		openChatWindow();
	}
	
	function chatInvitation()
	{
		if (chatter != '') {
			if (confirm(chatter + " invites you to join the chat room. Click Ok to accept or Cancel to decline.")) {
				openChatWindow();
			}
			else {
				sendRequest('act', 'decline', false);
			}
		}
	}
	SafeAddOnload(chatInvitation);
	
	function joinChat() {
		sendRequest('act', 'enter', true);
		window.setTimeout(refreshRequest, 5000);
	}

	function refreshRequest() {
		var d = new Date()
		sendRequest('salt', d.getTime(), true);
		window.setTimeout(refreshRequest, 5000);
	}

	function leaveChat() {
		sendRequest('act', 'leave', false);
	}

	function sendMessage() {
		var oText = document.forms['0'].msg;
		if (oText.value) {
			sendRequest('msg', oText.value, true);
			oText.value = '';
			oText.focus();
		}
		return false; // Cancel form submit
	}

	function sendRequest(nam, msg, waitReply) {
		if (req = createXMLHttpRequest()) {
			if (waitReply) {
				req.onreadystatechange = processReqChange;
				req.open("POST", baseHref + 'members/chat/server.html', true);
			}
			else {
				req.open("POST", baseHref + 'members/chat/server.html', false);
			}
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
			req.send(encodeURIComponent(nam) + '=' + encodeURIComponent(msg));
		}
		else {
			alert('Could not create XMLHttpRequest object.');
		}
	}
	
	function processReqChange() {
		if (window.req) {
	    	// only if req shows "loaded"
			if (req.readyState == 4) {
				// only if "OK"
				if (req.status == 200) {
					// alert(req.responseText);
					oXMLDom = new REXMLLite(req.responseText);
					oXMLDomTree = oXMLDom.rootElement;
					var oElements = oXMLDomTree.childElements;
					users = new Array();
					messages = new Array();
					for (var i = 0; i < oElements.length; i++) {
						switch (oElements[i].name) {
							case 'u':
								users[users.length] = oElements[i].text;
							break;
							case 'm':
								oElements[i].attribute('');
								var attributes = getAttributes(oElements[i].attributes);
								var ts = parseInt(attributes.ts);
								if (ts > tstamp) {
									var message = new Array();
									message[0] = attributes.tp;
									message[1] = oElements[i].text;
									messages[messages.length] = message;
								}
							break;
						}
					}
					if (ts > tstamp) {
						tstamp = ts;
					}
					reDraw();
				}
				else {
					alert("There was a communication problem with the server:\n" + req.statusText);
				}
			}
		}
	}
	
	function getAttributes(aAttributes){
		var oAttributes = new Object();
		if (aAttributes) {
			for (var i = 0; i < aAttributes.length; i++) {
				oAttributes[aAttributes[i][0]] = aAttributes[i][1];
			}
		}
		return oAttributes;
	}
	
	function reDraw() {
		// User list
		var str = '<b>Users</b><ul>';
		for (var i = 0; i < users.length; i++) {
			str += '<li>' + users[i] + '</li>';
		}
		str += '<ul>';
		oDiv = document.getElementById('userlist');
		oDiv.innerHTML = str;
		// Chat
		str = '';
		for (var i = 0; i < messages.length; i++) {
			str += '<p class="' + messages[i][0] + '">' + messages[i][1] + '</p>';
		}
		oDiv = document.getElementById('chat');
		oDiv.innerHTML += str;
		var oElements = oDiv.childNodes;
		oElements[oElements.length - 1].scrollIntoView(false);
	}

	function inArray(aArray, sKey)
	{
		for (var i = 0; i < aArray.length; i++) {
			if (aArray[i] == sKey) {
				return true;
			}
		}
		return false;
	}

	function createXMLHttpRequest()
	{
  		try {
			// Attempt to create it "the Mozilla way" 
			if (window.XMLHttpRequest) {
				return new XMLHttpRequest();
			}
			// Guess not - now the IE way
			if (window.ActiveXObject) {
				return new ActiveXObject('Microsoft.XMLHTTP');
			}
		}
		catch (ex) {}
		return false;
	}