/*
Descrição: Motor do chat, funções responsáveis de envio e leitura das mensagens
Criado em: 22/03/2009
Autor: Hédi Carlos Minin - hedicarlos@gmail.com
*/

ajaxRead = new XMLHTTP();

var messages = '';
var response_time = null;
var key = 0;
var ctrlPressed = false;
var typing_time = false;
var chat_time = 7000; //4.5 segundos
var enable_sound = false;
var user_sound = false;

function EnableSound(){
	if((document.all ) && (!window.opera)){
		document.onfocusout = function(){
			enable_sound = false;
		}
		document.onfocusin = function(){
			enable_sound = false; // Se false não toca com a pagina aberta em primeiro plano
		}
	}else{
		window.onblur = function(){
			enable_sound = false;
		}
		window.onfocus = function(){
			enable_sound = false; // Se false não toca com a pagina aberta em primeiro plano
		}
	}
}


/*
recebimento de mensagem
*/
function readMessage(){
	ajaxRead.open('POST','msnnovo/read_message.php',true);
	ajaxRead.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajaxRead.onreadystatechange = function(){
		if(ajaxRead.readyState == 4){
			//if(ajaxRead.status == 200){
					var response = ajaxRead.responseText;
					if(response != ''){

						var json = eval('(' +response+ ')');	

						if(json.result.length == 3){
							user_list = json.result[1];
							ProcessMessages(json.result[0]);
							ProcessUsers();

							if(json.result[2].status == 'unregistered'){
								document.getElementById('system_status').innerHTML = 'Sua sessão foi desativada, reinicie o sistema';
								document.getElementById('listuser').innerHTML = 'Sua sessão foi desativada, você não enviará ou recebá mensagens. Reinicie o sistema';
							}
							last_read_message = json.result[2].lrm;
						}
						
						clearTimeout(response_time);
						setTimeout('readMessage()',chat_time);
						//document.getElementById('system_status').innerHTML = 'Conectado';

					}
			
			//}else{
			//	document.getElementById('system_status').innerHTML = 'Erro ao receber dados, reiniciando em 25 segundos';
			//}
		}
	}
	ajaxRead.send('lrm=' +last_read_message+ '&user_status=' +user_status+ '&id_typing=' +id_typing+ '&messages=' +messages);
	messages = '';
	response_time = setTimeout('AbortMessage()',22000);
}

function AbortMessage(){
	//if(ajaxRead.readyState != 0){
		ajaxRead.onreadystatechange = function(){
			if(ajaxRead.readyState == 4){
				document.getElementById('system_status').innerHTML = 'Reiniciando...';
			}
		}
		ajaxRead.abort();
		readMessage();
	//}
}

function ProcessMessages(message_list){
	var total_message =  message_list.messages.length;
	for(var i = 0; i < total_message; i++){
		
		var message = message_list.messages[i].message;
		
		//se for para todos certifico se não receber a mensagem que enviei
		if(parseInt(message_list.messages[i].id_receive) == 0){
			if(message_list.messages[i].id_send != user_id){
				CreateChatWindow(1,0,'Todos os usuários');
				InsertMessage(0,message_list.messages[i].name_send,message,'msgreceive');
			}
		}else{
			CreateChatWindow(1,message_list.messages[i].id_send,message_list.messages[i].name_send);
			InsertMessage(message_list.messages[i].id_send,message_list.messages[i].name_send,message,'msgreceive');	
		}
	}	
	
	//toca som
	if(user_sound == true){
		if((enable_sound == true) && (total_message > 0)){
			PlaySound();		
		}
	}
}


function ProcessUsers(){
	
	var typing_users = '';
	var userList = '';
	
	var total_user =  user_list.users.length;
	if(total_user > 0){
		//processa usuários
		for(var i = 0; i < total_user; i++){
		  if(user_list.users[i].photo == '') { user_list.users[i].photo = 'br/img/semfoto.jpg'; }
			if(user_list.users[i].id != user_id){
	
				userList += '<a href="javascript:CreateChatWindow(0,' +user_list.users[i].id +',\''+ user_list.users[i].name +'\')" class="status' +user_list.users[i].status+ '" title="Iniciar conversa com ' +user_list.users[i].name+ '"><img src="' +user_list.users[i].photo+ '" width="25" height="25" align="absmiddle"> ' +user_list.users[i].name+ '</a>';
				UpdateTalkWindow(user_list.users[i].id,user_list.users[i].id_typing,user_list.users[i].photo,user_list.users[i].status,user_list.users[i].name);
				if(user_list.users[i].id_typing == 0){
					typing_users += user_list.users[i].name + ', ';	
				}
			
			}else{
			    // Eu na listagem
			    userList += '<a><img src="' +user_list.users[i].photo+ '" width="25" height="25" align="absmiddle"> ' +user_list.users[i].name+ ' <font color="black">(eu)</font></a>';
				//votos negativos
				if(parseInt(user_list.users[i].negative) >= Math.ceil(((total_user * max_negative_vote) / 100))){
					window.top.location.href = 'banned.php';
					break;
				}
				//document.getElementById('user_votes').innerHTML = Math.ceil((100 * parseInt(user_list.users[i].negative)) / total_user) +'% de negativação';
			}
		  if(user_list.users[i].photo == '') { user_list.users[i].photo = 'br/img/semfoto.jpg'; }	
		}
		document.getElementById('listuser').innerHTML = userList;	
		
		//processa digitando todos
		if(typing_users == ''){
			if(getWindow(0)){
				document.getElementById('type0').style.display = 'none';	
			}
		}else{
			if(getWindow(0)){
				document.getElementById('type0').style.display = 'block';
				document.getElementById('type0').innerHTML = typing_users +'está digitando...';
			}
		}
		
		
	}else{
		document.getElementById('listuser').innerHTML = 'Nenhum usuário conectado';		
	}
}


function UpdateTalkWindow(id,id_typing,photo,status,name){

	if(getWindow(id)){
		//digitando
		if(id_typing == user_id){	
			document.getElementById('type' +id).style.display = 'block';
		}else{
			document.getElementById('type' +id).style.display = 'none';	
		}
		
		//atualiza foto
		if(photo != 'default.jpg'){
			document.getElementById('photo' +id).src = photo;
		} else{
			document.getElementById('photo' +id).src = 'br/img/semfoto.jpg';
		}		
	}
}




/*
envio de mensagem
*/
var flood = false;

function PrepareSend(id){
	if(flood == 0){
		var input = document.getElementById('msg' +id);
		if(input.value != ''){
			id_typing = 0;	
			Send(id);	
			
			input.value = '';
			input.focus();
			
			flood = 1;
			setTimeout('FreeFlood()',1000);
		}
	}else{
		InsertMessage(id,'Aviso','Sistema anti-flood ativado','msgalert');	
	}
}

function FreeFlood(){
	flood = 0;	
}

function Send(id){
		var message = document.getElementById('msg' +id).value;	

		InsertMessage(id,user_name,message,'msgsend');	
		
		message = encodeURIComponent(message);
	    messages += '&idreceive[]=' +id+ '&message[]=' +message; 
}

function InsertMessage(id,title,msg,style){
	
	msg = ProcessURL(msg);
	
	var cria = document.createElement('p');	
	cria.innerHTML = '<span class="' +style+ '"><b>' +title+ '</b></span>: ' +msg;
	
	var div = document.getElementById('talk' +id);
	div.appendChild(cria);
	div.scrollTop = div.scrollHeight;
}

function ProcessURL(message){
	var pl = message.split(' ');
	for(var i = 0; i < pl.length; i++){
		if((pl[i].substr(0,7) == 'http://') || (pl[i].substr(0,4) == 'www.')){		
			
			//youtube.com/watch?v=
			var yt = pl[i].replace('http://','');
			yt = yt.replace('www.','');
			
			if(yt.substr(0,20) == 'youtube.com/watch?v='){
				//youtube
				var videoCode = yt.substr(20,yt.length)
				message = message.replace(pl[i],'<a href="javascript:ViewVideo(\'' +videoCode+ '\')">' +pl[i]+ '</a>');		
			}else{
				//todos os links
				var href = pl[i].replace('http://','');
				message = message.replace(pl[i],'<a href="http://' +href+ '" target="_blank" >' +pl[i]+ '</a>');	
			}
		}
	}	
	
	for(var i = 1; i < 81; i++){
		message = ReplaceAll(':' +i+ ':','<img src="msnnovo/smiles/' +i+ '.gif" valign="absmiddle" />',message);
	}
	return message;
}

function ReplaceAll(findTerm,replaceTerm,text){
	while(text.indexOf(findTerm) != -1){	
		text = text.replace(findTerm,replaceTerm);
	}
	return text;
}

function AnalizeKey(id){
	switch(key){
		case 13: PrepareSend(id); break;	
		case 27: 
			CloseWindowById(id);
		break;
	}	
	id_typing = id;
	clearTimeout(typing_time);
	typing_time = setTimeout('ClearTyping()',800);
	
	if(ctrlPressed == true){
		if(key == 77){
			var mObj = document.getElementById('mw' +id);
			MaximizeWindow(mObj);
		}
	}
	//ctrlPressed = false;
}

function ClearTyping(){
	id_typing = -1;		
}

function getKey(e){
	if(document.all){
		key = window.event.keyCode;	
	}else{
		key = e.keyCode;	
	}	
	
	if(key == 17){
		ctrlPressed = true;	
	}
}

function freeKey(e){
	if(document.all){
		var key = window.event.keyCode;	
	}else{
		var key = e.keyCode;	
	}	
	
	if(key == 17){
		ctrlPressed = false;
	}	
}

function ChangeSound(){
	var sl = document.getElementById('sound_option');
	if(user_sound == true){
		user_sound = false;
		sl.innerHTML = 'Ativar som';
		sl.title = 'Ativar som ao receber novas mensagens';
	}else{
		user_sound = true;	
		sl.innerHTML = 'Desativar som';
		sl.title = 'Desativar som ao receber novas mensagens';
	}
}

function PlaySound(){
	var flash = document.getElementById('sound');
	flash.Rewind();
	flash.Play();
}

document.onkeydown = getKey;
document.onkeyup = freeKey;
