var last_ping = '';
var my_id = '';
var my_pseudo = '';

/* Modifs 13.05 :
_ Nouvelle fonction : set_session(param1, 2, 3, 4)
_ Nouvelle fonction : recup_DB_msg ()
_ update_ping() apres chaque refresh des BMK (pour montrer qu'on est bien toujours connecté au Chat
*/

function microtime(get_as_float) {
    var now = new Date().getTime() / 1000;
    var s = parseInt(now);
 
    return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
}

function urldecode( str ) {
    // *     example 1: urldecode('Kevin+van+Zonneveld%21');
    // *     returns 1: 'Kevin van Zonneveld!'
    // *     example 2: urldecode('http%3A%2F%2Fkevin.vanzonneveld.net%2F');
    // *     returns 2: 'http://kevin.vanzonneveld.net/'
    // *     example 3: urldecode('http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a');
    // *     returns 3: 'http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'
    
    var histogram = {}, ret = str.toString(), unicodeStr='', hexEscStr='';
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urlencode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    histogram['\u00DC'] = '%DC';
    histogram['\u00FC'] = '%FC';
    histogram['\u00C4'] = '%D4';
    histogram['\u00E4'] = '%E4';
    histogram['\u00D6'] = '%D6';
    histogram['\u00F6'] = '%F6';
    histogram['\u00DF'] = '%DF'; 
    histogram['\u20AC'] = '%80';
    histogram['\u0081'] = '%81';
    histogram['\u201A'] = '%82';
    histogram['\u0192'] = '%83';
    histogram['\u201E'] = '%84';
    histogram['\u2026'] = '%85';
    histogram['\u2020'] = '%86';
    histogram['\u2021'] = '%87';
    histogram['\u02C6'] = '%88';
    histogram['\u2030'] = '%89';
    histogram['\u0160'] = '%8A';
    histogram['\u2039'] = '%8B';
    histogram['\u0152'] = '%8C';
    histogram['\u008D'] = '%8D';
    histogram['\u017D'] = '%8E';
    histogram['\u008F'] = '%8F';
    histogram['\u0090'] = '%90';
    histogram['\u2018'] = '%91';
    histogram['\u2019'] = '%92';
    histogram['\u201C'] = '%93';
    histogram['\u201D'] = '%94';
    histogram['\u2022'] = '%95';
    histogram['\u2013'] = '%96';
    histogram['\u2014'] = '%97';
    histogram['\u02DC'] = '%98';
    histogram['\u2122'] = '%99';
    histogram['\u0161'] = '%9A';
    histogram['\u203A'] = '%9B';
    histogram['\u0153'] = '%9C';
    histogram['\u009D'] = '%9D';
    histogram['\u017E'] = '%9E';
    histogram['\u0178'] = '%9F';
 
    for (unicodeStr in histogram) {
        hexEscStr = histogram[unicodeStr]; // Switch order when decoding
        ret = replacer(hexEscStr, unicodeStr, ret); // Custom replace. No regexing
    }
    
    // End with decodeURIComponent, which most resembles PHP's encoding functions
    ret = decodeURIComponent(ret);
 
    return ret;
}

function add_smiley(str) {
  var replace = new Array(
		   ":)" , 
           ":(" , 
           ":d", 
		   ":D",
           ":s", 
		   ":S",
           "(k)",
		   "(K)",
		   "(l)",
		   "(L)",
		   "^^",
		   ";)",
		   ":p",
		   ":P",
		   "lol",
		   "xD",
		   "XD",
		   "Xd",
		   "xd"
  );
  var by = new Array(
  '<img src="images/smiley/smile.gif" alt="">',
           '<img src="images/smiley/frown.gif" alt="">',
           '<img src="images/smiley/biggrin.gif" alt="">',
		   '<img src="images/smiley/biggrin.gif" alt="">',
           '<img src="images/smiley/ouch.gif" alt="">',
		   '<img src="images/smiley/ouch.gif" alt="">',
           '<img src="images/smiley/kiss.gif" alt="">',
		   '<img src="images/smiley/kiss.gif" alt="">',
		   '<img src="images/smiley/love.gif" alt="">',
		   '<img src="images/smiley/love.gif" alt="">',
		   '<img src="images/smiley/^^.gif" alt="">',
		   '<img src="images/smiley/wink2.gif" alt="">',
		   '<img src="images/smiley/tongue.gif" alt="">',
		   '<img src="images/smiley/tongue.gif" alt="">',
		   '<img src="images/smiley/lol.gif" alt="">',
		   '<img src="images/smiley/mdr.gif" alt="">',
		   '<img src="images/smiley/mdr.gif" alt="">',
		   '<img src="images/smiley/mdr.gif" alt="">',
		   '<img src="images/smiley/mdr.gif" alt="">'
  );
  for (var i=0; i<replace.length; i++) {
     str = str.replace(replace[i], by[i]);
  }
  return str;
} 

function submit_saisie(event, idu)
{
	
	var k = (event.keyCode) ? (event.keyCode) : (event.which)
	if (k == 13)
	{
		if ($('saisie'+ idu).value != '')
		{
		$('saisie'+ idu).value = add_smiley($('saisie'+ idu).value);
			$('chat_'+ idu).innerHTML += '<div id="msg_'+ idu +'" class="conv_me"><span style="font-size:10px; font-weight:bold; color:#969696; font-family:verdana,sans-sherif">'+ my_pseudo +' : </span>'+ $('saisie'+ idu).value + '<div/>';
			sendmsg(idu); // On envoie le mess au server
			//update_ping(); // On montre qu'on est toujours la :)
			$('chat_'+ idu).scrollTop = 100000000000000000000;
			$('saisie'+ idu).value = '';
		}
	}
}

function afficheID(balise_id)
{
	$(balise_id).style.visibility = 'visible';
	$(balise_id).style.display = 'inline';
}

function cacheID(balise_id)
{
$(balise_id).style.visibility = 'hidden';
$(balise_id).style.display = 'none';
}

function hide_liste_bmk()
{
cacheID('liste_bmks');
$('logo_chat').innerHTML = '<a href="javascript:;" onclick="show_liste_bmk()"><img src="images/icons/display_chat.png" border=""><img src="images/icons/chat_alone.png" border=""></a>';
}

function show_liste_bmk()
{
afficheID('liste_bmks');
$('logo_chat').innerHTML = '<a href="javascript:;" onclick="hide_liste_bmk()"><img src="images/icons/hide_chat.png" border=""><img src="images/icons/chat_alone.png" border=""></a>';
}

function newmessfrom(idu, pseudo, avatar)
{
	if (!$('c'+ idu))
	{
	
set_session(idu, pseudo, avatar,0); // Ajax qui va créer la session php

		$('list_conv').innerHTML += '<div class="member_discuss" id="c'+ idu +'"><div class="conv_header" id="conv_header_'+ idu +'"><a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><div class="conv_pseudo">'+ pseudo +'</div></a><div style="display:inline; float:right;"><a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><img src="images/button/conv_big.png" border="" onmouseover="this.src='+"'images/button/conv_bigOn.png'"+';" onmouseout="this.src='+"'images/button/conv_big.png'"+';"></a> <a href="javascript:;" onclick="delElem('+ "'list_conv'" +','+ "'c"+ idu + "'" +', '+ idu + ');"><img src="images/button/conv_close.png" onmouseover="this.src='+"'images/button/conv_closeOn.png'"+';" onmouseout="this.src='+"'images/button/conv_close.png'"+';" border=""></a></div></div><div id="discussion_'+ idu +'" class="conv_espace_discussion"><img src="'+ avatar +'" class="conv_background"><div id="chat_'+ idu +'" class="conv_chat"></div><textarea class = "input_saisie" name="comm" rows="2" id="saisie'+ idu +'" onkeyup="submit_saisie(event, '+ idu +')"></textarea></div></div>';
	}
	
	$('c'+ idu).style.background = '#FF6060'; // modifier ca 
	$('conv_header_'+ idu).style.background = '#FF6060'; // et ca quand y a un new message ;)
	$('c'+ idu).style.textDecoration = 'blink';
	$('conv_header_'+ idu).style.textDecoration = 'blink';
}

function newconv(pseudo,idu,avatar)
{
	if (!$('c'+ idu))
	{
set_session(idu, pseudo, avatar,1); // Ajax qui va créer la session php
	
		$('list_conv').innerHTML += '<div class="member_discuss" id="c'+ idu +'"><div class="conv_header" id="conv_header_'+ idu +'"><a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><div class="conv_pseudo">'+ pseudo +'</div></a><div style="display:inline; float:right;"><a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><img src="images/button/conv_big.png" border="" onmouseover="this.src='+"'images/button/conv_bigOn.png'"+';" onmouseout="this.src='+"'images/button/conv_big.png'"+';"></a> <a href="javascript:;" onclick="delElem('+ "'list_conv'" +','+ "'c"+ idu + "'" +', '+ idu + ');"><img src="images/button/conv_close.png" onmouseover="this.src='+"'images/button/conv_closeOn.png'"+';" onmouseout="this.src='+"'images/button/conv_close.png'"+';" border=""></a></div></div><div id="discussion_'+ idu +'" class="conv_espace_discussion"><a href="users/'+ pseudo +'"><img src="'+ avatar +'" class="conv_background" title="See the Profile"><div id="chat_'+ idu +'" class="conv_chat"></a></div><textarea class = "input_saisie" name="comm" rows="2" id="saisie'+ idu +'" onkeyup="submit_saisie(event, '+ idu +')"></textarea></div></div>';
		$('c'+ idu).style.background = '#fff';
	}
	
	openconv(idu,pseudo);
	$('saisie'+ idu).focus();
}

function delElem(parent, child, idu)
{
	var obj = document.getElementById(parent);
	var old = document.getElementById(child);
	obj.removeChild(old);
	set_session(idu, 0, 0, -1); // Ajax qui va créer la session php
}

function openconv(idu,pseudo)
{
	$('c'+ idu).style.width = '250px';
	$('c'+ idu).style.top = '-250px';
	$('c'+ idu).style.background = '#8d8dee';
	afficheID('discussion_'+ idu); 
	
	set_session(idu, 0, 0,1); // Ajax qui va modifier la session php
	
	$('conv_header_'+ idu).innerHTML = '<a href="javascript:;" onclick="redconv('+ idu +', '+"'"+ pseudo +"'"+')"><div class="conv_pseudo">'+ pseudo +'</div></a><div style="display:inline; float:right;"><a href="javascript:;" onclick="redconv('+ idu +', '+"'"+ pseudo +"'"+')"><img src="images/button/conv_small.png" border="" onmouseover="this.src='+"'images/button/conv_smallOn.png'"+';" onmouseout="this.src='+"'images/button/conv_small.png'"+';"></a> <a href="javascript:;" onclick="delElem('+ "'list_conv'" +','+ "'c"+ idu + "'" +', '+ idu + ');"><img src="images/button/conv_close.png" border="" alt="close" onmouseover="this.src='+"'images/button/conv_closeOn.png'"+';" onmouseout="this.src='+"'images/button/conv_close.png'"+';"></a></div>';
	//$('conv_header_'+ idu).style.border.bottom = '2px solid black';
	$('conv_header_'+ idu).style.background = '#8d8dee';
	$('saisie'+ idu).focus();
	$('c'+ idu).style.textDecoration = 'none';
	$('conv_header_'+ idu).style.textDecoration = 'none';
	$('chat_'+ idu).scrollTop = 100000000000000000000; // On met le focus en bas direct ;)
}

function redconv(idu,pseudo)
{
	$('c'+ idu).style.width = '';
	$('c'+ idu).style.top = '';
	$('c'+ idu).style.background = '#fff'; // modifier ca 
	$('conv_header_'+ idu).style.background = '#fff'; // et ca quand y a un new message ;)
	cacheID('discussion_'+ idu); 
	
	set_session(idu, 0, 0,0); // Ajax qui va créer la session php
	
	$('conv_header_'+ idu).innerHTML = '<a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><div class="conv_pseudo">'+ pseudo +'</div></a><div style="display:inline; float:right;"><a href="javascript:;" onclick="openconv('+ idu +', '+"'"+ pseudo +"'"+')"><img src="images/button/conv_big.png" border="" onmouseover="this.src='+"'images/button/conv_bigOn.png'"+';" onmouseout="this.src='+"'images/button/conv_big.png'"+';"></a> <a href="javascript:;" onclick="delElem('+ "'list_conv'" +','+ "'c"+ idu + "'" +', '+ idu + ');"><img src="images/button/conv_close.png" border="" onmouseover="this.src='+"'images/button/conv_closeOn.png'"+';" onmouseout="this.src='+"'images/button/conv_close.png'"+';"></a></div>';
}

// AJAX PART -----------------

function sendmsg(idu) {
/*
Valeurs de retour :
	1 : OK
	2 : vide
	3 : Pas logged
*/
	var url = 'ajax-chat-send-msg.php';
	var idu = idu;
	var msg = encodeURIComponent($('saisie'+ idu).value);
	var parametres = 'idu=' + idu + '&msg=' + msg + '&key=' + Math.random();

	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres,
			onComplete: retour_msg_sent
		}
	);

}

function retour_msg_sent(requete) {

switch (requete.responseText) {
// A voir + tard
  case '2': 
  return;
  
  case '3': 
  return;
  }
}

function check_DB_msg() {
/*
Valeurs de retour :
	1 : OK
	2 : vide
	3 : Pas logged
*/
	var url = 'ajax-chat-check-msg.php';
	var parametres = 'TS=' + last_ping + '&clef = '+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			asynchronous: false,
			parameters: parametres,
			onComplete: spread_msg
		}
	);

}

function spread_msg(requete)
{
	var nodesPersonne = requete.responseXML.getElementsByTagName('sender');
	for (i=0 ; i<nodesPersonne.length ; i++)
	{
		var output = '';
		var nodePersonne = nodesPersonne[i];
		var Messages = nodePersonne.getElementsByTagName('msg');
		var attributes = nodePersonne.attributes;
		var id = attributes.getNamedItem('id').nodeValue;
	var nodePseudo = nodePersonne.getElementsByTagName('pseudo')[0];
	var pseudo = nodePseudo.firstChild.nodeValue;
	var nodeAvatar = nodePersonne.getElementsByTagName('avatar')[0];
	var avatar = nodeAvatar.firstChild.nodeValue;
		for (j=0 ; j<Messages.length ; j++)
			{
			var nodeNom = nodePersonne.getElementsByTagName('msg')[j];
            var msg = nodeNom.firstChild.nodeValue;
			
			output += '<div id="msg_'+ id +'" class="conv_lui"><span style="font-size:10px; font-weight:bold; color:#969696; font-family:verdana,sans-sherif">' + pseudo + ' </span>: '+ msg + '</div>';
			}
			output = urldecode(output);
			
			if (!$('c'+ id))
			{
			newmessfrom(id, pseudo, avatar);
			$('chat_'+ id).innerHTML += output;
			}
			else if ($('discussion_'+ id).style.visibility == 'visible')
			{
			$('chat_'+ id).innerHTML += output;
			$('chat_'+ id).scrollTop = 100000000000000000000; //  On focus en bas de la div ;)
			}
			else
			{
			newmessfrom(id, pseudo, avatar);
			$('chat_'+ id).innerHTML += output;
			}
	}
		// On actualise le TS
	var nodeTS = requete.responseXML.getElementsByTagName('newTS')[0];
	var newTS = nodeTS.firstChild.nodeValue;
	
	last_ping = newTS;
}

function connection_chat(idu, pseudo)
{
changestatus(1);
my_id = idu;
last_ping = microtime(true);
my_pseudo = pseudo;
afficheID('right');
$('chat').innerHTML = '<a href="javascript:;" onclick="disconnect_chat()" class="header" style="color:#00FF21">Chat</a>';
refresh_msgs = new PeriodicalExecuter(check_DB_msg, 2);
refresh_bmks = new PeriodicalExecuter(check_DB_bmk, 10);
check_DB_bmk();
}

function disconnect_chat()
{
changestatus(0);
cacheID('right');
$('list_conv').innerHTML = '';
$('chat').innerHTML = '<a href="javascript:;" onclick="connection_chat('+"'"+ my_id +"'"+', '+"'"+ my_pseudo +"'"+')" class="header" style="color:#FF0000">Chat</a>';
refresh_msgs.stop();
refresh_bmks.stop();
set_session(0, 0, 0,-100);
}

function changestatus(status)
{
/*
Valeurs de retour :
	1 : OK
	2 : status >4
	3 : Guest
*/
	var url = 'ajax-chat-change-status.php';
	var parametres = 'status=' + status + '&clef = '+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres
		}
	);

}

function set_session(id, psd, avat,status)
{
/*
Valeurs de status :
	 0 : Fenetre réduite
	 1 :		 ouverte
	-1 : détruire une session
   -100: Détruire toutes les sessions : deconnection
*/
	var url = 'ajax-chat-change-session.php';
	var parametres = 'idu=' + id + '&pseudo=' + psd + '&avatar=' + avat + '&status=' + status + '&clef = '+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres
		}
	);

}


function update_ping()
{
/*
Valeurs de retour :
	1 : OK
	2 : status >4
	3 : Guest
*/
	var url = 'ajax-chat-update-ping.php';
	var parametres = '&clef = '+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres
		}
	);

}

function check_DB_bmk() {

	var url = 'ajax-chat-refresh_bmk.php';
	var parametres = '&clef = '+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres,
			onComplete: spread_bmk
		}
	);
update_ping(); // On update pour montrer qu'on est toujours la
}

function spread_bmk(requete)
{
var online = '';
var offline = '';
	var nodeOnline = requete.responseXML.getElementsByTagName('online');
	for (i=0 ; i<nodeOnline.length ; i++)
	{
		var nodePersonne = nodeOnline[i];
		var attributes = nodePersonne.attributes;
		var id = attributes.getNamedItem('id').nodeValue;
		var nodePseudo = nodePersonne.getElementsByTagName('pseudo')[0];
		var pseudo = nodePseudo.firstChild.nodeValue;
		var nodeStatus = nodePersonne.getElementsByTagName('status')[0];
		var status = nodeStatus.firstChild.nodeValue;
		var nodeAvatar = nodePersonne.getElementsByTagName('avatar')[0];
		var avatar = nodeAvatar.firstChild.nodeValue;
		online += '<a href="javascript:;" onclick="newconv('+ "'"+ pseudo +"'"+', '+"'"+ id +"'"+', '+"'"+ avatar +"'"+')"><div class="bmk"><img src="images/icons/chat_status/'+ status +'.png" border="">'+ pseudo +'</div></a>';
	}
		var nodeOffline = requete.responseXML.getElementsByTagName('offline');
	for (i=0 ; i<nodeOffline.length ; i++)
	{
		var nodePersonne = nodeOffline[i];
		var nodePseudo = nodePersonne.getElementsByTagName('pseudo')[0];
		var pseudo = nodePseudo.firstChild.nodeValue;
		offline += '<div class="bmkoff">'+ pseudo +'</div>';
	}
$('online').innerHTML = online;
//$('offline').innerHTML = offline;
}

function recup_DB_msg() {
/*
Valeurs de retour :
	2 : Guest
	XML Sinon
	*/
	var url = 'ajax-chat-msg-recup.php';
	var parametres = '&clef='+Math.random();
	var myAjax = new Ajax.Request(
		url,
		{
			method: 'get',
			parameters: parametres,
			onComplete: spread_recup_msg
		}
	);

}

function spread_recup_msg(requete){
	var nodesPersonne = requete.responseXML.getElementsByTagName('conv');
	for (i=0 ; i<nodesPersonne.length ; i++)
	{
		var output = '';
		var nodePersonne = nodesPersonne[i];
		var attributes = nodePersonne.attributes;
		var id = attributes.getNamedItem('id').nodeValue;
		var pseudo = attributes.getNamedItem('pseudo').nodeValue;
		var avatar = attributes.getNamedItem('avatar').nodeValue;
		var status = attributes.getNamedItem('status').nodeValue;
		var Messages = nodePersonne.getElementsByTagName('msg');
		for (j=0 ; j<Messages.length ; j++)
			{
			var nodeNom = nodePersonne.getElementsByTagName('msg')[j];
            var msg = nodeNom.firstChild.nodeValue;
			var attribute = nodeNom.attributes;
			var from = attribute.getNamedItem('from').nodeValue;
			if (from == "me")
			output += '<div class="conv_me"><span style="font-size:10px; font-weight:bold; color:#969696; font-family:verdana,sans-sherif">' + my_pseudo + ' </span>: '+ msg + '</div>';
			else if(from == "him")
			output += '<div class="conv_lui"><span style="font-size:10px; font-weight:bold; color:#969696; font-family:verdana,sans-sherif">' + pseudo + ' </span>: '+ msg + '</div>';
			}
			
			newconv(pseudo, id, avatar);
			$('chat_'+ id).innerHTML += urldecode(output);
			redconv(id, pseudo);
			if (status == "1"){
				openconv(id, pseudo); // On réouvre seulement si ca l'était, du coup auto focus en bas ;)
			}
	}
}