changeset 0:629389204276

Import initial
author Franck Deroche <webmaster@defr.org>
date Sat, 20 Oct 2007 14:15:10 +0200
parents
children 7dec52982000
files .hgignore .htaccess DualBlog.gif DualBlog_static.gif RollUp.js StyleSwitcher.js admin.js admin.php admin_xml.php atom.php classes.php comment.20060616.php comment.php comment_.php comment_back.php comment_old.php css/Brushed.css css/HoverExp.css css/Lite.css css/Lite_nv.css css/OliveVerde.css css/Res_Brushed/Brush_Side.png css/Res_Brushed/Brush_Title.png css/Res_Brushed/Degrade_Post.gif css/Res_Brushed/Fond_Main.jpg css/Res_Brushed/Fond_Main_bk.jpg css/Res_Brushed/Fond_Post.gif css/Res_LiteReloaded/Gimp_grayscale.jpg css/Res_OliveVerde/Fond.png css/Res_OliveVerde/FondMain.png css/Res_OliveVerde/FondPost.png css/Res_OliveVerde/FondPostContent.png css/Res_OliveVerde/FondTitre.png css/Res_OliveVerde/Gimp.jpg css/Res_OliveVerde/Gimp.png css/Res_OliveVerde/Gimp_grayscale.jpg css/Res_OliveVerde/ShellBar.gif css/Res_OliveVerde/ShellBar.png css/Res_OliveVerde/ShellClose.png css/Res_Somatic/bg_test.png css/Res_Somatic/bg_titre.png css/Res_Somatic/puce.gif css/Somatic.css css/Somatic.css_ css/Somatic_JS.css css/admin.css css/comment.css css/comment.css_ css/icons/Hank.png css/icons/Hank_8bit.gif css/icons/Hank_8bit.png css/icons/Somatic.css css/icons/apps_128X128_32bpp.png css/icons/connect.gif css/icons/connect.png css/icons/connect_8bit.png css/icons/connect_o.png css/icons/empty_128X128_32bpp.png css/icons/fav.png css/icons/fav_8bit.png css/icons/findro_128X128_32bpp.png css/icons/geek.png css/icons/geek_8bit.png css/icons/geek_b.png css/icons/geek_o.png css/icons/itunes_128X128_32bpp.png css/icons/like.png css/icons/like_8bit.png css/icons/network.png css/icons/pictures.png css/icons/profile.png css/icons/profile_8bit.png css/icons/safari_128X128_32bpp.png css/icons/studio.xcf css/icons/todo.png css/icons/todo_8bit.png css/icons/todo_b.png css/icons/todo_o.png css/icons/top.php css/icons/zog_128X128_32bpp.png dualblog.gif foot.php includes/class.dataaccess.php includes/class.domutils.php includes/class.requete.php includes/class.textutils.php includes/config.php.dist index.php index.php_ mood.php mood/25/Angry.png mood/25/Clop.png mood/25/Cry.png mood/25/Goggle.png mood/25/Loud.png mood/25/Love.png mood/25/Neutral.png mood/25/Oohh.png mood/25/Oups.png mood/25/Sleep.png mood/25/Thumbs.db mood/25/Tongue.png mood/25/Weird.png mood/25/Yes.png mood/25/_.png mood/Angry.png mood/Clop.png mood/Cry.png mood/Goggle.png mood/Loud.png mood/Love.png mood/Neutral.png mood/Oohh.png mood/Oups.png mood/Sleep.png mood/Tongue.png mood/Weird.png mood/Yes.png mood/_.png mood/light/Angry.png mood/light/Clop.png mood/light/Cry.png mood/light/Goggle.png mood/light/LoudClair.png mood/light/Love.png mood/light/Neutral.png mood/light/Oups.png mood/light/Sleep.png mood/light/Tongue.png mood/light/Weird.png mood/light/Yes.png mood/light/_.png rss.php tag.php tb.php tb_send.php test.php testcase.html testcase.php top.php
diffstat 140 files changed, 3578 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,2 @@
+^.htpass$
+^includes/config.php$
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.htaccess	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,22 @@
+Options +FollowSymlinks
+RewriteEngine on
+RewriteRule ^dualblog.atom$ atom.php
+RewriteRule ^dualblog.rss$ rss.php
+RewriteRule ^posts/$ index.php [L]
+RewriteRule ^posts/([0-9]+)/([0-9]{1,2})$ index.php?type=cal&year=$1&month=$2 [L]
+RewriteRule ^posts/([0-9]+)-(.*)$ comment.php?id=$1 [L]
+RewriteRule ^posts/(.*)$ comment.php?id=$1 [L]
+RewriteRule ^tags/(.*)$ tag.php?tag=$1 [L]
+
+<Files admin*.php>
+    #  AuthUserFile "w:\www\blog\.htpass"
+    AuthUserFile "/home/defrnet/defr.net/blog/.htpass"
+    AuthGroupFile /dev/null
+    AuthName "Dual Blog - Administration"
+    AuthType Basic
+    require valid-user
+    #  Order Deny,Allow
+    #  Deny from all
+    #  Allow from 127.0.0.1
+</Files>
+
Binary file DualBlog.gif has changed
Binary file DualBlog_static.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RollUp.js	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,121 @@
+  var styleSwitch = {
+	set:function(title) {
+	  var i, a, main;
+	  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
+		if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title")) {
+			a.disabled = true;
+			if(a.getAttribute("title") == title) a.disabled = false;
+		}
+	  }
+	  document._currentStyleSheet = title;
+	},
+	
+	get:function() {
+	  return document._currentStyleSheet;
+	},
+	
+	getPref:function() {
+	  var a = document.getElementsByTagName("link");
+	  for(var i=0; a[i]; i++) {
+		if(a[i].getAttribute("rel").indexOf("Style") != -1 && a[i].getAttribute("rel").indexOf("Alt") == -1 && a[i].getAttribute("title"))
+			return a[i].getAttribute("title");
+	  }
+	  return null;
+	},
+	
+	unload:function() {
+	  var date = new Date();
+	  date.setTime(date.getTime() + 365 * 24 * 3600 * 1000);
+	  document.cookie="style=" + document._currentStyleSheet +";expires=" + date.toGMTString() + ";path=/";
+	}
+  }
+  
+  var arContent = new Array();
+  var arTitle = new Array();
+  
+  window.onload = function() {
+   var shownSection = 'About', i, x;
+   x=document.getElementsByTagName('dt');
+   for(i=0;i<x.length;i++) {
+	if(x[i].parentNode.id == 'SideBar') {
+		x[i].onclick=ToggleDisp;
+		arTitle[arTitle.length] = x[i];
+	}
+   }
+   x=document.getElementsByTagName('dd');
+   for (i=0;i<x.length;i++) {
+    if(x[i].parentNode.id == 'SideBar') {
+	arContent[arContent.length] = x[i];
+	if(arTitle[arContent.length - 1].id!=shownSection) {
+		x[i].style.display='none';
+	} else {
+		arTitle[arContent.length - 1].className='Actif';
+	}
+    }
+   }
+   var ad = document.getElementById('Adresse');
+   ad.onclick = ToggleLink;
+   arContent[arContent.length] = document.getElementById("Link");
+   arTitle[arTitle.length] = ad;
+   
+   styleSwitch.set(styleSwitch.getPref());
+/*   var dS = document.styleSheets;
+   if(dS && dS[dS.length - 1].title) {
+	  for(var i =0; i < dS.length; i++)
+		{
+		if(dS[i].title=='Somatic') {
+			if(dS[i].insertRule)
+				dS[i].insertRule("@import url('/blog/Somatic_JS.css');", 0);
+			else
+				dS[i].addImport('Somatic_JS.css');
+		}
+		}
+  }
+  else if(dS && styleSwitch.get() == "Somatic") {
+	dS[dS.length - 1].insertRule("@import url(/blog/Somatic_JS.css);", 0);
+	//for(j in dS[0]) alert(j);
+  }*/
+ }
+
+ window.onunload = function() {
+	styleSwitch.unload();
+	return true;
+ }
+
+
+  function ToggleDisp(e) {
+   for(var i=0; i<arTitle.length; i++) arTitle[i].className='';
+   var targetAc;
+   if(!e) e=window.event;
+   if(e.target) targetAc=e.target;
+   else targetAc=e.srcElement;
+   //Parait que la ligne suivante est utile pour Safari ^^;... Sauf qu'Opera retourne en plus le ns dans le nodeName...
+   while(targetAc.nodeName.toLowerCase() != 'dt' && targetAc.nodeName.toLowerCase() != 'html:dt') targetAc=targetAc.parentNode;
+   targetAc.className = 'Actif';
+   var nextSib=targetAc.nextSibling;
+   while(nextSib.nodeType!=1) {nextSib=nextSib.nextSibling;}
+   if(styleSwitch.get() != "Somatic") {
+	var nextSibDisp=(nextSib.style.display=='none') ? 'block' : 'none';
+	nextSib.style.display=nextSibDisp;
+   } else {
+	for(i=0;i<arContent.length;i++) arContent[i].style.display = 'none';
+	nextSib.style.display='block';
+   }
+  }
+  
+  function ToggleLink() {
+   var obj=document.getElementById('Link');
+   if(styleSwitch.get() == "Somatic") {
+   	for(i=0; i<arTitle.length; i++) arTitle[i].className='';
+	arTitle[arTitle.length - 1].className='Actif';
+	for(i=0;i<arContent.length;i++) arContent[i].style.display='none';
+	obj.style.display='block';
+    } else {
+	obj.style.display=(obj.style.display=='block') ? 'none' : 'block';
+   }
+  }
+  
+  function pop_config() {
+   alert('Vouip, je sais, faut qu\'j\'remette ca, mais faut l\'updater d\'abord ^^;;');
+  }
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/StyleSwitcher.js	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,57 @@
+function setActiveStyleSheet(title) {
+  var i, a, main;
+  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
+    if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title")) {
+      a.disabled = true;
+      if(a.getAttribute("title") == title) a.disabled = false;
+    }
+  }
+  createCookie("style", title, 365);
+  document.chosenStyleSheet = title;
+}
+
+function getActiveStyleSheet() {
+ /* var i, a;
+  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
+    if(a.getAttribute("rel").indexOf("Style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
+  }
+  return null;*/
+  return document.chosenStyleSheet;
+}
+
+function getPreferredStyleSheet() {
+  var i, a;
+  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
+    if(a.getAttribute("rel").indexOf("Style") != -1
+       && a.getAttribute("rel").indexOf("Alt") == -1
+       && a.getAttribute("title")
+       ) return a.getAttribute("title");
+  }
+  return null;
+}
+
+function createCookie(name,value,days) {
+  if (days) {
+    var date = new Date();
+    date.setTime(date.getTime()+(days*24*60*60*1000));
+    var expires = "; expires="+date.toGMTString();
+  }
+  else expires = "";
+  document.cookie = name+"="+value+expires+"; path=/";
+}
+
+function readCookie(name) {
+  var nameEQ = name + "=";
+  var ca = document.cookie.split(';');
+  for(var i=0;i < ca.length;i++) {
+    var c = ca[i];
+    while (c.charAt(0)==' ') c = c.substring(1,c.length);
+    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+  }
+  return null;
+}
+
+window.onunload = function(e) {
+  var title = getActiveStyleSheet();
+  createCookie("style", title, 365);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin.js	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,243 @@
+var arLIMenu = new Array();
+var curBPShown = 0;
+var wEdit, wBr, dp;
+
+var xmlRequest = {
+	init: function() {
+		try {
+			xmlRequest.obj = new XMLHttpRequest();
+		} catch(e) {
+			xmlRequest.obj = new ActiveXObject("Msxml2.XMLHTTP");
+		}
+	},
+	
+	get: function(url) {
+		xmlRequest.obj.open("GET", url, false);
+		xmlRequest.obj.send(null);
+		
+		return xmlRequest.obj.responseXML;
+	},
+	
+	send: function(url, data) {
+		try {
+			xmlRequest.obj.open("POST", url, false);
+			xmlRequest.obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
+			xmlRequest.obj.send(data);
+			return true;
+		} catch(e) {
+			return false;
+		}
+	}
+	
+};
+
+var t = {
+	evtListener:function(elt, evt, func, useCpt) {
+		if(elt.addEventListener)
+			elt.addEventListener(evt, func, useCpt);
+		else if(elt.attachEvent)
+			elt.attachEvent("on" + evt, func);
+		else
+			elt["on" + evt] = func;
+	}
+}
+
+t.evtListener(window, "load", xmlRequest.init, false);
+t.evtListener(window, "load", hideForms, false);
+
+var editFilter = {
+	acceptNode: function(node) {
+		if(node.nodeName == 'a' && node.firstChild && node.firstChild.nodeValue == 'Editer') return NodeFilter.FILTER_ACCEPT;
+		return NodeFilter.FILTER_SKIP;
+	}
+}
+
+var brouillonsFilter = {
+	acceptNode:function(node) {
+		if(node.nodeName == 'a' && node.firstChild && (
+			node.firstChild.nodeValue == 'Editer' ||
+			node.firstChild.nodeValue == 'Publier' ||
+			node.firstChild.nodeValue == 'Supprimer'))
+				return NodeFilter.FILTER_ACCEPT;
+		return NodeFilter.FILTER_SKIP;
+	}
+}
+
+
+
+window.onload=function() {
+ var ar=document.getElementsByTagName('li');
+ for(var i=0; i<ar.length; i++) {
+  if(ar[i].parentNode.id=='Menu') {
+  	arLIMenu[arLIMenu.length]=ar[i];
+	if(ar[i].firstChild.id=='Brouillons') {
+		ar[i].className="Actif";
+		document.getElementById('Gest' + ar[i].firstChild.id).style.display='block';
+	}
+	t.evtListener(ar[i], 'click', switchSection, true);
+   }
+   if(ar[i].className=='Add')
+     t.evtListener(ar[i].firstChild, 'click', showAddForm, true);
+ }
+
+ try { dp = new DOMParser();}
+ catch(e) {dp = new ActiveXObject("Microsoft.XMLDOM");}
+ t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false);
+ // TreeWalkers in all their glory
+ try {
+	 wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ALL, editFilter, true);
+	 while(wEdit.nextNode()) {
+		t.evtListener(wEdit.currentNode, "click", editPubl, false);
+	 }
+	 
+	 wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ALL, brouillonsFilter, true);
+	 while(wBr.nextNode()) {
+		if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false);
+		else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false);
+	 }
+ } catch(e) {
+	 //Well, right now, we're sort of screwed...
+ }
+}
+
+function switchSection(e) {
+ var targetAc = bpEvt(e, 'li').rTarget;
+ for(i=0; i<arLIMenu.length; i++) {
+  tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id);
+   if(arLIMenu[i]==targetAc) {
+    arLIMenu[i].className='Actif';
+    tmpObj.style.display='block';
+   } else {
+    arLIMenu[i].className='';
+    tmpObj.style.display='none';
+   }
+ }
+}
+
+
+function pubBrouillon(e) {
+ var whichVersion = document.getElementById("whichVersion");
+ var pubComment = document.getElementById("pubComment");
+ var el = bpEvt(e).rTarget;
+ if(el != curBPShown) {
+	if(curBPShown != 0) curBPShown.parentNode.parentNode.className = '';
+	curBPShown = el;
+	el.parentNode.parentNode.className = 'Pinned';
+	var pos = el.href.indexOf("#");
+	whichVersion.pubButton.disabled = true;
+	pubComment.textContent = "Vérification en cours de la validité XML du post";
+	whichVersion.id.value = el.href.substring(pos + 4, el.href.length);
+	el.parentNode.appendChild(whichVersion);
+	whichVersion.style.display='block';
+	el.pubIsShown = true;
+	var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value);
+	var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml");
+	var parserErrors = doc.getElementsByTagName('parsererror');
+	if(parserErrors.length > 0) {
+		pubComment.textContent = "";
+		pubComment.appendChild(doc.firstChild);
+	}
+	else {
+		pubComment.textContent = "Le post est fait de XML valide, bon pour être poster";
+		whichVersion.pubButton.disabled = false;
+	}
+ } else {
+	curBPShown = 0;
+	el.parentNode.parentNode.className = '';
+	hideForms();
+	el.pubIsShown = false;
+ }
+ return false;
+}
+
+function editBrouillon(e) {
+ edit(e, "brouillon");
+}
+
+function editPubl(e) {
+ edit(e, "post");
+}
+
+function edit(e, type) {
+ var editPost = document.getElementById("editPost");
+ editPost.type = type;
+ var el = bpEvt(e).rTarget;
+ if(el.editPostIsShown !=1) {
+	var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length);
+	var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id);
+	el.parentNode.appendChild(editPost);
+	el.editPostIsShown = 1;
+	editPost.style.display = 'block';
+	editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent;
+	editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data;
+	if(type == 'post') {
+	    editPost.mood.style.display = '';
+	    editPost.mood.value = data.getElementsByTagName('mood')[0].textContent;
+	    editPost.Tags.style.display = '';
+	    editPost.Tags.value = '';
+	    var tags = data.getElementsByTagName('tag');
+	    for(var i = 0; i < tags.length; i++)
+	    {
+		if(tags[i].textContent.indexOf(' ') > -1)
+		{
+		    editPost.Tags.value += '"' + tags[i].textContent + '"';
+		} else {
+		    editPost.Tags.value +=  tags[i].textContent;
+		}
+		editPost.Tags.value += ' ';
+	    }
+	} else {
+	    editPost.mood.style.display = 'none';
+	    editPost.Tags.style.display = 'none';
+	}
+	
+ } else {
+	 hideForms();
+	 el.editPostIsShown = 0;
+ }
+}
+
+function showAddForm(e) {
+ var targetAc = bpEvt(e, "a").rTarget;
+ while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces
+ targetAc.style.display = (targetAc.style.display=='block')?'none':'block';
+}
+
+function saveFormContent(e) {
+    var el = e.target.form; // Should be the form...
+    var toggleLink = el.parentNode.firstChild;
+    var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length);
+    if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type,
+					 'title=' + postValue(el.Titre.value) + 
+					 '&content=' + postValue(el.Contenu.value) +
+					 '&mood=' + postValue(el.mood.value) +
+					 '&tags=' + postValue(el.Tags.value)))
+    {
+	  toggleLink.editPostIsShown = 0;
+	  hideForms();
+    } else {
+	  el.submit();
+    }
+    return true;
+}
+
+function hideForms() {
+  document.getElementById('whichVersion').style.display='none';
+  document.getElementById('editPost').style.display='none';
+}
+
+/* Bullet-Proofing of the event variable... Needed because of the huge mess out there */
+function bpEvt(eIni, tag) {
+	var e = (eIni)?eIni:window.event;
+	e.rTarget = (e.target)?e.target:e.srcElement;
+	if(tag != undefined)
+		while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode;
+	return e;
+}
+
+function postValue(str)
+{
+    str = str.replace(/&/g, "%26");
+    str = str.replace(/\+/g, "%2B");
+    return str;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,283 @@
+<?php
+ if(!is_null($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
+  header('Content-Type: application/xhtml+xml; charset=UTF-8');
+ else
+  header('Content-Type: text/html; charset=UTF-8');
+
+ include("classes.php");
+ $Data=new DataAccess;
+ $Req = new Requete;
+ 
+ $mode = $Req->get('mode');
+ switch($mode) {
+	case 'nvBrouillon':
+	$nvTitre = $Req->get('Titre', 'POST');
+	$nvContenu = $Req->get('Contenu', 'POST');
+	$Data->debugQuery("INSERT INTO Brouillons SET Titre='{$nvTitre}', Contenu='{$nvContenu}'");
+	break;
+	
+	case 'nvTache':
+	$nvThing = $Req->get('Tache');
+	$Data->Query("INSERT INTO ToDo SET Thing='{$nvThing}'");
+	break;
+	
+	case 'nvPost':
+	 $id = $Req->get('id', 'POST');
+	 $versionAc = $Req->get('versionAc', 'POST');
+	 $newVersion = $Req->get('newVersion', 'POST');
+	 $mood = $Req->get('mood', 'POST');
+	 $tbAddress = $Req->get('tb', 'POST');
+	 if($versionAc == 'Version 10' && $newVersion != 'Nouvelle version ?' && !empty($newVersion))
+		$version = $newVersion;
+	 else
+		$version = $versionAc;
+	 $Data->Query("SELECT * FROM Brouillons WHERE id_brouillon={$id}");
+	 $row = $Data->GetRow();
+	 $row['Titre'] = addslashes($row['Titre']);
+	 $row['Contenu'] = addslashes($row['Contenu']);
+	 $datePost = gmdate("Y-m-d H:i:s", time() + 3600);
+	 $Data->Query("
+	  INSERT INTO Mess(Titre, DatePost, num_version, Message, Emot) 
+	  VALUES('{$row['Titre']}', '{$datePost}', '{$version}', '{$row['Contenu']}', '{$mood}')");
+	 $Data->Query("DELETE FROM Brouillons WHERE id_brouillon={$id}");
+	 $Data->Query("SELECT num_mess, Message FROM Mess ORDER BY num_mess DESC LIMIT 0, 1");
+	 $id_row = $Data->GetRow();
+	 // Gestion des tags
+	 $arTags = TextUtils::SplitTags($Req->get('Tags'));
+	 foreach($arTags as $tagAj)
+	 {
+	    $n = $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
+	    if($n ==  0)
+	    {
+		// Si le tag n'existe pas, on le crée
+		$Data->Query("INSERT INTO Tags SET Tag='{$tagAj}'");
+		$Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
+	    }
+	    $row_tag = $Data->GetRow();
+	    $Data->Query
+	    ("
+		INSERT INTO Lien_Tags_Posts 
+		SET idMess={$id_row['num_mess']}, idTag={$row_tag['idTag']}
+	    ");
+	 }
+	 // Génération de trackbacks
+	 if(!empty($tbAddress) && substr($tbAddress, 0, 4)=='http') {
+		$ar_tbAddress = parse_url($tbAddress);
+		if(!array_key_exists('port', $ar_tbAddress)) $ar_tbAddress['port'] = 80;
+		if(!array_key_exists('path', $ar_tbAddress)) $ar_tbAddress['path'] = '/';
+		if(array_key_exists('query', $ar_tbAddress)) $ar_tbAddress['query'] = '?' . $ar_tbAddress['query'];
+		$fp = fsockopen($ar_tbAddress['host'], $ar_tbAddress['port'], $errno, $errstr, 15);
+		if($fp) {
+			$genToSend = "POST {$ar_tbAddress['path']}{$ar_tbAddress['query']} HTTP/1.0\r\n";
+			$genToSend .= "Host: {$ar_tbAddress['host']}\r\n";
+			$genToSend .= "Content-Type: application/x-www-form-urlencoded \n";
+			
+			// Essai de récuperation de l'encodage...Envoie en iso si pas d'indication d'UTF...
+			$argToSend = "__info=1";
+			$toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
+			$toSend .= $argToSend;
+			echo("<pre>$toSend</pre>");
+			fwrite($fp, $toSend);
+			while(!feof($fp))
+				$result .= fgets($fp, 128);
+			fclose($fp);
+			if(!preg_match('/<encoding>(UTF-8|utf-8)<\/encoding>/msU',$result)) {
+				$row['Titre'] = utf8_decode($row['Titre']);
+				$row['Message'] = utf8_decode($row['Message']);
+			}
+			
+			$fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15);
+			$argToSend = "title=" . htmlentities(urlencode($row['Titre'])) . "&blog_name=Dual+Blog";
+			$argToSend .= "&url=http://defr.org/blog/posts/{$row['num_mess']}&excerpt=" 
+								. htmlentities(urlencode(substr(strip_tags($row['Message']), 0, 255) . "..."));
+
+			$toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
+			$toSend .= $argToSend;
+			echo("<pre><![CDATA[$toSend]]></pre>");
+			echo("<![CDATA[");
+			fwrite($fp, $toSend);
+			while (!feof($fp)) {
+				echo fgets($fp, 128);
+			}
+			echo("]]>");
+			fclose($fp);
+		}
+	}
+	 break;
+ }
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head>
+ <title>Administration : Conception &amp; Design</title>
+ <link rel='StyleSheet' type='Text/CSS' href='css/admin.css' />
+ <script type='text/javascript' src='admin.js'>/* Die IE, diiie */</script> 
+</head>
+
+<body>
+ <h3>Administration de Dual Blog</h3>
+<ul id='Menu'>
+ <li><div id='Brouillons'>Brouillons</div></li>
+ <li><div id='Posts'>Posts publiés</div></li>
+ <li><div id='Designs'>Designs</div></li>
+ <li><div id='ToDo'>To-Do</div></li>
+</ul>
+<div id='GestPosts'>
+<ul>
+<?php
+ $Data->Connect();
+ $Data->Query("SELECT * FROM Mess ORDER BY num_version, num_mess DESC LIMIT 0, 10");
+ $versionAc="";
+ $i=0;
+ $ar_Version = array();
+ while(0!==($val=$Data->GetRow())) {
+  if($val['num_version']!=$versionAc) {
+	if($i!=0) echo("</ul>\n</li>");
+	echo("  <li>{$val['num_version']} :\n    <ul>");
+	$versionAc=$val['num_version'];
+	$ar_Version[] = $versionAc;
+	$i++;
+  }
+  $Titre=$Data->utf8_ensure($val['Titre']);
+  echo("
+  \t  <li>{$Titre}<span class='Admin'><a href='#id={$val['num_mess']}'>Editer</a>  --  <a href='#id={$val['num_mess']}'>Supprimer</a>  --  <a href='?id={$val['num_mess']}'>Gérer les commentaires</a></span></li>");
+ }
+ echo("\n    </ul>\n  </li>\n");
+?>
+</ul>
+</div>
+
+<div id='GestDesigns'>
+<ul>
+ <li class='Add'><a href='#'>Ajouter un nouveau design au weblog</a></li>
+ <li>Modifier les designs déja existants</li>
+</ul>
+</div>
+
+<div id='GestBrouillons'>
+ <ul>
+  <li class='Add'><a href='#'>Ajouter un nouveau brouillon</a>
+  <form method='post' action='admin.php'>
+   <div>
+   <input type='hidden' name='mode' value='nvBrouillon' />
+   <input type='text' name='Titre' value='Titre' />
+   <textarea name='Contenu' rows='10' cols='30'></textarea>
+   <input type='submit' value='Valider ce brouillon' />
+   </div>
+  </form>
+  </li>
+<?
+   $Data->Query("SELECT * FROM Brouillons ORDER BY id_brouillon DESC");
+   while(0!==($val=$Data->GetRow())) {
+	echo("
+   <li>{$val['Titre']}  <span class='Admin'><a href='#id={$val['id_brouillon']}'>Editer</a>  --  <a href='#id={$val['id_brouillon']}'>Publier</a>  --  <a href='?id={$val['id_brouillon']}'>Supprimer</a></span></li>");
+   }
+?>
+  </ul>
+</div>
+
+<div id='GestToDo'>
+<ul>
+ <li class='Add'><a href='#'>Ajouter une nouvelle tâche</a>
+ <form method='post' action='admin.php'>
+  <div>
+  <input type='hidden' name='mode' value='nvTache' />
+  <input type='text' name='Tache' />
+  <input type='submit' value='Ajouter cette tâche' />
+  </div>
+ </form></li>
+ <?php
+  $Data->Query("SELECT * FROM ToDo ORDER By num_thing DESC");
+  while(0!==($val=$Data->GetRow())) {
+    echo("
+  <li>{$val['Thing']} <span class='Admin'><a href='#'>Fait</a>  --  <a href='#'>Editer</a>  --  <a href='#'>Supprimer</a></span></li>");
+  }
+  $Data->Close();
+?>
+</ul>
+</div>
+
+<form method='post' action='#' id='editPost'>
+ <div>
+   <input type='hidden' name='mode' value='editBrouillon' />
+   <p><input type='text' name='Titre' value='Titre' /></p>
+   <p><textarea name='Contenu' rows='10' cols='30'></textarea></p>
+   <p><select name='mood' id='mood'>
+<?php
+		$handle = opendir('mood');
+		while($file = readdir($handle))
+		{
+		    if(strlen($file) > 3 && substr($file, -3) == 'png')
+		    {
+			  $short = substr($file, 0, -4);
+			  echo("\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n");
+		    }
+		}
+		closedir($handle);
+?>
+   </select></p>
+   <p><input type='text' name='Tags' value='Tags' /></p>
+   <input type='button' name='Save' value='Sauver la modification' /> 
+ </div>
+</form>
+
+<form method='post' action='admin.php' id='whichVersion'>
+ <div>
+ <!--a onclick='javascript:hidePubForm()'>Hide</a-->
+ <input type='hidden' name='mode' value='nvPost' />
+ <input type='hidden' name='id' />
+ <fieldset>
+	<legend>Catégorie du post</legend>
+	<label for='vAc'>Pour poster le post dans une catégorie déja existante, veuillez la choisir dans la liste ci-dessous :<br /></label>
+	<select name='versionAc' id='vAc'>
+	  <option>Version 10</option>
+	  <option>DeFr.org news</option>
+	</select>
+	<label for='nvCat'><br />Pour poster le post dans une catégorie n'existant pas encore, veuillez
+	entrer son nom : <br /></label>
+	<input type='text' name='newVersion' id='nvCat' value='Nouvelle version ?' />
+ </fieldset>
+ <fieldset>
+	  <legend>Tags</legend>
+	  <label for='Tags'>Histoire d'organiser les posts, et de pouvoir filtrer par centres d'interet, veuillez
+	  préciser les <em>tags</em> à attribuer à ce post :<br /></label>
+	  <input type='text' name='Tags' id='Tags' />
+ </fieldset>
+ <fieldset>
+	  <legend>Mood / Emots</legend>
+	  <label for='mood'>Pour assurer un minimum d'attrait aux posts, et leur attribuer un aspect graphique
+	  sympathique, veuillez selectionner une emoticone pour le post, dans la liste suivante :<br /></label>
+	  <select name='mood' id='mood'>
+<?php
+		$handle = opendir('mood');
+		while($file = readdir($handle))
+		{
+		    if(strlen($file) > 3 && substr($file, -3) == 'png')
+		    {
+			  $short = substr($file, 0, -4);
+			  echo("\t\t\t<option value='$short'><img src='mood/25/$file' alt='' />" . $short . "</option>\n");
+		    }
+		}
+		closedir($handle);
+?>
+	  </select>
+ </fieldset>
+ <fieldset>
+	<legend>Trackback</legend>
+	<label for='tb'>Pour effectuer un trackback vers un autre post, rentrer son URL :<br /></label>
+	<input type='text' name='tb' id='tb' value='TrackBack ?' />
+ </fieldset>
+ <fieldset>
+	<legend>Publication</legend>
+	<label id='pubComment' for='pubButton' />
+	<input type='submit' name="pubButton" id="pubButton" value='Publier' />
+ </fieldset>
+</div>
+</form>
+
+<div id='Infos'>
+Administration de Dual Blog - Par DeFr - Icones &copy; David Lanham - The IconFactory -
+Valide <a href="http://validator.w3.org/check?uri=referer">XHTML 1.1</a> et <a href='http://jigsaw.w3.org/css-validator/check/referer'>CSS 3</a>
+</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin_xml.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,128 @@
+<?php
+    require("classes.php");
+
+    $Req = new Requete();
+    $Data = new DataAccess;
+
+    header("Content-Type: application/xml; charset=utf-8");
+    $doc = new DOMDocument('1.0', 'utf-8');
+    $root = $doc->createElementNS('http://defr.org/2005/blog-post', 'post');
+    $doc->appendChild($root);
+    
+    $mode = $Req->get('mode', 'GET', 'get');
+    $type = $Req->get('type', 'GET', 'post');
+    $id = $Req->get('id');
+    
+    $root->appendChild($doc->createElement('id', $id));
+    $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'debug', var_export($Req, true)));
+    switch($mode . '-' . $type)
+    {
+	case 'edit-post':
+	    $nvTitre = $Req->get('title');
+	    $nvContenu = $Req->get('content');
+	    $nvMood = $Req->get('mood');
+	    $Data->Query
+	    ("
+		UPDATE Mess 
+		SET Titre='{$nvTitre}', Message='{$nvContenu}', Emot='{$nvMood}'
+		WHERE num_mess={$id}
+	    ");
+	    // Récuperation des nouveaux tags à appliquer
+	    $arTags = TextUtils::splitTags($Req->get('tags'));
+	    // Récuperation des anciens tags
+	    $Data->Query
+	    ("
+		SELECT T.idTag, T.Tag
+		FROM Lien_Tags_Posts L
+		LEFT JOIN Tags T ON L.idTag = T.idTag
+		WHERE L.idMess = {$id}
+	    ");
+	    
+	    $oldTags = array();
+	    while(0 !== ($row = $Data->GetRow()))
+	    {
+		$oldTags[] = $row['Tag'];
+		$mapOld[$row['Tag']] = $row['idTag'];
+	    }
+	    // Calcul des différences
+	    $tagsSupprimes = array_diff($oldTags, $arTags);
+	    $tagsAjoutes = array_diff($arTags, $oldTags);
+	    // Suppression des tags non affectés
+	    if(is_array($tagsSupprimes))
+	    {
+		foreach($tagsSupprimes as $tagSuppr)
+		{
+		    $supprIDs .= $mapOld[$tagSuppr] . ',';
+		}
+		$Data->Query
+		("
+		    DELETE FROM Lien_Tags_Posts 
+		    WHERE idMess={$id} AND idTag IN ({$supprIDs}0)
+		");
+	    }
+	    // Ajout des tags ajoutés
+	    if(is_array($tagsAjoutes))
+	    {
+		foreach($tagsAjoutes as $tagAj)
+		{
+		    $n = $Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
+		    if($n ==  0)
+		    {
+			// Si le tag n'existe pas, on le crée
+			$Data->Query("INSERT INTO Tags SET Tag='{$tagAj}'");
+			$Data->Query("SELECT idTag FROM Tags WHERE Tag='{$tagAj}'");
+		    }
+		    $row = $Data->GetRow();
+		    $Data->Query
+		    ("
+			INSERT INTO Lien_Tags_Posts 
+			SET idMess={$id}, idTag={$row['idTag']}
+		    ");
+		}
+	    }
+	case 'get-post':
+	    $Data->Query
+	    ("
+		SELECT Titre, Message, Emot
+		FROM Mess
+		WHERE num_mess={$id}
+	    ");
+	    $row = $Data->GetRow();
+	    $titre_CDATA = $doc->createCDATASection($row['Titre']);
+	    $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'titre', $row['Titre']));
+	    $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'contenu', $row['Message']));
+	    $root->appendChild($doc->createElement('mood', $row['Emot']));
+	    // Obtention des tags
+	    $Data->Query
+	    ("
+		SELECT T.idTag, T.Tag
+		FROM Lien_Tags_Posts L
+		LEFT JOIN Tags T ON L.idTag = T.idTag
+		WHERE L.idMess = {$id}
+	    ");
+	    while(0 !== ($row = $Data->GetRow()))
+		$root->appendChild($doc->createElement('tag', $row['Tag']));
+	    break;
+	case 'edit-brouillon':
+	    $nvTitre = $Req->get('title');
+	    $nvContenu = $Req->get('content');
+	    $Data->Query
+	    ("
+		UPDATE Brouillons
+		SET Titre='{$nvTitre}', Contenu='{$nvContenu}'
+		WHERE id_brouillon={$id}
+	    ");
+	case 'get-brouillon':
+	    $Data->Query
+	    ("
+		SELECT Titre, Contenu
+		FROM Brouillons
+		WHERE id_brouillon={$id}
+	    ");
+	    $row = $Data->GetRow();
+	    $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'titre', $row['Titre']));
+	    $root->appendChild(DOMUtils::createCDATAWrapper($doc, 'contenu', $row['Contenu']));
+	    break;
+    }
+    echo $doc->saveXML();
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/atom.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,75 @@
+<?php
+
+ include("classes.php");
+
+ function utf8_ensure($str) {
+  return seems_utf8($str)?$str:utf8_encode($str);
+ }
+  
+ function seems_utf8($Str) {
+  for ($i=0; $i<strlen($Str) && $i<150; $i++) {
+   if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
+   elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
+   elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
+   elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
+   elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
+   elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
+   else return false; # Does not match any model
+   for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+    if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
+    return false;
+   }
+  }
+  return true;
+ }
+
+ if(stristr($_SERVER['HTTP_ACCEPT'], "application/atom+xml"))
+	header("Content-Type: application/atom+xml; charset=utf-8");
+ else
+	header("Content-Type: application/xml; charset=utf-8");
+ echo("<?xml version='1.0' encoding='utf-8'?>\n");
+ $Data = new DataAccess();
+ $Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 1");
+ $val=$Data->GetRow();
+ $modifiedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost']));
+?>
+<feed xmlns="http://www.w3.org/2005/Atom" xml:lang='fr-FR'>
+  <title>Dual Blog</title>
+  <subtitle>Le blog de DeFr, parlant de tout et de rien ^^;</subtitle>
+  <link rel='alternate' type='text/html' href='http://defr.org/blog/' />
+  <link rel='self' type='application/atom+xml' href='http://defr.org/blog/dualblog.atom' />
+  <updated><?php echo $modifiedDate; ?></updated>
+  <author>
+   <name>Deroche Franck</name>
+   <uri>http://defr.org</uri>
+  </author>
+  <id>urn:uuid:cface534-634f-4ce8-a07b-3a4187982583</id>
+  <?php
+
+  $result=$Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 20");
+  while($val=$Data->GetRow()) {
+   $utf8_Mess=str_replace("</P>", "</p>", str_replace("<P>", "<p>", (str_replace("&euro;", "&#x20AC;", utf8_ensure($val['Message'])))));
+   $utf8_Mess = str_replace("&nbsp;", " ", $utf8_Mess);
+   $utf8_Titre=utf8_ensure($val['Titre']);
+   $issuedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost']));
+  echo("
+  <entry>
+   <title type='xhtml'>
+     <div xmlns='http://www.w3.org/1999/xhtml'>
+     {$utf8_Titre}
+     </div>
+   </title>
+   <id>tag:defr.org,2006:{$val['num_mess']}</id>
+   <content type='xhtml'>
+   	<div xmlns='http://www.w3.org/1999/xhtml'>
+	{$utf8_Mess}
+	</div>
+   </content>
+   <published>{$issuedDate}</published>
+   <updated>{$issuedDate}</updated>
+   <link rel='alternate' type='text/html' href='http://www.defr.org/blog/posts/{$val['id']}' />
+  </entry>
+  ");
+  }
+  ?>
+</feed>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classes.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,14 @@
+<?php
+/*
+WebLog : Classe globale & all
+*/
+
+ini_set("include_path", $_SERVER['DOCUMENT_ROOT'] . "/blog/includes/");
+
+require_once("config.php");
+require_once("class.dataaccess.php");
+require_once("class.requete.php");
+require_once("class.domutils.php");
+require_once("class.textutils.php");
+
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comment.20060616.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,84 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro");
+     include("classes.php");
+     $id = $_GET['id'];
+     $Data = new DataAccess;
+     $Req = new Requete;
+     
+     $Auteur=$Req->get('Auteur');
+     $Adresse=$Req->get('Adresse');
+     $AdresseMail = $Req->get('AdresseMail');
+     $Comment=$Req->get('Comment');
+     $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
+     if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment)) {
+	// Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
+	if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>'))
+		$Comment = '<![CDATA[' . str_replace(']]>', ']]&gt;',$Comment) . ']]>';
+	$ip = $_SERVER['REMOTE_ADDR'];
+	$Data->debugQuery("
+		INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip)
+		VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}')
+	");
+	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+      }
+
+     $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
+     $row = $Data->GetRow();
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      include("top.php");
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+       </div>");
+      $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm");
+      $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png");
+      while(0 !== ($row = $Data->GetRow())) {
+         $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment']));
+         $AdresseMail = $row['AdresseMail'];
+	 $grav_id = md5($AdresseMail);
+	 $Comment = nl2br($row['Comment']);
+	$Comment = str_replace(" & ", " &amp; ", $Comment);
+	 if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment);
+	 //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse;
+	 $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":'';
+	      echo("
+	<div class='PostContent'>
+	  <div class='Infos'>
+		  <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&amp;size=50&amp;default=$defaultGravatar' alt='' />
+		  <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee}
+	  </div>
+	  <div class='Comment'>{$Comment}</div>
+	  <br class='endComment' />
+	</div>");
+      }
+      echo("
+	<div class='PostContent'>
+	  <a href='/blog/'>Revenir au blog</a>
+	</div>
+	<div class='PostContent'>
+	<form method='post' action='#'>
+	   <div id='FormCommentaire'>
+		Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir
+		le petit formulaire ci-dessous.
+		<input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" />
+		<input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea>
+		<input type='submit' value='Poster ce commentaire' />
+	   </div>
+	</form>
+       </div>
+      ");
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comment.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,93 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro");
+    ini_set("display_errors", "off");
+     include("classes.php");
+     $id = $_GET['id'];
+     $Data = new DataAccess;
+     $Req = new Requete;
+     
+     $Auteur=$Req->get('Auteur');
+     $Adresse=$Req->get('Adresse');
+     $AdresseMail = $Req->get('AdresseMail');
+     $Comment=$Req->get('Comment');
+     $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
+     if(!is_null($Auteur) && $Auteur!='Votre Nom' && $Auteur != $Adresse && !empty($Comment)) {
+	// Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
+	$ip = $_SERVER['REMOTE_ADDR'];
+	$Auteur = str_replace(array('<', '>'), array('&lt;', '&gt;'), $Auteur);
+	/*if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>'))
+		$Comment = '<![CDATA[' . str_replace(']]>', ']]&gt;',$Comment) . ']]>';*/
+	if(DOMDocument::loadXML('<comment>' . $Comment . '</comment>')) {
+	$Data->debugQuery("
+		INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip)
+		VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}')
+	");
+	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+	mail('webmaster+blogcomment@defr.org', 'Nouveau commentaire sur de ' . $Auteur, $Auteur . " vient de mettre en ligne le commentaire suivant:  \n" . wordwrap($Comment, 70));
+	}
+	else {
+		$infos = 'Votre commentaire doit etre fait de XML valide pour apparaitre.';
+	}
+      }
+
+     $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
+     $row = $Data->GetRow();
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      include("top.php");
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+	 {$infos}
+       </div>");
+      $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm");
+      $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png");
+      while(0 !== ($row = $Data->GetRow())) {
+         $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment']));
+         $AdresseMail = $row['AdresseMail'];
+	 $grav_id = md5($AdresseMail);
+	 $Comment = nl2br($row['Comment']);
+	$Comment = str_replace(" & ", " &amp; ", $Comment);
+	 if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment);
+	 //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse;
+	 $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":'';
+	      echo("
+	<div class='PostContent'>
+	  <div class='Infos'>
+		  <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&amp;size=50&amp;default=$defaultGravatar' alt='' />
+		  <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee}
+	  </div>
+	  <div class='Comment'>{$Comment}</div>
+	  <br class='endComment' />
+	</div>");
+      }
+      echo("
+	<div class='PostContent'>
+	  <a href='/blog/'>Revenir au blog</a>
+	</div>
+	<div class='PostContent'>
+	<form method='post' action='#'>
+	   <div id='FormCommentaire'>
+		Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir
+		le petit formulaire ci-dessous.
+		<input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" />
+		<input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea>
+		<input type='submit' value='Poster ce commentaire' />
+	   </div>
+	</form>
+       </div>
+      ");
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comment_.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,79 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro");
+     include("classes.php");
+     $id = $_GET['id'];
+     $Data = new DataAccess;
+     
+     $Auteur=$_POST['Auteur'];
+     $Adresse=$_POST['Adresse'];
+     $AdresseMail = $_POST['AdresseMail'];
+     $Comment=$_POST['Comment'];
+     $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
+     if(!is_null($Auteur) && $Auteur!='Votre Nom' && !is_null($Comment)) {
+	// Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
+	if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err))
+		$Comment = '<![CDATA[' . $Comment . ']]>';
+	$Data->Query("INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment) VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}')");
+	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+      }
+
+     $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
+     $row = $Data->GetRow();
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      include("top.php");
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+       </div>");
+      $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm");
+      $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png");
+      while(0 !== ($row = $Data->GetRow())) {
+         $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment']));
+         $AdresseMail = $row['AdresseMail'];
+	 $grav_id = md5($AdresseMail);
+	 $Comment = nl2br($row['Comment']);
+	$Comment = str_replace(" & ", " &amp; ", $Comment);
+	 if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment);
+	 //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse;
+	 $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":'';
+	      echo("
+	<div class='PostContent'>
+	  <div class='Infos'>
+		  <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&amp;size=50&amp;default=$defaultGravatar' alt='' />
+		  <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee}
+	  </div>
+	  <div class='Comment'>{$Comment}</div>
+	  <br class='endComment' />
+	</div>");
+      }
+      echo("
+	<div class='PostContent'>
+	  <a href='/blog/'>Revenir au blog</a>
+	</div>
+	<div class='PostContent'>
+	<form method='post' action='#'>
+	   <div id='FormCommentaire'>
+		Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir
+		le petit formulaire ci-dessous.
+		<input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" />
+		<input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea>
+		<input type='submit' value='Poster ce commentaire' />
+	   </div>
+	</form>
+       </div>
+      ");
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comment_back.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,84 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro");
+     include("classes.php");
+     $id = $_GET['id'];
+     $Data = new DataAccess;
+     $Req = new Requete;
+     
+     $Auteur=$Req->get('Auteur');
+     $Adresse=$Req->get('Adresse');
+     $AdresseMail = $Req->get('AdresseMail');
+     $Comment=$Req->get('Comment');
+     $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
+     if(!is_null($Auteur) && $Auteur!='Votre Nom' && !empty($Comment)) {
+	// Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
+	//if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err))
+	if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>'))
+		$Comment = '<![CDATA[' . $Comment . ']]>';
+	$Data->debugQuery("
+		INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment)
+		VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}')
+	");
+	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+      }
+
+     $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
+     $row = $Data->GetRow();
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      include("top.php");
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+       </div>");
+      $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm");
+      $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png");
+      while(0 !== ($row = $Data->GetRow())) {
+         $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment']));
+         $AdresseMail = $row['AdresseMail'];
+	 $grav_id = md5($AdresseMail);
+	 $Comment = nl2br($row['Comment']);
+	$Comment = str_replace(" & ", " &amp; ", $Comment);
+	 if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment);
+	 //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse;
+	 $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":'';
+	      echo("
+	<div class='PostContent'>
+	  <div class='Infos'>
+		  <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&amp;size=50&amp;default=$defaultGravatar' alt='' />
+		  <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee}
+	  </div>
+	  <div class='Comment'>{$Comment}</div>
+	  <br class='endComment' />
+	</div>");
+      }
+      echo("
+	<div class='PostContent'>
+	  <a href='/blog/'>Revenir au blog</a>
+	</div>
+	<div class='PostContent'>
+	<form method='post' action='#'>
+	   <div id='FormCommentaire'>
+		Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir
+		le petit formulaire ci-dessous.
+		<input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" />
+		<input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea>
+		<input type='submit' value='Poster ce commentaire' />
+	   </div>
+	</form>
+       </div>
+      ");
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/comment_old.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,85 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro");
+     include("classes.php");
+     $id = $_GET['id'];
+     $Data = new DataAccess;
+     $Req = new Requete;
+     
+     $Auteur=$Req->get('Auteur');
+     $Adresse=$Req->get('Adresse');
+     $AdresseMail = $Req->get('AdresseMail');
+     $Comment=$Req->get('Comment');
+     $DateComment=gmdate("Y-m-d H:i:s", time() + 3600*2);
+     if(!is_null($Auteur) && $Auteur!='Votre Nom' && !empty($Comment)) {
+	// Prévention d'un "cassage" par ajout d'un commentaire incorrectement formaté
+	//if(!@domxml_open_mem('<comment>' . $Comment . '</comment>', DOMXML_LOAD_PARSING, $err))
+	if(!DOMDocument::loadXML('<comment>' . $Comment . '</comment>'))
+		$Comment = '<![CDATA[' . $Comment . ']]>';
+	$ip = $_SERVER['REMOTE_ADDR'];
+	$Data->debugQuery("
+		INSERT INTO Commentaires(MessId, Auteur, Adresse, AdresseMail, Comment, DateComment, ip)
+		VALUES({$id}, '{$Auteur}', '{$Adresse}', '{$AdresseMail}', '{$Comment}', '{$DateComment}', '{$ip}')
+	");
+	$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+      }
+
+     $Data->Query("SELECT * FROM Mess WHERE num_mess = {$id}");
+     $row = $Data->GetRow();
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      include("top.php");
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+       </div>");
+      $Data->Query("SELECT * FROM Commentaires Where MessId={$id} ORDER BY num_comm");
+      $defaultGravatar = urlencode("http://defr.org/Misc/NoGravatar.png");
+      while(0 !== ($row = $Data->GetRow())) {
+         $dateFormatee = strftime(" à %Hh%M le <span class='Date'>%A %d %B %Y</span>", strtotime($row['DateComment']));
+         $AdresseMail = $row['AdresseMail'];
+	 $grav_id = md5($AdresseMail);
+	 $Comment = nl2br($row['Comment']);
+	$Comment = str_replace(" & ", " &amp; ", $Comment);
+	 if($row['num_comm'] == 172) $Comment = str_replace("</sup>", "</del>", $Comment);
+	 //if(stristr($Adresse, "@")) $Adresse = "mailto:" . $Adresse;
+	 $betterHref = (stristr($row['Adresse'], 'http://') != false)?"href='{$row['Adresse']}'":'';
+	      echo("
+	<div class='PostContent'>
+	  <div class='Infos'>
+		  <img class='gravatar' src='http://www.gravatar.com/avatar.php?gravatar_id={$grav_id}&amp;size=50&amp;default=$defaultGravatar' alt='' />
+		  <a {$betterHref} name='c{$row['num_comm']}'>{$row['Auteur']}</a> {$dateFormatee}
+	  </div>
+	  <div class='Comment'>{$Comment}</div>
+	  <br class='endComment' />
+	</div>");
+      }
+      echo("
+	<div class='PostContent'>
+	  <a href='/blog/'>Revenir au blog</a>
+	</div>
+	<div class='PostContent'>
+	<form method='post' action='#'>
+	   <div id='FormCommentaire'>
+		Vous souhaitez ajouter un nouveau commentaire ? Faites donc, il vous suffit de remplir
+		le petit formulaire ci-dessous.
+		<input type='text' name='Auteur' value='Votre Nom' onfocus=\"if(this.value== this.getAttribute('value')) this.value='';\" />
+		<input type='text' name='AdresseMail' value='Une adresse mail où vous joindre ? ( Non affichée publiquement )' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<input type='text' name='Adresse' value='Un site web à vous ?' onfocus=\"if(this.value == this.getAttribute('value')) this.value='';\"/>
+		<textarea name='Comment' rows='10' cols='40' onfocus=\"if(this.value == 'Et z\'enfin, votre petit commentaire') this.value='';\">Et z'enfin, votre petit commentaire</textarea>
+		<input type='submit' value='Poster ce commentaire' />
+	   </div>
+	</form>
+       </div>
+      ");
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Brushed.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,66 @@
+/* Dual Blog v10 : OS Edition
+    Brushed Version    */
+    
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+html {margin:0px;background:#EFEFEF;
+      font-family:Tahoma, Verdana, Arial, serif;font-size:11px;}
+
+p {margin:0px;padding:0px;}
+
+#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%;
+       position:absolute;width:768px;height:573px;overflow:hidden;
+       padding-top:85px;padding-left:4px;padding-right:9px;
+       background:url('./Res_Brushed/Fond_Main.jpg') no-repeat;}
+
+#Adresse {position:absolute;left:512px;top:57px;width:237px;}
+
+#Link    {position:absolute;left:484px;top:70px;border:1px #B3A868 solid;width:246px;height:100px;
+          background:white url('./Gimp.jpg') 182px 36px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px;
+          z-index:100;display:none;}
+
+/* Style sur la colonne de gauche ^^; */
+
+#SideBar {background:#CDCDCD;position:absolute;left:4px;top:83px;
+          width:235px;height:485px;overflow:auto;border-right:1px black dashed;}
+
+#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto;
+            padding-left:10px;padding-right:10px;padding-top:4px;
+            }
+
+#SideBar dt {background:url('./Res_Brushed/Brush_Title.png') no-repeat;height:17px;width:198px;
+            font-weight:bold;color:#575233;margin-top:12px;}
+
+#SideBar dd {background:url('./Res_Brushed/Brush_Side.png') repeat-y;color:#000000;width:198px;
+              text-align:left;padding-bottom:4px;border-top:none;}
+
+/* Style sur la partie principale du blog : les posts */
+
+#Posts {top:83px;left:240px;width:524px;height:485px;overflow:auto;
+        position:absolute;background:url('Res_Brushed/Degrade_Post.gif') repeat-y;}
+
+.PostContent h2 {
+		margin:-19px auto 5px;
+		padding:0px 10px;
+		border:1px black dashed;background:#EFEFEF;
+		font-size:1.1em;}
+
+.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify;
+              background:url('./Res_Brushed/Fond_Post.gif');border:1px black solid;}
+
+/* Style appliqués sur les span */
+
+i, .i, em      {font-style:italic;color:#333399;}
+
+.b      {font-weight:bold;}
+
+/* Styles sur les liens */
+a       {color:#333399;}
+a:hover {color:#000000;}
+#Link a  {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;}
+
+/* Style sur le tagboard ^^ */
+#TagBoard {width:175px;height:465px;border:none;margin:0px;padding:0px;
+           margin-left:auto;margin-right:auto;}
+
+p.center img {width:450px;}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/HoverExp.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,50 @@
+/* Dual Blog, :hover-ed edition ^^; */
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+body {margin:20px;}
+
+#Main {border:1px black solid;padding:5px;padding-left:220px;}
+
+h1 {display:none;}
+
+/* SideBar */
+#SideBar {width:200px;float:left;padding:10px;padding-top:0px;position:absolute;left:20px;top:20px;}
+#SideBar dt {background:#EEE;border:1px black solid;border-bottom:1px dotted;padding:0px 10px 0px 10px;
+					 margin-top:10px;font-weight:bold;}
+#SideBar dd {border:1px black solid;margin:0px;border-top:none;padding:10px;font-size:0.9em;}
+#SideBar dd p {margin:0px;padding:0px;}
+#SideBar dd p:first-letter {color:#06F;}
+/* Hover sur la colonne de gauche, youplaboom ^^; */
+#SideBar dt:hover {background:#333;color:white;}
+#SideBar dt:hover + #SideBar dd, #SideBar dd:hover {background:#333;color:white;}
+#SideBar dt:hover + #SideBar dd a, #SideBar dd:hover a {color:#CCC;border-bottom:1px #CCC solid;}
+#SideBar dd a:hover {color:#FFF;border-bottom:1px #CCC dashed;}
+#SideBar dt:hover + #SideBar dd p:first-letter, #SideBar dd:hover p:first-letter {color:#FC0;}
+
+/* Posts */
+#Posts 					{border-left:1px black solid;padding:5px;padding-left:10px}
+.PostContent		{text-align:justify;margin-bottom:10px;border-bottom:1px black solid;padding:5px;}
+.PostContent h2	{margin-left:auto;margin-right:auto;text-align:center;font-weight:bold;}
+
+/* Some :hover magic */
+.PostContent:hover						 {background:#333;color:#FC0;}
+.PostContent:hover h2	 {color:#3C9;}
+.PostContent:hover span			 {color:#396;}
+.PostContent:hover p:first-letter{color:#06F !important;}
+.PostContent:hover a					 {color:#0CF;border-bottom:1px #FFF dashed;}
+/* on cache la méchante iframe... */
+iframe {display:none;}
+
+#Adresse {display:none;}
+#Link {display:block;width:auto;overflow:auto;height:100px;border-left:1px black solid; border-bottom:1px black dashed;padding:5px;}
+ /*#Link A {position:relative;left:10px;} Fait sortir bizarrement du flow sous IE... */
+#Link a {margin-left:10px;}
+
+#SideBar ul, #SideBar li {margin:0px;padding:0px;list-style-type:none;}
+
+.i {font-style:italic;}
+.b {font-weight:bold;}
+
+a {color:#666;border-bottom:1px #333 solid;text-decoration:none;}
+a:hover {border-bottom:1px #999 dashed;color:#000;}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Lite.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,60 @@
+/* Dual Blog v10 : OS Edition
+    Lite Version    */
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+body {margin:0px;font-family:Tahoma, Verdana, Arial, serif;font-size:11px;}
+
+p {margin:0px;padding:0px;}
+
+#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%;
+       position:absolute;width:745px;height:486px;overflow:hidden; border:1px black solid;}
+
+#Adresse {display:none;}
+
+#Link    {width:320px;height:70px;position:absolute;/*left:470px;*/top:10px;right:3px;
+          background:white url('./Gimp.jpg') 250px 6px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px;
+          z-index:100;display:block;}
+
+/* Style sur la colonne de gauche ^^; */
+
+#SideBar {width:230px;height:480px;overflow:auto;border-right:1px black dashed;}
+
+#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto;
+            padding-left:10px;padding-right:10px;padding-top:4px;
+            }
+
+#SideBar dt {height:17px;width:180px;background:#DDDDDD;border:black 1px solid;
+            border-bottom:dotted 1px; font-weight:bold;color:#575233;margin-top:12px;}
+#SideBar dt:hover {background:#F3F3F3;}
+
+#SideBar dd {background:#F3F3F3;color:#000000;width:180px;border:1px black solid;
+              text-align:left;padding-bottom:4px;border-top:none;}
+
+/* Style sur la partie principale du blog : les posts */
+
+#Posts {width:516px;height:384px;overflow:auto;position:absolute;left:226px;top:100px;}
+
+.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify;
+              border:1px black solid;background:url('./Gimp_grayscale.jpg') bottom right no-repeat;}
+			  
+.PostContent h2 {
+		margin:-19px auto 5px;
+		padding:0px 10px;
+		border:1px black dashed;background:#F3F3F3;}
+
+/* Style appliqués sur les span */
+
+.i      {font-style:italic;color:#333399;}
+
+.b      {font-weight:bold;}
+
+/* Styles sur les liens */
+a       {color:#333399;}
+a:hover {color:#000000;}
+#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;}
+
+/* Style sur le tagboard ^^ */
+#TagBoard {width:180px;height:472px;border:none;margin:0px;padding:0px;
+           margin-left:auto;margin-right:auto;}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Lite_nv.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,63 @@
+/* Dual Blog v10 : OS Edition
+    Lite Version    */
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+body {margin:20px;padding:0px;font-family:Tahoma, Verdana, Arial, serif;font-size:11px;}
+
+p {margin:0px;padding:0px;}
+
+#Main {margin:10px;border:1px black solid;direction:rtl;margin-top:0px;}
+
+#Adresse {display:none;}
+
+#Link    {height:70px;position:absolute;background:white url('Res_OliveVerde/Gimp.jpg') no-repeat;
+             overflow:auto;margin:0px;padding:2px;padding-left:6px;padding-right:6px;
+          		 z-index:100;display:none;top:40px;left:265px;}
+
+/* Style sur la colonne de gauche ^^; */
+
+#SideBar {width:230px;margin:3px;position:absolute;right:30px;top:70px;}
+
+#SideBar dt, #SideBar dd {
+			margin:0px auto;
+            padding:4px 10px;
+			direction:ltr;
+            }
+
+#SideBar dt {height:17px;width:180px;background:#DDDDDD;border:black 1px solid;
+            border-bottom:dotted 1px; font-weight:bold;color:#575233;margin-top:12px;}
+#SideBar dt:hover {background:#F3F3F3;}
+
+#SideBar dd {background:#F3F3F3;color:#000000;width:180px;border:1px black solid;
+              text-align:left;padding-bottom:4px;border-top:none;}
+
+/* Style sur la partie principale du blog : les posts */
+
+#Posts {margin-right:234px;direction:ltr;border-right:1px black dashed;padding-top:0px;}
+
+.PostContent {margin:10px;margin-top:25px;padding:10px;text-align:justify;
+              border:1px black solid;background:url('Res_OliveVerde/Gimp_grayscale.jpg') bottom right no-repeat;}
+
+.PostContent h2 {
+		margin:-19px auto 5px;
+		padding:0px 10px;
+		border:1px black dashed;background:#F3F3F3;}
+
+/* Style appliqués sur les span */
+
+.i      {font-style:italic;color:#333399;}
+
+.b      {font-weight:bold;}
+
+/* Styles sur les liens */
+a       {color:#333399;}
+a:hover {color:#000000;}
+#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;}
+
+/* Style sur le tagboard ^^ */
+#TagBoard {width:180px;height:472px;border:none;margin:0px;padding:0px;
+           margin-left:auto;margin-right:auto;}
+		   
+a img {padding:10px;margin:0px 10px 10px;border:1px #999 solid;background:#EEE;}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/OliveVerde.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,68 @@
+/* Dual Blog v10 : OS Edition
+    Olive Verde Version    */
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+html {margin:0px;background:url('Res_OliveVerde/Fond.png') repeat-y;
+      font-family:Tahoma, Verdana, Arial, serif;font-size:11px;}
+
+p {margin:0px;padding:0px;}
+
+#Main {margin:0px;margin-left:-374px;margin-top:-286px;left:50%;top:50%;
+       position:absolute;width:745px;height:486px;overflow:hidden;
+       padding-top:85px;padding-left:4px;padding-right:9px;
+       background:url('Res_OliveVerde/FondMain.png') no-repeat;}
+       
+#Adresse {position:absolute;left:512px;top:57px;width:237px;}
+
+#Link    {position:absolute;left:484px;top:70px;border:1px #B3A868 solid;width:246px;height:100px;
+          background:white url('Res_OliveVerde/Gimp.jpg') 182px 36px no-repeat;overflow:auto;padding:2px;padding-left:6px;padding-right:6px;
+          z-index:100;display:none;}
+
+/* Style sur la colonne de gauche ^^; */
+
+#SideBar {background:#DADBB5;position:absolute;left:4px;top:88px;
+          width:222px;height:478px;overflow:auto;border-right:1px black dashed;}
+
+#SideBar dt, #SideBar dd {margin-left:auto;margin-right:auto;
+            padding-left:10px;padding-right:10px;padding-top:4px;
+            }
+          
+#SideBar dt {background:url('Res_OliveVerde/ShellBar.gif') no-repeat;height:17px;width:182px;
+            font-weight:bold;color:#575233;margin-top:12px;}
+
+#SideBar dd {background:#F0EBD7;color:#000000;width:180px;border:1px #B3A868 solid;
+              text-align:left;padding-bottom:4px;border-top:none;}
+
+/* Style sur la partie principale du blog : les posts */
+
+#Posts {top:88px;left:227px;width:524px;height:478px;overflow:auto;
+        position:absolute;background:url('Res_OliveVerde/FondPost.png') repeat-y;}
+
+.PostContent {margin:10px;margin-top:12px;padding:10px;text-align:justify;
+              background:url('Res_OliveVerde/FondPostContent.png');border:1px #B3A868 solid;}
+
+.PostContent h2 {
+           margin:-19px auto 5px;
+		   padding:0px 10px;
+           border:1px black dashed;
+		   background:url('Res_OliveVerde/FondTitre.png');
+		   font-size:1.1em;}
+
+/* Style appliqués sur les span */
+
+.i      {font-style:italic;color:#333399;}
+
+.b      {font-weight:bold;}
+
+/* Styles sur les liens */
+a       {color:#333399;}
+a:hover {color:#000000;}
+#Link a {text-decoration:none;margin-left:8px;border-bottom:1px black dotted;}
+
+/* Style sur le tagboard ^^ */
+#TagBoard {width:175px;height:465px;border:none;margin:0px;padding:0px;
+           margin-left:auto;margin-right:auto;}
+		   
+p.center img {width:450px;}
+
Binary file css/Res_Brushed/Brush_Side.png has changed
Binary file css/Res_Brushed/Brush_Title.png has changed
Binary file css/Res_Brushed/Degrade_Post.gif has changed
Binary file css/Res_Brushed/Fond_Main.jpg has changed
Binary file css/Res_Brushed/Fond_Main_bk.jpg has changed
Binary file css/Res_Brushed/Fond_Post.gif has changed
Binary file css/Res_LiteReloaded/Gimp_grayscale.jpg has changed
Binary file css/Res_OliveVerde/Fond.png has changed
Binary file css/Res_OliveVerde/FondMain.png has changed
Binary file css/Res_OliveVerde/FondPost.png has changed
Binary file css/Res_OliveVerde/FondPostContent.png has changed
Binary file css/Res_OliveVerde/FondTitre.png has changed
Binary file css/Res_OliveVerde/Gimp.jpg has changed
Binary file css/Res_OliveVerde/Gimp.png has changed
Binary file css/Res_OliveVerde/Gimp_grayscale.jpg has changed
Binary file css/Res_OliveVerde/ShellBar.gif has changed
Binary file css/Res_OliveVerde/ShellBar.png has changed
Binary file css/Res_OliveVerde/ShellClose.png has changed
Binary file css/Res_Somatic/bg_test.png has changed
Binary file css/Res_Somatic/bg_titre.png has changed
Binary file css/Res_Somatic/puce.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Somatic.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,236 @@
+/* Dual Blog, Somatic Edition */
+
+html {
+	margin:0;
+	padding:0;
+	background:#EEE; 
+	font-family:"Bitstream Vera Sans", "Lucida Grande", Tahoma, Verdana, Arial, sans serif;
+}
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0;list-style-type:none;}
+
+#Main {
+	width:798px;
+	margin:5px auto 0;
+	padding:0;
+	background:white;
+	border:1px #333 solid;
+	border-bottom:0;
+}
+
+h1 {
+	margin:0 0 150px;
+	padding:5px;
+	height:21px;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	font-size:17px;
+	background-image:url('Res_Somatic/bg_test.png');
+	position:relative;
+	z-index:3;
+}
+
+#Adresse, #SideBar dt {
+	position:absolute;
+	top:38px;
+	left:50%;
+	display:block;
+	width:132px;
+	padding-top:135px;
+	background-repeat:no-repeat;
+	background-position:2px 5px;
+	background-color:#FFF;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	border-right:1px #333 solid;
+	font-size:0.9em;
+	z-index:2;
+	cursor:pointer;
+}
+
+/* Let's give some 8-bits pngs to IE... */
+* html #Adresse {background-image:url('icons/fav_8bit.png') !important;}
+* html #About {background-image:url('icons/connect_8bit.png') !important;}
+* html #Profile {background-image:url('icons/profile_8bit.png') !important;}
+* html #Like {background-image:url('icons/like_8bit.png') !important;}
+* html #Geekness {background-image:url('icons/geek_8bit.png') !important;}
+* html #Archives {background-image:url('icons/Hank_8bit.png') !important;}
+* html #ToDo {background-image:url('icons/todo_8bit.png') !important;}
+
+#Adresse {
+	margin-left:-398px;
+	background-image:url('icons/fav.png');
+}
+
+#About {
+	margin-left:-265px;
+	background-image:url('icons/connect.png');
+}
+
+#Profile {
+	margin-left:-132px;
+	background-image:url('icons/profile.png');
+}
+
+#Like {
+	margin-left:1px;
+	background-image:url('icons/like.png');
+}
+
+#Geekness {
+	margin-left:134px;
+	background-image:url('icons/geek.png');
+}
+
+#Archives {
+	margin-left:134px;
+	background-image:url('icons/Hank.png');
+}
+
+#ToDo {
+	margin-left:267px;
+	border-right:0 !important;
+	background-image:url('icons/todo.png');
+}
+
+#SideBar dt:hover, #Adresse:hover {background-color:#dec;}
+
+.Actif {background-color:#eee !important;}
+
+#SideBar p, #Posts {margin:5px 0; padding:0;text-align:justify;}
+
+#Link, #SideBar dd  {
+	font-size:0.9em;
+	border-bottom:1px #333 solid;
+	padding:5px 10px;
+	background:url('Res_Somatic/bg_test.png') #fff;
+	height:150px;
+	overflow:auto;
+	position:absolute;
+	top:187px;
+	width:778px;
+	z-index:0;
+}
+
+#Link {display:none;}
+
+.PostContent {
+	padding:10px;
+	text-align:justify;
+	border-bottom: 1px #333 solid;
+}
+
+.PostContent h2 {
+	font-weight:bold;
+	text-align:center;
+	border:1px #666 solid;
+	margin:0 15px;
+	background:url('Res_Somatic/bg_titre.png');
+	font-size:1.2em;
+}
+
+.PostContent h2 abbr {
+	padding:2px 0;
+}
+
+#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;margin-bottom:1px;border-bottom:1px dashed;}
+#SideBar li, #Link li {line-height:1.5em;}
+#Link a {margin-left:10px;}
+#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px solid;}
+#SideBar ul, .PostContent ul {list-style:url(Res_Somatic/puce.gif) outside;}
+
+a:not([href]) {border-bottom:0 !important;}
+
+a img {
+	padding:10px;
+	margin:0 10px 10px;
+	border:1px solid #795;
+	background-image:url('Res_Somatic/bg_test.png');
+}
+
+code, blockquote {
+	border:1px #795 solid;
+	border-left-width:3px;
+	background:url('Res_Somatic/bg_test.png') #FFE;
+	padding:2px 6px;
+}
+
+p.code code {
+	white-space:pre;
+	overflow:auto;
+	display:block;
+}
+
+code {line-height:1.5em;}
+
+em, i, .i {color:#67B;}
+#Posts a {color:#795;text-decoration:none;}
+#Posts {padding-top:170px;}
+
+.mood, .gravatar, .gallerie {
+	float:left;
+	margin:1.5em 1em 0.5em 0;
+	padding:10px;
+	border:1px #795 solid;
+	background:url(Res_Somatic/bg_test.png);
+}
+
+.gravatar {
+	margin:0 1em 0 0 ;
+}
+
+.gallerie {
+	padding:1.5em;
+	width:300px;
+}
+
+.Tongue {
+	background:url(/blog/mood/light/Tongue.png) bottom right no-repeat;
+}
+
+.Neutral {
+	background:url(/blog/mood/light/Neutral.png) bottom right no-repeat;
+}
+
+.Goggle {
+	background:url(/blog/mood/light/Goggle.png) bottom right no-repeat;
+}
+
+.Clop {
+	background:url(/blog/mood/light/Clop.png) bottom right no-repeat;
+}
+
+.Cry {
+	background:url(/blog/mood/light/Cry.png) bottom right no-repeat;
+}
+
+.Oohh {
+	background:url(/blog/mood/light/Oohh.png) bottom right no-repeat;
+}
+
+.Love {
+	background:url(/blog/mood/light/Love.png) bottom right no-repeat;
+}
+
+.PostContent dd, .PostContent dt {
+	border:2px #795 solid;
+	padding-left:0.5em;
+}
+
+.PostContent dt {
+	border-width:2px 2px 0;
+	background:url(Res_Somatic/bg_test.png);
+	padding:0.3em 1em;
+}
+
+.PostContent dd {
+	border-top:1px dashed #795;
+	margin-bottom:1em;
+	padding:0 1em;
+}
+
+.PostContent dd ul {
+	padding:0;
+	list-style-position:inside;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Somatic.css_	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,214 @@
+/* Dual Blog, Somatic Edition */
+
+html, body {
+	margin:0;
+	padding:0;
+	background:#EEE; 
+	font-family:"Bitstream Vera Sans", "Lucida Grande", Tahoma, Verdana, Arial, sans serif;
+}
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0;list-style-type:none;}
+
+#Main {width:798px; margin:5px auto 0px; background:white; border:1px #333 solid;border-bottom:0px;/*padding-top:181px;*/}
+
+h1 {
+	margin:0px;
+	margin-bottom:150px;
+	padding:5px;
+	width:786px;
+	height:21px;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	font-size:17px;
+	background-image:url('Res_Somatic/bg_test.png');
+}
+
+#Adresse, #SideBar dt {
+	position:absolute;
+	top:38px;
+	left:50%;
+	display:block;
+	width:132px;
+	padding-top:135px;
+	background-repeat:no-repeat;
+	background-position:2px 5px;
+	background-color:#FFF;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	border-right:1px #333 solid;
+	font-size:0.9em;
+	z-index:2;
+	cursor:pointer;
+}
+
+/* Let's give some 8-bits pngs to IE... */
+* html #Adresse {background-image:url('icons/fav_8bit.png') !important;}
+* html #About {background-image:url('icons/connect_8bit.png') !important;}
+* html #Profile {background-image:url('icons/profile_8bit.png') !important;}
+* html #Like {background-image:url('icons/like_8bit.png') !important;}
+* html #Geekness {background-image:url('icons/geek_8bit.png') !important;}
+* html #Archives {background-image:url('icons/Hank_8bit.png') !important;}
+* html #ToDo {background-image:url('icons/todo_8bit.png') !important;}
+#Adresse {
+	margin-left:-398px;
+	background-image:url('icons/fav.png');
+}
+
+#About {
+	margin-left:-265px;
+	background-image:url('icons/connect.png');
+}
+
+#Profile {
+	margin-left:-132px;
+	background-image:url('icons/profile.png');
+}
+
+#Like {
+	margin-left:1px;
+	background-image:url('icons/like.png');
+}
+
+#Geekness {
+	margin-left:134px;
+	background-image:url('icons/geek.png');
+}
+
+#Archives {
+	margin-left:134px;
+	background-image:url('icons/Hank.png');
+}
+
+#ToDo {
+	margin-left:267px;
+	border-right:0px;
+	background-image:url('icons/todo.png');
+}
+
+#SideBar dt:hover, #Adresse:hover {background-color:#dec;}
+
+.Actif {background-color:#eee !important;}
+
+#SideBar p, #Posts {margin:5px 0px; padding:0px;text-align:justify;}
+
+#Link, #SideBar dd  {
+	font-size:0.9em;
+	border-bottom:1px #333 solid;
+	padding:5px 10px;
+	background-color:#FFF;
+	background-image:url('Res_Somatic/bg_test.png');
+	height:150px;
+	overflow:auto;
+	position:absolute;
+	top:187px;
+	width:778px;
+	z-index:0;
+}
+
+#Link {display:none;}
+
+.PostContent {
+	padding:10px;
+	text-align:justify;
+	border-bottom: 1px #333 solid;
+}
+
+.PostContent h2 {
+	font-weight:bold;
+	text-align:center;
+	border:1px #666 solid;
+	margin:0px 15px;
+	background:url('Res_Somatic/bg_titre.png');
+	font-size:1.2em;
+}
+
+.PostContent h2 abbr {
+	padding:2px 0;
+}
+
+#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;margin-bottom:1px;border-bottom:1px dashed;}
+#SideBar li, #Link li {line-height:1.5em;}
+#Link a {margin-left:10px;}
+#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px solid;}
+#SideBar ul, .PostContent ul {list-style:url(Res_Somatic/puce.gif) outside;}
+
+
+a img {padding:10px;margin:0px 10px 10px;border:1px solid #795;background-image:url('Res_Somatic/bg_test.png');}
+
+code, blockquote {border:1px #795 solid; border-left-width:3px; background:url('Res_Somatic/bg_test.png') #FFE;padding:2px 6px;}
+
+p.code code {white-space:pre;overflow:auto;display:block;/*width:758px;*/}
+
+code {line-height:1.5em;}
+
+em, i, .i {color:#67B;}
+#Posts a {color:#795;text-decoration:none;}
+#Posts {padding-top:170px;}
+
+.mood, .gravatar, .gallerie {
+	float:left;
+	margin:1.5em 1em 0.5em 0;
+	padding:10px;
+	border:1px #795 solid;
+	background:url(Res_Somatic/bg_test.png);
+}
+
+.gravatar {
+	margin:0 1em 0 0 ;
+}
+
+.gallerie {
+	padding:1.5em;
+	width:300px;
+}
+
+.Tongue {
+	background:url(/blog/mood/light/Tongue.png) bottom right no-repeat;
+}
+
+.Neutral {
+	background:url(/blog/mood/light/Neutral.png) bottom right no-repeat;
+}
+
+.Goggle {
+	background:url(/blog/mood/light/Goggle.png) bottom right no-repeat;
+}
+
+.Clop {
+	background:url(/blog/mood/light/Clop.png) bottom right no-repeat;
+}
+
+.Cry {
+	background:url(/blog/mood/light/Cry.png) bottom right no-repeat;
+}
+
+.Oohh {
+	background:url(/blog/mood/light/Oohh.png) bottom right no-repeat;
+}
+
+.Love {
+	background:url(/blog/mood/light/Love.png) bottom right no-repeat;
+}
+
+.PostContent dd, .PostContent dt {
+	border:2px #795 solid;
+	padding-left:0.5em;
+}
+
+.PostContent dt {
+	border-width:2px 2px 0;
+	background:url(Res_Somatic/bg_test.png);
+	padding:0.3em 1em;
+}
+
+.PostContent dd {
+	border-top:1px dashed #795;
+	margin-bottom:1em;
+	padding:0 1em;
+}
+
+.PostContent dd ul {
+	padding:0;
+	list-style-position:inside;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/Somatic_JS.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,14 @@
+/* Somatic_JS.css : Importé par JavaScript, dans le but de 
+   donner une apparence laissant tout accessible aux navigateurs
+   graphiques avec le JavaScript desactivé... */
+
+#SideBar dt {
+	left:50% !important;
+}
+
+#SideBar dd {
+	position:absolute;
+	top:0px;
+}
+#Link {position:absolute; top:187px !important;}
+#Posts {padding-top:170px !important;}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/admin.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,95 @@
+html {background:#eee;min-height:100.05%;}
+
+body {
+	margin:15px auto;
+	width:596px;
+	background:#fff;
+	border:1px #333 solid;
+	min-height:200px;
+}
+
+h3 {width:100%;text-align:center;display:none;}
+
+/* Formulaire : Styles généraux */
+form {padding:1em;}
+
+select {background:#f9f9f9; width:100%;}
+
+input, textarea {
+	background:#f9f9f9;
+	border:1px #999 dashed;
+	margin-top:10px;
+	width:100%;
+}
+
+textarea{height:120px;}
+
+/* Style sur les listes */
+
+ul {margin:0px 15px; padding:0px; border-left:2px solid #999;}
+li {padding:2px 15px;margin:2px 0px;list-style:circle inside;}
+
+li:hover, li.Pinned {list-style:disc inside;background:#F9F9F9;border:black dashed;border-width:1px 1px 1px 0px;padding:1px 15px;}
+
+/* Le menu */
+ul#Menu {margin:0px;padding:0px;border-width:0px;}
+ul#Menu li:last-child {border-right-width:0px;}
+ul#Menu li {display:block;float:left;padding:10px !important;margin:0px !important;border:1px #666 solid;border-left-width:0px;border-top:0px;}
+ul#Menu li:hover {background:#DEC;}
+ul#Menu li.Actif {background:#EEE;}
+ul#Menu div {display:block;padding-top:130px;width:128px;text-align:center;text-decoration:none;color:#333;background-repeat:no-repeat;}
+
+div#Brouillons	{background:url(icons/connect.png);}
+div#Posts	    	{background:url(icons/network.png);}
+div#Designs    	{background:url(icons/pictures.png);}
+div#ToDo	    	{background:url(icons/todo.png);}
+div#Infos		{width:100%;text-align:center;font-size:small;clear:both;}
+
+div[id^="Gest"]  {clear:both;padding:15px 3px;display:none;}
+
+li > .Admin {display:block;text-indent:-1000px;font-size:0.8em;}
+li:hover > .Admin, li.Pinned > .Admin {display:block;width:100%;text-align:right;font-size:0.8em;text-indent:0px;}
+.Admin a, div#GestPosts a {text-decoration:none;color:#666;font-style:italic;}
+.Admin a:hover, div#GestPosts a:hover {border-bottom:1px black dashed;}
+
+div#GestPosts > ul, div#GestPosts > ul > li {margin:0px;padding:2px;list-style:none;border-width:0px;}
+div#GestPosts > ul > li:hover {background:transparent;border-width:0px;padding:2px;}
+
+
+
+.Add {margin-bottom:15px;}
+.Add a {color:#333;text-decoration:none;border-bottom:1px black dashed;}
+.Add form {display:none;}
+
+
+#Infos a {text-decoration:none;color:#999;}
+
+#pubComment {white-space:pre;text-align:left;}
+
+/*
+	Formattage  des erreurs envoyés par le DOMParser
+*/
+parsererror, sourcetext {font-size:1em !important;font-weight:normal;background:transparent;}
+
+parsererror {border:1px black dotted;overflow:auto !important;}
+
+/* Tests */
+
+option
+{
+	background:white;
+	vertical-align:center;
+	border-bottom:1px black solid;
+	padding:2px;
+}
+
+option img
+{
+	vertical-align:middle;
+	padding:0 2em;
+}
+
+select
+{
+	height:2em;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/comment.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,33 @@
+    .Infos   {font-style:italic;}
+    #FormCommentaire {margin-top:15px;text-align:left;}
+    #Summary {display:none;}
+
+   input, textarea {background:transparent;font-family:Tahoma, Lucida Sans, 'Luxi Sans', serif;
+									font-size:11px;margin:5px;padding:1px;
+									border:1px black solid;width:95%;}
+									
+	.cal {text-align:center;border-bottom:1px black solid;padding:1em 2em;}
+	
+	.calPrev {float:left;}
+	.calNext {float:right;}
+	
+	.Date {text-transform:capitalize;}
+	
+	.Done {text-decoration:line-through;}
+	
+	.center {text-align:center;}
+	
+	#Adresse, #SideBar dt {cursor:pointer;}
+	
+	p.code code {white-space:pre;overflow:auto;display:block;}
+
+	.PostContent dt {font-weight:bold;}
+	
+	.endComment {clear:left;}
+	
+	.fold .comment {display:none;}
+	.fold:hover .comment {display:inline;}
+
+	.postInfos {clear:both; font-size:0.9em;}
+	.Tags em {font-style:normal;}
+	.Tags a {color:inherit !important;}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/comment.css_	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,29 @@
+    .Infos   {font-style:italic;}
+    #FormCommentaire {margin-top:15px;text-align:left;}
+    #Summary {display:none;}
+
+   input, textarea {background:transparent;font-family:Tahoma, Lucida Sans, 'Luxi Sans', serif;
+									font-size:11px;margin:5px;padding:1px;
+									border:1px black solid;width:95%;}
+									
+	.cal {text-align:center;border-bottom:1px black solid;padding:1em 2em;}
+	
+	.calPrev {float:left;}
+	.calNext {float:right;}
+	
+	.Date {text-transform:capitalize;}
+	
+	.Done {text-decoration:line-through;}
+	
+	.center {text-align:center;}
+	
+	#Adresse, #SideBar dt {cursor:pointer;}
+	
+	p.code code {white-space:pre;overflow:auto;display:block;}
+
+	.PostContent dt {font-weight:bold;}
+	
+	.endComment {clear:left;}
+	
+	.fold .comment {display:none;}
+	.fold:hover .comment {display:inline;}
Binary file css/icons/Hank.png has changed
Binary file css/icons/Hank_8bit.gif has changed
Binary file css/icons/Hank_8bit.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/icons/Somatic.css	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,119 @@
+/* Dual Blog, Somatic Edition */
+
+html, body {margin:0px;padding:0px; background:#EEE; font-family:"Lucida Grande", Tahoma, Verdana, Arial, sans serif;font-size:12px;}
+
+#Link, #Link li, dl, dt, dd {display:block; margin:0px;list-style-type:none;}
+
+#Main {width:798px; margin:5px auto; background:white; border:1px #333 solid;/*padding-top:181px;*/}
+
+h1 {
+	margin:0px;
+	margin-bottom:150px;
+	padding:5px;
+	width:786px;
+	height:21px;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	font-size:17px;
+	background-image:url('bg_test.png');
+}
+
+#Adresse, .SideTitle {
+	/*float:left;*/
+	position:absolute;
+	top:38px;
+	left:50%;
+	display:block;
+	width:132px;
+	padding-top:135px;
+	background:no-repeat 2px 5px;
+	text-align:center;
+	border-bottom:1px #333 solid;
+	border-right:1px #333 solid;
+	font-size:0.9em;
+}
+
+/* Let's give some 8-bits pngs to IE... */
+* html #Adresse {background-image:url('icons/fav_8bit.png') !important;}
+* html #About {background-image:url('icons/connect_8bit.png') !important;}
+* html #Profile {background-image:url('icons/profile_8bit.png') !important;}
+* html #Like {background-image:url('icons/like_8bit.png') !important;}
+* html #Geekness {background-image:url('icons/geek_8bit.png') !important;}
+* html #Archives {background-image:url('icons/Hank_8bit.gif') !important;}
+* html #ToDo {background-image:url('icons/todo_8bit.png') !important;}
+#Adresse {
+	margin-left:-398px;
+	background-image:url('icons/fav.png');
+}
+
+#About {
+	margin-left:-265px;
+	background-image:url('icons/connect.png');
+}
+
+#Profile {
+	margin-left:-132px;
+	background-image:url('icons/profile.png');
+}
+
+#Like {
+	margin-left:1px;
+	background-image:url('icons/like.png');
+}
+
+#Geekness {
+	margin-left:134px;
+	background-image:url('icons/geek.png');
+}
+
+#Archives {
+	margin-left:134px;
+	background-image:url('icons/Hank.png');
+}
+
+#ToDo {
+	margin-left:267px;
+	border-right:0px;
+	background-image:url('icons/todo.png');
+}
+
+.SideTitle:hover, #Adresse:hover {background-color:#dec;}
+
+.Actif {background-color:#eee !important;}
+
+#SideBar p, #Posts {margin:5px 0px; padding:0px;text-align:justify;}
+
+#Link, .SideContent  {
+	font-size:0.9em;
+	border-bottom:1px #333 solid;
+	padding:5px 10px;
+	background-image:url('Res_Somatic/bg_test.png');
+	max-height:180px;
+	overflow:auto;
+}
+
+#Link {display:none;}
+
+.PostContent {
+	padding:10px;
+	text-align:justify;
+	border-bottom: 1px #333 solid;
+}
+
+.PostTitle {
+	font-weight:bold;
+	text-align:center;
+	border:1px #666 solid;
+	margin:0px 15px;
+	background:url('Res_Somatic/bg_titre.png');
+}
+
+#SideBar a, #Link a {text-decoration:none;color:#666;font-style:italic;}
+#Link a {margin-left:10px;}
+#SideBar a:hover, #Link a:hover, #Posts a:hover {border-bottom:1px black dashed;}
+#SideBar ul {list-style-type:none;}
+
+a img {padding:10px;border:1px solid #795;background-image:url('Res_Somatic/bg_test.png');}
+
+i, .i {color:#67B;}
+#Posts a {color:#795;text-decoration:none;}
Binary file css/icons/apps_128X128_32bpp.png has changed
Binary file css/icons/connect.gif has changed
Binary file css/icons/connect.png has changed
Binary file css/icons/connect_8bit.png has changed
Binary file css/icons/connect_o.png has changed
Binary file css/icons/empty_128X128_32bpp.png has changed
Binary file css/icons/fav.png has changed
Binary file css/icons/fav_8bit.png has changed
Binary file css/icons/findro_128X128_32bpp.png has changed
Binary file css/icons/geek.png has changed
Binary file css/icons/geek_8bit.png has changed
Binary file css/icons/geek_b.png has changed
Binary file css/icons/geek_o.png has changed
Binary file css/icons/itunes_128X128_32bpp.png has changed
Binary file css/icons/like.png has changed
Binary file css/icons/like_8bit.png has changed
Binary file css/icons/network.png has changed
Binary file css/icons/pictures.png has changed
Binary file css/icons/profile.png has changed
Binary file css/icons/profile_8bit.png has changed
Binary file css/icons/safari_128X128_32bpp.png has changed
Binary file css/icons/studio.xcf has changed
Binary file css/icons/todo.png has changed
Binary file css/icons/todo_8bit.png has changed
Binary file css/icons/todo_b.png has changed
Binary file css/icons/todo_o.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/css/icons/top.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,178 @@
+<?php
+ if(!is_null($_SERVER['HTTP_ACCEPT']) && stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
+  header('Content-Type: application/xhtml+xml');
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <link rel='StyleSheet' type='Text/CSS' href='/blog/comment.css' />
+<?php
+   $CkStyle=$_COOKIE['style'];
+   if(is_null($CkStyle)) $CkStyle="Somatic";
+   $StyleSheets['0']=array( 0=> "OliveVerde", 1=> "OliveVerde.css");
+   $StyleSheets['1']=array( 0=> "Lite", 1=> "Lite.css");
+   $StyleSheets['2']=array( 0=> "Lite:Reloaded", 1=>"Lite_nv.css");
+   $StyleSheets['3']=array( 0=> "Brushed", 1=> "Brushed.css");
+   $StyleSheets['4']=array( 0=> ":Hover", 1=> "HoverExp.css");
+   $StyleSheets['5']=array( 0=> "Somatic", 1=>"Somatic.css");
+
+   foreach($StyleSheets as $StyleSheet) {
+    if($StyleSheet[0] == $CkStyle)
+     echo("  <link rel='StyleSheet' type='Text/CSS' href='/blog/{$StyleSheet[1]}' title='{$StyleSheet[0]}' media='screen' />\n");
+    else
+     echo("  <link rel='Alternate StyleSheet' type='Text/CSS' href='/blog/{$StyleSheet[1]}' title='{$StyleSheet[0]}' media='screen' />\n");
+   }
+   if(!empty($Titre))
+	echo("  <title>{$Titre} - Dual Blog</title>\n");
+   else
+	echo("  <title>Dual { v10 : OS Edition } Blog</title>\n");
+
+  if(stristr($_SERVER['HTTP_USER_AGENT'], "MSIE") && !$CkStyle == "Somatic")
+    echo("<style type='Text/CSS'>
+/*#Link {background:no-repeat fixed white url('/blog/GIMP.jpg') bottom right;}*/
+.PostTitle {margin-bottom:0px;}
+</style>");
+   ?>
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/blog/dualblog.atom" />
+  <link rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="/blog/dualblog.rss" />
+  <link rel="icon" type="image/png" href="/favicon.png" />
+  <meta http-equiv='content-type' content='text/html; charset=utf-8' />
+  <script type="Text/JavaScript" src="/blog/RollUp.js"></script>
+  <!--[if lt IE 7]>
+        <link rel="stylesheet" href="/IE7/ie7-html.css" type="text/css"/>
+ <![endif]-->
+  </head>
+
+  <body>
+   <div id="Main">
+<?php if(!empty($Summary)) {
+echo("
+   <q id='Summary'>
+     {$Summary}
+   </q>\n");
+   } ?>
+   <h1>Dual Blog : DeFr's Weblog</h1>
+   <div id="Adresse">
+    <span>Sites visités</span>
+   </div>
+   <ul id="Link">
+    <li><span class='b'>Mes sites</span></li>
+    <li><a href='http://defr.org/'>Mon collectif</a></li>
+    <li><a href='http://weasleyswheezes.net'>WeasleysWheezes.net, aide aux webmasters</a></li>
+    <li><a href='http://mega-poudlard.com'>Mega-Poudlard.com, là ou la magie prend vie</a></li>
+    <li><span class='b'>Weblogs</span></li>
+    <li><a href='http://ania.weasleyswheezes.net/blog/' title='Friandises'>Ania</a></li>
+    <li><a href='http://cerveau.cest-pas-pareil.net' title='Cerveau Optionnel'>Circéus</a></li>
+    <li><a href='http://www.elventroublemakers.net/roe' title='Record of Evilness'>Drakys</a></li>
+    <li><a href='http://ennaluna.pitas.com' title='Deep Mistery'>Ennaluna</a></li>
+    <li><a href='http://kevin.descoubes.free.fr/kisscoolblog' title='KissCoolBlog'>Kévin</a></li>
+    <li><a href='http://marre.cest-pas-pareil.net' title='Y en a Marre !'>Rhiannon</a></li>
+    <li><a href='http://www.elventroublemakers.net/FS' title='FlipSide'>Spider</a></li>
+    <li><a href='http://ladyzeek.pitas.com' title='Strange World'>Zeek</a></li>
+    <li><span class='b'>Sites fréquement visités</span></li>
+    <li><a href='http://www.aqua-soft.org/' title="Site dédiée  à l'obtention sur PC d'application repliquant le comportement de celles trouvées sur Mac, aux skins, icons, wallpapers...">Aqua-Soft</a></li>
+    <li><a href='http://www.deviantart.com' title='Erm, well, DeviantArt'>DeviantArt</a></li>
+    <li><a href='http://www.kingsofchaos.com' title='Text-based MMORPG'>Kings Of Chaos</a></li>
+    <li><a href='http://www.kochonland.com' title='Elevage de Kochon, Miva a réussi à me rendre addicted'>Kochonland</a></li>
+    <li><a href='http://www.mozdev.org' title='Site rassemblant les extensions programmées pour Firebird...'>MozDev.org</a></li>
+    <li><a href='http://www.mozillazine.org' title='Site de discussion sur Firebird, ses thèmes, son developpement...'>MozillaZine</a></li>
+    <li><a href='http://www.stardock.com' title="Site des créateurs d'ObjectDock et WindowBlinds entre autres">Stardock</a></li>
+    <li><a href='http://www.gimp.org/' title='Site du meilleur éditeur graphique, du moins à  mon avis ^^;'>The GIMP</a></li>
+    <li><a href='http://www.wincustomize.com' title='Rassemblement de skins pour ObjectDock, Window Blinds &amp; co'>WinCustomize</a></li>
+    <li><span class='b'>Cliques / Webrings</span></li>
+    <li><a href='http://mega-poudlard.com/Autres/JournalJedusor.asp'>Journaux de Jedusor - Mega-Poudlard.com</a></li>
+    <li><a href='http://xdaddict.weasleyswheezes.net/'>&gt;&gt; // XD Addict // &lt;&lt;</a></li>
+    <li><a href='http://duckie.sinfree.net/hxf/'>Hunter x Fanatic</a></li>
+   </ul>
+
+   <dl id="SideBar">
+    <dt class="SideTitle" id="About">About</dt>
+    <dd class="SideContent">
+     <p>Quelques informations sur cette version ? Ca va être un peu difficile étant donné que le choix a été fait de laisser au visiteur
+     le choix de l'apparence graphique de ce blog par le biais de <i>feuilles de styles alternatives</i> ( oui, je viens de pondre la traduction,
+     non je sais pas si c'est une bonne idée de traduire des termes techniques à 23h45 un 31 décembre ). Toutefois, pour ce qui est du style
+     par défaut, <i>Somatic</i>, je peux vous dire que les icones viennent du talentuex <a href='http://www.dlanham.com'>David Lanham</a>,
+     pour <a href='http://www.theiconfactory.com'>The IconFactory</a>, dans son set Somatic Windows</p>
+     <p>Quelques faits ? La magie de pouvoir changer l'apparence de ce site à volonté ( quatres versions disponible en lien ci-dessous pour
+     le moment, plus si vous utilisez un navigateur vous laissant choisir par lui-même l'apparence parce que vous aurez alors en <i>bonus</i>
+     les versions que je considère, erm, <i>expérimentales</i> ) est du essentiellement au tandem XHTML 1.1 et CSS 2.1, permettant
+     de séparer le contenu, c'est à dire les informations elles-même, de la facon dont elles sont affichés à l'écran, ce qui permet entre autre
+     ce que vous avez sous les yeux ^^;</p>
+     <ul><li><a href="#" onclick="styleSwitch.set('OliveVerde');return false;">Olive Verde</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Brushed'); return false;">Brushed</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Lite:Reloaded');return false;">Lite : Reloaded</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Somatic');return false;">Somatic</a></li>
+     </ul>
+    </dd>
+
+    <dt class="SideTitle" id="Profile">Profile</dt>
+    <dd class="SideContent">
+    <p>Franck ( Deroche Franck, oui, la parodie de James Bond est nulle, et alors ? ), 20 ans
+    est un habitant de Plaisir, France, la Terre, petite planète
+    du système solaire paumée entre Venus et Mars. Il est actuellement en école d'ingénieur
+    à l'<a href='http://www.ec-nantes.fr'>Ecole Centrale de Nantes</a> :  une école d'ingénieur
+    généraliste permettant de faire à peu près n'importe quel travail d'ingénieur en sortie.</p>
+    <p>Toutefois la spécialisation de Franck sera très certainement dans le <i>domaine informatique</i>, pour lequel
+    il éprouve une passion sans bornes. Normallement, de telles études devrait lui laisser assez
+    de temps pour qu'il puisse faire ce qu'il veut à côte, mais ce n'est que la théorie...</p>
+    <p>Enfin, Franck est en ce moment très ( très très ) <i>amoureux</i> d'une jeune demoiselle
+    particulièrement <i>brillante</i> et <i>sympathique</i>, extrement <i>jolie</i>, adepte de <i>Zelda</i> et du <i>violet</i>
+    qui se reconnaitra très certainement, et qui malheureusement n'habite pas vraiment très près de Nantes...</p>
+    </dd>
+
+    <dt class="SideTitle" id="Like">Like / Dislike</dt>
+    <dd class="SideContent">
+    <p>Qu'est-ce que Franck peut bien aimer ? Erf, bah, tout à la fois, pas grand chose et un nombre impressionant de machins qui pourrait un être normallement
+    constitué ne serait probablement rien d'autre que tout au plus des anecdotes. Toutefois, il faut bien avouer que son passe-temps majeur n'a rien de bien
+    original, puisqu'il s'agit de l'informatique, ce media des temps modernes sur lequel on entend à peu près tout et n'importe quoi. Et en ce qui concerne
+    l'informatique, on peut alors dire que Franck est on ne peut plus écléctique, touchant un peu à tout... Ce qui retient le plus son attention toutefois, en
+    ce moment du moins, reste la <span class="i">création de sites webs</span>, la <span class="i">programmation</span> et la <span class="i">customisation</span> de son environement, à un point pouvant parfois friser le ridicule...</p>
+    <p>Lorsqu'il n'est pas collé à  son écran, on a alors toutes les chances de le trouver en train de lire un bouquin, la lecture lui prenant elle aussi une partie non
+    négligeable de ses temps libres. Dans ce domaine aussi, l'eclectisme fait loi, il peut lire plus ou moins tout et n'importe quoi... Ces dernieres découvertes majeures en
+    la matiere sont probablement les bouquins de Werber ( qu'il a toutefois découvert depuis un certain temps maintenant ) et plus recement les mangas que sont <span class="i">Hunter x Hunter</span>,
+    <span class="i">Naruto</span> et surtout <span class="i">One Piece</span>, qui l'ont amenés dans un univers ou il ne s'était curieusement que rarement aventuré.</p>
+    <p>Quant à  sortir des deux occupations sus-mentionnées, il est difficile de donner une énumeration précise de ce qu'il aime faire, tant cela tant à l'anecdote : faire du cerf-volant sur la
+    plage avec le son des vagues en fond sonore, se baigner, etc.</p>
+    <p>Quant à ce qu'il n'aime pas, les réponses sont alors même pour lui moins évidente... Au niveau comportemental, c'est à dire dans ces relations avec les autres individus de l'espece humaine,
+    le tout pourrait se resumer par une formule bateau du type : <span class="i">qu'on ne respecte pas le cadre privé dans lequel il souhaite parfois se retrancher</span>... En effet, Franck aime parfois
+    se retrouver livrer à lui-même, avoir des instants bien à  lui où il n'est pas obligé d'expliquer ses agissements, et où tout simplement il n'est pas obliger de communiquer avec d'autres
+    individus à qui 'il n'a finalement rien à  dire... D'autre part, il deteste se sentir <span class="i">exploiter</span>, en mettant dans cette notion tout travail inutile pour lui, que ce soit au profit de
+    quelqu'un d'autre, ou même completement inutile à qui que ce soit. Toutefois, sa notion de l'utilitié semble legerement particulière, car passer un temps fou sur des jeux ne le dérange par
+    contre générallement pas le moins du monde...</p>
+    </dd>
+
+    <!--dt class="SideTitle" id="Geekness">Geekness</dt>
+    <dd class="SideContent">
+    <p>Etant donné qu'il a été précisé plus haut que Franck est <span class='i'>addicted</span>à l'informatique, cette section semble particulierement bienvenue. Donc :<br />
+    1. Une liste quasi-exhautive et presque à jour de sa configuration matérielle et logicielle peut être consulter <a href="javascript:pop_config()">ici</a><br />
+    2. Vous pouvez trouver ci-dessous des captures d'écran tout à  la fois du desktop et de la skin Window Blinds actuellement utilisée :<br />
+    Erm, bah, disons que vous les trouverez quand j'aurais trouvé le courage de les prendre ^^; C'est plus les mêmes qu'avant ^^;</p>
+    </dd-->
+    
+    <dt class="SideTitle" id="Archives">Archives</dt>
+    <dd class="SideContent">
+    <p>Geekness n'était pas updaté depuis un bon bout de temps, la section va donc laisser sa place à quelques choses qui devrait à priori être
+    beaucoup plus utile, puisque je compte laisser des archives accessibles ^^; Eventuellement, des petits bonus pourrait atterir dans cette section,
+    comme une liste des posts jugés les plus dignes d'interet, ou un truc de ce genre. En tout cas, pour le moment, le voici, contenant la liste des
+    archives pour le moment disponible :<br />
+    Archives :</p>
+	<ul>
+		<li><a href='http://defr.org/blog/post/2004/06'>Juin 2004</a></li>
+		<li><a href='http://defr.org/blog/post/2004/08'>Aout 2004</a></li>
+		<li><a href='http://defr.org/blog/post/2004/10'>Octobre 2004</a></li>
+		<li><a href='http://defr.org/blog/post/2004/11'>Novembre 2004</a></li>
+		<li><a href='http://defr.org/blog/post/2004/12'>Décembre 2004</a></li>
+	</ul>
+    </dd>
+
+    <dt class="SideTitle" id="ToDo">Have to do...</dt>
+    <dd class="SideContent">
+     - Finish this layout<br />
+     <span style='text-decoration:line-through;'>- Change from Kilio to Hebergement.com ! Otherwise, there'll be a problem by
+     the end of the year...</span><br />
+     <span style='text-decoration:line-through;'>- Sleep</span><br />
+     - Play to <span class="i">The Legend of Zelda : The Wind Waker</span> and to
+     <span class="i">Final Fantasy Tactics Advance</span>
+    </dd>
+
+   </dl>
+   <div id="Posts">
Binary file css/icons/zog_128X128_32bpp.png has changed
Binary file dualblog.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foot.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,189 @@
+   </div>
+   <div id="Adresse">
+    <span>Sites visités</span>
+   </div>
+   <dl id="Link">
+    <dt>Mes Sites</dt>
+    <dd>
+     <ul>
+	    <li><a href='http://defr.org/'>Mon collectif</a></li>
+	    <li><a href='http://weasleyswheezes.net'>WeasleysWheezes.net, aide aux webmasters</a></li>
+	    <li><a href='http://mega-poudlard.com'>Mega-Poudlard.com, là ou la magie prend vie</a></li>
+     </ul>
+    </dd>
+
+    <dt>Weblogs</dt>
+    <dd>
+     <ul>
+	    <li><a href='http://ania.weasleyswheezes.net/blog/' title='Friandises'>Ania</a></li>
+	    <li><a href='http://cerveau.cest-pas-pareil.net' title='Cerveau Optionnel'>Circéus</a></li>
+	    <li><a href='http://www.elventroublemakers.net/roe' title='Record of Evilness'>Drakys</a></li>
+	    <li><a href='http://ennaluna.pitas.com' title='Deep Mistery'>Ennaluna</a></li>
+	    <li><a href='http://kevin.descoubes.free.fr/kisscoolblog' title='KissCoolBlog'>Kévin</a></li>
+	    <li><a href='http://marre.cest-pas-pareil.net' title='Y en a Marre !'>Rhiannon</a></li>
+	    <li><a href='http://www.elventroublemakers.net/FS' title='FlipSide'>Spider</a></li>
+	    <li><a href='http://ladyzeek.pitas.com' title='Strange World'>Zeek</a></li>
+     </ul>
+    </dd>
+    
+    <dt>Sites fréquement visités</dt>
+    <dd>
+     <ul>
+	    <li><a href='http://www.aqua-soft.org/' title="Site dédiée  à l'obtention sur PC d'application repliquant le comportement de celles trouvées sur Mac, aux skins, icons, wallpapers...">Aqua-Soft</a></li>
+	    <li><a href='http://www.deviantart.com' title='Erm, well, DeviantArt'>DeviantArt</a></li>
+	    <li><a href='http://www.kingsofchaos.com' title='Text-based MMORPG'>Kings Of Chaos</a></li>
+	    <li><a href='http://www.kochonland.com' title='Elevage de Kochon, Miva a réussi à me rendre addicted'>Kochonland</a></li>
+	    <li><a href='http://www.mozdev.org' title='Site rassemblant les extensions programmées pour Firebird...'>MozDev.org</a></li>
+	    <li><a href='http://www.mozillazine.org' title='Site de discussion sur Firebird, ses thèmes, son developpement...'>MozillaZine</a></li>
+	    <li><a href='http://www.stardock.com' title="Site des créateurs d'ObjectDock et WindowBlinds entre autres">Stardock</a></li>
+	    <li><a href='http://www.gimp.org/' title='Site du meilleur éditeur graphique, du moins à  mon avis ^^;'>The GIMP</a></li>
+	    <li><a href='http://www.wincustomize.com' title='Rassemblement de skins pour ObjectDock, Window Blinds &amp; co'>WinCustomize</a></li>
+      </ul>    
+    </dd>
+    
+    <dt>Cliques / Webrings</dt>
+    <dd>
+     <ul>
+	    <li><a href='http://mega-poudlard.com/Autres/JournalJedusor.asp'>Journaux de Jedusor - Mega-Poudlard.com</a></li>
+	    <li><a href='http://xdaddict.weasleyswheezes.net/'>&gt;&gt; // XD Addict // &lt;&lt;</a></li>
+	    <li><a href='http://duckie.sinfree.net/hxf/'>Hunter x Fanatic</a></li>
+     </ul>
+    </dd>
+   </dl>
+
+   <dl id="SideBar">
+    <dt id="About">About</dt>
+    <dd>
+     <p>Quelques informations sur cette version ? Ca va être un peu difficile étant donné que le choix a été fait de laisser au visiteur
+     le choix de l'apparence graphique de ce blog par le biais de <i>feuilles de styles alternatives</i> ( oui, je viens de pondre la traduction,
+     non je sais pas si c'est une bonne idée de traduire des termes techniques à 23h45 un 31 décembre ). Toutefois, pour ce qui est du style
+     par défaut, <i>Somatic</i>, je peux vous dire que les icones viennent du talentuex <a href='http://www.dlanham.com'>David Lanham</a>,
+     pour <a href='http://www.theiconfactory.com'>The IconFactory</a>, dans son set Somatic Windows</p>
+     <p>Quelques faits ? La magie de pouvoir changer l'apparence de ce site à volonté ( quatres versions disponible en lien ci-dessous pour
+     le moment, plus si vous utilisez un navigateur vous laissant choisir par lui-même l'apparence parce que vous aurez alors en <i>bonus</i>
+     les versions que je considère, erm, <i>expérimentales</i> ) est du essentiellement au tandem XHTML 1.1 et CSS 2.1, permettant
+     de séparer le contenu, c'est à dire les informations elles-même, de la facon dont elles sont affichés à l'écran, ce qui permet entre autre
+     ce que vous avez sous les yeux ^^;</p>
+     <ul><li><a href="#" onclick="styleSwitch.set('OliveVerde');return false;">Olive Verde</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Brushed'); return false;">Brushed</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Lite:Reloaded');return false;">Lite : Reloaded</a></li>
+     <li><a href="#" onclick="styleSwitch.set('Somatic');return false;">Somatic</a></li>
+     </ul>
+    </dd>
+
+    <dt id="Profile">Profile</dt>
+    <dd>
+    <p>Franck ( Deroche Franck, oui, la parodie de James Bond est nulle, et alors ? ), 20 ans
+    est un habitant de Plaisir, France, la Terre, petite planète
+    du système solaire paumée entre Venus et Mars. Il est actuellement en école d'ingénieur
+    à l'<a href='http://www.ec-nantes.fr'>Ecole Centrale de Nantes</a> :  une école d'ingénieur
+    généraliste permettant de faire à peu près n'importe quel travail d'ingénieur en sortie.</p>
+    <p>Toutefois la spécialisation de Franck sera très certainement dans le <i>domaine informatique</i>, pour lequel
+    il éprouve une passion sans bornes. Normallement, de telles études devrait lui laisser assez
+    de temps pour qu'il puisse faire ce qu'il veut à côte, mais ce n'est que la théorie...</p>
+    <p>Enfin, Franck est en ce moment très ( très très ) <i>amoureux</i> d'une jeune demoiselle
+    particulièrement <em>brillante</em> et <em>sympathique</em>, extrement <em>jolie</em>, adepte de <em>Zelda</em> et du <em>violet</em>
+    qui se reconnaitra très certainement, et qui malheureusement n'habite pas vraiment très près de Nantes... Et en plus, elle ne considère même pas
+    les ordinateurs comme des choses bizarres venue d'ailleurs, pouvant même <em>programmer</em> pour le web ^^;</p>
+    </dd>
+
+    <dt id="Like">Like / Dislike</dt>
+    <dd>
+    <p>Qu'est-ce que Franck peut bien aimer ? Erf, bah, tout à la fois, pas grand chose et un nombre impressionant de machins qui pourrait un être normallement
+    constitué ne serait probablement rien d'autre que tout au plus des anecdotes. Toutefois, il faut bien avouer que son passe-temps majeur n'a rien de bien
+    original, puisqu'il s'agit de l'informatique, ce media des temps modernes sur lequel on entend à peu près tout et n'importe quoi. Et en ce qui concerne
+    l'informatique, on peut alors dire que Franck est on ne peut plus écléctique, touchant un peu à tout... Ce qui retient le plus son attention toutefois, en
+    ce moment du moins, reste la <em>création de sites webs</em>, la <em>programmation</em> et la <em>customisation</em> de son environement, à un point pouvant parfois friser le ridicule...</p>
+    <p>Lorsqu'il n'est pas collé à  son écran, on a alors toutes les chances de le trouver en train de lire un bouquin, la lecture lui prenant elle aussi une partie non
+    négligeable de ses temps libres. Dans ce domaine aussi, l'eclectisme fait loi, il peut lire plus ou moins tout et n'importe quoi... Ces dernieres découvertes majeures en
+    la matiere sont probablement les bouquins de Werber ( qu'il a toutefois découvert depuis un certain temps maintenant ) et plus recement les mangas que sont <span class="i">Hunter x Hunter</span>,
+    <em>Naruto</em> et surtout <em>One Piece</em>, qui l'ont amenés dans un univers ou il ne s'était curieusement que rarement aventuré.</p>
+    <p>Quant à  sortir des deux occupations sus-mentionnées, il est difficile de donner une énumeration précise de ce qu'il aime faire, tant cela tant à l'anecdote : faire du cerf-volant sur la
+    plage avec le son des vagues en fond sonore, se baigner, etc.</p>
+    <p>Quant à ce qu'il n'aime pas, les réponses sont alors même pour lui moins évidente... Au niveau comportemental, c'est à dire dans ces relations avec les autres individus de l'espece humaine,
+    le tout pourrait se resumer par une formule bateau du type : <em>qu'on ne respecte pas le cadre privé dans lequel il souhaite parfois se retrancher</em>... En effet, Franck aime parfois
+    se retrouver livrer à lui-même, avoir des instants bien à  lui où il n'est pas obligé d'expliquer ses agissements, et où tout simplement il n'est pas obliger de communiquer avec d'autres
+    individus à qui 'il n'a finalement rien à  dire... D'autre part, il deteste se sentir <em>exploiter</em>, en mettant dans cette notion tout travail inutile pour lui, que ce soit au profit de
+    quelqu'un d'autre, ou même completement inutile à qui que ce soit. Toutefois, sa notion de l'utilitié semble legerement particulière, car passer un temps fou sur des jeux ne le dérange par
+    contre générallement pas le moins du monde...</p>
+    </dd>
+
+    <!--dt id="Geekness">Geekness</dt>
+    <dd>
+    <p>Etant donné qu'il a été précisé plus haut que Franck est <span class='i'>addicted</span>à l'informatique, cette section semble particulierement bienvenue. Donc :<br />
+    1. Une liste quasi-exhautive et presque à jour de sa configuration matérielle et logicielle peut être consulter <a href="javascript:pop_config()">ici</a><br />
+    2. Vous pouvez trouver ci-dessous des captures d'écran tout à  la fois du desktop et de la skin Window Blinds actuellement utilisée :<br />
+    Erm, bah, disons que vous les trouverez quand j'aurais trouvé le courage de les prendre ^^; C'est plus les mêmes qu'avant ^^;</p>
+    </dd-->
+    
+    <dt id="Archives">Archives</dt>
+    <dd>
+    <p>Geekness n'était pas updaté depuis un bon bout de temps, la section va donc laisser sa place à quelques choses qui devrait à priori être
+    beaucoup plus utile, puisque je compte laisser des archives accessibles ^^; Eventuellement, des petits bonus pourrait atterir dans cette section,
+    comme une liste des posts jugés les plus dignes d'interet, ou un truc de ce genre. En tout cas, pour le moment, le voici, contenant la liste des
+    archives pour le moment disponible :<br />
+    Archives :</p>
+	<ul>
+	<?php
+	   $Data->Query("SELECT MONTH(DatePost) As Month, YEAR(DatePost) As Year, COUNT(num_mess) As Nb FROM Mess GROUP BY MONTH(DatePost), YEAR(DatePost) ORDER BY YEAR(DatePost) DESC, Month(DatePost) DESC");
+	   while(0 !== ($row = $Data->GetRow())) {
+	   		echo("
+			<li><a href='http://defr.org/blog/posts/{$row['Year']}/{$row['Month']}'>{$arMonth[$row['Month'] - 1]} {$row['Year']} </a> ( {$row['Nb']} )</li>");
+	   }
+	   ?>
+	</ul>
+    </dd>
+
+    <dt id="ToDo">Commentaires</dt>
+    <dd>
+     <!-- I should change the id, but, erm, I'll do it later, 'cause I'm lazy. Yeah, sue me 
+     <p>Voici une petite liste de chose à faire, sans ordre réellement établi, un pense bête en quelque sorte ^^;</p>
+      <ul>
+<?php
+ /*     $Data->Query("SELECT * FROM ToDo ORDER BY Done, num_thing DESC");
+      while(0 !== ($row = $Data->GetRow())) {
+       if($row['Done'] == 1)
+		echo("\t\t<li><del>{$row['Thing']}</del></li>\n");
+       else
+		echo("\t\t<li>{$row['Thing']}</li>\n");
+      }*/
+     ?>
+      </ul>
+      -->
+      <p>Voici la liste des 5 derniers commentaires fait sur ce blog, tous posts confondus. Ca devrait permettre à tout le monde ( et
+      notamment à moi-même ) de repérer les nouveaux commentaires qui arrivent, même s'ils le sont sur des posts vieux de 6 mois ^^</p>
+      <ul>
+<?php
+	$Data->Query("SELECT C.*, M.Titre FROM Commentaires C, Mess M WHERE C.MessId = M.num_mess ORDER BY num_comm DESC LIMIT 20");
+	$i = 0;
+	while(0 !== ($row = $Data->GetRow())) {
+		$i++;
+		$Titre_url = str_replace(" ", "_", strip_tags($row['Titre']));
+		$Titre_url = str_replace("-", "_", $Titre_url);
+		if(stristr($row['Adresse'], "@")) $row['Adresse'] = "mailto:" . $row['Adresse'];
+		if($i < 5) {
+		$row['Comment'] = nl2br($row['Comment']);
+		echo("
+	 <li>
+		<p>Commentaire de <a href='{$row['Adresse']}'>{$row['Auteur']}</a> sur le post <a href=\"/blog/posts/{$row['MessId']}-{$Titre_url}#c{$row['num_comm']}\">{$row['Titre']}</a> :<br />
+		{$row['Comment']}
+		</p>
+	 </li>");
+		} else {
+		$row['Comment'] = str_replace("\n", " ", strip_tags($row['Comment']));
+		if(strlen($row['Comment']) > 100) $row['Comment'] = utf8_encode(substr(utf8_decode($row['Comment']), 0, 97)) . "..."; 
+		echo("
+	<li class='fold'>
+		<p>Commentaire de  <a href='{$row['Adresse']}'>{$row['Auteur']}</a> sur le post <a href=\"/blog/posts/{$row['MessId']}-{$Titre_url}#c{$row['num_comm']}\">{$row['Titre']}</a><br />
+		 <span>{$row['Comment']}</span>
+		</p>
+	</li>");
+		}
+	}
+?>
+      </ul>	
+    </dd>
+
+   </dl>
+  </body>
+</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/class.dataaccess.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,99 @@
+<?php
+class DataAccess {
+  var $host;
+  var $user;
+  var $pass;
+  var $db;
+  var $arResult;
+  var $query;
+  var $connOpen;
+  var $_nbQueries;
+  
+  var $infos; // Cache contenant les informations sur le visiteur
+  
+  function DataAccess($host=DB_HOST, $user=DB_USER, $pass=DB_PASS) {
+   $this->host=$host;
+   $this->user=$user;
+   $this->pass=$pass;
+   $this->_nbQueries = 0;
+   $this->Connect();
+ }
+ 
+  function Connect($db=DB_NAME) {
+   if($this->connOpen == 1) return;
+   $this->db=$db;
+   $this->connOpen=1;
+   mysql_connect($this->host, $this->user, $this->pass);
+   mysql_select_db($this->db);
+  }
+  
+  function Query($query, $id=0) {
+   $this->query=$query;
+   if($this->connOpen != 1) $this->Connect();
+   $this->arResult[$id]=mysql_query($this->query);
+   if($this->connOpen != 1) $this->Close();
+   if(@$num_rows=mysql_num_rows($this->arResult[$id]))
+	return $num_rows;
+   else
+	return 0;
+  }
+  
+  function debugQuery($query, $id=0) {
+  $rv = $this->Query($query, $id);
+  if(mysql_errno() !== 0)
+	echo("<span class='menu'>\n Query : {$query}<br />\n MySQL Answer : " . mysql_error() . "</span>");
+  return $rv;
+  }
+  
+  function GetRow($id=0) {
+   if(@$row=mysql_fetch_assoc($this->arResult[$id])) {
+    foreach($row as $key => $value)
+        $row_utf[$key]=$this->utf8_ensure($value);
+    return $row_utf;
+   }
+   return 0; 
+  }
+  
+  function GetRawRow($id=0) {
+   if(@$row=mysql_fetch_array($this->arResult[$id])) {
+    return $row;
+   }
+   return 0;    
+  }
+  
+  function Close() {
+   $this->connOpen=0;
+   mysql_close();
+  }
+  
+  function getNbQueries() {
+	return $this->_nbQueries;
+  }
+  
+  function formatDate($timestamp, $decallage=2, $pattern='d/m/Y H:i:s') {
+   return gmdate($pattern, $timestamp + $decallage * 3600);
+  }
+  
+  function seems_utf8($Str) {
+     for ($i=0; $i<strlen($Str)/10 || $i < 100; $i++) {
+	if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
+	elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
+	elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
+	elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
+	elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
+	elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
+	else return false; # Does not match any model
+	for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+		if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
+		return false;
+	}
+     }
+     return true;
+  }
+  
+  function utf8_ensure($Str) {
+   return $this->seems_utf8($Str)?$Str:utf8_encode($Str);
+  }
+  
+}
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/class.domutils.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,12 @@
+<?php
+    class DOMUtils
+    {
+	public function createCDATAWrapper($doc, $wrapperName, $data)
+	{
+	    $CDATA = $doc->createCDataSection($data);
+	    $wrapper = $doc->createElement($wrapperName);
+	    $wrapper->appendChild($CDATA);
+	    return $wrapper;
+	}
+    }
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/class.requete.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,59 @@
+<?php
+/*
+	Cette classe permet de filtrer tout le contenu entrant, et permet de se dispenser de
+	toutes les super-globales.
+	Element unique pour l'ensemble de la génération, on y accède via Factory::getRequest()
+*/
+	class Requete
+	{
+		private $arData;
+		
+		public function __construct()
+		{
+			$this->loadArray($_POST, 'POST');
+			$this->loadArray($_GET, 'GET');
+			$this->loadArray($_COOKIE, 'COOKIE');
+		}
+		
+		// Chargement d'un tableau donné
+		private function loadArray($array, $name = null)
+		{
+		    $magic_quotes = (ini_get('magic_quotes_gpc') == '1');
+		    if(!is_array($array)) return;
+		    if(empty($name)) $name = md5(serialize(microtime()));
+		    foreach($array as $key => $value)
+		    {
+			$this->arData[$key][$name] = ($magic_quotes) ? $value : addslashes($value);
+		    }
+		}
+		
+		// Récuperation d'une des variables 
+		public function get($varName, $orig = null, $default = '')
+		{
+			if(!isset($this->arData[$varName])) return $default;
+			if(!empty($orig) && !isset($this->arData[$varName][$orig])) return $default;
+			if(!empty($orig)) return $this->arData[$varName][$orig];
+			return current($this->arData[$varName]);
+		}
+		
+		// Récuperation d'un tableau de variables dont le nom correspond à un pattern
+		public function matchingPattern($preg_pattern, $orig = null)
+		{
+			$returnValue = array();
+			foreach($this->arData as $key => $array)
+			{
+				if(!preg_match($preg_pattern, $key)) continue;
+				$returnValue[$key] = $this->get($key, $orig);
+			}
+			return $returnValue;
+		}
+		
+		// Equivalent de |isset|
+		public function varSet($varName, $orig = null)
+		{
+			if(!isset($this->arData[$varName])) return false;
+			if(is_null($orig)) return true;
+			return (isset($this->arData[$varName][$orig]));
+		}
+	}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/class.textutils.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,30 @@
+<?php
+    class TextUtils
+    {
+	public static function SplitTags($str)
+	{
+	    $str = str_replace("\\\"", "\"", $str);
+	    $tags = array();
+	    preg_match_all('/"([a-zA-Z0-9 ]+)"/', $str, $tests);
+	    $useful = $tests[1];
+	    foreach($useful as $match)
+	    {
+		$tags[] = $match;
+		$str = str_replace("\"{$match}\"", null, $str);
+	    }
+	    $str = preg_replace("/( )+/", " ", trim($str));
+	    if(strlen($str) > 0)
+		$tags = array_merge($tags, explode(" ", $str));
+	    asort($tags);
+	    return $tags;
+	}
+	
+	public static function DiffTagLine($old, $new, &$ajout, &$suppr)
+	{
+	    $arOld = TextUtils::SplitTags($old);
+	    $arNew = TextUtils::SplitTags($new);
+	    $ajout = array_diff($arNew, $arOld);
+	    $suppr = array_diff($arOld, $arNew);
+	}
+    }
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/config.php.dist	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,6 @@
+<?php
+  define("DB_HOST", "localhost");
+  define("DB_USER", "user");
+  define("DB_PASSWORD", "password");
+  define("DB_NAME", "database_name");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/index.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,93 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8");
+    ini_set("display_errors", "off");
+     include("classes.php");
+     $type = $_GET['type'];
+     $year = $_GET['year'];
+     $month = $_GET['month'];
+     $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year;
+     $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year;
+     $Data = new DataAccess;
+     include("top.php");
+     $Data->Connect();
+     if($type != "cal") 
+	$Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC");
+     else
+	$Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC");
+     $i=0;
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 || ($prevYear > $startDate['Year'] - 2 && $prevMonth > $startDate['month'] - 1))
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+	    echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+	    echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+	    echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+    }
+    while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) {
+    $mood = '';
+    $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+    $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+    $Titre = $Data->utf8_ensure($row['Titre']);
+    $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+    $Titre_url = str_replace("-", "_", $Titre_url);
+    $Titre_url = str_replace(array("é", "è"), "e", $Titre_url);
+    $Titre_url = str_replace("à", "a", $Titre_url);
+    $Titre_url = str_replace("ù", "u", $Titre_url);
+    $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url);
+    if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+    }
+    $nbTags = $Data->Query("
+	SELECT T.Tag
+	FROM Tags T, Lien_Tags_Posts L
+	WHERE L.idMess={$row['num_mess']} AND  L.idTag = T.idTag
+	ORDER BY T.Tag
+      ", 2);
+      $tags = '';
+      if($nbTags > 0)
+      {
+	$tags = "<span class='Tags'><em>Tags</em> :";
+	while(0 !== ($tag = $Data->GetRow(2)))
+	    $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |";
+	$tags = substr($tags, 0, -1) . ' ;</span><br />';
+      }
+
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+	<h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	{$mood}
+	{$Mess}
+	<p class='postInfos'>
+	{$tags}
+	<a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - 
+	<a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">
+	 ");
+      if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0)
+	echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?");
+      else
+       echo("Un 'tit commentaire ?");
+      echo("
+        </a>
+	</p>
+       </div>");
+     }
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1)
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+		echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+		echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+		echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+     }
+     $Data->Close();
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/index.php_	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,90 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8");
+     include("classes.php");
+     $type = $_GET['type'];
+     $year = $_GET['year'];
+     $month = $_GET['month'];
+     $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year;
+     $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year;
+     $Data = new DataAccess;
+     include("top.php");
+     $Data->Connect();
+     if($type != "cal") 
+	$Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC");
+     else
+	$Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC");
+     $i=0;
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 || ($prevYear > $startDate['Year'] - 2 && $prevMonth > $startDate['month'] - 1))
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+		echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+		echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+		echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+     }
+     while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) {
+      $mood = '';
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      $Titre_url = str_replace(array("é", "è"), "e", $Titre_url);
+      $Titre_url = str_replace("à", "a", $Titre_url);
+      $Titre_url = str_replace("ù", "u", $Titre_url);
+      $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url);
+      if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+      }
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 {$mood}
+	 {$Mess}<br />
+	 <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - 
+	 <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">
+	 ");
+      if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0)
+	echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?");
+      else
+       echo("Un 'tit commentaire ?");
+      echo("
+        </a>");
+      $nb = $Data->debugQuery("
+	SELECT T.Tag
+	FROM Tags T, Lien_Tags_Posts L
+	WHERE L.idMess={$row['num_mess']} AND  L.idTag = T.idTag
+	ORDER BY T.Tag
+      ", 2);
+      if($nb > 0)
+      {
+	  $tags = '';
+	  while(0 !== ($tag = $Data->GetRow(2)))
+	    $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> -";
+	  $tags = substr($tags, 0, -1);
+	  echo(" ; <em>Tags</em> : {$tags}");
+      }
+      echo("
+
+       </div>");
+     }
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1)
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+		echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+		echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+		echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+     }
+     $Data->Close();
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mood.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,65 @@
+<?php
+    setlocale(LC_ALL, "fr_BE.utf8@euro");
+     include("classes.php");
+     $type = $_GET['type'];
+     $year = $_GET['year'];
+     $month = $_GET['month'];
+     $prevMonth = ($month - 1)%12; if($prevMonth == 0) $prevMonth = 12; $prevYear = ($month == 1)?$year-1:$year;
+     $nextMonth = $month % 12 + 1; $nextYear = ($month == 12)?$year+1:$year;
+     $Data = new DataAccess;
+     include("top.php");
+     $Data->Connect();
+     if($type != "cal") 
+	$Data->Query("SELECT * FROM Mess Where num_version='Version 10' ORDER BY num_mess DESC");
+     else
+	$Data->Query("SELECT * FROM Mess WHERE YEAR(DatePost)={$year} AND MONTH(DatePost)={$month} ORDER BY num_mess DESC");
+     $i=0;
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1)
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+		echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+		echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+		echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+     }
+     while(($row=$Data->GetRow()) && ($i++<10 || $type == "cal")) {
+      $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+      $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+      $Titre = $Data->utf8_ensure($row['Titre']);
+      $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+      $Titre_url = str_replace("-", "_", $Titre_url);
+      echo("
+       <div class='PostContent' style='background:url(t_alphaboost.png) bottom right no-repeat;'>
+        <h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	 <img src='t.png' style='float:left;margin:1.5em 1em 0.5em 0; padding:10px; border:1px #795 solid; background:url(css/Res_Somatic/bg_test.png);' />
+	 {$Mess}<br />
+	 <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - 
+	 <a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">
+	 ");
+      if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0)
+	echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?");
+      else
+       echo("Un 'tit commentaire ?");
+      echo("
+        </a>
+       </div>");
+     }
+     if($type == "cal") {
+	echo("<div class='cal'>");
+	if($prevYear > $startDate['year'] - 1 && $prevMonth > $startDate['month'] - 1)
+		echo("<a class='calPrev' href='/blog/posts/{$prevYear}/{$prevMonth}'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	else
+		echo("<a class='calPrev'>{$arMonth[$prevMonth - 1]} {$prevYear}</a>");
+	if(($curYear == $nextYear && $nextMonth < $curMonth + 1) || ($nextYear < $curYear) )
+		echo("<a class='calNext' href='/blog/posts/{$nextYear}/" . ($month % 12 + 1)  ."'>{$arMonth[$month%12]} {$nextYear}</a>");
+	else
+		echo("<a class='calNext'>{$arMonth[$month%12]} {$nextYear}</a>");
+	echo("{$arMonth[$month - 1]} {$year}</div> ");
+     }
+     $Data->Close();
+     include("foot.php");
+?>
Binary file mood/25/Angry.png has changed
Binary file mood/25/Clop.png has changed
Binary file mood/25/Cry.png has changed
Binary file mood/25/Goggle.png has changed
Binary file mood/25/Loud.png has changed
Binary file mood/25/Love.png has changed
Binary file mood/25/Neutral.png has changed
Binary file mood/25/Oohh.png has changed
Binary file mood/25/Oups.png has changed
Binary file mood/25/Sleep.png has changed
Binary file mood/25/Thumbs.db has changed
Binary file mood/25/Tongue.png has changed
Binary file mood/25/Weird.png has changed
Binary file mood/25/Yes.png has changed
Binary file mood/25/_.png has changed
Binary file mood/Angry.png has changed
Binary file mood/Clop.png has changed
Binary file mood/Cry.png has changed
Binary file mood/Goggle.png has changed
Binary file mood/Loud.png has changed
Binary file mood/Love.png has changed
Binary file mood/Neutral.png has changed
Binary file mood/Oohh.png has changed
Binary file mood/Oups.png has changed
Binary file mood/Sleep.png has changed
Binary file mood/Tongue.png has changed
Binary file mood/Weird.png has changed
Binary file mood/Yes.png has changed
Binary file mood/_.png has changed
Binary file mood/light/Angry.png has changed
Binary file mood/light/Clop.png has changed
Binary file mood/light/Cry.png has changed
Binary file mood/light/Goggle.png has changed
Binary file mood/light/LoudClair.png has changed
Binary file mood/light/Love.png has changed
Binary file mood/light/Neutral.png has changed
Binary file mood/light/Oups.png has changed
Binary file mood/light/Sleep.png has changed
Binary file mood/light/Tongue.png has changed
Binary file mood/light/Weird.png has changed
Binary file mood/light/Yes.png has changed
Binary file mood/light/_.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rss.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,58 @@
+<?php
+
+include("classes.php");
+
+ function utf8_ensure($str) {
+  return seems_utf8($str)?$str:utf8_encode($str);
+ }
+  
+ function seems_utf8($Str) {
+  for ($i=0; $i<strlen($Str) && $i<150; $i++) {
+   if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
+   elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
+   elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
+   elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
+   elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
+   elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
+   else return false; # Does not match any model
+   for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+    if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
+    return false;
+   }
+  }
+  return true;
+ }
+
+ if(stristr($_SERVER['HTTP_ACCEPT'], "application/rss+xml"))
+	header("Content-Type: application/rss+xml; charset=utf-8");
+ else
+	header("Content-Type: text/xml; charset=utf-8");
+ echo("<?xml version='1.0' encoding='utf-8'?>\n");
+?>
+<rss version='2.0'>
+ <channel>
+  <title>Dual Blog</title>
+  <link>http://www.defr.org/blog/</link>
+  <description>Le blog de DeFr, parlant de tout et de rien ^^;</description>
+  <language>fr-fr</language>
+  <?php
+  $Data = new DataAccess();
+  $Data->Connect();
+  $Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 20");
+  while($val=$Data->GetRow()) {
+   $utf8_Mess=utf8_ensure($val['Message']);
+   $utf8_Titre=utf8_ensure($val['Titre']);
+   $dateRFC=gmdate("r", strtotime($val['DatePost']));
+  echo("
+  <item>
+   <title>{$utf8_Titre}</title>
+   <description><![CDATA[{$utf8_Mess}]]></description>
+   <pubDate>{$dateRFC}</pubDate>
+   <link>http://www.defr.org/blog/posts/{$val['num_mess']}</link>
+  </item>
+  ");
+  }
+  $Data->Close();
+  ?>
+ </channel>
+</rss>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tag.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,64 @@
+<?php
+    setlocale(LC_ALL, "fr_FR.utf8@euro", "fr_FR.utf8");
+    include("classes.php");
+    $tag = $_GET['tag'];
+    $Data = new DataAccess;
+    include("top.php");
+    $Data->Query("
+	SELECT * 
+	FROM Mess M, Tags T, Lien_Tags_Posts L
+	WHERE M.num_version='Version 10' AND T.Tag='{$tag}' AND M.num_mess=L.idMess AND L.idTag=T.idTag
+	ORDER BY num_mess DESC");
+    $i=0;
+    while(($row=$Data->GetRow()) && $i++<10) {
+    $mood = '';
+    $Mess=$Data->utf8_ensure(str_replace("<P>","<p>",str_replace("</P>","</p>", $row['Message'])));
+    $dateFormatee = strftime("%A %d %B %Y, %Hh%M", strtotime($row['DatePost']));
+    $Titre = $Data->utf8_ensure($row['Titre']);
+    $Titre_url = str_replace(" ", "_", strip_tags($Titre));
+    $Titre_url = str_replace("-", "_", $Titre_url);
+    $Titre_url = str_replace(array("é", "è"), "e", $Titre_url);
+    $Titre_url = str_replace("à", "a", $Titre_url);
+    $Titre_url = str_replace("ù", "u", $Titre_url);
+    $Titre_url = str_replace(array("î", "ï"), "i", $Titre_url);
+    if(!empty($row['Emot'])) {
+	$mood = "<img src='/blog/mood/{$row['Emot']}.png' alt='Mood : {$row['Emot']}' class='mood' />";
+	$row['Emot'] = " " . $row['Emot'];
+    }
+    $nbTags = $Data->Query("
+	SELECT T.Tag
+	FROM Tags T, Lien_Tags_Posts L
+	WHERE L.idMess={$row['num_mess']} AND  L.idTag = T.idTag
+	ORDER BY T.Tag
+      ", 2);
+      $tags = '';
+      if($nbTags > 0)
+      {
+	$tags = "<span class='Tags'><em>Tags</em> :";
+	while(0 !== ($tag = $Data->GetRow(2)))
+	    $tags .= " <a href='/blog/tags/{$tag['Tag']}'>{$tag['Tag']}</a> |";
+	$tags = substr($tags, 0, -1) . ' ;</span><br />';
+      }
+
+      echo("
+       <div class='PostContent{$row['Emot']}'>
+	<h2>{$Titre} | <span class='Date'>{$dateFormatee}</span></h2>
+	{$mood}
+	{$Mess}
+	<p class='postInfos'>
+	{$tags}
+	<a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">#{$row['num_mess']}</a> - 
+	<a href=\"/blog/posts/{$row['num_mess']}-{$Titre_url}\">
+	 ");
+      if(!is_null($row['NbCommentaires']) && $row['NbCommentaires']!=0)
+	echo("Un 'tit commentaire ( {$row['NbCommentaires']} ) ?");
+      else
+       echo("Un 'tit commentaire ?");
+      echo("
+        </a>
+	</p>
+       </div>");
+     }
+     $Data->Close();
+     include("foot.php");
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tb.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,42 @@
+<?php
+	header("Content-Type: text/xml");
+	echo("<?xml version='1.0' encoding='utf-8'?>");
+	include("classes.php");
+	$id = $_GET['id'];
+	$Data->Query("SELECT * FROM Messages WHERE num_mess=$id");
+	$post_infos = $Data->GetRow();
+	$titre = array_key_exists("title", $_POST)?$_POST['title']:"Undefined";
+	$url = array_key_exists("url", $_POST)?$_POST['url']:"#";
+	$info = array_key_exists("__info", $_POST)?$_POST['__info']:-1;
+	if($info == 1) {
+		$error = 0;
+		$message = "Some informations";
+	} else if($url == "#") {
+		$error = 1;
+		$message = "The url field is needed for trackback to do something usefull !";
+	} else if($post_infos === 0) {
+		$error = 1;
+		$message = "There's no post with this id";
+	} else {
+		$excerpt = $_POST['excerpt'];
+		$DateComment = gmdate("Y-m-d H:i:s");
+		if(strlen($excerpt) > 255) $excerpt = substr($excerpt, 0, 255) . "...";
+		$Data = new DataAccess();
+		$Data->Query("INSERT INTO Commentaires(MessId, Auteur, Adresse, Comment, DateComment, isTrackback)
+					VALUES({$id}, '{$titre}', '{$url}', '{$excerpt}', '{$DateComment}', 1)");
+		$Data->Query("UPDATE Mess SET NbCommentaires=NbCommentaires+1 WHERE num_mess={$id}");
+		$error = 0;
+		$excerpt = htmlentities(urlencode(substr(strip_tags($post_infos['Message']), 0, 252) . "...")
+	}
+	
+	echo "<response>
+ <error>$error</error>
+ <message>$message</message>
+ <engine>Dual Blog custom made PHP script</engine>
+ <encoding>UTF-8</encoding>
+ <blog>Dual Blog</blog>
+ <title>{$post_infos['Titre']}</title>
+ <url>http://defr.org/post/{$post_infos['num_mess']}</url>
+ <excerpt>$excerpt</excerpt>
+</response>";
+?>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tb_send.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,48 @@
+<?php
+	include("classes.php");
+	$Data = new DataAccess();
+	$Data->Query("SELECT * FROM Mess WHERE num_mess=255");
+	$row = $Data->GetRow();
+	$tbAddress = "http://www.defr.org/blog/tb.php?id=255";
+	$ar_tbAddress = parse_url($tbAddress);
+	if(!array_key_exists('port', $ar_tbAddress)) $ar_tbAddress['port'] = 80;
+	if(!array_key_exists('path', $ar_tbAddress)) $ar_tbAddress['path'] = '/';
+	if(array_key_exists('query', $ar_tbAddress)) $ar_tbAddress['query'] = '?' . $ar_tbAddress['query'];
+	var_export($ar_tbAddress);
+		$fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15);
+		if($fp) {
+			$genToSend = "POST {$ar_tbAddress['path']}{$ar_tbAddress['query']} HTTP/1.0\r\n";
+			$genToSend .= "Host: {$ar_tbAddress['host']}\r\n";
+			$genToSend .= "Content-Type: application/x-www-form-urlencoded \n";
+			
+			// Essai de récuperation de l'encodage...Envoie en iso si pas d'indication d'UTF...
+			$argToSend = "__info=1";
+			$toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
+			$toSend .= $argToSend;
+			echo("<pre>$toSend</pre>");
+			fwrite($fp, $toSend);
+			while(!feof($fp))
+				$result .= fgets($fp, 128);
+			fclose($fp);
+			if(!preg_match('/<encoding>(UTF-8|utf-8)<\/encoding>/msU',$result)) {
+				$row['Titre'] = utf8_decode($row['Titre']);
+				$row['Message'] = utf8_decode($row['Message']);
+				echo("Snif, utilisation d'ISO...");
+			}
+			
+			$fp = fsockopen($ar_tbAddress['host'], 80, $errno, $errstr, 15);
+			$argToSend = "title=" . htmlentities(urlencode($row['Titre'])) . "&blog_name=Dual+Blog";
+			$argToSend .= "&url=http://defr.org/blog/posts/{$row['num_mess']}&excerpt=" . htmlentities(urlencode(substr(strip_tags($row['Message']), 0, 255) . "..."));
+
+			$toSend = $genToSend . "Content-Length: " . strlen($argToSend) . "\n\n";
+			$toSend .= $argToSend;
+			echo("<pre>$toSend</pre>");
+			fwrite($fp, $toSend);
+			while (!feof($fp)) {
+				echo fgets($fp, 128);
+			}
+			fclose($fp);
+		} else {
+			echo("Pb de connexion : $errno - $errstr");
+		}
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,16 @@
+<?php
+    /*require_once('includes/class.textutils.php');
+    
+    $str1 = 'Test "3615 Ma Vie" A "Dual Blog" Yoohooo B E';
+    $str2 = 'Test "3615 Ma Vie" D Yoohooo G "A la bonne heure"';
+    
+    TextUtils::DiffTagLine($str1, $str2, $a, $b);
+    echo("<pre>");
+    var_export($a);
+    echo("</pre>");
+    echo("<pre>");
+    var_export($b);
+    echo("</pre>");*/
+    var_export(ini_get("magic_quotes_gpc"));
+    phpinfo();
+?>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testcase.html	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,30 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+    <title>Test</title>
+    <link rel='StyleSheet' type='text/css' href='css/admin.css' />
+ </head>
+ <body>
+    <form>
+    <select name='mood' id='mood'>
+		    <option value='_'><img src='/blog/mood/25/_.png' alt='' />_</option>
+		    <option value='Oups'><img src='/blog/mood/25/Oups.png' alt='' />Oups</option>
+    
+		    <option value='Oohh'><img src='/blog/mood/25/Oohh.png' alt='' />Oohh</option>
+		    <option value='Angry'><img src='/blog/mood/25/Angry.png' alt='' />Angry</option>
+		    <option value='Goggle'><img src='/blog/mood/25/Goggle.png' alt='' />Goggle</option>
+		    <option value='Cry'><img src='/blog/mood/25/Cry.png' alt='' />Cry</option>
+		    <option value='Yes'><img src='/blog/mood/25/Yes.png' alt='' />Yes</option>
+		    <option value='Loud'><img src='/blog/mood/25/Loud.png' alt='' />Loud</option>
+    
+		    <option value='Love'><img src='/blog/mood/25/Love.png' alt='' />Love</option>
+		    <option value='Neutral'><img src='/blog/mood/25/Neutral.png' alt='' />Neutral</option>
+		    <option value='Clop'><img src='/blog/mood/25/Clop.png' alt='' />Clop</option>
+		    <option value='Weird'><img src='/blog/mood/25/Weird.png' alt='' />Weird</option>
+		    <option value='Tongue'><img src='/blog/mood/25/Tongue.png' alt='' />Tongue</option>
+		    <option value='Sleep'><img src='/blog/mood/25/Sleep.png' alt='' />Sleep</option>
+    
+       </select>
+       </form>
+    </body>
+    </html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testcase.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,32 @@
+<?php
+    header("Content-Type: application/xhtml+xml");
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+    <title>Test</title>
+    <link rel='StyleSheet' type='text/css' href='css/admin.css' />
+ </head>
+ <body>
+    <form>
+    <select name='mood' id='mood'>
+		    <option value='_'><img src='/blog/mood/25/_.png' alt='' />_</option>
+		    <option value='Oups'><img src='/blog/mood/25/Oups.png' alt='' />Oups</option>
+    
+		    <option value='Oohh'><img src='/blog/mood/25/Oohh.png' alt='' />Oohh</option>
+		    <option value='Angry'><img src='/blog/mood/25/Angry.png' alt='' />Angry</option>
+		    <option value='Goggle'><img src='/blog/mood/25/Goggle.png' alt='' />Goggle</option>
+		    <option value='Cry'><img src='/blog/mood/25/Cry.png' alt='' />Cry</option>
+		    <option value='Yes'><img src='/blog/mood/25/Yes.png' alt='' />Yes</option>
+		    <option value='Loud'><img src='/blog/mood/25/Loud.png' alt='' />Loud</option>
+    
+		    <option value='Love'><img src='/blog/mood/25/Love.png' alt='' />Love</option>
+		    <option value='Neutral'><img src='/blog/mood/25/Neutral.png' alt='' />Neutral</option>
+		    <option value='Clop'><img src='/blog/mood/25/Clop.png' alt='' />Clop</option>
+		    <option value='Weird'><img src='/blog/mood/25/Weird.png' alt='' />Weird</option>
+		    <option value='Tongue'><img src='/blog/mood/25/Tongue.png' alt='' />Tongue</option>
+		    <option value='Sleep'><img src='/blog/mood/25/Sleep.png' alt='' />Sleep</option>
+    
+       </select>
+       </form>
+    </body>
+    </html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/top.php	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,50 @@
+<?php
+if(is_null($_SERVER['HTTP_ACCEPT']) || stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml'))
+  header('Content-Type: application/xhtml+xml; charset=UTF-8');
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+  <link rel='StyleSheet' type='Text/CSS' href='/blog/css/comment.css' />
+<?php
+	   $startDate = array("year" => "2004", "month" => 6);
+	   $tmpYear = $startDate['year']; $tmpMonth = $startDate['month'];
+	   $curYear = (int)gmdate("Y"); $curMonth = (int)gmdate("m");
+   $arMonth = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre");
+   $StyleSheets = array(
+   	"Somatic" => "Somatic.css",
+	"OliveVerde" => "OliveVerde.css",
+	"Lite:Reloaded" => "Lite_nv.css",
+	"Brushed" => "Brushed.css",
+	":Hover" => "HoverExp.css");
+   $CkStyle = (array_key_exists("style", $_COOKIE) && array_key_exists($_COOKIE['style'], $StyleSheets))?$_COOKIE['style']:"Somatic";
+   foreach($StyleSheets as $CSSName => $CSSHref) {
+	$t = ($CSSName == $CkStyle)?"StyleSheet":"Alternate StyleSheet";
+	echo("  <link rel='$t' type='text/css' href='/blog/css/$CSSHref' title='$CSSName' media='screen' />\n");
+   }
+   if(!empty($Titre))
+	echo("  <title>{$Titre} - Dual Blog</title>\n");
+   else
+	echo("  <title>Dual { v10 : OS Edition } Blog</title>\n");
+
+  if(stristr($_SERVER['HTTP_USER_AGENT'], "MSIE") && !$CkStyle == "Somatic")
+    echo("<style type='Text/CSS'>
+.PostTitle {margin-bottom:0px;}
+</style>");
+   ?>
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/blog/dualblog.atom" />
+  <link rel="alternate" type="application/rss+xml" title="RSS 2.0 feed" href="/blog/dualblog.rss" />
+  <link rel="icon" type="image/png" href="/favicon.png" />
+  <meta http-equiv='content-type' content='text/html; charset=utf-8' />
+  <meta name='author' content='Franck Deroche' />
+  <script type="Text/JavaScript" src="/blog/RollUp.js"></script>
+  </head>
+
+  <body id="Main">
+<?php /* if(!empty($Summary)) {
+echo("
+   <q id='Summary'>
+     {$Summary}
+   </q>\n");
+   }*/ ?>
+   <h1>Dual Blog : DeFr's Weblog</h1>
+   <div id="Posts">