/**
 * @author marcosb
 */

var users_online = new Array();

var talk_text;
var messageInput;
var falaComStr;
var userNickStr;
var reservado = false;
var falacom = 0; //Todos usuÃ¡rios
var timmer_chat;
var talkMode = 0;
var ativo = false;
var sala_key="0000000000000000"; //reporta mudancas na lista de usuarios e na sala em geral

function ChangeUser(id,user){
	
	send_name = user;
	send_id = parseInt(id);
	if(send_id == 0){
		ChangeTalkMode(0);	
	}
	CloseWindows();
	
	//luciana e carlos adicionaram a condicao de quando o id for igual ao dele mesmo, nao deixar conversar com ele mesmo
	if (id == user_id){
		user = "Todos";
		id = 0;
	}
	$("#user_talk").html(user);
	falacom = id;
	falaComStr = user;
}

function TalkMode(){
	$("#talk_options").css("display","block");
}

function ChangeTalkMode(mode){
	$("#talk_options").css("display","none");
	talkMode = mode;
	switch(mode){
		case 1:
			$("#talk_mode").html( "Falar reservadamente com" );	
		break;
		default:
			$("#talk_mode").html( "Falar com" );
	}
}

function SelectUser(id,user){
      $("#negative_name").css("display","block");
	document.getElementById('negative_name').innerHTML = user;	
	document.getElementById('negative_confirm').style.display = 'block';
	Close('negative_list');
}

function SelectUserToBlock(id,user){ //UsuÃ¡rios registrados apenas
      $("#negative_name2").css("display","block");
	document.getElementById('negative_name2').innerHTML = user;	
	document.getElementById('negative_confirm2').style.display = 'block';
	Close('bloq_list');
}

//nova palavra
function SelectWorkNew(){
	result = WorkConfirm();	

	alert(result);
     	$("#work_name").css("display","block");
	document.getElementById('work_new_list').style.display = 'display';	
	//Close('work_list');
}

function TalkList(){
	$("#talk_list").css("display","block");
}

function NegativeList(){
	$("#negative_list").css("display","block");
}

function BlockList(){
	$("#bloq_list").css("display","block");
}

function WorkNew(){
	//alert("to passando aqui");
	$("#work_list").css("display","block");
	$("#palavra").focus();
	
	//$("#container_login").css("display","block");
}


function NegativeCancel() {
  $("#negative_confirm").css("display","none");
  $("#negative_name").css("display","none");
  $("#negative_confirm2").css("display","none");
  $("#negative_name2").css("display","none");
  $("#work_confirm").css("display","none");
  $("#work_name").css("display","none");

}


function Display(id){
	$("#"+id).css("display","block");
}

function Close(id){
	$("#"+id).css("display","none");
	$("#message").focus();
}

function CloseWindows(){
	$("#talk_options").css("display","none");
	$("#color_window").css("display","none");
	$("#smile_window").css("display","none");
	$("#talk_list").css("display","none");
	$("#negative_list").css("display","none");
	$("#bloq_list").css("display","none");
	//$("#work_list").css("display","none");
	$("#message").focus();
}


/**
 * faz requiziÃ§Ã£o ao servidor
 */
function callChat() {
	$.post("index.php",
		{acao:"getChatData",session_id:__sessionId ,lastmessage:last_read_message, key:sala_key},
		chatReceb);
    if (ativo) setTimeout("callChat()",1000); 
        
}

/**
 * recebe evento de retorno de mensagens do servidor
 * @param {Object} dt
 */
function chatReceb(dt) {
	eval( "var dt= " +dt+";"); //json
	//insere mensagens na pilha
	for (var i = 0; i < dt.msgs.length; i++) {
		var ob = dt["msgs"][i];
		var div = $("#talk_text");
                
		if (ob.msg != "__sys__event" && ob.msg != "logout") {
			if (ob.id > last_read_message) {
				div.append("<p class=\"" +
				((ob.tp == 1) ? "reservado" : 
					((ob.user==user_name || ob.to==user_name) ? "msgdestaque" : "")
				) +
				"\">" +
                                "<sub>["+ ob.ti +"]</sub>" +
				"<span style=\"color:" +
				getUserCorlor(ob.user) +
				";\"><b>" +
				ob.user +
				"</b></span><span> " +
				((ob.tp == 1) ? "reservadamente com" : "com") +
				" <b>" +
				ob.to +
				"</b>" +
				": </span>" +
				parseEmotions(ob.msg) +
				"</p>");
			}
		};
		if ( ob.msg == "logout") {
			div.append("<p class=\"lououtInfo\">Voce foi desconectado do chat</p>");
			//stop eventos
			//window.clearInterval(timmer_chat);
			ativo = false;
		}
		if (parseInt(ob.id) > last_read_message) last_read_message = parseInt(ob.id);
		try {
                        if(document.form11.desativarRolagem.checked==true){
                            //document.getElementById("talk_text").scrollIntoView(true);
                        }
                        else{
                            document.getElementById("talk_text").scrollIntoView(false);
                        }
		} catch( e ) { }
        }
	
	//verifica lista de usuÃ¡rios
	try {
		if (dt.key != sala_key)
                    if (dt.users)
			changeUsersList(dt.users, dt.key);
	} catch(e) {};
}
/**
 * Muda lista de usuÃ¡rios
 * @param {Object} users
 */
function changeUsersList( users, key ) {
	//seta nova lista de usuÃ¡rios
	users_online = users;
	
	$list = $("#user_list");
	$neg = $("#negative_user_list");
	$list2 = $("#talk_user_list");
        $block = $("#bloq_user_list");
	
	$list.html("");
	$list2.html("");
	$neg.html("");
        $block.html("");
	
	
	for(var i=0; i<users.length; i++) {
		var it = users[i];
		$list.append(
			"<a href=\"javascript:ChangeUser("+it.id+",'"+it.nome+"')\" style=\"color:"+it.cor+";\" alt=\""+it.frase+"\" >"+it.nome+"</a>"
		);
		$list2.append(
			"<a href=\"javascript:ChangeUser("+it.id+",'"+it.nome+"')\" style=\"color:"+it.cor+";\" alt=\""+it.frase+"\">"+it.nome+"</a>"
		);
		$neg.append(
			"<a href=\"javascript:SelectUser("+it.id+",'"+it.nome+"')\" style=\"color:"+it.cor+";\" alt=\""+it.frase+"\">"+it.nome+"</a>"
		);
                $block.append(
			"<a href=\"javascript:SelectUserToBlock("+it.id+",'"+it.nome+"')\" style=\"color:"+it.cor+";\" alt=\""+it.frase+"\">"+it.nome+"</a>"
                );
	
	}
	
	sala_key = key;
}



/**
 * Obtem a cor do nick de determinado usuÃ¡rios
 * @param {Object} user
 */
function getUserCorlor(user) {
	var cor = "#000000";
	$("#user_list > a").each( function(i) {
		if (this.innerHTML==user) cor = this.style.color;
	} );
	return cor;
}

function negativeConfirm() {
	var user = $("#negative_name").html();
	$.post("index.php",
		{acao:"negativeUsuario",nick:user, session_id:__sessionId}
	);
	$("#negative_name").html("");	
	$("#negative_confirm").css("display","none");
}

//funÃ§Ã£o para add nova palavra
function WorkConfirm() {
	var palavra = document.getElementById('palavra').value;
	$.post("index.php",
		{acao:"admin",palavra:palavra}  
	
		);

	$("#work_confirm").css("display","none");
	Close('work_list');	
}

function bloqConfirm() {
	var user = $("#negative_name2").html();
	$.post("index.php",
		{acao:"bloqueiaUsuario",nick:user, session_id:__sessionId}
	);
	$("#negative_name2").html("");	
	$("#negative_confirm2").css("display","none");
	NegativeCancel();	
}

function message( msg, head ) {
	talk_text.append("<p><span>" + head + "</span> " + parseEmotions( msg ) + "</p>");
        if(document.form11.desativarRolagem.checked==true){
            //talk_text.scrollIntoView(true);
        }
        else{
            talk_text.scrollIntoView(false);
        }
}

function info( msg ) {
	talk_text.append("<p>" + msg + "</p>");
	if(document.form11.desativarRolagem.checked==true){
            //talk_text.scrollIntoView(true);
        }
        else{
            talk_text.scrollIntoView(false);
        }
}


function SelectSmile(smile) {
	alert( smile.alt );
}

function LimpaCampo(){
	document.getElementById("palavra").value = '';
	document.getElementById("palavra").focus();
	//$("#palavra_list").focus();
}

function init() {
	//configura eventos
	$("#container").click(CloseWindows);
	//AjustChatWindow(); // TODO: tirar e deixar issu a cargo do css
	$(window).resize(redimChat);
	//seta variaveis fixas
	talk_text = $("#talk_text");
	messageInput = $("#message");
	
	//configura timmer
	//timmer_chat = window.setInterval("callChat()", 1000, null);
	ativo = true;

        callChat();
	messageInput.keyup( sendMessage );
	
	ChangeUser(0, todosStr );

        redimChat();
}


//TODO: Tirar issu, esta funcao foi feita pq o autor n usou css 
function AjustChatWindow(){
	var bsizeW = $(window).width();
	var bsizeH = $(window).height();
	$("#talk").height(bsizeH - 260);
	$("#users").height(bsizeH - 260);
	if(bsizeW < 900){
		document.getElementById('chat_border').style.width = (bsizeW - 50)+'px';
	}else{
		document.getElementById('chat_border').style.width = '900px';	
	}
}


/**
 * Envia mensagem ao servidor
 * TODO: Uma observaÃ§Ã£o, descobri q nÃ£o seria de boa pratica adicionar a mensagem diretamente na lista de mensagens. Este fator poderia dar a impressÃ£o d q o chat esta mais rÃ¡pido, no entanto ira "enganar" o usuÃ¡rio, caso algum problema de conexÃ£o ocorra e a mensagem n chegue ao destino
 * @param {Object} e
 */
function sendMessage(e) {
	if (e.keyCode == 13 ) {
		var msg = messageInput.val();
		messageInput.val("");
		if (msg.length > 0) {
			//manda pro servidor
			$.post("index.php", {
				acao: "sendMessage",
				nick: user_id,
				nickstr: user_name,
				falacom: falacom,
				falacomstr: falaComStr,
				cor: cor,
				lastreadmessage: last_read_message,
				reser: (window.talkMode) ? "true" : "false",
				session_id: __sessionId,
				msg: msg
			});//,function(d){ $("#talk_text".append(dt))} );			
		}
	}	
}

/**
 * Adiciona emotion Ã  mensagem
 * @param {Object} smile
 */
function SelectSmile(smile){
	var nm = smile.alt;
	if (nm) {
		var ob = $("#message");
		ob.val( ob.val() + "{{" + nm + "}}");
	}
	Close('smile_window');		
}

/**
 * Transforma codigo dos emotions
 * @param {Object} str
 */
function parseEmotions(str) {
	var ex = new RegExp("\{\{[0-9]+\}\}","g");
	var p,e;
	var htm="";
	var last = 0;
	while ( p = ex.exec(str) ) {
		e = p.toString();
		e = e.substring(2,e.indexOf("}}"));
		htm += str.substring( last, p.index );
		htm += "<img alt=\"\" src=\"image/smiles/"+e+".gif\" />";
		last = p.index + p.toString().length;
	}
	htm += str.substring( last, str.length );
	return htm;
}

/**
 * altera cor do nick e passa ao servidor
 * @param {Object} cor
 */
function ChangeColor(cor) {
	$.post("index.php",
			{
				acao:"changeUsercolor",
				nick:user_id,
				nickstr:user_name,
				session_id :__sessionId,
				cor:cor,
				msg:"_"
			} );
	Close('color_window');
}

/**
 * Regula o redimencionamento do chat
 *
 */
function redimChat() {
  var h = $(document).height() - 228 ;
  $("#centro").height( h );
  $("#talk").height( h );
  $("#users").height( h );
}

/**
 * Compara duas strings
 * @param {Object} a
 * @param {Object} b
 */
function checaStrings(a,b) {
	if (a===b) return true; else return false;
}

//Inicia aplicaÃ§Ã£o
$(document).ready( init );
//$(window).resize(AjustChatWindow);



