Chat = {
	controlUrl : "main_handler",
	messagingUrl : "main_handler",

	// MESSAGING SYSTEM
	doMessageCheckPrivate : function() {
		new Ajax.Request(Chat.messagingUrl, { method: 'post', parameters: 'a=16', onComplete: Chat.checkMessageReception });
	},
	
	checkMessageReception : function(r) {
		var messages = eval(r.responseText);
		for (i = 0; i < messages.length; i++) {
			var message = messages[i];

			if (message.from_id == 'GM') {
				Chat.drawMessageGlobalNotification(message.message);
				continue;
			}

			var chatWin = Windows.getWindow('chat_' + message.from_id);
			if (chatWin == undefined) {
				Chat.doMessageOpenWindow(message.from_id, message.from_name);
			}

			$('chat_area_chat_' + message.from_id).innerHTML = message.from_name + ": " + message.message + 
											  "<br>" + $('chat_area_chat_' + message.from_id).innerHTML;
		}
	},
	
	drawMessageGlobalNotification : function(msg) {
		var chatWin = new Window('GlobalNotification_' + (Math.random()*1000), {className: "dialog", title: "GLOBAL MESSAGE", zIndex:150, resizable: false, 
								 width:200, height:200, maximizable: false, hideEffect: Effect.hide});
		chatWin.getContent().innerHTML = "<div style='padding:10px' text-align='center'><h1><font color='red'>" + msg + "</font></h1></div>";
		chatWin.setDestroyOnClose();
		chatWin.showCenter();
	},

	doMessageOpenWindow : function(pId, pName) {
		var chatWin = new Window('chat_' + pId, {className: "dialog", title: "Message to: " + pName, zIndex:150, resizable: true, 
								 width:250, height:250, maximizable: false, hideEffect: Effect.hide});
		chatWin.getContent().innerHTML = "<div class='chatMessageDialog' id='chat_area_" + chatWin.getId() + "'></div>"+
				"<div class='chatSayDialog'>"+
				"	<input type='text' id='message_entry_" + chatWin.getId() + "' name='" + chatWin.getId() + "' value='' style='width: 80%;vertical-align:text-top;'>"+
				"	<input type='submit' id='message_button_" + chatWin.getId() + "' name='" + chatWin.getId() + "' value='say' class='button'>"+
				"</div>";
		chatWin.setDestroyOnClose();
		chatWin.showCenter();

		Chat.doMessageSetObservers(chatWin.getId());
	},

	doMessageSetObservers : function(wId) {
		Event.observe($('message_button_' + wId), 'click', Chat.doMessageSay, false);
		Event.observe($('message_entry_' + wId), 'keyup', Chat.doMessageKeyIntercept, false);
	},

	doMessageSay : function(e) {
		wId = Event.element(e).name;

		if ($('message_entry_' + wId).value != '') {
			new Ajax.Request(Chat.messagingUrl, { method: 'post', parameters: 'a=15&p=' + wId + '&m=' + $('message_entry_' + wId).value, onComplete: null });
			$('chat_area_' + wId).innerHTML = "<font color=\"white\">me: " + $('message_entry_' + wId).value + 
											  "</font><br>" + $('chat_area_' + wId).innerHTML;

			$('message_entry_' + wId).value = '';
			$('message_entry_' + wId).focus();
		}
	},
	
	doMessageKeyIntercept : function(e) {
		if (e.which) {
			if (e.which == Event.KEY_RETURN) {
				Chat.doMessageSay(e);
			}

			return;
		}

		if (window.event.keyCode) {
			if (window.event.keyCode == Event.KEY_RETURN) {
				Chat.doMessageSay(e);
			}

			return;
		}
	},
	
	// MAIN CHAT
	doChatStart : function() {
		Chat.doChatGet();
		Chat.doChatSetObservers();
	},
	
	doChatSetObservers : function() {
		Event.observe($('chat_button'), 'click', Chat.doChatSay, false);
		Event.observe($('chat_entry'), 'keyup', Chat.doKeyIntercept, false);
	},
	
	doChatGet : function() {
		new Ajax.PeriodicalUpdater('chat_area', Chat.controlUrl, { method: 'post',  parameters: 'a=3' });
	},

	doChatSay : function() {
		if ($('chat_entry').value != '') {
			new Ajax.Request(Chat.controlUrl, { method: 'post', parameters: 'a=2&m=' + $('chat_entry').value, onComplete: null });
			$('chat_entry').value = '';
			$('chat_entry').focus();
		}
	},
	
	doKeyIntercept : function(e) {
		if (e.which) {
			if (e.which == Event.KEY_RETURN)
				Chat.doChatSay();

			return;
		}

		if (window.event.keyCode) {
			if (window.event.keyCode == Event.KEY_RETURN)
				Chat.doChatSay();

			return;
		}
	}
}

Event.observe(window, 'load', Chat.doChatStart, false);