/*
 *	Chat Module
 *	Copyright 2008 Petro Salema
 *	www.petrosalema.com
 *	
 *	TODO: Create link parser
 *
 * --------------------------------------------- */


var Chat = Class({


	DELAY: 5000,		// Milliseconds between retrieving chat messages
	MESSAGE_LIMIT: 1000,	// Maximum number of characters in message (i think 1024 is the url limit)
	DEFAULT_MESSAGE: 'Type your message here',

	modules: [],
	focus: null,		// Which chat_textarea are we focused on
	current_module: null,	// Which module are we dealing with
	username: 'Michael Scoffield',
	stream: null,
	reset_stream: null,


	init: function()
	{
		// mhhh...
	},


	start: function(chat_module_id)
	{
		this.reset_stream = new Ajax.Request('scripts/reset_chat.php', null, true);

		var base = "\n"
			 +	"<div class=\"chat_top\">"
			 +		"<div class=\"chat_avatar\"></div>"
			 +		"<div class=\"chat_userinfo\">"
			 +			"Name: <input type=\"text\" value=\"Who are you\" class=\"chat_username\" />"
			 +			"<br />"
			 +			"<span class=\"chat_listeningto\"></span>"
			 +		"</div>"
			 +		"<div class=\"clear\"></div>"
			 +	"</div>"
			 +	"<div class=\"chat_input\"><input type=\"text\" class=\"chat_textarea\" /></div>"
			 +	"<div class=\"chat_messages\">"
			 +		"<div class=\"chat_message\"><div class=\"chat_text\"><b>Welcome to Wimbomedia chat!</b></div></div>"
			 +	"</div>"
			 + "\n";

		var id = chat_module_id;
		var module = document.getElementById(id);

		module.innerHTML = base;

		this.modules.push({id:id, module:module});

		var textarea = Util.getElementsByClassName('chat_textarea', module)[0];
		Util.addEvent(textarea, 'focus', this.focusOn.bindWithEventTo(this, id));
		Util.addEvent(textarea, 'blur', this.focusOff.bindWithEventTo(this));
		textarea.style.color = "#bbb";
		textarea.value = this.DEFAULT_MESSAGE;

		this.focus = textarea;

		Wimbomedia.KeyEvents.addEvent('enterPressed', this.sendMessage.bindTo(this));

		if(this.stream) { Ajax.remove(this.stream.id); }
		this.stream = new Ajax.Request('scripts/get_chat_messages.php', this.printMessages.bindTo(this), true, this.DELAY);
	},


	sendMessage: function()
	{
		var ta = this.focus;

		if(!ta) return;

		var msg = ta.value.strip().stripTags();

		if(msg == '' || msg == this.DEFAULT_MESSAGE) return;

		if(msg.length > this.MESSAGE_LIMIT) { msg = msg.substring(0, this.MESSAGE_LIMIT); }

		ta.value = '';

		var messages = this.currentModule();
		var username = this.currentUsername().value.strip().stripTags();

		if(username == '') { alert("Don't forget a name."); return; }

		new Ajax.Request('scripts/send_chat_message.php?user=' + username + '&msg=' + msg, this.printMessages.bindTo(this), true);
	},


	printMessages: function(payload)
	{
		if(payload == '') return;

		var messages = this.currentModule();
		messages.innerHTML = payload + messages.innerHTML;

		Wimbomedia.Handle.resize();
	},


	currentModule: function()
	{
		//if(!this.focus) return false;

		return Util.getElementsByClassName('chat_messages', document.getElementById(this.current_module))[0];
	},


	currentUsername: function()
	{
		//if(!this.focus) return false;;

		return Util.getElementsByClassName('chat_username', document.getElementById(this.current_module))[0];
	},


	focusOn: function(e, id)
	{
		var f = this.focus = e.target || window.event.srcElement;
		f.parentNode.style.borderColor = '#08c';

		this.current_module = id;

		if(f.value == this.DEFAULT_MESSAGE)
		{
			f.value = '';
			f.style.color = "#333";
		}
	},


	focusOff: function(e)
	{
		this.focus.parentNode.style.borderColor = '#ddd';
		this.focus = null;
	},


	hide: function(module_index)
	{
		var m = document.getElementById('chat_module_' + module_index);

		//TimeManagement.createTimer(Util.animateResizing, 100, m, 'auto', 1);
	}


}); /* -------------------- END of Chat CLASS -------------------- */