var url = 'http://www.web-modules.net/';

// paramètres
var nb_dl_max = 20;
var intervalle_dl = 20;

// scroll en bas de page
function scroll_to_bottom()
{
	scrollTo(0, 99999);
}
window.onload = scroll_to_bottom;

// AJAX est désactivé ou indisponible ?
var AJAX_refused = false;
var ERREUR_AJAX = 'Erreur : votre anvigateur ne supporte la technologie AJAX, veuillez vous munir d\'un navigateur plus récent (à jour) : je ne peux que vous conseiller d\'utiliser FireFox 2.0 !';

// gestion des messages par défaut dans les input d'envoi
var defaut_champs = new Array ();
	defaut_champs['pseudo'] = true;
	defaut_champs['message'] = true;
var dfaut_champs_messages = new Array();
	dfaut_champs_messages['pseudo'] = 'Pseudo';
	dfaut_champs_messages['message'] = 'Message';
var stop_blur_message = false;
function change_pseudo(id_input, type)
{
	if(type == 'focus' && defaut_champs[id_input] == true)
	{
		defaut_champs[id_input] = false;
		document.getElementById(id_input).value = '';
		document.getElementById(id_input).style.color = '#000000';
	}
	else if(type == 'blur' && document.getElementById(id_input).value == '')
	{
		if(id_input == 'message' && stop_blur_message==true)
			return;

		defaut_champs[id_input] = true;
		document.getElementById(id_input).value = dfaut_champs_messages[id_input];
		document.getElementById(id_input).style.color = '#999999';
	}
}

// actualisation du bouton 'Envoyer'
function actu_send_button()
{
	if(defaut_champs['pseudo'] == true || defaut_champs['message'] == true || document.getElementById('message').value == '' || document.getElementById('pseudo').value == '')
	{
		document.getElementById('send_button').disabled = true
	}
	else
	{
		document.getElementById('send_button').disabled = false
	}

	setTimeout('actu_send_button()', 150);
}

// envoi du message par AJAX
var envoie_actif = false;
var nb_envoie = 0;
var temps_dernier_envoie = 0;
function send_msg()
{
	if(AJAX_refused == true)
	{
		return false;
	}

	// valeur des champs
	var pseudo = document.getElementById('pseudo').value;
	var message = document.getElementById('message').value;

	// champs non complétés
	if(defaut_champs['pseudo'] == true || defaut_champs['message'] == true || document.getElementById('message').value == '' || document.getElementById('pseudo').value == '')
	{
		return true;
	}

	// envoi déjà en cours
	if(envoie_actif == true)
	{
		alert('Votre précédent message est en train d\'être envoyé, ne soyez pas si impatient :o)' + "\n" + 'Si après plusieurs votre message n\'est toujours pas envoyé vous pouvez rafraichir votre navigateur.');
		return true;
	}

	// tentative de flood
	var temps_instantanne = new Date()
	temps_instantanne = temps_instantanne.setTime(temps_instantanne) / 1000;
	if((temps_instantanne - temps_dernier_envoie) < 2) // différence en secondes > 2 secondes
	{
		alert('Alors comme ça on tente de flooder ?' + "\n" + 'Un message toutes les 2 secondes devrait pourtant suffire à une utilisation normale ...');
		return true;
	}

	// envoi en cours ...
	envoie_actif = true;
	document.getElementById('message').disabled = true;
	document.getElementById('pseudo').disabled = true;
	document.getElementById('send_button').disabled = true;
	document.getElementById('message').value = 'Envoi en cours ...';
	document.getElementById('message').style.color = 'red';

	// protection du timeout -> 10 secondes
	setTimeout('protect_timeout_send(' + nb_envoie + ', \'' + escape(message) + '\')', 10*1000);

	// on enregistre le pseudo dans un cookie
	var dateExt = new Date(2020,11,11);
	dateExt = dateExt.toGMTString();
	document.cookie = 'pseudo_tchat=' + escape(Utf8.encode(pseudo)) +'; expires ='+dateExt+';';

	// on envoi notre message
	var xhr = get_XMLHttpRequest();
	if (xhr == false)
	{
		AJAX_refused = true;
		recevoir_messages = false;
		return false;
	};

	xhr.open('POST', 'envoie.php', true);
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState == 4)
		{
			// page introuvable
			if(xhr.status != 200 || xhr.responseText != 'ok')
			{
				alert('Page cible du formulaire introuvable : "' + xhr.status + '"');

				envoie_actif = false;
				document.getElementById('message').value = '';
				document.getElementById('message').style.color = 'black';
				document.getElementById('message').disabled = false;
				document.getElementById('pseudo').disabled = false;
				document.getElementById('send_button').disabled = false;
			}

			var retour_envoie = xhr.responseText;

			// envoie terminé !
			temps_dernier_envoie = new Date()
			temps_dernier_envoie = temps_dernier_envoie.setTime(temps_dernier_envoie) / 1000;
			nb_envoie += 1;
			envoie_actif = false;
			document.getElementById('message').value = '';
			document.getElementById('message').style.color = 'black';
			document.getElementById('message').disabled = false;
			document.getElementById('pseudo').disabled = false;
			document.getElementById('send_button').disabled = false;
			document.getElementById('nb_messages_envoie').innerHTML = nb_envoie;

			// traitement des données reçus
			if(/^Erreur/.test(retour_envoie) == true)
			{
				alert(retour_envoie);
			}
		}
	}

	//envoye de l'id du dernier message
	var data = 'id=' + id_tchat + '&pseudo=' + escape(Utf8.encode(pseudo)) + '&message=' + escape(Utf8.encode(message))
	xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	xhr.send(data);

	return true;
}

// protection contre les erreurs de serveur (extérieur)
function protect_timeout_send(id_envoie, message)
{
	if(AJAX_refused == true)
	{
		return;
	}

	if(id_envoie == nb_envoie)
	{
		// restauration du champ
		document.getElementById('message').style.color = 'black';
		document.getElementById('message').disabled = false;
		document.getElementById('pseudo').disabled = false;
		document.getElementById('send_button').disabled = false;

		// données
		message = unescape(message);
		document.getElementById('message').value = message;

		// message à l'utilisateur
		alert('Erreur : le serveur n\'a pas répondu, essayez de soumettre votre message à nouveau et vérifiez que votre connexion internet est active !');
	}
}

// activer le récupération automatique des messages
var nb_dl = 0;
var intervalle_before_dl = 0;
var recevoir_messages = false;
function activer_reception()
{
	if(recevoir_messages == false)
	{
		// état de la réception
		recevoir_messages = true;
		intervalle_before_dl = intervalle_dl;
		nb_dl = 0;

		// apparence du message
		document.getElementById('reception_messages_txt').innerHTML = 'activé (<span id="left_before_dl">' + intervalle_before_dl + '</span>)';
		document.getElementById('reception_messages_txt').style.color = 'green';

		// temps restant
		setTimeout('left_time_dl()', 1000);
	}
	else
	{
		// état de la réception
		recevoir_messages = false;

		// apparence du message
		document.getElementById('reception_messages_txt').innerHTML  = 'désactivée';
		document.getElementById('reception_messages_txt').style.color = 'red';
	}
}

// temps restant avant DL
function left_time_dl()
{
	if(recevoir_messages == true)
	{
		if(intervalle_before_dl == 0)
		{
			document.getElementById('left_before_dl').innerHTML = '0 ...';

			if(is_getting_msg == false)
				get_msg();
		}
		else
		{
			intervalle_before_dl -= 1;
			document.getElementById('left_before_dl').innerHTML = intervalle_before_dl;
		}

		setTimeout('left_time_dl()', 1000);
	}
}

// réception des messages
var is_getting_msg = false;
var nb_receive = 0;
function get_msg()
{
	if(AJAX_refused == true)
	{
		return;
	}

	// réception déjà en cours
	if(is_getting_msg == true)
	{
		return;
	}

	// quota de réception dépassé
	nb_dl += 1;
	if(nb_dl > nb_dl_max)
	{
		activer_reception();
		return;
	}

	// réception en cours ...
	is_getting_msg = true;

	// protection du timeout -> 10 secondes
	setTimeout('protect_timeout_receive(' + nb_receive + ')', 10*1000);

	// on réception des messages
	var xhr = get_XMLHttpRequest();
	if (xhr == false)
	{
		AJAX_refused = true;
		recevoir_messages = false;
		document.getElementById('reception_div').innerHTML = '';
		document.getElementById('reception_div').style.display = 'none';
		return;
	};

	xhr.open('POST', 'reception.php', true);
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState == 4 && xhr.status == 200)
		{
			var retour_msg = xhr.responseText;

			// on relance le compteur
			intervalle_before_dl = intervalle_dl + 1;
			is_getting_msg = false;
			nb_receive += 1;
			document.getElementById('nb_reception').innerHTML = nb_receive;

			if(retour_msg != '')
			{
				// erreur
				if(/^Erreur/.test(retour_msg) == true)
				{
					alert(retour_msg);
					return;
				}

				// on récupère l'ID du dernier message
				var array_donnees = retour_msg.split('<><><>');
				last_id_msg = array_donnees[1]

				// traitement des données reçus
				var array_msg = array_donnees[0].split('<><>');
				var count_msg = array_msg.length;
				for(var i=0; i<count_msg; i++)
				{
					if(array_msg[i] != '')
					{
						var infos_msg = array_msg[i].split('<>');
						nb_messages++;

						var array_options = infos_msg[0].split(':');
						var pseudo = infos_msg[1];
						var message = infos_msg[2];
						var date = new Date(array_options[1]*1000)
						var date_format = complete_date(date.getDate()) + '/' + complete_date(date.getMonth()+1) + ' à ' + complete_date(date.getHours()) + 'h' + complete_date(date.getMinutes());

						var html_message = '<div class="' + ((nb_messages%2 == 1) ? 'pair' : 'impair') + '" id="msg_' + array_options[0] + '"><div class="date">' + date_format + '</div>' + ((array_options[2] == 1) ? ' <a href="#null" onclick="suppr_msg(' + array_options[0] + '); return false;"><img src="Supprimer.png" alt="" style="vertical-align: middle" /></a>' : '') + '<strong>' + pseudo + '</strong> :<br />' + parse_smilies(message) + '</div>';

						document.getElementById('messages').innerHTML += html_message;
					}
				}
			}

			// on arrête de receptionner
			if(nb_dl >= nb_dl_max)
			{
				activer_reception();
				return;
			}

			// scroll en bas de page
			scroll_to_bottom();
		}
	}

	//envoye de l'id du dernier message
	var data = 'id=' + id_tchat + '&last_id=' + last_id_msg;
	xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	xhr.send(data);
}

// protection contre les erreurs de serveur (extérieur)
function protect_timeout_receive(num_receive)
{
	if(AJAX_refused == true)
	{
		return;
	}

	if(nb_receive == num_receive)
	{
		// nouvelle tentative
		intervalle_before_dl = intervalle_dl;
		is_getting_msg = false;

		// message à l'utilisateur
		alert('Erreur : le serveur n\'a pas répondu, la réception des messages à échoué !' + "\n" + 'Vérifiez que votre connexion internet est active, une nouvelle tentive va démarrer dans 15 secondes. (cliquez sur OK)');
	}
}

// suppression d'un message qui nous appartient
var suppr_en_cours = false;
var nb_suppr = 0;
function suppr_msg(id_msg)
{
	if(AJAX_refused == true)
	{
		window.location = 'index.php?id=' + id_tchat + '&suppr=' +id_msg;
		return;
	}

	// suppression déjà en cours
	if(suppr_en_cours == true)
	{
		return;
	}

	// suppression en cours ...
	suppr_en_cours = true;

	// protection du timeout -> 10 secondes
	setTimeout('protect_timeout_suppr(' + nb_suppr + ')', 10*1000);

	// on supprime le message et on récupère le retour
	var xhr = get_XMLHttpRequest();
	if (xhr == false)
	{
		AJAX_refused = true;
		window.location = 'index.php?id=' + id_tchat + '&suppr=' +id_msg;
		return;
	};

	xhr.open('POST', 'suppr.php', true);
	xhr.onreadystatechange = function()
	{
		if (xhr.readyState == 4 && xhr.status == 200)
		{
			var retour_suppr = xhr.responseText;
			suppr_en_cours = false;
			nb_suppr += 1;

			// erreur
			if(/^Erreur/.test(retour_suppr) == true)
			{
				alert(retour_suppr);
				return;
			}

			// suppression du message dans la page
			document.getElementById('msg_' + id_msg).innerHTML = '';
			document.getElementById('msg_' + id_msg).style.borderTop = '0';
			alert('Message supprimé.');
		}
	}

	//envoye de l'id du dernier message
	var data = 'id=' + id_tchat + '&msg=' + id_msg;
	xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	xhr.send(data);
}

// protection contre les erreurs de serveur (extérieur)
function protect_timeout_suppr(id_suppr)
{
	if(AJAX_refused == true)
	{
		AJAX_refused = true;
		window.location = 'index.php?id=' + id_tchat + '&suppr=' +id_msg;
		return;
	}

	if(id_suppr == nb_suppr)
	{
		// message à l'utilisateur
		alert('Erreur : le serveur n\'a pas répondu, la suppression à échoué !' + "\n" + 'Vérifiez que votre connexion internet est active et réessayez de le supprimer.');
	}
}

// remplacement des smilies
function parse_smilies(t)
{
	t = t.replace(/:faché:/g, '<img src="' + url + 'design/smilies/angry.png" alt=" :faché: " style="vertical-align: middle" />')
	t = t.replace(/:content:/g, '<img src="' + url + 'design/smilies/biggrin.png" alt=" :content: " style="vertical-align: middle" />')
	t = t.replace(/o_O/g, '<img src="' + url + 'design/smilies/blink.png" alt="o_O" style="vertical-align: middle" />')
	t = t.replace(/\^\^/g, '<img src="' + url + 'design/smilies/happy.png" alt="^^" style="vertical-align: middle" />')
	t = t.replace(/:D/g, '<img src="' + url + 'design/smilies/laugh.png" alt=":D" style="vertical-align: middle" />')
	t = t.replace(/:oh:/g, '<img src="' + url + 'design/smilies/ohmy.png" alt=":oh:" style="vertical-align: middle" />')
	t = t.replace(/:\(/g, '<img src="' + url + 'design/smilies/sad.png" alt=":(" style="vertical-align: middle" />')
	t = t.replace(/:\)/g, '<img src="' + url + 'design/smilies/smile.png" alt=":)" style="vertical-align: middle" />')
	t = t.replace(/:p/g, '<img src="' + url + 'design/smilies/tongue.png" alt=":p" style="vertical-align: middle" />')
	t = t.replace(/:\?/g, '<img src="' + url + 'design/smilies/unsure.png" alt=":?" style="vertical-align: middle" />')
	t = t.replace(/;\)/g, '<img src="' + url + 'design/smilies/wink.png" alt=";)" style="vertical-align: middle" />')
	t = t.replace(/:love:/g, '<img src="' + url + 'design/smilies/wub.png" alt=" :love: " style="vertical-align: middle" />')

	return t;
}

// complète une chaine avec des zeros
function complete_date(date)
{
	if(Number(date)<10)
		date = '0' + date;

	return date;
}

// obtenir une connexion XMLHttpRequest
function get_XMLHttpRequest()
{
	if (window.XMLHttpRequest) return new XMLHttpRequest();
	else if(window.ActiveXObject) // Internet Explorer
	{
	   try
	   {
			return new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e)
		{
			return new ActiveXObject('Microsoft.XMLHTTP');
		}
	}
	else return false
}