 
var id_message 	= 0;
var delayChat 	= 3000;
var delayUser 	= 10000;
var delayInactive= 120; // seconds

var timestamp;
var timestampRoom;
var inactive = false;

var intervalChat;
var intervalUser;
var timerChat;
var timerUser;
var lastmessageUser = Array() ;
var lastmessageGroup = Array() ;
var roomid ,userid, groupid ;


/*
	Variable de blocage de la récupération des messages 
	pour éviter d'avoir plusieurs appel simultannée et donc plusieurs affichage du meme message
*/
var blocked = false;


var newwindow='';
function chatUser(user){
	var online = isOnline('');	
	if (online ) {		
		newwindow = window.open( "javascript:createRoom('"+user+"',null)" , "JmamiChat" );
		newwindow.focus();
	}else{
		var features = 'height=542,width=740,left=20,top=20,toolbar=no,menubar=no,directories=no,location=no,scrollbars=no,status=no,resizable=yes,fullscreen=no';
		newwindow = window.open('/chat.php?user_id='+user,'JmamiChat', features);
		if (window.focus) {newwindow.opener = self;}
		
	}		
}
function chatGroup(group){

		var online = isOnline('');		
		if (online ) {			
			newwindow = window.open( "javascript:createRoom( null , '"+group+"' ) " , "JmamiChat" );
			newwindow.focus();
		}
		else{
			var features = 'height=542,width=740,left=20,top=20,toolbar=no,menubar=no,directories=no,location=no,scrollbars=no,status=no,resizable=yes,fullscreen=no';		
			newwindow=window.open('/chat.php?group_id='+group,'JmamiChat',features);
			if (window.focus) {newwindow.opener = self;}
			
		}		
	}


/*
 	refreshChat : éxecuter tout les [delayChat] secondes
	- check des requete en attente ( si oui et room inextante : affichage, sinon : suppression )
	- récupération des derniers message de la room en cours
	- repositionnement en bas de la barre de défilement 
*/
function refreshChat(){
	var jsonRequests = getRequests();	
	if(jsonRequests){
		
        var requestDeleted = 0;
        
		for( var i =0; i < jsonRequests.requests.length; i++)
		if($('#chat #chat_user_'+ jsonRequests.requests[i].user_id ).size() > 0 ){						
			deleteRequest( jsonRequests.requests[i].request_id  );			
            requestDeleted++;
        }
            
        if( requestDeleted < jsonRequests.requests.length ) 
	        showRequests(jsonRequests);							

		checkInactive(jsonRequests.timestamp);
	}

	getMessages( userid , groupid );	
	getNewMessages();
	setPosition();

/*	
	var jsonMyRequests = getMyRequest( userid, groupid);
	if( jsonMyRequests.length ){
		$("#chat_msg").html( "demande de chat en attente de réponse ...");	
	}else{
		$("#chat_msg").html( '');
	}
	*/

}
function StartTimerChat(){intervalChat = setInterval("refreshChat()",delayChat);}


/*
 	refreshUsers : éxecuter tout les [delayUser] secondes
	- récupération des amis avec leur état
*/
function refreshUsers(){getUsers( userid, groupid );}
function StartTimerUser(){intervalUser = setInterval("refreshUsers()",delayUser);}
function stopTimer(interval){clearInterval(interval);}


function checkInactive(time){
	// Absence - Inactif
	if(timestamp && !inactive && timestamp < time - delayInactive){
		$('#channels li').each(function(){
			sendMessage( $(this).attr('user') , $(this).attr('group') , '[[:inactive:]]');
			inactive = true;
		});
	}
}

/*
 	sendRequest 
	- envoi d'une requete à un user
	- rejoindre la room
	- récupération des messages de la room
	- mise en focus
*/
function sendRequest( request , user , group ){
		
	$.ajax({   				
		type: "POST",
		url: "chat.php",
		data: "sendRequest=1&request="+ request +"&user="+ user +"&group="+ group,
		success: function(data){			
			return false;
		}
	});
	
	createRoom(user , group);
	getMessages(user , group);	
	$(document).focus();
}

/*
 	deleteRequest : suppression d'une requete 
*/
function deleteRequest( request_id ){
	$.ajax({   				
		type: "POST",
		url: "chat.php",
        async: false,
		data: "deleteRequest=1&request_id="+ request_id ,
		success: function(data){			
			return false;
		}
	});
}

function deleteMyRequests(){
	$.ajax({   				
		type: "POST",
		url: "chat.php",
        async: false,
		data: "deleteMyRequests=1" ,
		success: function(data){			
			return false;
		}
	});
}

/*
 	quitChat : 
	- envoi d'un message [[:quit:]] à toutes les rooms 
	- suppression de la session chat
*/
function quitChat(){

	// Message de fermeture de la room
 	$("#channels li").each(function(){
		sendMessage( $(this).attr('user'), $(this).attr('group') , '[[:quit:]]' );	
	});

	
	$.ajax({   				
		type: "POST",
		async : false,
		url: "chat.php",
		data: "quitChat=1",
		success: function(data){			
			return false;
		}
	});
}

/*
 	showRequests : 
	- affichage de la requete
	- si oui : suppression de la requete + rejoindre la room + suppression de l'affichage de la requete
	- si non : suppression de la requete + suppression de l'affichage de la requete	
*/
function showRequests( json ){	
	
   	if(json){
		

		$('#chat_requests').html('');
        var requests = json.requests;
        for(var i =0; i < requests.length;i++)  {
            
            //if(  $('#chat_requests .req'+ requests[i].request_id).size()==0  ){                
                
                var html = '<div class="request req'+ requests[i].request_id+'">';
                html += '<div class="right"><a href="#" onclick="responseRequest(this,'+ requests[i].request_id +','+requests[i].user_id+')" class="accept">accepter</a>';
                html += ' | <a  href="#" onclick="responseRequest(this,'+requests[i].request_id+','+requests[i].user_id+')" class="refuse">refuser</a></div>';
                html +=  requests[i].username ;    
                html += '</div>';
                
                $('#chat_requests').append( html );
            // }
        }
        

        
        if( $('#chat_request .request').size()==0 ){
    	    $('#chat_users').css('height','280px');        
	    	$('#chat_request').hide();        
		}
        else{
    	    $('#chat_users').css('height','180px');                
	  		$('#chat_request').fadeIn();
        }
        
   }
}


function responseRequest( element, request_id, user_id){
	
    if($(element).hasClass('accept')){
    
	    deleteRequest( request_id );
        createRoom(user_id,null);
        $('#chat_request .req'+request_id ).remove();
        
    }else{
    
    	deleteRequest(request_id );
       $('#chat_request .req'+request_id ).remove();
    }
    
    if( $('#chat_request .request').size()==0 ){
        $('#chat_users').css('height','280px');
    	$('#chat_request').hide();        
     }
    
     
}
function showRequestFiche( json ){	
	
	var online = isOnline('');	
	
	if( !online ){	
		
		$('#chat_request').html('');
        var requests = json.requests;
        for(var i =0; i < requests.length;i++)  {
             
			 //if(  $("#chat_request .req" + requests[i].request_id ).size()==0  ){ 
			 
				var html = '<div class="request req'+ requests[i].request_id +'">';
				html += '<div class="right"><a href="#" onclick="responseRequestFiche(this,'+ requests[i].request_id +','+ requests[i].user_id +')" class="accept">Oui</a>';
				html += ' | <a  href="#" onclick="responseRequestFiche(this,'+ requests[i].request_id+','+ requests[i].user_id+')" class="refuse">Non</a></div>';
				html +=  requests[i].username ;    
				html += '</div>';

				$('#chat_request').append( html );
			//}
      	}    
        
      	if( $('#chat_request .request').size()==0 ){      
	    	$('#bloc_request').hide();        
		}
        else{
	  		$('#bloc_request').fadeIn();
        }
	}
	else{
	 	$('#bloc_request').hide();
	}
	
   
    	
}


function responseRequestFiche( element, request_id, user_id){
	if($(element).hasClass('accept')){
    
	    deleteRequest( request_id );
        chatUser(user_id);
        $('#chat_request .req'+request_id ).remove();
    }else{
    	deleteRequest(request_id );
       $('#chat_request .req'+request_id ).remove();
    }
    
     
    if( $('#chat_request .request').size()==0 ){       
    	$('#bloc_request').hide();        
     }
}

/*
 	getRequests : 
	- récupération des requetes)
*/
function getRequests(){

	var json;
    $.ajax({
        async :false,
        url: "chat.php",
        dataType: 'json',
        data : "getRequests=1" ,		
        success : function(data){				
            json = data;
            return false;
        }
    });	


	return json;
}

/*
 	getMyRequest : 
	- récupération des requetes en attente de réponse
*/
function getMyRequest( user, group ){

	var json;
    $.ajax({
        async :false,
        url: "chat.php",
        dataType: 'json',
        data : "getMyRequest=1&user="+user + "&group="+group ,		
        success : function(data){				
            json = data;
            return false;
        }
    });	
	
	return json;
}

/*
 	isOnline : 
	- test si l'utilisateur est en mode chat (session chat)
*/
function isOnline( user ){
	var online = false;
	if(user) {
		$.ajax({
			 url: "chat.php",
			 dataType: 'json',
			 async:false,
			 data: "isOnline=1&user_id="+ user,
			 async:false,
			 success: function(json){ online = json.isOnline }
		});
	}
	return online;
}

/*
 	getGroup : 
	- récupère le titre du groupe
*/
function getGroup( group ){
	
	var data;
	$.ajax({
		 url: "chat.php",
		 dataType: 'json',
		 data: "getGroup=1&group="+ group,
		 async:false,
		 success: function(json){ data = json }
   	});

	return data;
}

/*
 	getUser : 
	- récupère le nom du user
*/
function getUser( user ){
	
	var data;
	$.ajax({
		 url: "chat.php",
		 dataType: 'json',
		 data: "getUser=1&user="+ user,
		 async:false,
		 success: function(json){ data = json }
   	});

	return data;
}

/*
 	sendMessage : 
	- envoi d'une message à un user ou group
*/
function sendMessage( user, group ,  message ){
	
	$.ajax({  
		dataType: 'json',
		type: "POST",
		url: "chat.php",
		data: "sendMessage=1&message="+ message +"&user="+ user +"&group="+ group,
		success: function(json){
			timestamp = json.timestamp;
			return false;}
	});
}


/*
 	createRoom : 
	- crée la room si inexistante
	- rejoins et active la room
	- envoi d'une message d'arriver [[:join:]]
	- focus
*/
function createRoom( user , group ){	
		
	if ( user || group ){	
	
		if (user){			
			roomid  = 'user_'+ user ;
			userid = user;
			groupid = null;
		}else if (group){	
			roomid  = 'group_'+ group ; 					
			userid = null;			
			groupid = group;
		}
		
		$.ajax({
			async :false,
			dataType : 'json',
			url : "chat.php",	
			data : 'getTimestamp=1',		
			success: function(json){
				timestampRoom = json.timestamp;
			}
	    });
		
		$('#chat .room').hide();	
		if( $('#chat #chat_'+ roomid ).size() ==0 ){	
			$('#chat').append('<div id="chat_'+ roomid  +'" class="room"></div>');			
			setPosition();
			// Message d'ouverture de la room
	 		sendMessage(  user, group , '[[:join:]]'  );			
			
		}
		$('#chat #chat_'+ roomid ).show();		
		
		
		
		$('#channels li').removeClass('on');
		if( $('#channels li#channel_'+ roomid ).size() ==0 ){
			
			if (user){			
				var jsonUser = getUser( user );
				var value = jsonUser.usersurname;
				lastmessageUser[user] = 0;
	
			}else if (group){
				
				var jsonGroup = getGroup( group);
				var value = jsonGroup.group_title;
				lastmessageGroup[group] = 0;
			}
				
			var html = '<li id="channel_'+ roomid  +'" user="'+user+'" group="'+group+'" ><div>';
			html += '<a href="javascript:createRoom( '+user+' , '+group+');" class="channel">'+value+'</a>';
			html += '<a href="javascript:closeRoom( '+user+' , '+group+' )" class="close">x</a>';
			html += '</div></li>';
			$('#channels').append(html);
			
		}
			
		$('#channels li#channel_'+ roomid  ).removeClass().addClass('on');	
		getUsers( userid, groupid );
		
	}
	$(document).focus();
}

/*
 	closeRoom : 
	- suppression de la room si existante
	- envoi d'une message de départ [[:quit:]]
	- fermeture de la popup si plus de rooms	
*/
function closeRoom( user , group ){
	
	if ( user || group ){	
		
		if (user){		
			roomid = 'user_'+ user ;
		}else if (group){
			roomid = 'group_'+ group ; 					
		}
		
		// Annulation du chat en cours
		if( $('#channels li#channel_'+ roomid).hasClass('on') ){
			userid = null;	
			groupid = null;				
		}			
		// Fermeture de la room
		$('#chat #chat_'+ roomid ).remove();
		$('#channels li#channel_'+ roomid ).remove();		
		
		// Message de fermeture de la room
 		sendMessage( user, group , '[[:quit:]]' );
		
		if( $('#channels li').size() == 0 )	// Si plus de rooms
			window.close();
		else if(  $('#channels li.on').size() == 0  )	// Si plus de room active
			$('#channels li:last').each(function(){
				createRoom( $(this).attr('user') , $(this).attr('group') );
			});
			
	}
}

/*
 	setPosition : 
	- repositionnement l'ascenseur de la room en cours
*/
function setPosition(){

	if($('#chat #chat_'+ roomid ).size() != 0 ){
		var innerHeight = $('#chat #chat_'+ roomid  ).innerHeight();
		$( '#chat').scrollTop( innerHeight  ) ; 
	}
}

/*
 	getMessages : 
	- récupération des derniers message
	- affichage des derniers messages
	- mise à jour du message_id de la room	
	- repositionnement de l'ascenseur
*/
function getMessages(  user , group ){

	if ( ( user || group ) && !blocked ){		

		// message_id  pour la room en cours
		if(user && lastmessageUser[user]){
			var lastmessage = lastmessageUser[user];
		}else if (group && lastmessageGroup[group] ){
			var lastmessage = lastmessageGroup[group];
		} else {
			var lastmessage = 0;		
		}

		// Bloque getMessages
		blocked = true;
		
		if( blocked ){
		$.ajax({
			async:false,
			dataType : 'json',
			url : "chat.php",	
			data : 'getMessages=1&message_id='+ lastmessage+ '&user='+ user  +'&group='+group ,		
			success: function(json){		
				
				if(json.messages.length > 0){
					for(var i =0;i<json.messages.length;i++){				
						var html = '<div>' + json.messages[i].date ;
												
						if( json.messages[i].from_user_id == json.user_id)
							html += ' &#8249;<strong>'+ json.messages[i].username +'</strong>&#8250; ';
						else if( group )
							html += ' &#8249;<a href="javascript:createRoom(\''+json.messages[i].from_user_id +'\',null)">'+ json.messages[i].username +'</a>&#8250; ';
						else 
							html += ' &#8249;'+ json.messages[i].username +'&#8250; ';
						
						html += json.messages[i].message + '</div>';
						$( '#chat #chat_'+ roomid ).append( html );
					}									
					
					$(document).focus();
				}					
				if(user && json.message_id != 0){
					lastmessageUser[user]  = json.message_id;
				} else if (group && json.message_id != 0){
					lastmessageGroup[group]  = json.message_id;
				}
				
				// Libère getMessages
				blocked = false;
			
				return false;
		}});}
				
		
		

		setPosition();		
	}
}


/*
 	getMessages : 
	- récupération des derniers message
	- affichage des derniers messages
	- mise à jour du message_id de la room	
	- repositionnement de l'ascenseur
*/
function getNewMessages(){

	if(timestampRoom)		
	$.ajax({
		dataType : 'json',
		url : "chat.php",	
		data : 'getNewMessages=1&timestamp='+timestampRoom ,		
		success: function(json){
			
			if( json.users.users > 0 || json.groups.length > 0 ){

				for (i=0; i< json.users.length; i++){
					if( $('#channels li[@user='+ json.users[i].user_id +']').size() == 1 ){
						
						if(!$('#channels li[@user='+ json.users[i].user_id +']').hasClass('on')){
							
							$('#channels li[@user='+ json.users[i].user_id +']')
							.removeClass().addClass('waiting')
							.fadeOut().fadeIn().fadeOut().fadeIn();
						}
					}
				}

				for (i=0; i< json.groups.length; i++){
					if( $('#channels li[@group='+ json.groups[i].group_id +']').size() == 1 ){
						
						if(!$('#channels li[@group='+ json.groups[i].group_id +']').hasClass('on')){
						
							$('#channels li[@group='+ json.groups[i].group_id +']')
							.removeClass().addClass('waiting')
							.fadeOut().fadeIn().fadeOut().fadeIn();
						}
					}
				}
			
				$(document).focus();
			}

			timestampRoom = json.timestamp;

		}
   });
	
}

/*
 	getUsers : 
	- récupération des users
*/
function getUsers( user, group){
	
	$.ajax({   		
		type: "GET",
		url: "chat.php",
		data: "getUsers=1&user="+user+"&group="+group,
		success: function(data){
			$("#chat_users").html(data);
			return false;
		}
	});
}

