function Chat()
{
	this.reqWidgetQueue= new Array();//queue with the widgets that made a request through this controller object
	var self=this;
	
	this.scanIntervalReff = null;
	
	/**
	 * @param The manager index of the request 
	 * @desc This method is a handler for the completition of one request
	 */
	this.handleResponse=function (managerIndex)
	{		
		var code = RequestManager.getInstance().getRequestObj (managerIndex).getResponseErrorCode();
		var content = RequestManager.getInstance().getRequestObj (managerIndex).getResponseContent();
		switch(code)
		{
			//raspuns de la init
			case 1 :
				this.hidePopup("start_chat");
				_e("text_insider").innerHTML += content.msg;
				_e("text_container").scrollTop = _e("text_container").scrollHeight;
				_e("user_container").innerHTML = content.room_users;
				
				this.setButtons(2);
				
				if(this.scanIntervalReff == null)
				{
					this.scanIntervalReff = setInterval("checkMsg()",3000);
				}
			break;
			case 2 :
				_e("text_insider").innerHTML += content.msg;
				_e("text_container").scrollTop = _e("text_container").scrollHeight;
				_e("user_container").innerHTML = content.room_users;
				
				this.setButtons(2);
				
				if(this.scanIntervalReff == null)
				{
					this.scanIntervalReff = setInterval("checkMsg()",3000);
				}
			break;
			//ai iesit din chat
			case 3 :
				_e("text_insider").innerHTML += content;
				_e("text_container").scrollTop = _e("text_container").scrollHeight;
				_e("user_container").innerHTML = "nu mai esti in chat";
				
				this.setButtons(1);
				
				if(this.scanIntervalReff != null)
				{
					clearInterval(this.scanIntervalReff);
					this.scanIntervalReff = null;
				}
			break;
			//inca nu ai intrat in chat
			case 4 :
				this.showPopup("start_chat");
				this.setButtons(1);
				
				if(this.scanIntervalReff != null)
				{
					clearInterval(this.scanIntervalReff);
					this.scanIntervalReff = null;
				}
			break;
			//eroare la crearea de nick
			case 5 :
				this.setButtons(1);
				_e("enter_error").innerHTML = content;
			break;

		}
	}
	
	this.checkMsg = function ()
	{
		var rqid=RequestManager.getInstance().createRequest(self,Config.APP_URL+"chat_dy.php?action=check_msg");
		RequestManager.getInstance().startRequest(rqid);
		return rqid;
	}

	this.initChat = function ()
	{
		trace("init");
		var rqid=RequestManager.getInstance().createRequest(self,Config.APP_URL+"chat_dy.php?action=init");
		RequestManager.getInstance().startRequest(rqid);
		return rqid;
	}
	
	this.enterChat = function ()
	{
		trace("enter chat");
		
		var nickname = _e("new_nickname").value;
		
		if(nickname == "")
		{
			_e("enter_error").innerHTML = "Nickname-ul trebuie sa aiba minim 4 caractere.";
			return false;
		}
		
		var rqid=RequestManager.getInstance().createRequest(self,Config.APP_URL+"chat_dy.php?action=enter&nickname="+nickname);
		RequestManager.getInstance().startRequest(rqid);
		return rqid;
	} 

	this.getOut = function ()
	{
		trace("quit chat");
		this.hidePopup('quit_chat');
		var rqid=RequestManager.getInstance().createRequest(self,Config.APP_URL+"chat_dy.php?action=get_out");
		RequestManager.getInstance().startRequest(rqid);
		return rqid;
	}

	this.sendMyMessage = function ()
	{
		trace("send message");
		
		var msg = _e("user_msg").value;
		_e("user_msg").value = "";
		
		if(msg == "")
		{
			return false;
		}
		
		var rqid=RequestManager.getInstance().createRequest(self,Config.APP_URL+"chat_dy.php?action=send_msg&msg="+msg);
		RequestManager.getInstance().startRequest(rqid);
		return rqid;
	}

	/**
	 * @param the index of the request 
	 * @desc Remove widget from the queue
	 */
	this.removeWidget=function (managerIndex)
	{
		RequestManager.getInstance().removeRequest(managerIndex);		
		self.reqWidgetQueue[managerIndex]=null;
	}
	
	this.setButtons = function (mode)
	{
		switch(mode)
		{
			case 1 :
				_e("button_trimite").style.display = "none";
				_e("button_get_out").style.display = "none";
				_e("button_get_in").style.display = "block";
			break;
			case 2 :
				_e("button_trimite").style.display = "block";
				_e("button_get_out").style.display = "block";
				_e("button_get_in").style.display = "none";
			break;
		}
	}

	this.showPopup = function (id)
	{
		_e(id).style.display = "block";
	}
	this.hidePopup = function (id)
	{
		_e(id).style.display = "none";
	}
	
}

function checkMsg ()
{
	Chat.getInstance().checkMsg();
}

Chat.__instance__=null;

Chat.getInstance=function()
{
	if(Chat.__instance__==null)
	{
		Chat.__instance__=new Chat();
	}
	return Chat.__instance__;
}