function get_cookie ( cookie_name ) {
	var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
	if ( results ) return ( unescape ( results[2] ) );
	else return null;
}

// sens = 0 -> ajout vers le bas
// sens = 1 -> ajout en haut
var sens;
var update;
// - Empêcher les doublons / le plus grand ID de la dernière requête est en fait le premier (XML "inversé" -
var lastPostId = 0;		// lastPostId : post ayant l'id le plus grand de la dernière requête
var highPostId = 0;		// hightPostId : post ayant l'id le plus grand dans la requête
var lastPostDate = 0;

var maxPost;
// Nombre maximal de post à afficher.
if(!(maxPost = parseInt(get_cookie("maxPost")))) { maxPost = 20; }

var smileys = get_cookie("smileys");
var smileys_type = get_cookie("smileys_type");

var maxPostConserv = 20;	// Nombre de posts cachés à conserver
var postIds = new Array();	// IDs des posts affichés
var postHiddenIds = Array();	// IDs des posts cachés

$(document).ready(function(){
	sens = parseInt($("#sens option:selected").val());
	init_smileys()
	$("#maxPost").val(maxPost);	// maximum de post à afficher dans la case
	update_board();			// premier update
	update = setInterval("update_board()", 30000 );	// update automatique toutes les 30 sec.
	// frapper [Entrée] envoie le message
	add_events_form();
});


function update_board() {
	anime_load();
	$.ajax({
	url: "./proxy?date="+Math.random(),	// la partie aléatoire permet d'éviter le cache.
//	url: "./remote.xml?"+Math.random(),
	type: 'GET',
	dataType: 'xml',
	timeout: 3000,				// Timeout de 3 secondes sur la requête -> éxécution de error au delà
	error: function(){
//		alert('Error loading XML document');
		$("#dernier").addClass("rouge");
	},
	success: function(xml){
		build_line(xml);
		$("#dernier").removeClass("rouge");
		$("#last").text(lastPostId); // mise à jour du post
		$("#load").stop().css({width:"0px"});
	}
	});
}


/*
- Pour chaque <post> ... </post> :
	- choper l'ID
	- extraire les infos
	- construire la ligne : [<span class="nhorloge">hh:mm:ss</span>] <span class="login">login</span> <span class="message"> .... </span>
	- ajouter la ligne au bloc temporaire #temp
- Ajouter au bloc #messages le bloc temporaire
- cacher les posts en trop
- supprimer les psots non affichés
- ajouter sur les éléments les fonction hover et click
*/
function build_line(xml) {
	var lignes = 0;
	$('#temp').empty();
	$(xml).find('post').each(function(){
		var ligne = "";
		var id_text = $(this).attr("id");
		var id = parseInt(id_text);
		// Si l'ID du post est supérieur au dernier ID affiché, c'est bon.
		if(id>lastPostId) {
			lignes++;
			postIds.push(id);
			if(id>highPostId) highPostId = id;
			var texte = $(this).find('message').text();
			texte = analyse_horloge(texte);
			var info = $(this).find('info').text();
			var login = $(this).find('login').text();
			var time = $(this).attr("time");
			var hms = time.substring(8,10)+":"+time.substring(10,12)+":"+time.substring(12,14);
			var classHms = "date-"+time.substring(8,10)+""+time.substring(10,12)+""+time.substring(12,14);
			var classHm  = "date-"+time.substring(8,10)+""+time.substring(10,12);
			ligne += "[<span class='nhorloge nhorloge-new nhorloge-"+classHms+" nhorloge-"+classHm+"' onclick='add_nhorloge(\""+hms+"\",\""+classHms+"\","+id+")'";
			ligne += " title='"+info+"'>"+time.substring(8,10)+":"+time.substring(10,12)+":"+time.substring(12,14)+"</span>]";
			ligne += "<span class='login' title='"+info+"'><a href='../~"+login+"/'>"+login+"</a></span>";
			ligne += "<span class='message mess-"+classHms+" mess-"+classHm+" '>"+texte+"</span>";
			if(sens == 0) {
				$("<div class='post post-"+classHms+" post-"+classHm+"' id='post-"+id+"'></div>").html(ligne).prependTo('#temp');
			} else {
				$("<div class='post post-"+classHms+" post-"+classHm+"' id='post-"+id+"'></div>").html(ligne).appendTo('#temp');
			}
		}
	});
	if(sens == 0) { $('#messages').append($('#temp').html()); } else { $('#messages').prepend($('#temp').html()); }
	$('#temp').empty();
	lastPostId = highPostId;
	postIds.sort();
	while(postIds.length > maxPost) {
		$("#post-"+postIds[0]).fadeOut("slow");
		$("#post-"+postIds[0]).hide();
		postHiddenIds.push(postIds[0]);
		postIds.shift();
	}
	postHiddenIds.sort();
	while(postHiddenIds.length > maxPostConserv) {
		$("#post-"+postHiddenIds[0]).remove();
		postHiddenIds.shift();
	}
	add_events(true);
	return lignes;
}

function add_events(build) {
	if(build) { var news = "-new"; } else { var news = ""; }
	$(".horloge"+news).hover(
		function () {
			$(this).addClass("hover");
			var class = $(this).attr("class").replace( /.*(date-\d+).*/, "$1");
			$("."+class+", .nhorloge-"+class+",.mess-"+class).addClass("hover");
			try {
				var messageTop = "";
				$(".post-"+class).each(function() {
					messageTop += $(this).html()+"<br/>";
				});
				if(messageTop != "") $("#top-mess").html(messageTop).show();
			} catch(err) {}
		},
		function () {
			$(this).removeClass("hover");
			var class = $(this).attr("class").replace( /.*(date-\d+).*/, "$1");
			$("."+class+", .nhorloge-"+class+", .mess-"+class).removeClass("hover");
			$("#top-mess").hide();
		}
	);
	$(".nhorloge"+news).hover(
		function () {
			$(this).addClass("hover");
			var class = $(this).attr("class").replace( /.*(date-\d{6}).*/, "$1");
			$("."+class+", .nhorloge-"+class+", ."+class.substring(0,9)).addClass("hover");
		},
		function () {
			$(this).removeClass("hover");
			var class = $(this).attr("class").replace( /.*(date-\d{6}).*/, "$1");
			$("."+class+", .nhorloge-"+class+", ."+class.substring(0,9)).removeClass("hover");
		}
	);
	$(".smiley"+news).hover(
		function(event) {
			if(smileys && smileys_type=="popup") {
				var smileyName = $(this).attr("class").replace( /.*smiley-([a-zA-z\s0-9-_']+).*/g, "$1");
				$(this).append("<img class='hfrsmiley hfrsmiley-popup' src='http://forum.hardware.fr/images/perso/"+smileyName+".gif' alt='' style='left:"+event.layerX+"px; top:"+event.layerY+"px;'/>");
			}
		},
		function() {
			$(".hfrsmiley-popup").remove();
		}
	);
	$(".horloge"+news).each(function() { $(this).removeClass("horloge-new"); });
	$(".nhorloge"+news).each(function() { $(this).removeClass("nhorloge-new"); });
	$(".smiley"+news).each(function() { $(this).removeClass("smiley-new"); });
}

function add_events_form() {
	$("#form").submit(function() {
		post_board();
		return false;
	});
	$("#stop").toggle(
	function() {
		clearInterval(update);
		$(this).val("Start update");
	},
	function () {
		update_board();
		update = setInterval("update_board()", 30000 );
		$(this).val("Stop update");
	});
	$("#sens").change(function() {
		sens = parseInt($(this).val());
		document.cookie="sens="+sens;
		change_sens(sens);
	});
}

function post_board() {
	var message = $("#mess").val();
//	$.post("../board/add.html", {message: message, section: 1});
xml = "<board><post time='20080218now-da' id='"+(highPostId+1)+"'>	<info>Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.8.1.12) Ge</info><message>"+message+" (message non affiché en vrai)</message>	<login>Moi</login></post></board>";
	build_line(xml);
	$("#mess").val("");
	setTimeout("update_board()",1000);
}

function add_nhorloge(date,class,taiste) {
/*	var multi = $("."+class).length;
	if(multi>1) {
//		while($() {
//			
//		}
	}
*/
	$("#mess").val($("#mess").val()+date+" : ");
	$("#mess").focus();
}

function analyse_horloge(message) {
	var newMess = message.replace( /((\d\d):(\d\d)(:(\d\d)|))/g, "<span class='date-$2$3$5 horloge horloge-new'>$1</span>");
	if(smileys_type=="inline" && smileys) {
		newMess = newMess.replace( /(\[:([a-zA-z\s0-9-_']+)\])/g, "<span class='smiley smiley-new smiley-$2'><img class='hfrsmiley hfrsmiley-inline hfrsmiley-"+smileys_type+"' src='http://forum.hardware.fr/images/perso/$2.gif' alt='$1' /></span>");
	} else {
		newMess = newMess.replace( /(\[:([a-zA-z\s0-9-_']+)\])/g, "<span class='smiley smiley-new smiley-$2'>$1</span>");
	}
	return newMess;
}

function change_max(max) {
	maxPost=parseInt(max);
	document.cookie='maxPost='+maxPost;
	$("#maxPost").css({'border' : '1px solid green'});
}

function anime_load() {
      $("#load").animate({width: "100%"}, 3000 );
}

function change_sens(sens) {
	$(".post").each(function() {
		$(this).clone(true).prependTo("#temp1");
	});
	$('#messages').empty();
	$('#messages').html($('#temp1').html());
	$("#temp1").empty();
	add_events(false);
/*	if(sens == 1) {
		$("#global-top").html($("#global-bottom").html());
		$("#global-bottom").empty();
	} else {
		$("#global-bottom").html($("#global-top").html());
		$("#global-top").empty();
	}
	add_events_form();*/
}

function change_smileys() {
	if(smileys==true) { smileys=false; } else { smileys=true; }
	document.cookie='smileys='+smileys;
	if(!smileys) {
		$("#smileys").text("Activer les smileys").css({color:"green"});
		$(".smiley").each(function() {
			var smileyName = $(this).attr("class").replace( /.*smiley-([a-zA-z\s0-9-_']+).*/g, "$1");
			$(this).text("[:"+smileyName+"]");
		});
		$("#smileys-type-ul").hide();
	} else {
		$("#smileys").text("Désactiver les smileys").css({color:"red"});
		$("#smileys-type-ul").show();
		$(".smiley").each(function() {
			var smileyName = $(this).attr("class").replace( /.*smiley-([a-zA-z\s0-9-_']+).*/g, "$1");
			$(this).html("<img class='hfrsmiley hfrsmiley-inline hfrsmiley-"+smileyName+"' src='http://forum.hardware.fr/images/perso/"+smileyName+".gif' alt='[:"+smileyName+"]' />");
		});
		$(".hfrsmiley-inline").show();
	}
}

function change_smileys_type() {
	if(smileys_type == "popup") {
		smileys_type = "inline";
		$("#smileys-type").text("Voir les smileys en popup");
		$(".smiley").each(function() {
			var smileyName = $(this).attr("class").replace( /.*smiley-([a-zA-z\s0-9-_']+).*/g, "$1");
			$(this).html("<img class='hfrsmiley hfrsmiley-inline hfrsmiley-"+smileyName+"' src='http://forum.hardware.fr/images/perso/"+smileyName+".gif' alt='[:"+smileyName+"]' />");
		});
	} else {
		smileys_type = "popup";
		$("#smileys-type").text("Voir les smileys en ligne");
		$(".hfrsmiley-inline").remove();
		$(".smiley").each(function() {
			var smileyName = $(this).attr("class").replace( /.*smiley-([a-zA-z\s0-9-_']+).*/g, "$1");
			$(this).text("[:"+smileyName+"]");
		});
	}
	document.cookie='smileys_type='+smileys_type;

}

function init_smileys() {
	// Garder la configuration de la tribune historique  popup/inline

	if(smileys_type != "popup" && smileys_type != "inline") { smileys_type = "popup"; }
	if(smileys=="true") {
		$("#smileys").text("Désactiver les smileys").css({color:"red"});
		smileys=true;
	} else {
		$("#smileys-type-ul").hide();
		$("#smileys").text("Activer les smileys").css({color:"green"});
		smileys=false;
	}
	if(smileys_type=="inline") {
		$("#smileys-type").text("Voir les smileys en popup");
	} else {
		$("#smileys-type").text("Voir les smileys en ligne");
	}
}
