function Chat(obj)
{
	this.init(obj);
};
Chat.inherit(object,{
	init:function(obj)
	{
		var this_=this;
		this_.obj = obj;
		log.init();
		user.Connect();
	}
});

var log = {
	log_el:null,
	init: function()
	{
		var this_ = this;
		this.msg = Tools.$('msg');
		this.log_el = Tools.$('log');
		this.chat = Tools.$('chat');
		Tools.$('send').onclick = Tools.delegat(this,this.sendMsg);
		this.msg.onkeyup = function(e){
			var key = new Number();
			if (Tools.browser.msie)
				key = event.keyCode;
			else
				key = e.which;
			if(key==13) Tools.delegat(this_,this_.sendMsg)()
		};//
		Tools.$('toogleChat').onclick = function ()
		{
			if(this_.chat.style.display=='block')
				this_.chat.style.display='none';
			else
				this_.chat.style.display='block';
		}
	},
	sendMsg: function()
	{
		var msg = this.msg.value;
		this.msg.value = '';
		this.print(msg);
		Tools.ajax.send('/chat/write/',{param:{msg:msg},type:'json'});
	},
	print: function(msg,nick)
	{
		if(msg=='')
			return;
		var now = new Date();
		var h = now.getHours();
		if(h<10)
			h='0'+h;
		var m = now.getMinutes();
		if(m<10)
			m='0'+m;
		var s = now.getSeconds();
		if(s<10)
			s='0'+s;
		var time = h+':'+m+':'+s;
		if(!nick)
			this.log_el.innerHTML+='<div class="msg your"><span class="date">'+time+'</span><span class="nick">Вы</span>:<span class="text">'+msg+'</span></div>';
		else
			this.log_el.innerHTML+='<div class="msg"><span class="date">'+time+'</span><span class="nick">'+nick+'</span>:<span class="text">'+msg+'</span></div>';
		this.log_el.scrollTop += 100;
	},
	show: function()
	{
		var this_ = this;
		this.log_el.style.display='block';
	},
	hide: function()
	{
		var this_ = this;
		this.log_el.style.display='none';
	}
};
var actions = {
	Connect: function(params) 
	{
		//log.print('Connected.');
		user.conn = true;
		user.Read();
	},
	Disconnect: function(params) 
	{
		//log.print('Disconnected.');
	},
	Print: function(params) 
	{
		log.print(params.message);
	},
	Print_delivery: function(params) 
	{
		log.print_balance(params.balance);
	},
	UserList: function(params) 
	{
		user.clearUserList();
		for(i in params.users)
			user.addUser(params.user[i]);
	}
};
var user = {
	conn: false,
	busy: false,
	read: null,
	chat_id: 0,
	onSuccess: function(data) 
	{
		if (typeof data.actions == 'object') 
		{
			for (var i = 0; i < data.actions.length; i++) 
			{
				if (typeof actions[data.actions[i].action] == 'function') 
				{
					actions[data.actions[i].action](data.actions[i].params);
				}
			}
		}
	},
	onComplete: function(data,success,status) 
	{
		if(data && data.chat_id)
			user.chat_id = data.chat_id;
		if (status == 404) 
		{
			actions.Disconnect();
		}
		user.busy = false;
	},
	onCompleteRead: function(data,success,status) 
	{
		if(data && data.chat_id)
			user.chat_id = data.chat_id;
		if (status == 200) 
		{
			setTimeout(user.Read, 5000);
		}
		else 
		{
			setTimeout(user.Read, 50000);
		}
	},
	Connect: function() 
	{
		if (user.conn == false && user.busy == false) 
		{
			//log.print('Connecting...');
			user.busy = true;
			Tools.ajax.send('/chat/connect/',{type:'json',callback:user.onComplete,success:user.onSuccess});
		}
	},
	Read: function() 
	{
		if (user.conn) 
		{
			Tools.ajax.send('/chat/read/',{param:{chat_id:user.chat_id},type:'json',callback:user.onCompleteRead,success:user.onSuccess});
		}
	}
	
};

Chat.init = function ()
{
	window.chat = new Chat({conteiner:document.body});
};


/* инициализация */

(function(){
	if (Tools.browser.msie && window == top )
	{
		try {
			document.documentElement.doScroll("left");
		} catch(e){
			setTimeout( arguments.callee, 0 );return;
		}
		Chat.init();
	}
	if (document.addEventListener)
		document.addEventListener("DOMContentLoaded",Chat.init, false );
})();

